BeforeRun

ConfigStruct(VaultPath=PosixPath(’/opt/note’), ExportPath=PosixPath(’/home/eric/Downloads/ericblog/content/post’), MdTo=<EnumMdTo.HugoBundle: ‘hugobundle’>, MdName=<EnumMdName.Uuidv4: ‘uuid’>, UrlPrefix=’.’, ResourceTo=<EnumResourceTo.Root: ‘root’>, UrlRewrite=<EnumUrlRewrite.RelativeMd: ‘relativemd’>, ResourceName=<EnumResourceName.Uuidv4: ‘uuid’>, ResourceAnoint=PosixPath(’.’), SlugPropertie=<EnumSlugPropertie.Uuidv4: ‘uuid’>, DateFormat=’%Y-%m-%d’, ReportDetail=True) VaultPath : /opt/note ExportPath : /home/eric/Downloads/ericblog/content/post

Test /opt/note/DataView.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/ExcludeFile.txt

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/obsibian.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/sync.bash

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/sync.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/代码揭秘从C的角度探秘计算机系统.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/1717085678076.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/20241102_173854.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/3D列印.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 16), 'tags': ['生活'], 'title': '3D列印'}

Test /opt/note/生活/Book.md

Fail PropertieParsar publish not exist or true {'uuid': '8417310c-4a0d-4aa9-89ab-79c35aeea3b3', 'tags': ['生活'], 'date': datetime.date(2025, 3, 6), 'title': 'Book'}

Test /opt/note/生活/ECommerce.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 2, 26), 'tags': ['生活'], 'title': '電子商務'}

Test /opt/note/生活/Game.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 2, 22), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/Recipe.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 2, 22), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/UP主.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 2, 22), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/台北美食地圖.md

Fail PropertieParsar publish not exist or true {'uuid': '526d64eb-f6d4-4ea6-a288-5efca2f73e06', 'tags': ['生活'], 'date': datetime.date(2025, 2, 1), 'title': '台北美食地圖'}

Test /opt/note/生活/城市尋寶-捷運踩地雷解答.md

/opt/note/生活/城市尋寶-捷運踩地雷解答.md

Set Date 2022-03-18 Set Title 城市尋寶-捷運踩地雷解答.md Set EnumSlugPropertie.Uuidv4 Slug 3c67cba4-89d7-41b1-be44-8b11aba4fe86 Export Predict folder: /home/eric/Downloads/ericblog/content/post/b8be1909-04ba-42fd-8915-295c1f230dbb Export Markdown Path: /home/eric/Downloads/ericblog/content/post/b8be1909-04ba-42fd-8915-295c1f230dbb/index.md

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '遊戲說明'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '由'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '城市謎案公司'}], 'attrs': {'url': 'https://riddlecity.cc/'}}, {'type': 'text', 'raw': '出的虛實整合遊戲,需要下載APP並開啟GPS大部分的關卡多需要定位正確才能開啟(需要付錢才有帳號權限QQ),需要遊戲本。'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '題解'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '南港'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '題本3'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解答"GO"'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '東湖'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '題本14'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解答"禮物"'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '象山'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '題本9'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解答"356"'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'G == 0'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'H == 1'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'A == 2'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'I == 4'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'N == 5'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'U == 6'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'O == 7'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Z == 8'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'L == 9'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '動物園'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '題本1'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解答"HALF"'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '台北車站'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '題本6'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解答"傘"'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '遊玩時看板已遺失'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '頂埔'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '題本2'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解答"文德"'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '解題方法應該是找到列車上消失的注音,但我列舉捷運全線二字站名'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '雙連'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '題本12'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解答"210"'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '猜捷運票價總和,北捷20元起算每次加5快'}]}] 

Propertie {'date': datetime.date(2022, 3, 18), 'tags': ['生活'], 'publish': True, 'title': '城市尋寶-捷運踩地雷解答.md', 'slug': '3c67cba4-89d7-41b1-be44-8b11aba4fe86'} Export 城市尋寶-捷運踩地雷解答.md to /home/eric/Downloads/ericblog/content/post/b8be1909-04ba-42fd-8915-295c1f230dbb/index.md

Test /opt/note/生活/外包.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 18), 'tags': ['生活'], 'title': '外包'}

Test /opt/note/生活/小吃.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 7), 'tags': ['生活'], 'publish': False}

Test /opt/note/生活/小小YouTuber推薦.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/生活/教學資源.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 5), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/水餃.md

/opt/note/生活/水餃.md

Set Date 2024-11-02 Set Title 水餃 Set EnumSlugPropertie.Uuidv4 Slug 94514de9-6691-4b0b-951c-06423ff8586c Export Predict folder: /home/eric/Downloads/ericblog/content/post/cd60b270-fe03-4a00-af5c-35e7228e3032 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/cd60b270-fe03-4a00-af5c-35e7228e3032/index.md Test unquote path Test resource /opt/note/生活/%E7%94%9F%E6%B4%BB/20241102_173854.jpg Result False Not File Or Not Exist From url %E7%94%9F%E6%B4%BB/20241102_173854.jpg Test resource /opt/note/%E7%94%9F%E6%B4%BB/20241102_173854.jpg Result False Not File Or Not Exist From url %E7%94%9F%E6%B4%BB/20241102_173854.jpg Test resource /opt/note/生活/生活/20241102_173854.jpg Result False Not File Or Not Exist From url %E7%94%9F%E6%B4%BB/20241102_173854.jpg Test resource /opt/note/生活/20241102_173854.jpg Result True /opt/note/生活/20241102_173854.jpg From url %E7%94%9F%E6%B4%BB/20241102_173854.jpg Resource Match 生活/20241102_173854.jpg Copy To 97d22af8-ef88-45f0-b552-8e2ef61f49d3.jpg

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '冷凍'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '義美豬肉 810g 122元'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '標太郎高麗菜 700g 129元'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '達人上菜豬肉高麗菜 704g 149元'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '八方雲集招牌 約560g 125元 1400g 310元'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '及第豬肉水餃 950g 139'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '巷口'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '鵝媽媽精緻手工大水餃'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../97d22af8-ef88-45f0-b552-8e2ef61f49d3.jpg'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '40顆/200'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '30e42ce0-7fb4-4b6d-a416-4d6b925e4d20', 'tags': ['生活'], 'date': datetime.date(2024, 11, 2), 'title': '水餃', 'publish': True, 'slug': '94514de9-6691-4b0b-951c-06423ff8586c'} Export 水餃.md to /home/eric/Downloads/ericblog/content/post/cd60b270-fe03-4a00-af5c-35e7228e3032/index.md

Test /opt/note/生活/生活.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2022, 1, 22), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/皮鞋.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 1, 22), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/真人公仔.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 16), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/糖心蛋.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 1, 22), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/語錄.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 1, 22), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/髮型/h0.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/髮型/h1.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/髮型/h2.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/髮型/h3.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/髮型/髮型.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 7), 'tags': ['生活']}

Test /opt/note/生活/電子設備/2024-07-13 023954.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/電子設備/2024-07-26_001941.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/電子設備/2024-07-26_003405.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/電子設備/20240709_195003.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/電子設備/Lenovo600BluetoothSilentMouse.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 9), 'tags': ['生活'], 'title': 'Lenovo 600 Bluetooth Silent Mouse'}

Test /opt/note/生活/電子設備/slim5.HTM

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/電子設備/電子設備.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 13), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/部落客/部落客.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/部落客/部落客.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 3), 'tags': ['生活'], 'title': '部落客'}

Test /opt/note/生活/車/1723639595246.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/車/1723639595353.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/車/20240827_083618.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/車/20240827_083620.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/車/機車.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 14), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/藥物/20250106_201701.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/藥物/藥物.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 1, 6), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/公車/20241123_162005.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/公車/20241123_162030.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/公車/公車.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 1, 13), 'tags': ['生活'], 'title': ''}

Test /opt/note/生活/MiniaturesMuseumOfTaiwan/20240831_171840.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/MiniaturesMuseumOfTaiwan/MiniaturesMuseumOfTaiwan.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 4, 6), 'tags': ['生活'], 'title': 'Miniatures Museum of Taiwan'}

Test /opt/note/生活/Activity/Activity.md

Fail PropertieParsar publish not exist or true {'uuid': '83166bf1-cfad-40ad-bf8f-8c24fa7eb813', 'tags': ['生活'], 'date': datetime.date(2025, 3, 4), 'title': ''}

Test /opt/note/生活/Activity/Screenshot_20250209_201201_Firefox.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2023香港遊/食物.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/1yzjvko.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/2019夏季北海道旅遊規劃書.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2019, 8, 2), 'tags': ['生活'], 'publish': False}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/3efxxzl.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/3n5tgch.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/4odpbmd.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/5opznfj.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/7ow0n2k.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/9we7nam.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/9yxcp9u.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/binzdqj.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/cqgvlm7.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/dcnxqve.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/dukrtpz.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/eaw1nvl.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/f7xt1rz.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/fdmgfn3.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/genrti8.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/girnaq3.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/hjcraog.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/hsrqvmi.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/ido71xm.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/iqtudzx.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/izfqxix.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/jbpk7vd.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/jldcim6.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/kcpkqne.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/laep5m0.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/lm8qd9j.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/lrwxgd4.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/mjij3no.gif

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/oc9afmm.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/oh8ukgj.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/oohzkxm.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/q0vc4ks.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/qhdn1kb.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/rlytng0.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/rokltdd.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/rqsqdwg.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/rs9feg1.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/tqdn1vr.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/uithln0.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/umg6227.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/vocdnsg.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/w50gwov.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/w5wbt6l.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/wlliurm.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/ygy4ov0.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/zejfgid.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019夏季北海道旅遊規劃書/zmpx9p7.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/0wly8oo.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/2019-2九州之旅.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2019, 1, 29), 'tags': ['生活'], 'publish': False}

Test /opt/note/生活/2019九州之旅/5ru9fm1.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/9ohbdsc.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/cgnekt5.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/exjdg37.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/moeyfwf.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/nenc44n.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/nhv7kvi.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/生活/2019九州之旅/xgfk4se.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/冷知識/bYAQt2Ei.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/冷知識/冷知識.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/冷知識/古代开荒多難-Source.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/冷知識/古代开荒多難.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/冷知識/日本韓國和台灣2億人口超級大都會區.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 1, 11), 'tags': ['冷知識'], 'title': '日本、韓國和台灣:2億人口超級大都會區'}

Test /opt/note/冷知識/液滴(如雨水)在整个下降过程中的形状是如何变化的.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/冷知識/金屬鉛筆.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/Templater/Publish.md

/opt/note/Templater/Publish.md

Set Date <% tp.file.creation_date(“YYYY-MM-DD”) %> Set Title Publish.md Set EnumSlugPropertie.Uuidv4 Slug 8acd50e4-b41a-426e-a169-0b8587ed483b Export Predict folder: /home/eric/Downloads/ericblog/content/post/2ff3e621-c898-4462-bdb3-d22f43d5f26c Export Markdown Path: /home/eric/Downloads/ericblog/content/post/2ff3e621-c898-4462-bdb3-d22f43d5f26c/index.md

1
 [{'type': 'blank_line'}] 

Propertie {'uuid': '<% tp.user.uuidv4() %>', 'tags': ['<% tp.file.folder(true) %>'], 'date': '<% tp.file.creation_date("YYYY-MM-DD") %>', 'title': 'Publish.md', 'publish': True, 'slug': '8acd50e4-b41a-426e-a169-0b8587ed483b'} Export Publish.md to /home/eric/Downloads/ericblog/content/post/2ff3e621-c898-4462-bdb3-d22f43d5f26c/index.md

Test /opt/note/Templater/Topic.md

Fail PropertieParsar publish not exist or true {'date': '<% tp.file.creation_date("YYYY-MM-DD") %>', 'tags': ['<% tp.file.folder(true) %>'], 'title': ''}

Test /opt/note/Templater/uuidv4.js

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Ssci/Ssci.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 12, 12), 'tags': ['Ssci'], 'title': ''}

Test /opt/note/Sci/Are_Anime_Titties_Aerodynamic.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/AstronomyPictureOfTheDay.md

/opt/note/Sci/AstronomyPictureOfTheDay.md

Set Date 2023-02-05 Set Title Astronomy Picture Of The Day Set EnumSlugPropertie.Uuidv4 Slug 3d21bcf9-1499-47f8-a150-5f411a2a0f3b Export Predict folder: /home/eric/Downloads/ericblog/content/post/203d2c8d-ffd7-486e-a331-d5cb84d5ed45 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/203d2c8d-ffd7-486e-a331-d5cb84d5ed45/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '每天一幅不同的影像或照片,並由專業天文學家簡明的解說,帶你遨遊迷人的宇宙。'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'http://sprite.phys.ncku.edu.tw/astrolab/mirrors/apod/apod.html'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '成大翻譯的中文'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'https://apod.nasa.gov/apod/astropix.html'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Nasa 原站'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '488a87b7-ddcc-4922-aef7-a6362cc6e750', 'tags': ['Sci'], 'date': datetime.date(2023, 2, 5), 'title': 'Astronomy Picture Of The Day', 'publish': True, 'slug': '3d21bcf9-1499-47f8-a150-5f411a2a0f3b'} Export AstronomyPictureOfTheDay.md to /home/eric/Downloads/ericblog/content/post/203d2c8d-ffd7-486e-a331-d5cb84d5ed45/index.md

Test /opt/note/Sci/Sci.md

Fail PropertieParsar publish not exist or true {'uuid': 'f8b7f8e8-5836-4f87-b5a2-fa6d023822e5', 'tags': ['Sci'], 'date': datetime.date(2022, 1, 1), 'title': ''}

Test /opt/note/Sci/論文帶貨.md

/opt/note/Sci/論文帶貨.md

Set Date 2023-03-04 Set Title 論文帶貨 Set EnumSlugPropertie.Uuidv4 Slug 4f4e2b9f-7ad8-4164-933b-65ca6b7e70a5 Export Predict folder: /home/eric/Downloads/ericblog/content/post/02a10613-ba2d-4845-b9a2-282827c21461 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/02a10613-ba2d-4845-b9a2-282827c21461/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': '复旦团队用喝茶看见人体经络'}], 'attrs': {'url': 'https://www.bilibili.com/video/BV15q4y1E7Mn'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 5}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Comparative analysis of global consumer behaviour in the context of different manual dishwashing methods'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'DOI:10.1111/j.1470-6431.2011.01051.x'}], 'attrs': {'url': 'http://dx.doi.org/10.1111/j.1470-6431.2011.01051.x'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Bosh付錢的各國人洗碗的耗水量潔淨程度研究,結論為Bosh洗碗機表現最好'}]}, {'type': 'blank_line'}] 

Propertie {'uuid': 'd39aafc5-cb46-40cc-8d25-d49b9b9ad6c6', 'tags': ['Sci'], 'date': datetime.date(2023, 3, 4), 'title': '論文帶貨', 'publish': True, 'slug': '4f4e2b9f-7ad8-4164-933b-65ca6b7e70a5'} Export 論文帶貨.md to /home/eric/Downloads/ericblog/content/post/02a10613-ba2d-4845-b9a2-282827c21461/index.md

Test /opt/note/Sci/WeakInteraction/QuestionOfParityConservationInWeakInteractions.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/WeakInteraction/WeakInteraction.md

Fail PropertieParsar publish not exist or true {'uuid': 'c6508834-1a2e-47ad-a69d-635e87fe9f15', 'tags': ['Sci/WeakInteraction'], 'date': datetime.date(2025, 3, 5), 'title': 'Weak Interaction'}

Test /opt/note/Sci/Sinica2024/DD0nYwp.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/Sinica2024/FEi1kth.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/Sinica2024/IY_e95a.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/Sinica2024/JeDvf9U.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/Sinica2024/Ndj4z1H.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/Sinica2024/Sinica2024.md

Fail PropertieParsar publish not exist or true {'uuid': '866c3d4f-1a05-4b36-a228-f365a885891d', 'tags': ['Sci'], 'date': datetime.date(2024, 10, 11), 'title': 'Sinica 2024', 'publish': False}

Test /opt/note/Sci/Sinica2024/njyY1Jv.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/Sinica2024/ppBDtDm.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/Sinica2024/s10189-022-00161-x.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Sci/BlackHole/BlackHole.md

Fail PropertieParsar publish not exist or true {'uuid': '46db3869-957b-44f9-b971-7150a75c3678', 'tags': ['Sci/BlackHole'], 'date': datetime.date(2025, 3, 6), 'title': 'Black Hole'}

Test /opt/note/Sci/BlackHole/DoBlackHoleshaveSingularities.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Protech/0a3734f40a7f02f4a6e2a624e8379af0.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Protech/2024-06-28T102912.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Protech/2024-07-30T165119.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Protech/2024-07-30T165154.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Protech/2024-08-05T165604.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Protech/20240906T143202.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Protech/5105.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 1, 16), 'tags': ['Protech'], 'title': ''}

Test /opt/note/Protech/EnablingUsartDebugWillPreventTheSystemFromBooting.txt

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Protech/FirmwareApplicationSection.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 2), 'tags': ['Protech'], 'title': 'Firmware Application Section'}

Test /opt/note/Protech/KR7230.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 1), 'tags': ['Protech']}

Test /opt/note/Protech/MemoryRandomAccess.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 12, 6), 'tags': ['Protech'], 'title': ''}

Test /opt/note/Protech/T01A.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 30), 'tags': ['Protech'], 'title': ''}

Test /opt/note/Protech/T01T.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 28), 'tags': ['Protech']}

Test /opt/note/Protech/聯絡單.md

Fail PropertieParsar publish not exist or true {'uuid': '2737cf56-cf43-4452-aabe-e6747701049d', 'tags': ['Protech'], 'date': datetime.date(2025, 3, 12), 'title': ''}

Test /opt/note/Protech/變更聲請單.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 28), 'tags': ['Protech'], 'publish': False}

Test /opt/note/Pier/Cl.md

Fail PropertieParsar publish not exist or true {'uuid': '6ee6b514-81f9-467d-9654-168c96921c51', 'tags': ['Pier'], 'date': datetime.date(2025, 3, 13), 'title': '', 'publish': False}

Test /opt/note/Pier/F.md

Fail PropertieParsar publish not exist or true {'uuid': '6d5be935-da26-4d0c-9768-e0434d37fe10', 'tags': ['Pier'], 'date': datetime.date(2025, 3, 14), 'title': '', 'publish': False}

Test /opt/note/Pier/Np.md

Fail PropertieParsar publish not exist or true {'uuid': 'e15c1534-2898-4a42-8c41-26d8ec73b9ef', 'tags': ['Pier'], 'date': datetime.date(2025, 3, 14), 'title': '', 'publish': False}

Test /opt/note/Pier/Sq.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 3, 6), 'tags': ['Pier'], 'title': ''}

Test /opt/note/Math/CmputerAlgebra.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 11, 30), 'tags': ['Math']}

Test /opt/note/Math/DiscreteMathematics.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/Math/Geometry.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/Math/IrrationalNumber.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 9, 15), 'tags': ['Math']}

Test /opt/note/Math/LinearAlgebra.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/Math/Math.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/Math/Pi.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/Math/PrimeNumber.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 10, 27), 'tags': ['Math'], 'title': 'Prime Number'}

Test /opt/note/Math/Probability.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 12, 1), 'tags': ['Math']}

Test /opt/note/Math/ProbabilityCheatsheet.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Math/ProgressivelyFiniteGame.md

Fail PropertieParsar publish not exist or true {'uuid': 'e3c83fa2-10d8-4481-b683-cf9c863d8832', 'tags': ['Math'], 'date': datetime.date(2024, 10, 8), 'title': 'Progressively Finite Game', 'publish': False}

Test /opt/note/Math/Software.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/Math/mitre_presentation.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Math/看不懂的東西.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/Math/Source/Calculus1.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Math/Source/Calculus2.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Math/Source/Calculus3.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Math/Source/MathematicsForComputerScience.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Math/Source/PreCalculus.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Math/Source/Source.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 12, 1), 'tags': ['Math']}

Test /opt/note/Math/FoundationOfMathematic/BeginningAndIntermediateAlgebra.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/Math/FoundationOfMathematic/FoundationOfMathematic.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 12, 1), 'tags': ['Math']}

Test /opt/note/Math/FoundationOfMathematic/Trigonometry.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/CS.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Coscup2024.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 5), 'tags': ['CS'], 'title': ''}

Test /opt/note/CS/GameStream.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Git.md

/opt/note/CS/Git.md

Set Date 2023-02-20 Set Title Git.md Set EnumSlugPropertie.Uuidv4 Slug 5057251e-2941-4f42-aade-234258264221 Export Predict folder: /home/eric/Downloads/ericblog/content/post/48a014af-4d67-4c95-9edf-c4523d7d1f9b Export Markdown Path: /home/eric/Downloads/ericblog/content/post/48a014af-4d67-4c95-9edf-c4523d7d1f9b/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Git Server'}]}, {'type': 'block_code', 'raw': 'git init --bare\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '會產生一個沒有工作目錄的 git repo'}]}, {'type': 'block_code', 'raw': 'git clone ssh://UserName@host.com:port/path/to/repo\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用 ssh 拉遠端機器的git repo回來'}]}, {'type': 'block_code', 'raw': 'git clone /port/path/to/repo\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'git local clone'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'File Permission'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果在 git 中放可執行檔,git 可能不會正確給予可執行權限,導致每次 pull 都會改變權限'}]}, {'type': 'block_code', 'raw': 'git ls-tree HEAD\n', 'style': 'fenced', 'marker': '```'}, {'type': 'block_code', 'raw': '100644 blob 03d73c7753ad8624326cc21c84f4bf6cff665111    .gitignore\n100644 blob 28ad11c0d207a9cef0b588eb1eb1925eb9aa0e0c    .gitmodules\n100755 blob ab6b28bd6514f4ea3d39a3361c9461ba5e4752dc    README.md\n040000 tree e872376a7169a3d136aa9e82b8755765e1393a04    etc\n040000 tree 26431089c1aaa47c277ffe8363c66e7cd54d9abe    prvl\n160000 commit 1772dafe7241dcc84a710f2b59d3f53eceae1afb  quote_generate\n040000 tree 5e754b8b1284727eb640080a04d07199425df7c0    usr\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '他會列出檔案跟資料夾的 hash,資料夾可以用 hash 繼續爬樹'}]}, {'type': 'block_code', 'raw': 'git update-index --chmod=+x script.sh\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用檔名改權限, hash 沒用權限只能+x, -x 數字沒用'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '登入權杖'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在某些機器上 git 預設不存登入權杖,下面的命令可以使儲存庫儲存登入權杖,登入權杖在 Linux 預設明文存在'}, {'type': 'codespan', 'raw': '~/.git-credentials'}]}, {'type': 'block_code', 'raw': 'git config --global credential.helper store\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '快取登入權杖,避免它存在磁碟上'}]}, {'type': 'block_code', 'raw': "git config --global credential.helper 'cache --timeout=3600'\n", 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Submodule'}]}, {'type': 'block_code', 'raw': 'git config submodule.my-submodule.url "https url for the submodule"\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '更改 Submodule URL'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '歷史'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Git 的故事:這一次沒這麼好玩'}], 'attrs': {'url': 'https://blog.brachiosoft.com/posts/git/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Git 起源歷史的詳細文章'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Branch'}]}, {'type': 'block_code', 'raw': 'git checkout -b <branch-name>\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '將跟蹤分支設為 branch-name 如果不存在就創建'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '移動分支到指定 Commit'}]}, {'type': 'block_code', 'raw': 'git switch -C <branch-name> [<start-point>]\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '強制移動分支到指定 commit ,'}, {'type': 'codespan', 'raw': '-C'}, {'type': 'text', 'raw': ' C 大寫分支必須存在,'}, {'type': 'codespan', 'raw': '-c'}, {'type': 'text', 'raw': ' c 小寫分支必須不存在(Git 2.23.0 版以上)'}]}, {'type': 'block_code', 'raw': 'git reset --hard <new-tip-commit>\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '將現在指向的分支移動到 new-tip-commit,但實際操做時有可能斷頭'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'gitignore'}]}, {'type': 'block_code', 'raw': 'git clean -fX\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '清除 gitignore 中包含的檔案'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'github/gitignore'}], 'attrs': {'url': 'https://github.com/github/gitignore'}}, {'type': 'text', 'raw': ' gitignore 範本集合'}]}, {'type': 'block_code', 'raw': "*.a # ignore all .a files\n!lib.a # but do track lib.a, even though you're ignoring .a files above\n/TODO  # only ignore the TODO file in the current directory, not subdir/TODO\nbuild/ # ignore all files in any directory named build\ndoc/*.txt    # ignore doc/notes.txt, but not doc/server/arch.txt\ndoc/**/*.pdf # ignore all .pdf files in the doc/ directory and any of its subdirectories\n", 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Pattern Matching'}], 'attrs': {'url': 'https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '正斜線 ( '}, {'type': 'codespan', 'raw': '/'}, {'type': 'text', 'raw': ') 開始模式以避免遞歸'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '正斜線 ( '}, {'type': 'codespan', 'raw': '/'}, {'type': 'text', 'raw': ') 結束模式來指定目錄'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Configuration'}]}, {'type': 'block_code', 'raw': 'git config --list\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出 .git/config 的設定值'}]}, {'type': 'block_code', 'raw': 'git config --list --show-origin\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出所有 git 的設定值及設定該值的設定檔'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Clone'}]}, {'type': 'block_code', 'raw': 'git clone --depth 5 https://github.com/torvalds/linux.git\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '限制最深 clone 的樹層數,減少 clone 的資料量(大庫不需要歷史紀錄時很好用)'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Git Revisions'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '指定 Git 的修訂版本和範圍'}]}, {'type': 'block_code', 'raw': 'git diff HEAD..84dd02d464488a58c177271846157b45e7d587b6 \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '指定範圍,HEAD 到特定 commit'}]}, {'type': 'block_code', 'raw': 'git show HEAD^2\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'HEAD 前兩個節點'}]}, {'type': 'block_code', 'raw': 'git show <refname>\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '&lt;refname&gt;'}, {'type': 'text', 'raw': ',例如 master、Heads/master、refs/heads/master'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '一個象徵性的參考名稱,以下格式有效(包括但不限於)'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'refs/tags/&lt;refname&gt;'}, {'type': 'text', 'raw': ' Tag 名稱'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'refs/heads/&lt;refname&gt;'}, {'type': 'text', 'raw': ' 本地分支名稱'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'refs/remotes/&lt;refname&gt;'}, {'type': 'text', 'raw': '  遠端分支名稱'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'File Change History'}]}, {'type': 'block_code', 'raw': 'gitk <filename>\ngitk --follow <filename>\ngit log --follow -p <filename>\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Gitlab'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Access Token'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '2023 年後如果要用 HTTPS  協議 clone gitlab 上的專案,不能再用 gitlab 的登入密碼作為權杖,要為每一個專案創造一個 Access Token(在 Settings > Access Tokens),並用以下 url clone 專案'}]}, {'type': 'block_code', 'raw': 'git clone https://<your-username>:<your-pat>@gitlab.com/<your-username>/<your-repository>.git\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果登入時被問密碼,給 your-pat'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '關聯 SSH 金鑰'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '貼上公鑰時要注意最後是否有空格'}]}] 

Propertie {'date': datetime.date(2023, 2, 20), 'tags': ['CS'], 'publish': True, 'title': 'Git.md', 'slug': '5057251e-2941-4f42-aade-234258264221'} Export Git.md to /home/eric/Downloads/ericblog/content/post/48a014af-4d67-4c95-9edf-c4523d7d1f9b/index.md

Test /opt/note/CS/Journal.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 3, 13), 'tags': ['CS'], 'publish': False}

Test /opt/note/CS/Markdown.md

Fail PropertieParsar publish not exist or true {'uuid': '7c6a9c3c-76b1-4621-9576-00b5a0a5d54d', 'tags': ['CS'], 'date': datetime.date(2025, 2, 8), 'title': 'Markdown'}

Test /opt/note/CS/Obsidian.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 3, 3), 'tags': ['CS'], 'publish': False}

Test /opt/note/CS/SearchEngine.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 11), 'tags': ['CS'], 'title': 'Search Engine'}

Test /opt/note/CS/Source.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/WorkflowAutomationTool.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 12, 19), 'tags': ['CS']}

Test /opt/note/CS/rfmswg.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 15), 'tags': ['CS'], 'title': 'rfmswg'}

Test /opt/note/CS/Windows/2024-07-11 112321.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Windows/BypassWindowsDefender.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Windows/BypassWindowsDefender.md

Fail PropertieParsar publish not exist or true {'title': 'Bypass windows defender', 'date': datetime.date(2024, 3, 23), 'tags': ['CS/Windows'], 'publish': False}

Test /opt/note/CS/Windows/MinGW32.md

/opt/note/CS/Windows/MinGW32.md

Set Date 2022-11-07 Set Title MinGW32 Set EnumSlugPropertie.Uuidv4 Slug ebe80c06-49d6-473f-9969-ddf5d49cde70 Export Predict folder: /home/eric/Downloads/ericblog/content/post/800d5a2a-0656-44c2-a90f-a0b083546e12 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/800d5a2a-0656-44c2-a90f-a0b083546e12/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'CreateProcess'}]}, {'type': 'block_code', 'raw': 'process_begin: CreateProcess(NULL, /c/MinGW/bin/mingw32-gcc hello.c -o hello.exe, ...) failed.\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '不論/c/MinGW/bin/mingw32-gcc(UNIX PATH) 還是C:\\MinGW\\bin\\mingw32-gcc(Window Path)多不行,需要把/c/MinGW/bin/加入環境變數直接呼叫mingw32-gcc,建議直接改 Makefile'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'bash'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '改環境變數要去Windows進階使用者設定改,export,set多沒用'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Undef'}]}, {'type': 'block_code', 'raw': 'CROSS_PREFIX=mingw32-\nCC=$(CROSS_PREFIX)gcc -U _WIN32\n\nall:\n\t$(CC) hello.c -o hello.exe\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'make'}}, {'type': 'block_code', 'raw': '#include <stdio.h>\nint main(){\n\tprintf("Hello World!\\n");\n\t#if defined(_WIN32)\n\tprintf("Defined _WIN32.\\n");\n\t#endif\n\treturn 0;\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'block_code', 'raw': 'Hello World!\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'mingw 用 -U 作為旗標確定可以 undefine mingw取消預定義的_WIN32'}]}, {'type': 'block_code', 'raw': 'CROSS_PREFIX=mingw32-\nCC=$(CROSS_PREFIX)gcc\n\nall:\n\t$(CC) hello.c -o hello.exe\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'make'}}, {'type': 'block_code', 'raw': '#include <stdio.h>\n#undef _WIN32\nint main(){\n\tprintf("Hello World!\\n");\n\t#if defined(_WIN32)\n\tprintf("Defined _WIN32.\\n");\n\t#endif\n\treturn 0;\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'block_code', 'raw': 'Hello World!\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'undef _WIN32 也可以取消預定義的_WIN32'}]}] 

Propertie {'uuid': '938a1624-d8a4-45d5-8c4a-7428802cde46', 'tags': ['CS/Windows'], 'date': datetime.date(2022, 11, 7), 'title': 'MinGW32', 'publish': True, 'slug': 'ebe80c06-49d6-473f-9969-ddf5d49cde70'} Export MinGW32.md to /home/eric/Downloads/ericblog/content/post/800d5a2a-0656-44c2-a90f-a0b083546e12/index.md

Test /opt/note/CS/Windows/NewTechnologiesFileSystem.asciidoc

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Windows/PE.md

/opt/note/CS/Windows/PE.md

Set Date 2024-07-10 Set Title Windows PE Set EnumSlugPropertie.Uuidv4 Slug 75d165c3-b46d-4e6a-a030-bd72fcacadf5 Export Predict folder: /home/eric/Downloads/ericblog/content/post/87299beb-3e42-41f8-b056-5cc936f71d48 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/87299beb-3e42-41f8-b056-5cc936f71d48/index.md Test unquote path Test resource /opt/note/CS/Windows/CS/Windows/2024-07-11%20112321.png Result False Not File Or Not Exist From url CS/Windows/2024-07-11%20112321.png Test resource /opt/note/CS/Windows/2024-07-11%20112321.png Result False Not File Or Not Exist From url CS/Windows/2024-07-11%20112321.png Test resource /opt/note/CS/Windows/CS/Windows/2024-07-11 112321.png Result False Not File Or Not Exist From url CS/Windows/2024-07-11%20112321.png Test resource /opt/note/CS/Windows/2024-07-11 112321.png Result True /opt/note/CS/Windows/2024-07-11 112321.png From url CS/Windows/2024-07-11%20112321.png Resource Match CS/Windows/2024-07-11 112321.png Copy To 6cd39417-d0ad-4962-bedc-d31eb98fd457.png

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Windows\xa0Portable Executable (PE) and Common Object File Format (COFF) files 檔案格式'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'PE32 表示 X86 32bit 機器'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'PE32+ 表示 X86-64 64bit 機器'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'PE Format'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/debug/pe-format'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '官方完整格式說明'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '一定由 DOS Header 開始,開頭前兩個 byte 為 0x4D4A'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'NT Headers'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': 'typedef struct _IMAGE_NT_HEADERS64 {\n    DWORD Signature; // PE 簽名\n    IMAGE_FILE_HEADER FileHeader;\n    IMAGE_OPTIONAL_HEADER64 OptionalHeader;\n} IMAGE_NT_HEADERS64, *PIMAGE_NT_HEADERS64;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '64 和 32 位元的 OptionalHeader 結構不一樣'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'FileHeade'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': ' typedef struct _IMAGE_FILE_HEADER {\n  WORD    Machine;                       // 平台,intel 386 為 0x014c,intel 64 為 0x0200\n  WORD    NumberOfSections;              // Section 數量,最多 96 個字節\n  DWORD   TimeDateStamp;                 // 編譯日期\n  DWORD   PointerToSymbolTable;\n  DWORD   NumberOfSymbols;\n  WORD    SizeOfOptionalHeader;          // OptionalHeader 大小, 32 位通常為 E0,64 位通常為 F0\n  WORD    Characteristics;               // 檔案屬性,EXE 通常為 010f,DLL 通常為 210e\n} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '重要的只有 Machine, TimeDateStamp, Characteristics'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Optional Header'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': 'typedef struct _IMAGE_OPTIONAL_HEADER {\n    //\n    // Standard fields.\n    //\n\n    WORD    Magic;                       // 簽名, 107h = ROM Image, 10Bh = EXE Image,20Bh = PE32+\n    BYTE    MajorLinkerVersion;          // Linker 版本號\n    BYTE    MinorLinkerVersion;\n    DWORD   SizeOfCode;                  // 所有含有程式碼的 Section 大小\n    DWORD   SizeOfInitializedData;       // 所有含有初始化數據的 Section 大小\n    DWORD   SizeOfUninitializedData;     // 所有含位未始化數據的 Section 大小(不佔用檔案空間,載入記憶體後才會分配空間)\n    DWORD   AddressOfEntryPoint;         // Process 執行入口 RVA(距離 PE 載入後地址的距離,病毒和加密程式都會修改其值,從而獲得程式的控制權;對於 DLL,如果沒有入口函式,那麼就是 0;對於驅動其值為初始化的函式地址)\n    DWORD   BaseOfCode;                  // 程式碼的 Section 的起始 RVA(通常跟在 NT Header 後)\n    DWORD   BaseOfData;                  // 數據的 Section 的起始 RVA \n\n    //\n    // NT additional fields.\n    //\n\n    DWORD   ImageBase;                   // Process 建議的載入地址\n    DWORD   SectionAlignment;            // 記憶體中的 Section 對齊值\n    DWORD   FileAlignment;               // 檔案中的 Section 對齊值\n    WORD    MajorOperatingSystemVersion; // OS 版本號\n    WORD    MinorOperatingSystemVersion;\n    WORD    MajorImageVersion;           // PE 版本號\n    WORD    MinorImageVersion;\n    WORD    MajorSubsystemVersion;       // 需要的 Subsystem 版本號\n    WORD    MinorSubsystemVersion;\n    DWORD   Win32VersionValue;           // 未使用,必須為 0\n    DWORD   SizeOfImage;                 // 記憶體中整個 PE 檔案的 image 大小\n    DWORD   SizeOfHeaders;               // 所有的 Header 與 Section Header 加起來的大小\n    DWORD   CheckSum;                    // 檢驗值,一般文件為 0,DLL 和 SYS 則會有其設定的值\n    WORD    Subsystem;                   // 檔案子系統\n    WORD    DllCharacteristics;          // DLL 檔案特性\n    DWORD   SizeOfStackReserve;          // 初始化時保留的 stack 大小 (預設 1M)\n    DWORD   SizeOfStackCommit;           // 初始化時實際給予的 stack 大小 (預設 4K)\n    DWORD   SizeOfHeapReserve;           // 初始化時保留的 Heap 大小 (預設 1M)\n    DWORD   SizeOfHeapCommit;            // 初始化時實際給予的 Heap 大小 (預設 4K)\n    DWORD   LoaderFlags;                 // 加載旗幟,通常是 0\n    DWORD   NumberOfRvaAndSizes;         // 數據目錄的數量\n    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; // 數據目錄的陣列\n} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'PE file format'}], 'attrs': {'url': 'https://hackmd.io/@Mes/mes_note/https%3A%2F%2Fhackmd.io%2F%40Mes%2FPE_File_Format'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Dependency Walker'}], 'attrs': {'url': 'https://www.dependencywalker.com/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '可以掃描任何 32 位元或 64 位元 Windows 模組(exe、dll、ocx、sys 等)並建立所有依賴模組的層次樹形圖'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Dependencies'}], 'attrs': {'url': 'https://github.com/lucasg/Dependencies'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 2011 用 C# 重寫 Dependency Walker'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'File'}]}, {'type': 'block_code', 'raw': '$ file PsExec.exe\nPsExec.exe: PE32 executable (console) Intel 80386, for MS Windows, 5 sections\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 Mingw 環境下可以使用 Linux file 命令'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'DUMPBIN'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/c1h23y6c(v=vs.100'}}, {'type': 'text', 'raw': ')'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '顯示有關通用物件檔案格式 (COFF) 二進位檔案的資訊。您可以使用 DUMPBIN 檢查 COFF 物件檔案、COFF 物件的標準函式庫、可執行檔和動態連結程式庫 (DLL)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '好用資訊全面但安裝麻煩'}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!Note]'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '只能從 Visual Studio 命令提示字元啟動此工具。您無法從系統命令提示字元或 Windows 資源管理器啟動它'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'DUMPBIN /HEADERS PsExec.exe'}, {'type': 'text', 'raw': ' 顯示標頭'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Fuslogvw'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/dotnet/framework/tools/fuslogvw-exe-assembly-binding-log-viewer'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '診斷 .NET Framework 在執行時無法找到組件的原因'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '只對 .net 程式有效'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!Note]'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '只能從 Visual Studio 命令提示字元啟動此工具。您無法從系統命令提示字元或 Windows 資源管理器啟動它'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'pe-bear'}], 'attrs': {'url': 'https://github.com/hasherezade/pe-bear'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '強大完整的跨平台工具,可以完整印出 DOS Header,NT Signature, NT FileHeader , NT Optional Header,導入導出表,Section Header,二進制顯示每個 section 的內容'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Portable Executable reversing tool with a friendly GUI'}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'print_pe'}], 'attrs': {'url': 'https://www.mikekohn.net/file_formats/print_pe.php'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 167f7c56f82f7f7699fd70489c10ad6740f83db5 測試,Mingw32 On windows 10'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'makefile 中呼叫另一個 makefile 會找不到 make,應為 Mingw32 make 預設檔名是 mingw32-make,建議直接改指令'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'build/Makefile'}, {'type': 'text', 'raw': ' 中 CC 變數被註解,需要解除'}]}, {'type': 'block_code', 'raw': '$ ./print_pe print_lib.exe\n\nprint_pe (January 15, 2023) - The DLL, EXE, OCX Analyzer\nCopyright 2005-2022 - Michael Kohn  http://www.mikekohn.net/\n\n---------------------------------------------\nMS DOS Header\n---------------------------------------------\n      Magic Number: MZ\nBytes On Last Page: 144\n     Pages In File: 3\n       Relocations: 0\n    Size Of Header: 4\n    Min Extra Para: 0\n    Max Extra Para: 65535\n  Initial SS Value: 0\n  Initial SP Value: 184\n          Checksum: 0\n  Initial IP Value: 0\n  Initial CS Value: 0\n  Addr Reloc Table: 64\n    Overlay Number: 0\n            OEM ID: 0\n          OEM Info: 0\nAddr Of New Header: 128\n\nSignature: PE00\n\n---------------------------------------------\nImage File Header\n---------------------------------------------\n           Machine: 0x014c (i386)\n  NumberOfSections: 16\n     TimeDateStamp: Thu Jul 11 22:05:29 2024\nPointerToSymbolTbl: 149504\n   NumberOfSymbols: 951\n SizeOfOptionalHdr: 224\n   Characteristics: 0x0107 (Relocations Stripped) (Executable Image) (Line Numbers Stripped) (32 Bit Machine)\n\n---------------------------------------------\nImage Optional Header\n---------------------------------------------\n             Magic: 0x010b (PE32 32 Bit Exe)\nMajorLinkerVersion: 2\nMinorLinkerVersion: 32\n        SizeOfCode: 56832\n...\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '部分輸出範例,資訊量還可以'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Dynamic Link library'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-libraries'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '動態連結函式庫(\xa0DLL) 是一個包含可由另一個模組(應用程式或 DLL)使用的函數和資料的模組'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Windows 應用程式介面 (API) 是作為一組 DLL 實現的,因此任何使用 Windows API 的進程都使用動態連結'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'calling a function in a DLL'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'load-time dynamic linking'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'run-time dynamic linking'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Dynamic-link library search order'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Dll Search Process 大致分為以下兩類行為'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '打包應用程式'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '未打包應用程式'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '大概流程'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '應用程式載入的目錄'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '由 lpPathName 參數指定的目錄'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '系統目錄。使用\xa0'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'GetSystemDirectory'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya'}}, {'type': 'text', 'raw': '函數取得該目錄的路徑。該目錄的名稱是System32'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '16位元系統目錄。沒有函數取得這個目錄的路徑,但是會搜尋。該目錄的名稱是System'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Windows 目錄。使用\xa0'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'GetWindowsDirectory'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya'}}, {'type': 'text', 'raw': '函數取得該目錄的路徑'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'PATH 環境變數中所列的目錄'}]}]}], 'tight': True, 'bullet': '.', 'attrs': {'depth': 0, 'ordered': True}}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '打包應用程式的標準搜尋順序'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '系統按以下順序搜尋:'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'DLL 重定向。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'API 集。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '僅限桌面應用程式(非 UWP 應用程式)。 SxS 清單重新導向。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '載入的模組列表。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '已知的 DLL。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '進程的套件依賴關係圖。這是應用程式的套件加上應用程式包清單部分'}, {'type': 'codespan', 'raw': '&lt;PackageDependency&gt;'}, {'type': 'text', 'raw': '中指定的任何依賴項。'}, {'type': 'codespan', 'raw': '&lt;Dependencies&gt;'}, {'type': 'text', 'raw': '依賴項會依照它們在清單中出現的順序進行搜尋。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '從中載入調用進程的資料夾(可執行檔的資料夾)。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '系統資料夾 (\xa0'}, {'type': 'codespan', 'raw': '%SystemRoot%\\system32'}, {'type': 'text', 'raw': ')。'}]}]}], 'tight': True, 'bullet': '.', 'attrs': {'depth': 0, 'ordered': True}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果 DLL 具有依賴性,則系統會搜尋依賴的 DLL,就好像它們只使用其模組名稱載入一樣(即使第一個 DLL 是透過指定完整路徑載入的)。'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '未打包應用程式'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果啟用安全 DLL 搜尋模式,則搜尋順序如下:'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'DLL 重定向。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'API 集。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'SxS 清單重新導向。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '載入的模組列表。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '已知的 DLL。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Windows 11 版本 21H2(10.0;Build 22000)及更高版本。進程的套件依賴關係圖。這是應用程式的套件加上應用程式包清單部分'}, {'type': 'codespan', 'raw': '&lt;PackageDependency&gt;'}, {'type': 'text', 'raw': '中指定的任何依賴項。'}, {'type': 'codespan', 'raw': '&lt;Dependencies&gt;'}, {'type': 'text', 'raw': '依賴項會依照它們在清單中出現的順序進行搜尋。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '從中載入應用程式的資料夾。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '系統資料夾。使用'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'GetSystemDirectory'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getsystemdirectorya'}}, {'type': 'text', 'raw': '函數檢索該資料夾的路徑。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '16位元系統資料夾。沒有函數取得該資料夾的路徑,但會搜尋它。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Windows 資料夾。使用'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'GetWindowsDirectory'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-getwindowsdirectorya'}}, {'type': 'text', 'raw': '函數取得該資料夾的路徑。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '目前資料夾。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '環境變數中列出的目錄'}, {'type': 'codespan', 'raw': 'PATH'}, {'type': 'text', 'raw': '。這不包括應用程式路徑註冊表項指定的每個應用程式路徑。計算 DLL 搜尋路徑時不使用App\xa0Paths鍵'}]}]}], 'tight': True, 'bullet': '.', 'attrs': {'depth': 0, 'ordered': True}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果停用_安全 DLL 搜尋模式,則搜尋順序相同,只是目前資料夾從序列中的位置 11 移動到位置 8(緊接在步驟7 之後。從中載入應用程式的資料夾)'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '關閉安全 DLL 搜尋模式'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Control\\Session Manager\\SafeDllSearchMode'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Register'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'dll 可以在在註冊當中註冊,方便 COM 程式找到它'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '通常註冊在 '}, {'type': 'codespan', 'raw': 'HKLM\\SOFTWARE\\Classes'}]}, {'type': 'block_code', 'raw': 'reg query HKLM\\SOFTWARE\\Classes /s /f whatever.dll\nif errorlevel 1 goto DLL_MISSING\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '尋找 dll 是否註冊'}]}, {'type': 'block_code', 'raw': 'regsvr32 your.dll\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '註冊 dll'}]}, {'type': 'block_code', 'raw': 'regsvr32 /u your.dll\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '取消註冊 dll'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '已知 DLL 清單'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在註冊表'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session Manager\\KnownDLLs'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Load-time Dynamic Linking'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Difference between load-time and run-time dynamic linking'}], 'attrs': {'url': 'https://stackoverflow.com/questions/552248/difference-between-load-time-and-run-time-dynamic-linking'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '當一個可執行檔在建置時連結到 DLL 時,連結器不會插入目標程式碼,而是插入一個存根,該存根基本上表示該名稱的函數位於該DLL中'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '現在,當可執行檔案執行時,可執行檔案的位元將會遺失(即函數存根),因此在允許程式運行之前,程式載入器會透過將它們替換為 DLL 檔案的入口點來修復這些遺失的函數'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '只有在所有存根都被替換(即解析)之後,才允許可執行檔運行'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '這就是載入時動態連結'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Run-time Dynamic Linking'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在這種情況下,可執行檔未連結到任何 DLL 庫文件,因此它不會包含 DLL 中的任何存根,因此程式載入器在執行可執行檔時不會出現問題'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '但是從 DLL 內部存取該函數的任務留給了可執行文件,並且可以使用 GetProcAddress Windows API 來完成'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '這就是運行時動態連結'}]}, {'type': 'block_code', 'raw': '#include <windows.h> \n#include <stdio.h> \ntypedef int (__cdecl *MYPROC)(LPCWSTR); \nint main( void ) { \n    HINSTANCE hinstLib; \n    MYPROC ProcAdd; \n    BOOL fFreeResult, fRunTimeLinkSuccess = FALSE; \n    // Get a handle to the DLL module.\n    hinstLib = LoadLibrary(TEXT("MyPuts.dll")); \n    // If the handle is valid, try to get the function address.\n    if (hinstLib != NULL) { \n        ProcAdd = (MYPROC) GetProcAddress(hinstLib, "myPuts"); \n        // If the function address is valid, call the function.\n        if (NULL != ProcAdd) {\n            fRunTimeLinkSuccess = TRUE;\n            (ProcAdd) (L"Message sent to the DLL function\\n"); \n        }\n        // Free the DLL module.\n        fFreeResult = FreeLibrary(hinstLib); \n    } \n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'cpp'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '範例'}]}, {'type': 'block_code', 'raw': '[DllImport("plugin.dll")]\npublic static extern void SomeFunction();\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '載入 plugin.dll 中的 SomeFunction 函式'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Delay Loaded DLL'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/cpp/build/reference/linker-support-for-delay-loaded-dlls?view=msvc-170&amp;redirectedfrom=MSDN'}}]}, {'type': 'block_code', 'raw': '// link with /link /DELAYLOAD:MyDLL.dll /DELAY:UNLOAD\n#include <windows.h>\n#include <delayimp.h>\n#include "MyDll.h"\n#include <stdio.h>\n\n#pragma comment(lib, "delayimp")\n#pragma comment(lib, "MyDll")\nint main()\n{\n    BOOL TestReturn;\n    // MyDLL.DLL will load at this point\n    fnMyDll();\n\n    //MyDLL.dll will unload at this point\n    TestReturn = __FUnloadDelayLoadedDLL2("MyDll.dll");\n\n    if (TestReturn)\n        printf_s("\\nDLL was unloaded");\n    else\n        printf_s("\\nDLL was not unloaded");\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'cpp'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'DLLImport'}]}, {'type': 'block_code', 'raw': '[DLLImport("dllName", CallingConvention = CallingConvention.StdCall)]\nstatic extern int funcName(ref Int32 retVal);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c#'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 '}, {'type': 'codespan', 'raw': 'C#'}, {'type': 'text', 'raw': ' 中引用 dll 的方法'}]}, {'type': 'block_code', 'raw': 'extern "C" int __stdcall funcName(int* arg);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'c / cpp 檔案中的宣告'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '函式參數有指標時'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'ref Int32 匹配 '}, {'type': 'codespan', 'raw': 'int*'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'ref IntPtr 匹配 '}, {'type': 'codespan', 'raw': 'int**'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Win32'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'LoadLibraryA function libloaderapi.h'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-loadlibrarya'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '將指定的模組載入到呼叫程序的位址空間。指定的模組可能會導致其他模組被載入'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'SetDllDirectoryA function winbase.h'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setdlldirectorya?redirectedfrom=MSDN'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '目錄新增至用於尋找應用程式的 DLL 的搜尋路徑'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'GetModuleFileNameA function libloaderapi.h'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulefilenamea?redirectedfrom=MSDN'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '檢索包含指定模組的檔案的完全限定路徑。該模組必須已由目前進程載入'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'AddDllDirectory function libloaderapi.h'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/api/LibLoaderAPI/nf-libloaderapi-adddlldirectory'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Adds a directory to the process DLL search path'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!Note]'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果一個 DLL 在兩個進程中加載,則一個進程中的檔案名稱可能與另一個進程中的檔案名稱大小寫不同'}]}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'SysWOW64'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/winprog64/running-32-bit-applications'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'WOW64 是 x86 模擬器,允許基於 32 位元 Windows 的應用程式在 64 位元 Windows 上無縫運行'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'C:\\Windows\\SysWOW64'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '32 bit dll'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'C:\\Windows\\System32'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '64 bit dll'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'C:\\Windows\\WinSxS'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'dot net 組件'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'The WOW64 emulator runs in user mode. It provides an interface between the 32-bit version of Ntdll.dll and the kernel of the processor, and it intercepts kernel calls. The WOW64 emulator consists of the following DLLs:'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Wow64.dll provides the core emulation infrastructure and the thunks for the Ntoskrnl.exe entry-point functions.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Wow64Win.dll provides thunks for the Win32k.sys entry-point functions.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '(x64 only) Wow64Cpu.dll provides support for running x86 programs on x64.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '錯誤處理'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '無法載入 DLL xxxxx 找不到指定模塊'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'dll 不存在或 '}, {'type': 'strong', 'children': [{'type': 'text', 'raw': 'dll 的 Load-time Dynamic Link dll 不存在'}]}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'dll 需要放在引用他的程式的同資料夾或系統目錄中'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'dll 已經放在放在引用他的程式的同資料夾'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../6cd39417-d0ad-4962-bedc-d31eb98fd457.png'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '檢查 dll 是否被安全性封鎖'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '檢查所有 dll 跟應用程式的體系結構,PE32, PE32+ 不可以互相載入'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '安裝 Visual C++ Redistributable for Visual Studio,如果應用程式使用它,它有 X86 跟 X64 版,不相容'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '移動 dll 到系統 dll 資料夾'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Register dll'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '使用 sysinternals-suite 包中的 Procmon.exe 監聽所有 Process 的事件檢查開檔失敗或模塊載入失敗(可以使用過濾器只看失敗的 Process Name)'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '企圖載入格式錯誤的程式'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '注意你的可執行檔跟 DLL 是不是同一個體系結構,X86 跟 x64 是不一樣的'}]}] 

Propertie {'uuid': '76e91b73-44af-4d56-bee2-0ce1eae67200', 'tags': ['CS/Windows'], 'date': datetime.date(2024, 7, 10), 'title': 'Windows PE', 'publish': True, 'slug': '75d165c3-b46d-4e6a-a030-bd72fcacadf5'} Export PE.md to /home/eric/Downloads/ericblog/content/post/87299beb-3e42-41f8-b056-5cc936f71d48/index.md

Test /opt/note/CS/Windows/Path.md

/opt/note/CS/Windows/Path.md

Set Date 2024-12-07 Set Title Path Set EnumSlugPropertie.Uuidv4 Slug bb41db3d-65a8-40bb-a3e1-0d0251581379 Export Predict folder: /home/eric/Downloads/ericblog/content/post/c34045d1-a25f-45db-8e19-5da60e012a25 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/c34045d1-a25f-45db-8e19-5da60e012a25/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Naming Files, Paths, and Namespaces'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file'}}]}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'DOS Path'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'C:\\File'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '路徑不得有以下保留字元:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '< (less than)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '&gt;'}, {'type': 'text', 'raw': ' (greater than)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': ':'}, {'type': 'text', 'raw': ' (colon)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '&quot;'}, {'type': 'text', 'raw': ' (double quote)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '/'}, {'type': 'text', 'raw': ' (forward slash)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '\\'}, {'type': 'text', 'raw': ' (backslash)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '| (vertical bar or pipe)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '? (question mark)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '*'}, {'type': 'text', 'raw': ' (asterisk)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'ASCII NULL'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '檔案名稱或目錄名稱請勿以空格或句點結尾。儘管底層檔案系統可能支援此類名稱,但 Windows shell 和使用者介面不支援。但是,可以將句點指定為名稱的第一個字元'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'shell 和檔案系統有不同的要求。可以使用 Windows API 建立 shell 使用者介面無法正確解釋的路徑'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Do not use the following reserved names for the name of a file:'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '2018\\January.xlsx'}, {'type': 'text', 'raw': ' A relative path to a file in a subdirectory of the current directory'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '\\Program Files\\Custom Utilities\\StringFinder.exe'}, {'type': 'text', 'raw': ' A relative path from the root of the current drive'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'C:\\Projects\\apilibrary\\apilibrary.sln'}, {'type': 'text', 'raw': ' An absolute file path from the root of drive C'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'C:Projects\\apilibrary\\apilibrary.sln'}, {'type': 'text', 'raw': ' A relative path from the current directory of the C drive'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '注意最後兩個路徑的區別。兩者都指定了可選的磁碟卷標 (在這兩種情況下均為 C:),但第一個路徑從指定卷的根目錄開始,而第二個路徑則不是。結果,第一個路徑是從 C: 磁碟驅動器根目錄開始的絕對路徑,而第二個路徑是從 C: 磁碟驅動器當前目錄開始的相對路徑。當需要使用第一種形式時,卻錯誤地使用了第二種形式,是涉及 Windows 文件路徑的常見錯誤來源之一'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Universal Naming Convention(UNC)'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '描述網路資源(例如共用檔案、目錄或印表機)位置的通用語法'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '\\\\HostName[@SSL][@Port]\\SharedFolder\\Resource'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'UNC 最大長度為 260'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '\\\\127.0.0.1\\c$\\MinGW'}, {'type': 'text', 'raw': ' 表示 Local File System 的 '}, {'type': 'codespan', 'raw': 'c:\\MinGW'}, {'type': 'text', 'raw': ' 磁碟 C 用 '}, {'type': 'codespan', 'raw': '$c'}, {'type': 'text', 'raw': ' 表示,c 不區分大小寫'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Windows API 中的檔案 I/O 函數會將 '}, {'type': 'codespan', 'raw': '/'}, {'type': 'text', 'raw': ' 轉換為 '}, {'type': 'codespan', 'raw': '\\'}, {'type': 'text', 'raw': ',作為將名稱轉換為 NT 樣式名稱的一部分,但使用 '}, {'type': 'codespan', 'raw': '\\\\?\\'}, {'type': 'text', 'raw': ' 前綴時除外'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'MAX_PATH'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '從 Windows 10 版本 1607 開始,許多常見 Win32 檔案和目錄函數中已刪除MAX_PATH限制。但是,您的應用程式必須滿足兩個條件'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '設定註冊表'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': '[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\FileSystem]\n"LongPathsEnabled"=dword:00000001\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '應用程式清單聲明長路徑'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': '<application xmlns="urn:schemas-microsoft-com:asm.v3">\n    <windowsSettings xmlns:ws2="http://schemas.microsoft.com/SMI/2016/WindowsSettings">\n        <ws2:longPathAware>true</ws2:longPathAware>\n    </windowsSettings>\n</application>\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'xml'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Long UNC'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '開頭方式跟 UNC 不一樣 '}, {'type': 'codespan', 'raw': '\\\\?\\c:\\'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '資料夾需要 '}, {'type': 'codespan', 'raw': '\\'}, {'type': 'text', 'raw': ' 結尾'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Long UNC 最大長度為 32767'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '\\\\?\\C:\\test\\longUNC.exe'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果 Long UNC 以空白結尾'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '无法双击执行'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '无法通过命令行执行(Long UNC 也不行)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '如果同資料下有無空白版本,檔案管理器的屬性會是沒空白版本的資訊'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '如果同資料下有無空白版本,檔案管理器的刪除會刪到沒空白的版本'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '可以用 Long UNC 刪除, 創建'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '3947ec88-3571-41dd-8686-38701b8850ab', 'tags': ['CS/Windows'], 'date': datetime.date(2024, 12, 7), 'title': 'Path', 'publish': True, 'slug': 'bb41db3d-65a8-40bb-a3e1-0d0251581379'} Export Path.md to /home/eric/Downloads/ericblog/content/post/c34045d1-a25f-45db-8e19-5da60e012a25/index.md

Test /opt/note/CS/Windows/SymbolicLink.md

/opt/note/CS/Windows/SymbolicLink.md

Set Date None Set Title SymbolicLink Set EnumSlugPropertie.Uuidv4 Slug eab38237-b24c-4916-af1c-d49140443f0c Export Predict folder: /home/eric/Downloads/ericblog/content/post/3378443b-2acc-411b-bf1c-4b71ee72bf4b Export Markdown Path: /home/eric/Downloads/ericblog/content/post/3378443b-2acc-411b-bf1c-4b71ee72bf4b/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Windows 無法在未使用uac提權的前提下建立軟連結(即使有資料夾完全控制權限也不行),但可以以以下方式繞過:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '開啟開發者模式'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'mklink 應該也可以繞過(待確認)'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'title': 'SymbolicLink', 'tags': ['CS/Windows'], 'publish': True, 'uuid': '938dc5f1-78b0-4c8d-93f3-d65e18aeb553', 'slug': 'eab38237-b24c-4916-af1c-d49140443f0c'} Export SymbolicLink.md to /home/eric/Downloads/ericblog/content/post/3378443b-2acc-411b-bf1c-4b71ee72bf4b/index.md

Test /opt/note/CS/Windows/Windows.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 21), 'tags': ['CS/Windows'], 'publish': False, 'uuid': '705c85b4-a1a0-452e-adb1-14a3640dffcc'}

Test /opt/note/CS/Windows/WindowsApiSet.md

/opt/note/CS/Windows/WindowsApiSet.md

Set Date 2025-01-23 Set Title Windows API Set Set EnumSlugPropertie.Uuidv4 Slug 0c14a1b5-b279-44de-90d2-89f19598076d Export Predict folder: /home/eric/Downloads/ericblog/content/post/c8a01269-89bc-472f-aa71-dc4731e07b62 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/c8a01269-89bc-472f-aa71-dc4731e07b62/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Windows API Set'}], 'attrs': {'url': 'https://learn.microsoft.com/en-us/windows/win32/apiindex/windows-apisets'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '適用於 Windows 10 以上'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Windows API set name is a\xa0virtual alias\xa0for a physical\xa0'}, {'type': 'codespan', 'raw': '.dll'}, {'type': 'text', 'raw': "\xa0file. It's an implementation-hiding technique, where you as the caller don't have to know exactly which module is hosting the information."}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'PC 上的任何位置不一定存在具有該名稱的 dll 檔'}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'API 集由一個強契約名稱來標識'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '以api-開頭的名稱表示保證存在於所有 Windows 版本上的 API。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '以ext-開頭的名稱表示可能並非在所有 Windows 版本上都存在的 API。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '這個名稱必須以序列l'}, {'type': 'codespan', 'raw': '&lt;n&gt;-&lt;n&gt;-&lt;n&gt;'}, {'type': 'text', 'raw': '結尾,其中n由十進制數字組成。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '該名稱不區分大小寫。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '範例:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'api-ms-win-core-ums-l1-1-0'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'ext-ms-win-com-ole32-l1-1-5'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'ext-ms-win-ntuser-window-l1-1-0'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'ext-ms-win-ntuser-window-l1-1-1'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Windows API 索引'}], 'attrs': {'url': 'https://learn.microsoft.com/zh-tw/windows/win32/apiindex/windows-api-list'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Windows 應用程式開發介面 (API) 參考內容清單。'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '使用 Windows API,您可以開發可在所有 Windows 版本上順利執行的應用程式,同時利用每個版本特有的特性和功能。 請注意,這先前稱為 Win32 API。Windows API 名稱更準確地反映其在 16 位 Windows 中的根目錄,以及其在 64 位 Windows 上的支援。'}]}] 

Propertie {'uuid': '9ce437a2-35d9-4d9c-be2f-814679862e01', 'tags': ['CS/Windows'], 'date': datetime.date(2025, 1, 23), 'title': 'Windows API Set', 'publish': True, 'slug': '0c14a1b5-b279-44de-90d2-89f19598076d'} Export WindowsApiSet.md to /home/eric/Downloads/ericblog/content/post/c8a01269-89bc-472f-aa71-dc4731e07b62/index.md

Test /opt/note/CS/Windows/CSharp/2025_01_23_114806.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Windows/CSharp/CSharp.md

/opt/note/CS/Windows/CSharp/CSharp.md

Set Date 2025-01-23 Set Title C Sharp Set EnumSlugPropertie.Uuidv4 Slug 2d0132ce-8577-43ed-97ba-26fcdd0f111e Export Predict folder: /home/eric/Downloads/ericblog/content/post/9fac20d5-644f-4144-932a-4f557ba70ef8 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/9fac20d5-644f-4144-932a-4f557ba70ef8/index.md Test resource /opt/note/CS/Windows/CSharp/CS/Windows/CSharp/2025_01_23_114806.png Result False Not File Or Not Exist From url CS/Windows/CSharp/2025_01_23_114806.png Test resource /opt/note/CS/Windows/CSharp/2025_01_23_114806.png Result True /opt/note/CS/Windows/CSharp/2025_01_23_114806.png From url CS/Windows/CSharp/2025_01_23_114806.png Resource Match CS/Windows/CSharp/2025_01_23_114806.png Copy To 9d1c988d-fcde-401d-91f2-f42665910a29.png

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Bind Event'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../9d1c988d-fcde-401d-91f2-f42665910a29.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '一定要用設計窗口的屬性新增,不可以直接寫同名函數,不會綁定'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Require UAC'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '加入應用程式資訊清單'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '在應用程式資訊清單中將 requestedExecutionLevel 改為以下設定'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': '<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'xml'}}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '確定屬性 > 應用程式 > 程式資訊清單 指向加入的應用程式資訊清單'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Add Dll'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '將 dll 及其所需檔案利用 加入 > 現有項目 加入專案'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'dll 的 屬性>建置動作 設定為內容,其他設為無'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '所有加入的檔案 屬性>複製到輸出目錄 設定為一律複製'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '用 DllImport 連結要使用的函式在 class 定義中'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'DllImport'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'exposed by an unmanaged dynamic-link library (DLL) as a static entry point'}]}, {'type': 'block_code', 'raw': '[DllImport("WinIo64.dll", CallingConvention = CallingConvention.StdCall)]\npublic static extern bool GetPortVal(UInt16 PortAddr, ref UInt32 pPortVal, UInt16 Size);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'ref UInt32 表示 '}, {'type': 'codespan', 'raw': 'Uint32*'}, {'type': 'text', 'raw': ',呼叫時為 '}, {'type': 'codespan', 'raw': 'GetPortVal(0x62, ref pPortVal, 1);'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '屬性'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'CharSet'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Indicates how to marshal string parameters to the method and controls name mangling'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'CharSet.Unicode'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'CharSet.Ansi'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'EntryPoint = "MessageBox"'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'dll 內函數的名子'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'CallingConvention'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'CallingConvention.Cdecl'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'CallingConvention.Winapi'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'CallingConvention.StdCall'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'AnyCPU'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'AnyCPU 的陷阱: 如果你将项目的目标平台设置为 AnyCPU,这并不能保证兼容性。 AnyCPU 会根据运行程序的系统选择 32 位或 64 位模式(即使在同意台機器上選擇不同的建置目標也會使位元模式改變)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '請在 屬性 > 建置 > 目標平台 中修改'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Timer'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'System.Timers.Timer'}, {'type': 'text', 'raw': ' 如果處裡函式的執行時間比計時器間隔還長會導致處裡函式被重入,默默地吞掉異常'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'System.Threading.Timer'}, {'type': 'text', 'raw': ' 如果處裡函式的執行時間比計時器間隔還長會導致處裡函式被重入,不跟  UI 共用線程'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'System.Windows.Forms.Timer'}, {'type': 'text', 'raw': ' 如果處裡函式的執行時間比計時器間隔還長會導致處裡函式被重入,他跟 UI 是同一個線程,會堵塞 UI,可以直接寫 UI 元件'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '不可以在 '}, {'type': 'codespan', 'raw': 'System.Timers.Timer'}, {'type': 'text', 'raw': ' 或 '}, {'type': 'codespan', 'raw': 'System.Threading.Timer'}, {'type': 'text', 'raw': ' 中存取UI 線程的物件,可能拋錯或無聲的線程終止'}]}, {'type': 'block_code', 'raw': 'private void SysTime1Sec_Elapsed(object stst) {\n    if (Interlocked.Increment(ref ReentrancyLock) > 1) {\n        return;\n    }\n    ...\n    Interlocked.Exchange(ref ReentrancyLock, 0);\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '此方法可以保證 SysTime1Sec_Elapsed 不被重入'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'DataGridView 顏色不改變'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '若要使用特定值自訂單元格樣式,請實作 DataGridView.CellFormatting 事件的處理程序'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'datagridview 控制項存在一個問題,即在表單顯示之前無法更改任何單元格的顏色。因此,在呼叫 Shown() 之前運行的方法或觸發的事件將無法改變顏色'}]}] 

Propertie {'date': datetime.date(2025, 1, 23), 'tags': ['CS/CSharp', 'CS/Windows'], 'title': 'C Sharp', 'publish': True, 'slug': '2d0132ce-8577-43ed-97ba-26fcdd0f111e'} Export CSharp.md to /home/eric/Downloads/ericblog/content/post/9fac20d5-644f-4144-932a-4f557ba70ef8/index.md

Test /opt/note/CS/Uefi/GnuEfi.md

/opt/note/CS/Uefi/GnuEfi.md

Set Date None Set Title GnuEfi Set EnumSlugPropertie.Uuidv4 Slug e5597a16-5cac-4cda-84c9-9f430a709c5c Export Predict folder: /home/eric/Downloads/ericblog/content/post/ed733f21-adc0-4f0d-a797-d0e65abfc798 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/ed733f21-adc0-4f0d-a797-d0e65abfc798/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'https://wiki.osdev.org/GNU-EFI'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'https://sourceforge.net/projects/gnu-efi/'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '官網找不到剩sourceforge可以下載,把EDK2的header檔打包成可以用GCC工具鏈編譯專案。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '在Ubuntu 22.04LTS上測試確定Hello World可用。'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '安裝'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '確定GCC工具鏈可用'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '下載並解壓縮'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '切進下載的資料夾'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': 'make\n', 'style': 'fenced', 'marker': '```'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'make install'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果要改預設安裝路徑,要改Make.defaults中的'}, {'type': 'codespan', 'raw': 'PREFIX := /usr/local/gnu-efi'}, {'type': 'text', 'raw': ' 不然會裝去/usr/local'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '編譯'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '編譯'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': 'gcc -I/usr/local/gnu-efi/include/efi -fpic -ffreestanding -fno-stack-protector -fno-stack-check -fshort-wchar -mno-red-zone -maccumulate-outgoing-args -c hello.c -o hello.o\n', 'style': 'fenced', 'marker': '```'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Link'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': 'ld -shared -Bsymbolic -L/usr/local/gnu-efi/lib -T/usr/local/gnu-efi/lib/elf_x86_64_efi.lds /usr/local/gnu-efi/lib/crt0-efi-x86_64.o hello.o -o hello.so -lgnuefi -lefi\n', 'style': 'fenced', 'marker': '```'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '轉換為efi格式'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': 'objcopy -j .text -j .sdata -j .data -j .dynamic -j .dynsym  -j .rel -j .rela -j .rel.* -j .rela.* -j .reloc --target efi-app-x86_64 --subsystem=10 hello.so hello.efi\n', 'style': 'fenced', 'marker': '```'}] 

Propertie {'title': 'GnuEfi', 'publish': True, 'tags': ['CS'], 'uuid': 'e17a6ae3-c318-4f9d-9d32-bcc64808d59a', 'slug': 'e5597a16-5cac-4cda-84c9-9f430a709c5c'} Export GnuEfi.md to /home/eric/Downloads/ericblog/content/post/ed733f21-adc0-4f0d-a797-d0e65abfc798/index.md

Test /opt/note/CS/Uefi/Uefi.md

Fail PropertieParsar publish not exist or true {'uuid': '2b6b1a37-3661-42d6-93f4-004b70209164', 'tags': ['CS/Uefi'], 'date': datetime.date(2024, 11, 17), 'title': '', 'publish': False}

Test /opt/note/CS/TheoryOfComputation/A Relatively Small Turing Machine Whose Behavior Is Independent.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/TheoryOfComputation/Brainfuck.md

/opt/note/CS/TheoryOfComputation/Brainfuck.md

Set Date 2024-05-10 Set Title Brainfuck.md Set EnumSlugPropertie.Uuidv4 Slug 0df89a10-9256-4841-b97b-a2e9c249893f Export Predict folder: /home/eric/Downloads/ericblog/content/post/28568df9-1365-4143-a0ed-2bce858c1739 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/28568df9-1365-4143-a0ed-2bce858c1739/index.md Test resource /opt/note/CS/TheoryOfComputation/CS/TheoryOfComputation/DesignAndImplementationOfA256CoreBrainFuckComputer.pdf Result False Not File Or Not Exist From url CS/TheoryOfComputation/DesignAndImplementationOfA256CoreBrainFuckComputer.pdf Test resource /opt/note/CS/TheoryOfComputation/DesignAndImplementationOfA256CoreBrainFuckComputer.pdf Result True /opt/note/CS/TheoryOfComputation/DesignAndImplementationOfA256CoreBrainFuckComputer.pdf From url CS/TheoryOfComputation/DesignAndImplementationOfA256CoreBrainFuckComputer.pdf Resource Match CS/TheoryOfComputation/DesignAndImplementationOfA256CoreBrainFuckComputer.pdf Copy To c984eba0-0677-4bab-a9fa-a1452227d313.pdf

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '一個由 8 支指令組成的圖靈完備程式語言'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '&gt;'}, {'type': 'text', 'raw': ' \tIncrement the pointer.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '&lt;'}, {'type': 'text', 'raw': ' \tDecrement the pointer.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '+'}, {'type': 'text', 'raw': ' \tIncrement the byte at the pointer.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-'}, {'type': 'text', 'raw': ' \tDecrement the byte at the pointer.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '.'}, {'type': 'text', 'raw': ' \tOutput the byte at the pointer.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': ','}, {'type': 'text', 'raw': ' \tInput a byte and store it in the byte at the pointer.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '['}, {'type': 'text', 'raw': ' \tJump forward past the matching '}, {'type': 'codespan', 'raw': ']'}, {'type': 'text', 'raw': ' if the byte at the pointer is zero.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': ']'}, {'type': 'text', 'raw': ' \tJump backward to the matching '}, {'type': 'codespan', 'raw': '['}, {'type': 'text', 'raw': ' unless the byte at the pointer is zero.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '有一個有限長度的連續記憶體,及一個指針來表明當前指令要操作的區塊'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'BrainFuck Programming Tutorial by: Katie'}], 'attrs': {'url': 'https://gist.github.com/roachhd/dce54bec8ba55fb17d3a'}}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'awesome'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Brainfuck-An Eight-Instruction Turing-Complete Programming Language'}], 'attrs': {'url': 'https://www.muppetlabs.com/~breadbox/bf/'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Index of brainfuck'}], 'attrs': {'url': 'http://esoteric.sange.fi/brainfuck/'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Brainfuck 實作及程式收集'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'some brainfuck fluff by daniel b cristofani'}], 'attrs': {'url': 'https://brainfuck.org/'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Brainfuck'}], 'attrs': {'url': 'https://esolangs.org/wiki/Brainfuck'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Esolangs Wiki'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'codespan', 'raw': 'Brainf***'}], 'attrs': {'url': 'https://www.iwriteiam.nl/Ha_BF.html'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'codespan', 'raw': 'brain------------------------------------------------------fuck.com'}], 'attrs': {'url': 'https://web.archive.org/web/20170913173425/http://www.brain------------------------------------------------------fuck.com/'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Portable'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Portable Brainfuck'}], 'attrs': {'url': 'https://www.muppetlabs.com/~breadbox/bf/standards.html'}}]}, {'type': 'block_quote', 'children': [{'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '元胞數組的實際大小是實現定義的。但是,該數組應始終包含至少 9999 個單元。 (允許大小小至 4 位數字是為了程式設計師用三行 C 程式碼等編寫解釋器的好處。)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '如果程式嘗試將指標移到第一個陣列單元下方或最後一個陣列單元之外,則該程式的行為是未定義的。 (一些實現會導致指標迴繞,但許多(也許是大多數)實現的行為方式與 C 指標漫遊到任意記憶體一致。)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '單一單元格可以包含的值的範圍是實現定義的。 (範圍也不必一致:考慮「bignum」實現的情況,其單元格的範圍僅受當前可用資源的限制。)但是,每個單元格的範圍應始終至少包括值 0 到127,含在內。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '如果程式嘗試將單元格的值減少到其記錄的最小值(如果有)以下,或將單元格的值增加到其記錄的最大值(如果有)以上,則執行此類操作後單元格中的值將執行 -定義的。 (大多數實作選擇讓值以 C 整數典型的方式環繞,但這不是必需的。)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '如果程式在輸入流程中沒有更多資料時嘗試輸入值,則此類操作後目前儲存格中的值是實現定義的。 (最常見的選擇是儲存 0 或儲存 -1,或保持儲存格的值不變。對於希望實現可移植性的程式設計師來說,這通常是最成問題的問題。)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '如果程式包含一個或多個不平衡括號,則程式的行為是未定義的。 (事實上,許多 Brainfuck 編譯器會在編譯過程中崩潰。)(不,我不會在這裡正式描述「不平衡」的含義。你們都知道它意味著什麼。)'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'some little programs for testing brainfuck implementations'}], 'attrs': {'url': 'https://brainfuck.org/tests.b'}}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '測試 Brainfuck 記憶體位寬'}], 'attrs': {'url': 'https://github.com/rdebath/Brainfuck/blob/master/bitwidth.b'}}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Compiler'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'bf-compiler'}], 'attrs': {'url': 'https://github.com/folkertvanheusden/bf-compiler'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Brainfuck 編譯成其他語言'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Esotope Brainfuck Compiler'}], 'attrs': {'url': 'https://github.com/lifthrasiir/esotope-bfc/tree/master'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '將 Brainfuck 編譯成可讀的 C'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Brainfuck interpreters and compiler with Brainfuck torture test'}], 'attrs': {'url': 'https://github.com/rdebath/Brainfuck/tree/master'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Brainfuck interpreters and compilers to C, V. VIM syntax file for brainfuck. Fast JIT Assembly, JIT C running, Perl, Python, php, Ruby, lua, go, awk, neko, PS1, bash, ook, trollscript etc'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '有很多供測試用的 Brainfuck 小程式'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Design and Implementation of a 256-Core BrainFuck Computer'}], 'attrs': {'url': '../c984eba0-0677-4bab-a9fa-a1452227d313.pdf'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'control flow in brainfuck'}], 'attrs': {'url': 'http://calmerthanyouare.org/2016/01/14/control-flow-in-brainfuck.html'}}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '它唯一的控制流語句也兼作執行算術比較的唯一方法'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '[]'}, {'type': 'text', 'raw': ' 大致相當於:'}]}]}, {'type': 'block_code', 'raw': 'while (x != 0) {\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'codespan', 'raw': 'IF x != 0'}, {'type': 'text', 'raw': '(破壞性)'}]}, {'type': 'block_code', 'raw': 'x = read()\nif (x != 0) {\n    write(x)\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '等價於'}]}, {'type': 'block_code', 'raw': 'x = read()\nwhile (x != 0) {\n    write(x)\n    while (x != 0) {\n        x = x - 1\n    }\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': ',[.[-]]'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Optimize'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'bf'}], 'attrs': {'url': 'https://github.com/mrjameshamilton/bf'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'bfoptimization'}], 'attrs': {'url': 'https://github.com/matslina/bfoptimization'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'awib'}], 'attrs': {'url': 'https://github.com/matslina/awib'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'a brainfuck compiler written in brainfuck'}]}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Research on how to best optimize brainfuck code.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '生成 brainfuck to c ,用 python 寫成'}]}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'An optimizing brainfuck compiler with multiple target backends: JVM, smali, dex, C, LLVM IR, ARM, WASM, JavaScript and Lox.'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'brainfuck optimization strategies'}], 'attrs': {'url': 'http://calmerthanyouare.org/2015/01/07/optimizing-brainfuck.html'}}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '跟 bfoptimization 同一個作者'}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-、&gt;、&lt; 、+'}, {'type': 'text', 'raw': ' 序列被收縮為單一指令。例如,'}, {'type': 'codespan', 'raw': '----'}, {'type': 'text', 'raw': '被替換為單一 SUB(4)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '相互取消的指令減少。例如,'}, {'type': 'codespan', 'raw': '+++--&gt;&gt;&lt;'}, {'type': 'text', 'raw': '相當於'}, {'type': 'codespan', 'raw': '+&gt;'}, {'type': 'text', 'raw': '並進行相應編譯。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '一些常見的結構被識別並用單一指令替換。例如'}, {'type': 'codespan', 'raw': '[-]'}, {'type': 'text', 'raw': '被編譯成單一SET(0)。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '已知永遠不會進入的循環將被刪除。這是在程式一開始打開的循環(當所有單元格都是 0 時)和在另一個循環關閉後立即打開的循環的情況。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '複製和乘法循環被替換為恆定時間運算。例如'}, {'type': 'codespan', 'raw': '[-&gt;&gt;+++&lt;+&lt;]'}, {'type': 'text', 'raw': '被編譯成兩個 RMUL(2, 3), RMUL(1,1)), SET(0)'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Algorithms'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Large number'}], 'attrs': {'url': 'https://www.iwriteiam.nl/Ha_bf_numb.html'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '產生大數字的寫法'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Brainfuck algorithms'}], 'attrs': {'url': 'https://esolangs.org/wiki/Brainfuck_algorithms'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'An introduction to programming in BF'}], 'attrs': {'url': 'https://www.iwriteiam.nl/Ha_bf_intro.html'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Turing Complete'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Daniel B Cristofani 在 Brainfuck 中實現通用圖靈機提供了模擬證明'}], 'attrs': {'url': 'https://brainfuck.org/utm.b'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'BF is Turing-complete'}], 'attrs': {'url': 'https://www.iwriteiam.nl/Ha_bf_Turing.html'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'date': datetime.date(2024, 5, 10), 'tags': ['CS'], 'publish': True, 'uuid': '80ac015e-73f4-414a-81b0-8b9023e213ee', 'title': 'Brainfuck.md', 'slug': '0df89a10-9256-4841-b97b-a2e9c249893f'} Export Brainfuck.md to /home/eric/Downloads/ericblog/content/post/28568df9-1365-4143-a0ed-2bce858c1739/index.md

Test /opt/note/CS/TheoryOfComputation/BusyBeavers.md

Fail PropertieParsar publish not exist or true {'uuid': 'b8115822-8055-4b69-bcd0-71e7243509a8', 'tags': ['CS/TheoryOfComputation'], 'date': datetime.date(2022, 6, 7), 'title': 'Busy Beavers', 'publish': False}

Test /opt/note/CS/TheoryOfComputation/DesignAndImplementationOfA256CoreBrainFuckComputer.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/TheoryOfComputation/MarkdownParse.md

/opt/note/CS/TheoryOfComputation/MarkdownParse.md

Set Date 2024-06-26 Set Title Markdown Parse Survey On Js and Python Set EnumSlugPropertie.Uuidv4 Slug 75ade4ba-e10b-484c-84fb-3e956ca413fc Export Predict folder: /home/eric/Downloads/ericblog/content/post/d7586e57-221b-4c0d-911b-f2115bd3fd08 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/d7586e57-221b-4c0d-911b-f2115bd3fd08/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '目標'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '取得一份 markdown 的 ast,在遍歷樹結構時同時修改節點值,不會增刪節點,最後在轉換回 markdown'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '具體專案需求請見 rfmswg'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '最基本要支援 common markdown,註腳可選'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '結論'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '只有 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'mistune'}], 'attrs': {'url': 'https://mistune.lepture.com/en/latest/index.html'}}, {'type': 'text', 'raw': ' 可以做到'}]}, {'type': 'block_code', 'raw': "astrender = MarkdownRenderer()\n# plugins=['strikethrough', 'footnotes', 'table','task_lists' , 'math']\nast = mistune.create_markdown(renderer='ast', escape=False)(md)\nmdc = astrender(ast, state=mistune.core.BlockState())\n", 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'python'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '文件沒有明寫此用法但 v3.0.2 確定可以在專案中使用'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'plugins 被註解應為加入 plugins 時無法 '}, {'type': 'codespan', 'raw': 'astrender'}, {'type': 'text', 'raw': ' 回 markdown,需要自己撰寫 render'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Survey'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '背景調查過以下函式庫'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'marked'}], 'attrs': {'url': 'https://github.com/markedjs/marked'}}, {'type': 'text', 'raw': ' Js 庫'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '有 AST 但 AST 只能編譯成 Html,無法編譯回 markdown'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'markdown-it'}], 'attrs': {'url': 'https://github.com/markdown-it/markdown-it'}}, {'type': 'text', 'raw': ' Js 庫'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '文件中找不到 AST 樹資訊'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'remarkable'}], 'attrs': {'url': 'https://github.com/jonschlinkert/remarkable'}}, {'type': 'text', 'raw': ' Js 庫'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '符合 common markdown 的設定會導致 AST 無法編譯回'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Python-Markdown'}], 'attrs': {'url': 'https://github.com/Python-Markdown/markdown'}}, {'type': 'text', 'raw': ' Python 庫'}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我想要解析然後遍歷一個 Markdown 檔案。我正在尋找類似 xml.etree.ElementTree 但適用於 Markdown 的東西'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '正如另一位評論者提到的,Python-Markdown 具有擴展 API,並且它在內部使用 xml.etree.ElementTree。理論上,你可以創建一個擴展來訪問該內部的 ElementTree 對象,然後對其進行所需的操作。然而,如果你使用原始 HTML(包括 HTML 實體)和/或 codehilite 擴展,則最終獲得的文檔可能是不完整的,因為在序列化的字符串上還有一些後處理器會執行額外的處理。因此,我不太推薦這種方法來達成你的目的。(完整聲明:我是 Python-Markdown 的開發者。)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '-'}, {'type': 'text', 'raw': ' '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Parse and traverse elements from a Markdown file'}], 'attrs': {'url': 'https://stackoverflow.com/questions/27349951/parse-and-traverse-elements-from-a-markdown-file'}}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '官方開發者不推薦使用 AST'}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Markdown Parse Implementation List'}], 'attrs': {'url': 'https://github.com/markdown/markdown.github.com/wiki/Implementations'}}]}] 

Propertie {'title': 'Markdown Parse Survey On Js and Python', 'date': datetime.date(2024, 6, 26), 'tags': ['CS'], 'publish': True, 'uuid': '2962375d-0e26-447b-8605-117d698415db', 'slug': '75ade4ba-e10b-484c-84fb-3e956ca413fc'} Export MarkdownParse.md to /home/eric/Downloads/ericblog/content/post/d7586e57-221b-4c0d-911b-f2115bd3fd08/index.md

Test /opt/note/CS/TheoryOfComputation/OptimizingCompiler.md

/opt/note/CS/TheoryOfComputation/OptimizingCompiler.md

Set Date 2024-08-04 Set Title Optimizing Compiler Set EnumSlugPropertie.Uuidv4 Slug 90563e07-e5c7-4f68-8c65-0152b17198aa Export Predict folder: /home/eric/Downloads/ericblog/content/post/46a043df-7297-4f7f-b087-e388d3be6114 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/46a043df-7297-4f7f-b087-e388d3be6114/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '從零開始建構 C 語言最佳化編譯器'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Jserv 在 Coscup 2024 的演講,基於 shecc'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '從零開始建構 C 語言最佳化編譯器'}], 'attrs': {'url': 'https://hackmd.io/owo-6JRnRei2mGr64cfvZQ'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'basic block'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '程式碼單一入口,單一出口的區域'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '可達性 (reachability)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '除了起始節點外,若一個基本區塊在最佳化中沒有前任節點連接,則此基本區塊被稱為不可到達 (unreachable),我們可安全的移除該基本區塊來簡化 CFG,如 C 語言關鍵字 break, continue, return 後的程式碼及 if, for, while 中條 件恆為 0 的情況。'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '支配性 (domination)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '若從起始點到節點 n 都必經節點 d,則稱節點 d 為節點 n 的支配節點 (dominator),記作 d dom n;而其中最接近節點 n 的支配節點 m 又稱為直接支配 節點 (immediate dominator),記作 m idom n。將 m 作為親代節點、n 作為子節點,我們可建立另外一種樹狀結構 ── 支配樹 (dominator tree),記錄從起始點到某個基本區塊節點中必經的路徑。'}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '結合可達性分析,若節點 n 不可到達,則其在支配樹中的所有子節點將同樣不可到達,這時我們可快速且安全地從 CFG 中移除這些基本區塊節點。'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'shecc'}], 'attrs': {'url': 'https://github.com/sysprog21/shecc'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'shecc看起來很完善,有甚麼可以貢獻的東西 (2024)'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Issues | shecc'}], 'attrs': {'url': 'https://github.com/sysprog21/shecc/issues'}}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '有好多 issue 可以解啊。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'c-preprocess 和 frontend 可以一起做R。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'bug 還是很多,也可以去找 bug 提出來。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '產生的程式碼需要做 bootstrapping,目前只能跑在 QEMU,希望找些其他系統模擬的方法支援非 Linux OS'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '目前只支援 ARM/RISC-V,看看有沒有人可以貢獻 x86(-64) 之類的處理器後端。'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '建構流程'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Bootstrapping 分成三個階段,可自舉'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'stage0: 用 gcc/clang/MSVC 編譯,產生可執行檔 out/shecc,針對原生的處理器架構'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'stage1: 用 stage0 產生的程式編譯 shecc 原始程式碼,產生的執行檔 out/shecc-stage1.elf 是ArmV7 或 RISC-V 指令集'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'stage2: 用 stage1 產生的 out/shecc-stage1.elf 編譯自己'}]}] 

Propertie {'date': datetime.date(2024, 8, 4), 'tags': ['CS/TheoryOfComputation'], 'title': 'Optimizing Compiler', 'publish': True, 'uuid': '589f6201-ef48-4f55-bca1-e1a544f61ac3', 'slug': '90563e07-e5c7-4f68-8c65-0152b17198aa'} Export OptimizingCompiler.md to /home/eric/Downloads/ericblog/content/post/46a043df-7297-4f7f-b087-e388d3be6114/index.md

Test /opt/note/CS/TheoryOfComputation/Source.md

Fail PropertieParsar publish not exist or true {'uuid': '7ff81899-bbd4-4671-8cbf-c0d18b6fd514'}

Test /opt/note/CS/TheoryOfComputation/The Determination of the Value of Rado’s Noncom puta ble Functionfor Four-State Turing Machines.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/TheoryOfComputation/TheBusyBeaverCompetitionAHistoricalSurvey.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/TheoryOfComputation/TheBusyBeaverFrontier.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/TheoryOfComputation/Vs1t4iY.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/TheoryOfComputation/程式設計的藝術之MIX機器.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2019, 5, 20), 'tags': ['CS/TheoryOfComputation'], 'uuid': '8228de57-3d7e-4f6c-8a1d-8c01e9cdb97f'}

Test /opt/note/CS/TheoryOfComputation/程式語言.md

/opt/note/CS/TheoryOfComputation/程式語言.md

Set Date 2018-04-10 Set Title 程式語言 Set EnumSlugPropertie.Uuidv4 Slug 31aee4e7-278e-4e7b-8237-13d109363db8 Export Predict folder: /home/eric/Downloads/ericblog/content/post/7104e3b7-3171-4a10-8297-0270ebe53dd8 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/7104e3b7-3171-4a10-8297-0270ebe53dd8/index.md

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '大學時程式語言課程的上課筆記'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '記憶體管理議題'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'ada'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '動態的他會收回去'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'c/c++'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '自己管,指標可以指向任何地方(通常拿來做記憶體管理)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '指標可移動'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '須明確取參'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '參照像const pointer'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'c#'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '僅參照'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '堆積管理'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '可動或固定大小'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '收回方式'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '1.紀錄多少人參照到,沒就收回'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '有參照循環議題'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '2.直到沒記憶體才回收,回收時檢查是否有參照到'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '型態確定'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'assign or function or operator 檢查'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '需有相容的概念(可隱含轉換)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '強型別:編譯期檢查全部型別 如ada(可以關)、jave、c#'}]}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '運算式'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '運算子結合率(變數 > 常數 > 小括號)'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果函式會改變變數值,先後很重要'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解1:不准改'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '解2:給定方向(如java)'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '結合方向'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'ruby'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '凡是多是方法'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Overloading operator (重載運算子)'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'C++'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '潛在問題'}]}, {'type': 'block_code', 'raw': '    int *a,a;\n    c=b*a;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '指標||乘法 (???)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '無法檢查!!!'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '矩陣乘法,還是元素相乘'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '轉型'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '不能轉'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'ada'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '明確型態轉換'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'C: (int) angle'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'python: int(angle) base 10 十進位轉換'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'overflow(太大超過) || underflow(太小無法表示)'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'exception : catch 解決'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '關聯運算式'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '強制轉換'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'c:明寫,算到知道答案就不算了'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '(a<b<c) != (a<b && b<c)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'rudy: 用== 跟=?分辨轉型'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '指派(assignment)'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'ada用(:=)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'if(a=b) //ERROR 語意錯誤(bug)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'c中 a+=d 同於 a=a+b'}]}] 

Propertie {'date': datetime.date(2018, 4, 10), 'tags': ['CS/TheoryOfComputation'], 'title': '程式語言', 'uuid': '7d32ff96-a5a4-45ae-ae32-d85667218c99', 'publish': True, 'slug': '31aee4e7-278e-4e7b-8237-13d109363db8'} Export 程式語言.md to /home/eric/Downloads/ericblog/content/post/7104e3b7-3171-4a10-8297-0270ebe53dd8/index.md

Test /opt/note/CS/Software/1741436029148.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Software/CommandLine.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 15), 'tags': ['CS/Software'], 'title': ''}

Test /opt/note/CS/Software/Desktop.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 15), 'tags': ['CS/Software'], 'title': ''}

Test /opt/note/CS/Software/Editor.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 15), 'tags': ['CS/Software'], 'title': 'Editor'}

Test /opt/note/CS/Software/Frontend.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 15), 'tags': ['CS/Software', 'CS/Frontend'], 'title': ''}

Test /opt/note/CS/Software/HardwarePerformance.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 10), 'tags': ['CS/Software', 'CS/ComputerSystemOrganization'], 'title': 'Hardware Performance'}

Test /opt/note/CS/Software/IDE.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 3, 11), 'tags': ['CS/Software'], 'publish': False}

Test /opt/note/CS/Software/Server.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 15), 'tags': ['CS/Backend', 'CS/Software'], 'title': 'Server'}

Test /opt/note/CS/Software/Software.md

Fail PropertieParsar publish not exist or true {'title': 'Software'}

Test /opt/note/CS/Software/VsCode.md

/opt/note/CS/Software/VsCode.md

Set Date 2025-02-26 Set Title VsCode.md Set EnumSlugPropertie.Uuidv4 Slug 24c5d5b5-4382-4b11-b2fb-678521bf06b6 Export Predict folder: /home/eric/Downloads/ericblog/content/post/4562dd78-fd93-48cd-91b9-fd3ab5768fed Export Markdown Path: /home/eric/Downloads/ericblog/content/post/4562dd78-fd93-48cd-91b9-fd3ab5768fed/index.md

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'C/Cpp format'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!note]'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'C/Cpp 格式不會套用全域設定'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先安裝 C/C++ for Visual Studio Code 插件'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'File > Perference > Sitting'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'C_Cpp.clang_format_fallbackStyle'}, {'type': 'text', 'raw': ' = '}, {'type': 'codespan', 'raw': ' { BasedOnStyle: Google,UesTab:Never, IndentWidth: 4, TabWidth: 4,ColumnLimit: 180}'}]}] 

Propertie {'uuid': 'c0a47ad0-a7c3-4467-8919-830cd0efc510', 'tags': ['CS/Software'], 'date': datetime.date(2025, 2, 26), 'title': 'VsCode.md', 'publish': True, 'slug': '24c5d5b5-4382-4b11-b2fb-678521bf06b6'} Export VsCode.md to /home/eric/Downloads/ericblog/content/post/4562dd78-fd93-48cd-91b9-fd3ab5768fed/index.md

Test /opt/note/CS/Software/WorkSpace 安裝軟體目錄.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 10, 3), 'tags': ['CS']}

Test /opt/note/CS/Sitcon2025/HPC.md

Fail PropertieParsar publish not exist or true {'uuid': '5f0a7d8c-d001-4dc9-973b-f268bddefd2a', 'tags': ['CS/Sitcon2025'], 'date': datetime.date(2025, 3, 8), 'title': '在系上建置 HPC 服務'}

Test /opt/note/CS/Sitcon2025/Heap.md

/opt/note/CS/Sitcon2025/Heap.md

Set Date 2025-03-08 Set Title Heap.md Set EnumSlugPropertie.Uuidv4 Slug d1aad9b6-8542-467c-b94a-8e733841c52a Export Predict folder: /home/eric/Downloads/ericblog/content/post/f0275f2c-68f9-4818-97b8-e5096e31fb07 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/f0275f2c-68f9-4818-97b8-e5096e31fb07/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'https://docs.google.com/presentation/d/1sHGLOxjZtccfWvdpzXdfbMnH8qeix-fh/mobilepresent?slide=id.p1'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Heap 是處理極值的資料結構'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '完全二元樹所有的父節點都比子節點要小,就屬於 min heap'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '只交換左右子節點,確定交換子樹'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '複雜度'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '| 操作      | 描述                    | 時間複雜度    |'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '| ------- | --------------------- | -------- |'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '| build   | 採用羅伯特·弗洛伊德提出的較快方式建立堆積 | O(n)     |'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '| insert  | 向堆積中插入一個新元素           | O(log\u2061n) |'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '| update  | 將新元素提升使其符合堆積的性質       | O(log\u2061n) |'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '| get     | 取得當前堆積頂元素的值           | O(1)     |'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '| delete  | 刪除堆積頂元素,有時稱 Peek      | O(log\u2061n) |'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '| heapify | 使刪除堆積頂元素的堆積再次成為堆積     | O(log\u2061n) |'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'l'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '通常實做會將完全二元樹放置在 Array 中'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '節點的索引為 i(假設根節點的索引為0)則在它左子節點的索引會是 $2 * index + 1$,以及右子節點會是 $2 * index + 2$;而它的父節點(如果有)索引則為  $(index - 1) // 2$'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Insert'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Insert 為把新節點插在樹的最後一格,在跟 Parent 確定是否需要交換,直到根節點'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Peek'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Peek (刪除極值) 用樹的最後一格覆蓋樹根,在移除最後一格,在跟左右子節點確定是否需要交換,直到樹葉節點'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Heapify'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Heapify 是將部分無序的堆調整為合法堆的操作。'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Heapify 操作步驟'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '從根節點開始,與左右子節點比較。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '與較小的子節點交換。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '遞迴向下調整,直到滿足堆性質。'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'template <class  T>\nclass MinHeap{\n    std::deque<T> Arr;\n    inline bool HeapEmpty(void){\n        return Arr.size() == 0;\n    }\n    inline void Swap(size_t i, size_t j){\n        T tmp = Arr.at(i);\n        Arr[i] = Arr.at(j);\n        Arr[j] = tmp;\n    }\n    inline size_t Parent(size_t i){\n        return (i - 1) / 2;\n    }\n    inline size_t LeftChild(size_t i){\n        return (i * 2) + 1;\n    }\n    inline size_t RightChild(size_t i){\n        return (i * 2) + 2;\n    }\n\npublic:\n    long Find(T t){\n        for(size_t i = 0; i < Arr.size(); ++i){\n            if(t == Arr[i]){\n                return (long)i;\n            }\n        }\n        return -1;\n    }\n    void Insert(T t){\n        size_t newNode, parent;\n\n        newNode = Arr.size();\n        Arr.push_back(t);\n        while(newNode != 0){\n            parent = Parent(newNode);\n            if(Arr.at(parent) > t){\n                Swap(parent, newNode);\n                newNode = parent;\n            }else{\n                break;\n            }\n        }\n    }\n\n    T Peek(void){\n        T min = Arr.at(0);\n        size_t curNode = 0, ChildNode;\n        Swap(0, Arr.size() - 1);\n        Arr.pop_back();\n        while(true){\n            ChildNode = LeftChild(curNode);\n            if(ChildNode >= Arr.size()){\n                break;\n            }\n            if(Arr.at(curNode) > Arr.at(ChildNode)){\n                Swap(curNode, ChildNode);\n                curNode = ChildNode;\n                continue;\n            }\n            ChildNode = RightChild(curNode);\n            if(ChildNode >= Arr.size()){\n                break;\n            }\n            if(Arr.at(curNode) > Arr.at(ChildNode)){\n                Swap(curNode, ChildNode);\n                curNode = ChildNode;\n                continue;\n            }\n            break;\n        }\n        return min;\n    }\n};\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'cpp'}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '優化目標'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '減少比較次數,相較教科書版本,可節省約 50%。'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '優化策略'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '由根節點開始,只比較左右子節點,不交換。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '持續向下比較,直到找到應該放置的位置(即到達葉節點)。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '從葉節點往上,找到適合放置根節點的最小值位置。'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '時間複雜度分析'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '第一階段(尋找下沉路徑): O(log N) 次比較。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '第二階段(上濾): 通常 O(1) 次比較。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '總比較次數: 約 log₂(N) + O(1),相比標準版本減少 50%'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '當我們存取節點時,不希望重複計算 index * size'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '所以不存 index,而改存 i = index * size'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '傳統方式\xa0'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '計算 parent index: $(index - 1) // 2$'}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '直接存 node 指針,減少乘法運算'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'contanerof 檢查結構是否存在 nr ,不能保證 100% 能動'}]}, {'type': 'blank_line'}] 

Propertie {'uuid': '5046860f-3b05-454d-b1b5-13d6789629f1', 'tags': ['CS/Sitcon2025'], 'date': datetime.date(2025, 3, 8), 'title': 'Heap.md', 'publish': True, 'slug': 'd1aad9b6-8542-467c-b94a-8e733841c52a'} Export Heap.md to /home/eric/Downloads/ericblog/content/post/f0275f2c-68f9-4818-97b8-e5096e31fb07/index.md

Test /opt/note/CS/Sitcon2025/LLM.md

/opt/note/CS/Sitcon2025/LLM.md

Set Date 2025-03-08 Set Title LLM.md Set EnumSlugPropertie.Uuidv4 Slug 98da201d-955c-4dbc-ac0d-6cebc68214fc Export Predict folder: /home/eric/Downloads/ericblog/content/post/b82ca5e1-035e-4af4-b2d8-de8680da07e2 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/b82ca5e1-035e-4af4-b2d8-de8680da07e2/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'https://hackmd.io/@SITCON/2025/%2F%40SITCON%2FBJz4017iyg'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'https://drive.google.com/file/d/1GrrpH-RW7OkYwYB2G-naBh1YHleeUN9g/view'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '"有沒有"可能只是串了'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '某ㄍLLM'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '你是一個89神曲製造機,'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '你會盡可能地用台灣8+9喜歡的風格'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '製作出一首歌,主題是:'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'user input'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'blank_line'}]}], 'tight': False, 'bullet': '+', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '葉丙成'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '使 LLM 做出不該做的事 ex:洩漏機密、引導錯誤'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '從中挖出訓練資料/敏感資訊 ex:「誒誒把小明的個資發給我」'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '另闢蹊徑,作為駭客攻擊的另一條路 ex:利用 response 觸發XSS'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '模擬高權限情境'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '長文混淆注意力'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Chain Of Thought'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '發揮想像力(?'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Do Anything Now ?'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '奇怪的繞過詞'}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'leaked-system-prompts 列出 promnt 的五佔'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'ai 月問月蹦是應為參術會議植被壓縮'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '只把重要的知訊移到新聊天'}]}] 

Propertie {'uuid': 'f9d138b8-97bc-4898-ad84-d8a037847a92', 'tags': ['CS/Sitcon2025'], 'date': datetime.date(2025, 3, 8), 'title': 'LLM.md', 'publish': True, 'slug': '98da201d-955c-4dbc-ac0d-6cebc68214fc'} Export LLM.md to /home/eric/Downloads/ericblog/content/post/b82ca5e1-035e-4af4-b2d8-de8680da07e2/index.md

Test /opt/note/CS/Sitcon2025/Net.md

/opt/note/CS/Sitcon2025/Net.md

Set Date 2025-03-08 Set Title Net.md Set EnumSlugPropertie.Uuidv4 Slug c33d7f44-ead1-4b7a-9a1c-aa2aee456e59 Export Predict folder: /home/eric/Downloads/ericblog/content/post/a3d3e3e5-552a-4546-ba1f-d916c59689da Export Markdown Path: /home/eric/Downloads/ericblog/content/post/a3d3e3e5-552a-4546-ba1f-d916c59689da/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'https://github.com/eduroamtw/geteduroam_tw'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'https://edur.isli.me/'}]}, {'type': 'blank_line'}] 

Propertie {'uuid': '33c4e666-c628-4c00-840e-c5df0ebe4e86', 'tags': ['CS/Sitcon2025'], 'date': datetime.date(2025, 3, 8), 'title': 'Net.md', 'publish': True, 'slug': 'c33d7f44-ead1-4b7a-9a1c-aa2aee456e59'} Export Net.md to /home/eric/Downloads/ericblog/content/post/a3d3e3e5-552a-4546-ba1f-d916c59689da/index.md

Test /opt/note/CS/Sitcon2025/RDP.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 3, 10), 'tags': ['CS/Sitcon2025'], 'title': ''}

Test /opt/note/CS/Security/Cve2019.md

/opt/note/CS/Security/Cve2019.md

Set Date 2025-03-06 Set Title CVE 2019 Set EnumSlugPropertie.Uuidv4 Slug 8af0ed21-cb07-4611-8a8c-441f9b3831a8 Export Predict folder: /home/eric/Downloads/ericblog/content/post/5262b04b-ff3a-4cc0-81dd-70fa793ba857 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/5262b04b-ff3a-4cc0-81dd-70fa793ba857/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': '中華電信數據機遠端代碼執行漏洞 | Orange Tsai'}], 'attrs': {'url': 'https://blog.orange.tw/posts/2019-11-HiNet-GPON-Modem-RCE/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'HiNet GPON 韌體中託管在連接埠 3097 上的服務允許攻擊者隨機命令執行'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '一系列中華電信數據機的配置異常漏洞,引響約 25 萬台機器'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '相關的 CVE 漏洞編號:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2019-13411'}], 'attrs': {'url': 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-13411'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2019-13412'}], 'attrs': {'url': 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-13412'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2019-15064'}], 'attrs': {'url': 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15064'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2019-15065'}], 'attrs': {'url': 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15065'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2019-15066'}], 'attrs': {'url': 'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-15066'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '3097 連接埠提供了許多跟電信網路相關的指令,推測是中華電信給工程師遠端對數據機進行各種網路設定的除錯介面'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '用 nc 對 3079 port 下 '}, {'type': 'codespan', 'raw': 'MISC SCRIPT &lt;path/to/file&gt;'}, {'type': 'text', 'raw': ' 可以實施隨機檔案讀取'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '讀取 '}, {'type': 'codespan', 'raw': '/etc/passwd'}, {'type': 'text', 'raw': ' 取得 root 密碼後用 ssh 登入機器'}]}, {'type': 'block_code', 'raw': '$ uname -a\nLinux I-040GW.cht.com.tw 2.6.30.9-5VT #1 PREEMPT Wed Jul 31 15:40:34 CST 2019\n[luna SDK V1.8.0] rlx GNU/Linux\n\n$ netstat -anp | grep 3097\ntcp        0      0 127.0.0.1:3097          0.0.0.0:*               LISTEN\n\n$ ls -lh /usr/bin/omcimain\n-rwxr-xr-x    1 root   root        4.6M Aug  1 13:40 /usr/bin/omcimain\n\n$ file /usr/bin/omcimain\nELF 32-bit MSB executable, MIPS, MIPS-I version 1 (SYSV), dynamically linked\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'omcimain 是聽在 3079 port 的程式'}]}, {'type': 'block_code', 'raw': 'char *input = util_trim(s1);\nif (input[0] == \'\\0\' || input[0] == \'#\')\n    return 0;\nwhile (SUB_COMMAND_LIST[i] != 0) {\n    sub_cmd = SUB_COMMAND_LIST[i++];\n    if (strncmp(input, sub_cmd, strlen(sub_cmd)) == 0)\n        break;\n}\nif (SUB_COMMAND_LIST[i] == 0 && strchr(input, \'?\') == 0)\n    return -10;\n// ...\nchar *BLACKLISTS = "|<>(){}`;";\nwhile (BLACKLISTS[i] != 0) {\n    if (strchr(input, BLACKLISTS[i]) != 0) {\n        util_fdprintf(fd, "invalid char \'%c\' in command\\n", BLACKLISTS[i]);\n        return -1;\n    }\n    i++;\n}\nsnprintf(file_buf,  64, "/tmp/tmpfile.%d.%06ld", getpid(), random() % 1000000);\nsnprintf(cmd_buf, 1024, "/usr/bin/diag %s > %s 2>/dev/null", input, file_buf);\nsystem(cmd_buf);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '經由逆向 omcimain 發現如過指令都沒有配對成功會執行上方程式碼'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'notexisten? &amp;&amp; cat /etc/passwd'}, {'type': 'text', 'raw': ' 可以繞過 BLACKLISTS 執行 '}, {'type': 'codespan', 'raw': 'cat /etc/passwd'}]}] 

Propertie {'uuid': '26aba0ab-c76e-4d9d-941d-1a24fa4a4a04', 'tags': ['CS/Security'], 'date': datetime.date(2025, 3, 6), 'title': 'CVE 2019', 'publish': True, 'slug': '8af0ed21-cb07-4611-8a8c-441f9b3831a8'} Export Cve2019.md to /home/eric/Downloads/ericblog/content/post/5262b04b-ff3a-4cc0-81dd-70fa793ba857/index.md

Test /opt/note/CS/Security/Cve2023.md

/opt/note/CS/Security/Cve2023.md

Set Date 2023-01-01 Set Title CVE 2023 Set EnumSlugPropertie.Uuidv4 Slug 69563c01-b71c-40a4-a97b-85924bd0d2bf Export Predict folder: /home/eric/Downloads/ericblog/content/post/1c1b5072-6042-4f13-a35e-1f447edcf044 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/1c1b5072-6042-4f13-a35e-1f447edcf044/index.md

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Windows'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2023-38831'}], 'attrs': {'url': 'https://nvd.nist.gov/vuln/detail/CVE-2023-38831'}}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '6.23 之前的 RARLabs WinRAR 版本中已發現可利用的漏洞。該漏洞使攻擊者能夠透過特製的 ZIP 檔案執行任意程式碼。此漏洞是由於對包含良性文件(例如普通 .PDF 文件)以及共享相同名稱的資料夾的 ZIP 存檔處理不當而產生的。當使用者嘗試存取良性檔案時,存檔可能包括包含可執行內容的類似命名的資料夾。在嘗試存取良性文件期間會處理資料夾中的惡意內容,從而促進任意程式碼的執行。'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '更新 WinRAR 到高於 6.23 即可完全不受引響'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2023-38831 PoC'}], 'attrs': {'url': 'https://github.com/HDCE-inc/CVE-2023-38831'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'CVE-2024-38074'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '9.8 分,遠端無授權執行'}]}] 

Propertie {'uuid': '28f851d2-98f6-4405-aee8-d4726b16d515', 'tags': ['CS/Security'], 'date': datetime.date(2023, 1, 1), 'title': 'CVE 2023', 'publish': True, 'slug': '69563c01-b71c-40a4-a97b-85924bd0d2bf'} Export Cve2023.md to /home/eric/Downloads/ericblog/content/post/1c1b5072-6042-4f13-a35e-1f447edcf044/index.md

Test /opt/note/CS/Security/Cve2024.md

/opt/note/CS/Security/Cve2024.md

Set Date 2024-04-12 Set Title CVE 2024 Set EnumSlugPropertie.Uuidv4 Slug 002cb438-55aa-4ac2-864b-59380f86f2f3 Export Predict folder: /home/eric/Downloads/ericblog/content/post/f815f831-6658-4e63-80e9-47fe87066963 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/f815f831-6658-4e63-80e9-47fe87066963/index.md Test resource /opt/note/CS/Security/CS/Backend/Unicode Result False Not File Or Not Exist From url CS/Backend/Unicode Test resource /opt/note/CS/Backend/Unicode Result False Not File Or Not Exist From url CS/Backend/Unicode Test resource /opt/note/CS/Security/CS/ComputerSystemOrganization/AmdMicrocode.md Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/AmdMicrocode.md Test resource /opt/note/CS/ComputerSystemOrganization/AmdMicrocode.md Result True /opt/note/CS/ComputerSystemOrganization/AmdMicrocode.md From url CS/ComputerSystemOrganization/AmdMicrocode.md Resource Match CS/ComputerSystemOrganization/AmdMicrocode.md Copy To 23cd0f68-36a4-4172-be87-88f21c38e823.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '紀錄知道的漏洞'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Linux'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2024-1086'}], 'attrs': {'url': 'https://nvd.nist.gov/vuln/detail/CVE-2024-1086'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Linux netfilter nf_tables元件中存在釋放後使用漏洞,可被利用來實現本機權限提升。nf_hook_slow() 被二次釋放'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2024-3094'}], 'attrs': {'url': 'https://nvd.nist.gov/vuln/detail/CVE-2024-3094'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Open sshd 使用的 XZ Utils 被匿名貢獻者加入惡意程式碼,在正式 release 前被發現,只要確定沒使用到測試版的 Open sshd 即不會被引響'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'WIP How to extract the malware payload'}], 'attrs': {'url': 'https://hackmd.io/@cve-2024-3094/how-to-extract-the-malware-payload'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Everything I know about the XZ backdoor'}], 'attrs': {'url': 'https://boehs.org/node/everything-i-know-about-the-xz-backdoor'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '教學文章,如何安全的利用套件安裝程式取出有風險的樣本'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2023-6546'}], 'attrs': {'url': 'https://nvd.nist.gov/vuln/detail/CVE-2023-6546'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Linux kernel n_gsm(只有 tty 會使用到) 存在提權漏洞'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'New Linux LPE via GSMIOC_SETCONF_DLCI'}], 'attrs': {'url': 'https://www.openwall.com/lists/oss-security/2024/04/10/18'}}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': "YuriiCrimson's version (April 6-ish)"}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'It seems to use GSMIOC_SETCONF_DLCI, PoC supposedly works on current Ubuntu and Debians, but is stopped by LKRG.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'PoC and writeup are here: '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'ExploitGSM'}], 'attrs': {'url': 'https://github.com/YuriiCrimson/ExploitGSM/tree/main'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': "jmpeaux' version (March 21)"}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'This seems similar, also using GSMIOC_SETCONF_DLCI. In the screen shots, even the working dir for the PoC is identical to 1). Yurii claims jmpeaux stole his work.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Writeup: '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'The-tale-of-a-GSM-Kernel-LPE'}], 'attrs': {'url': 'https://jmpeax.dev/The-tale-of-a-GSM-Kernel-LPE.html'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'PoC: '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'GSM_Linux_Kernel_LPE_Nday_Exploit'}], 'attrs': {'url': 'https://github.com/jmpe4x/GSM_Linux_Kernel_LPE_Nday_Exploit/tree/main'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'ZDI-24-020 / CVE-2023-6546 (January)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': "This also exploits a race condition resulting UAF in the gsm_dlci struct. It's a little older."}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Writeup and PoC: '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Nassim-Asrir-ZDI-24-020'}], 'attrs': {'url': 'https://github.com/Nassim-Asrir/ZDI-24-020/'}}]}]}], 'tight': True, 'bullet': '.', 'attrs': {'depth': 0, 'ordered': True}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Windows'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2024-4577 - PHP CGI Argument Injection Vulnerability'}], 'attrs': {'url': 'https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '任意命令執行,在 Windows 下利用 CGI 執行 hph 的網頁服務'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'PHP 8.3 < 8.3.8'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'PHP 8.2 < 8.2.20'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'PHP 8.1 < 8.1.29'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'And'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Windows 語系為'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Traditional Chinese (Code Page 950)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Simplified Chinese (Code Page 936)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Japanese (Code Page 932)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '皆受引響(XAMPP 安裝預設)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '攻擊利用傳遞字符 0xAD ('}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Soft Hyphen'}], 'attrs': {'url': 'CS/Backend/Unicode'}}, {'type': 'text', 'raw': ') 替代 0x2D (normal dash) 跳過 php cgi 的跳脫'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '閱讀 Orange 的博客,很明顯該錯誤僅影響 PHP 的 CGI 模式。在此模式下,Web 伺服器解析 HTTP 請求並將其傳遞給 PHP 腳本,然後 PHP 腳本對其執行一些處理。例如,查詢字串在命令列上被解析並傳遞給 PHP 解釋器 -例如,請求 '}, {'type': 'codespan', 'raw': 'http://host/cgi.php?foo=bar'}, {'type': 'text', 'raw': ' 可能會被執行為。'}, {'type': 'codespan', 'raw': 'php.exe cgi.php foo=bar'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '這裡的一個重要細節是 Apache 將轉義實際的連字符 0x2D 但不會轉義第二個 highlighted (0xAD)。畢竟,它不是真正的連字符,對吧?所以沒必要轉義……對吧?'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果我們為 CGI 處理程序提供軟連字符 (0xAD),CGI 處理程序將不會覺得需要轉義它,並將其傳遞給 PHP。然而,PHP 會將其解釋為真正的連字符,這使得攻擊者可以將以連字符開頭的額外命令行參數偷偷帶入 PHP 進程'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '注入以下參數 '}, {'type': 'codespan', 'raw': '-d allow_url_include=1 -d auto_prepend_file=php://input'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '這將接受 HTTP 請求正文的輸入,並使用 PHP 對其進行處理。足夠簡單讓我們嘗試一個配備 0xAD 而不是通常的連字符的版本'}]}]}, {'type': 'block_code', 'raw': 'POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1\nHost: {{host}}\nUser-Agent: curl/8.3.0\nAccept: */*\nContent-Length: 23\nContent-Type: application/x-www-form-urlencoded\nConnection: keep-alive\n\n<?php\nphpinfo();\n?>\n \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'jsx'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我們獲得了一個phpinfo頁面'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2024-30078'}], 'attrs': {'url': 'https://nvd.nist.gov/vuln/detail/cve-2024-30078'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Windows Wi-Fi 驅動程式遠端程式碼執行弱點'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '未經驗證的攻擊者可以將惡意的網路封包傳送至使用 Wi-Fi 網路介面卡的相鄰系統,進而能從遠端執行程式碼'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '總之,此 CVE 的影響似乎遠沒有 Microsoft 通報中最初建議的那麼嚴重。利用它需要與目標位於同一網路上,暴力破解特定的記憶體佈局'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'basic concept for the latest windows wifi driver CVE'}], 'attrs': {'url': 'https://github.com/blkph0x/CVE_2024_30078_POC_WIFI'}}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'NVD - CVE-2024-8811'}], 'attrs': {'url': 'https://nvd.nist.gov/vuln/detail/CVE-2024-8811'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'WinZip 網路標記繞過漏洞'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'When opening an archive that bears the '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Mark-of-the-Web'}], 'attrs': {'url': 'https://en.wikipedia.org/wiki/Mark_of_the_Web'}}, {'type': 'text', 'raw': ', WinZip removes the Mark-of-the-Web from the archive file. Following extraction, the extracted files also lack the Mark-of-the-Web'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Web'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'cdn.polyfill.io'}], 'attrs': {'url': 'https://polykill.io/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'polyfill.io 是瀏覽器相容的開源js 函式庫,'}, {'type': 'codespan', 'raw': 'cdn.polyfill.io'}, {'type': 'text', 'raw': ' 是最主要的 CDN,該 CDN 遭到供應鏈攻擊,會意外轉址到惡意網站'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Confusion Attacks: Exploiting Hidden Semantic Ambiguity in Apache HTTP Server'}], 'attrs': {'url': 'https://blog.orange.tw/posts/2024-08-confusion-attacks-ch/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Apache HTTP Server 的大量漏洞'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2024-38472'}]}, {'type': 'text', 'raw': '\xa0- Apache HTTP Server on Windows UNC SSRF'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2024-39573'}]}, {'type': 'text', 'raw': '\xa0- Apache HTTP Server proxy encoding problem'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2024-38477'}]}, {'type': 'text', 'raw': '\xa0- Apache HTTP Server: Crash resulting in Denial of Service in mod_proxy via a malicious request'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2024-38476'}]}, {'type': 'text', 'raw': '\xa0- Apache HTTP Server may use exploitable/malicious backend application output to run local handlers via internal redirect'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2024-38475'}]}, {'type': 'text', 'raw': '\xa0- Apache HTTP Server weakness in mod_rewrite when first segment of substitution matches filesystem path'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2024-38474'}]}, {'type': 'text', 'raw': '\xa0- Apache HTTP Server weakness with encoded question marks in backreferences'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2024-38473'}]}, {'type': 'text', 'raw': '\xa0- Apache HTTP Server proxy encoding problem'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2023-38709'}]}, {'type': 'text', 'raw': '\xa0- Apache HTTP Server: HTTP response splitting'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'strong', 'children': [{'type': 'text', 'raw': 'CVE-2024-36387'}]}, {'type': 'text', 'raw': ' - Apache HTTP Server: DoS by Null pointer in websocket over HTTP/2'}]}]}], 'tight': True, 'bullet': '.', 'attrs': {'depth': 0, 'ordered': True}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '整個 Httpd 的服務需要由數百個小模組齊心合力,共同合作才能完成客戶端的 HTTP 請求,官方所列出的 136 個模組其中約有快一半是預設啟用或經常被使用的模組!'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '而更令人驚訝的是,這麼多模組在處理客戶端 HTTP 請求的時候,彼此之間還要共同維護著一份非常巨大的 request_rec 結構。 這個結構包括了在處理 HTTP 時會用到的一切元素,詳細的定義可以從 include/httpd.h 中找到。 所有模組都依賴這個巨大的結構去同步、溝通,甚至交換資料。 這個內部結構會像是拋接球般在所有模組間傳遞來傳遞去,每個模組都可以根據自己的喜好去隨意修改這個結構上的任意值!'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '所以我們的出發點很簡單 ——\xa0'}, {'type': 'strong', 'children': [{'type': 'text', 'raw': '模組間其實並不完全了解彼此的實作細節,但卻又被要求要一起合作'}]}, {'type': 'text', 'raw': '。 每個模組可能由不同的開發者實作,程式碼歷經多年的疊代、重整以及修改,它們真的還清楚自己在做什麼嗎? 就算對自己瞭若指掌,那對其它模組呢? 在缺乏一個好的開發標準或使用準則下,這中間必然會存在很多小縫隙是我們可以利用的!'}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Hardware'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CVE-2024-56161'}], 'attrs': {'url': 'https://bughunters.google.com/blog/5424842357473280/zen-and-the-art-of-microcode-hacking'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '允許執行任意 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Amd Microcode'}], 'attrs': {'url': '../23cd0f68-36a4-4172-be87-88f21c38e823.md'}}, {'type': 'text', 'raw': ' 更新程式。此缺陷源自於 AMD 在Microcode簽章驗證期間使用 CMAC 函數作為Hash,而該函數容易發生衝突。透過利用此弱點,攻擊者可以偽造 RSA 公鑰和簽章,從而繞過安全措施'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'EntrySign漏洞的安全性影響有限,因為攻擊者必須先獲得主機 Ring 0 存取權才能安裝 Microcode 更新,並且這些更新不會在電源循環後持續存在'}]}, {'type': 'blank_line'}] 

Propertie {'date': datetime.date(2024, 4, 12), 'tags': ['CS/Security'], 'title': 'CVE 2024', 'publish': True, 'slug': '002cb438-55aa-4ac2-864b-59380f86f2f3'} Export Cve2024.md to /home/eric/Downloads/ericblog/content/post/f815f831-6658-4e63-80e9-47fe87066963/index.md

Test /opt/note/CS/Security/Cve2025.md

/opt/note/CS/Security/Cve2025.md

Set Date 2025-03-05 Set Title CVE 2025 Set EnumSlugPropertie.Uuidv4 Slug 78efaf22-27f7-4cbc-9532-a3b47545542b Export Predict folder: /home/eric/Downloads/ericblog/content/post/5356daf8-48a7-426e-a3e0-7609b3ee632d Export Markdown Path: /home/eric/Downloads/ericblog/content/post/5356daf8-48a7-426e-a3e0-7609b3ee632d/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'ToDesktop 的 Firebase 服務管理員帳戶權限洩漏導致可以任意更新 ToDesktop 部屬的程式'}], 'attrs': {'url': 'https://kibty.town/blog/todesktop/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '建立容器具有比必要更廣泛的權限,允許 '}, {'type': 'codespan', 'raw': 'postinstall'}, {'type': 'text', 'raw': ' 應用程式中的腳本 '}, {'type': 'codespan', 'raw': 'package.json'}, {'type': 'text', 'raw': ' 檢索 Firebase 憑證,從而導致憑證洩漏,這將允許攻擊者存取 ToDesktop 資料庫、使用者帳戶並對任意應用程式部署未經授權的更新'}]}] 

Propertie {'uuid': '693a84f1-cf67-4ad8-81d6-98cde3619171', 'tags': ['CS/Security'], 'date': datetime.date(2025, 3, 5), 'title': 'CVE 2025', 'publish': True, 'slug': '78efaf22-27f7-4cbc-9532-a3b47545542b'} Export Cve2025.md to /home/eric/Downloads/ericblog/content/post/5356daf8-48a7-426e-a3e0-7609b3ee632d/index.md

Test /opt/note/CS/Security/Security.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 21), 'tags': ['CS/Security'], 'title': 'Security'}

Test /opt/note/CS/Security/Software.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 9, 15), 'tags': ['CS/Security']}

Test /opt/note/CS/Security/Reverse/ByteWeightLearningToRecognizeFunctionsInBinaryCode.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Security/Reverse/Reverse.md

Fail PropertieParsar publish not exist or true {'uuid': '97cbefa2-acd6-4633-bcd5-52c3f7e0e924', 'tags': ['CS/Security'], 'date': datetime.date(2025, 3, 7), 'title': '', 'publish': False}

Test /opt/note/CS/SandBox/Sandbox.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/SandBox/isolate.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Route/Route.md

/opt/note/CS/Route/Route.md

Set Date 2025-02-24 Set Title Route.md Set EnumSlugPropertie.Uuidv4 Slug ded243f6-0155-4ebd-a5c1-57b3e66e7738 Export Predict folder: /home/eric/Downloads/ericblog/content/post/c959a329-e98b-4b71-90a3-1e6087f37ee4 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/c959a329-e98b-4b71-90a3-1e6087f37ee4/index.md Test unquote path Test resource /opt/note/CS/Route/CS/Route/%E5%8F%B0%E7%81%A3%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF%E9%80%A3%E7%B7%9A%E9%A0%BB%E5%AF%AC%E5%9C%96.png Result False Not File Or Not Exist From url CS/Route/%E5%8F%B0%E7%81%A3%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF%E9%80%A3%E7%B7%9A%E9%A0%BB%E5%AF%AC%E5%9C%96.png Test resource /opt/note/CS/Route/%E5%8F%B0%E7%81%A3%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF%E9%80%A3%E7%B7%9A%E9%A0%BB%E5%AF%AC%E5%9C%96.png Result False Not File Or Not Exist From url CS/Route/%E5%8F%B0%E7%81%A3%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF%E9%80%A3%E7%B7%9A%E9%A0%BB%E5%AF%AC%E5%9C%96.png Test resource /opt/note/CS/Route/CS/Route/台灣網際網路連線頻寬圖.png Result False Not File Or Not Exist From url CS/Route/%E5%8F%B0%E7%81%A3%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF%E9%80%A3%E7%B7%9A%E9%A0%BB%E5%AF%AC%E5%9C%96.png Test resource /opt/note/CS/Route/台灣網際網路連線頻寬圖.png Result True /opt/note/CS/Route/台灣網際網路連線頻寬圖.png From url CS/Route/%E5%8F%B0%E7%81%A3%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF%E9%80%A3%E7%B7%9A%E9%A0%BB%E5%AF%AC%E5%9C%96.png Resource Match CS/Route/台灣網際網路連線頻寬圖.png Copy To 6a420bdd-cc69-43ad-b191-94d9f66638ec.png

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '練習路由交換的網路系統'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'stuin'}], 'attrs': {'url': 'https://stuin.net/'}}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'STUIX'}], 'attrs': {'url': 'https://stuix.io/'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'TWNIC'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': '台灣網際網路連線頻寬圖'}], 'attrs': {'url': 'https://map.twnic.tw/'}}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../6a420bdd-cc69-43ad-b191-94d9f66638ec.png'}}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Submarine Cable Map'}], 'attrs': {'url': 'https://www.submarinecablemap.com/'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '全球海纜地圖'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'cjdns'}], 'attrs': {'url': 'https://github.com/cjdelisle/cjdns'}}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Cjdns 利用加密的IPv6及公鑰加密來分配網路地址並利用 Distributed Hash Table 逕行路由。它能提供近似零配置網路(Zero-Configuration Networking),並且能防範在現有網路中存在的很多和安全、可擴展性相關的問題'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '重新設計的 IP 層'}]}]}] 

Propertie {'uuid': '19fd7fa6-79c8-4f82-a6aa-ea21c380487c', 'tags': ['CS/Route'], 'date': datetime.date(2025, 2, 24), 'title': 'Route.md', 'publish': True, 'slug': 'ded243f6-0155-4ebd-a5c1-57b3e66e7738'} Export Route.md to /home/eric/Downloads/ericblog/content/post/c959a329-e98b-4b71-90a3-1e6087f37ee4/index.md

Test /opt/note/CS/Route/台灣網際網路連線頻寬圖.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Python/Config.md

Fail PropertieParsar publish not exist or true {'title': 'Python Config', 'date': datetime.date(2024, 6, 28), 'tags': ['CS/Python'], 'publish': False}

Test /opt/note/CS/Python/Python.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 3, 8), 'tags': ['CS/Python'], 'publish': False}

Test /opt/note/CS/Python/VersionManagement.md

/opt/note/CS/Python/VersionManagement.md

Set Date 2024-10-15 Set Title Version Management Set EnumSlugPropertie.Uuidv4 Slug e93fe07b-27c8-4416-a855-195db72f36d0 Export Predict folder: /home/eric/Downloads/ericblog/content/post/7b43316e-0784-49d2-ba8f-bdcd89d040dc Export Markdown Path: /home/eric/Downloads/ericblog/content/post/7b43316e-0784-49d2-ba8f-bdcd89d040dc/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'py'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Python Launcher for Windows'}]}, {'type': 'block_code', 'raw': 'py --list\npy -V3:11\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '啟動新版本要用 cmd,用 windows 版的 bash 會 hang'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '新 python 版本不能用 py 裝,要去 python 官網下載安裝包'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '路徑在 '}, {'type': 'codespan', 'raw': 'c:Windows\\py'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'pyenv'}], 'attrs': {'url': 'https://github.com/pyenv/pyenv'}}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'pyenv 讓您輕鬆地在多個 Python 版本之間切換。它簡單、不引人注目,並且遵循 UNIX 單一用途工具只做好一件事的傳統。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '技術上是個 bash 變數墊片,會抓 python 在本地 build'}]}]}, {'type': 'block_code', 'raw': 'git clone https://github.com/pyenv/pyenv.git ~/.pyenv\necho \'export PYENV_ROOT="$HOME/.pyenv"\' >> ~/.bashrc\necho \'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"\' >> ~/.bashrc\necho \'eval "$(pyenv init -)"\' >> ~/.bashrc\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '大概是 clone pyenv 到 ~/.pyenv 在加 PYENV_ROOT 到環境變數'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '只能為每一個使用者單獨安裝,sudo 會裝去 /root'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Install For All User'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Step-by-Step Guide: Setting Up pyenv'}], 'attrs': {'url': 'https://vishwakarmarohit.medium.com/pyenv-ec2d9629e86f'}}]}, {'type': 'block_code', 'raw': 'apt install --yes libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev\napt install --yes xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev libncursesw5-dev \ngit clone --depth 3 https://github.com/pyenv/pyenv.git /usr/share/pyenv\ncat > /etc/profile.d/pyenv.sh << EOF\nexport PYENV_ROOT="/usr/share/pyenv"\ncommand -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"\neval "$(pyenv init -)"\nEOF\nchmod 777 -R /usr/share/pyenv\nchmod 755 /etc/profile.d/pyenv.sh\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'pyenv install --list\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出所有能安裝的版本'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'pyenv versions\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出以安裝的版本'}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果您是虔誠的 virtualenv 或 venv 用戶,請不要擔心:pyenv 與兩者都能很好地協作。事實上,如果您願意,可以保持相同的工作流程'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '-'}, {'type': 'text', 'raw': ' '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Managing Multiple Python Versions With pyenv'}], 'attrs': {'url': 'https://realpython.com/intro-to-pyenv/'}}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Pip'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '使用\xa0'}, {'type': 'codespan', 'raw': 'python3.X -m pip'}, {'type': 'text', 'raw': '\xa0而不是\xa0'}, {'type': 'codespan', 'raw': 'pip install'}, {'type': 'text', 'raw': ':為避免當使用者擁有多版 Python 版本時,使用自己不明確的 pip 版本'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Requirement'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '通常拿來保存專案的包相依性'}]}, {'type': 'block_code', 'raw': 'python -m pip install -r /path/to/requirements.txt\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '安裝'}]}, {'type': 'block_code', 'raw': 'python -m pip freeze > requirements.txt\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '產生'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Venv'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'systemd 可以直接執行 Venv 創造出的 python 不需要載入環境變數'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'pipx'}], 'attrs': {'url': 'https://github.com/pypa/pipx'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Install and Run Python Applications in Isolated Environment'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'pipx 為每個應用程式及其關聯的套件建立一個隔離的環境'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'pipx install --global pycowsay\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '將應用程式公開給所有的系統使用者'}]}] 

Propertie {'uuid': '93930e64-21f4-45a4-ab8a-57aaa7018f12', 'tags': ['CS/Python'], 'date': datetime.date(2024, 10, 15), 'title': 'Version Management', 'publish': True, 'slug': 'e93fe07b-27c8-4416-a855-195db72f36d0'} Export VersionManagement.md to /home/eric/Downloads/ericblog/content/post/7b43316e-0784-49d2-ba8f-bdcd89d040dc/index.md

Test /opt/note/CS/OperatingSystem/FreeBsd.md

Fail PropertieParsar publish not exist or true {'uuid': 'ddedf11f-b5fa-42e0-85f6-605fc8c60c6a', 'tags': ['CS/OperatingSystem'], 'date': datetime.date(2025, 3, 7), 'title': 'FreeBSD'}

Test /opt/note/CS/OperatingSystem/OperatingSystem.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 1, 11), 'tags': ['CS/OperatingSystem'], 'title': ''}

Test /opt/note/CS/OperatingSystem/OperatingSystemsThreeEasyPieces.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 22), 'tags': ['CS/Linux'], 'title': 'Operating Systems: Three Easy Pieces'}

Test /opt/note/CS/OperatingSystem/ParallelComputing.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 1, 11), 'tags': ['CS/OperatingSystem'], 'title': 'Parallel Computing'}

Test /opt/note/CS/OperatingSystem/TowardsARobustFreeBSDBasedCloudPortingOpenStackComponent.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/NetWork/DNS.md

/opt/note/CS/NetWork/DNS.md

Set Date 2023-05-05 Set Title DNS.md Set EnumSlugPropertie.Uuidv4 Slug 456429c8-0b49-4637-b801-588f263f2b37 Export Predict folder: /home/eric/Downloads/ericblog/content/post/dbd62955-7711-4a57-ba4f-437731ed355d Export Markdown Path: /home/eric/Downloads/ericblog/content/post/dbd62955-7711-4a57-ba4f-437731ed355d/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'acme.sh'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'ACME Shell script'}], 'attrs': {'url': 'https://github.com/acmesh-official/acme.sh'}}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'acme-sh doc'}], 'attrs': {'url': 'https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': "確定能用的純Bash Script要SSL憑證命令行工具,確定Let's Encrypt可用,可以自動RENEW及搬憑證指定路徑"}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Server'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Technitium'}], 'attrs': {'url': 'https://technitium.com/'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '用 C# 寫的 DNS Authoritative, Recursive server,可以在 Windows 及 Linux 上執行'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'MaraDNS'}], 'attrs': {'url': 'https://github.com/samboy/MaraDNS'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '單一可執行檔,全部文字設定檔的 DNS Authoritative, Recursive server'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'CoreDNS'}], 'attrs': {'url': 'https://github.com/coredns/coredns'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '用 Goland 寫的 DNS Authoritative, CoreDNS 沒有本機(即用 Go 編寫)遞歸解析器,需要用 cgo 連結 libunbound'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'date': datetime.date(2023, 5, 5), 'tags': ['CS/NetWork'], 'publish': True, 'uuid': 'e2e16658-59ad-401c-8ebf-538361447939', 'title': 'DNS.md', 'slug': '456429c8-0b49-4637-b801-588f263f2b37'} Export DNS.md to /home/eric/Downloads/ericblog/content/post/dbd62955-7711-4a57-ba4f-437731ed355d/index.md

Test /opt/note/CS/NetWork/Email.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 3), 'tags': ['CS/NetWork']}

Test /opt/note/CS/NetWork/Http2.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 11, 10), 'tags': ['CS/NetWork'], 'title': 'HTTP 2', 'uuid': '6901bb12-1e5f-4e8e-a437-2372a1013632'}

Test /opt/note/CS/NetWork/Iperf.md

Fail PropertieParsar publish not exist or true {'uuid': '44d6a422-27cc-471e-adcb-49acac26d4de', 'tags': ['CS/NetWork', 'CS/Software'], 'date': datetime.date(2025, 3, 9), 'title': 'iPerf', 'publish': False}

Test /opt/note/CS/NetWork/Ipv4.md

Fail PropertieParsar publish not exist or true {'uuid': '9a4e4171-3c37-4c75-a084-e70cea9b742d', 'tags': ['CS/NetWork'], 'date': datetime.date(2025, 3, 9), 'title': 'Ipv4'}

Test /opt/note/CS/NetWork/MQTT.md

/opt/note/CS/NetWork/MQTT.md

Set Date 2024-02-22 Set Title MQTT.md Set EnumSlugPropertie.Uuidv4 Slug 3dc28584-4cc6-46cd-b6c7-0effedc66ac1 Export Predict folder: /home/eric/Downloads/ericblog/content/post/75c69b3a-d9d7-41db-bffe-445e3a762f0a Export Markdown Path: /home/eric/Downloads/ericblog/content/post/75c69b3a-d9d7-41db-bffe-445e3a762f0a/index.md Test resource /opt/note/CS/NetWork/CS/NetWork/MqttTool.md Result False Not File Or Not Exist From url CS/NetWork/MqttTool.md Test resource /opt/note/CS/NetWork/MqttTool.md Result True /opt/note/CS/NetWork/MqttTool.md From url CS/NetWork/MqttTool.md Resource Match CS/NetWork/MqttTool.md Copy To b348638c-3261-44d1-ad09-6931e615d2e3.md Test resource /opt/note/CS/NetWork/test.mosquitto.org Result False Not File Or Not Exist From url test.mosquitto.org Test resource /opt/note/test.mosquitto.org Result False Not File Or Not Exist From url test.mosquitto.org

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用於 IOT 裝置的消息傳送協議,可在不穩定的網路下運作'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Publish Subscribe'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Publisher 向一個 topic 發布消息, Subscriber 從訂閱的 topic 中接收消息,在同一個 topic 中 Publisher 和 Subscriber 都可以有多個客戶端同時使用'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Topic'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'UTF-8 string'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '如'}, {'type': 'codespan', 'raw': 'Germany/Bavaria/car/2382340923453/latitude'}, {'type': 'text', 'raw': ' 用 '}, {'type': 'codespan', 'raw': '/'}, {'type': 'text', 'raw': ' 表示層級'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '訂閱時可以使用通配符,'}, {'type': 'codespan', 'raw': '+'}, {'type': 'text', 'raw': ' 選取同一層級,'}, {'type': 'codespan', 'raw': '#'}, {'type': 'text', 'raw': ' 選取同一層級及往下所有層級,如'}, {'type': 'codespan', 'raw': '#'}, {'type': 'text', 'raw': ' 表示機器上所有的 topic, Topic 區分大小寫'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '客戶端在發布或訂閱主題之前不需要建立所需的主題。代理接受每個有效主題,無需任何事先初始化。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '前綴 '}, {'type': 'codespan', 'raw': '$SYS/'}, {'type': 'text', 'raw': ' 表示 broker 內部狀態,不會被 '}, {'type': 'codespan', 'raw': '#'}, {'type': 'text', 'raw': ' 選取'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '雖然可以,但不建議斜線開頭'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'QOS'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0 只傳送一次,射後不理'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1 自少傳送一次,訊息可能會重複'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '2 一定只傳送一次'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'QOS 會引響 broker 與客戶端的封包發送量'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'QOS,封包數'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '0,1'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '1,2'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '2,4'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Publisher 和 Subscriber 可以使用不同的 QOS'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '持久化'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'broker 會記住 Subscriber 的訂閱,當同一個 ClientId 重新連線時'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '當 QOS 為 1 和 2 時維持尚未確認消息'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'ClientId 應特定於每個客戶和經紀商。如果代理不需要維護任何狀態,則 MQTT 3.1.1 允許使用空 ClientId。但是,此連線必須將 clean_session 標誌設為 true,否則代理將拒絕該連線。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'clean_session 為 True 時表示不需要持久化'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Retain'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '原則上,broker 不會保留 Publish 的訊息,訊息要不被傳送給 Subscriber 要不被拋棄,Publish 的 Retain 選項會讓 broker 保留最後一則訊息'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Paho Mqtt'}], 'attrs': {'url': 'https://eclipse.dev/paho/files/paho.mqtt.python/html/index.html'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'eclipse 寫的純 python 庫'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2, clean_session=True)'}, {'type': 'text', 'raw': 'clean_session 必須要是 True 否則行為很怪'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Last Will and Testament'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '連線時設定,在客戶端未使用 DISCONNECT 斷開連線時由 broker 發送,跟一般的消息結構一致'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Tool'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': 'MqttTool'}], 'attrs': {'url': '../b348638c-3261-44d1-ad09-6931e615d2e3.md'}}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Public MQTT Broker'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'EMQX Public MQTT Broker'}], 'attrs': {'url': 'https://www.emqx.com/en/mqtt/public-mqtt5-broker'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Mosquitto'}], 'attrs': {'url': 'test.mosquitto.org'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Ref'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'MQTT Essentials Guide and eBook'}], 'attrs': {'url': 'https://www.hivemq.com/resources/content/download-mqtt-ebook/'}}]}] 

Propertie {'date': datetime.date(2024, 2, 22), 'tags': ['CS/NetWork'], 'publish': True, 'title': 'MQTT.md', 'slug': '3dc28584-4cc6-46cd-b6c7-0effedc66ac1'} Export MQTT.md to /home/eric/Downloads/ericblog/content/post/75c69b3a-d9d7-41db-bffe-445e3a762f0a/index.md

Test /opt/note/CS/NetWork/Mirror.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 9, 17), 'tags': ['CS/NetWork'], 'title': '你各位的 Open Source Project 建立在多脆弱的 Infrastructure 上'}

Test /opt/note/CS/NetWork/MqttTool.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 2, 23), 'tags': ['CS/NetWork'], 'publish': False}

Test /opt/note/CS/NetWork/Mtu.md

Fail PropertieParsar publish not exist or true {'uuid': 'b65f8e44-d3a4-4f51-9e8c-37a4e4a3fc68', 'tags': ['CS/NetWork'], 'date': datetime.date(2025, 3, 6), 'title': 'Maximum Transmission Unit'}

Test /opt/note/CS/NetWork/Ntp.md

/opt/note/CS/NetWork/Ntp.md

Set Date 2024-11-22 Set Title NTP Set EnumSlugPropertie.Uuidv4 Slug 66c89274-3765-4bf7-ac71-aab468772586 Export Predict folder: /home/eric/Downloads/ericblog/content/post/637cecd7-0d07-44a2-8fb7-1c18153b7556 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/637cecd7-0d07-44a2-8fb7-1c18153b7556/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'RFC 1305'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '台灣 T1'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'tock.stdtime.gov.tw'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'watch.stdtime.gov.tw'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'time.stdtime.gov.tw'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'clock.stdtime.gov.tw'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'tick.stdtime.gov.tw'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '台灣的 NTP 由中華電信研究所時間與頻率國家標準實驗室維護'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': 'ad8fa814-86e3-46eb-aa27-2284ac4f4ae1', 'tags': ['CS/NetWork'], 'date': datetime.date(2024, 11, 22), 'title': 'NTP', 'publish': True, 'slug': '66c89274-3765-4bf7-ac71-aab468772586'} Export Ntp.md to /home/eric/Downloads/ericblog/content/post/637cecd7-0d07-44a2-8fb7-1c18153b7556/index.md

Test /opt/note/CS/NetWork/RFC7541.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/NetWork/Rclone.md

/opt/note/CS/NetWork/Rclone.md

Set Date 2024-06-28 Set Title Rclone Set EnumSlugPropertie.Uuidv4 Slug 373ee4bc-2f75-47c9-8fe8-3e53043633da Export Predict folder: /home/eric/Downloads/ericblog/content/post/fa2f3a14-e284-4133-84e9-0315ee809dfa Export Markdown Path: /home/eric/Downloads/ericblog/content/post/fa2f3a14-e284-4133-84e9-0315ee809dfa/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'rclone'}], 'attrs': {'url': 'https://rclone.org/'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Rclone 是一个用于管理云存储上的文件的命令行程序'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Windows 上設定檔在 '}, {'type': 'codespan', 'raw': 'C:\\Users\\eric2_chen\\AppData\\Roaming\\rclone\\rclone.conf'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '--interactive'}, {'type': 'text', 'raw': ' 在執行操作前先詢問,通常在錯誤復原中使用'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'config'}]}, {'type': 'block_code', 'raw': 'rclone config\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '命令行互動式設定遠端'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'ls'}]}, {'type': 'block_code', 'raw': 'rclone ls note:\nrclone ls --max-depth 1 note: \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出遠端資源,遠端一定要加冒號 '}, {'type': 'codespan', 'raw': 'note:'}, {'type': 'text', 'raw': ',會遞迴的列出檔案樹上的全部資源'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '--max-depth 1'}, {'type': 'text', 'raw': ' 用以限制只列一級資料夾'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'ls'}, {'type': 'text', 'raw': ' to list size and path of objects only'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'lsl'}, {'type': 'text', 'raw': ' to list modification time, size and path of objects only'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'lsd'}, {'type': 'text', 'raw': ' to list directories only'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'lsf'}, {'type': 'text', 'raw': ' to list objects and directories in easy to parse format'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'lsjson'}, {'type': 'text', 'raw': ' to list objects and directories in JSON format'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'bisync'}], 'attrs': {'url': 'https://rclone.org/bisync/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '使用差分同步'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在兩條路徑之間執行雙向同步'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Bisync 在 rclone 中提供了雙向雲端同步解決方案。它保留先前運行中的 Path1 和 Path2 檔案系統清單。在每次連續運行時,它將:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '列出 Path1 和 Path2 上的文件,並檢查每一側的變更。更改包括'}, {'type': 'codespan', 'raw': 'New'}, {'type': 'text', 'raw': '、'}, {'type': 'codespan', 'raw': 'Newer'}, {'type': 'text', 'raw': '、'}, {'type': 'codespan', 'raw': 'Older'}, {'type': 'text', 'raw': '和'}, {'type': 'codespan', 'raw': 'Deleted'}, {'type': 'text', 'raw': '文件'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '將 Path1 上的變更傳播到 Path2,反之亦然'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'rclone bisync . note: --create-empty-src-dirs --compare size,modtime,checksum --slow-hash-sync-only --resilient -vP --drive-skip-gdocs --fix-case --exclude ".**" --resync\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先設定好 obsibian 作為遠端'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '第一次上傳,如同 sync 不會刪除 path1 裡的任何文件'}]}, {'type': 'block_code', 'raw': 'rclone bisync . note: --create-empty-src-dirs --compare size,modtime,checksum --slow-hash-sync-only -v --drive-skip-gdocs --fix-case --max-delete 5 --max-lock 720 --exclude ".**"\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '之後直接兩個資料夾同步'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '--max-lock [second]'}, {'type': 'text', 'raw': ' bisync 會產生操作中的檔案列表在操作目錄,如果異常中斷會導致下一次執行失敗,直到 lock 檔被刪除'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '--check-sync=only'}, {'type': 'text', 'raw': ' 只確定兩側檔案是否一致,不改變任何檔案'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Windows 上 '}, {'type': 'codespan', 'raw': 'C:\\Users\\eric2_chen\\AppData\\Local\\rclone\\bisync'}, {'type': 'text', 'raw': ' 為儲存檔案系統清單的路徑'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '--recover'}, {'type': 'text', 'raw': ' 如果異常終止而使 lock 檔位被解鎖,不想'}, {'type': 'codespan', 'raw': '--resync'}, {'type': 'text', 'raw': ' 強制覆蓋碗端檔案,可使用此指令指無視 lock 檔'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Google Drive'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'root_folder_id'}, {'type': 'text', 'raw': ' 可以指定以特定資料夾做為根,在 Scope 為 drive or drive.file 都可以運作'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果用 Scope 為 drive.file 設定不同的使用者上傳到同一個  root_folder_id 會無法看到對方的上傳'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!warning]'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '當設定 Scope 為 drive.file 與 FolderSync 以同步手機筆記時即使以相同使用者授權 Rclone 也無法看到 FolderSync 新增的檔案,但 Rclone 新增的 FolderSync 可以看見'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Rclone 同步不同電腦的話則可以正常同步'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '--drive-acknowledge-abuse'}, {'type': 'text', 'raw': ' Google 可能白目地認為某些檔案存在風險而阻止您下載,此標誌忽略此限制'}]}] 

Propertie {'title': 'Rclone', 'date': datetime.date(2024, 6, 28), 'tags': ['CS/NetWork', 'CS/Software'], 'publish': True, 'slug': '373ee4bc-2f75-47c9-8fe8-3e53043633da'} Export Rclone.md to /home/eric/Downloads/ericblog/content/post/fa2f3a14-e284-4133-84e9-0315ee809dfa/index.md

Test /opt/note/CS/NetWork/SOAP.md

/opt/note/CS/NetWork/SOAP.md

Set Date 2025-03-10 Set Title Simple Object Access Protocol Set EnumSlugPropertie.Uuidv4 Slug 5c3b0aea-c393-4408-80ee-9945c2cf595a Export Predict folder: /home/eric/Downloads/ericblog/content/post/1707a885-3afb-43ec-ba01-b16c12e6e502 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/1707a885-3afb-43ec-ba01-b16c12e6e502/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '通常只有微軟在用,用於帳號權限管理及 WinRm'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'SOAP使用網際網路應用層協定作為其傳輸協定。SMTP以及HTTP協定都可以用來傳輸SOAP訊息'}]}] 

Propertie {'uuid': 'f81df07d-020a-4cdb-b644-9d8a92e36459', 'tags': ['CS/NetWork'], 'date': datetime.date(2025, 3, 10), 'title': 'Simple Object Access Protocol', 'publish': True, 'slug': '5c3b0aea-c393-4408-80ee-9945c2cf595a'} Export SOAP.md to /home/eric/Downloads/ericblog/content/post/1707a885-3afb-43ec-ba01-b16c12e6e502/index.md

Test /opt/note/CS/NetWork/Switch.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 4), 'tags': ['CS/NetWork'], 'title': 'Switch'}

Test /opt/note/CS/NetWork/UserAuthentication.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 28), 'tags': ['CS/NetWork']}

Test /opt/note/CS/NetWork/Voip.md

Fail PropertieParsar publish not exist or true {'uuid': 'f5a54074-e000-4931-9afc-00a51907386a', 'tags': ['CS/NetWork'], 'date': datetime.date(2025, 3, 6), 'title': 'VoIP'}

Test /opt/note/CS/NetWork/Vpn.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/NetWork/VpnAndTunnel.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 5, 3), 'tags': ['CS/NetWork'], 'title': 'Vpn And Tunnel'}

Test /opt/note/CS/NetWork/Wifi.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 1, 22), 'tags': ['CS/NetWork'], 'title': 'Wi-fi'}

Test /opt/note/CS/Lua/LuaReference.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Linux/2023 年暑期 Linux 核心課程.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Linux/APT.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 2, 9), 'tags': ['CS/Linux']}

Test /opt/note/CS/Linux/Acpi.md

Fail PropertieParsar publish not exist or true {'uuid': 'd95a7a94-4899-4f69-98de-271be05d57a4', 'tags': ['CS/Linux'], 'date': datetime.date(2024, 10, 15), 'title': 'ACPI On Linux', 'publish': False}

Test /opt/note/CS/Linux/ArmRunX86.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 4), 'tags': ['CS/Linux']}

Test /opt/note/CS/Linux/Bash.md

/opt/note/CS/Linux/Bash.md

Set Date 2024-07-08 Set Title Bash Set EnumSlugPropertie.Uuidv4 Slug 3904252a-be74-4ad3-9899-4d10634b1802 Export Predict folder: /home/eric/Downloads/ericblog/content/post/fd50a466-edba-476c-a9ca-eab2786f8139 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/fd50a466-edba-476c-a9ca-eab2786f8139/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '重導向'}]}, {'type': 'block_code', 'raw': 'echo "echo" > log.txt\necho "echo" 2> log.txt\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '第一行會重導向 stdout,第二行會重導向 stderr'}]}, {'type': 'block_code', 'raw': 'ls /dev 2>&1 | tee result.txt\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '把 stdout and stderr 複製到 result.txt 及銀幕'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'tee -a result.txt'}, {'type': 'text', 'raw': ' 附加在 result.txt 原內容後面'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Echo'}]}, {'type': 'block_code', 'raw': 'echo "Date $(date)"\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '直接在 echo 中呼叫指令'}]}, {'type': 'block_code', 'raw': 'echo "${var}"\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '顯示變數的值'}]}, {'type': 'block_code', 'raw': 'echo -e "Hello\\nworld"\necho -e \'Hello\\nworld\'\necho Hello$\'\\n\'world\necho Hello ; echo world\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '換行,只有 bash 支援'}]}, {'type': 'block_code', 'raw': 'printf "hello\\nworld\\n"\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 UNIX 上可攜'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'File'}]}, {'type': 'block_code', 'raw': 'tail -n 20000 -q sync.md > .sync.md\nmv .sync.md sync.md\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果 sync.md 大於 20000 行則將檔頭截斷否則保留原始檔案'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '變數'}]}, {'type': 'block_code', 'raw': 'SyncRlt="$?"\nRltFile="r.log"\necho "SyncRlt ${SyncRlt}" > ${RltFile}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '型態只有字串,等號兩側不可以有空格'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '${var}'}, {'type': 'text', 'raw': ' 可以使用變數,會在執行該行前被替換'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Debug'}]}, {'type': 'block_code', 'raw': 'bash +x sync.bash\nbash --verbose sync.bash\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Array'}]}, {'type': 'block_code', 'raw': 'array=(1,2,3,4)\narray=(1 2 3 4)\necho ${arary[@]}\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '定義跟顯示'}]}, {'type': 'block_code', 'raw': 'for str in ${myArray[@]}; do\n  echo $str\ndone\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '尋訪'}]}, {'type': 'block_code', 'raw': 'for i in ${!myArray[@]}; do\n  echo "element $i is ${myArray[$i]}"\ndone\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '索引尋訪'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Condition'}], 'attrs': {'url': 'https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html'}}]}, {'type': 'block_code', 'raw': 'if [ <some test> ]\nthen\n\t<commands>\nfi\n\nif [ <some test> ];then\n\t<commands>\nelse\n\t<commands>\nfi\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '&lt;some test&gt;'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '! EXPRESSION'}, {'type': 'text', 'raw': ' The EXPRESSION is false.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-n STRING'}, {'type': 'text', 'raw': ' The length of STRING is greater than zero.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-z STRING'}, {'type': 'text', 'raw': ' The lengh of STRING is zero (ie it is empty).'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'STRING1 = STRING2'}, {'type': 'text', 'raw': ' STRING1 is equal to STRING2'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'STRING1 != STRING2'}, {'type': 'text', 'raw': ' STRING1 is not equal to STRING2'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'INTEGER1 -eq INTEGER2'}, {'type': 'text', 'raw': ' INTEGER1 is numerically equal to INTEGER2'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'INTEGER1 -gt INTEGER2'}, {'type': 'text', 'raw': ' INTEGER1 is numerically greater than INTEGER2'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'INTEGER1 -lt INTEGER2'}, {'type': 'text', 'raw': ' INTEGER1 is numerically less than INTEGER2'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-d FILE'}, {'type': 'text', 'raw': ' FILE exists and is a directory.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-e FILE'}, {'type': 'text', 'raw': ' FILE exists.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-f\xa0file'}, {'type': 'text', 'raw': ' True if\xa0file\xa0exists and is a regular file.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-r FILE'}, {'type': 'text', 'raw': ' FILE exists and the read permission is granted.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-s FILE'}, {'type': 'text', 'raw': " FILE exists and it's size is greater than zero (ie. it is not empty)."}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-w FILE'}, {'type': 'text', 'raw': ' FILE exists and the write permission is granted.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '-x FILE'}, {'type': 'text', 'raw': ' FILE exists and the execute permission is granted.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!note]'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '&lt;some test&gt;'}, {'type': 'text', 'raw': ' 接受字串後轉變為 Operator 需要的型別'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'if  '}, {'type': 'codespan', 'raw': '['}, {'type': 'text', 'raw': ' 間的空白是必要的'}]}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'if [[ $num -eq 3 && "$stringvar" == foo ]]; then\n\nfi\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '&amp;&amp;'}, {'type': 'text', 'raw': ', '}, {'type': 'codespan', 'raw': '||'}, {'type': 'text', 'raw': ' 只在 if 使用 '}, {'type': 'codespan', 'raw': '[[]]'}, {'type': 'text', 'raw': ' 時可用'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'if 接受一個命令並運行它,並使用該命令的返回值來決定如何繼續,零表示 true,非零表示 false'}]}, {'type': 'block_code', 'raw': 'eric@16AHP9:~$ [ 0 -eq 0  ]\neric@16AHP9:~$ echo $?\n0\neric@16AHP9:~$ [ 0 -eq 1  ]\neric@16AHP9:~$ echo $?\n1\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '[&lt;some test&gt;]'}, {'type': 'text', 'raw': ' 也是一個命令(以前,現在由 bash 內建),估值 '}, {'type': 'codespan', 'raw': '&lt;some test&gt;'}, {'type': 'text', 'raw': ' 成功返回 0,失敗返回 1'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Command Substitution'}]}, {'type': 'block_code', 'raw': 'file $(which bash)\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '命令替換允許命令的輸出替換命令本身'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'New Line'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果 bash file 用了 windows style('}, {'type': 'codespan', 'raw': '\\n\\r'}, {'type': 'text', 'raw': ') 的換行,可能導致 '}, {'type': 'codespan', 'raw': 'unexpected end of file'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Function'}]}, {'type': 'block_code', 'raw': 'greeting () {\n  echo "Hello $1"\n}\n\ngreeting "Joe"\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'List Directory'}]}, {'type': 'block_code', 'raw': 'search_dir=/the/path/to/base/dir\nfor entry in "$search_dir"/*\ndo\n  echo "$entry"\ndone\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Bash Init'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '~/.bash_profile'}, {'type': 'text', 'raw': ' 為登入 shell 運行'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '~/.bashrc'}, {'type': 'text', 'raw': ' 為非互動式shell運行'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '有設定可能會把 bash_profile 將 BASH_ENV 設定為指向 .bashrc,'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '可能引起無限遞迴'}], 'attrs': {'url': 'https://github.com/pyenv/pyenv/issues/264'}}, {'type': 'text', 'raw': ',強烈不建議'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '/etc/profile.d/'}, {'type': 'text', 'raw': ' 資料夾下的檔案為系統上全部 shell 登入前運行'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'EOF'}]}, {'type': 'block_code', 'raw': 'cat > sim.conf << EOF\nconf-0 : 0\nconf-1 : 2\nconf-2 : str\nEOF\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '將 EOF 中間的字串視為多行字串覆寫進 sim.conf'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'exec'}]}, {'type': 'block_code', 'raw': 'exec bash sync.bash\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Replace the shell with the given command.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Execute COMMAND, replacing this shell with the specified program. ARGUMENTS become the arguments to COMMAND.  If COMMAND is not specified, any redirections take effect in the current shell.'}]}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!note]'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '不可以用 '}, {'type': 'codespan', 'raw': "'"}, {'type': 'text', 'raw': ' 把要替換的指令包起來'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': "exec 'bash sync.bash'"}, {'type': 'text', 'raw': ' 會導致 '}, {'type': 'codespan', 'raw': 'bash: exec: bash sync.bash: not found'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'exec 會呼叫 FD_CLOEXEC 關閉在 exec 前開啟的檔案,但不會關閉其他資源'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Gerp in Condition'}]}, {'type': 'block_code', 'raw': 'if grep --quiet MYSQL_ROLE=master /etc/aws/hosts.conf; then\n  echo exists\nelse\n  echo not found\nfi\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'From '}, {'type': 'codespan', 'raw': 'grep --help'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '若選擇任何行,退出狀態為 0,否則為 1;如果發生任何錯誤且未給予 -q,則退出狀態為 2'}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'codespan', 'raw': 'sh: 0: getcwd() failed: No such file or directory'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 dash 中 '}, {'type': 'codespan', 'raw': 'cd ~'}, {'type': 'text', 'raw': ' 解'}]}, {'type': 'block_code', 'raw': 'eric@16AHP9:~$ mkdir /tmp/z\neric@16AHP9:~$ cd /tmp/z\neric@16AHP9:/tmp/z$ rm -r /tmp/z\neric@16AHP9:/tmp/z$ /bin/bash\nshell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory\nsh: 0: getcwd() failed: No such file or directory\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '問題主應是 dash 不喜歡不存在的工作目錄'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '此問題會同時導致其他依賴 '}, {'type': 'codespan', 'raw': '/bin/sh'}, {'type': 'text', 'raw': ' 的指令失效如 pyenv, egrep'}]}] 

Propertie {'uuid': '054603c2-88df-4b04-bc60-7bbbab193245', 'tags': ['CS/Linux'], 'date': datetime.date(2024, 7, 8), 'title': 'Bash', 'publish': True, 'slug': '3904252a-be74-4ad3-9899-4d10634b1802'} Export Bash.md to /home/eric/Downloads/ericblog/content/post/fd50a466-edba-476c-a9ca-eab2786f8139/index.md

Test /opt/note/CS/Linux/BuildKernel.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 4), 'tags': ['CS/Linux'], 'title': 'BuildKernel'}

Test /opt/note/CS/Linux/Dbus.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 4), 'tags': ['CS/Linux'], 'title': None}

Test /opt/note/CS/Linux/Debian.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 2, 1), 'tags': ['CS/Linux'], 'title': ''}

Test /opt/note/CS/Linux/Desktop.md

/opt/note/CS/Linux/Desktop.md

Set Date 2025-03-14 Set Title Desktop Set EnumSlugPropertie.Uuidv4 Slug 924a2778-6996-42ef-b966-661c21faa534 Export Predict folder: /home/eric/Downloads/ericblog/content/post/a61e9a77-558a-435b-808e-588f4413a78c Export Markdown Path: /home/eric/Downloads/ericblog/content/post/a61e9a77-558a-435b-808e-588f4413a78c/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Software'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Linux Only'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Flameshot'}], 'attrs': {'url': 'https://flameshot.org/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Linux 上的截圖工具,有任意矩形範圍,截圖後編輯(功能豐富),存檔檔名控制'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Unable to capture screen'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'xdg-desktop-por[3487]: Failed to show access dialog: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied: GDBus.Error:org.freedesktop.DBus.Error.AccessDenied'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'Failed to associate portal window with parent window'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '懷疑是 wayland 跟 Flameshot 配合不良導致'}, {'type': 'softbreak'}, {'type': 'text', 'raw': "Flameshot doesn't work if launched from gui but works if launched from terminal"}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Open Configuration'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'open the flameshot'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'click the flameshot icon on top right bar of ubuntu. do NOT click "Take Screenshot" yet, but click "Configuration" instead'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'with the flameshot configuration window opened, click the flameshot icon again on top right bar, this time click the "Take Screenshot"'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '實測有效'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'QtWayland'}], 'attrs': {'url': 'https://wiki.qt.io/QtWayland'}}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'QT_QPA_PLATFORM=wayland'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '啟動 Flameshot 時傳遞 QT 環境變數'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Wayland Help '}, {'type': 'text', 'raw': '|'}, {'type': 'text', 'raw': ' Flameshot'}], 'attrs': {'url': 'https://flameshot.org/docs/guide/wayland-help/#can-t-screen-anything-on-wayland-gnome'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'install xdg-desktop-portal-gnome and xdg-desktop-portal'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '62dcad06-401a-4e38-85c6-c8253398f02a', 'tags': ['CS/Linux', 'CS/Software'], 'date': datetime.date(2025, 3, 14), 'title': 'Desktop', 'publish': True, 'slug': '924a2778-6996-42ef-b966-661c21faa534'} Export Desktop.md to /home/eric/Downloads/ericblog/content/post/a61e9a77-558a-435b-808e-588f4413a78c/index.md

Test /opt/note/CS/Linux/DevMem.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Linux/Elf.md

/opt/note/CS/Linux/Elf.md

Set Date 2024-01-18 Set Title ELF Set EnumSlugPropertie.Uuidv4 Slug 65286e84-9b9d-4a0c-95e6-d05b62ec6964 Export Predict folder: /home/eric/Downloads/ericblog/content/post/4093e1a2-2404-4f2e-92b8-402814ed6937 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/4093e1a2-2404-4f2e-92b8-402814ed6937/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 Linux 中,ELF代表可執行和可連結格式。它是可執行檔、目標程式碼、共用程式庫和核心轉儲的標準檔案格式。 Linux 以及其他類 UNIX 系統使用 ELF 作為二進位檔案的主要格式'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '又名 Object File'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Introduction To ELF In Linux: A Simple Guide To Executable Files'}], 'attrs': {'url': 'https://ostechnix.com/elf-in-linux/'}}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Exploring object file formats'}], 'attrs': {'url': 'https://maskray.me/blog/2024-01-14-exploring-object-file-formats'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '簡介了可執行檔的歷史及 EIF 格式'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'a.out 是 Unix 一開始(PDP-11)使用的連結檔格式,原始是 16 位元但可以延展成 32 及 64 位元'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Structure'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Executable Headers (Ehdr)'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在檔案開頭由Magic 7f454c 開始'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Class 32bit or 64bit'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_code', 'raw': 'typedef struct{\n  unsigned char\te_ident[EI_NIDENT];\t/* Magic number and other info */\n  Elf64_Half\te_type;\t\t\t/* Object file type */\n  Elf64_Half\te_machine;\t\t/* Architecture */\n  Elf64_Word\te_version;\t\t/* Object file version */\n  Elf64_Addr\te_entry;\t\t/* Entry point virtual address */\n  Elf64_Off\te_phoff;\t\t/* Program header table file offset */\n  Elf64_Off\te_shoff;\t\t/* Section header table file offset */\n  Elf64_Word\te_flags;\t\t/* Processor-specific flags */\n  Elf64_Half\te_ehsize;\t\t/* ELF header size in bytes */\n  Elf64_Half\te_phentsize;\t\t/* Program header table entry size */\n  Elf64_Half\te_phnum;\t\t/* Program header table entry count */\n  Elf64_Half\te_shentsize;\t\t/* Section header table entry size */\n  Elf64_Half\te_shnum;\t\t/* Section header table entry count */\n  Elf64_Half\te_shstrndx;\t\t/* Section header string table index */\n} Elf64_Ehdr;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'e_ident'}]}, {'type': 'block_code', 'raw': '\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Section Headers (Shdr)'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Program Headers (Phdr)'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Command'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'codespan', 'raw': 'readelf -h /usr/bin/find'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出 ELF 標頭資訊'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'codespan', 'raw': 'readelf -S /usr/bin/find'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'List All Section'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'codespan', 'raw': 'nm hello'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出定義在 hello 中的 symbol'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'codespan', 'raw': 'nm -D hello'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'List dynamic symbols'}]}] 

Propertie {'uuid': '96b88f59-121b-4ff2-b52e-dbd9fa40dacd', 'tags': ['CS/Linux'], 'date': datetime.date(2024, 1, 18), 'title': 'ELF', 'publish': True, 'slug': '65286e84-9b9d-4a0c-95e6-d05b62ec6964'} Export Elf.md to /home/eric/Downloads/ericblog/content/post/4093e1a2-2404-4f2e-92b8-402814ed6937/index.md

Test /opt/note/CS/Linux/FWDUP.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 4), 'tags': ['CS/Linux', 'CS/Embeded'], 'title': 'FWDUP'}

Test /opt/note/CS/Linux/Flatpak.md

Fail PropertieParsar publish not exist or true {'uuid': '6ce38833-649c-4d1a-ba22-658b7c3a4472', 'tags': ['CS/Linux'], 'date': datetime.date(2025, 2, 11), 'title': '', 'publish': False}

Test /opt/note/CS/Linux/ForgettingTheHistoryOfUnixIsCodingUsInToACorner.md

/opt/note/CS/Linux/ForgettingTheHistoryOfUnixIsCodingUsInToACorner.md

Set Date 2024-03-23 Set Title Forgetting the history of Unix is coding us into a corner Set EnumSlugPropertie.Uuidv4 Slug 46041f2f-16f8-42eb-ac3d-f7d82827bce2 Export Predict folder: /home/eric/Downloads/ericblog/content/post/6ad4c9ef-57ee-422c-ba61-43d6e3815c8b Export Markdown Path: /home/eric/Downloads/ericblog/content/post/6ad4c9ef-57ee-422c-ba61-43d6e3815c8b/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Forgetting the history of Unix is coding us into a corner'}], 'attrs': {'url': 'https://www.theregister.com/2024/02/16/what_is_unix/'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'FOSDEM 2024 的演講,從 UNIX 歷史來講解 Everything is a File 的概念,蠻詳細的,對每一個時代的 UNIX 都有介紹'}]}] 

Propertie {'title': 'Forgetting the history of Unix is coding us into a corner', 'date': datetime.date(2024, 3, 23), 'tags': ['CS/Linux'], 'publish': True, 'slug': '46041f2f-16f8-42eb-ac3d-f7d82827bce2'} Export ForgettingTheHistoryOfUnixIsCodingUsInToACorner.md to /home/eric/Downloads/ericblog/content/post/6ad4c9ef-57ee-422c-ba61-43d6e3815c8b/index.md

Test /opt/note/CS/Linux/GnuMake.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 21), 'tags': ['CS/Linux'], 'publish': False}

Test /opt/note/CS/Linux/Graphic.md

Fail PropertieParsar publish not exist or true {'uuid': 'd005d107-21cb-4ed8-9299-2429609554c6', 'tags': ['CS/Linux'], 'date': datetime.date(2025, 3, 6), 'title': 'Graphic', 'publish': False}

Test /opt/note/CS/Linux/Inputlib.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Linux/Linux.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Linux/LinuxCommandLine.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 10, 3), 'tags': ['CS/Linux', 'CS/Software']}

Test /opt/note/CS/Linux/LinuxFromScratch.md

/opt/note/CS/Linux/LinuxFromScratch.md

Set Date 2024-12-16 Set Title Linux From Scratch Set EnumSlugPropertie.Uuidv4 Slug 2fe97edf-90dc-4e8e-91c0-6d28c4f0fa13 Export Predict folder: /home/eric/Downloads/ericblog/content/post/b8c9e943-0abc-47c6-b80a-57ad523162d7 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/b8c9e943-0abc-47c6-b80a-57ad523162d7/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Linux From Scratch'}], 'attrs': {'url': 'https://www.linuxfromscratch.org/lfs/view/systemd'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '手把手教你如何重頭建置 Linux 發行版,2024年還有更新,有包好可以直接建置的軟體包'}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!Note]'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '2.2. Host System Requirements'}], 'attrs': {'url': 'https://www.linuxfromscratch.org/lfs/view/systemd/chapter02/hostreqs.html'}}, {'type': 'text', 'raw': ' 必須要確定列表都有裝'}]}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!Note]'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '6.5. Coreutils-9.5'}], 'attrs': {'url': 'https://www.linuxfromscratch.org/lfs/view/systemd/chapter06/coreutils.html'}}, {'type': 'text', 'raw': ' 在 build 資料夾中 '}, {'type': 'codespan', 'raw': './configure'}, {'type': 'text', 'raw': ' 會失敗,要在 coreutils 包的根資料夾'}]}]}] 

Propertie {'uuid': 'af94606d-f910-4068-9516-f7f1d7c6a140', 'tags': ['CS/Linux'], 'date': datetime.date(2024, 12, 16), 'title': 'Linux From Scratch', 'publish': True, 'slug': '2fe97edf-90dc-4e8e-91c0-6d28c4f0fa13'} Export LinuxFromScratch.md to /home/eric/Downloads/ericblog/content/post/b8c9e943-0abc-47c6-b80a-57ad523162d7/index.md

Test /opt/note/CS/Linux/LinuxInsides.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Linux/LinuxLaptopPower.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 5), 'tags': ['CS/Linux'], 'title': 'Linux Laptop Power'}

Test /opt/note/CS/Linux/LinuxLink.md

/opt/note/CS/Linux/LinuxLink.md

Set Date 2024-06-21 Set Title LinuxLink Set EnumSlugPropertie.Uuidv4 Slug 3968fe11-dbe9-4372-97e9-df9348f8f97b Export Predict folder: /home/eric/Downloads/ericblog/content/post/a0fa18b0-0619-4c80-a1ab-e8a774ab275a Export Markdown Path: /home/eric/Downloads/ericblog/content/post/a0fa18b0-0619-4c80-a1ab-e8a774ab275a/index.md Test unquote path Test resource /opt/note/CS/Linux/%5Bhttps:/medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331%5D(https:/medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331 Result False Not File Or Not Exist From url %5Bhttps://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331%5D( https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331 Test resource /opt/note/%5Bhttps:/medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331%5D(https:/medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331 Result False Not File Or Not Exist From url %5Bhttps://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331%5D( https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331 Test resource /opt/note/CS/Linux/[https:/medium.com/fcamels-notes/linux-編譯-shared-library-的方法和注意事項-cb35844ef331](https:/medium.com/fcamels-notes/linux-編譯-shared-library-的方法和注意事項-cb35844ef331 Result False Not File Or Not Exist From url %5Bhttps://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331%5D( https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331 Test resource /opt/note/[https:/medium.com/fcamels-notes/linux-編譯-shared-library-的方法和注意事項-cb35844ef331](https:/medium.com/fcamels-notes/linux-編譯-shared-library-的方法和注意事項-cb35844ef331 Result False Not File Or Not Exist From url %5Bhttps://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331%5D( https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331 Test unquote path Test resource /opt/note/CS/Linux/%5Bhttps:/medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe%5D(https:/medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe Result False Not File Or Not Exist From url %5Bhttps://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe%5D( https://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe Test resource /opt/note/%5Bhttps:/medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe%5D(https:/medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe Result False Not File Or Not Exist From url %5Bhttps://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe%5D( https://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe Test resource /opt/note/CS/Linux/[https:/medium.com/@fcamel/c-c-如何在-linux-上使用自行編譯的第三方函式庫-1f19c3abaebe](https:/medium.com/@fcamel/c-c-如何在-linux-上使用自行編譯的第三方函式庫-1f19c3abaebe Result False Not File Or Not Exist From url %5Bhttps://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe%5D( https://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe Test resource /opt/note/[https:/medium.com/@fcamel/c-c-如何在-linux-上使用自行編譯的第三方函式庫-1f19c3abaebe](https:/medium.com/@fcamel/c-c-如何在-linux-上使用自行編譯的第三方函式庫-1f19c3abaebe Result False Not File Or Not Exist From url %5Bhttps://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe%5D( https://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe Test unquote path Test resource /opt/note/CS/Linux/%5Bhttps:/medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3%5D(https:/medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3 Result False Not File Or Not Exist From url %5Bhttps://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3%5D( https://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3 Test resource /opt/note/%5Bhttps:/medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3%5D(https:/medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3 Result False Not File Or Not Exist From url %5Bhttps://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3%5D( https://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3 Test resource /opt/note/CS/Linux/[https:/medium.com/fcamels-notes/linux-執行時尋找-symbol-的流程以及-shared-library-相關知識-b0cf1e19cbf3](https:/medium.com/fcamels-notes/linux-執行時尋找-symbol-的流程以及-shared-library-相關知識-b0cf1e19cbf3 Result False Not File Or Not Exist From url %5Bhttps://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3%5D( https://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3 Test resource /opt/note/[https:/medium.com/fcamels-notes/linux-執行時尋找-symbol-的流程以及-shared-library-相關知識-b0cf1e19cbf3](https:/medium.com/fcamels-notes/linux-執行時尋找-symbol-的流程以及-shared-library-相關知識-b0cf1e19cbf3 Result False Not File Or Not Exist From url %5Bhttps://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3%5D( https://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '執行期尋找 shared library 的流程'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '若 shared library 名稱內有 “/”,表示它是路徑,直接用這個路徑找'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '若 executable 內有定義 DT_RPATH 沒定義 DT_RUNPATH,從 DT_RPATH 列的目錄裡找'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '從 LD_LIBRARY_PATH 列的目錄裡找'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '從 DT_RUNPATH 列的目錄裡找'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '從 ldconfig 產生的 cache 內找 (/etc/ld.so.cache)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '從 OS 的預設位置找: 先找 /lib 再找 /usr/lib'}]}]}], 'tight': True, 'bullet': '.', 'attrs': {'depth': 0, 'ordered': True}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Tool'}]}, {'type': 'block_code', 'raw': 'nm -Du /bin/ls  \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出未定義需要外部提供的 symbol'}]}, {'type': 'block_code', 'raw': 'ldd /bin/ls  \nobjdump -p /bin/ls  \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出需要的 shared library'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'ldd 會嘗試尋找後給出找到的 shared library 路徑'}]}]}, {'type': 'block_code', 'raw': 'LD_DEBUG=libs out/Debug/chrome  \nLD_DEBUG=symbols out/Debug/chrome  \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '看找shared library的過程'}]}, {'type': 'block_code', 'raw': '-I<search path to include files>  \n-L<search path to the lib file>  \n-l<libname>  \n-rpath=<runtime library search path>  \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'GCC 連結查找參數'}]}, {'type': 'block_code', 'raw': "-rpath='$ORIGIN'/lib  \n", 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'rpath 可以用相對於可執行檔的路徑'}]}, {'type': 'block_code', 'raw': 'LD_LIBRARY_PATH=. ./main  \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在執行資料夾下找shared library'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Reference'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Linux 編譯 shared library 的方法和注意事項'}], 'attrs': {'url': '%5Bhttps://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331%5D(https://medium.com/fcamels-notes/linux-%E7%B7%A8%E8%AD%AF-shared-library-%E7%9A%84%E6%96%B9%E6%B3%95%E5%92%8C%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A0%85-cb35844ef331'}}, {'type': 'text', 'raw': ')'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': '(C/C++ ) 如何在 Linux 上使用自行編譯的第三方函式庫'}], 'attrs': {'url': '%5Bhttps://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe%5D(https://medium.com/@fcamel/c-c-%E5%A6%82%E4%BD%95%E5%9C%A8-linux-%E4%B8%8A%E4%BD%BF%E7%94%A8%E8%87%AA%E8%A1%8C%E7%B7%A8%E8%AD%AF%E7%9A%84%E7%AC%AC%E4%B8%89%E6%96%B9%E5%87%BD%E5%BC%8F%E5%BA%AB-1f19c3abaebe'}}, {'type': 'text', 'raw': ')'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Linux 執行時尋找 symbol 的流程以及 shared library 相關知識'}], 'attrs': {'url': '%5Bhttps://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3%5D(https://medium.com/fcamels-notes/linux-%E5%9F%B7%E8%A1%8C%E6%99%82%E5%B0%8B%E6%89%BE-symbol-%E7%9A%84%E6%B5%81%E7%A8%8B%E4%BB%A5%E5%8F%8A-shared-library-%E7%9B%B8%E9%97%9C%E7%9F%A5%E8%AD%98-b0cf1e19cbf3'}}, {'type': 'text', 'raw': ')'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'title': 'LinuxLink', 'date': datetime.date(2024, 6, 21), 'tags': ['CS/Linux'], 'publish': True, 'slug': '3968fe11-dbe9-4372-97e9-df9348f8f97b'} Export LinuxLink.md to /home/eric/Downloads/ericblog/content/post/a0fa18b0-0619-4c80-a1ab-e8a774ab275a/index.md

Test /opt/note/CS/Linux/PS2.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Linux/PortingRISC-VtoLinux.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 4), 'tags': ['CS/Linux'], 'title': '自幹 RISC-V 處理器並運作 Linux 系統'}

Test /opt/note/CS/Linux/Profile.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 20), 'tags': ['CS/Linux', 'CS/Software'], 'title': 'Profile'}

Test /opt/note/CS/Linux/Scheduler.md

Fail PropertieParsar publish not exist or true {'uuid': '4c965bc7-aeca-4698-a880-bb87faef01cb', 'tags': ['CS/Linux'], 'date': datetime.date(2025, 2, 10), 'title': 'Scheduler'}

Test /opt/note/CS/Linux/ShellScriptCompiler.md

/opt/note/CS/Linux/ShellScriptCompiler.md

Set Date 2025-02-15 Set Title Shell Script Compiler Set EnumSlugPropertie.Uuidv4 Slug 0e414beb-9065-4ea8-80e5-392a0eca826c Export Predict folder: /home/eric/Downloads/ericblog/content/post/93e9699c-e299-433b-ad02-1de1962de852 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/93e9699c-e299-433b-ad02-1de1962de852/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'shc'}], 'attrs': {'url': 'https://github.com/neurobin/shc'}}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '一個通用的 shell 腳本編譯器。Shc 接受一個在命令列中指定的腳本,並產生 C 原始碼。生成的原始碼隨後會被編譯並鏈接,以產生一個去除符號表的二進位可執行文件。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '編譯後的二進位文件仍然依賴於 shell 腳本第一行中指定的 shell(即 shebang,例如 #!/bin/sh),因此 shc 無法創建完全獨立的二進位文件。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Shc 本身並不是一個像 cc 那樣的編譯器,而是對 shell 腳本進行編碼和加密,並生成具有到期功能的 C 原始碼。之後,它使用系統的編譯器來編譯出一個去除符號表的二進位文件,該文件的行為與原始腳本完全相同。在執行時,編譯後的二進位文件將解密並使用 shell 的 -c 選項來執行代碼。'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Usage'}]}]}, {'type': 'block_code', 'raw': 'shc -f script.sh -o binary\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Shell Script Compiler無法保護你的腳本'}], 'attrs': {'url': 'https://hackmd.io/@kmo/shc_not_safe'}}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!warning] 危險行為'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '撰寫了一個 shell script,裡面包含 API 金鑰等機敏資訊'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '為了避免一般用戶讀到腳本內的 API 金鑰等機敏內容,所以使用 shc 轉成 binary,看似一般人讀不到腳本內容,就放在 production 環境'}]}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': "Note that it doesn't work with bash (or sh based on bash), as one can do: env SHELLOPTS=verbose ./script.x to see the content of the script. There's probably easy ways to bypass with other shells as well."}, {'type': 'softbreak'}, {'type': 'text', 'raw': '-'}, {'type': 'text', 'raw': ' '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'How to convert a shell script into a binary executable'}], 'attrs': {'url': 'https://unix.stackexchange.com/questions/64762/how-to-convert-a-shell-script-into-a-binary-executable/64765'}}, {'type': 'text', 'raw': ' @ '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Calmarius'}], 'attrs': {'url': 'https://unix.stackexchange.com/users/26435/calmarius'}}]}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': '#!/bin/bash\nunset SHELLOPTS\necho "Hello World"\necho "At $(pwd)"\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '建立 hello.sh'}]}, {'type': 'block_code', 'raw': 'eric$ shc -f hello.sh -o hello \neric$ file hello\nhello: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=55f83777c52f6f496c169094ae232b7b23ec4b61, for GNU/Linux 3.2.0, stripped\neric$ nm hello\nnm: hello: no symbols\neric$ ldd hello\n\tlinux-vdso.so.1 (0x00007ffc5eac9000)\n\tlibc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007633f5000000)\n\t/lib64/ld-linux-x86-64.so.2 (0x00007633f53c3000)\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '編譯並確定他是 elf,沒有 symbols'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'eric$env SHELLOPTS=verbose ./hello\n                #!/bin/bash\n\nunset SHELLOPTS\n./hello: line 3: unset: SHELLOPTS: cannot unset: readonly variable\necho "Hello World"\nHello World\necho "At $(pwd)"\nAt /home/eric/Downloads\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '雖然排版亂了,但還是看到了 code'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '由於 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'SHELLOPTS'}], 'attrs': {'url': 'https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html#index-SHELLOPTS'}}, {'type': 'text', 'raw': ' 是 readonly 變數,即使在腳本裡面嘗試unset SHELLOPTS去反制,也無法阻擋SHELLOPTS=verbose效果'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'strace -s 10000000 -v ./hello 2>&1 |  grep bash\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用 strace 也可以看到要給 bash 跑的指令,雖然比 SHELLOPTS=verbose 亂的多'}]}, {'type': 'block_code', 'raw': 'shc -U -f hello.sh -o hello\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '官方表示 '}, {'type': 'codespan', 'raw': '-U'}, {'type': 'text', 'raw': ' 可以被免被 strace 追蹤,但 202502 測試時會返回 '}, {'type': 'codespan', 'raw': './hello: Operation not permitted'}, {'type': 'text', 'raw': ' 無法使用'}]}, {'type': 'blank_line'}] 

Propertie {'uuid': '5477a95c-ea7d-4ff5-b391-88cdd2fbbcb2', 'tags': ['CS/Linux'], 'date': datetime.date(2025, 2, 15), 'title': 'Shell Script Compiler', 'publish': True, 'slug': '0e414beb-9065-4ea8-80e5-392a0eca826c'} Export ShellScriptCompiler.md to /home/eric/Downloads/ericblog/content/post/93e9699c-e299-433b-ad02-1de1962de852/index.md

Test /opt/note/CS/Linux/SystemCell.md

/opt/note/CS/Linux/SystemCell.md

Set Date 2025-03-06 Set Title System Cell Set EnumSlugPropertie.Uuidv4 Slug 89b98a35-6a0b-4b98-8439-2ea65cf37149 Export Predict folder: /home/eric/Downloads/ericblog/content/post/ff5139cc-3973-473d-bac0-6c7ce9a6b568 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/ff5139cc-3973-473d-bac0-6c7ce9a6b568/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'sched_yield'}], 'attrs': {'url': 'https://man7.org/linux/man-pages/man2/sched_yield.2.html'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Uinx 下的system cell,把線程重新放進排成器後端,通常為了讓其他線程取得鎖使用'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'mseal syscall'}], 'attrs': {'url': 'https://blog.trailofbits.com/2024/10/25/a-deep-dive-into-linuxs-new-mseal-syscall/'}}]}, {'type': 'block_code', 'raw': 'int mseal(unsigned long start, size_t len, unsigned long flags)\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'mseal'}], 'attrs': {'url': 'https://docs.kernel.org/userspace-api/mseal.html'}}, {'type': 'text', 'raw': '新 System call 不可撤銷的設定記憶體的 NX (不可執行)或 RX權限'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '原本在 Chrome OS 上的 system call 移植到 Linux 6.10'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'once the mapping is sealed, it will stay in the process’s memory until the process terminates.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Blocked mm syscall:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'munmap'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'mmap'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'mremap'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'mprotect and pkey_mprotect'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'some destructive madvise behaviors: MADV_DONTNEED, MADV_FREE, MADV_DONTNEED_LOCKED, MADV_FREE, MADV_DONTFORK, MADV_WIPEONFORK'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}] 

Propertie {'uuid': 'd0f2598a-2aab-479d-990d-a23c5e30f3c1', 'tags': ['CS/Linux'], 'date': datetime.date(2025, 3, 6), 'title': 'System Cell', 'publish': True, 'slug': '89b98a35-6a0b-4b98-8439-2ea65cf37149'} Export SystemCell.md to /home/eric/Downloads/ericblog/content/post/ff5139cc-3973-473d-bac0-6c7ce9a6b568/index.md

Test /opt/note/CS/Linux/Ubuntu.md

/opt/note/CS/Linux/Ubuntu.md

Set Date 2024-10-08 Set Title Ubuntu Set EnumSlugPropertie.Uuidv4 Slug 7a0de911-4cba-4720-b5d6-7ad9e714bec0 Export Predict folder: /home/eric/Downloads/ericblog/content/post/165c61e6-d7cd-4c56-82db-8086aef6159d Export Markdown Path: /home/eric/Downloads/ericblog/content/post/165c61e6-d7cd-4c56-82db-8086aef6159d/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Official CD Mirrors for Ubuntu'}], 'attrs': {'url': 'https://launchpad.net/ubuntu/+cdmirrors'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '2024 在下載 ubuntu 24 LTS 發現官網的下載數度極慢,且頁面上找不到 CD Mirror List,特別記下 CD Mirrors 的網址'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Apt Package Conflict'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Ubuntu 24.04 遇到與開 Update Repo 時無法安裝 Python3-venv, 應為  Python3-venv 需求更新的 Python3 但如果只開Update Repo 會沒有'}]}] 

Propertie {'uuid': 'ac7dca59-1c02-4258-9bc4-e12afbd10f8a', 'tags': ['CS/Linux'], 'date': datetime.date(2024, 10, 8), 'title': 'Ubuntu', 'publish': True, 'slug': '7a0de911-4cba-4720-b5d6-7ad9e714bec0'} Export Ubuntu.md to /home/eric/Downloads/ericblog/content/post/165c61e6-d7cd-4c56-82db-8086aef6159d/index.md

Test /opt/note/CS/Linux/UbuntuHardwareCompatibilityDistroPerspective.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 4), 'tags': ['CS/Linux'], 'title': 'Ubuntu 硬體相容性發行版角度'}

Test /opt/note/CS/Linux/Usb.md

/opt/note/CS/Linux/Usb.md

Set Date 2025-03-06 Set Title USB Set EnumSlugPropertie.Uuidv4 Slug b5ae45ea-b3ab-4658-a3b7-bab58b32e31d Export Predict folder: /home/eric/Downloads/ericblog/content/post/8624aad4-57e0-4800-8533-e957ecb75b0a Export Markdown Path: /home/eric/Downloads/ericblog/content/post/8624aad4-57e0-4800-8533-e957ecb75b0a/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Intel 為 eUSB2V2 準備 Linux 驅動'}], 'attrs': {'url': 'https://web.git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git/commit/?h=usb-next&amp;id=c749f058b4371430a8338e1ca72b9ae38fef613b'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'eUSB2V2 更新旨在為整合/嵌入式網路攝影機等裝置提供更多頻寬,以實現更高的分辨率,同時保持嵌入式 USB 的 1.2V 低功耗要求,在 Linux 6.15 引入'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'USB Everywhere | Hackaday'}], 'attrs': {'url': 'https://hackaday.com/2025/02/27/linux-fu-usb-everywhere/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'USB/IP 專案的目標是在 IP 網路上開發通用的 USB 設備共享系統。為了在計算機之間共享 USB 設備並保留其完整功能,USB/IP 將「USB I/O 訊息」封裝到 TCP/IP 負載中,並在計算機之間傳輸這些訊息'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '伺服器核心模組: usbip_core,usbip_host。您還需要usbipd(守護程式)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '客戶端核心模組: vhci_hcd'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '伺服器'}]}, {'type': 'block_code', 'raw': 'modprobe -a usbip_core usbip_host\nusbip list -l\xa0\xa0 # -l for local\nusbpip bind -b 4-3.1\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Loading the modules'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'find a device to share'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'You’ll bind that device to the server'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '客戶端'}]}, {'type': 'block_code', 'raw': 'modprobe -a vhci_hcd\nusbip list -r myserver.local\xa0 # use your server name or IP\nusbip attach -r myserver.local -b 4-3.1\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Port number\xa0is somewhat dynamic across reboots'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '一旦設備連接,它看起來就像系統上的任何其他 USB 連接埠一樣'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'USBIP - ArchWiki'}], 'attrs': {'url': 'https://wiki.archlinux.org/title/USB/IP'}}]}] 

Propertie {'uuid': '6bc27603-d4a3-44cd-8446-10eaefd70605', 'tags': ['CS/Linux'], 'date': datetime.date(2025, 3, 6), 'title': 'USB', 'publish': True, 'slug': 'b5ae45ea-b3ab-4658-a3b7-bab58b32e31d'} Export Usb.md to /home/eric/Downloads/ericblog/content/post/8624aad4-57e0-4800-8533-e957ecb75b0a/index.md

Test /opt/note/CS/Linux/VFS.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 9), 'tags': ['CS/Linux']}

Test /opt/note/CS/Linux/VirtualMachine.md

/opt/note/CS/Linux/VirtualMachine.md

Set Date 2024-10-16 Set Title Virtual Machine Set EnumSlugPropertie.Uuidv4 Slug b9f762d4-3687-47d1-99e2-8207434e933b Export Predict folder: /home/eric/Downloads/ericblog/content/post/45c58590-9795-4266-a781-c46be1e05226 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/45c58590-9795-4266-a781-c46be1e05226/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'qemu-user'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'qemu-system'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'virt-manager'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'libvirt 的 GUI'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'libvirt'}], 'attrs': {'url': 'https://libvirt.org/'}}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'kvm-ok'}, {'type': 'text', 'raw': ' 用於檢察 CPU 是否支援虛擬化'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'libvirt: Domain XML format'}], 'attrs': {'url': 'https://libvirt.org/formatdomain.html'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'virtiofsd'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'qemu 再做 filesystem share 時沒裝 virtiofsd 啟動虛擬機時會報失敗'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'virt-manager 中 Add Hardware 選 filesystem'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Source Path 選在 host  要往 guest share 的路徑'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Target Path 是 virtiofs 在 guest 中要打的 Tag,不建議有斜線'}]}, {'type': 'block_code', 'raw': 'mount -t virtiofs share /mnt/share\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 guest 上 mount Share Filesystem'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'qemu-guest-agent'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'qemu guest 建議安裝的軟體用於快照,有教學要求 systemctl enable 但我在 ubuntu 24.04 上測試惠自動 enable'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Log'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '$HOME/.virtinst/virt-install.log'}, {'type': 'text', 'raw': ' – virt-install tool log file.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '$HOME/.virt-manager/virt-manager.log'}, {'type': 'text', 'raw': ' – virt-manager tool log file.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '/var/log/libvirt/qemu/'}, {'type': 'text', 'raw': ' – Log files for each running virtual machine. If centos is virtual machine name, than log file is '}, {'type': 'codespan', 'raw': '/var/log/libvirt/qemu/centos.log'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Virtsh'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'libvirtd 的命令行界面'}]}, {'type': 'block_code', 'raw': 'virsh list\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出正在運行的虛擬機器'}]}, {'type': 'block_code', 'raw': 'virsh start <guestname>\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '要啟動虛擬機器'}]}, {'type': 'block_code', 'raw': '\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Spice'}], 'attrs': {'url': 'https://spice-space.org/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Simple Protocol for Independent Computing Environments'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '用以共享視訊、錄製音訊、共享 USB 裝置和共用資料夾'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'SPICE 專案旨在提供完整的開源解決方案,以無縫方式遠端存取虛擬機器'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '需要 SPICE 用戶端才能連線到來賓。在 Arch 中,可以使用下列客戶端:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'virt-viewer'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'spice-vdagent 作為 ubuntu24 的 spice 客戶端程式'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '客機的 VGA 可以從 SPICE 傳出'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Virtio-FPGA - a virtualization solution for SoC-attached FPGAs'}], 'attrs': {'url': 'https://arxiv.org/abs/2304.01721'}}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '最近,FPGA 加速器越來越受歡迎,因為它們提供了一種滿足即時應用的高運算和低功耗需求的合適方法。現代電動交通系統(例如飛機、道路車輛)可以從嵌入式 FPGA 中獲益匪淺,它將高性能和靈活性功能整合到單一 SoC 中。同時,FPGA資源的虛擬化旨在增強這些系統的強大隔離性、整合性和安全性。在本文中,我們提出了一種新穎的虛擬化框架,針對 Linux 和 QEMU/KVM 設定中的 SoC 連接的 FPGA 設備。我們使用 Virtio 作為一種有效方式從客戶系統配置 FPGA 資源的方法。此外,我們也採用 Linux VFIO 和裝置樹覆蓋技術,以便為客戶系統提供動態可存取的 FPGA 資源。詳細描述了從虛擬化環境動態配置和利用 FPGA 資源的能力。介紹了此解決方案的評估流程,並且從客戶系統存取 FPGA 設備時,虛擬化開銷的基準測試為最低(約 10%)'}]}]}, {'type': 'blank_line'}] 

Propertie {'uuid': '9dca1f42-0915-4d1e-ab49-1ebf0107455c', 'tags': ['CS/Linux', 'CS/VirtualMachine'], 'date': datetime.date(2024, 10, 16), 'title': 'Virtual Machine', 'publish': True, 'slug': 'b9f762d4-3687-47d1-99e2-8207434e933b'} Export VirtualMachine.md to /home/eric/Downloads/ericblog/content/post/45c58590-9795-4266-a781-c46be1e05226/index.md

Test /opt/note/CS/Linux/Vnc.md

Fail PropertieParsar publish not exist or true {'uuid': 'e26e9630-2d40-4d84-b675-36a8e8d95637', 'tags': ['CS/Linux'], 'date': datetime.date(2025, 3, 4), 'title': 'VNC', 'publish': False}

Test /opt/note/CS/Linux/X86Platform.md

Fail PropertieParsar publish not exist or true {'uuid': '8480cb11-457b-458b-b7a1-a097d37b7170', 'tags': ['CS/Linux'], 'date': datetime.date(2025, 3, 6), 'title': 'X86 Platform'}

Test /opt/note/CS/Linux/seccomp.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Linux/Source/SlabAllocator.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Linux/Source/Source.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 21), 'tags': ['CS/Linux'], 'publish': False}

Test /opt/note/CS/Linux/Serial/RS-485_3_wire_connection.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Linux/Serial/Serial.md

/opt/note/CS/Linux/Serial/Serial.md

Set Date 2024-03-01 Set Title Linux Serial Set EnumSlugPropertie.Uuidv4 Slug 8b8e4d51-10fa-486e-bcce-cedd44d21376 Export Predict folder: /home/eric/Downloads/ericblog/content/post/e4acc6e8-ef2c-4880-b9b7-10b1087394bc Export Markdown Path: /home/eric/Downloads/ericblog/content/post/e4acc6e8-ef2c-4880-b9b7-10b1087394bc/index.md Test resource /opt/note/CS/Linux/Serial/CS/Linux/Serial/RS-485_3_wire_connection.png Result False Not File Or Not Exist From url CS/Linux/Serial/RS-485_3_wire_connection.png Test resource /opt/note/CS/Linux/Serial/RS-485_3_wire_connection.png Result True /opt/note/CS/Linux/Serial/RS-485_3_wire_connection.png From url CS/Linux/Serial/RS-485_3_wire_connection.png Resource Match CS/Linux/Serial/RS-485_3_wire_connection.png Copy To 83f7cfd9-3974-40f3-9bda-5fc1960e7ace.png

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Serial Device'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../83f7cfd9-3974-40f3-9bda-5fc1960e7ace.png'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'RS-485'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '接口洞很多,但只需要兩條線,原則上地線不用接,半雙工'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '指令'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '原則上 Serial Device 會出現在 '}, {'type': 'codespan', 'raw': '/dev/ttyS[數字]'}, {'type': 'text', 'raw': ' 路徑上'}]}, {'type': 'block_code', 'raw': 'setserial -g /dev/ttyS[0123]\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出串口晶片名及中斷'}]}, {'type': 'block_code', 'raw': 'dmesg | grep tty\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'stty -F /dev/ttyS0 -a\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '顯示該 Serial Device 的連線設定資料,其他應用程式連接時也可能會更改'}]}, {'type': 'block_code', 'raw': 'cat /dev/ttyS0\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '讀資料,如果串口有吐的話'}]}, {'type': 'block_code', 'raw': 'stty -F /dev/ttyS0 9600 cs8 -cstopb -parenb\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'set the baud rate to 9600, 8 bits, 1 stop bit, no parity'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '重啟後會重設'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Ref'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Serial HOWTO'}], 'attrs': {'url': 'https://tldp.org/HOWTO/Serial-HOWTO.html'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '圖片來源'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Jona, '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'CC BY-SA 4.0'}], 'attrs': {'url': 'https://creativecommons.org/licenses/by-sa/4.0'}}, {'type': 'text', 'raw': ', via Wikimedia Commons'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Mayayu, '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'CC BY-SA 3.0'}], 'attrs': {'url': 'https://creativecommons.org/licenses/by-sa/3.0'}}, {'type': 'text', 'raw': ', via Wikimedia Commons'}]}] 

Propertie {'title': 'Linux Serial', 'date': datetime.date(2024, 3, 1), 'tags': ['CS/Linux'], 'publish': True, 'slug': '8b8e4d51-10fa-486e-bcce-cedd44d21376'} Export Serial.md to /home/eric/Downloads/ericblog/content/post/e4acc6e8-ef2c-4880-b9b7-10b1087394bc/index.md

Test /opt/note/CS/Hardware/Afe.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 31), 'tags': ['CS/Hardware'], 'title': 'AFE'}

Test /opt/note/CS/Hardware/DigitalSignalProcessing.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Hardware/Laptop.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 6), 'tags': ['CS'], 'publish': False}

Test /opt/note/CS/Hardware/LogicAnalyzer.md

/opt/note/CS/Hardware/LogicAnalyzer.md

Set Date 2024-12-09 Set Title Logic Analyzer Set EnumSlugPropertie.Uuidv4 Slug 936f9b22-d5f1-4e3a-abb0-e32816266fbb Export Predict folder: /home/eric/Downloads/ericblog/content/post/6314e0a1-2f08-4c77-996b-f6430c9efe33 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/6314e0a1-2f08-4c77-996b-f6430c9efe33/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Logic Analyzer'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '機器上無顯示,需要連接電腦'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Homepage - DreamSourceLab'}], 'attrs': {'url': 'https://www.dreamsourcelab.com/'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '6 千台幣 ,掏寶上有便宜的盜版'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Analog Discovery 3'}], 'attrs': {'url': 'https://digilent.com/reference/test-and-measurement/analog-discovery-3/start'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '1.2 萬台幣, 16 Channels + 125MS/s, Oscilloscope Bandwidth 9 MHz, Waveform Generator'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '更偏向學生使用的工程工作室'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'PicoScope 2000 Series'}], 'attrs': {'url': 'https://www.picotech.com/oscilloscope/2000/picoscope-2000-overview'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '1 萬台幣,勉強商用'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Saleae Logic Analyzers'}], 'attrs': {'url': 'https://www.saleae.com/'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '3 萬台幣 8 Channels + 500MS/s, Oscilloscope Bandwidth 5 MHz'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'TravelLogic 4000 TL4134B 皇晶科技 - Acute'}], 'attrs': {'url': 'https://www.acute.com.tw/product/detail11'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '台廠,7萬塊,商用, 34 Channels + 2GB/s'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Chip'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'EZ-USB FX2LP FX2G2 USB 2.0 Peripheral Controller - Infineon Technologies'}], 'attrs': {'url': 'https://www.infineon.com/cms/en/product/universal-serial-bus/usb-2.0-peripheral-controllers/ez-usb-fx2lp-fx2g2-usb-2.0-peripheral-controller/'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '英飛凌的EZ-USB FX2LP 和EZ-USB FX2G2 是業界事實上的USB 2.0 週邊控制器,為任何設備添加了USB 高速(480 Mbps)、全速(12 Mbps) 和低速(1.5 Mbps)連接。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'EZ-USB FX2LP 和 FX2G2 的通用可程式介面 (GPIF) 可連接到處理器、影像感測器、FPGA 或 ASIC。使用者可以對 GPIF(通用可編程介面)進行編程,使其表現得像 FIFO、非同步 SRAM、位址/資料復用介面、CompactFlash 或專有介面'}]}]}, {'type': 'blank_line'}] 

Propertie {'uuid': 'c411fb40-d902-4fec-b470-e5f02bd4ed5a', 'tags': ['CS/Hardware'], 'date': datetime.date(2024, 12, 9), 'title': 'Logic Analyzer', 'publish': True, 'slug': '936f9b22-d5f1-4e3a-abb0-e32816266fbb'} Export LogicAnalyzer.md to /home/eric/Downloads/ericblog/content/post/6314e0a1-2f08-4c77-996b-f6430c9efe33/index.md

Test /opt/note/CS/Hardware/OpenTimecard.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 21), 'tags': ['CS/Hardware'], 'title': ''}

Test /opt/note/CS/Hardware/Oscilloscope.md

Fail PropertieParsar publish not exist or true {'uuid': 'bd155120-b192-403b-a9bf-ec3717cd20c9', 'tags': ['CS/Hardware'], 'date': datetime.date(2025, 2, 14), 'title': ''}

Test /opt/note/CS/Hardware/PCB.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 15), 'tags': ['CS/Hardware'], 'title': ''}

Test /opt/note/CS/Hardware/ProcessDesignKit.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 21), 'tags': ['CS/Hardware'], 'title': ''}

Test /opt/note/CS/Hardware/tombstoning0201.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/自製鍵盤.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Hardware/Relay/04bc05b268e8fac136b22543cd50f4d2.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/Relay/2560a15e7c9384c208114e542e955c54.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/Relay/570bd5227f3d002a45d141a5d56df2ac.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/Relay/Relay.md

/opt/note/CS/Hardware/Relay/Relay.md

Set Date 2025-02-21 Set Title Relay Set EnumSlugPropertie.Uuidv4 Slug 063e0bc0-206b-4c61-b3af-4cdf2939ac2d Export Predict folder: /home/eric/Downloads/ericblog/content/post/7e334c5b-fb37-439c-bc22-8ea6774ce429 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/7e334c5b-fb37-439c-bc22-8ea6774ce429/index.md Test resource /opt/note/CS/Hardware/Relay/CS/Hardware/Relay/Relay_inside.jpg Result False Not File Or Not Exist From url CS/Hardware/Relay/Relay_inside.jpg Test resource /opt/note/CS/Hardware/Relay/Relay_inside.jpg Result True /opt/note/CS/Hardware/Relay/Relay_inside.jpg From url CS/Hardware/Relay/Relay_inside.jpg Resource Match CS/Hardware/Relay/Relay_inside.jpg Copy To 3f720841-37d3-4ade-8244-b4e20f6054ce.jpg Test resource /opt/note/CS/Hardware/Relay/CS/Hardware/Relay/2560a15e7c9384c208114e542e955c54.png Result False Not File Or Not Exist From url CS/Hardware/Relay/2560a15e7c9384c208114e542e955c54.png Test resource /opt/note/CS/Hardware/Relay/2560a15e7c9384c208114e542e955c54.png Result True /opt/note/CS/Hardware/Relay/2560a15e7c9384c208114e542e955c54.png From url CS/Hardware/Relay/2560a15e7c9384c208114e542e955c54.png Resource Match CS/Hardware/Relay/2560a15e7c9384c208114e542e955c54.png Copy To 30a63ef7-6597-4ec0-8a34-582451ad75b8.png Test resource /opt/note/CS/Hardware/Relay/CS/Hardware/Relay/04bc05b268e8fac136b22543cd50f4d2.png Result False Not File Or Not Exist From url CS/Hardware/Relay/04bc05b268e8fac136b22543cd50f4d2.png Test resource /opt/note/CS/Hardware/Relay/04bc05b268e8fac136b22543cd50f4d2.png Result True /opt/note/CS/Hardware/Relay/04bc05b268e8fac136b22543cd50f4d2.png From url CS/Hardware/Relay/04bc05b268e8fac136b22543cd50f4d2.png Resource Match CS/Hardware/Relay/04bc05b268e8fac136b22543cd50f4d2.png Copy To 764e39e3-ac96-4897-9dce-d5052e847efa.png Test resource /opt/note/CS/Hardware/Relay/CS/Hardware/Relay/570bd5227f3d002a45d141a5d56df2ac.png Result False Not File Or Not Exist From url CS/Hardware/Relay/570bd5227f3d002a45d141a5d56df2ac.png Test resource /opt/note/CS/Hardware/Relay/570bd5227f3d002a45d141a5d56df2ac.png Result True /opt/note/CS/Hardware/Relay/570bd5227f3d002a45d141a5d56df2ac.png From url CS/Hardware/Relay/570bd5227f3d002a45d141a5d56df2ac.png Resource Match CS/Hardware/Relay/570bd5227f3d002a45d141a5d56df2ac.png Copy To 1f141034-a21e-422a-b947-d99e954c3c0e.png

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '繼電器'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '由 Coil 的電壓決定 COM 跟 NO 或 NC 導通'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Pin'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '線圈(Coil)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'COM(Common)表示共接點'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'NO(Normally Open)表示常開接點(俗稱A接點)。平常處於開路(斷路),線圈通電後才成為閉路(與共接點COM接通)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'NC(Normally Closed)表示常閉接點(俗稱B接點)。平常處於閉路(與共接點COM接通),線圈通電後才成為開路(斷路)'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../3f720841-37d3-4ade-8244-b4e20f6054ce.jpg'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'I, Wasami007, CC BY-SA 2.5, https://commons.wikimedia.org/w/index.php?curid=2431299'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Vendor'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'OJE-SS-112HMF'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'TE Con\u200b\u200bnectivity(美國廠),OJE-SS-1XXHMF, XX 代表線圈的驅動電壓有,05,12,24V'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Rated Voltage 30 VDC, 250VAC'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Rated Current 3 to 10A'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'TTi TRIH-24VDC-SD-2CM-R'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Techtronic Industries Company Limited(香港廠)'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../30a63ef7-6597-4ec0-8a34-582451ad75b8.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '不同型號線圈的驅動電壓不同'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'MY-GS'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Omron(日本廠)動作及歸復時間接在 20 毫秒以下'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../764e39e3-ac96-4897-9dce-d5052e847efa.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '不同型號線圈的驅動電壓不同'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Rayex  LEG-12'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '瑞鎰電機,台廠,LEG-XX,XX 代表線圈的驅動電壓 3,5,6,9,12,24,48V'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Rated Voltage 24 VDC, 240VAC'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Rated Current 5A'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'SRD-05VDC-SL-C'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '宁波松乐继电器有限公司(SONGLE RELAY)(中國廠)'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../1f141034-a21e-422a-b947-d99e954c3c0e.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Rated Voltage 30 VDC, 250VAC'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Rated Current 10A'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '8fd4f6e1-a89e-41dd-a8d1-fb5f8481f1ff', 'tags': ['CS/Hardware'], 'date': datetime.date(2025, 2, 21), 'title': 'Relay', 'publish': True, 'slug': '063e0bc0-206b-4c61-b3af-4cdf2939ac2d'} Export Relay.md to /home/eric/Downloads/ericblog/content/post/7e334c5b-fb37-439c-bc22-8ea6774ce429/index.md

Test /opt/note/CS/Hardware/Relay/Relay_inside.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/Ldo/2b68e38be9cca490ff4c0c513d4c0f19.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/Ldo/Ldo.md

Fail PropertieParsar publish not exist or true {'uuid': 'fe95f7c8-8250-43ab-8488-2081ea7f5c50', 'tags': ['CS/Hardware'], 'date': datetime.date(2025, 3, 16), 'title': '低壓差穩壓器', 'publish': False}

Test /opt/note/CS/Hardware/ArmServer/20241029_134849.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/ArmServer/20241029_135802.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/ArmServer/20241029_140129.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Hardware/ArmServer/ArmServer.md

/opt/note/CS/Hardware/ArmServer/ArmServer.md

Set Date 2024-10-29 Set Title Arm Server Set EnumSlugPropertie.Uuidv4 Slug fef26c2d-3fac-4f99-be7e-db2aee4a6c30 Export Predict folder: /home/eric/Downloads/ericblog/content/post/bdf8a4bc-5bcc-4e44-8021-48fafbb6e019 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/bdf8a4bc-5bcc-4e44-8021-48fafbb6e019/index.md Test resource /opt/note/CS/Hardware/ArmServer/CS/Hardware/ArmServer/20241029_134849.jpg Result False Not File Or Not Exist From url CS/Hardware/ArmServer/20241029_134849.jpg Test resource /opt/note/CS/Hardware/ArmServer/20241029_134849.jpg Result True /opt/note/CS/Hardware/ArmServer/20241029_134849.jpg From url CS/Hardware/ArmServer/20241029_134849.jpg Resource Match CS/Hardware/ArmServer/20241029_134849.jpg Copy To 994029a0-5275-4998-8804-c6bc55bdca7b.jpg Test resource /opt/note/CS/Hardware/ArmServer/CS/Hardware/ArmServer/20241029_135802.jpg Result False Not File Or Not Exist From url CS/Hardware/ArmServer/20241029_135802.jpg Test resource /opt/note/CS/Hardware/ArmServer/20241029_135802.jpg Result True /opt/note/CS/Hardware/ArmServer/20241029_135802.jpg From url CS/Hardware/ArmServer/20241029_135802.jpg Resource Match CS/Hardware/ArmServer/20241029_135802.jpg Copy To b6c30b8b-0d00-48be-a532-e28758d2c983.jpg Test resource /opt/note/CS/Hardware/ArmServer/CS/Hardware/ArmServer/20241029_140129.jpg Result False Not File Or Not Exist From url CS/Hardware/ArmServer/20241029_140129.jpg Test resource /opt/note/CS/Hardware/ArmServer/20241029_140129.jpg Result True /opt/note/CS/Hardware/ArmServer/20241029_140129.jpg From url CS/Hardware/ArmServer/20241029_140129.jpg Resource Match CS/Hardware/ArmServer/20241029_140129.jpg Copy To ee0e5d93-47de-4aa0-8804-4950439fee34.jpg Test resource /opt/note/CS/Hardware/ArmServer/CS/ComputerSystemOrganization/Ampere.md Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/Ampere.md Test resource /opt/note/CS/ComputerSystemOrganization/Ampere.md Result True /opt/note/CS/ComputerSystemOrganization/Ampere.md From url CS/ComputerSystemOrganization/Ampere.md Resource Match CS/ComputerSystemOrganization/Ampere.md Copy To a8f07e87-8695-4aa1-820f-b08fab04a9c0.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Arm Tech Symposia 2024 Wywynn'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../994029a0-5275-4998-8804-c6bc55bdca7b.jpg'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Amd 作過Arm Cpu'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Wywynn 作過的 Arm base server'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../b6c30b8b-0d00-48be-a532-e28758d2c983.jpg'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '每個機架 100-300 W 耗能'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '直接冷卻晶片'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'AI 晶片可能需要互聯'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../ee0e5d93-47de-4aa0-8804-4950439fee34.jpg'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Arm base AI 機櫃產品範例'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '大概一億台幣每機櫃'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '該機櫃可能會漏水'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': 'Ampere'}], 'attrs': {'url': '../a8f07e87-8695-4aa1-820f-b08fab04a9c0.md'}}]}] 

Propertie {'uuid': 'fd7f459d-b58f-4f7e-860c-68fac198c73e', 'tags': ['CS/Hardware'], 'date': datetime.date(2024, 10, 29), 'title': 'Arm Server', 'publish': True, 'slug': 'fef26c2d-3fac-4f99-be7e-db2aee4a6c30'} Export ArmServer.md to /home/eric/Downloads/ericblog/content/post/bdf8a4bc-5bcc-4e44-8021-48fafbb6e019/index.md

Test /opt/note/CS/Golang/Goland.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Frontend/Frontend.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Frontend/sitcon-home.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Battery.md

Fail PropertieParsar publish not exist or true {'uuid': '772cb706-70d1-4be6-a023-619a4fd0b8ee', 'tags': ['CS/Embedded'], 'date': datetime.date(2024, 9, 6), 'title': 'Battery', 'publish': False}

Test /opt/note/CS/Embedded/DhrystoneBenchmarkForMCUs.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/FreeRTOS.md

Fail PropertieParsar publish not exist or true {'uuid': '4396d869-0115-47c9-94b0-c0c1e6712eea', 'tags': ['CS/Embedded'], 'date': datetime.date(2024, 9, 6), 'title': 'FreeRTOS', 'publish': False}

Test /opt/note/CS/Embedded/InfraredRemoteControl.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2019, 3, 29), 'tags': ['CS/Embedded'], 'title': 'Infrared Remote Control'}

Test /opt/note/CS/Embedded/LowCostMicrocontroller.md

/opt/note/CS/Embedded/LowCostMicrocontroller.md

Set Date 2024-10-08 Set Title Low Cost Microcontroller Set EnumSlugPropertie.Uuidv4 Slug 23196f8d-427f-4cf6-8f7e-938eb079dbe3 Export Predict folder: /home/eric/Downloads/ericblog/content/post/84b572b2-4231-4e9d-87f5-1fb0e0d4217e Export Markdown Path: /home/eric/Downloads/ericblog/content/post/84b572b2-4231-4e9d-87f5-1fb0e0d4217e/index.md

1
 [{'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Puya'}], 'attrs': {'url': 'https://www.puyasemi.com/'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'PADAUK Technology'}], 'attrs': {'url': 'https://www.padauk.com.tw/index_en.aspx'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '台灣廠商'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Holtek'}], 'attrs': {'url': 'https://www.holtek.com.tw/page/index'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '台灣廠商'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'EFM32 Zero Gecko 32-bit'}], 'attrs': {'url': 'https://www.silabs.com/mcu/32-bit-microcontrollers/efm32-zero-gecko'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '美國廠商'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '大部分低於 4 cent 的 MCU 只能單次燒入'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Browse the Microcontroller pages of LCSC and you’ll see tons of low-cost MCUs from companies like Padauk, Nyquest, Holychip, SimOne, and Fremont Micro Devices — with prices as low as 4 cents'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '-'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'the cheapest flash microcontroller you an buy is actually an arm cortex m0'}], 'attrs': {'url': 'https://jaycarlson.net/2023/02/04/the-cheapest-flash-microcontroller-you-can-buy-is-actually-an-arm-cortex-m0/'}}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'The Amazing $1 Microcontroller'}], 'attrs': {'url': 'https://jaycarlson.net/microcontrollers/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '大量介紹低於 1 USD 的 MCU'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Atmel tinyAVR'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Atmel megaAVR'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Atmel SAM D10'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Cypress PSoC 4000S'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Freescale KE04'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Freescale KL03'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Holtek HT66'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Infineon XMC11001'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Microchip PIC16'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Microchip PIC24'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Microchip PIC32MM'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Nuvoton N76'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Nuvoton M051'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'NXP LPC811'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Renesas RL7'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Sanyo LC87'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Silicon Labs EFM8'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'ST STM8'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'ST STM32F0'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'STC STC8'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'TI MSP430FR'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '0a4d91be-37dd-4b5e-a121-03816249c71f', 'tags': ['CS/Embedded'], 'date': datetime.date(2024, 10, 8), 'title': 'Low Cost Microcontroller', 'publish': True, 'slug': '23196f8d-427f-4cf6-8f7e-938eb079dbe3'} Export LowCostMicrocontroller.md to /home/eric/Downloads/ericblog/content/post/84b572b2-4231-4e9d-87f5-1fb0e0d4217e/index.md

Test /opt/note/CS/Embedded/McuBenchmark.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 21), 'tags': ['CS/Embedded'], 'publish': False}

Test /opt/note/CS/Embedded/OpenStick.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Embedded/RISCV Board List.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Embedded/ST7789.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Sitronix.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 12, 20), 'tags': ['CS/Embedded']}

Test /opt/note/CS/Embedded/Texas Instruments.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Embedded/TivaTM4C123GH6PMMicrocontroller.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/uLisp/2024-07-05 022014.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/uLisp/2024-07-05 022039.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/uLisp/2024-07-05 022115.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/uLisp/2024-07-05 022150.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/uLisp/uLisp.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 5), 'tags': ['CS/Embedded'], 'publish': False}

Test /opt/note/CS/Embedded/uLisp/uLispPerformance.md

Fail PropertieParsar publish not exist or true {'title': 'uLisp Performance', 'date': datetime.date(2024, 7, 5), 'tags': ['CS/Embedded'], 'publish': False}

Test /opt/note/CS/Embedded/Wch/CH340DS1.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Wch/CH341.md

Fail PropertieParsar publish not exist or true {'uuid': 'bc5785a0-738b-4777-b3d5-a752ad0188d3', 'tags': ['CS/Embedded'], 'date': datetime.date(2025, 2, 12), 'title': '', 'publish': False}

Test /opt/note/CS/Embedded/Wch/CH341DS1.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Wch/CH341DS2.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Wch/Ch340.md

/opt/note/CS/Embedded/Wch/Ch340.md

Set Date 2024-06-29 Set Title Ch340.md Set EnumSlugPropertie.Uuidv4 Slug a169ebdc-2d76-415e-a6d7-e71ead8b4dd5 Export Predict folder: /home/eric/Downloads/ericblog/content/post/17f88bba-0cb4-4b24-9cc0-5a0f9dd3ba74 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/17f88bba-0cb4-4b24-9cc0-5a0f9dd3ba74/index.md Test resource /opt/note/CS/Embedded/Wch/CS/Embedded/Wch/CH340DS1.pdf Result False Not File Or Not Exist From url CS/Embedded/Wch/CH340DS1.pdf Test resource /opt/note/CS/Embedded/Wch/CH340DS1.pdf Result True /opt/note/CS/Embedded/Wch/CH340DS1.pdf From url CS/Embedded/Wch/CH340DS1.pdf Resource Match CS/Embedded/Wch/CH340DS1.pdf Copy To c1322332-0c4f-45ab-8b26-44c577e4aa05.pdf Test resource /opt/note/CS/Embedded/Wch/CS/Embedded/Wch/ch340n.pdf Result False Not File Or Not Exist From url CS/Embedded/Wch/ch340n.pdf Test resource /opt/note/CS/Embedded/Wch/ch340n.pdf Result True /opt/note/CS/Embedded/Wch/ch340n.pdf From url CS/Embedded/Wch/ch340n.pdf Resource Match CS/Embedded/Wch/ch340n.pdf Copy To 05d02d7f-bc2c-4dc5-8b36-ed337dca778e.pdf

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '南京沁恒 (WCH) 製造的 USB 轉 RS-232,Uert 晶片,在國際上不好買'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '有很多廠商選用'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '中文文件(比英文完整)'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../c1322332-0c4f-45ab-8b26-44c577e4aa05.pdf'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '英文文件'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../05d02d7f-bc2c-4dc5-8b36-ed337dca778e.pdf'}}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '型號選擇'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '使用 CH341 的驅動 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'CH341SER'}], 'attrs': {'url': 'https://www.wch.cn/downloads/CH341SER_ZIP.html'}}, {'type': 'text', 'raw': ' CH341 支援轉換 i2c,spi'}]}, {'type': 'blank_line'}] 

Propertie {'title': 'Ch340.md', 'date': datetime.date(2024, 6, 29), 'tags': ['CS/Embedded'], 'publish': True, 'slug': 'a169ebdc-2d76-415e-a6d7-e71ead8b4dd5'} Export Ch340.md to /home/eric/Downloads/ericblog/content/post/17f88bba-0cb4-4b24-9cc0-5a0f9dd3ba74/index.md

Test /opt/note/CS/Embedded/Wch/ch340n.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Usart/2024-07-30 161712.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Usart/20250214T044515.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Usart/PL2303GD.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Usart/PL2303GT.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Usart/Usart.md

Fail PropertieParsar publish not exist or true {'uuid': '0353a39b-9bf3-46c7-b5f6-0460efb1cfe4', 'tags': ['CS/Embedded'], 'date': datetime.date(2024, 7, 22), 'title': 'USART', 'publish': False}

Test /opt/note/CS/Embedded/Sensor/Sensor.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Embedded/Sensor/Um220InsNfManual.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Sensor/Um220InsNfProductBrief.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Sensor/bst_bme280_ds002-2238172.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/STM32/STM32.md

Fail PropertieParsar publish not exist or true {'uuid': 'ec4fd660-e846-44e6-82bc-7beedd06654e', 'tags': ['CS/Embedded/STM'], 'date': datetime.date(2025, 2, 20), 'title': 'STM32'}

Test /opt/note/CS/Embedded/STM32/STM32BitArmprocessor.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/RaspberryPi/BCM2837ArmPeripherals.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/RaspberryPi/Bcm2711Peripherals.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/RaspberryPi/GPIO.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/RaspberryPi/RaspberryPi.md

/opt/note/CS/Embedded/RaspberryPi/RaspberryPi.md

Set Date 2024-08-14 Set Title RaspberryPi Set EnumSlugPropertie.Uuidv4 Slug eb0c4eea-543e-462f-9204-824e07f99e07 Export Predict folder: /home/eric/Downloads/ericblog/content/post/980cb21d-2b79-40d4-b6e2-401f6bd4e28b Export Markdown Path: /home/eric/Downloads/ericblog/content/post/980cb21d-2b79-40d4-b6e2-401f6bd4e28b/index.md Test resource /opt/note/CS/Embedded/RaspberryPi/CS/Embedded/RaspberryPi/BCM2837ArmPeripherals.pdf Result False Not File Or Not Exist From url CS/Embedded/RaspberryPi/BCM2837ArmPeripherals.pdf Test resource /opt/note/CS/Embedded/RaspberryPi/BCM2837ArmPeripherals.pdf Result True /opt/note/CS/Embedded/RaspberryPi/BCM2837ArmPeripherals.pdf From url CS/Embedded/RaspberryPi/BCM2837ArmPeripherals.pdf Resource Match CS/Embedded/RaspberryPi/BCM2837ArmPeripherals.pdf Copy To 3434ee5b-265e-4069-a6af-1b5eb39fc170.pdf Test resource /opt/note/CS/Embedded/RaspberryPi/CS/Embedded/RaspberryPi/Bcm2711Peripherals.pdf Result False Not File Or Not Exist From url CS/Embedded/RaspberryPi/Bcm2711Peripherals.pdf Test resource /opt/note/CS/Embedded/RaspberryPi/Bcm2711Peripherals.pdf Result True /opt/note/CS/Embedded/RaspberryPi/Bcm2711Peripherals.pdf From url CS/Embedded/RaspberryPi/Bcm2711Peripherals.pdf Resource Match CS/Embedded/RaspberryPi/Bcm2711Peripherals.pdf Copy To c6cd6180-af29-44a3-ad1e-635d3aebce72.pdf Test resource /opt/note/CS/Embedded/RaspberryPi/CS/Embedded/RaspberryPi/GPIO.png Result False Not File Or Not Exist From url CS/Embedded/RaspberryPi/GPIO.png Test resource /opt/note/CS/Embedded/RaspberryPi/GPIO.png Result True /opt/note/CS/Embedded/RaspberryPi/GPIO.png From url CS/Embedded/RaspberryPi/GPIO.png Resource Match CS/Embedded/RaspberryPi/GPIO.png Copy To fedf2be5-40d5-4f91-9477-3a08ff8eecab.png

1
 [{'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Pi3 的chip文件'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'BCM2837'}], 'attrs': {'url': '../3434ee5b-265e-4069-a6af-1b5eb39fc170.pdf'}}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Bare metal Raspberry Pi 3 tutorials'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'raspi3-tutorial'}], 'attrs': {'url': 'https://github.com/bztsrc/raspi3-tutorial'}}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Pi4 的chip文件'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Bcm2711'}], 'attrs': {'url': '../c6cd6180-af29-44a3-ad1e-635d3aebce72.pdf'}}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Pin'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Raspberry Pi GPIO pin define'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Raspberry Pi Pinout'}], 'attrs': {'url': 'https://pinout.xyz/'}}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'pigg'}], 'attrs': {'url': 'https://github.com/andrewdavidmackenzie/pigg'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'GUI for View and Config RaspberryPi GPIO'}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'GPIO 引腳可設定為高電平 3.3V 或低電平 0V,Pi 4 用電源供應器實測可以感受到 1 mA 3.3V,最低 1.2 還會判 Hight'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../fedf2be5-40d5-4f91-9477-3a08ff8eecab.png'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Raspberry Pi 1'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Raspberry Pi I2C clock-stretching bug'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Raspberry Pi I2C clock-stretching bug'}], 'attrs': {'url': 'https://forums.raspberrypi.com/viewtopic.php?f=44&amp;t=13771&amp;p=405024'}}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '時鐘拉伸僅在 I2C 讀取確認階段之後(讀取 ACK/NACK 後)直接起作用,並且僅當時鐘拉伸超過 0.5 個時脈週期時才起作用。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '時鐘延長在 I2C 寫入確認階段開始時不起作用(即從機必須決定是否發送 ACK 或 NACK 的時刻)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '除了從機可能會錯過太短的時脈的問題之外,當時脈拉長時, Raspberry Pi 還會過早讀取 SDA。因此,即使在 I2C 讀取確認階段將時鐘拉伸非常非常小,也會導致資料損壞。'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'GPIO'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'GPIO sysfs'}]}, {'type': 'block_code', 'raw': '$ cd /sys/class/gpio\n$ ls\nexport  gpiochip0  gpiochip504  unexport\n$ echo 26 > export\n$ ls\nexport  gpio26  gpiochip0  gpiochip504  unexport\n$ ls gpio26\nactive_low  device  direction  edge  power  subsystem  uevent  value\n$ cat gpio26/direction\nin\n$ echo out > gpio26/direction\n$ cat gpio26/value\n0\n$ echo 1 > gpio26/value\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '古老的手段,準備棄用,非常慢'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '直接操作 /sys/class/gpio ,無法確定是否爭用,程式意外結束時不會被 OS 清理'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Hardware Register'}]}, {'type': 'block_code', 'raw': '// Open the master /dev/ memory control device\n// Device strategy: December 2016:\n//\tTry /dev/mem. If that fails, then\n//\ttry /dev/gpiomem. If that fails then game over.\n\n  if ((fd = open ("/dev/mem", O_RDWR | O_SYNC | O_CLOEXEC)) < 0)\n  {\n    if ((fd = open ("/dev/gpiomem", O_RDWR | O_SYNC | O_CLOEXEC) ) >= 0)\t// We\'re using gpiomem\n    {\n      piGpioBase   = 0 ;\n      usingGpioMem = TRUE ;\n    }\n    else\n      return wiringPiFailure (WPI_ALMOST, "wiringPiSetup: Unable to open /dev/mem or /dev/gpiomem: %s.\\n"\n\t"  Aborting your program because if it can not access the GPIO\\n"\n\t"  hardware then it most certianly won\'t work\\n"\n\t"  Try running with sudo?\\n", strerror (errno)) ;\n  }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '不能夠處裡 edge detection'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'wiringPi, pigpio, RPi.GPIO, and gpiozero’s “native” driver 使用此方式'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'They’d “play nice” and use the sysfs interface for edge detection, but then stomp all over the hardware registers whenever they wanted to do anything else (reading the value of a GPIO, setting its direction, writing a value, etc.).'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'gpiochip'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'kernel 4.8 後支援'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '新增 /dev/gpiochip* 用 ioctl 在 user mode 控制 GPIO'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '會正確處裡所有權,在程式結束後刪除控制'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '用戶空間庫是 libgpiod'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'gpioinfo'}, {'type': 'text', 'raw': ' 確定存在哪些 GPIO 以及它們當前是否正在使用任何事物'}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Lib'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'RPi.GPIO'}], 'attrs': {'url': 'https://pypi.org/project/RPi.GPIO'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Pi 5 不可用'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'GPIOD'}], 'attrs': {'url': 'https://pypi.org/project/gpiod/'}}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'libgpiod/libgpiod.git'}], 'attrs': {'url': 'https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/'}}, {'type': 'text', 'raw': ' 的 python 綁定'}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'server and client sides in the form of the gpio-manager daemon and the gpiocli command-line utility for talking to the manager'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '使用 /dev/gpiochip'}]}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'gpiozero'}], 'attrs': {'url': 'https://gpiozero.readthedocs.io/en/latest/index.html'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '有設備抽象,Raspberry Pi OS 預設安裝'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '純 python 實施,只會幫忙呼叫後端函式庫(預設RPi.GPIO)'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'pigpio library'}], 'attrs': {'url': 'https://abyz.me.uk/rpi/pigpio/python.html'}}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'pigpio C'}], 'attrs': {'url': 'https://github.com/joan2937/pigpio'}}, {'type': 'text', 'raw': ' 的 python 綁定'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'WiringPi-Python'}], 'attrs': {'url': 'https://github.com/WiringPi/WiringPi-Python'}}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'WiringPi'}], 'attrs': {'url': 'https://github.com/WiringPi/WiringPi/tree/master'}}, {'type': 'text', 'raw': ' 的 python 綁定'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'WiringPi 於 2019 年 8 月被其作者棄用'}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Raspberry Pi OS'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Pi 3 裝 32 位作業系統速度較快,記憶體用量較小'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Pi 4 裝 64 位作業系統速度較快 10% 以上'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '64Bit 會占用比 32 Bit 多的記憶體(指針及整數較長)'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Pi 4'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在使用中發現即使 CPU 使用率小於 20% 但機器反應還是很慢,包括開 GUI 程式及移動滑鼠'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '-\xa0Raspberry Diagnostics'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '指令為 '}, {'type': 'codespan', 'raw': 'agnostics'}, {'type': 'text', 'raw': ',需要 GUI'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '一個沒有官方文檔的程式檢查 SD 卡速度'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Raspberry Diagnostics 要求 random read 1500 IOPS , random write 500 IOPS'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '修改滑鼠輪詢率'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '在 /boot/firmware/cmdline.txt 末端加入選項 usbhid.mousepoll=8'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '0 表示按滑鼠要求'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '1 每秒 1000 次'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '2 每秒 500 次'}]}]}, {'type': 'list_item', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '確保電源供應器符合官方標準 (Raspberry Pi 4 1.2A 5V)'}]}]}], 'tight': False, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'vcgencmd'}], 'attrs': {'url': 'https://elinux.org/RPI_vcgencmd_usage'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '又是一個沒有官方文件的 tool,查詢及設定 Raspberry Pi 硬體'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'vcgencmd measure_temp'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'CPU 溫度,應小於 50 度 C'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Uart'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Raspberry Pi 上有兩種類型的 UART - PL011和 mini UART。 PL011 是一款功能強大、廣泛相容 16550 的 UART,而迷你 UART 的功能集則減少。'}]}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Raspberry Pi 上的所有 UART 均為 3.3V - 如果將它們連接到 5V 系統,則會發生損壞。適配器可用於連接 5V 系統。或者,可以從各個第三方獲得低成本 USB 轉 3.3V 串行適配器'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'P3 只有 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'UART - PL011'}], 'attrs': {'url': 'https://developer.arm.com/documentation/ddi0183/g/introduction/about-the-uart'}}, {'type': 'text', 'raw': ' 跟 mini UART 各一組,UART - PL011 被藍芽占用'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'P4 有 6 組 UART - PL011,0, 1 被藍芽占用'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'GPIO14 = TXD0 -> ttyAMA0\nGPIO0  = TXD2 -> ttyAMA1\nGPIO4  = TXD3 -> ttyAMA2\nGPIO8  = TXD4 -> ttyAMA3\nGPIO12 = TXD5 -> ttyAMA4\n \nGPIO15 = RXD0 -> ttyAMA0\nGPIO1  = RXD2 -> ttyAMA1\nGPIO5  = RXD3 -> ttyAMA2\nGPIO9  = RXD4 -> ttyAMA3\nGPIO13 = RXD5 -> ttyAMA4\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Raspberry Pi Pin pair with uart'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'dtoverlay'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'device tree overlay'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'dtoverlay命令無法訪問啟動時加載的覆蓋;即該dtoverlay命令僅處理在運行時載入的覆蓋'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'an overlay or parameter applied by the firmware becomes "baked in" such that it won’t be listed by dtoverlay and can’t be removed.'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'dtoverlay -a'}, {'type': 'text', 'raw': ' 列出所有可以 overlay 的 device'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'dtoverlay -h uart4'}, {'type': 'text', 'raw': ' 列出參數'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': 'dtoverlay uart4'}, {'type': 'text', 'raw': ' 載入'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '3a58145c-1c44-4d02-b4f4-d6d5957ad1b2', 'tags': ['CS/Embedded'], 'date': datetime.date(2024, 8, 14), 'title': 'RaspberryPi', 'publish': True, 'slug': 'eb0c4eea-543e-462f-9204-824e07f99e07'} Export RaspberryPi.md to /home/eric/Downloads/ericblog/content/post/980cb21d-2b79-40d4-b6e2-401f6bd4e28b/index.md

Test /opt/note/CS/Embedded/Microprocessor/2ve5huc.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/6u7wxpl.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/Microprocessor Mid-term Project.md

/opt/note/CS/Embedded/Microprocessor/Microprocessor Mid-term Project.md

Set Date 2018-11-14 Set Title Microprocessor Mid-term Project.md Set EnumSlugPropertie.Uuidv4 Slug 2ae3e224-ed51-47d2-bcdf-e0d7f5166804 Export Predict folder: /home/eric/Downloads/ericblog/content/post/c41c1a91-a364-43ff-a0c7-da30606a8340 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/c41c1a91-a364-43ff-a0c7-da30606a8340/index.md Test resource /opt/note/CS/Embedded/Microprocessor/mzenqoq.jpg Result True /opt/note/CS/Embedded/Microprocessor/mzenqoq.jpg From url mzenqoq.jpg Resource Match CS/Embedded/Microprocessor/mzenqoq.jpg Copy To 976c4cd3-bcbf-486f-a566-5c8c5d7ed616.jpg Test resource /opt/note/mzenqoq.jpg Result False Not File Or Not Exist From url ../976c4cd3-bcbf-486f-a566-5c8c5d7ed616.jpg Test resource /opt/note/CS/Embedded/Microprocessor/p4i1zmi.jpg Result True /opt/note/CS/Embedded/Microprocessor/p4i1zmi.jpg From url p4i1zmi.jpg Resource Match CS/Embedded/Microprocessor/p4i1zmi.jpg Copy To 9f4be9a9-1694-4746-b6fc-06264bde14de.jpg Test resource /opt/note/p4i1zmi.jpg Result False Not File Or Not Exist From url ../9f4be9a9-1694-4746-b6fc-06264bde14de.jpg Test resource /opt/note/CS/Embedded/Microprocessor/o2dfbnr.png Result True /opt/note/CS/Embedded/Microprocessor/o2dfbnr.png From url o2dfbnr.png Resource Match CS/Embedded/Microprocessor/o2dfbnr.png Copy To 891284c4-7017-480b-bfb1-e83a71144f4b.png Test resource /opt/note/o2dfbnr.png Result False Not File Or Not Exist From url ../891284c4-7017-480b-bfb1-e83a71144f4b.png Test resource /opt/note/CS/Embedded/Microprocessor/uupqkk4.png Result True /opt/note/CS/Embedded/Microprocessor/uupqkk4.png From url uupqkk4.png Resource Match CS/Embedded/Microprocessor/uupqkk4.png Copy To 51bf033f-f5f6-4eab-9cd8-b8d6daa5eba4.png Test resource /opt/note/uupqkk4.png Result False Not File Or Not Exist From url ../51bf033f-f5f6-4eab-9cd8-b8d6daa5eba4.png

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'target'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我相信你們大家多看過'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'chrome://dino/'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../976c4cd3-bcbf-486f-a566-5c8c5d7ed616.jpg'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '就復刻一個,應該會在uart上,但RJ-433的2.5mb/s讓人恐懼'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果寫不上去就去LCD(應該是兩個點),計分會用七段顯示器。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '蹲下可以,腳不會動。'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '元件'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'timer,鋒鳴器,uart,按鈕,七段顯示器'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '程式結構!'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../9f4be9a9-1694-4746-b6fc-06264bde14de.jpg'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '流程'}]}, {'type': 'block_code', 'raw': 'st=>start :刻元件介面\ne=>end: debug\nop=>operation:  lowlevel print function(緩衝區,分頁選擇器,協議)\nop2=>operation: 顯示api\nop1=>operation: main\nc0=condition:耦合測試\nst->op->op2->po1->c0\nc0(fail)->st\nc0(pass)->e\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'flow'}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '這是時間跟達成率的關西 '}, {'type': 'strong', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'e^x + cos(x)'}], 'attrs': {'url': 'https://www.wolframalpha.com/input/?i=e%5Ex%2Bcosx'}}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我原本想做弊,結果他不是javastript QQ'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../891284c4-7017-480b-bfb1-e83a71144f4b.png'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'search "Atari Breakout" in google  picture'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../51bf033f-f5f6-4eab-9cd8-b8d6daa5eba4.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果我有空想重操舊業算算彈性碰撞的話,完全沒有實踐的想法。'}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Java 是個很棒的語言'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '對 C++ 社群有非常大的貢獻'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '他收留了所有寫不好 C++ 的人'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '維持了 C++ 神聖中土上高貴住民的純粹血統'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '所以我去寫java'}]}] 

Propertie {'date': datetime.date(2018, 11, 14), 'tags': ['CS/Embedded'], 'publish': True, 'title': 'Microprocessor Mid-term Project.md', 'slug': '2ae3e224-ed51-47d2-bcdf-e0d7f5166804'} Export Microprocessor Mid-term Project.md to /home/eric/Downloads/ericblog/content/post/c41c1a91-a364-43ff-a0c7-da30606a8340/index.md

Test /opt/note/CS/Embedded/Microprocessor/Microprocessor Term Report.md

/opt/note/CS/Embedded/Microprocessor/Microprocessor Term Report.md

Set Date 2018-11-14 Set Title Microprocessor Term Report.md Set EnumSlugPropertie.Uuidv4 Slug 30cd27eb-4b9f-4fd8-93db-0648fde41bf2 Export Predict folder: /home/eric/Downloads/ericblog/content/post/493cc6ce-28ae-45a7-8684-e2c90445437e Export Markdown Path: /home/eric/Downloads/ericblog/content/post/493cc6ce-28ae-45a7-8684-e2c90445437e/index.md Test resource /opt/note/CS/Embedded/Microprocessor/mzenqoq.jpg Result True /opt/note/CS/Embedded/Microprocessor/mzenqoq.jpg From url mzenqoq.jpg Resource Match CS/Embedded/Microprocessor/mzenqoq.jpg Copy To 34867dc7-5f0f-46ff-a0fb-2ba474123f17.jpg Test resource /opt/note/mzenqoq.jpg Result False Not File Or Not Exist From url ../34867dc7-5f0f-46ff-a0fb-2ba474123f17.jpg Test resource /opt/note/CS/Embedded/Microprocessor/6u7wxpl.jpg Result True /opt/note/CS/Embedded/Microprocessor/6u7wxpl.jpg From url 6u7wxpl.jpg Resource Match CS/Embedded/Microprocessor/6u7wxpl.jpg Copy To 181c5ba0-d904-439e-8ac4-ce77ccf4c6a9.jpg Test resource /opt/note/6u7wxpl.jpg Result False Not File Or Not Exist From url ../181c5ba0-d904-439e-8ac4-ce77ccf4c6a9.jpg Test resource /opt/note/CS/Embedded/Microprocessor/mjlhkev.jpg Result True /opt/note/CS/Embedded/Microprocessor/mjlhkev.jpg From url mjlhkev.jpg Resource Match CS/Embedded/Microprocessor/mjlhkev.jpg Copy To 5aba85ef-ee7c-4a2d-bb00-f25a1ae1ff5c.jpg Test resource /opt/note/mjlhkev.jpg Result False Not File Or Not Exist From url ../5aba85ef-ee7c-4a2d-bb00-f25a1ae1ff5c.jpg

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '目的'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我致敬了google的小恐龍'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../34867dc7-5f0f-46ff-a0fb-2ba474123f17.jpg'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先示範'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'lcd版'}]}, {'type': 'block_code', 'raw': '#include <stdlib.h>\n#include "WT59F064.h"\n#include "lcd.h"\n#include "keyboard_io.h"\n\nint cactus[2]={0xffff,0xffff},djmp=0,score=0,gameover=0;\n\nchar trans(int i){\n\tif(i<10){\n\t\treturn \'0\'+i;\n\t}else{\n\t\treturn \'A\'+(i-10);\n\t}\n}\n\nvoid ISR_forward(){\n\tTIM0_CNT = 0;\n\tTIM0_OFIF |= BIT4;\n\tif(gameover==1){\n\t\treturn;\n\t}\n\tif(TIM0_MAT0A>100){\n\t\tTIM0_MAT0A-=1;\n\t}\n\tWriteIns(0x0100);\n\tif(cactus[0]==0){\n\t\tcactus[0]=0xffff;\n\t}else if(cactus[0]<=0x0f00){\n\t\tcactus[0]-=0x0100;\n\t}\n\tif(cactus[1]==0){\n\t\tcactus[1]=0xffff;\n\t}else if(cactus[1]<=0x0f00){\n\t\tcactus[1]-=0x0100;\n\t}\n\n\tif(djmp>0){\n\t\tWriteIns(0x8300);\n\t\tWriteData(\'D\');\n\t\t--djmp;\n\t}else{\n\t\tWriteIns(0xc300);\n\t\tWriteData(\'D\');\n\t}\n\n\tif(cactus[0]<0x0f00){\n\t\tWriteIns(0xc000+cactus[0]);\n\t\tWriteData(\'C\');\n\t}\n\tif(cactus[1]<0x0f00){\n\t\tWriteIns(0xc000+cactus[1]);\n\t\tWriteData(\'C\');\n\t}\n\n\tWriteIns(0x8c00);\n\tWriteData(trans(((score&0xf000)>>12)));\n\tWriteData(trans(((score&0x0f00)>>8)));\n\tWriteData(trans(((score&0x00f0)>>4)));\n\tWriteData(trans((score&0x000f)));\n\t++score;\n\treturn;\n}\n\nvoid Timer0_Initial(void)\n{\n\tTIM0_CTL |= BITF;  // Timer Enable\n\tTIM0_CNT = 0; //incremented every (pscl + 1) of trigger source\n\tTIM0_PSCL = 23999; //°£ÀW\xadÈ\n\tTIM0_MAT0A = 1000; //Match mat0a register for output match mode\n\tTIM0_IE |= BIT4; // Interrupt enable for mat0a\n\tIE0_0 |= BIT3;  // 1: Enable Timer 0 interrupt\n\tTIM0_CTL |= BIT0; // Timer Start\n\treturn;\n}\n\nvoid Timer1_Initial(void)\n{\n\tTIM1_CTL |= BITF; // Timer Enable\n\tTIM1_CNT = 0; //incremented every (pscl + 1) of trigger source\n\tTIM1_PSCL = 23999; //°£ÀW\xadÈ\n\tTIM1_CTL |= BIT0;\n\treturn;\n}\n\n\nvoid IntInitial(void)\n{\n\tinitIntr();\n\tGIE_ENABLE();\n\treturn;\n}\n\nvoid PWM_Initial(void)\n{\n\tGPIO_ACT_PD = 0xFFFB;//GPIO port D.2 enables the PWM function.\n\tPWM4_PWM7_BASE_CLK = 0x3; \t// MUC Clock = 24MHz  => 2MHz\n\tPWM4_PWM7_ENABLE = 0x40; \t//PWM6 enable\n\treturn;\n}\n\nvoid quiet_PWM6(){\n\tPWM6_CLOCK=10;\n\tPWM6_PERIOD=0;\n\tPWM6_DUTY=0;\n\treturn;\n}\n\nint main(){\n\tSystem_Control_00 = ( System_Control_00 | 0x000E);\n\t// High speed external Xtal clk selection(011:24MHz); 1: HSE oscillator on\n\tSystem_Control_04 = ( System_Control_04 | 0x0001);\n\t// 1: Select HSE as system clock source\n\tInitialLCD();\t\t\t// LCD initial\n\tIntInitial(); \t\t\t// MCU interrupt initial\n\tPWM_Initial();\n\tTimer0_Initial();\n\tTimer1_Initial();\n\n\tquiet_PWM6();\n\twhile(1){\n\t\tKeyScan();\n\t\tif(GetKeyScanV()==0xE7 && djmp<=0 ){\n\t\t\tdjmp=3;\n\t\t\tPWM6_CLOCK=10;\n\t\t\tPWM6_PERIOD=346;\n\t\t\tPWM6_DUTY=173;\n\t\t\tdelay1(65534);\n\t\t\tquiet_PWM6();\n\n\n\t\t}else if(GetKeyScanV()==0xEB){\n\t\t\tgameover=1;\n\t\t\twhile(1){\n\t\t\t\tif(GetKeyScanV()== 0xED){\n\t\t\t\t\tgameover=0;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tKeyScan();\n\t\t\t}\n\t\t}\n\n\t\tif(djmp<=0){\n\t\t\tif(cactus[0]==0x0300 || cactus[1]==0x0300){\n\t\t\t\tWriteIns(0x8300);\n\t\t\t\tWriteString("game over");\n\t\t\t\tgameover=1;\n\t\t\t\twhile(1){;}\n\t\t\t}\n\t\t}\n\t\tif(cactus[0]>0x1000){\n\t\t\tif((TIM1_CNT%51)<3){\n\t\t\t\tcactus[0]=0x0f00;\n\t\t\t}\n\t\t}\n\t\tif(cactus[1]>0x1000 && cactus[0]!=0x0f00){\n\t\t\tif((TIM1_CNT%51)<17){\n\t\t\t\tcactus[1]=0x0f00;\n\t\t\t}\n\t\t}\n\t\tif(TIM1_CNT>0xefff){\n\t\t\tTIM1_CNT=0;\n\t\t}\n\t}\n\treturn 0;\n}\n\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '使用零件'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'LCD,中斷'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '應用技術'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '很不良的超長中斷'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '在中斷時調中斷計數器,所以會變快'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '用另外的時鐘當亂數'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Uart版'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '我幻想他應該長這樣'}]}, {'type': 'block_code', 'raw': '#include<stdlib.h>\n#include<stdio.h>\n#include<time.h>\n#define hight 24\n#define len 80\n#define signoff 2\n#define framesize 2048\nchar cactus[70]={"  /-\\\\/-\\\\  \\" | || | \\"\\\\\\\\| || |// \\\\| || |/   | || |    | || |  "}; //10*6\nchar role[80]={" _______ |       ||  $ $  ||   @   || ( ~ ) ||       ||_______|"}; //9*7\nint hang=0;\n\nvoid sleep(int s){\n    time_t pass=time(NULL);\n    while(time(NULL)-pass<s){;}\n    return;\n}\n\nchar *makeframe(){\n    char *p;\n    p=(char *)malloc(sizeof(char)*framesize);\n    for(int i=0;i<framesize-1;++i){\n        *(p+i)=\' \';\n    }\n    *(p+framesize-1)=\'\\0\';\n    return p;\n}\n\n\nint endofscreen(){\n    return (len+signoff)*hight;\n}\nint sat(char* f,unsigned short x,unsigned short y,char c){\n    //printf("w_po:%d",x+(len+signoff)*y);\n    if(x<len && y<hight){\n        f[x+(len+signoff)*y]=c;\n    }else{\n        printf("sat overrange at (%d,%d)",x,y);\n    }\n    return 0;\n}\n\nstruct disobj{\n    unsigned short px,py,x,y;\n    char *o;\n    struct disobj *next;\n};\n\ntypedef struct disobj disobj;\n\nvoid initdisobj(disobj *o){\n    o->px=0;\n    o->py=0;\n    o->x=0;\n    o->y=0;\n    o->o=NULL;\n    o->next=NULL;\n}\n\nvoid setdisobj(disobj *obj,unsigned short px,unsigned short py,unsigned short x,unsigned short y,char *bm){\n    obj->px=px;\n    obj->py=py;\n    obj->x=x;\n    obj->y=y;\n    obj->o=bm;\n    return;\n}\n\nint cactuswork(disobj *o){\n    if(hang>9){\n        if(rand()%3==0){\n            disobj *n=(disobj *)malloc(sizeof(disobj));\n            initdisobj(n);\n            setdisobj(n,len-10,hight-6,10,6,cactus);\n\n            hang=0;\n        }\n    }\n    while(o!=NULL){\n        if(o->o==cactus){\n            if(o->px>len*2){\n\n            }else{\n                o->px-=1;\n            }\n\n        }\n        o=o->next;\n    }\n    hang++;\n    return 0;\n}\n\nint layout(char *f,disobj *o){\n    while(o!=NULL){\n        for(int i=0;i+o->py<hight && i<o->y;++i){\n            for(int j=0;j+o->px<len && j<o->x;++j){\n                //printf("w_bm:%c %d %d ",o->o[j+(o->x)*i],j,i);\n                sat(f,o->px+j,o->py+i,o->o[j+(o->x)*i]);\n            }\n        }\n        o=o->next;\n    }\n}\n\nvoid scanner(char *screen,int k){\n    for(int i=0;i<hight;++i){\n        for(int j=0;j<len;++j){\n            if(j==k){\n                sat(screen,j,i,\'|\');\n            }else{\n                sat(screen,j,i,\' \');\n            }\n        }\n    }\n    return;\n}\n\nvoid scanendline(char *f,char *staff){\n    for(int i=0;i<hight;i++){\n        for(int j=0;j<signoff;j++){\n            //printf("position:%d ",len*(i+1)+i*signoff+j);\n            *(f+len*(i+1)+i*signoff)=*(staff+j);\n        }\n    }\n    return;\n}\n\nint main(){\n    int k=0;\n    char *screen=makeframe();\n    disobj *obj=(disobj *)malloc(sizeof(disobj)),*s;\n    initdisobj(obj);\n    setdisobj(obj,20,hight-9,9,7,role);\n    s=obj;\n    obj=(disobj *)malloc(sizeof(disobj));\n    initdisobj(obj);\n    setdisobj(obj,len-10,hight-6,10,6,cactus);\n    s->next=obj;\n    screen[endofscreen()]=\'\\0\';\n    scanendline(screen," \\n");\n    scanner(screen,len+1);\n    layout(screen,s);\n    printf("\\n%s",screen);\n\n    while(k<40){\n        s->next->px-=2;\n        scanner(screen,len+1);\n        layout(screen,s);\n        printf("\\n%s",screen);\n        sleep(2);\n        k++;\n    }\n\n    return 0x0;\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'C'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'disobj是單向鏈結,串起我要顯示的所有圖(bit map)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '所有 frame 掛在單層的單節點樹上,節點有序'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '每一個畫面皆是把disobj上的bit map畫上frame,我只要動disobj就可以移動圖了'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '這code實作在~~美好~~x64 with linux4.2上'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '我只要改掉printf就移植~~完成~~'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '這幻想,看結果'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': '#include<stdlib.h>\n#include "keyboard_io.h"\n#include "WT59F064.h"\n#include "Uart.h"\n#include "lcd.h"\n#define hight 25\n#define len 65\n#define signoff 2\n#define framesize 2048\nchar cactus[70]={"  /-\\\\/-\\\\  \\" | || | \\"\\\\\\\\| || |// \\\\| || |/   | || |    | || |  "}; //10*6\nchar role[80]={" _______ |       ||  $ $  ||   @   || ( ~ ) ||       ||_______|"}; //9*7\n\n\nchar hexresult[4];\nint djmp=0,dderect=0,score=0;\n\nchar *makeframe(){\n    char *p;\n    int i;\n    p=(char *)malloc(sizeof(char)*framesize);\n    for(i=0;i<framesize-1;++i){\n        *(p+i)=\'*\';\n    }\n    *(p+framesize-1)=\'\\0\';\n    return p;\n}\n\n\nint endofscreen(){\n    return (len+signoff)*hight;\n}\nint sat(char* f,unsigned short x,unsigned short y,char c){\n    if(x<len && y<hight){\n        f[x+(len+signoff)*y]=c;\n    }else{\n    \t;\n        //printf("sat overrange at (%d,%d)",x,y);\n    }\n    return 0;\n}\n\nstruct disobj{\n    unsigned short px,py,x,y;\n    char *o;\n    struct disobj *next;\n};\n\ntypedef struct disobj disobj;\n\nvoid initdisobj(disobj *o){\n    o->px=0;\n    o->py=0;\n    o->x=0;\n    o->y=0;\n    o->o=NULL;\n    o->next=NULL;\n    return;\n}\n\nvoid setdisobj(disobj *obj,unsigned short px,unsigned short py,unsigned short x,unsigned short y,char *bm){\n    obj->px=px;\n    obj->py=py;\n    obj->x=x;\n    obj->y=y;\n    obj->o=bm;\n    return;\n}\n\nint layout(char *f,disobj *o){\n\tint i,j;\n    while(o!=NULL){\n        for(i=0;i+o->py<hight && i<o->y;++i){\n            for(j=0;j+o->px<len && j<o->x;++j){\n                sat(f,o->px+j,o->py+i,o->o[j+(o->x)*i]);\n            }\n        }\n        o=o->next;\n    }\n    return 0;\n}\n\nvoid scanner(char *screen,int k){\n\tint i,j;\n    for(i=0;i<hight;++i){\n        for(j=0;j<len;++j){\n            if(j==k){\n                sat(screen,j,i,\'|\');\n            }else{\n                sat(screen,j,i,\'*\');\n            }\n        }\n    }\n    return;\n}\n\nvoid showframe(char *f){\n\tint i,j;\n    for(i=0;i<hight;i++){\n        for(j=0;j<len;j++){\n        \tDRV_PutChar(f[j+(len+signoff)*i]);\n        }\n        DRV_PutChar(\'\\n\');\n        DRV_PutChar(\'\\r\');\n        delay1(0xffff);\n    }\n    for(i=0;i<64;i++){\n    \tdelay1(0xffff);\n    }\n    return;\n}\n\ninline char hexshow(int i){\n\tif(i<10){\n\t\treturn \'0\'+i;\n\t}else{\n\t\treturn \'A\'+(i-10);\n\t}\n}\n\nvoid dectohex(int i){\n\thexresult[3]=hexshow((i&0xf000)>>12);\n\thexresult[2]=hexshow((i&0x0f00)>>8);\n\thexresult[1]=hexshow((i&0x00f0)>>4);\n\thexresult[0]=hexshow(i&0x000f);\n\treturn;\n}\n\nint main(){\n\tSystem_Control_00 = ( System_Control_00 | 0x000E);\n\tSystem_Control_04 = ( System_Control_04 | 0x0001);\n\tInitialLCD();\n\tWriteIns(0x8000);\n\tDRV_UartInitial();\n    char screen[framesize];\n    disobj obj0,obj1,obj2,*s;\n    initdisobj(&obj0);\n    initdisobj(&obj1);\n    initdisobj(&obj2);\n    setdisobj(&obj0,20,hight-7,9,7,role);\n    setdisobj(&obj1,len-10,hight-6,10,6,cactus);\n    setdisobj(&obj2,len,hight-6,10,6,cactus);\n    s=&obj0;\n    obj0.next=&obj1;\n    //obj1.next=&obj2;\n\n    while(1){\n    \tscanner(screen,len+1);\n    \tlayout(screen,s);\n    \tshowframe(screen);\n    \tDRV_Putstr("\\n\\n\\n\\n\\n\\r");\n\n    \tKeyScan();\n    \tif(GetKeyScanV()==0xE7 && djmp<=0 ){\n    \t\tdjmp=1;\n    \t\tdderect=0;\n    \t}else if(GetKeyScanV()==0xEB){\n    \t\twhile(1){\n    \t\t\tif(GetKeyScanV()== 0xED){\n    \t\t\t\tbreak;\n    \t\t\t}\n    \t\t\tKeyScan();\n    \t\t}\n    \t}\n\n    \tif(djmp>0){\n    \t\tif(dderect==0 &&djmp<=15){\n    \t\t\tdjmp++;\n    \t\t\tobj0.py=hight-(7+djmp);\n    \t\t}else if(dderect==0){\n    \t\t\tdderect=1;\n    \t\t\tdjmp--;\n    \t\t\tobj0.py=hight-(7+djmp);\n    \t\t}else if(dderect==1){\n    \t\t\tdjmp--;\n    \t\t\tobj0.py=hight-(7+djmp);\n    \t\t}\n    \t}\n\n    \tif(djmp<5 && obj1.px<29 && obj1.px>14){\n    \t\tint k;\n    \t\tDRV_Putstr("\\n\\n\\n\\n\\n\\r");\n    \t\tfor(k=0;k<32;++k){\n    \t\t\tDRV_Putstr("game over\\n\\r");\n    \t\t}\n    \t\twhile(1){;}\n    \t}\n\n    \tif(obj1.px==0){\n    \t\tobj1.px=len-10;\n    \t}else{\n    \t\tobj1.px-=1;\n    \t}\n\n    } //end of main loop.\n\n    return 0x0;\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'C'}}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'frame的單層樹狀結構被改成直接指向char array'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '所有動態生成的物件,全寫死'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'malloc'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../181c5ba0-d904-439e-8ac4-ce77ccf4c6a9.jpg'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'line 3有什麼問題??'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'p 呢'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '所以p是亂數??'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '是0'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '具規格書,那是保留,所以是0囉??'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../5aba85ef-ee7c-4a2d-bb00-f25a1ae1ff5c.jpg'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '他會印出大概1000個是長的單一字元,可是我Uart一次只能送一個ascii'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '我每印一個char就加一個等號'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '我是應為她每次多差不多才發現的,她系統資源完全裸奔'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '這就是魔法'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '記憶體超界'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '他只有4096bit不小心超出去會停機'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '他後面是flash,我還不知道可不可以存取'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Uart buffer'}]}, {'type': 'block_code', 'raw': "void showframe(char *f){\n\tint i,j;\n    for(i=0;i<hight;i++){\n        for(j=0;j<len;j++){\n        \tDRV_PutChar(f[j+(len+signoff)*i]);\n        }\n        DRV_PutChar('\\n');\n        DRV_PutChar('\\r');\n        delay1(0xffff);\n    }\n    for(i=0;i<64;i++){\n    \tdelay1(0xffff);\n    }\n    return;\n}\n", 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'C'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '板子的Uart buffer不夠大,要延遲一下'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '傳送檢查的bit只是寫buffer'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '使用零件'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Uart'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '修課心得'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'OS很偉大,真的'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '完程度大概有六成,至少不是屍體'}]}] 

Propertie {'date': datetime.date(2018, 11, 14), 'tags': ['CS/Embedded'], 'publish': True, 'title': 'Microprocessor Term Report.md', 'slug': '30cd27eb-4b9f-4fd8-93db-0648fde41bf2'} Export Microprocessor Term Report.md to /home/eric/Downloads/ericblog/content/post/493cc6ce-28ae-45a7-8684-e2c90445437e/index.md

Test /opt/note/CS/Embedded/Microprocessor/azvlug4.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/etlrwlr.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/fa5ltw0.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/jwvuxah.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/la4kiq3.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/mjlhkev.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/mzenqoq.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/o2dfbnr.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/p4i1zmi.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/sg2kprr.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/uupqkk4.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/ztdvldl.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microprocessor/軟硬體共同設計期末作業.md

/opt/note/CS/Embedded/Microprocessor/軟硬體共同設計期末作業.md

Set Date 2021-01-08 Set Title 軟硬體共同設計期末作業.md Set EnumSlugPropertie.Uuidv4 Slug ae8c848a-7206-4a54-8147-a6b06e3c79a4 Export Predict folder: /home/eric/Downloads/ericblog/content/post/f92cba9e-92c8-4aa2-94d5-f469a2576d7b Export Markdown Path: /home/eric/Downloads/ericblog/content/post/f92cba9e-92c8-4aa2-94d5-f469a2576d7b/index.md Test resource /opt/note/CS/Embedded/Microprocessor/fa5ltw0.png Result True /opt/note/CS/Embedded/Microprocessor/fa5ltw0.png From url fa5ltw0.png Resource Match CS/Embedded/Microprocessor/fa5ltw0.png Copy To 5c84748d-5c9a-4ab9-b33e-46d82c6bc3b8.png Test resource /opt/note/fa5ltw0.png Result False Not File Or Not Exist From url ../5c84748d-5c9a-4ab9-b33e-46d82c6bc3b8.png Test resource /opt/note/CS/Embedded/Microprocessor/2ve5huc.png Result True /opt/note/CS/Embedded/Microprocessor/2ve5huc.png From url 2ve5huc.png Resource Match CS/Embedded/Microprocessor/2ve5huc.png Copy To bcf790f3-54e6-4bf2-95cd-975837fed871.png Test resource /opt/note/2ve5huc.png Result False Not File Or Not Exist From url ../bcf790f3-54e6-4bf2-95cd-975837fed871.png Test resource /opt/note/CS/Embedded/Microprocessor/etlrwlr.png Result True /opt/note/CS/Embedded/Microprocessor/etlrwlr.png From url etlrwlr.png Resource Match CS/Embedded/Microprocessor/etlrwlr.png Copy To 7311d6c5-cf8e-4f08-9809-6319c12ca917.png Test resource /opt/note/etlrwlr.png Result False Not File Or Not Exist From url ../7311d6c5-cf8e-4f08-9809-6319c12ca917.png Test resource /opt/note/CS/Embedded/Microprocessor/la4kiq3.png Result True /opt/note/CS/Embedded/Microprocessor/la4kiq3.png From url la4kiq3.png Resource Match CS/Embedded/Microprocessor/la4kiq3.png Copy To 7945eaf8-4477-4aa0-a272-701f9843bfe7.png Test resource /opt/note/la4kiq3.png Result False Not File Or Not Exist From url ../7945eaf8-4477-4aa0-a272-701f9843bfe7.png Test resource /opt/note/CS/Embedded/Microprocessor/jwvuxah.png Result True /opt/note/CS/Embedded/Microprocessor/jwvuxah.png From url jwvuxah.png Resource Match CS/Embedded/Microprocessor/jwvuxah.png Copy To ebbcd89e-0fde-499f-9f17-4384845f06a9.png Test resource /opt/note/jwvuxah.png Result False Not File Or Not Exist From url ../ebbcd89e-0fde-499f-9f17-4384845f06a9.png Test resource /opt/note/CS/Embedded/Microprocessor/sg2kprr.png Result True /opt/note/CS/Embedded/Microprocessor/sg2kprr.png From url sg2kprr.png Resource Match CS/Embedded/Microprocessor/sg2kprr.png Copy To 04b4dd70-11a1-4c57-91bc-b82c28768763.png Test resource /opt/note/sg2kprr.png Result False Not File Or Not Exist From url ../04b4dd70-11a1-4c57-91bc-b82c28768763.png Test resource /opt/note/CS/Embedded/Microprocessor/azvlug4.png Result True /opt/note/CS/Embedded/Microprocessor/azvlug4.png From url azvlug4.png Resource Match CS/Embedded/Microprocessor/azvlug4.png Copy To 8b9439fa-9093-46e1-b5dd-00ba634e2a5d.png Test resource /opt/note/azvlug4.png Result False Not File Or Not Exist From url ../8b9439fa-9093-46e1-b5dd-00ba634e2a5d.png Test resource /opt/note/CS/Embedded/Microprocessor/ztdvldl.png Result True /opt/note/CS/Embedded/Microprocessor/ztdvldl.png From url ztdvldl.png Resource Match CS/Embedded/Microprocessor/ztdvldl.png Copy To 5a9c9509-7ac1-402f-b300-85c19370c081.png Test resource /opt/note/ztdvldl.png Result False Not File Or Not Exist From url ../5a9c9509-7ac1-402f-b300-85c19370c081.png

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'HW1'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用KruskalWallis求圓周率前800有效位'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '程式碼來自'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Computing Pi in C'}], 'attrs': {'url': 'https://crypto.stanford.edu/pbc/notes/pi/code.html'}}, {'type': 'text', 'raw': 'Computing Pi in C'}]}, {'type': 'block_code', 'raw': '#include <stdio.h>\n\nint main() {\n    int r[2800 + 1];\n    int i, k;\n    int b, d;\n    int c = 0;\n\n    for (i = 0; i < 2800; i++) {\n        r[i] = 2000;\n    }\n\n    for (k = 2800; k > 0; k -= 14) {\n        d = 0;\n\n        i = k;\n        for (;;) {\n            d += r[i] * 10000;\n            b = 2 * i - 1;\n\n            r[i] = d % b;\n            d /= b;\n            i--;\n            if (i == 0) break;\n            d *= i;\n        }\n        printf("%.4d", c + d / 10000);\n        c = d % 10000;\n    }\n\n    return 0;\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': 'https://i.imgur.com/233V2BP.png'}}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': 'https://i.imgur.com/nyU6OHS.png'}}]}, {'type': 'block_code', 'raw': 'void line_12(){\n\tr[i] = 2000;\n}\n\nvoid line_22(){\n\td += r[i] * 10000;\n}\n\nvoid line_23(){\n\tb = 2 * i - 1;\n}\n\nvoid line_24(){\n\tr[i] = d % b;\n    d /= b;\n}\n\nvoid line_27(){\n\tc = d % 10000;\n}\n\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../5c84748d-5c9a-4ab9-b33e-46d82c6bc3b8.png'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '很明顯是line_24(),我想做記憶體線性存取加速。'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'HW2'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '本機編譯'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../bcf790f3-54e6-4bf2-95cd-975837fed871.png'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '本來不知道.h.c檔只有單向include,一直在嘗試-I -L'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../7311d6c5-cf8e-4f08-9809-6319c12ca917.png'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '直接傳給gcc秒解。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '我還是搞不懂gcc target file  -I的差別'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '讀寫SD'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先上結論'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../7945eaf8-4477-4aa0-a272-701f9843bfe7.png'}}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': '//FIleIo/diskio.h\n/*---------------------------------------*/\n/* Prototypes for disk control functions */\n\nint assign_drives (int, int);\nDSTATUS disk_initialize (BYTE);\nDSTATUS disk_status (BYTE);\nDRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);\nDRESULT disk_write (BYTE, const BYTE*, DWORD, BYTE);\nDRESULT disk_ioctl (BYTE, BYTE, void*);\n\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '好像有實作disk_write???'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '但mmc.c裡沒有write'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': '//ffconf.h\n#define _FS_READONLY\t1\t/* 0:Read/Write or 1:Read only */\n/* Setting _FS_READONLY to 1 defines read only configuration. This removes\n/  writing functions, f_write, f_sync, f_unlink, f_mkdir, f_chmod, f_rename,\n/  f_truncate and useless f_getfree. */\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'vivado會提醒你mmc裡沒有disk_write()'}, {'type': 'softbreak'}, {'type': 'text', 'raw': ':::danger'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '所以src裡的FileIo不能用'}, {'type': 'softbreak'}, {'type': 'text', 'raw': ':::'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '在google了前5頁多是xilinx 教你自己刻的3年前的論壇之後,我絕望的跑去看xilinx user meue'}, {'type': 'softbreak'}, {'type': 'text', 'raw': ',發現xilinx做完了'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'p158 LibXil FFS'}], 'attrs': {'url': 'https://www.xilinx.com/support/documentation/sw_manuals/xilinx2014_4/oslib_rm.pdf'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '本來以為是救贖,結果'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../ebbcd89e-0fde-499f-9f17-4384845f06a9.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '二頁XD'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '後來發現'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'FatFs'}], 'attrs': {'url': 'http://elm-chan.org/fsw/ff/00index_e.html'}}, {'type': 'text', 'raw': '是他的最頂層接口'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': '#include <stdio.h>\n#include "platform.h"\n#include "xil_printf.h"\n#include "xstatus.h"\n\n#include "ff.h"\n\nu32 FlashReadBaseAddress;\n\n\nstatic FIL fil;\t\t/* File object */\nstatic FATFS fatfs;\nstatic char buffer[32];\nstatic char *boot_file = buffer;\n\nchar *strcpy_rom(char *Dest, const char *Src)\n{\n\tunsigned i;\n\tfor (i=0; Src[i] != \'\\0\'; ++i)\n\t\tDest[i] = Src[i];\n\tDest[i] = \'\\0\';\n\treturn Dest;\n}\n\nu32 InitSD(const char *filename)\n{\n\n\tFRESULT rc;\n\n\t/* Register volume work area, initialize device */\n\trc = f_mount(&fatfs,2,1);\n\t//fsbl_printf(DEBUG_INFO,"SD: rc= %.8x\\n\\r", rc);\n\n\tif (rc != FR_OK) {\n\t\treturn XST_FAILURE;\n\t}\n\n\tstrcpy_rom(buffer, filename);\n\tboot_file = (char *)filename;\n\tFlashReadBaseAddress = XPAR_PS7_SD_0_BASEADDR;\n\n\trc = f_open(&fil, boot_file, FA_READ);\n\tif (rc) {\n\t\txil_printf("SD: Unable to open file %s: %d\\n", boot_file, rc);\n\t\t//fsbl_printf(DEBUG_GENERAL,"SD: Unable to open file %s: %d\\n", boot_file, rc);\n\t\treturn XST_FAILURE;\n\t}\n\n\treturn XST_SUCCESS;\n\n}\n\nu32 SDAccess( u32 SourceAddress, u32 DestinationAddress, u32 LengthBytes)\n{\n\n\tFRESULT rc;\t /* Result code */\n\tUINT br;\n\n\trc = f_lseek(&fil, SourceAddress);\n\tif (rc) {\n\t\txil_printf("SD: Unable to seek to %x\\n", SourceAddress);\n\t\t//fsbl_printf(DEBUG_INFO,"SD: Unable to seek to %x\\n", SourceAddress);\n\t\treturn XST_FAILURE;\n\t}\n\n\trc = f_read(&fil, (void*)DestinationAddress, LengthBytes, &br);\n\n\tif (rc) {\n\t\t//fsbl_printf(DEBUG_GENERAL,"*** ERROR: f_read returned %d\\r\\n", rc);\n\t\txil_printf("*** ERROR: f_read returned %d\\r\\n", rc);\n\t}\n\n\treturn XST_SUCCESS;\n\n} /* End of SDAccess */\n\n\n\nvoid ReleaseSD(void) {\n\n\tf_close(&fil);\n\treturn;\n\n\n}\n\nint main()\n{\n\tchar imageval[128];\n\n\tdisable_caches();\n\tInitSD("image.txt");\n\tSDAccess(0,(u32)imageval,32);\n\txil_printf("%s\\n\\r",imageval);\n\tenable_caches();\n    init_platform();\n\n    print("Hello World\\n\\r");\n\n    cleanup_platform();\n    return 0;\n}\n\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '只讀'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../04b4dd70-11a1-4c57-91bc-b82c28768763.png'}}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'void enable_caches();  //ericchen add 2020/01\nvoid disable_caches();  //ericchen add 2020/01\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'block_code', 'raw': 'void CcdCapture(void) {\n\n    int pixel;\n    char pixelbuff[8];\n    disable_caches();\n    InitSD(imageFileName);\n    for(rowIndex=0; rowIndex< SZ_ROW; rowIndex++) {\n\n        for(colIndex=0; colIndex< SZ_COL; colIndex++) {\n        \tSDAccess(rowIndex*(5*SZ_COL+2)+colIndex*5,(u32)pixelbuff,5);\n        \tpixelbuff[5] = \'\\0\';\n            if( sscanf(pixelbuff, "%i", &pixel) == 1 ) {\n\n                assert( pixel >= -128 && pixel <= 127 );\n\n                buffer[rowIndex][colIndex] = (char)pixel;\n                //xil_printf("%d",pixel);\n            }\n            else {\n\n                assert( 0 );\n            }\n        }\n        //xil_printf("\\n\\r");\n    }\n    enable_caches();\n    ReleaseSD();\n    rowIndex = 0;\n    colIndex = 0;\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': ':::info'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'D:\\10510129\\hw2_0\\lab5.sdk\\digcam\\Debug/../src/sd.c:140: multiple definition of '}, {'type': 'codespan', 'raw': "SDAccess' ./src/helloworld.o:D:\\10510129\\hw2_0\\lab5.sdk\\digcam\\Debug/../src/sd.c:140: first defined here ./src/sd.o: In function "}, {'type': 'text', 'raw': "ReleaseSD':"}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'D:\\10510129\\hw2_0\\lab5.sdk\\digcam\\Debug/../src/sd.c:176: multiple definition of '}, {'type': 'text', 'raw': '`'}, {'type': 'text', 'raw': "ReleaseSD'"}, {'type': 'softbreak'}, {'type': 'text', 'raw': './src/helloworld.o:D:\\10510129\\hw2_0\\lab5.sdk\\digcam\\Debug/../src/sd.c:176: first defined here'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'collect2.exe: error: ld returned 1 exit status'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'make: *** '}, {'type': 'text', 'raw': '['}, {'type': 'text', 'raw': 'digcam.elf] Error 1'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '22:34:45 Build Finished (took 377ms)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': ':::'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '好像一定要.h'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../8b9439fa-9093-46e1-b5dd-00ba634e2a5d.png'}}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '讀寫'}]}, {'type': 'block_code', 'raw': '//sd.c\n#include <stdio.h>\n\n#include "xil_printf.h"\n#include "platform.h"\n#include "xstatus.h"\n\n#include "ff.h"\n#include "sd.h"\n\n\n\nstatic FIL fil;\t\t/* File object */\nstatic FATFS fatfs;\nstatic char buffer[32];\nstatic char *boot_file = buffer;\n\nu32 FlashReadBaseAddress;  //不知名原應要出現\n\nchar *strcpy_rom(char *Dest, const char *Src)//意義不明\n{\n\tunsigned i;\n\tfor (i=0; Src[i] != \'\\0\'; ++i)\n\t\tDest[i] = Src[i];\n\tDest[i] = \'\\0\';\n\treturn Dest;\n}\n\n\n\nu32 InitSD(const char *filename,int mode)\n{\n\n\tBYTE imode = mode == 0 ? FA_READ : FA_WRITE | FA_CREATE_ALWAYS;\n\tFRESULT rc;\n\trc = f_mount(&fatfs,"",0);//sync 0\n\n\tif (rc != FR_OK) {\n\t\treturn XST_FAILURE;\n\t}\n\n\tstrcpy_rom(buffer, filename);\n\tboot_file = (char *)filename;\n\tFlashReadBaseAddress = XPAR_PS7_SD_0_BASEADDR;\n\n\trc = f_open(&fil, boot_file, imode);\n\tif (rc) {\n\t\txil_printf("SD: Unable to open file %s: %d\\n", boot_file, rc);\n\t\treturn XST_FAILURE;\n\t}\n\n\treturn XST_SUCCESS;\n\n}\n\n\nu32 SDAccess( u32 SourceAddress, u32 DestinationAddress, u32 LengthBytes)\n{\n\n\tFRESULT rc;\t /* Result code */\n\tUINT br;\n\n\trc = f_lseek(&fil, SourceAddress);\n\tif (rc) {\n\t\txil_printf("SD: Unable to seek to %x\\n", SourceAddress);\n\t\treturn XST_FAILURE;\n\t}\n\n\trc = f_read(&fil, (void*)DestinationAddress, LengthBytes, &br);\n\n\tif (rc) {\n\t\t//fsbl_printf(DEBUG_GENERAL,"*** ERROR: f_read returned %d\\r\\n", rc);\n\t\txil_printf("*** ERROR: f_read returned %d\\r\\n", rc);\n\t}\n\n\treturn XST_SUCCESS;\n\n} /* End of SDAccess */\n\n\nu32 SDWrite(const char* wbuff, u32 LengthBytes)\n{\n\n\tFRESULT rc;\t /* Result code */\n\tUINT br;\n\trc = f_write(&fil, (const void*)wbuff,LengthBytes,&br);\n\tif (rc) {\n\t\t\n\t\txil_printf("*** ERROR: f_write returned %d\\r\\n", rc);\n\t}\n\n\treturn XST_SUCCESS;\n\n} /* End of SDAccess */\n\n\nvoid ReleaseSD(void) {\n\n\tf_close(&fil);\n\tf_mount(0,"",0); //unmount\n\treturn;\n\n\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'block_code', 'raw': '//uat.c\nvoid UatInitialize(const char *outputFileName) {\n    assert( outputFileName );\n    disable_caches();\n    InitSD(outputFileName,1);\n}\n\nvoid UatSend(char d) {\n    \n    sprintf(outputFilebuff, "%5i\\n\\r", (int)d); \n\tSDWrite((void*)outputFilebuff,5); //懒的算長度\n}\n\nvoid UatRelease(){ //一定要關不然會寫入不全,雖然我sync沒開\n\tReleaseSD();\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'block_code', 'raw': '//ccd.c\nvoid CcdCapture(void) {\n\n    int pixel;\n    char pixelbuff[8];\n    disable_caches();\n    InitSD(imageFileName,0);\n    for(rowIndex=0; rowIndex< SZ_ROW; rowIndex++) {\n\n        for(colIndex=0; colIndex< SZ_COL; colIndex++) {\n        \tSDAccess(rowIndex*(5*SZ_COL+2)+colIndex*5,(u32)pixelbuff,5);\n        \tpixelbuff[5] = \'\\0\';\n            if( sscanf(pixelbuff, "%i", &pixel) == 1 ) {\n\n                assert( pixel >= -128 && pixel <= 127 );\n\n                buffer[rowIndex][colIndex] = (char)pixel;\n                //xil_printf("%d",pixel);\n            }\n            else {\n\n                assert( 0 );\n            }\n        }\n        //xil_printf("\\n\\r");\n    }\n    ReleaseSD();\n    enable_caches();\n\n    rowIndex = 0;\n    colIn\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'block_code', 'raw': 'int main()\n{\n    init_platform();\n    char *uatOutputFileName = "uat_out.txt";\n    char *imageFileName = "image.txt";\n    print("Hello World\\n\\r");\n    CcdInitialize(imageFileName);\n    CcdppInitialize();\n    CodecInitialize();\n    CntrlInitialize();\n\n    CntrlCaputreImage();\n    CntrlCompressImage();\n    UatInitialize(uatOutputFileName);\n    CntrlSendImage();\n    UatRelease();\n    print("end of main\\n\\r");\n    cleanup_platform();\n    return 0;\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '換順序'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../5a9c9509-7ac1-402f-b300-85c19370c081.png'}}]}, {'type': 'blank_line'}] 

Propertie {'date': datetime.date(2021, 1, 8), 'tags': ['CS/Embedded'], 'publish': True, 'title': '軟硬體共同設計期末作業.md', 'slug': 'ae8c848a-7206-4a54-8147-a6b06e3c79a4'} Export 軟硬體共同設計期末作業.md to /home/eric/Downloads/ericblog/content/post/f92cba9e-92c8-4aa2-94d5-f469a2576d7b/index.md

Test /opt/note/CS/Embedded/Microchip/1ae82f742d4829f7170391f7b8594520.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/29879825f4d5d5c76daaa5b7d461f7c7.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/5bd145b34f25b3968b667347e3b5fe39.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/5c0c5203ebb1bc89fea8cfbedfda5cef.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/5e91981dc3a79694510cdbda3dab5e62.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/6093f0e19d20f64e924643ab4cb0602c.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/63b1d2135fe68fb862b0607a69025e9e.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/75740ca377130b1f605fcc74d66cdd32.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/75a9396743ef2ec12b59550fcab32d0c.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/7ae3101e1025a187b10aeb011e34647e.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/95cb257a06d36043253e6197a4ed5a94.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/FirmwareUpdate.md

Fail PropertieParsar publish not exist or true {'uuid': 'ab07a6cf-5f09-44da-8da5-102ecfc4042a', 'tags': ['CS/Embedded'], 'date': datetime.date(2025, 3, 11), 'title': ''}

Test /opt/note/CS/Embedded/Microchip/Microchip.md

Fail PropertieParsar publish not exist or true {'uuid': 'b8ffc4b6-5ee9-4c1b-9a4e-6d69e4ad7b3f', 'tags': ['CS/Embedded'], 'date': datetime.date(2025, 3, 12), 'title': 'Microchip'}

Test /opt/note/CS/Embedded/Microchip/PIC32CXMTSH.md

Fail PropertieParsar publish not exist or true {'uuid': 'c60aa2a1-2c8e-4687-a394-be2f0086e740', 'tags': ['CS/Embedded'], 'date': datetime.date(2025, 3, 12), 'title': ''}

Test /opt/note/CS/Embedded/Microchip/Peripheral.md

Fail PropertieParsar publish not exist or true {'uuid': '7216836b-5f51-4dc8-b3a2-d6ede90f75ea', 'tags': ['CS/Embedded'], 'date': datetime.date(2025, 3, 11), 'title': 'Peripheral'}

Test /opt/note/CS/Embedded/Microchip/Pic64.md

Fail PropertieParsar publish not exist or true {'uuid': '7bd5c148-7805-4e23-9e11-b69b312c0c22', 'tags': ['CS/Embedded'], 'date': datetime.date(2025, 3, 12), 'title': 'PIC64'}

Test /opt/note/CS/Embedded/Microchip/c1a619e1ef90cfb2df50f9eed5b030dd.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/c9231850bd88038bab426807b3a188bf.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/d3b956c2839b6832bb72d8e9b3558dcc.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/eb711f2718248dbe6ac71e71b850c08d.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Microchip/ffcf66aa15634109462ee645c337ec4a.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/MEC152x/MEC152x.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 27), 'tags': ['CS/Embedded'], 'publish': False}

Test /opt/note/CS/Embedded/MEC152x/UartInterruptHang.md

Fail PropertieParsar publish not exist or true {'uuid': '73df37df-cc4d-4015-99b7-6771fec39086', 'tags': ['CS/Embedded'], 'date': datetime.date(2024, 10, 28), 'title': 'MEC152x Uart Interrupt Hang', 'publish': False}

Test /opt/note/CS/Embedded/MEC152x/UartTransmitEmptyNotSet.md

Fail PropertieParsar publish not exist or true {'uuid': '55ac6f67-e869-40a2-99e7-34e365535782', 'tags': ['CS/Embedded'], 'date': datetime.date(2024, 10, 28), 'title': 'Uart TRANSMIT_EMPTY Not Set', 'publish': False}

Test /opt/note/CS/Embedded/Keil/2024-11-07 140719.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Keil/217cb9cc-04ab-482a-ae52.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/Keil/Keil ULINK.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 30), 'tags': ['CS/Embedded'], 'title': ''}

Test /opt/note/CS/Embedded/Keil/Keil.md

/opt/note/CS/Embedded/Keil/Keil.md

Set Date 2025-02-20 Set Title Keil Set EnumSlugPropertie.Uuidv4 Slug 72d26144-a7e4-4bae-9ca7-ebc45c441818 Export Predict folder: /home/eric/Downloads/ericblog/content/post/4b19708b-caf4-4495-9250-72e43b0176b8 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/4b19708b-caf4-4495-9250-72e43b0176b8/index.md Test resource /opt/note/CS/Embedded/Keil/CS/Embedded/Keil/29d34e27fd7ff69adc515e570f8579fb.png Result False Not File Or Not Exist From url CS/Embedded/Keil/29d34e27fd7ff69adc515e570f8579fb.png Test resource /opt/note/CS/Embedded/Keil/29d34e27fd7ff69adc515e570f8579fb.png Result False Not File Or Not Exist From url CS/Embedded/Keil/29d34e27fd7ff69adc515e570f8579fb.png

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '编译函数或变量到指定地址'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '将函数加载到指定位置'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '示例将 main.c 中的 delay 函数指定到 0x08020000 地址,可以在 c 文件中函数的定义处指定 delay 函数。'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'void delay(void) __attribute__ ((section(&quot;.ARM.__at_0x08020000&quot;)));'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '将数组加载到指定位置'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'int Temp[] __attribute__ ((section(&quot;.ARM.__at_0x08020000&quot;))) = {0x1, 0x2};'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '将变量加载到指定位置以 AT32F403AVGT7 为例:'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '示例可以直接将 c 代码修改如下:'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'const int Temp __attribute__ ((section(&quot;.ARM.__at_0x08020000&quot;))) = 10; // RO'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'int Temp __attribute__ ((section(&quot;.ARM.__at_0x20000000&quot;))) = 10; // RW'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '加入 C Source File'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': 'CS/Embedded/Keil/29d34e27fd7ff69adc515e570f8579fb.png'}}, {'type': 'text', 'raw': 'User 右鍵 > Manage Project Item > Add Files'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '記得要選要加入的 Group,加入 C 檔即可,H 檔不用加'}]}, {'type': 'block_code', 'raw': 'I2c\n|-inc\n    |-Source.h\n|-src\n    |-Source.c\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '建議維持此資料夾結構'}]}] 

Propertie {'date': datetime.date(2025, 2, 20), 'tags': ['CS/Embedded', 'CS/CAndCpp'], 'title': 'Keil', 'publish': True, 'slug': '72d26144-a7e4-4bae-9ca7-ebc45c441818'} Export Keil.md to /home/eric/Downloads/ericblog/content/post/4b19708b-caf4-4495-9250-72e43b0176b8/index.md

Test /opt/note/CS/Embedded/Keil/b5bcee3025197a9dd669f03bd3620f1d.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ESP32C3/ESP32C3.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Embedded/ESP32C3/esp32-c3_technical_reference_manual_cn.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/BQ24725A/2025_01_17_163713.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/BQ24725A/2025_01_17_163801.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/BQ24725A/BQ24725A.md

/opt/note/CS/Embedded/BQ24725A/BQ24725A.md

Set Date 2025-01-17 Set Title BQ24725A Set EnumSlugPropertie.Uuidv4 Slug b7113301-dcbb-45a0-bde8-224dd6a3ddc9 Export Predict folder: /home/eric/Downloads/ericblog/content/post/d41bf171-bccf-41bf-99d3-156cd684fdca Export Markdown Path: /home/eric/Downloads/ericblog/content/post/d41bf171-bccf-41bf-99d3-156cd684fdca/index.md Test resource /opt/note/CS/Embedded/BQ24725A/CS/Embedded/BQ24725A/2025_01_17_163713.png Result False Not File Or Not Exist From url CS/Embedded/BQ24725A/2025_01_17_163713.png Test resource /opt/note/CS/Embedded/BQ24725A/2025_01_17_163713.png Result True /opt/note/CS/Embedded/BQ24725A/2025_01_17_163713.png From url CS/Embedded/BQ24725A/2025_01_17_163713.png Resource Match CS/Embedded/BQ24725A/2025_01_17_163713.png Copy To 81d10872-e1cc-44ff-9af5-35fad1455e7f.png Test resource /opt/note/CS/Embedded/BQ24725A/CS/Embedded/BQ24725A/2025_01_17_163801.png Result False Not File Or Not Exist From url CS/Embedded/BQ24725A/2025_01_17_163801.png Test resource /opt/note/CS/Embedded/BQ24725A/2025_01_17_163801.png Result True /opt/note/CS/Embedded/BQ24725A/2025_01_17_163801.png From url CS/Embedded/BQ24725A/2025_01_17_163801.png Resource Match CS/Embedded/BQ24725A/2025_01_17_163801.png Copy To e1e4e4b0-18e7-49bd-9e74-d17c1fc0528d.png

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '德州儀器的 Battery Charge Controller'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '支援用 I2C 設定最大充電電壓及電流,並提供電路保護'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Enhanced safety features for over voltage protection, over current protection, battery, inductor and MOSFET short circuit protection'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'BQ24725A 使用兩個電荷泵分別驅動 n 通道 MOSFET(ACFET、RBFET 和 BATFET),以實現自動系統電源源選擇。'}]}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Charge Voltage 1.024 ~ 19.2 V'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Charge Current 0.128~ 8.128 A'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'AC Adapter Input Voltage 4.5V ~ 24V'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'I2C 寫入格式'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../81d10872-e1cc-44ff-9af5-35fad1455e7f.png'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'I2C 讀取格式'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../e1e4e4b0-18e7-49bd-9e74-d17c1fc0528d.png'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'I2C Command'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '設置不合法的值會被設回預設值'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果長時間沒有由 I2C 寫入充電電壓或充電電流會停止充電'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '0x12 ChargeOption'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Read or Write'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Charger Options Control'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Default 0xF902'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 0 Charge Inhibit'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0: Enable Charge default'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1: Inhibit Charge'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '充電總開關,預設會開,但預設電壓電流為零所以還是不會充'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 14:13 WATCHDOG Timer Adjust'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '00: Disable Watchdog Timer'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '01: Enabled, 44 sec'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '10: Enabled, 88 sec'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '11: Enable Watchdog Timer (175s) default'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '設定連續 SMBus 寫入充電電壓或充電電流命令之間的最大延遲時間。如果在看門狗計時器啟用的情況下,IC 未在看門狗時間期限內接收到寫入充電電壓或充電電流的命令,則充電將會暫停。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '當看門狗計時器超時且充電暫停後,接收到寫入充電電壓或充電電流命令時,充電將會恢復。'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '0x14 ChargeCurrent'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Read or Write'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '7-Bit Charge Current Setting (最大值,最大努力,不保證)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Default 0x0000'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'the BQ24725A provides a charge current range of 128mA to 8.128A, with 64mA step resolution'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 12 Charge Current, DACICHG 6 R/W'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0 = Adds 0mA of charger current.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1 = Adds 4096mA of charger current.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 11 Charge Current, DACICHG 5 R/W'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0 = Adds 0mA of charger current.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1 = Adds 2048mA of charger current.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 10 Charge Current, DACICHG 4 R/W'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0 = Adds 0mA of charger current.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1 = Adds 1024mA of charger current.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 9 Charge Current, DACICHG 3 R/W'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0 = Adds 0mA of charger current.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1 = Adds 512mA of charger current.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 8 Charge Current, DACICHG 2 R/W'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0 = Adds 0mA of charger current.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1 = Adds 256mA of charger current.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 7 Charge Current, DACICHG 1 R/W'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0 = Adds 0mA of charger current.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1 = Adds 128mA of charger current.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 6 Charge Current, DACICHG 0 R/W'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0 = Adds 0mA of charger current.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1 = Adds 64mA of charger current.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '設定值小於 128mA 時會被重設為預設值'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '0x15 ChargeVoltage'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Read or Write'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '11-Bit Charge Voltage Setting(最大值,最大努力,不保證)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Default 0x0000'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'The BQ24725A provides charge voltage range from 1.024V to 19.200V, with 16mV step resolution'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 4 Charge Voltage, DACV 0 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '4'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 5 Charge Voltage, DACV 1 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '5'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 6 Charge Voltage, DACV 2 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '6'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 7 Charge Voltage, DACV 3 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '7'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 8 Charge Voltage, DACV 4 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '8'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 9 Charge Voltage, DACV 5 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '9'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 10 Charge Voltage, DACV 6 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '10'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 11 Charge Voltage, DACV 7 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '11'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 12 Charge Voltage, DACV 8 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '12'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 13 Charge Voltage, DACV 9 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '13'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Bit 14 Charge Voltage, DACV 10 R/W Set 1 to Adds 2'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': '14'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'text', 'raw': 'mV of charger voltage.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '0x3F InputCurrent'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Read or Write'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '6-Bit Input Current Setting'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Default 0x1000'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '0XFE ManufacturerID'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Read Only'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Manufacturer ID 0x0040'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '0xFF DeviceID'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Read Only'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Device ID 0x000B'}]}, {'type': 'blank_line'}] 

Propertie {'uuid': 'f6ac4991-7b67-4f3e-931c-48fa53a6e9ba', 'tags': ['CS/Embedded'], 'date': datetime.date(2025, 1, 17), 'title': 'BQ24725A', 'publish': True, 'slug': 'b7113301-dcbb-45a0-bde8-224dd6a3ddc9'} Export BQ24725A.md to /home/eric/Downloads/ericblog/content/post/d41bf171-bccf-41bf-99d3-156cd684fdca/index.md

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 140832.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 141034 1.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 141034.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 141948.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 142125.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 143558.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 144203.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 144325.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 144426.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 144509.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 144549.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 144610.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145007.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145155.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145306.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145342.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145411.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145635.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145744.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145849.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145920.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 145956.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 151524.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 152202.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 152238.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 152603.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/2024-10-07 152704.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/ArterytekSelectionGuide.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 10, 7), 'tags': ['CS/Embedded/Arterytek'], 'title': ''}

Test /opt/note/CS/Embedded/ArterytekSelectionGuide/ArterytekSelectionGuide1.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 10, 7), 'tags': ['CS/Embedded/Arterytek'], 'title': ''}

Test /opt/note/CS/Embedded/ArterytekOnLineUpdate/20241004_154607.mp4

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekOnLineUpdate/20241004_154651.mp4

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Embedded/ArterytekOnLineUpdate/ArterytekOnLineUpdate.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 10, 4), 'tags': ['CS/Embedded/Arterytek'], 'title': 'Arterytek OnLine Update'}

Test /opt/note/CS/Embedded/Arterytek/AT32F403A.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 10, 7), 'tags': ['CS/Embedded/Arterytek'], 'title': None}

Test /opt/note/CS/Embedded/Arterytek/AT32F415.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 27), 'tags': ['CS/Embedded/Arterytek'], 'publish': False}

Test /opt/note/CS/Embedded/Arterytek/AT32F425.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 16), 'tags': ['CS/Embedded/Arterytek'], 'title': None}

Test /opt/note/CS/Embedded/Arterytek/Arterytek.md

/opt/note/CS/Embedded/Arterytek/Arterytek.md

Set Date 2025-02-20 Set Title Arterytek Set EnumSlugPropertie.Uuidv4 Slug 1162f1fd-a87f-4adc-a0c9-041302577754 Export Predict folder: /home/eric/Downloads/ericblog/content/post/73f61d97-6129-4f39-96e4-c978eefe55c5 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/73f61d97-6129-4f39-96e4-c978eefe55c5/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '函数加载到 Flash 或 SRAM 指定地址'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '将函数加载到 Flash 指定地址:'}]}, {'type': 'block_code', 'raw': 'void Test(void) __attribute__((section(".ARM.__at_0x08001000")));\nvoid Test(void)\n{}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '将函数加载到 SRAM 指定地址'}]}, {'type': 'block_code', 'raw': 'void Test(void) __attribute__((section(".ARM.__at_0x20001000")));\nvoid Test(void)\n{}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '只在 Keil 上有效'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '-'}, {'type': 'text', 'raw': ' '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'arterychip FAQ0050'}], 'attrs': {'url': 'https://www.arterychip.com/download/FAQ/FAQ0050_%E5%B0%86%E5%87%BD%E6%95%B0%E5%8A%A0%E8%BD%BD%E5%88%B0Flash%E6%88%96SRAM%E6%8C%87%E5%AE%9A%E5%9C%B0%E5%9D%80%E7%9A%84%E6%96%B9%E6%B3%95_V2.0.4_CH.pdf'}}]}]}] 

Propertie {'uuid': 'ec59d0a7-4013-4b2e-86dd-1a7e5abfdd31', 'tags': ['CS/Embedded/Arterytek'], 'date': datetime.date(2025, 2, 20), 'title': 'Arterytek', 'publish': True, 'slug': '1162f1fd-a87f-4adc-a0c9-041302577754'} Export Arterytek.md to /home/eric/Downloads/ericblog/content/post/73f61d97-6129-4f39-96e4-c978eefe55c5/index.md

Test /opt/note/CS/Embedded/Arterytek/pwc_voltage_regulate_set.md

/opt/note/CS/Embedded/Arterytek/pwc_voltage_regulate_set.md

Set Date 2024-10-09 Set Title AT32F425 pwc_voltage_regulate_set Set EnumSlugPropertie.Uuidv4 Slug 3f40aa32-733f-4b11-99bd-0f72a57205ef Export Predict folder: /home/eric/Downloads/ericblog/content/post/50a73acc-b327-4815-b2dd-a385761e442c Export Markdown Path: /home/eric/Downloads/ericblog/content/post/50a73acc-b327-4815-b2dd-a385761e442c/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在將 AT32F425 BSP 從 V2.0.0 更新到 V2.1.2 發現 pwc_voltage_regulate_set() 行為有差異'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'AT32F425 BSP 应用指南'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '查閱 '}, {'type': 'codespan', 'raw': 'AT32F425固件库BSP&amp;Pack应用指南'}, {'type': 'text', 'raw': ' 5.14.10 函数 pwc_voltage_regulate_set'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '下表描述了函数 pwc_voltage_regulate_set'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '表 365. 函数 pwc_voltage_regulate_set'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '项目'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '描述'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '函数名'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'pwc_voltage_regulate_set'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '函数原型'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'void pwc_voltage_regulate_set(pwc_regulator_type pwc_regulator)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '功能描述'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '深度睡眠模式下电压调节器状态选择'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '输入参数'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'pwc_regulator:电压调节器状态选择'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '该参数可以选取 pwc_regulator_type 内的任意一个枚举值.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'pwc_regulator'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'pwc_regulator 用于选择电压调节器的状态,其可选参数罗列如下'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'PWC_REGULATOR_ON:'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '深度睡眠模式下电压调节器正常开启'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'PWC_REGULATOR_LOW_POWER:'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '深度睡眠模式下电压调节器处于低功耗模式'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'PWC_REGULATOR_EXTRA_LOW_POWER:'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '深度睡眠模式下电压调节器处于额外低功耗模式'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '示例'}]}, {'type': 'block_code', 'raw': '/* congfig the voltage regulator mode */\npwc_voltage_regulate_set(PWC_REGULATOR_LOW_POWER);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '確定 pwc_regulator 有三個選項'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Implementation'}]}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'V2.0.0'}]}, {'type': 'block_code', 'raw': 'typedef enum{\n  PWC_REGULATOR_ON                       = 0x00, /*!< voltage regulator state on when deepsleep mode */\n  PWC_REGULATOR_LOW_POWER                = 0x01,  /*!< voltage regulator state low power when deepsleep mode */\n  PWC_REGULATOR_EXTRA_LOW_POWER          = 0x02  /*!< voltage regulator state extra low power when deepsleep mode */\n} pwc_regulator_type;\nvoid pwc_voltage_regulate_set(pwc_regulator_type pwc_regulator){\n  switch(pwc_regulator){\n    case 0:\n      PWC->ctrl2_bit.vrexlpen = 0;\n      PWC->ctrl_bit.vrsel = 0;\n      break;\n    case 1:\n      PWC->ctrl2_bit.vrexlpen = 0;\n      PWC->ctrl_bit.vrsel = 1;\n      break;\n    case 2:\n      PWC->ctrl2_bit.vrexlpen = 1;\n      PWC->ctrl_bit.vrsel = 1;\n      break;\n    default: \n      break;\n  }\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'V2.1.2'}]}, {'type': 'block_code', 'raw': 'typedef enum{\n  PWC_REGULATOR_ON                       = 0x00, /*!< voltage regulator state on when deepsleep mode */\n  PWC_REGULATOR_LOW_POWER                = 0x01  /*!< voltage regulator state low power when deepsleep mode */\n} pwc_regulator_type;\n\nvoid pwc_voltage_regulate_set(pwc_regulator_type pwc_regulator){\n  switch(pwc_regulator){\n    case PWC_REGULATOR_ON:\n      PWC->ctrl_bit.vrsel = FALSE;\n      break;\n    case PWC_REGULATOR_LOW_POWER:\n      PWC->ctrl_bit.vrsel = TRUE;\n      break;\n    default:\n      break;\n  }\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '顯然 V2.1.2 更改的了 pwc_voltage_regulate_set 實作方法跟選項但文件並未更改'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Solve'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '廠商回英文郵件已更改'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '原因應為 ES0004_AT32F425_Errata_Sheet_V2.0.7_CH.pdf'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '1.4.4 DEEPSLEEP 内部电压调节器额外低功耗模式无法使用 问题描述: DEEPSLEEP模式下,操作内部电压调节器额外低功耗模式使能位(VREXLPEN),可能会误修 改到内部电压调节器默认值,从而导致芯片运行异常。 解决方法: 无,不操作位于 PWC_CTRL2 寄存器的内部电压调节器额外低功耗模式使能位(VREXLPEN)'}]}]}] 

Propertie {'uuid': '16e5de0b-ec57-4d93-a7bd-18fa049c7502', 'tags': ['CS/Embedded/Arterytek'], 'date': datetime.date(2024, 10, 9), 'title': 'AT32F425 pwc_voltage_regulate_set', 'publish': True, 'slug': '3f40aa32-733f-4b11-99bd-0f72a57205ef'} Export pwc_voltage_regulate_set.md to /home/eric/Downloads/ericblog/content/post/50a73acc-b327-4815-b2dd-a385761e442c/index.md

Test /opt/note/CS/ComputerSystemOrganization/ARMM.md

Fail PropertieParsar publish not exist or true {'uuid': 'f735953e-1809-4304-a897-d45dafa6e356', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2024, 11, 12), 'title': 'ARM-M', 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/AVR.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 21), 'tags': ['CS/ComputerSystemOrganization'], 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/AVRInstructionSetManual.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/AmdMicrocode.md

Fail PropertieParsar publish not exist or true {'uuid': '858a9379-80e0-4019-8bf2-bf9eb6b562c8', 'tags': ['CS/ComputerSystemOrganization/AMD', 'CS/Uefi'], 'date': datetime.date(2025, 3, 10), 'title': 'AMD Microcode', 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/Ampere.md

/opt/note/CS/ComputerSystemOrganization/Ampere.md

Set Date 2024-10-29 Set Title Ampere Set EnumSlugPropertie.Uuidv4 Slug 20cc8933-9ef2-4a21-81ad-2c5dea4c1d7c Export Predict folder: /home/eric/Downloads/ericblog/content/post/db687aad-c797-4a4c-ae9d-891cf0172a66 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/db687aad-c797-4a4c-ae9d-891cf0172a66/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Ampere'}], 'attrs': {'url': 'https://amperecomputing.com/products/processors'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Arm server CPU 設計製造商,核心數在 32 - 196 Core,128 PCIE\xa0lane,已有資料中心使用'}]}] 

Propertie {'uuid': '14234152-a4f1-43c4-ae50-e907b027e4af', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2024, 10, 29), 'title': 'Ampere', 'publish': True, 'slug': '20cc8933-9ef2-4a21-81ad-2c5dea4c1d7c'} Export Ampere.md to /home/eric/Downloads/ericblog/content/post/db687aad-c797-4a4c-ae9d-891cf0172a66/index.md

Test /opt/note/CS/ComputerSystemOrganization/ComputerSystemOrganization.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 28), 'tags': ['CS/ComputerSystemOrganization']}

Test /opt/note/CS/ComputerSystemOrganization/DG0040.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 3, 15), 'tags': ['CS/ComputerSystemOrganization'], 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/DecimalArithmetic.md

Fail PropertieParsar publish not exist or true {'uuid': '9105e08f-fb89-4eff-8791-d50e61aab9ae', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2025, 2, 25), 'title': 'Decimal Arithmetic'}

Test /opt/note/CS/ComputerSystemOrganization/EmbeddedController.md

Fail PropertieParsar publish not exist or true {'uuid': '1109ac58-7475-4ce1-9274-bee4fca32b3e', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2025, 2, 5), 'title': 'Embedded Controller', 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/IoMemorySpace.md

Fail PropertieParsar publish not exist or true {'uuid': 'c09cd1d2-8582-4316-9a26-d325d1e9b31e', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2024, 9, 18), 'title': 'I/O Memory Space', 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/ReverseEngineeringX86ProcessorMicrocode.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/SmBus.md

/opt/note/CS/ComputerSystemOrganization/SmBus.md

Set Date 2025-02-06 Set Title SMBus Set EnumSlugPropertie.Uuidv4 Slug e2f00f67-8154-4b4c-9fad-7976a72593ea Export Predict folder: /home/eric/Downloads/ericblog/content/post/459b6d95-e60c-4439-a064-1f304627066b Export Markdown Path: /home/eric/Downloads/ericblog/content/post/459b6d95-e60c-4439-a064-1f304627066b/index.md Test resource /opt/note/CS/ComputerSystemOrganization/CS/ComputerSystemOrganization/I2C/I2C.md Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/I2C.md Test resource /opt/note/CS/ComputerSystemOrganization/I2C/I2C.md Result True /opt/note/CS/ComputerSystemOrganization/I2C/I2C.md From url CS/ComputerSystemOrganization/I2C/I2C.md Resource Match CS/ComputerSystemOrganization/I2C/I2C.md Copy To 3d4f65cd-f20c-4767-a321-26141f28e349.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'SMBus Specifications'}], 'attrs': {'url': 'https://smbus.org/specs/'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '跟 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'I2C'}], 'attrs': {'url': '../3d4f65cd-f20c-4767-a321-26141f28e349.md'}}, {'type': 'text', 'raw': ' 很像的協議'}]}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'SMBus vs I2C'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'I²C 匯流排可在任何時刻停滯(時鐘靜止),而不影響數據傳輸。主設備或從設備皆可將時鐘線保持在低電位,直到完成數據處理。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'SMBus 匯流排要求時鐘線不低於 10kHz,且不高於 100kHz,並設有 35ms 超時機制,若時鐘線維持低電位超過 35ms,則從設備將自動重置其介面。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '由於 SMBus 要求時鐘不能靜止,因此 SMBus 需要一個最小時鐘速率,而 I²C 則沒有此限制'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '資料持留時間(Data Hold Time)的要求,SMBus 規定 SMBCLK 線路的準位下降後,SMBDAT 上的資料必須持續保留 300nS,但 I2C 卻沒有對此有相同的強制要求。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'I²C 允許從設備 (Slave) 在地址階段回應 NACK,當設備無法接收數據時 (例如正在執行即時任務),可以拒絕通信。此時,主設備 (Master) 可以發送 STOP 信號 或 重啟 START 信號 以重新傳輸;SMBus 要求設備始終應答 (ACK) 自己的地址,以確保能夠偵測到 可移除設備 是否仍然連接至匯流排。'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Address'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0000 1xxx = I2C HS-mode master code; SMBus reserved for future use.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0101 000x = SMBus reserved for ACCESS.bus host.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0110 111x = SMBus reserved for ACCESS.bus default address.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '001 100x = SMBus Alert Response address.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1100 001x = SMBus Device Default address.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '2d59d400-459e-41c8-82a5-fb6000352c9b', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2025, 2, 6), 'title': 'SMBus', 'publish': True, 'slug': 'e2f00f67-8154-4b4c-9fad-7976a72593ea'} Export SmBus.md to /home/eric/Downloads/ericblog/content/post/459b6d95-e60c-4439-a064-1f304627066b/index.md

Test /opt/note/CS/ComputerSystemOrganization/VirtualMachine.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 18), 'tags': ['CS/ComputerSystemOrganization', 'CS/VirtualMachine'], 'title': ''}

Test /opt/note/CS/ComputerSystemOrganization/WhatEveryProgrammerShouldKnowAboutMemory.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/XtAtAndPs2IOPortAddresses.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 2, 7), 'tags': ['CS/ComputerSystemOrganization'], 'title': 'XT AT and PS/2 I/O port addresses'}

Test /opt/note/CS/ComputerSystemOrganization/UCSI/2024_11_29_134443.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/UCSI/2024_11_29_134536.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/UCSI/2024_11_29_135234.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/UCSI/2024_11_29_135513.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/UCSI/UCSI.md

Fail PropertieParsar publish not exist or true {'uuid': '84545458-80cb-4b93-8071-63a19ac32bc6', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2024, 11, 29), 'title': '', 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/Modbus/FunctionCodeCategorie.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/Modbus/GeneralModbusFrame.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/Modbus/Modbus.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 2, 20), 'tags': ['CS/ComputerSystemOrganization'], 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/Modbus/ModbusApplicationProtocolV1_1.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/Modbus/ModbusDataModel.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/LatticeMico8/LatticeMico8.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 21), 'tags': ['CS/ComputerSystemOrganization'], 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/LatticeMico8/LatticeMico8CoreDocumentation.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/Intel/Intel.md

Fail PropertieParsar publish not exist or true {'uuid': '74cb6d11-40c9-48aa-95c4-552cf9717906', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2025, 2, 7), 'title': '', 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/Intel/Intel8237.md

Fail PropertieParsar publish not exist or true {'uuid': '383aa587-e73b-4141-859a-94c569a595a1', 'tags': ['CS/ComputerSystemOrganization/Intel'], 'date': datetime.date(2025, 2, 27), 'title': 'Intel 8237 DMA'}

Test /opt/note/CS/ComputerSystemOrganization/Intel/cp_1.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/Intel/cp_2.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_170600.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_171516.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_172921.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_12_150026.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_17_154719.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2025_02_19_121040.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_171617.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_172237.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_173527.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/I2C/I2C.md

/opt/note/CS/ComputerSystemOrganization/I2C/I2C.md

Set Date 2024-12-02 Set Title I2C.md Set EnumSlugPropertie.Uuidv4 Slug 6f05e003-ab0e-4082-b55c-de703b9eb7a3 Export Predict folder: /home/eric/Downloads/ericblog/content/post/aaf2490d-c73f-4975-b14a-f9b0359ca16f Export Markdown Path: /home/eric/Downloads/ericblog/content/post/aaf2490d-c73f-4975-b14a-f9b0359ca16f/index.md Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2024_12_17_154719.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2024_12_17_154719.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_17_154719.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_17_154719.png From url CS/ComputerSystemOrganization/I2C/2024_12_17_154719.png Resource Match CS/ComputerSystemOrganization/I2C/2024_12_17_154719.png Copy To d94c98fe-e62c-438c-bc60-cf4244bc60ce.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2024_12_06_170600.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2024_12_06_170600.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_170600.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_170600.png From url CS/ComputerSystemOrganization/I2C/2024_12_06_170600.png Resource Match CS/ComputerSystemOrganization/I2C/2024_12_06_170600.png Copy To 5fb11bcf-089d-4239-86c3-5dff5151a0fb.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2025_02_19_121040.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2025_02_19_121040.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2025_02_19_121040.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2025_02_19_121040.png From url CS/ComputerSystemOrganization/I2C/2025_02_19_121040.png Resource Match CS/ComputerSystemOrganization/I2C/2025_02_19_121040.png Copy To b53dce17-d6ff-4741-b018-25f6ca9642ad.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2024_12_06_172921.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2024_12_06_172921.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_172921.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_172921.png From url CS/ComputerSystemOrganization/I2C/2024_12_06_172921.png Resource Match CS/ComputerSystemOrganization/I2C/2024_12_06_172921.png Copy To f77bcc23-a38a-441b-87e7-00da1945cdfd.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2025_03_04_171617.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2025_03_04_171617.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_171617.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_171617.png From url CS/ComputerSystemOrganization/I2C/2025_03_04_171617.png Resource Match CS/ComputerSystemOrganization/I2C/2025_03_04_171617.png Copy To 3d8d5356-31b8-4429-a6ad-a8ec4cbea456.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2024_12_12_150026.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2024_12_12_150026.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_12_150026.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_12_150026.png From url CS/ComputerSystemOrganization/I2C/2024_12_12_150026.png Resource Match CS/ComputerSystemOrganization/I2C/2024_12_12_150026.png Copy To 49eb0848-ffcf-45bd-8eac-864f1057ea36.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2024_12_06_171516.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2024_12_06_171516.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_171516.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2024_12_06_171516.png From url CS/ComputerSystemOrganization/I2C/2024_12_06_171516.png Resource Match CS/ComputerSystemOrganization/I2C/2024_12_06_171516.png Copy To 42e92971-5c03-4aca-a3df-f31e3163e205.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2025_03_04_172237.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2025_03_04_172237.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_172237.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_172237.png From url CS/ComputerSystemOrganization/I2C/2025_03_04_172237.png Resource Match CS/ComputerSystemOrganization/I2C/2025_03_04_172237.png Copy To c3480216-8bb0-41e3-9d67-72ca529f0205.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/2025_03_04_173527.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/2025_03_04_173527.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_173527.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/2025_03_04_173527.png From url CS/ComputerSystemOrganization/I2C/2025_03_04_173527.png Resource Match CS/ComputerSystemOrganization/I2C/2025_03_04_173527.png Copy To de32cf73-deec-4840-97d5-957ab9877993.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/CS/ComputerSystemOrganization/I2C/I2cAck.png Result False Not File Or Not Exist From url CS/ComputerSystemOrganization/I2C/I2cAck.png Test resource /opt/note/CS/ComputerSystemOrganization/I2C/I2cAck.png Result True /opt/note/CS/ComputerSystemOrganization/I2C/I2cAck.png From url CS/ComputerSystemOrganization/I2C/I2cAck.png Resource Match CS/ComputerSystemOrganization/I2C/I2cAck.png Copy To 0afde184-4479-4582-a786-8da5386dffe8.png

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Frequencies'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Standard mode: 100 kilobits per second.'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Fast mode: 400 kilobits per second.'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '時序'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 UM10204 6 Electrical specifications and timing for I/O stages and bus lines,需要時請直接查閱'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../d94c98fe-e62c-438c-bc60-cf4244bc60ce.png'}}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 't'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': 'r'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'SCL, SDA 上升或下降從 70% 到 30% 的時間'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Max Standard 300 ns, Fast 300 ns'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 't'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': 'LOW'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'SCL 維持低電平'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Min Standard 4.7 μs, Fast1.2 μs'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 't'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': 'HIGH'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'SCL 維持高電平'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Min Standard 4.0 μs, Fast0.6 μs'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 't'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': 'HD;DAT'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'SCL 下降到SDA 狀態改變完成的時間'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '沒有最小時間規範'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 't'}, {'type': 'inline_html', 'raw': '<sup>'}, {'type': 'text', 'raw': 'SU;DAT'}, {'type': 'inline_html', 'raw': '</sup>'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'SDA 狀態改變完成到 SCL 重新拉高的時間'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Min Standard 250 ns, Fast 100 ns'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Data Transfer'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../5fb11bcf-089d-4239-86c3-5dff5151a0fb.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '所有位元組均以 MSB 位元先移位的方式傳送'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '除了啟動和停止訊號外,SDA 線僅在時脈為低電平時變化'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '0. 啟動'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '主設備發起的每個 I2C 指令都以START 條件開始,以STOP 條件結束。對於這兩種情況,SCL 必須維持高。 SDA 從高到低的轉換被視為START,從低到高的轉換被視為STOP'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '1. ADDRESS'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在啟動條件之後,主設備可以產生重複的啟動。這相當於正常的啟動,並且通常後面跟著從 I2C 位址'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '每一次啟動後 Master 通常會向 bus 寫 slave 的地址(7 bit or 10 bit)加上 1 bit 的讀寫指示(1 = Read'}, {'type': 'softbreak'}, {'type': 'text', 'raw': ', 0 = Write),Slave 須向 master 寫 ACK'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '2. DATA'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '需要一些時間來處理接收到的位元組或尚未準備好發送下一個位元組的從設備可以將時鐘拉低以向主設備發出信號以指示其應該等待。一旦時鐘被釋放,主設備就可以繼續處理下一個位元組'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '3. 停止'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'SCL 必須維持高,SDA 從低到高的轉換被視為STOP'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'repeated START'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../b53dce17-d6ff-4741-b018-25f6ca9642ad.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果控制器仍然希望在总线上通信,它可以生成一个重复的 START 条件 (Sr) 并寻址另一个目标,而无需首先生成 STOP 条件'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果產生重複的 START (Sr) 而不是 STOP 條件,則匯流排保持忙碌。在這方面,START (S) 和重複的 START (Sr) 條件在功能上是相同的'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果送一个重复的 START 条件,可以在重复的 START 条件之前发送一个非确认,如附圖'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Write'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../f77bcc23-a38a-441b-87e7-00da1945cdfd.png'}}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../3d8d5356-31b8-4429-a6ad-a8ec4cbea456.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Master 對 Slave (Address 0x50) 寫入 0x1133'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../49eb0848-ffcf-45bd-8eac-864f1057ea36.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Master 對 Slave (Address 0x0B) 寫入 0x442100'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'CLK 不需要是穩定一致的,Slave 可以拉住 CLK'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Read'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../42e92971-5c03-4aca-a3df-f31e3163e205.png'}}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../c3480216-8bb0-41e3-9d67-72ca529f0205.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '灰色部份表示 Master to Slave,白色部分為 Slave to Master'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Master 對 Slave (Address 0x50) 讀到 0x3300'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '在 read 資料的最後一個 byte 必須要是 NACK'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Write Then Read'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../de32cf73-deec-4840-97d5-957ab9877993.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Master 對 Slave (Address 0x5B) 寫入 0xAA 後直接讀到 0x00'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Reset Bus'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '對於將 SCL/SDA 腳位與 GPIO 多工使用的主裝置,最簡單的方法是將這些腳位配置為 GPIO 模式,並通過切換 SCL 來操作,直到從裝置釋放 SDA。此時,您應該能夠恢復正常操作'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Reserved addresses'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0000 0000 general call address'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0000 0001 START byte'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0000 001X CBUS address'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0000 010X reserved for different bus format'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0000 011X reserved for future purposes'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '0000 1XXX Hs-mode controller code'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1111 1XX1 device ID'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '1111 0XXX 10-bit target addressing'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '此外,如果確定某個保留地址 (Reserved Address) 不會用於其原始用途,則該保留地址也可以被用作目標設備的地址。但這種做法需要謹慎考量,以避免與標準 I²C 協議的潛在衝突'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'I2C Ack'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../0afde184-4479-4582-a786-8da5386dffe8.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Ack 時,如果是 master 要把 SDA 的控制權轉給 slave 寫 Ack bit 時,可能會發生 SDA 突然短暫被拉高的現象,這是正常的'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Chip'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'TCA9548A'}], 'attrs': {'url': 'https://www.ti.com/lit/ds/symlink/tca9548a.pdf'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Low-Voltage 8-Channel I2C Switch with Reset'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '常見錯誤'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '仲裁丢失(ARLOST)'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '当设备控制 SDA 线输出高电平,但是总线上实际输出低电平时,发生仲裁丢失事件。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '― 主机发送数据:仲裁可以发生在地址传输、数据传输阶段;'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '― 主机接收数据:仲裁可以发生在地址传输、响应ACK阶段;'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '― 从机发送数据:仲裁可以发生在数据传输阶段;'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '― 从机接收数据:仲裁可以发生在响应ACK阶段。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '当在发生仲裁丢失后,硬件自动将 I2C_STS 的 ARLOST 置 1,无论是主机还是从机,都将会立即释放'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'SCL、SDA 总线,并自动回到从机状态。'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '总线错误(BUSERR)'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在数据传输阶段,在 SCL 高周期区间 SDA 线必须保持稳定,当 SCL 信号为低时,SDA 才能改变,否则将会出现总线错误'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Reference'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'UM10204 I2C-bus specification and user manual'}], 'attrs': {'url': 'https://www.nxp.com/docs/en/user-guide/UM10204.pdf'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': '442c2e9b-aba8-484c-98db-45105492e1d8', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2024, 12, 2), 'title': 'I2C.md', 'publish': True, 'slug': '6f05e003-ab0e-4082-b55c-de703b9eb7a3'} Export I2C.md to /home/eric/Downloads/ericblog/content/post/aaf2490d-c73f-4975-b14a-f9b0359ca16f/index.md

Test /opt/note/CS/ComputerSystemOrganization/I2C/I2cAck.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/Fpga/Fpga.md

Fail PropertieParsar publish not exist or true {'uuid': '9d206634-2aa6-46fe-b67d-cb8f15cece1d', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2025, 3, 12), 'title': 'FPGA'}

Test /opt/note/CS/ComputerSystemOrganization/Fpga/c59cc48b191a1517037e83fcb68cbdb1.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/FloatingPoint/2025_02_24_174707.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/FloatingPoint/2025_02_25_173123.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/FloatingPoint/FloatingPoint.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 2, 18), 'tags': ['CS/ComputerSystemOrganization'], 'title': 'Floating Point'}

Test /opt/note/CS/ComputerSystemOrganization/FloatingPoint/General_floating_point_frac.svg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/FloatingPoint/HandlingFloating-PointExceptionsInNumericProgram.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/FloatingPoint/IeeeStandard754ForBinaryFloatingPointArithmetic.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/FloatingPoint/TheImprobabilityofProbabilisticErrorAnalysesForNumericalComputation.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/FloatingPoint/WhatEveryComputerScientistShouldKnowAboutFloatingPointArithmetic.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/ESpi/1OMCGl7.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/ESpi/ESpi.md

Fail PropertieParsar publish not exist or true {'uuid': 'a1290108-4645-4aea-8280-f1eb2954f072', 'tags': ['CS/ComputerSystemOrganization'], 'date': datetime.date(2024, 9, 18), 'title': 'eSpi', 'publish': False}

Test /opt/note/CS/ComputerSystemOrganization/ESpi/RNh6R-z.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/ESpi/XZVP3Cv.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/ESpi/fOh9O9W.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/AMD/AMD.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 8, 16), 'tags': ['CS/ComputerSystemOrganization'], 'title': ''}

Test /opt/note/CS/ComputerSystemOrganization/AMD/AMDFamily1AhModels00h–0FhAndModels10h–1FhACPIPortingGuide.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/AMD/AMDGenericEncapsulatedSoftwareArchitectureInterfaceSpecificationforArch2008.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerSystemOrganization/AMD/PerformanceMonitorCountersForAMDFamily1AhModel00h-0FhProcessors.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerGraphic/ComputerGraphic.md

Fail PropertieParsar publish not exist or true {'tags': ['CS/ComputerGraphic']}

Test /opt/note/CS/ComputerGraphic/RayTracingInAWeekend.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/ComputerGraphic/Shader.md

Fail PropertieParsar publish not exist or true {'uuid': 'aebbea02-e792-4e33-842d-efbe57f02315', 'tags': ['CS/ComputerGraphic'], 'date': datetime.date(2024, 12, 10), 'title': 'Shader', 'publish': False}

Test /opt/note/CS/Compiler/Compiler.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 12, 16), 'tags': ['CS/Compiler'], 'title': ''}

Test /opt/note/CS/Compiler/Pypy.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2025, 1, 13), 'tags': ['CS/Compiler'], 'title': ''}

Test /opt/note/CS/Compiler/StructureAndInterpretationOfComputerPrograms.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 11, 22), 'tags': ['CS/Compiler'], 'title': 'Structure and Interpretation of Computer Programs'}

Test /opt/note/CS/CAndCpp/CAndCpp.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/CAndCpp/CScope.md

/opt/note/CS/CAndCpp/CScope.md

Set Date 2018-04-26 Set Title CScope.md Set EnumSlugPropertie.Uuidv4 Slug 64cbe438-dd26-410c-9595-6a3e3cb660b9 Export Predict folder: /home/eric/Downloads/ericblog/content/post/9e79378c-e931-47cb-9b3d-57f441f2a5b5 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/9e79378c-e931-47cb-9b3d-57f441f2a5b5/index.md

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 1}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'c的變數可見域'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '半夜隔壁房再吵,睡不著寫第一篇教學幹話。其實是自己金魚腦,要筆記。'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '區域變數'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '區域變數(幹在函數第一層),你寫在函數裡的那一種(main也算),只有宣告下面的看的見,如果再”{}”裡,就裡面看的到。'}]}, {'type': 'block_code', 'raw': 'int main(){ \n int x;  \n for(int i;;){  \n  int y;  \n }  \n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'x main內全可見,i,y for內可見。'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '全域變數'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '全域變數,沒extern(就那個讓你在c裡寫其他語言的關鍵字)就你該張檔看的到,有的話include會汙染,'}, {'type': 'linebreak'}, {'type': 'text', 'raw': '通常拿來讓函式回傳不只一個質。'}]}, {'type': 'block_code', 'raw': 'int g;  \nint func(){  \n\t++g; \n\treturn 0;  \n}  \nint main(){ \n\treturn g?func():2; \n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'g全域可見'}, {'type': 'linebreak'}, {'type': 'text', 'raw': 'static,修飾字,加給全域變數時是幹話,加給函式時會在編譯時分配通常在data區,離開函式時值不話消失,'}, {'type': 'linebreak'}, {'type': 'text', 'raw': '故不能遞迴,初始質只會處裡一次,可以直接給在函式裡。'}]}, {'type': 'block_code', 'raw': 'int func(){\n\tstatic int g=0;  \n\treturn ++g; \n}  \nint main(){ \n\tint x=func();  \n\tx=func();  \n\tx=func(); \n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'x為1,2,3'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '全域,static不給初始質是0,區域看你電腦心情。'}, {'type': 'linebreak'}, {'type': 'text', 'raw': '同名變數部分,會先遮蔽全域,至於涵式內同名,你去死。'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先暫時打在fb,等到天荒地老我把我網站做好再搬過去,程式多沒測,通常也沒什麼意義。'}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '現在這文應該已經在我部落格了應該拉'}]}]}] 

Propertie {'date': datetime.date(2018, 4, 26), 'tags': ['CS/CAndCpp'], 'publish': True, 'title': 'CScope.md', 'slug': '64cbe438-dd26-410c-9595-6a3e3cb660b9'} Export CScope.md to /home/eric/Downloads/ericblog/content/post/9e79378c-e931-47cb-9b3d-57f441f2a5b5/index.md

Test /opt/note/CS/CAndCpp/CVsCpp.md

Fail PropertieParsar publish not exist or true {'uuid': 'd1c3ab5c-aff5-46ca-ae6f-c0dbec084bad', 'tags': ['CS/CAndCpp'], 'date': datetime.date(2024, 7, 31), 'title': 'C Vs Cpp', 'publish': False}

Test /opt/note/CS/CAndCpp/CallableObject.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/CAndCpp/CallableObjectFunction.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/CAndCpp/CppMiner礦坑系列.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/CAndCpp/Cpp容器.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/CAndCpp/C語言教學.md

/opt/note/CS/CAndCpp/C語言教學.md

Set Date 2018-08-02 Set Title C語言教學.md Set EnumSlugPropertie.Uuidv4 Slug cbe604ba-9ac2-4502-90fe-0909c1e00f64 Export Predict folder: /home/eric/Downloads/ericblog/content/post/4d4d2484-eed5-42a6-bb37-819763bca493 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/4d4d2484-eed5-42a6-bb37-819763bca493/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '型別'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '就是我們對一串資料的態度'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '先看一串資料'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '請幻想有一堆格子,每隔多只有0跟1兩種可能,存取方式不限'}]}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '整數'}]}, {'type': 'block_code', 'raw': 'unsigned int i;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '連續16 or 32 or 64 bit'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '0x0000 -> 0'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '0x0001 -> 1'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '0xffff -> 65535'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'int i;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我想用最左的bit當正負記號1為負'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '然後就出現兩個0了0x8000 0x0000'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '所以把0xffff 當-1'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '0xfffe -> -2'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '正負轉換為 (~i)+1'}]}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '字元'}]}, {'type': 'block_code', 'raw': 'char c;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '其實就是一個8bit整數'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '一般是ascii'}]}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Array'}]}, {'type': 'block_code', 'raw': 'int arr[10];\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用 '}, {'type': 'codespan', 'raw': '[]'}, {'type': 'text', 'raw': ' 表示一堆連續的資料,如上述範例表示10個連續的整數'}]}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'C String'}]}, {'type': 'block_code', 'raw': 'char s[64];\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用零結尾的連續字元,如果零在第3個位子,那字串就只有3個字元'}]}] 

Propertie {'date': datetime.date(2018, 8, 2), 'tags': ['CS/CAndCpp'], 'publish': True, 'title': 'C語言教學.md', 'slug': 'cbe604ba-9ac2-4502-90fe-0909c1e00f64'} Export C語言教學.md to /home/eric/Downloads/ericblog/content/post/4d4d2484-eed5-42a6-bb37-819763bca493/index.md

Test /opt/note/CS/CAndCpp/Guideline.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 12, 5), 'tags': ['CS/CAndCpp'], 'title': 'Guide Line'}

Test /opt/note/CS/CAndCpp/Macro.md

/opt/note/CS/CAndCpp/Macro.md

Set Date 2024-10-25 Set Title Macro Set EnumSlugPropertie.Uuidv4 Slug e8d86e4f-c871-40f6-8c13-b811e89b2da3 Export Predict folder: /home/eric/Downloads/ericblog/content/post/47b01551-393d-4ecb-af2e-cb94f7d42fca Export Markdown Path: /home/eric/Downloads/ericblog/content/post/47b01551-393d-4ecb-af2e-cb94f7d42fca/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '本節在 MinGW32 GCC-6.3.0-1 環境下編譯'}]}, {'type': 'block_code', 'raw': '#define Min(x, y) ((x) < (y) ? (x) : (y))\n2 * Min(2, 3);          // 2 * ((2) < (3) ? (2) : (3));\nMin(3, Min(4 ,5));      // ((3) < (((4) < (5) ? (4) : (5))) ? (3) : (((4) < (5) ? (4) : (5))));\nMin(3, 4 < 5 ? 4 : 5);  // ((3) < (4 < 5 ? 4 : 5) ? (3) : (4 < 5 ? 4 : 5))\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '函数宏需要在參數跟代換區塊的最外圍加上小括號避免代換結果有非預期的運算子結合'}]}, {'type': 'block_code', 'raw': '#define Min(x, y) ((x) < (y) ? (x) : (y))\nint a = 1;\na = Min(++a, 2); // a = ((++a) < (2) ? (++a) : (2));\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '注意'}, {'type': 'codespan', 'raw': '++a'}, {'type': 'text', 'raw': '被執行兩次,目前沒有優雅地處理方法'}]}, {'type': 'block_code', 'raw': '#define Min(x, y) {(x) < (y) ? (x) : (y);}\n2 * Min(2, 3);     // compile error\nint a = Min(2, 3); // compile error\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '其實大括號也可以區隔運算子,但不能 assign 與再跟其他運算子結合'}]}, {'type': 'block_code', 'raw': '#define Subx(num) void Sub_##num(void) {printf("this is " #num "\\n");}\nSubx(0)   // void Sub_0(void) {printf("this is " "0" "\\n");}\nSubx(123) // void Sub_123(void) {printf("this is " "123" "\\n");}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '巨集利用字串化運算子及語彙基元帶入運算子(Token-pasting operator),生成函數定義'}]}, {'type': 'block_code', 'raw': '#define foo abc\n#define gfoo(x) Foo_##x\n#define gfooo(x) gfoo(x)\ngfoo(foo)();  // Foo_foo();\ngfooo(foo)(); // Foo_abc();\ngfooo( foo)();         // Foo_abc();\ngfooo(  foo       )(); // Foo_abc();\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Token-pasting operator 會終止巨集替代'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Token-pasting operator 會忽略前後空白'}]}, {'type': 'block_code', 'raw': '#define print(s) printf(#s)\nprint(123\\n);      // printf("123\\n");\nprint(abc  \\n);    // printf("abc \\n");\nprint(abc *#@ \\n); // printf("abc *#@ \\n");\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '字串化運算子會字串化空白跟'}, {'type': 'codespan', 'raw': '#'}, {'type': 'text', 'raw': ','}, {'type': 'codespan', 'raw': "&quot;'[]{}();"}, {'type': 'text', 'raw': ' 不能正常字串化'}]}, {'type': 'block_code', 'raw': '#define STRINGIZE(z) #z\n#define ADD_SLASH_X(y) STRINGIZE(\\x ## y)\n#define SYMBOL_STR(x) ADD_SLASH_X(x)\nprintf(EXP_STR(35)); // "\\x35" aka 5\nprintf(EXP_STR(61)); // "\\x61" aka a\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '傳入 Ascii 的 16 進制值回傳該 Ascii 字串'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'C macro : turn a number into a string'}], 'attrs': {'url': 'https://stackoverflow.com/questions/1595544/c-macro-turn-a-number-into-a-string'}}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': '#if DLEVEL == 0\n    #define STACK 0\n#elif DLEVEL == 1\n    #define STACK 100\n#elif DLEVEL > 5\n    display( debugptr );\n#else\n    #define STACK 200\n#endif\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Macro 條件判斷'}]}, {'type': 'block_code', 'raw': '#define MASTER_BOARD\n#if defined (MASTER_BOARD) // true\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '即便 define 沒有定義值,用 '}, {'type': 'codespan', 'raw': 'defined (MASTER_BOARD)'}, {'type': 'text', 'raw': ' 測試時仍然為真'}]}] 

Propertie {'uuid': 'b2c75dcd-685e-40cb-9868-600eb9f35add', 'tags': ['CS/CAndCpp'], 'date': datetime.date(2024, 10, 25), 'title': 'Macro', 'publish': True, 'slug': 'e8d86e4f-c871-40f6-8c13-b811e89b2da3'} Export Macro.md to /home/eric/Downloads/ericblog/content/post/47b01551-393d-4ecb-af2e-cb94f7d42fca/index.md

Test /opt/note/CS/CAndCpp/MitigatingIntegerOverflowInC.md

/opt/note/CS/CAndCpp/MitigatingIntegerOverflowInC.md

Set Date 2024-08-02 Set Title Mitigating Integer Overflow in C Set EnumSlugPropertie.Uuidv4 Slug 732edb20-66b8-4940-955a-db278b98d393 Export Predict folder: /home/eric/Downloads/ericblog/content/post/b9c0d3e0-239f-4f7a-8383-fc17b376bbf0 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/b9c0d3e0-239f-4f7a-8383-fc17b376bbf0/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '現代編譯器 Integer Overflow 行為調查'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Mitigating Integer Overflow in C'}], 'attrs': {'url': 'https://www.youtube.com/watch?v=PLcZkgHCk90'}}, {'type': 'text', 'raw': ' '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Side'}], 'attrs': {'url': 'https://static.sched.com/hosted_files/lssna24/fb/Mitigating%20Integer%20Overflow%20in%20C.pdf'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Overflow'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '整數超過其所能表示的最大值'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '在 C 中,沒有任何語言層級的功能能處理'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Can’t calculate 3 * 128 (384) with 8 bit unsigned storage:'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '1 1000 0000 (9th bit has nowhere to go…) == 128'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '8 value bits (representation range of 0-255)'}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 5}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '現在機器中的處理方法'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'None 由 CPU 決定'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Warp around to the end of range (回繞)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Saturate 不超過最大值或最小值 ex: '}, {'type': 'codespan', 'raw': 'refcount_t'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Tarp 停止執行'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Undefined behavior'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'C Standard For '}, {'type': 'codespan', 'raw': 'unsigned int'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Warp around'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'C Standard For '}, {'type': 'codespan', 'raw': 'signed int'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Undefined behavior'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '這是統一 C 行為最難的地方'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'In practice this used to mean the “none” strategy, which for all sane'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '(2s-complement) systems would result in wrap-around.'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'if (value + offset < value) {\n\t/* Overflow detected, reject bad offset. */ 3 \n\treturn -EINVAL;\n}\ndo_things_knowing_offset_is_safe(value + offset);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '利用回繞做出的 Overflow 檢查'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '會被優化破壞掉'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '-fno-strict-overflow'}, {'type': 'text', 'raw': ' (-fwrapv) changes strategy for signed'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'integer overflow from undefined behavior to wrap-around'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Sanitizer'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Undefined Behavior Sanitizer’s arithmetic overflow checkers to the'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'rescue!'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '-fsanitize=signed-integer-overflow'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '-fsanitize=unsigned-integer-overflow'}, {'type': 'text', 'raw': ' (Clang only)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '(also -fsanitize=pointer-overflow but not discussed today)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Two possible handlers'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'warn, but continue with calculation anyway (default)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'trap, via '}, {'type': 'codespan', 'raw': '-fsanitize-trap=[SANITIZER|GROUP|all]'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '對於 '}, {'type': 'codespan', 'raw': '-fsanitize=signed-integer-overflow'}, {'type': 'text', 'raw': ' 時使用 '}, {'type': 'codespan', 'raw': '-fno-strict-overflow'}, {'type': 'text', 'raw': ' 會確定使用 Warp around 而不是 Undefined Behavior'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '對於 '}, {'type': 'codespan', 'raw': '-fsanitize=unsigned-integer-overflow'}, {'type': 'text', 'raw': ' 我們清楚的知道她會回繞,但這是 Undefined Behavior'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'if (check_add_overflow(value, offset, &result)) {\n /* Overflow detected, reject bad offset. */\n return -EINVAL;\n}\ndo_things_knowing_offset_is_safe(result);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '強制檢查'}]}, {'type': 'block_code', 'raw': 'if (value + offset < value) { ... }\nif (value + offset < 0) { ... }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Linux 還有利用 overflow 的行為'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'unsigned arithmetic has always been expected to wrap-around'}]}, {'type': 'block_code', 'raw': 'typedef unsigned int __attribute__((wraps)) u32_wrap;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'block_code', 'raw': '#define KVM_HVA_ERR_RO_BAD (-2UL) /* Hmm "ULONG_MAX - 1" is getting ugly */\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'As a short-hand for set all the bits or slightly less than max value'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '所以提供跳過檢查的語法'}]}, {'type': 'block_code', 'raw': 'void process_all(u32 num) { while (num--) process(num); }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Sanitizer 會報錯也會 overflow 但是是預期行為,Sanitizer 分析時要跳過'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'u8 us\nu32 ub = 255;\nus = ub + 1;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '超過賦值方向所能容忍的最大值'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '上方範例會通過 Sanitizer 檢查,下面追加兩支旗標偵測'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '-fsanitize=implicit-signed-integer-truncation'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Has the widest coverage due to integer promotion, i.e. from signed'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '-fsanitize=implicit-unsigned-integer-truncation'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '修正狀態'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Linux v6.9'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Introduce CONFIG_UBSAN_SIGNED_WRAP for testing, which works'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'with tip-of-tree Clang, but is still rough around the edges'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Linux v6.10 Aug 2024'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'False positives found via syzkaller are addressed.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'CONFIG_UBSAN_SIGNED_WRAP ready for wider testing.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Let Sanitizer work'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Clang 19.0 fix (signed, unsigned)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'integer overflow sanitizers work with -fno-strict-overflow'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'wraps attribute available'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Gcc In 2024'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Need fix signed, unsigned integer overflow sanitizers'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'CPP 可以重載運算子在 overflow 時拋異常,以上問題在 C 才有'}]}] 

Propertie {'uuid': '6322fb48-e2ed-45cd-98f5-3dd7678d966b', 'tags': ['CS/CAndCpp'], 'date': datetime.date(2024, 8, 2), 'title': 'Mitigating Integer Overflow in C', 'publish': True, 'slug': '732edb20-66b8-4940-955a-db278b98d393'} Export MitigatingIntegerOverflowInC.md to /home/eric/Downloads/ericblog/content/post/b9c0d3e0-239f-4f7a-8383-fc17b376bbf0/index.md

Test /opt/note/CS/CAndCpp/OptimizingSoftwareInCpp.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/CAndCpp/ProducingWrongDataWithoutDoingAnythingObviouslyWrong.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/CAndCpp/ProgramOptimization.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 25), 'tags': ['CS/CAndCpp'], 'title': 'Program Optimization', 'uuid': '4e46906c-c3ec-438e-a995-b3e24a6d7321'}

Test /opt/note/CS/CAndCpp/SafeCpp.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 12, 12), 'tags': ['CS/CAndCpp'], 'title': 'Safe Cpp'}

Test /opt/note/CS/CAndCpp/UndefinedBehavior.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 12), 'tags': ['CS/CAndCpp'], 'publish': False}

Test /opt/note/CS/CAndCpp/VariadicFunction.md

/opt/note/CS/CAndCpp/VariadicFunction.md

Set Date 2024-06-21 Set Title 可變參數的 C 函數 Set EnumSlugPropertie.Uuidv4 Slug 18bbb42d-1746-4a54-b4e0-6f88d8c0e37f Export Predict folder: /home/eric/Downloads/ericblog/content/post/5257d20b-a6ab-4c07-b1ce-c42bdee79197 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/5257d20b-a6ab-4c07-b1ce-c42bdee79197/index.md Test unquote path Test resource /opt/note/CS/CAndCpp/%5Bhttps:/c-faq.com/varargs/invvarargs.19920714.html%5D(https:/c-faq.com/varargs/invvarargs.19920714.html Result False Not File Or Not Exist From url %5Bhttps://c-faq.com/varargs/invvarargs.19920714.html%5D( https://c-faq.com/varargs/invvarargs.19920714.html Test resource /opt/note/%5Bhttps:/c-faq.com/varargs/invvarargs.19920714.html%5D(https:/c-faq.com/varargs/invvarargs.19920714.html Result False Not File Or Not Exist From url %5Bhttps://c-faq.com/varargs/invvarargs.19920714.html%5D( https://c-faq.com/varargs/invvarargs.19920714.html Test resource /opt/note/CS/CAndCpp/[https:/c-faq.com/varargs/invvarargs.19920714.html](https:/c-faq.com/varargs/invvarargs.19920714.html Result False Not File Or Not Exist From url %5Bhttps://c-faq.com/varargs/invvarargs.19920714.html%5D( https://c-faq.com/varargs/invvarargs.19920714.html Test resource /opt/note/[https:/c-faq.com/varargs/invvarargs.19920714.html](https:/c-faq.com/varargs/invvarargs.19920714.html Result False Not File Or Not Exist From url %5Bhttps://c-faq.com/varargs/invvarargs.19920714.html%5D( https://c-faq.com/varargs/invvarargs.19920714.html

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'VariadicFunction'}]}, {'type': 'block_code', 'raw': '#include <stdarg.h>  \nvoid error(const char *fmt, ...)  \n{  \nva_list argp;  \nva_start(argp, fmt);  \nvfprintf(stderr, fmt, argp);  \nva_end(argp);  \n}  \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用 '}, {'type': 'codespan', 'raw': '...'}, {'type': 'text', 'raw': '表達接受可變數量的參數,'}, {'type': 'codespan', 'raw': 'va_list argp'}, {'type': 'text', 'raw': ' 是一個指向第一個可變參數的指針,無法知道長度及型態,'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '沒有可移植'}], 'attrs': {'url': '%5Bhttps://c-faq.com/varargs/invvarargs.19920714.html%5D(https://c-faq.com/varargs/invvarargs.19920714.html'}}, {'type': 'text', 'raw': ') 的方法把可變數量的參數傳給下一個可變數量的參數的函式,有一些相依CPU的'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '方法'}], 'attrs': {'url': 'https://c-faq.com/varargs/invvarargs.19890604.html'}}, {'type': 'text', 'raw': ',有部分可變數量參數的函式也提供接收 '}, {'type': 'codespan', 'raw': 'va_list '}, {'type': 'text', 'raw': ' 的版本如 '}, {'type': 'codespan', 'raw': 'vprintf, vfprintf, vsprintf'}]}, {'type': 'block_code', 'raw': '#define my_printf(format, ...) \\  \ndo { \\  \nfprintf(stderr, "Calling printf with fmt %s\\n", format); \\  \nsome_other_variadac_function(format, ##__VA_ARGS__); \\  \n} while(0)  \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'cpp'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Variadic Macros'}]}, {'type': 'block_code', 'raw': '#define ProxDebugPrintf(...) printf(__VA_ARGS__)\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Variadic Macros'}], 'attrs': {'url': 'https://gcc.gnu.org/onlinedocs/cpp/Variadic-Macros.html'}}, {'type': 'text', 'raw': ' 可以傳遞可變數量的參數'}]}] 

Propertie {'title': '可變參數的 C 函數', 'date': datetime.date(2024, 6, 21), 'tags': ['CS/CAndCpp'], 'publish': True, 'slug': '18bbb42d-1746-4a54-b4e0-6f88d8c0e37f'} Export VariadicFunction.md to /home/eric/Downloads/ericblog/content/post/5257d20b-a6ab-4c07-b1ce-c42bdee79197/index.md

Test /opt/note/CS/CAndCpp/介面.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 25), 'tags': ['CS/CAndCpp'], 'title': '介面', 'uuid': '8fb2adcc-a0e0-4962-ab87-809e50de5990'}

Test /opt/note/CS/CAndCpp/Gdb/Gdb.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 25), 'tags': ['CS/CAndCpp']}

Test /opt/note/CS/CAndCpp/Gdb/GdbCheatSheet.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/CAndCpp/CppVectorInternal/7yqymqp.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/CAndCpp/CppVectorInternal/CppVectorInternal.md

/opt/note/CS/CAndCpp/CppVectorInternal/CppVectorInternal.md

Set Date 2018-03-05 Set Title C++ Vector Internal Set EnumSlugPropertie.Uuidv4 Slug f7c139cc-1f7a-4c00-9aa1-81d00b81c17d Export Predict folder: /home/eric/Downloads/ericblog/content/post/ba7b4217-36f5-48d8-a15b-3fcb865bac40 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/ba7b4217-36f5-48d8-a15b-3fcb865bac40/index.md Test resource /opt/note/CS/CAndCpp/CppVectorInternal/eqwd9un.jpg Result True /opt/note/CS/CAndCpp/CppVectorInternal/eqwd9un.jpg From url eqwd9un.jpg Resource Match CS/CAndCpp/CppVectorInternal/eqwd9un.jpg Copy To bcd67690-5deb-49b5-b2ca-2b1f1c5a87ac.jpg Test resource /opt/note/eqwd9un.jpg Result False Not File Or Not Exist From url ../bcd67690-5deb-49b5-b2ca-2b1f1c5a87ac.jpg Test resource /opt/note/CS/CAndCpp/CppVectorInternal/7yqymqp.jpg Result True /opt/note/CS/CAndCpp/CppVectorInternal/7yqymqp.jpg From url 7yqymqp.jpg Resource Match CS/CAndCpp/CppVectorInternal/7yqymqp.jpg Copy To e34c83af-c4c4-4f63-81c5-1cf9be479fd3.jpg Test resource /opt/note/7yqymqp.jpg Result False Not File Or Not Exist From url ../e34c83af-c4c4-4f63-81c5-1cf9be479fd3.jpg

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '基本概念'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '動態請求的array'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '就是太小重要更大的,然後搬過去'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '看code'}]}, {'type': 'block_code', 'raw': 'tem* resize(unsigned long vsize){\n        tem *pay=new tem[vsize],*ppa,*endp=pay+vsize,*par;\n        for(par=arr,ppa=pay;ppa<=endp&&par<=endc;++ppa,++par){\n            *ppa=*par;\n        }\n        delete [] arr;\n        arr=pay;crr=par;endc=endp;\n        return arr;\n    }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '他有規範要寫的函式'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '有'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '標準'}], 'attrs': {'url': 'https://www.iso.org/standard/38110.html'}}, {'type': 'text', 'raw': 'IEEE死要錢:shit:'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '去看cpp reference'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../bcd67690-5deb-49b5-b2ca-2b1f1c5a87ac.jpg'}}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../e34c83af-c4c4-4f63-81c5-1cf9be479fd3.jpg'}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我有寫,示範:'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '帶大家去幹'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'apache'}], 'attrs': {'url': 'http://svn.apache.org/repos/asf/stdcxx/branches/4.2.x/include/vector'}}, {'type': 'text', 'raw': '的(gun看不懂)'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先換名子'}]}, {'type': 'block_code', 'raw': '    typedef _TypeT                                     value_type;\n    typedef _Allocator                                 allocator_type;\n    typedef _TYPENAME allocator_type::size_type        size_type;\n    typedef _TYPENAME allocator_type::difference_type  difference_type;\n    typedef _TYPENAME allocator_type::reference        reference;\n    typedef _TYPENAME allocator_type::const_reference  const_reference;\n    typedef _TYPENAME allocator_type::pointer          pointer;\n    typedef _TYPENAME allocator_type::const_pointer    const_pointer;\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '還有一些很噁爛的沒過來'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '看結構'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': '    iterator       _C_begin;\n    iterator       _C_end;\n    unsigned int * _C_bufend;\n    \n    struct _C_VectorAlloc: allocator_type {\n\n        _C_VectorAlloc (const allocator_type &__alloc)\n            : allocator_type (__alloc), _C_begin (), _C_end (), _C_bufend ()\n            { /* empty */}\n\n        pointer _C_begin;\n        pointer _C_end;\n        pointer _C_bufend;\n    } _C_alloc;\n\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '直接指過去'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '建構子'}]}, {'type': 'block_code', 'raw': 'template<class _InputIter>\n    vector  (_InputIter __first, _InputIter __last)\n        : allocator_type (), _C_bufend ()\n    {\n      size_type __n = _DISTANCE (__first, __last, size_type);\n      _C_init(__n); \n      _C_copy(__first, __last, _C_begin);\n    }\n\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '假裝分配器已知,直接初始化'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '用前後家長度幹__n(vec.size()),應為那還是沒做除法XDDD'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'insert()'}]}, {'type': 'block_code', 'raw': 'template <class _InputIter>\n    void _C_insert (const iterator &__it,\n                   _InputIter __first, _InputIter __last, void*) {\n        _RWSTD_ASSERT_RANGE (begin (), __it);\n        _RWSTD_ASSERT_RANGE (__first, __last);\n\n        // dispatch to an insert suitable for the category of InputIter\n        _RWSTD_INSERT_RANGE (__it, __first, __last,\n                             _RWSTD_ITERATOR_CATEGORY (_InputIter, __first));\n    }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'push_back()'}]}, {'type': 'block_code', 'raw': ' void _C_push_back (const_reference __x) {\n        _RWSTD_ASSERT (_C_alloc._C_end != _C_alloc._C_bufend);\n        _C_alloc.construct (_C_alloc._C_end, __x);\n        ++_C_alloc._C_end;\n    }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'pop_back()'}]}, {'type': 'block_code', 'raw': ' void pop_back () {\n        _RWSTD_ASSERT (!empty ());\n        _C_alloc.destroy (_C_alloc._C_end - 1);\n        --_C_alloc._C_end;\n    }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'block_code', 'raw': ' bool empty () const {\n        return _C_alloc._C_begin == _C_alloc._C_end;\n    }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'swap()'}]}, {'type': 'block_code', 'raw': 'swap (vector &__other)\n{\n    if (get_allocator () == __other.get_allocator ()) {\n        pointer __tmp             = _C_alloc._C_begin;\n        _C_alloc._C_begin         = __other._C_alloc._C_begin;\n        __other._C_alloc._C_begin = __tmp;\n        __tmp                     = _C_alloc._C_end;\n        _C_alloc._C_end           = __other._C_alloc._C_end;\n        __other._C_alloc._C_end   = __tmp;\n        __tmp                     = _C_alloc._C_bufend;\n        _C_alloc._C_bufend        = __other._C_alloc._C_bufend;\n        __other._C_alloc._C_bufend = __tmp;\n    }\n    else {\n        // not exception-safe\n        _C_unsafe_swap (__other);\n    }\n}\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '會寫出來就是他直接copy,一個一個'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'asign()'}]}, {'type': 'block_code', 'raw': ' void _C_assign (_InputIter __first, _InputIter __last, void*) {\n        _RWSTD_ASSERT_RANGE (__first, __last);\n\n        // dispatch to an assign suitable for the category of InputIter\n        _RWSTD_ASSIGN_RANGE (__first, __last,\n                             _RWSTD_ITERATOR_CATEGORY (_InputIter, __first));\n    }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'resize()'}]}, {'type': 'block_code', 'raw': ' void _C_fill (iterator __first, iterator __last, bool __val) {\n        while (__first != __last) *__first++ = __val;\n    }\n\n    void _C_fill_n (iterator __first, size_type __n, bool __val) {\n        while (__n-- > 0) *__first++ = __val;\n    }\n\n    template <class _Iterator>\n    iterator _C_copy (_Iterator __first, _Iterator __last, iterator __res) {\n        while (__first != __last)\n            *__res++ = *__first++;\n        return __res;\n    }\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c++='}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '其實已經有'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '大大'}], 'attrs': {'url': 'https://hadibrais.wordpress.com/2013/11/10/dissecting-the-c-stl-vector-part-1-introduction/'}}, {'type': 'text', 'raw': '幹過,寫得比我好太多了,不過他是做m$的'}]}, {'type': 'blank_line'}] 

Propertie {'date': datetime.date(2018, 3, 5), 'tags': ['CS/CAndCpp'], 'publish': True, 'title': 'C++ Vector Internal', 'slug': 'f7c139cc-1f7a-4c00-9aa1-81d00b81c17d'} Export CppVectorInternal.md to /home/eric/Downloads/ericblog/content/post/ba7b4217-36f5-48d8-a15b-3fcb865bac40/index.md

Test /opt/note/CS/CAndCpp/CppVectorInternal/eqwd9un.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/3beyuhw.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/BiosRdNote.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2021, 12, 2), 'tags': ['CS/BiosRdNote', 'CS/ComputerSystemOrganization']}

Test /opt/note/CS/BiosRdNote/EDK2.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2021, 12, 6), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/BiosRdNote/EfiAchitecture.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2021, 12, 14), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/BiosRdNote/InstallUefiDevelopEnvironment.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2021, 12, 20), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/BiosRdNote/LcfcCodeStyle.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2021, 12, 16), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/BiosRdNote/MSCC.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2022, 3, 4), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/BiosRdNote/PCI.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2021, 12, 8), 'tags': ['CS/BiosRdNote', 'CS/ComputerSystemOrganization']}

Test /opt/note/CS/BiosRdNote/PcBiosArchitectureFundamental.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2021, 12, 2), 'tags': ['CS/BiosRdNote', 'CS/ComputerSystemOrganization']}

Test /opt/note/CS/BiosRdNote/PciUtility.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2021, 12, 30), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/BiosRdNote/SMI.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2022, 3, 3), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/BiosRdNote/UefiDriver.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2022, 3, 3), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/BiosRdNote/b0ygfpi.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/bm0wyke.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/il7g8rx.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/m5uusv5.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/opejrf0.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/p7spjtu.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/rwmbjum.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/tfcuwpl.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/tpslj2b.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/tywgdfh.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/u1ttlwh.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/vi6j397.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/wtelget.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/xvzeinf.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/ysirsbj.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/zqvm7pa.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/BiosRdNote/專案建構.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2022, 3, 5), 'tags': ['CS/BiosRdNote']}

Test /opt/note/CS/Backend/2019 baseball 網頁專案文件.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2019, 3, 20), 'tags': ['CS/Backend']}

Test /opt/note/CS/Backend/Backend.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Backend/CherrypyCookie.md

/opt/note/CS/Backend/CherrypyCookie.md

Set Date 2024-02-18 Set Title Cherrypy Cookie Set EnumSlugPropertie.Uuidv4 Slug c223acff-80eb-4f06-af40-bcc7c403ef8e Export Predict folder: /home/eric/Downloads/ericblog/content/post/3c765fa5-3a69-4a62-87f6-1ca58300e7d8 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/3c765fa5-3a69-4a62-87f6-1ca58300e7d8/index.md

1
 [{'type': 'heading', 'attrs': {'level': 1}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'cherrypy cookie'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '概述'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '他是用python的simple cookie,所以Morsel屬性該有的多有(屬性要小寫),但她不能刪除只能設程過期'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Cookie 設定'}]}, {'type': 'block_code', 'raw': 'cherrypy.response.cookie[key] = value #設質  \ncherrypy.response.cookie[key]["max-age"] = 60*60*8 #有效期8小時\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'python'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Cookie 讀取'}]}, {'type': 'block_code', 'raw': 'cie = cherrypy.request.cookie.keys() #取得所有cookie  \nuid = cherrypy.request.cookie["uid"].value\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'python'}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '設定跟讀取在不同物件上'}, {'type': 'linebreak'}, {'type': 'text', 'raw': '在cherrypy 18.5 上測試'}]}] 

Propertie {'title': 'Cherrypy Cookie', 'date': datetime.date(2024, 2, 18), 'tags': ['CS/Backend'], 'publish': True, 'slug': 'c223acff-80eb-4f06-af40-bcc7c403ef8e'} Export CherrypyCookie.md to /home/eric/Downloads/ericblog/content/post/3c765fa5-3a69-4a62-87f6-1ca58300e7d8/index.md

Test /opt/note/CS/Backend/CloudStorage.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 5, 28), 'tags': ['CS/Backend'], 'publish': False}

Test /opt/note/CS/Backend/Database.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 10, 4), 'tags': ['CS/Backend']}

Test /opt/note/CS/Backend/Docker.md

/opt/note/CS/Backend/Docker.md

Set Date 2024-02-02 Set Title Docker.md Set EnumSlugPropertie.Uuidv4 Slug 87120a47-6fe3-4d1c-844c-b187fe03d35d Export Predict folder: /home/eric/Downloads/ericblog/content/post/e76075cf-970a-4de8-a926-404e4438d268 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/e76075cf-970a-4de8-a926-404e4438d268/index.md

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Install'}]}, {'type': 'block_code', 'raw': 'apt install -y docker.io\napt install -y docker-compose\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '官網會要你用 docker 自己的 apt 但 debian 12 的官方庫有包'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Build'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '注意補充參數位子不可以移動'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Run'}]}, {'type': 'block_code', 'raw': 'docker run -d --name web --net=host nginx\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '啟動 docker 並放於背景執行'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '建議 network 用 host mode 避免預設的 bridge mode 需要 server 聽在 0.0.0.0'}]}, {'type': 'block_code', 'raw': '-p 8888:8000\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'bridge mode 時做 port 映射(Host:Container)'}]}, {'type': 'block_code', 'raw': 'docker attach web\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '進入 web Container 的 shell'}]}, {'type': 'block_code', 'raw': 'docker exec web ps\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 web Container 的 shell 執行 ps'}]}, {'type': 'block_code', 'raw': 'docker logs web\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'web Container 的 log'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Image'}]}, {'type': 'block_code', 'raw': 'docker image [補充參數] ls \n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出所有 build 好的 image'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Container'}]}, {'type': 'block_code', 'raw': 'docker ps\ndocker container ls\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出執行中的 Container'}]}, {'type': 'block_code', 'raw': 'docker ps -a\ndocker container -a ls\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '列出所有的 Container'}]}, {'type': 'block_code', 'raw': 'docker container prune\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '清理所有停止的 container'}]}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '移除所有沒用到的 Docker 物件'}]}, {'type': 'block_code', 'raw': 'docker system prune -a\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'bash'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Image'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Kasm Workspaces'}], 'attrs': {'url': 'https://www.kasmweb.com/images'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '提供有圖形化介面的 Docker Image(需用 KasmVNC 連線)'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Default Docker Image'}], 'attrs': {'url': 'https://kasmweb.com/docs/latest/guide/custom_images.html'}}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'docker run --rm  -it --shm-size=512m -p 6901:6901 -e VNC_PW=password kasmweb/firefox:dev'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'https://127.0.0.1:6901'}, {'type': 'text', 'raw': ' 連線 Kasm Docker Image 預設需要 '}, {'type': 'codespan', 'raw': 'https'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '在瀏覽器中用 User : kasm_user,Password: password 登入'}]}] 

Propertie {'date': datetime.date(2024, 2, 2), 'tags': ['CS/Backend'], 'publish': True, 'title': 'Docker.md', 'slug': '87120a47-6fe3-4d1c-844c-b187fe03d35d'} Export Docker.md to /home/eric/Downloads/ericblog/content/post/e76075cf-970a-4de8-a926-404e4438d268/index.md

Test /opt/note/CS/Backend/Email.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 29), 'tags': ['CS/Backend']}

Test /opt/note/CS/Backend/GoogleApi.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2020, 4, 17), 'tags': ['CS/Backend'], 'title': 'Google Api'}

Test /opt/note/CS/Backend/Hfile.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 5, 14), 'title': 'HFile', 'uuid': 'be3000d2-2b0c-4386-a4b3-c738f262e8b2'}

Test /opt/note/CS/Backend/Ipv6.md

/opt/note/CS/Backend/Ipv6.md

Set Date 2023-10-20 Set Title Ipv6.md Set EnumSlugPropertie.Uuidv4 Slug ac1f273e-c8f1-478b-b475-9f26624ad962 Export Predict folder: /home/eric/Downloads/ericblog/content/post/db0da15b-c4f7-42b9-bdfe-a49a104be333 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/db0da15b-c4f7-42b9-bdfe-a49a104be333/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Ipv6 in url'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'RFC2732 要求填入ipv6目標的url要用"'}, {'type': 'text', 'raw': '['}, {'type': 'text', 'raw': ']"括起來如'}]}, {'type': 'block_code', 'raw': 'http://[2604:a880:4:1d0::59a:9000]/\n', 'style': 'fenced', 'marker': '```'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '否則Chrome會幫你拿去搜尋'}]}, {'type': 'blank_line'}] 

Propertie {'date': datetime.date(2023, 10, 20), 'tags': ['CS/Backend', 'CS/NetWork'], 'publish': True, 'title': 'Ipv6.md', 'slug': 'ac1f273e-c8f1-478b-b475-9f26624ad962'} Export Ipv6.md to /home/eric/Downloads/ericblog/content/post/db0da15b-c4f7-42b9-bdfe-a49a104be333/index.md

Test /opt/note/CS/Backend/Judge0LocalInstall.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Backend/MessageQueue.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Backend/OpenSsh.md

/opt/note/CS/Backend/OpenSsh.md

Set Date 2024-02-18 Set Title OpenSsh.md Set EnumSlugPropertie.Uuidv4 Slug b9006aeb-dd70-43fb-9c52-c54591c2065f Export Predict folder: /home/eric/Downloads/ericblog/content/post/ee8a7370-ef25-48b5-9969-f2592544da47 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/ee8a7370-ef25-48b5-9969-f2592544da47/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '交換openssh登入金鑰'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '必須先做一把RSA出來(我只用puttygen讀出來的格式試過)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '公鑰放到遠端主機要登入使用者的家目錄 ~/.ssh/authorized_keys'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '~/.ssh/authorized_keys 必須是 600'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '~/.ssh 必須是 700'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '使用者級組別必須與登入名稱一致'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '以上在cent os7 及 6上試過'}]}, {'type': 'blank_line'}, {'type': 'thematic_break'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '據說有指令的做法,要是有大大知道,告訴我一下'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'ref:https://askubuntu.com/questions/306798/trying-to-do-ssh-authentication-with-key-files-server-refused-our-key'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Make key On Linux'}]}, {'type': 'block_code', 'raw': 'ssh-keygen [-t dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa] [-C comment]\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '它會問你要存那跟密碼,如果不要密碼就留白'}]}, {'type': 'block_code', 'raw': 'eval $(ssh-agent -s)\nssh-add ~/.ssh/prikey\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '啟動 ssh-agent 及把key 加入 ssh-agent'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '如果 '}, {'type': 'codespan', 'raw': 'ssh-add -K ~/.ssh/prikey'}, {'type': 'text', 'raw': ' 報錯就下 '}, {'type': 'codespan', 'raw': 'ssh-add ~/.ssh/prikey'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '連線測試'}]}, {'type': 'block_code', 'raw': 'ssh -vT git@github.com\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}] 

Propertie {'date': datetime.date(2024, 2, 18), 'tags': ['CS/Backend'], 'publish': True, 'title': 'OpenSsh.md', 'slug': 'b9006aeb-dd70-43fb-9c52-c54591c2065f'} Export OpenSsh.md to /home/eric/Downloads/ericblog/content/post/ee8a7370-ef25-48b5-9969-f2592544da47/index.md

Test /opt/note/CS/Backend/RateLimit.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Backend/Redis.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 2, 17), 'tags': ['CS/Backend']}

Test /opt/note/CS/Backend/SSL.md

Fail PropertieParsar publish not exist or true {'uuid': '3ef59874-68c7-4cc9-bfe6-ce9d6f0c649e', 'tags': ['CS/Backend'], 'date': datetime.date(2025, 2, 10), 'title': 'SSL'}

Test /opt/note/CS/Backend/Source.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Backend/Unicode.md

Fail PropertieParsar publish not exist or true {'uuid': '02903c6e-70eb-48a8-bdae-8c2c09843dd9', 'tags': ['CS/Backend'], 'date': datetime.date(2025, 3, 5), 'title': 'Unicode', 'publish': False}

Test /opt/note/CS/Backend/VPS.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Backend/WebServer.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Backend/reHfile.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 9, 6), 'tags': ['CS/Backend'], 'title': 'reHfile'}

Test /opt/note/CS/Backend/vCard/6QNN35XBZI.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Backend/vCard/S6DCL4I6LN.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Backend/vCard/vCard.md

/opt/note/CS/Backend/vCard/vCard.md

Set Date 2024-02-17 Set Title vCard.md Set EnumSlugPropertie.Uuidv4 Slug b69f0211-4f4f-436c-9a74-f59846b9d241 Export Predict folder: /home/eric/Downloads/ericblog/content/post/50bab6ab-7469-4d11-93c0-79e62fc19cf8 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/50bab6ab-7469-4d11-93c0-79e62fc19cf8/index.md Test resource /opt/note/CS/Backend/vCard/CS/Backend/vCard/6QNN35XBZI.jpg Result False Not File Or Not Exist From url CS/Backend/vCard/6QNN35XBZI.jpg Test resource /opt/note/CS/Backend/vCard/6QNN35XBZI.jpg Result True /opt/note/CS/Backend/vCard/6QNN35XBZI.jpg From url CS/Backend/vCard/6QNN35XBZI.jpg Resource Match CS/Backend/vCard/6QNN35XBZI.jpg Copy To 99fbe79a-81e6-499d-afa0-493fe2e86831.jpg Test resource /opt/note/CS/Backend/vCard/CS/Backend/vCard/S6DCL4I6LN.jpg Result False Not File Or Not Exist From url CS/Backend/vCard/S6DCL4I6LN.jpg Test resource /opt/note/CS/Backend/vCard/S6DCL4I6LN.jpg Result True /opt/note/CS/Backend/vCard/S6DCL4I6LN.jpg From url CS/Backend/vCard/S6DCL4I6LN.jpg Resource Match CS/Backend/vCard/S6DCL4I6LN.jpg Copy To 448d3086-4d35-46a6-9e02-816168df5f9a.jpg

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'vCard'}], 'attrs': {'url': 'https://en.wikipedia.org/wiki/VCard'}}, {'type': 'text', 'raw': ' 由 MIME 定義的電子名片格式'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '在 H4 聚會時發現某社群朋友的 QrCode 名片在 iphone 上會亂碼,無聊當起 RFC 警察來研究是哪一方不照標準實作'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '經朋友確認,讓我發它的個資上 blog 歡迎去他的'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '個人網站'}], 'attrs': {'url': 'https://www.brlin.me/'}}, {'type': 'text', 'raw': '看看'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../99fbe79a-81e6-499d-afa0-493fe2e86831.jpg'}}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '編碼'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先檢查編碼,檢查林字符的位子是 utf-8 在 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'RFC 6350 3.1'}], 'attrs': {'url': 'https://datatracker.ietf.org/doc/html/rfc6350#section-3.1'}}, {'type': 'text', 'raw': '.  Charset 中確認編碼必須是 utf-8'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../448d3086-4d35-46a6-9e02-816168df5f9a.jpg'}}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'VERSION'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用某網站做了一個一樣資訊的來比較,發現多了一個 VERSION ,在 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'RFC 2426 3.6.9'}], 'attrs': {'url': 'https://datatracker.ietf.org/doc/html/rfc2426#section-3.6.9'}}, {'type': 'text', 'raw': ' VERSION Type Definition 中發現'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Type special notes: The property MUST be present in the vCard object.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'The value MUST be "3.0" if the vCard corresponds to this'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'specification.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Type example:'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'VERSION:3.0'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '顯然標準要求版本號一定要填'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'RFC 6350 6.7.9'}], 'attrs': {'url': 'https://datatracker.ietf.org/doc/html/rfc6350#section-6.7.9'}}, {'type': 'text', 'raw': '.  VERSION,vCARD VERSION 4.0 也要求一定要填,而且需要跟在 vCARD 之後。'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'RFC 6868'}], 'attrs': {'url': 'https://datatracker.ietf.org/doc/html/rfc6868'}}, {'type': 'text', 'raw': ' 中禁用了一些 utf-8 字符,不過本事件沒有用到'}]}] 

Propertie {'date': datetime.date(2024, 2, 17), 'tags': ['CS/Backend', 'CS/NetWork'], 'publish': True, 'title': 'vCard.md', 'slug': 'b69f0211-4f4f-436c-9a74-f59846b9d241'} Export vCard.md to /home/eric/Downloads/ericblog/content/post/50bab6ab-7469-4d11-93c0-79e62fc19cf8/index.md

Test /opt/note/CS/Backend/Sre/Sre.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 4, 26), 'tags': ['CS/Backend'], 'publish': False}

Test /opt/note/CS/Backend/Sre/linux-server-maintenance-checklist.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Backend/Iso8601/2025_03_05_154914.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Backend/Iso8601/Iso8601.md

/opt/note/CS/Backend/Iso8601/Iso8601.md

Set Date 2025-02-28 Set Title iSO 8601 Set EnumSlugPropertie.Uuidv4 Slug 276459d5-8a38-4bc2-bafb-aeb0226b79b8 Export Predict folder: /home/eric/Downloads/ericblog/content/post/66ece27a-5c57-4a90-97a0-d22e66982e67 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/66ece27a-5c57-4a90-97a0-d22e66982e67/index.md Test resource /opt/note/CS/Backend/Iso8601/CS/Backend/Iso8601/2025_03_05_154914.png Result False Not File Or Not Exist From url CS/Backend/Iso8601/2025_03_05_154914.png Test resource /opt/note/CS/Backend/Iso8601/2025_03_05_154914.png Result True /opt/note/CS/Backend/Iso8601/2025_03_05_154914.png From url CS/Backend/Iso8601/2025_03_05_154914.png Resource Match CS/Backend/Iso8601/2025_03_05_154914.png Copy To 40693dc2-abf8-477d-b4ac-4598305a921d.png

1
 [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '標準日期字串'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '有兩套準 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'RFC 3339'}], 'attrs': {'url': 'https://datatracker.ietf.org/doc/html/rfc3339'}}, {'type': 'text', 'raw': ',iSO 8601'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'iSO 8601 一般比 RFC 3339 寬鬆'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '2020-12-09T16:09:53+00:00'}, {'type': 'text', 'raw': ' 是 RFC 3339,iSO 8601 都可以接受的字串'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'ISO 8601'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '有 4 版目前最新是 2019 年版'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '時間單位的位數固定,不足時於左補0'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '日期依照年月日時分秒方式排序,如果需要降低精度要從最小的時間開始移除'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '格式分為只有數字的基礎格式;二為添加分隔符的擴展格式,從而更易讀。標準原文建議應避免在純文字中使用基礎格式。擴展格式使用連字元'}, {'type': 'codespan', 'raw': '-'}, {'type': 'text', 'raw': '來分隔日期,使用冒號'}, {'type': 'codespan', 'raw': ':'}, {'type': 'text', 'raw': '來分隔時間'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'ISO 8601:2004 規定了一個參考日期,即1875年5月20日但在 ISO 8601-1:2019刪除'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '對字元大小寫敏感'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Format'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%Y'}, {'type': 'text', 'raw': ' - Year, 4 digits, 0000 到 9999,但0000至1582的年份僅應在雙方有共識時用於通訊'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%M'}, {'type': 'text', 'raw': ' - Month, 2 digits, 01 到 12'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%D'}, {'type': 'text', 'raw': ' - Day, 2 digits, 01 到 31'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%V'}, {'type': 'text', 'raw': ' - Week Year, 4 digits'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%W'}, {'type': 'text', 'raw': ' - Week, 2 digits, 一年中的第幾周,週數在 01 到 53, 注意 XXXX 年 1 月 1 號不一定是 XXXX-W01'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%w'}, {'type': 'text', 'raw': ' - Week Day, 1 digits, 星期幾 1 到 7'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%O'}, {'type': 'text', 'raw': ' - Ordinal Day ,3 digits, 表示一年中的第幾天,001 到 366'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%h'}, {'type': 'text', 'raw': ' - Hour, 2 digits, (一天中的) 00 到 24,24小時制'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%m'}, {'type': 'text', 'raw': ' - Minute, 2 digits, 00 到 59'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%s'}, {'type': 'text', 'raw': ' - Second, 2 digits, 00 到 60,60 只表示潤秒'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%u'}, {'type': 'text', 'raw': ' - Second-Fraction, n digits, 拿來表達比秒還小的時間單位,位數由通訊雙方定義,表示 '}, {'type': 'codespan', 'raw': '%u *'}, {'type': 'text', 'raw': ' $1 / 10^n$ 秒'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%Z'}, {'type': 'text', 'raw': ' - Zone Hour, 3 digits, 00 到 23, including '}, {'type': 'codespan', 'raw': '+/-'}, {'type': 'text', 'raw': ',First digit must be '}, {'type': 'codespan', 'raw': '+'}, {'type': 'text', 'raw': ' or '}, {'type': 'codespan', 'raw': '-'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'codespan', 'raw': '%z'}, {'type': 'text', 'raw': ' - Zone Minute, 2 digits, 00 到 59'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'T00:00:00 指涉日曆日開始時刻'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'T24:00:00 指涉日曆日結束時刻,ISO 8601-1:2019 刪除儘管在早期版本的標準中已經允許這樣做'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Date'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '%Y-%M-%D'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '%Y%M%D'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Time'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': 'T%h:%m:%s'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'T%h%m%s'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Date + Time'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '%Y-%M-%DT%h:%m:%s'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '%Y-%M-%DT%h:%m:%s.%u'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '%Y%M%DT%h%m%s'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '%Y%M%DT%h%m%s.%u'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Sample'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '20250203T163855+0800'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '2025-02-03T16:38:55+0800'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '20040503T173008+08:00'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '2004-05-03T17:30:08+08:00'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Time Zone'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '%Z:%z'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '%Z%z'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '%Z'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': 'Z'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '時區,可選,接在時間後面,如果時區沒有標示表示本地時間,Z 表示 UTC + 00,'}, {'type': 'codespan', 'raw': '-00'}, {'type': 'text', 'raw': ' 不被允許'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Ordinal Date'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '%Y-%O'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '%Y%O'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '可以將一年內的天的序數用3位數字表示'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如 2004 年 5 月 3 日可以表示為 2004-124 或 2004124'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Week Date'}]}, {'type': 'paragraph', 'children': [{'type': 'codespan', 'raw': '%V-W%W-%w'}, {'type': 'softbreak'}, {'type': 'codespan', 'raw': '%VW%W%w'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '很麻煩,別用'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '2007-W03  2007 年的第 3 周'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '2007-W03-1 2007 年的第 3 周的星期一'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'RFC 3339'}], 'attrs': {'url': 'https://datatracker.ietf.org/doc/html/rfc3339'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '只接受 '}, {'type': 'codespan', 'raw': '%Y-%M-%DT%h:%m:%s%Z:%z'}, {'type': 'text', 'raw': ', '}, {'type': 'codespan', 'raw': '%Y-%M-%D%Z:%z'}, {'type': 'text', 'raw': ', '}, {'type': 'codespan', 'raw': '%h:%m:%s%Z:%z'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '不接受由小時間開始省略的規則'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '不接受 Ordinal Date,Week Date,只有數字的基礎格式'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '對字元大小寫不敏感'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '一定要寫時區,只接受 '}, {'type': 'codespan', 'raw': '%Z:%z'}, {'type': 'text', 'raw': ' 或 Z 作為時區格式,'}, {'type': 'codespan', 'raw': '-00'}, {'type': 'text', 'raw': ' 是允許的'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '4.3 Unknown Local Offset Convention'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'If the time in UTC is known, but the offset to local time is unknown, this can be represented with an offset of "-00:00"'}]}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '5.6. Internet Date/Time Format'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'NOTE: ISO 8601 defines date and time separated by "T". Applications using this syntax may choose, for the sake of readability, to specify a full-date and full-time separated by(say) a space character.'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果應用程式有約定可以不用 T 分隔 Date 和 Time'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '2024 年 4 月,RFC 3339 由 RFC 9557 更新'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'RFC 3339 vs. ISO 8601'}]}, {'type': 'paragraph', 'children': [{'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../40693dc2-abf8-477d-b4ac-4598305a921d.png'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Reference'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'IJMacD/rfc3339-iso8601'}], 'attrs': {'url': 'https://github.com/IJMacD/rfc3339-iso8601'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '列出 iSO 8601 與 RFC 3339 許可的時間格式'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'uuid': 'ba736479-03e9-4af5-978d-e9b4ef06f136', 'tags': ['CS/Backend'], 'date': datetime.date(2025, 2, 28), 'title': 'iSO 8601', 'publish': True, 'slug': '276459d5-8a38-4bc2-bafb-aeb0226b79b8'} Export Iso8601.md to /home/eric/Downloads/ericblog/content/post/66ece27a-5c57-4a90-97a0-d22e66982e67/index.md

Test /opt/note/CS/Backend/Hugo/Hugo.md

/opt/note/CS/Backend/Hugo/Hugo.md

Set Date 2021-01-07 Set Title Hugo 教學 Set EnumSlugPropertie.Uuidv4 Slug 640fba29-72d5-4e73-9138-1cd16712e2e2 Export Predict folder: /home/eric/Downloads/ericblog/content/post/d28acb4a-b0cc-44da-b1a2-0eb2b73ed47b Export Markdown Path: /home/eric/Downloads/ericblog/content/post/d28acb4a-b0cc-44da-b1a2-0eb2b73ed47b/index.md Test resource /opt/note/CS/Backend/Hugo/CS/Backend/Hugo/tbRvjwY.png Result False Not File Or Not Exist From url CS/Backend/Hugo/tbRvjwY.png Test resource /opt/note/CS/Backend/Hugo/tbRvjwY.png Result True /opt/note/CS/Backend/Hugo/tbRvjwY.png From url CS/Backend/Hugo/tbRvjwY.png Resource Match CS/Backend/Hugo/tbRvjwY.png Copy To 8da4e41a-fa9a-4310-bfd2-89bc1b035a2d.png

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'install'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先去'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'copr'}], 'attrs': {'url': 'https://copr.fedorainfracloud.org/coprs/daftaupe/hugo/'}}, {'type': 'text', 'raw': '裝hugo官方的repo'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'yum install hugo\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'shell='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '應該就有hugo可以用了'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '2025 Ubuntu 24 Apt 安裝版本為 0.123.7; Githab last is 0.143.1, 有些 theme 可不能用'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Hugo is available in three editions: standard, extended, and extended/deploy.'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '至少要 extended 才有 Webp 及 SASS'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '使用'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '裝theme'}]}, {'type': 'block_code', 'raw': 'git clone https://github.com/hauke96/hugo-theme-hamburg.git themes/hamburg\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'shell='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '改設定檔'}]}, {'type': 'block_code', 'raw': 'baseURL = "http://example.org/"\nlanguageCode = "en-us"\ntitle = "ericchen"\ntheme = "hamburg"\n\n', 'style': 'fenced', 'marker': '```'}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'hugo new site blog\ncd blog\nhugo new posts/myfirst.md\nhugo                       #生成網頁\nhugo server -D\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'shell='}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'myfirst應該會出現在content下面'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../8da4e41a-fa9a-4310-bfd2-89bc1b035a2d.png'}}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Template lookup order'}], 'attrs': {'url': 'https://gohugo.io/templates/lookup-order/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果要覆蓋 themes 提供的文件,如 '}, {'type': 'codespan', 'raw': 'themes/hugo-theme-next/assets/css/_variables/base.scss'}, {'type': 'text', 'raw': ' 可以用'}, {'type': 'codespan', 'raw': 'assets/css/_variables/base.scss'}, {'type': 'text', 'raw': ' 覆蓋,確定可以覆蓋scss 跟靜態文件,預設 site 根資料夾中沒有 assets 請直接創一個'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'hugo-theme-next'}], 'attrs': {'url': 'https://github.com/hugo-next/hugo-theme-next/tree/main'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '用 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'hugo-theme-next-starter'}], 'attrs': {'url': 'https://github.com/hugo-next/hugo-theme-next-starter'}}, {'type': 'text', 'raw': ' 開始,自己建 site 會 build 不過'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'ref'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'https://coolgood88142.github.io/zh-tw/posts/hugo/'}]}] 

Propertie {'title': 'Hugo 教學', 'date': datetime.date(2021, 1, 7), 'tags': ['CS/Backend'], 'publish': True, 'slug': '640fba29-72d5-4e73-9138-1cd16712e2e2'} Export Hugo.md to /home/eric/Downloads/ericblog/content/post/d28acb4a-b0cc-44da-b1a2-0eb2b73ed47b/index.md

Test /opt/note/CS/Backend/Hugo/tbRvjwY.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Backend/Cloud/Cloud.md

/opt/note/CS/Backend/Cloud/Cloud.md

Set Date 2022-03-16 Set Title Cloud Set EnumSlugPropertie.Uuidv4 Slug e0a2c167-fcd4-447c-ba34-a3a648190b1e Export Predict folder: /home/eric/Downloads/ericblog/content/post/e37c81d0-c6d4-4a81-b755-247b162f6c67 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/e37c81d0-c6d4-4a81-b755-247b162f6c67/index.md Test resource /opt/note/CS/Backend/Cloud/CS/Backend/Cloud/aws-vs-gcp-reliability-is-wildly-different-chart-preview.png Result False Not File Or Not Exist From url CS/Backend/Cloud/aws-vs-gcp-reliability-is-wildly-different-chart-preview.png Test resource /opt/note/CS/Backend/Cloud/aws-vs-gcp-reliability-is-wildly-different-chart-preview.png Result True /opt/note/CS/Backend/Cloud/aws-vs-gcp-reliability-is-wildly-different-chart-preview.png From url CS/Backend/Cloud/aws-vs-gcp-reliability-is-wildly-different-chart-preview.png Resource Match CS/Backend/Cloud/aws-vs-gcp-reliability-is-wildly-different-chart-preview.png Copy To 431e2eb9-0d97-4466-acf2-cf16ca5fd0a4.png

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'AWS vs GCP reliability is wildly different'}], 'attrs': {'url': 'https://freeman.vc/notes/aws-vs-gcp-reliability-is-wildly-different'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '一個很有錢的研究者一直去AWS和GCP開機器(T4 GPU 實例),比較他們機器開啟的成功率跟耗時'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../431e2eb9-0d97-4466-acf2-cf16ca5fd0a4.png'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'AWS(平均15秒)明顯快及穩定GCP(平均45秒)許多,AWS失敗次數也少很多。'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Root cause chronicles: connection collapse'}], 'attrs': {'url': 'https://www.cncf.io/blog/2024/01/12/root-cause-chronicles-connection-collapse/'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '應為 mysql 連線池預設值過小(30)且 移除未使用的連線的時間過長,導致部後端元件無法連至 mysql 導致超時'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'How an empty S3 bucket can make your AWS bill explode'}], 'attrs': {'url': 'https://medium.com/@maciej.pocwierz/how-an-empty-s3-bucket-can-make-your-aws-bill-explode-934a383cb8b1'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '202405 AWS 會對錯誤的 S3 請求收費,但 S3 ID 是全球唯一的且可能洩漏,或因為資料公開存取等原因公開,該文章描述應一個特殊的 S3 ID 被某備份程式作為預設 ID 而導致巨額收費,且 AWS 沒打算解'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'CDN 低機率憑證送錯'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '如果使用 CloudFront 或 ALB 的 CDN 都有低機率憑證送錯,鄙公司已經遇到三次了(202502)'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'OpenAi  Kubernetes 控制面板超載導致連鎖故障'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'OpenAI 在全球運行數百個 Kubernetes 叢集 (cluster)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '2024-12-11 我們部署了一個新的 telemetry 服務,以收集 Kubernetes 控制面板的詳細指標,新服務的配置意外導致每個叢集中的每個節點 (node) 執行高成本的 Kubernetes API 操作,且該成本會隨著叢集規模增長。由於數千個節點同時執行這些操作,Kubernetes API 伺服器 (server) 變得不堪負荷,導致大多數大型叢集的 Kubernetes 控制面板宕機'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '簡而言之,根本原因是一項新的 telemetry 服務配置意外產生了大規模 Kubernetes API 負載,導致控制面板超載,並破壞了基於 DNS 的服務發現機制 (service discovery)'}]}, {'type': 'blank_line'}] 

Propertie {'uuid': 'c32a19ce-b8f1-4438-a064-b56d4e49e4c3', 'date': datetime.date(2022, 3, 16), 'tags': ['CS/Backend'], 'title': 'Cloud', 'publish': True, 'slug': 'e0a2c167-fcd4-447c-ba34-a3a648190b1e'} Export Cloud.md to /home/eric/Downloads/ericblog/content/post/e37c81d0-c6d4-4a81-b755-247b162f6c67/index.md

Test /opt/note/CS/Backend/Cloud/aws-vs-gcp-reliability-is-wildly-different-chart-preview.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Backend/Calendar/Calendar.md

Fail PropertieParsar publish not exist or true {'uuid': '708b85da-2dc9-496f-9f57-7eeb66cbcc68', 'tags': ['CS/Backend'], 'date': datetime.date(2025, 2, 6), 'title': 'Calendar'}

Test /opt/note/CS/Backend/Calendar/EvolutionOfTimekeepingInWindows.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Android/OpenAndroid.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2023, 10, 3), 'tags': ['CS/Android']}

Test /opt/note/CS/Android/Redmi 10C 刷機.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Algorithm/ALP.md

Fail PropertieParsar publish not exist or true {'uuid': '3228af9f-8686-4a44-b981-714677852c6b', 'tags': ['CS/Algorithm'], 'date': datetime.date(2025, 1, 18), 'title': '', 'publish': False}

Test /opt/note/CS/Algorithm/APolynomialTimeAlgorithmForTheChangeMakingProblem.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/Algorithm.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 28), 'tags': ['CS/Algorithm']}

Test /opt/note/CS/Algorithm/BalancedAllocationsWithTheChoiceOfNoise.md

/opt/note/CS/Algorithm/BalancedAllocationsWithTheChoiceOfNoise.md

Set Date 2024-03-18 Set Title Balanced Allocations with the Choice of Noise Set EnumSlugPropertie.Uuidv4 Slug 6d3c6dd6-7774-4f2a-b3f2-b6947bf0d256 Export Predict folder: /home/eric/Downloads/ericblog/content/post/5a4a8267-10a6-4541-8338-7fdcba6a8561 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/5a4a8267-10a6-4541-8338-7fdcba6a8561/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Balanced Allocations with the Choice of Noise'}], 'attrs': {'url': 'https://dl.acm.org/doi/10.1145/3625386'}}]}] 

Propertie {'title': 'Balanced Allocations with the Choice of Noise', 'date': datetime.date(2024, 3, 18), 'tags': ['CS/Algorithm', 'todo'], 'publish': True, 'slug': '6d3c6dd6-7774-4f2a-b3f2-b6947bf0d256'} Export BalancedAllocationsWithTheChoiceOfNoise.md to /home/eric/Downloads/ericblog/content/post/5a4a8267-10a6-4541-8338-7fdcba6a8561/index.md

Test /opt/note/CS/Algorithm/Base64.md

Fail PropertieParsar publish not exist or true {'uuid': '3a826148-5847-4f4e-a0ca-a51ac0a9aac9', 'tags': ['CS/Algorithm'], 'date': datetime.date(2025, 3, 14), 'title': 'Base 64', 'publish': False}

Test /opt/note/CS/Algorithm/BlumBlumShub.md

/opt/note/CS/Algorithm/BlumBlumShub.md

Set Date 2024-12-20 Set Title Blum Blum Shub Set EnumSlugPropertie.Uuidv4 Slug f44a2e02-42d7-433b-bb4b-5515bbcaad2b Export Predict folder: /home/eric/Downloads/ericblog/content/post/a8fdfa64-1697-4f48-ae90-0000686510f7 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/a8fdfa64-1697-4f48-ae90-0000686510f7/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Blum, Blum & Shub'}], 'attrs': {'url': 'http://www.ciphersbyritter.com/NEWS2/TESTSBBS.HTM'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '一種偽隨機數產生器'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '$\\displaystyle x_{n+1}=x_{n}^{2}{\\bmod {M}}$, $M = pq$ ,  p and q are not factors of $x_{0}$'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '第 i 項的疊代公式'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '$\\displaystyle x_{i}=\\left(x_{0}^{2^{i}{\\bmod {\\lambda }}(M)}\\right){\\bmod {M}}$'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'p = 11\nq = 23\nx = 3\nfor i in range(10000):\n    x = (x ** 2) % (p * q)\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'python'}}, {'type': 'block_code', 'raw': '[9, 81, 236, 36, 31, 202, 71, 234, 108, 26, 170, 58, 75, 59, 192, 179, 163, 4, 16, 3]\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'js'}}] 

Propertie {'date': datetime.date(2024, 12, 20), 'tags': ['CS/Algorithm'], 'title': 'Blum Blum Shub', 'publish': True, 'slug': 'f44a2e02-42d7-433b-bb4b-5515bbcaad2b'} Export BlumBlumShub.md to /home/eric/Downloads/ericblog/content/post/a8fdfa64-1697-4f48-ae90-0000686510f7/index.md

Test /opt/note/CS/Algorithm/CPE解題技巧.md

/opt/note/CS/Algorithm/CPE解題技巧.md

Set Date 2019-04-28 Set Title CPE (沒)解題技巧 Set EnumSlugPropertie.Uuidv4 Slug f564b414-4b24-4167-b6fd-2f32e85e5c6b Export Predict folder: /home/eric/Downloads/ericblog/content/post/035b7fda-24df-48b0-aee7-563b03545c49 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/035b7fda-24df-48b0-aee7-563b03545c49/index.md

1
 [{'type': 'heading', 'attrs': {'level': 1}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '~~CPE (沒)解題技巧~~'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '我遇到的困難'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'scanf'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '測資 1234 A'}]}, {'type': 'block_code', 'raw': 'scanf("%d%c",&i,&c);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': "看起來可以     i=1234 c=' '"}]}, {'type': 'block_code', 'raw': 'scanf("%d %c",&i,&c);\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'c'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '空白佔一格'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '沒有debuger'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '先問問同學你們用的debuger是什麼?'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '只有 printf()'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '所以我多用 '}, {'type': 'text', 'raw': '#'}, {'type': 'text', 'raw': 'ifdef debug'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '英文'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我多先讀一遍,把全部不會跟不確定意思的字抄下來查,然後再讀一遍'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '他不能複製貼上'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '記憶體溢取很有機會整台當'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'c style string VS c++stream'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我選 c style 功能全部自己幹'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '(沒有)練習方式'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '其實我每次多裸考,考了很多次還只有三題,很爛'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 6}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '我大部分多是寫專案'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '最常用的方法是status tree'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '是真的建樹,反正我十分鐘就可以了。'}]}, {'type': 'heading', 'attrs': {'level': 6}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '這跟CPE有什麼關西呢?'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '對語言的理解(不論是語意還是執行期行為)'}]}, {'type': 'blank_line'}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!info] 唯有code夠肥時你才看得出c語法裡頭的玄妙處'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '對你寫得出算法的理解'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': '['}, {'type': 'text', 'raw': '!info] 有很多算法很妙,但即便我看過N次,我還是寫不出來比如大部分的DP,K-Means'}]}, {'type': 'heading', 'attrs': {'level': 6}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '考程式競賽code命名法會爛掉嗎?'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '我本來就很爛沒差'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '反正你程式寫大就會rewrite'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '結構命名會被迫變好,其實這是經驗跟習慣'}]}]}] 

Propertie {'date': datetime.date(2019, 4, 28), 'title': 'CPE (沒)解題技巧', 'tags': ['CS'], 'publish': True, 'uuid': 'a17063d1-31d1-4b3e-a576-464836c47182', 'slug': 'f564b414-4b24-4167-b6fd-2f32e85e5c6b'} Export CPE解題技巧.md to /home/eric/Downloads/ericblog/content/post/035b7fda-24df-48b0-aee7-563b03545c49/index.md

Test /opt/note/CS/Algorithm/ChangeMakingProblem.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Algorithm/ConcurrencyControlInGroupwareSystems.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/FisherYatesShuffle.md

/opt/note/CS/Algorithm/FisherYatesShuffle.md

Set Date 2019-05-18 Set Title Fisher Yates Shuffle Set EnumSlugPropertie.Uuidv4 Slug 521f8f79-c519-4dbd-93f8-12d693afec1a Export Predict folder: /home/eric/Downloads/ericblog/content/post/128e93e6-4112-45a9-961b-7be906af39d3 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/128e93e6-4112-45a9-961b-7be906af39d3/index.md

1
 [{'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Ronald Fisher 和 Frank Yates 發明的均勻洗牌算法'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '算法'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '索引從0開始往len(卡排列表)遞增,索引i與隨機選擇的卡牌交換'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '隨機選擇的卡牌如果用rand() mod (len(卡排列表) - i)取隨機的卡牌,會不均勻'}]}] 

Propertie {'date': datetime.date(2019, 5, 18), 'title': 'Fisher Yates Shuffle', 'tags': ['CS/Algorithm'], 'publish': True, 'slug': '521f8f79-c519-4dbd-93f8-12d693afec1a'} Export FisherYatesShuffle.md to /home/eric/Downloads/ericblog/content/post/128e93e6-4112-45a9-961b-7be906af39d3/index.md

Test /opt/note/CS/Algorithm/FiveFiveLetterWord.md

/opt/note/CS/Algorithm/FiveFiveLetterWord.md

Set Date 2019-05-03 Set Title Five Five Letter Word Set EnumSlugPropertie.Uuidv4 Slug d6593419-9866-46cc-b149-2bba068decf0 Export Predict folder: /home/eric/Downloads/ericblog/content/post/05000f5a-ea8a-4324-9a08-5d6767b8459e Export Markdown Path: /home/eric/Downloads/ericblog/content/post/05000f5a-ea8a-4324-9a08-5d6767b8459e/index.md Test resource /opt/note/CS/Algorithm/CS/Algorithm/LetterToInteger.png Result False Not File Or Not Exist From url CS/Algorithm/LetterToInteger.png Test resource /opt/note/CS/Algorithm/LetterToInteger.png Result True /opt/note/CS/Algorithm/LetterToInteger.png From url CS/Algorithm/LetterToInteger.png Resource Match CS/Algorithm/LetterToInteger.png Copy To 07659b06-0f47-42d2-811d-80ad06eafbc5.png

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'word list'}], 'attrs': {'url': 'https://github.com/dwyl/english-words'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '大量有意義單字的txt文件'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '問題'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'five five-letter words with twenty-five unique letters'}], 'attrs': {'url': 'https://www.youtube.com/watch?v=_-AfhLQfb6w'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '找出五個由五個字符組成的單字,其中25的字符皆不相同的組合'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': '參考解答'}], 'attrs': {'url': 'https://github.com/phire/five_clique/blob/main/cliques.csv'}}, {'type': 'text', 'raw': '共813組'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '解法'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '改成逐字比較,如果前面的字已經有相'}, {'type': 'softbreak'}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Maximum disjoint set'}], 'attrs': {'url': 'https://en.wikipedia.org/wiki/Maximum_disjoint_set'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '簡單出暴的使用五個迴圈搜尋'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '複雜度為n'}, {'type': 'codespan', 'raw': '**'}, {'type': 'text', 'raw': '5,n = 22950,我跑了一個多小時沒結果'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'PS.官方說要1個月'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '900 秒用 pyhon'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '15 秒用 Jave'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '同字母的話,直接放棄後面比較'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Someone improved my code by 40,832,277,770%'}], 'attrs': {'url': 'https://www.youtube.com/watch?v=c33AZBnRHks'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '後續影片'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '利用英文字符出現頻率不同的特性,字頻較低的先搜尋'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '線程'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '將字母組成集合,只先搜最少用的集合'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Algorithm X'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '五個字符用字母順序用字母順序轉成整數'}, {'type': 'softbreak'}, {'type': 'image', 'children': [{'type': 'text', 'raw': ''}], 'attrs': {'url': '../07659b06-0f47-42d2-811d-80ad06eafbc5.png'}}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': "'etaoinshrdlcumwfgypbvkjxqz' 該字典的統計結果"}]}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '原始問題'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'The Jotto Problem 技術報告上,未使用電腦'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '可以用 Dancing Link 論文解決問題'}]}, {'type': 'blank_line'}] 

Propertie {'date': datetime.date(2019, 5, 3), 'title': 'Five Five Letter Word', 'tags': ['CS/Algorithm'], 'publish': True, 'slug': 'd6593419-9866-46cc-b149-2bba068decf0'} Export FiveFiveLetterWord.md to /home/eric/Downloads/ericblog/content/post/05000f5a-ea8a-4324-9a08-5d6767b8459e/index.md

Test /opt/note/CS/Algorithm/Graph.md

Fail PropertieParsar publish not exist or true {'uuid': 'c7018e85-0079-4903-9cb2-87799bdd5207', 'tags': ['CS/Algorithm'], 'date': datetime.date(2025, 3, 7), 'title': 'Graph'}

Test /opt/note/CS/Algorithm/LeetCode.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 28), 'tags': ['CS/Algorithm']}

Test /opt/note/CS/Algorithm/LetterToInteger.png

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/MaximumFlowAndMinimumCostFlowInAlmostLinearTime.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/MazeGenerationAlgorithm.md

Fail PropertieParsar publish not exist or true {'title': 'Maze Generation Algorithm', 'date': datetime.date(2024, 3, 23), 'tags': ['CS/Algorithm'], 'publish': False}

Test /opt/note/CS/Algorithm/PseudorandomNumberGenerator.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 12, 20), 'tags': ['CS/Algorithm'], 'title': 'Pseudorandom Number Generator'}

Test /opt/note/CS/Algorithm/RSA.md

/opt/note/CS/Algorithm/RSA.md

Set Date 2019-01-04 Set Title RSA Set EnumSlugPropertie.Uuidv4 Slug fcbbc64a-7fdc-402d-897a-914ce41c6dfb Export Predict folder: /home/eric/Downloads/ericblog/content/post/60e271a4-0078-4aab-b5c7-2402643b5b06 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/60e271a4-0078-4aab-b5c7-2402643b5b06/index.md

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '一個簡單的 RSA 實作'}]}, {'type': 'block_code', 'raw': 'import random\n#des p,q\np=113\nq=117\n\nprim=[64513,64553,64577,65419,66301,65651,67139,67141,65537,66293,65687,66919,66347,65447]\n\ndef gcd(p,q):\n  if (q == 0):\n    return ( p, 1, 0 )\n  d,b,a = gcd(q, p % q);\n  b=b-(p//q)*a\n  return (d, a, b)\n  \n\ndef inverse(k,n):\n    d,a,b= gcd(k, n);\n    if (d > 1):\n      print("Inverse does not exist."); return 0;\n    if (a > 0): \n      return a;\n    return n + a;\n\ndef keygen(p,q): \n  n=p*q\n  oln=(q-1)*(p-1)\n  e=prim[random.randint(0,len(prim))]\n  d=inverse(e,oln)\n  return (e,n),(d,n)\n\ndef decode(s):\n  #english only\n  ls=[]\n  if len(s)%2==1:\n    s+=\' \'\n  for i in range(0,len(s),2):\n    ls.append(ord(s[i])*0xff+ord(s[i+1]))\n  return ls\n\ndef encode(ls):\n  s=""\n  for i in ls:\n    s=s+chr(i//0xff)+chr(i%0xff)\n  return s\n\ndef syc(m,e,n):\n  c=[]\n  for i in range(0,len(m)):\n    c.append(pow(m[i],e,n))\n    \n  return c\n\ndef usyc(c,d,n):\n  m=[]\n  for i in range(0,len(c)):\n    m.append(pow(c[i],d,n))\n    \n  return m\n\nprint(keygen(p,q))\n\nc=syc(decode("nttucsie"),7237327049, 26217266885746803617)\nm=usyc(c,4962162255038558585, 26217266885746803617)\nprint(encode(m))\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'python'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'keygen() 用以產生金鑰對,返回temp(公,私),pq因大於10^10'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'sys() 給定encod過的串列及私鑰,返回加密串列,建議以base64'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '服用'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'usys() 給定加密串列及公鑰,返回encod過的串列。'}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '原則上接受無上限長的公私鑰'}]}] 

Propertie {'date': datetime.date(2019, 1, 4), 'tags': ['CS/Algorithm'], 'publish': True, 'title': 'RSA', 'slug': 'fcbbc64a-7fdc-402d-897a-914ce41c6dfb'} Export RSA.md to /home/eric/Downloads/ericblog/content/post/60e271a4-0078-4aab-b5c7-2402643b5b06/index.md

Test /opt/note/CS/Algorithm/Synchronization.md

/opt/note/CS/Algorithm/Synchronization.md

Set Date 2024-06-28 Set Title Synchronization.md Set EnumSlugPropertie.Uuidv4 Slug d8314da5-0f2b-496b-b0ba-c0683b3db265 Export Predict folder: /home/eric/Downloads/ericblog/content/post/491578e2-1f3f-4aa7-a004-ec3a316bad51 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/491578e2-1f3f-4aa7-a004-ec3a316bad51/index.md Test resource /opt/note/CS/Algorithm/CS/Algorithm/ConcurrencyControlInGroupwareSystems.pdf Result False Not File Or Not Exist From url CS/Algorithm/ConcurrencyControlInGroupwareSystems.pdf Test resource /opt/note/CS/Algorithm/ConcurrencyControlInGroupwareSystems.pdf Result True /opt/note/CS/Algorithm/ConcurrencyControlInGroupwareSystems.pdf From url CS/Algorithm/ConcurrencyControlInGroupwareSystems.pdf Resource Match CS/Algorithm/ConcurrencyControlInGroupwareSystems.pdf Copy To 5c093bfa-7b90-4f6a-8763-69f0906e99e9.pdf

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '簡介'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '檔案同步'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '目前有三種方法'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Lock'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '將要修改的檔案鎖定,不允許其他程式修改,如果鎖沒有失效時間,可能導致崩潰程式永遠占用鎖'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Operational Transformation'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '紀錄每個程式修改的每一行,並將記錄傳播給其他程式,基於 Operational Transformation'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': ' Operational Transformation Frequently Asked Questions and Answers'}], 'attrs': {'url': 'https://web.archive.org/web/20200623064915/https://www3.ntu.edu.sg/home/czsun/projects/otfaq/'}}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Concurrency Control in Groupware Systems'}], 'attrs': {'url': '../5c093bfa-7b90-4f6a-8763-69f0906e99e9.pdf'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '原始論文'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Three-way Merge'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'block_quote', 'children': [{'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '客戶端將文件的內容傳送到伺服器。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '伺服器執行三向合併以提取使用者的變更並將其與其他使用者的變更合併。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '伺服器將文件的新副本傳送給客戶端'}]}]}], 'tight': True, 'bullet': '.', 'attrs': {'depth': 1, 'ordered': True}}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '半雙工系統,Subversion 使用此方法'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'Differential Synchronization'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Differential Synchronization'}]}, {'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Differential Synchronization'}], 'attrs': {'url': 'https://neil.fraser.name/writing/sync/'}}, {'type': 'softbreak'}, {'type': 'text', 'raw': '差異同步是一種對稱演算法,它透過不斷循環的背景比對(diff)與修補(patch)操作來保持兩個文件的同步'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': '資料流概覽'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '理想化的差異同步資料流如下所示,假設兩個文件(分別稱為「客戶端文本」與「伺服器端文本」)位於同一台電腦上,沒有網路延遲的影響'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '比較 Client Text 與 Common Shadow,計算 Diff'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '這會回傳 Client Text 相較於 Common Shadow 的變更(編輯操作列表)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '將 Client Text 的內容複製到 Common Shadow'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '必須確保此複製的內容與'}, {'type': 'strong', 'children': [{'type': 'text', 'raw': '第一步'}]}, {'type': 'text', 'raw': '時的 Client Text 完全相同,在多執行緒環境中,應先對文本進行快照(snapshot)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '應用 Diff 變更至 Server Text(最佳努力方式)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '嘗試將編輯操作套用到 Server Text,允許部分變更可能因為內容變動而失敗'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '更新 Server Text'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '伺服器端文本應用變更,這個步驟必須'}, {'type': 'strong', 'children': [{'type': 'text', 'raw': '原子性'}]}, {'type': 'text', 'raw': '(atomic),但不一定要阻塞(blocking),可多次嘗試,直到 Server Text 穩定。'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '對 Server Text 進行對稱的反向同步'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '現在,Common Shadow 代表的是前一次同步時的 Client Text,透過相同的流程,比對 Server Text 與 Common Shadow,獲取 Server Text 的變更,並將這些變更應用回 Client Text。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Shadow 是指之前存下的狀態'}]}]}], 'tight': True, 'bullet': '.', 'attrs': {'depth': 0, 'ordered': True}}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Dual Shadow'}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '前面介紹的差異同步(Differential Synchronization)方法是最基本的形式,但它無法直接應用於客戶端-伺服器(Client-Server)架構,因為同步過程中使用的共同影子(Common Shadow)會成為共享狀態,這在分佈式系統中難以保持一致性'}]}, {'type': 'blank_line'}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '每個節點都維護一份獨立的影子副本:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '客戶端文本(Client Text) 需要對應一個伺服器影子(Server Shadow)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '伺服器文本(Server Text 需要對應一個客戶端影子(Client Shadow)'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '同步流程仍然是雙向進行的:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '第一階段:將 Client Text 的變更應用到 Server Text,並同步 Client Shadow'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '第二階段:將 Server Text 的變更應用到 Client Text,並同步 Server Shadow'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '影子副本與對應的文本必須在每個同步週期後完全一致:'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '(v1 Diff v2) Patch v1 == v2(即,應用變更後,影子副本應該與最新的文本完全匹配)'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': '影子副本的變更應該是精確匹配的(fragile patches),而文本的變更應該是模糊匹配的(fuzzy patches)'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 1, 'ordered': False}}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}] 

Propertie {'date': datetime.date(2024, 6, 28), 'tags': ['CS/Algorithm'], 'publish': True, 'title': 'Synchronization.md', 'slug': 'd8314da5-0f2b-496b-b0ba-c0683b3db265'} Export Synchronization.md to /home/eric/Downloads/ericblog/content/post/491578e2-1f3f-4aa7-a004-ec3a316bad51/index.md

Test /opt/note/CS/Algorithm/算法未讀懂.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Algorithm/Tree/DataStructuresAndAlgorithmsForDisjointSetUnionProblems.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/Tree/FastCanonicalHuffmanDecoder.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/Tree/FastPrefixCodeProcessing.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/Tree/MinimumSpanningTree.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 8), 'tags': ['CS/Algorithm'], 'title': 'Minimum Spanning Tree'}

Test /opt/note/CS/Algorithm/Tree/Tree.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 28), 'tags': ['CS/Algorithm']}

Test /opt/note/CS/Algorithm/Source/ACourseInCombinatorialOptimization.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/Source/Algorithms-JeffE.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/Source/MattersComputational.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/Source/Source.md

Fail PropertieParsar — Not at first of file {}

Test /opt/note/CS/Algorithm/NumericalAnalysis/BitWizardry.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 1, 28), 'tags': ['CS/Algorithm']}

Test /opt/note/CS/Algorithm/NumericalAnalysis/HowToUseTheCordicToPerformMathematicalFunctionsOnStm32Mcus.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/NumericalAnalysis/NumericalAnalysis.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 7, 28), 'tags': ['CS/Algorithm'], 'title': 'Numerical Analysis'}

Test /opt/note/CS/Algorithm/Hash/Hash.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 6, 21), 'tags': ['CS/Algorithm'], 'publish': False}

Test /opt/note/CS/Algorithm/Hash/OptimalBoundsForOpenAddressingWithoutReordering.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Algorithm/Hash/StoringASparseTableWithO1WorstCaseAccess.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/Ai.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 3, 23), 'tags': ['CS/Ai'], 'publish': False}

Test /opt/note/CS/Ai/AttentionIsAllYouNeed.md

Fail PropertieParsar publish not exist or true {'uuid': 'a9e953f9-4c8f-488e-8f5e-acd382cff424', 'tags': ['CS/Ai'], 'date': datetime.date(2024, 1, 17), 'title': 'Attention Is All You Need', 'publish': False}

Test /opt/note/CS/Ai/AttentionIsAllYouNeed.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/BBDB.md

/opt/note/CS/Ai/BBDB.md

Set Date 2020-03-24 Set Title BBDB.md Set EnumSlugPropertie.Uuidv4 Slug 17ddd4d0-4bd1-4775-b4d7-e1642b16d409 Export Predict folder: /home/eric/Downloads/ericblog/content/post/7d8956c9-89fb-43a1-a77c-b6a21a57e669 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/7d8956c9-89fb-43a1-a77c-b6a21a57e669/index.md

1
 [{'type': 'paragraph', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Baseball Database (BBDB)'}], 'attrs': {'url': 'https://sites.google.com/site/eccv2018bbdb/'}}, {'type': 'text', 'raw': ' 4TB 的已標記棒球比賽影像庫,以手動(7000)或半自動(loU<0.5)標註'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'RNN -> CNN(ResNet)'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'TSN'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Temporal Segment Networks: Towards Good'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Practices for Deep Action Recognition'}]}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'IDT+FV'}]}, {'type': 'block_quote', 'children': [{'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Action Recognition with Improved Trajectories'}]}]}, {'type': 'blank_line'}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '每三貞240pxpx為輸入'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '分析原點直方圖輸入梯度(HOG)光流(HOF)和運動邊界直方圖(MBH)'}, {'type': 'softbreak'}, {'type': 'text', 'raw': '16-layer VGG model'}]}] 

Propertie {'date': datetime.date(2020, 3, 24), 'tags': ['CS/Ai'], 'publish': True, 'uuid': '4501c0dc-da36-496c-bd35-e04a23988254', 'title': 'BBDB.md', 'slug': '17ddd4d0-4bd1-4775-b4d7-e1642b16d409'} Export BBDB.md to /home/eric/Downloads/ericblog/content/post/7d8956c9-89fb-43a1-a77c-b6a21a57e669/index.md

Test /opt/note/CS/Ai/LlamCpp.md

/opt/note/CS/Ai/LlamCpp.md

Set Date 2025-01-02 Set Title Llam Cpp Set EnumSlugPropertie.Uuidv4 Slug 84d8fc11-772b-4fdf-9d5a-40bfb2739cfc Export Predict folder: /home/eric/Downloads/ericblog/content/post/459d8fa0-4da7-4f71-91d1-9a543e05385b Export Markdown Path: /home/eric/Downloads/ericblog/content/post/459d8fa0-4da7-4f71-91d1-9a543e05385b/index.md

1
 [{'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Build'}]}, {'type': 'block_code', 'raw': 'curl -L https://huggingface.co/bartowski/Llama-3.2-1B-Instruct-GGUF/resolve/main/Llama-3.2-1B-Instruct-IQ3_M.gguf?download=true -o Llam-3.2-1B.gguf\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '下載 Llam 模型'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 4}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'AMD CPU'}]}, {'type': 'block_code', 'raw': 'git clone --depth 1 https://github.com/ggerganov/llama.cpp.git\ncmake -Bbuild\ncd build/\nmake -j8\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'block_code', 'raw': 'bin/llama-cli -m Llam-3.2-1B.gguf -p "Hi" -n 100\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Vulkan AMD'}]}, {'type': 'block_code', 'raw': 'sudo apt install vulkan-tools libvulkan-dev glslc\n\nbin/llama-cli -m Llam-3.2-1B.gguf -p "Hi" -n 100 -ngl 1000\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'blank_line'}] 

Propertie {'uuid': '5b897ca2-ed03-461b-9cff-9c407f362805', 'tags': ['CS/Ai'], 'date': datetime.date(2025, 1, 2), 'title': 'Llam Cpp', 'publish': True, 'slug': '84d8fc11-772b-4fdf-9d5a-40bfb2739cfc'} Export LlamCpp.md to /home/eric/Downloads/ericblog/content/post/459d8fa0-4da7-4f71-91d1-9a543e05385b/index.md

Test /opt/note/CS/Ai/RAG.md

Fail PropertieParsar publish not exist or true {'uuid': '1223375b-4974-4de9-ae0a-e140584b3450', 'tags': ['CS/Ai'], 'date': datetime.date(2025, 1, 17), 'title': '', 'publish': False}

Test /opt/note/CS/Ai/SubtleAdversarialImageManipulationsInfluenceBothHumanAndMachinePerception.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/TheAanteriorTemporalCortexIsAPrimarySemantic.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/Whisper.md

/opt/note/CS/Ai/Whisper.md

Set Date 2025-01-16 Set Title whisper Set EnumSlugPropertie.Uuidv4 Slug 24cd0989-9093-498b-b12c-d9b566d11ad4 Export Predict folder: /home/eric/Downloads/ericblog/content/post/084555d8-121b-4df1-9ebe-ca0f70c9d378 Export Markdown Path: /home/eric/Downloads/ericblog/content/post/084555d8-121b-4df1-9ebe-ca0f70c9d378/index.md

1
 [{'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'Open Ai Whisper'}], 'attrs': {'url': 'https://github.com/openai/whisper'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Whisper 是一種通用語音辨識模型。它是在大量不同音訊資料集上進行訓練的,也是一個多任務模型,可以執行多語言語音識別、語音翻譯和語言識別。'}, {'type': 'softbreak'}, {'type': 'text', 'raw': 'Open Ai 用 Pytorch 實做的語音轉文字的實做,多語言效果良好'}]}, {'type': 'block_code', 'raw': 'pip install -U openai-whisper\npipx install openai-whisper\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'block_code', 'raw': 'whisper --model tiny --language Chinese  ~/Downloads/untitled.mp3\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'model 有以下值可選'}]}, {'type': 'list', 'children': [{'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'tiny\t        Parameter 39M'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'base\tParameter 74M'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'small\tParameter 244M'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'medium\tParameter 769M'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'large\tParameter 1550M'}]}]}, {'type': 'list_item', 'children': [{'type': 'block_text', 'children': [{'type': 'text', 'raw': 'turbo\tParameter 809M'}]}]}], 'tight': True, 'bullet': '-', 'attrs': {'depth': 0, 'ordered': False}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '另有 tiny.en base.en small.en medium.en 只支援英文的模型'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'codespan', 'raw': 'Whisper.cpp'}], 'attrs': {'url': 'https://github.com/ggerganov/whisper.cpp'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '看著 '}, {'type': 'link', 'children': [{'type': 'text', 'raw': 'Open Ai Whisper'}], 'attrs': {'url': 'https://github.com/openai/whisper'}}, {'type': 'text', 'raw': ' 寫的 Cpp 實做,快的多'}]}, {'type': 'blank_line'}, {'type': 'block_code', 'raw': 'cmake --build build -j 8 --config Release\ncd build\nmake\n./bin/whisper-cli -m /home/eric/whisper.cpp/models/ggml-tiny.bin -f  ../samples/jfk.wav\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '只有 CPU 運算'}]}, {'type': 'block_code', 'raw': 'apt install libavformat-dev libavformat-dev libavutil-dev libavformat-extra libavtp0\n', 'style': 'fenced', 'marker': '```', 'attrs': {'info': 'sh'}}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': '加入 ffmpeg'}]}, {'type': 'heading', 'attrs': {'level': 3}, 'style': 'axt', 'children': [{'type': 'text', 'raw': 'Vulkan'}]}, {'type': 'blank_line'}, {'type': 'heading', 'attrs': {'level': 2}, 'style': 'axt', 'children': [{'type': 'link', 'children': [{'type': 'text', 'raw': 'faster-whisper'}], 'attrs': {'url': 'https://github.com/SYSTRAN/faster-whisper'}}]}, {'type': 'paragraph', 'children': [{'type': 'text', 'raw': 'Cpp 實做,降低浮點數精度'}]}, {'type': 'blank_line'}] 

Propertie {'uuid': '72a1518a-e723-436e-ac48-872d693b9c7c', 'tags': ['CS/Ai'], 'date': datetime.date(2025, 1, 16), 'title': 'whisper', 'publish': True, 'slug': '24cd0989-9093-498b-b12c-d9b566d11ad4'} Export Whisper.md to /home/eric/Downloads/ericblog/content/post/084555d8-121b-4df1-9ebe-ca0f70c9d378/index.md

Test /opt/note/CS/Ai/GenerativeAi/AutoRegressiveNextTokenPredictorsAreUniversalLearners.pdf

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/GenerativeAi/GenerativeAi.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/GenerativeAi/GenerativeAi.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 12, 13), 'tags': ['CS/Ai'], 'publish': False}

Test /opt/note/CS/Ai/GenerativeAi/Top50GenerativeAiWeb.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/ArmTechSymposia2024/ArmTechSymposia2024.md

Fail PropertieParsar publish not exist or true {'date': datetime.date(2024, 10, 29), 'tags': ['CS/Ai'], 'title': 'Arm Tech Symposia 2024'}

Test /opt/note/CS/Ai/ArmTechSymposia2024/BsspO1F.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/ArmTechSymposia2024/COcY4RA.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/ArmTechSymposia2024/NNNU_KC.jpg

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/ArmTechSymposia2024/ericmd5file.json

Fail PropertieParsar Not suffix with .md {}

Test /opt/note/CS/Ai/ArmTechSymposia2024/r_l3eG5.jpg

Fail PropertieParsar Not suffix with .md {}