├── .gitbook
└── assets
│ ├── 0.jpeg
│ ├── cc.png
│ ├── illu.png
│ ├── im2col.png
│ ├── image.png
│ ├── images.jpeg
│ ├── img_1787.jpg
│ ├── screenshot-2019-09-11-at-11.55.23-am.png
│ ├── screenshot-2019-09-13-at-12.28.53-pm.png
│ ├── screenshot-2019-09-13-at-9.14.59-pm.png
│ ├── screenshot-2019-09-14-at-10.31.17-am.png
│ ├── screenshot-2019-09-14-at-10.31.27-am (1).png
│ ├── screenshot-2019-09-14-at-10.31.27-am.png
│ ├── screenshot-2019-09-14-at-10.58.53-am (1).png
│ ├── screenshot-2019-09-14-at-10.58.53-am.png
│ └── screenshot-2019-09-14-at-10.59.46-am.png
├── GPU-de-diao-du.md
├── README.md
├── SUMMARY.md
├── _book
├── chapter-1
│ ├── dai-ma-shi-zen-me-dao-gpu-de.html
│ └── she-bei-zhu-ce-gpu-register.html
├── gitbook
│ ├── fonts
│ │ └── fontawesome
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ ├── fontawesome-webfont.woff
│ │ │ └── fontawesome-webfont.woff2
│ ├── gitbook-plugin-anchor-navigation-ex
│ │ ├── lib
│ │ │ ├── config.js
│ │ │ ├── log.js
│ │ │ └── plugin.js
│ │ └── style
│ │ │ └── plugin.css
│ ├── gitbook-plugin-anchors
│ │ └── plugin.css
│ ├── gitbook-plugin-comment
│ │ ├── plugin.css
│ │ └── plugin.js
│ ├── gitbook-plugin-expandable-chapters-small
│ │ ├── expandable-chapters-small.css
│ │ └── expandable-chapters-small.js
│ ├── gitbook-plugin-fontsettings
│ │ ├── fontsettings.js
│ │ └── website.css
│ ├── gitbook-plugin-github-buttons
│ │ ├── plugin.js
│ │ └── plugin.js.map
│ ├── gitbook-plugin-github
│ │ └── plugin.js
│ ├── gitbook-plugin-highlight
│ │ ├── ebook.css
│ │ └── website.css
│ ├── gitbook-plugin-livereload
│ │ └── plugin.js
│ ├── gitbook-plugin-lunr
│ │ ├── lunr.min.js
│ │ └── search-lunr.js
│ ├── gitbook-plugin-search
│ │ ├── lunr.min.js
│ │ ├── search-engine.js
│ │ ├── search.css
│ │ └── search.js
│ ├── gitbook-plugin-sharing-plus
│ │ └── buttons.js
│ ├── gitbook-plugin-splitter
│ │ ├── splitter.css
│ │ └── splitter.js
│ ├── gitbook.js
│ ├── images
│ │ ├── apple-touch-icon-precomposed-152.png
│ │ └── favicon.ico
│ ├── style.css
│ └── theme.js
├── index.html
└── search_index.json
├── book.json
├── cong-GPU-de-jiao-du-kan-job-wan-cheng.md
├── cong-JM-dao-JS-dao-JD.md
├── draft
├── fan-wai-de-fan-wai
├── dan-yi-tu-xiang-juan-ji-yi-ge-mobile-gpu-de-suan-fa.md
├── shuo-le-ban-tian-jie-guo-zen-yang.md
├── wo-men-gan-le-ge-sha-ying-she-thread-dao-shu-chu-tu-xiang-de-channel-shang.md
└── xian-you-de-fang-fa-na-li-bu-dai-jin-le-yong-de-zhe-ni-nong-ge-xin-de.md
├── fan-wai
├── dai-ma-da-quan-di-er-ban-steve-mcconnel.md
├── effective-c++-di-san-ban.md
└── wei-shen-me-hui-you-fan-wai.md
├── mali-gpu-driver
├── cong-gpu-de-jiao-du-kan-job-wan-cheng.md
├── cong-jm-dao-js-dao-jd.md
├── dai-ma-shi-zen-me-dao-gpu-de.md
├── dao-sheng-yi-yi-sheng-er-er-sheng-san-san-sheng-wan-wu.md
├── e-tong-mu-gpu-ren-wu-de-chou-xiang.md
├── gpu-de-diao-du.md
├── ji-cun-qi-de-xiang.md
├── ni-nan-guo-de-tai-jia-zhuang-ni-ping-shen-me-nian-nian-bu-wang.md
├── she-bei-zhu-ce-gpu-register.md
├── wo-fa-shi-wo-yao-ti-bao-ni-de-jm.md
├── wo-yao-ni-san-geng-si-shui-gan-liu-ni-dao-wu-geng.md
├── yi-bei-jing-ming-tian-yi-bei-jing-guo-wang.md
├── zhang-xu.md
└── zhou-liu-bu-he-jiu-ren-sheng-lu-bai-zou.md
├── node_modules
├── boolbase
│ ├── README.md
│ ├── index.js
│ └── package.json
├── cheerio
│ ├── History.md
│ ├── Readme.md
│ ├── index.js
│ ├── lib
│ │ ├── api
│ │ │ ├── attributes.js
│ │ │ ├── css.js
│ │ │ ├── forms.js
│ │ │ ├── manipulation.js
│ │ │ └── traversing.js
│ │ ├── cheerio.js
│ │ ├── parse.js
│ │ ├── static.js
│ │ └── utils.js
│ └── package.json
├── colors
│ ├── LICENSE
│ ├── README.md
│ ├── examples
│ │ ├── normal-usage.js
│ │ └── safe-string.js
│ ├── index.d.ts
│ ├── lib
│ │ ├── colors.js
│ │ ├── custom
│ │ │ ├── trap.js
│ │ │ └── zalgo.js
│ │ ├── extendStringPrototype.js
│ │ ├── index.js
│ │ ├── maps
│ │ │ ├── america.js
│ │ │ ├── rainbow.js
│ │ │ ├── random.js
│ │ │ └── zebra.js
│ │ ├── styles.js
│ │ └── system
│ │ │ ├── has-flag.js
│ │ │ └── supports-colors.js
│ ├── package.json
│ ├── safe.d.ts
│ ├── safe.js
│ └── themes
│ │ └── generic-logging.js
├── css-select
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ ├── lib
│ │ ├── attributes.js
│ │ ├── compile.js
│ │ ├── general.js
│ │ ├── procedure.json
│ │ ├── pseudos.js
│ │ └── sort.js
│ └── package.json
├── css-what
│ ├── LICENSE
│ ├── index.js
│ ├── package.json
│ └── readme.md
├── dom-serializer
│ ├── LICENSE
│ ├── index.js
│ ├── node_modules
│ │ └── domelementtype
│ │ │ ├── LICENSE
│ │ │ ├── index.js
│ │ │ ├── package.json
│ │ │ └── readme.md
│ └── package.json
├── domelementtype
│ ├── LICENSE
│ ├── index.js
│ ├── package.json
│ └── readme.md
├── domhandler
│ ├── .travis.yml
│ ├── LICENSE
│ ├── index.js
│ ├── lib
│ │ ├── element.js
│ │ └── node.js
│ ├── package.json
│ ├── readme.md
│ └── test
│ │ ├── cases
│ │ ├── 01-basic.json
│ │ ├── 02-single_tag_1.json
│ │ ├── 03-single_tag_2.json
│ │ ├── 04-unescaped_in_script.json
│ │ ├── 05-tags_in_comment.json
│ │ ├── 06-comment_in_script.json
│ │ ├── 07-unescaped_in_style.json
│ │ ├── 08-extra_spaces_in_tag.json
│ │ ├── 09-unquoted_attrib.json
│ │ ├── 10-singular_attribute.json
│ │ ├── 11-text_outside_tags.json
│ │ ├── 12-text_only.json
│ │ ├── 13-comment_in_text.json
│ │ ├── 14-comment_in_text_in_script.json
│ │ ├── 15-non-verbose.json
│ │ ├── 16-normalize_whitespace.json
│ │ ├── 17-xml_namespace.json
│ │ ├── 18-enforce_empty_tags.json
│ │ ├── 19-ignore_empty_tags.json
│ │ ├── 20-template_script_tags.json
│ │ ├── 21-conditional_comments.json
│ │ ├── 22-lowercase_tags.json
│ │ ├── 23-dom-lvl1.json
│ │ ├── 24-with-start-indices.json
│ │ └── 25-with-end-indices.json
│ │ └── tests.js
├── domutils
│ ├── .npmignore
│ ├── LICENSE
│ ├── index.js
│ ├── lib
│ │ ├── helpers.js
│ │ ├── legacy.js
│ │ ├── manipulation.js
│ │ ├── querying.js
│ │ ├── stringify.js
│ │ └── traversal.js
│ ├── package.json
│ ├── readme.md
│ └── test
│ │ ├── fixture.js
│ │ ├── tests
│ │ ├── helpers.js
│ │ ├── legacy.js
│ │ └── traversal.js
│ │ └── utils.js
├── entities
│ ├── .travis.yml
│ ├── LICENSE
│ ├── index.js
│ ├── lib
│ │ ├── decode.js
│ │ ├── decode_codepoint.js
│ │ └── encode.js
│ ├── maps
│ │ ├── decode.json
│ │ ├── entities.json
│ │ ├── legacy.json
│ │ └── xml.json
│ ├── package.json
│ ├── readme.md
│ └── test
│ │ ├── mocha.opts
│ │ └── test.js
├── gitbook-plugin-anchor-navigation-ex
│ ├── .idea
│ │ ├── gitbook-plugin-anchor-navigation-ex.iml
│ │ ├── jsLibraryMappings.xml
│ │ ├── markdown-navigator.xml
│ │ ├── markdown-navigator
│ │ │ └── profiles_settings.xml
│ │ ├── misc.xml
│ │ ├── modules.xml
│ │ ├── vcs.xml
│ │ ├── watcherTasks.xml
│ │ └── workspace.xml
│ ├── LICENSE
│ ├── README.md
│ ├── assets
│ │ ├── lib
│ │ │ ├── config.js
│ │ │ ├── log.js
│ │ │ └── plugin.js
│ │ └── style
│ │ │ └── plugin.css
│ ├── doc
│ │ ├── README_EN.md
│ │ ├── config-en.md
│ │ ├── config.md
│ │ ├── effectScreenshot.md
│ │ ├── images
│ │ │ ├── night默认参数效果.png
│ │ │ ├── pageTop展示.png
│ │ │ ├── printlog.png
│ │ │ ├── sepia默认参数效果.png
│ │ │ ├── toc标题icon展示.jpg
│ │ │ ├── toc标题icon展示2.jpg
│ │ │ ├── white默认参数效果.png
│ │ │ ├── 层级关联显示.png
│ │ │ ├── 标题重新与默认主题层级相关联.jpg
│ │ │ └── 锚点效果和top展示.jpg
│ │ ├── updateRecord-en.md
│ │ └── updateRecord.md
│ ├── index.js
│ └── package.json
├── gitbook-plugin-anchors
│ ├── .npmignore
│ ├── LICENSE
│ ├── README.md
│ ├── assets
│ │ └── plugin.css
│ ├── index.js
│ └── package.json
├── gitbook-plugin-comment
│ ├── .eslintrc
│ ├── .npmignore
│ ├── LICENSE
│ ├── README.md
│ ├── assets
│ │ ├── plugin.css
│ │ └── plugin.js
│ ├── index.js
│ └── package.json
├── gitbook-plugin-disqus
│ ├── .npmignore
│ ├── LICENSE
│ ├── README.md
│ ├── book
│ │ ├── plugin.css
│ │ └── plugin.js
│ ├── index.js
│ └── package.json
├── gitbook-plugin-donate
│ ├── .npmignore
│ ├── README.md
│ ├── assets
│ │ ├── plugin.css
│ │ └── plugin.js
│ ├── index.js
│ └── package.json
├── gitbook-plugin-expandable-chapters-small
│ ├── .npmignore
│ ├── .project
│ ├── LICENSE
│ ├── README.md
│ ├── book
│ │ ├── expandable-chapters-small.css
│ │ └── expandable-chapters-small.js
│ ├── index.js
│ └── package.json
├── gitbook-plugin-favicon
│ ├── .npmignore
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── _layouts
│ │ ├── favicon.js
│ │ └── website
│ │ │ └── page.html
│ ├── index.js
│ └── package.json
├── gitbook-plugin-github-buttons
│ ├── LICENSE
│ ├── README.md
│ ├── _layouts
│ │ └── website
│ │ │ └── page.html
│ ├── index.js
│ ├── lib
│ │ ├── plugin.js
│ │ └── plugin.js.map
│ ├── package.json
│ └── src
│ │ └── plugin.js
├── gitbook-plugin-github
│ ├── LICENSE
│ ├── README.md
│ ├── assets
│ │ └── plugin.js
│ ├── index.js
│ └── package.json
├── gitbook-plugin-sharing-plus
│ ├── .eslintrc
│ ├── .npmignore
│ ├── LICENSE
│ ├── README.md
│ ├── assets
│ │ └── buttons.js
│ ├── index.js
│ └── package.json
├── gitbook-plugin-splitter
│ ├── .npmignore
│ ├── LICENSE.txt
│ ├── README.md
│ ├── book
│ │ ├── splitter.css
│ │ └── splitter.js
│ ├── gitbook-splitter-demo.gif
│ ├── index.js
│ └── package.json
├── github-slugid
│ ├── .npmignore
│ ├── .travis.yml
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ ├── package.json
│ └── test
│ │ └── test.js
├── htmlparser2
│ ├── LICENSE
│ ├── README.md
│ ├── lib
│ │ ├── CollectingHandler.js
│ │ ├── FeedHandler.js
│ │ ├── Parser.js
│ │ ├── ProxyHandler.js
│ │ ├── Stream.js
│ │ ├── Tokenizer.js
│ │ ├── WritableStream.js
│ │ └── index.js
│ └── package.json
├── inherits
│ ├── LICENSE
│ ├── README.md
│ ├── inherits.js
│ ├── inherits_browser.js
│ └── package.json
├── lodash.assignin
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.bind
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.defaults
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.filter
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.flatten
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.foreach
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.map
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.merge
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.pick
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.reduce
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.reject
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash.some
│ ├── LICENSE
│ ├── README.md
│ ├── index.js
│ └── package.json
├── lodash
│ ├── LICENSE
│ ├── README.md
│ ├── array.js
│ ├── array
│ │ ├── chunk.js
│ │ ├── compact.js
│ │ ├── difference.js
│ │ ├── drop.js
│ │ ├── dropRight.js
│ │ ├── dropRightWhile.js
│ │ ├── dropWhile.js
│ │ ├── fill.js
│ │ ├── findIndex.js
│ │ ├── findLastIndex.js
│ │ ├── first.js
│ │ ├── flatten.js
│ │ ├── flattenDeep.js
│ │ ├── head.js
│ │ ├── indexOf.js
│ │ ├── initial.js
│ │ ├── intersection.js
│ │ ├── last.js
│ │ ├── lastIndexOf.js
│ │ ├── object.js
│ │ ├── pull.js
│ │ ├── pullAt.js
│ │ ├── remove.js
│ │ ├── rest.js
│ │ ├── slice.js
│ │ ├── sortedIndex.js
│ │ ├── sortedLastIndex.js
│ │ ├── tail.js
│ │ ├── take.js
│ │ ├── takeRight.js
│ │ ├── takeRightWhile.js
│ │ ├── takeWhile.js
│ │ ├── union.js
│ │ ├── uniq.js
│ │ ├── unique.js
│ │ ├── unzip.js
│ │ ├── unzipWith.js
│ │ ├── without.js
│ │ ├── xor.js
│ │ ├── zip.js
│ │ ├── zipObject.js
│ │ └── zipWith.js
│ ├── chain.js
│ ├── chain
│ │ ├── chain.js
│ │ ├── commit.js
│ │ ├── concat.js
│ │ ├── lodash.js
│ │ ├── plant.js
│ │ ├── reverse.js
│ │ ├── run.js
│ │ ├── tap.js
│ │ ├── thru.js
│ │ ├── toJSON.js
│ │ ├── toString.js
│ │ ├── value.js
│ │ ├── valueOf.js
│ │ ├── wrapperChain.js
│ │ ├── wrapperCommit.js
│ │ ├── wrapperConcat.js
│ │ ├── wrapperPlant.js
│ │ ├── wrapperReverse.js
│ │ ├── wrapperToString.js
│ │ └── wrapperValue.js
│ ├── collection.js
│ ├── collection
│ │ ├── all.js
│ │ ├── any.js
│ │ ├── at.js
│ │ ├── collect.js
│ │ ├── contains.js
│ │ ├── countBy.js
│ │ ├── detect.js
│ │ ├── each.js
│ │ ├── eachRight.js
│ │ ├── every.js
│ │ ├── filter.js
│ │ ├── find.js
│ │ ├── findLast.js
│ │ ├── findWhere.js
│ │ ├── foldl.js
│ │ ├── foldr.js
│ │ ├── forEach.js
│ │ ├── forEachRight.js
│ │ ├── groupBy.js
│ │ ├── include.js
│ │ ├── includes.js
│ │ ├── indexBy.js
│ │ ├── inject.js
│ │ ├── invoke.js
│ │ ├── map.js
│ │ ├── max.js
│ │ ├── min.js
│ │ ├── partition.js
│ │ ├── pluck.js
│ │ ├── reduce.js
│ │ ├── reduceRight.js
│ │ ├── reject.js
│ │ ├── sample.js
│ │ ├── select.js
│ │ ├── shuffle.js
│ │ ├── size.js
│ │ ├── some.js
│ │ ├── sortBy.js
│ │ ├── sortByAll.js
│ │ ├── sortByOrder.js
│ │ ├── sum.js
│ │ └── where.js
│ ├── date.js
│ ├── date
│ │ └── now.js
│ ├── function.js
│ ├── function
│ │ ├── after.js
│ │ ├── ary.js
│ │ ├── backflow.js
│ │ ├── before.js
│ │ ├── bind.js
│ │ ├── bindAll.js
│ │ ├── bindKey.js
│ │ ├── compose.js
│ │ ├── curry.js
│ │ ├── curryRight.js
│ │ ├── debounce.js
│ │ ├── defer.js
│ │ ├── delay.js
│ │ ├── flow.js
│ │ ├── flowRight.js
│ │ ├── memoize.js
│ │ ├── modArgs.js
│ │ ├── negate.js
│ │ ├── once.js
│ │ ├── partial.js
│ │ ├── partialRight.js
│ │ ├── rearg.js
│ │ ├── restParam.js
│ │ ├── spread.js
│ │ ├── throttle.js
│ │ └── wrap.js
│ ├── index.js
│ ├── internal
│ │ ├── LazyWrapper.js
│ │ ├── LodashWrapper.js
│ │ ├── MapCache.js
│ │ ├── SetCache.js
│ │ ├── arrayConcat.js
│ │ ├── arrayCopy.js
│ │ ├── arrayEach.js
│ │ ├── arrayEachRight.js
│ │ ├── arrayEvery.js
│ │ ├── arrayExtremum.js
│ │ ├── arrayFilter.js
│ │ ├── arrayMap.js
│ │ ├── arrayPush.js
│ │ ├── arrayReduce.js
│ │ ├── arrayReduceRight.js
│ │ ├── arraySome.js
│ │ ├── arraySum.js
│ │ ├── assignDefaults.js
│ │ ├── assignOwnDefaults.js
│ │ ├── assignWith.js
│ │ ├── baseAssign.js
│ │ ├── baseAt.js
│ │ ├── baseCallback.js
│ │ ├── baseClone.js
│ │ ├── baseCompareAscending.js
│ │ ├── baseCopy.js
│ │ ├── baseCreate.js
│ │ ├── baseDelay.js
│ │ ├── baseDifference.js
│ │ ├── baseEach.js
│ │ ├── baseEachRight.js
│ │ ├── baseEvery.js
│ │ ├── baseExtremum.js
│ │ ├── baseFill.js
│ │ ├── baseFilter.js
│ │ ├── baseFind.js
│ │ ├── baseFindIndex.js
│ │ ├── baseFlatten.js
│ │ ├── baseFor.js
│ │ ├── baseForIn.js
│ │ ├── baseForOwn.js
│ │ ├── baseForOwnRight.js
│ │ ├── baseForRight.js
│ │ ├── baseFunctions.js
│ │ ├── baseGet.js
│ │ ├── baseIndexOf.js
│ │ ├── baseIsEqual.js
│ │ ├── baseIsEqualDeep.js
│ │ ├── baseIsFunction.js
│ │ ├── baseIsMatch.js
│ │ ├── baseLodash.js
│ │ ├── baseMap.js
│ │ ├── baseMatches.js
│ │ ├── baseMatchesProperty.js
│ │ ├── baseMerge.js
│ │ ├── baseMergeDeep.js
│ │ ├── baseProperty.js
│ │ ├── basePropertyDeep.js
│ │ ├── basePullAt.js
│ │ ├── baseRandom.js
│ │ ├── baseReduce.js
│ │ ├── baseSetData.js
│ │ ├── baseSlice.js
│ │ ├── baseSome.js
│ │ ├── baseSortBy.js
│ │ ├── baseSortByOrder.js
│ │ ├── baseSum.js
│ │ ├── baseToString.js
│ │ ├── baseUniq.js
│ │ ├── baseValues.js
│ │ ├── baseWhile.js
│ │ ├── baseWrapperValue.js
│ │ ├── binaryIndex.js
│ │ ├── binaryIndexBy.js
│ │ ├── bindCallback.js
│ │ ├── bufferClone.js
│ │ ├── cacheIndexOf.js
│ │ ├── cachePush.js
│ │ ├── charsLeftIndex.js
│ │ ├── charsRightIndex.js
│ │ ├── compareAscending.js
│ │ ├── compareMultiple.js
│ │ ├── composeArgs.js
│ │ ├── composeArgsRight.js
│ │ ├── createAggregator.js
│ │ ├── createAssigner.js
│ │ ├── createBaseEach.js
│ │ ├── createBaseFor.js
│ │ ├── createBindWrapper.js
│ │ ├── createCache.js
│ │ ├── createCompounder.js
│ │ ├── createCtorWrapper.js
│ │ ├── createCurry.js
│ │ ├── createDefaults.js
│ │ ├── createExtremum.js
│ │ ├── createFind.js
│ │ ├── createFindIndex.js
│ │ ├── createFindKey.js
│ │ ├── createFlow.js
│ │ ├── createForEach.js
│ │ ├── createForIn.js
│ │ ├── createForOwn.js
│ │ ├── createHybridWrapper.js
│ │ ├── createObjectMapper.js
│ │ ├── createPadDir.js
│ │ ├── createPadding.js
│ │ ├── createPartial.js
│ │ ├── createPartialWrapper.js
│ │ ├── createReduce.js
│ │ ├── createRound.js
│ │ ├── createSortedIndex.js
│ │ ├── createWrapper.js
│ │ ├── deburrLetter.js
│ │ ├── equalArrays.js
│ │ ├── equalByTag.js
│ │ ├── equalObjects.js
│ │ ├── escapeHtmlChar.js
│ │ ├── escapeRegExpChar.js
│ │ ├── escapeStringChar.js
│ │ ├── getData.js
│ │ ├── getFuncName.js
│ │ ├── getLength.js
│ │ ├── getMatchData.js
│ │ ├── getNative.js
│ │ ├── getView.js
│ │ ├── indexOfNaN.js
│ │ ├── initCloneArray.js
│ │ ├── initCloneByTag.js
│ │ ├── initCloneObject.js
│ │ ├── invokePath.js
│ │ ├── isArrayLike.js
│ │ ├── isIndex.js
│ │ ├── isIterateeCall.js
│ │ ├── isKey.js
│ │ ├── isLaziable.js
│ │ ├── isLength.js
│ │ ├── isObjectLike.js
│ │ ├── isSpace.js
│ │ ├── isStrictComparable.js
│ │ ├── lazyClone.js
│ │ ├── lazyReverse.js
│ │ ├── lazyValue.js
│ │ ├── mapDelete.js
│ │ ├── mapGet.js
│ │ ├── mapHas.js
│ │ ├── mapSet.js
│ │ ├── mergeData.js
│ │ ├── mergeDefaults.js
│ │ ├── metaMap.js
│ │ ├── pickByArray.js
│ │ ├── pickByCallback.js
│ │ ├── reEscape.js
│ │ ├── reEvaluate.js
│ │ ├── reInterpolate.js
│ │ ├── realNames.js
│ │ ├── reorder.js
│ │ ├── replaceHolders.js
│ │ ├── setData.js
│ │ ├── shimKeys.js
│ │ ├── sortedUniq.js
│ │ ├── toIterable.js
│ │ ├── toObject.js
│ │ ├── toPath.js
│ │ ├── trimmedLeftIndex.js
│ │ ├── trimmedRightIndex.js
│ │ ├── unescapeHtmlChar.js
│ │ └── wrapperClone.js
│ ├── lang.js
│ ├── lang
│ │ ├── clone.js
│ │ ├── cloneDeep.js
│ │ ├── eq.js
│ │ ├── gt.js
│ │ ├── gte.js
│ │ ├── isArguments.js
│ │ ├── isArray.js
│ │ ├── isBoolean.js
│ │ ├── isDate.js
│ │ ├── isElement.js
│ │ ├── isEmpty.js
│ │ ├── isEqual.js
│ │ ├── isError.js
│ │ ├── isFinite.js
│ │ ├── isFunction.js
│ │ ├── isMatch.js
│ │ ├── isNaN.js
│ │ ├── isNative.js
│ │ ├── isNull.js
│ │ ├── isNumber.js
│ │ ├── isObject.js
│ │ ├── isPlainObject.js
│ │ ├── isRegExp.js
│ │ ├── isString.js
│ │ ├── isTypedArray.js
│ │ ├── isUndefined.js
│ │ ├── lt.js
│ │ ├── lte.js
│ │ ├── toArray.js
│ │ └── toPlainObject.js
│ ├── math.js
│ ├── math
│ │ ├── add.js
│ │ ├── ceil.js
│ │ ├── floor.js
│ │ ├── max.js
│ │ ├── min.js
│ │ ├── round.js
│ │ └── sum.js
│ ├── number.js
│ ├── number
│ │ ├── inRange.js
│ │ └── random.js
│ ├── object.js
│ ├── object
│ │ ├── assign.js
│ │ ├── create.js
│ │ ├── defaults.js
│ │ ├── defaultsDeep.js
│ │ ├── extend.js
│ │ ├── findKey.js
│ │ ├── findLastKey.js
│ │ ├── forIn.js
│ │ ├── forInRight.js
│ │ ├── forOwn.js
│ │ ├── forOwnRight.js
│ │ ├── functions.js
│ │ ├── get.js
│ │ ├── has.js
│ │ ├── invert.js
│ │ ├── keys.js
│ │ ├── keysIn.js
│ │ ├── mapKeys.js
│ │ ├── mapValues.js
│ │ ├── merge.js
│ │ ├── methods.js
│ │ ├── omit.js
│ │ ├── pairs.js
│ │ ├── pick.js
│ │ ├── result.js
│ │ ├── set.js
│ │ ├── transform.js
│ │ ├── values.js
│ │ └── valuesIn.js
│ ├── package.json
│ ├── string.js
│ ├── string
│ │ ├── camelCase.js
│ │ ├── capitalize.js
│ │ ├── deburr.js
│ │ ├── endsWith.js
│ │ ├── escape.js
│ │ ├── escapeRegExp.js
│ │ ├── kebabCase.js
│ │ ├── pad.js
│ │ ├── padLeft.js
│ │ ├── padRight.js
│ │ ├── parseInt.js
│ │ ├── repeat.js
│ │ ├── snakeCase.js
│ │ ├── startCase.js
│ │ ├── startsWith.js
│ │ ├── template.js
│ │ ├── templateSettings.js
│ │ ├── trim.js
│ │ ├── trimLeft.js
│ │ ├── trimRight.js
│ │ ├── trunc.js
│ │ ├── unescape.js
│ │ └── words.js
│ ├── support.js
│ ├── utility.js
│ └── utility
│ │ ├── attempt.js
│ │ ├── callback.js
│ │ ├── constant.js
│ │ ├── identity.js
│ │ ├── iteratee.js
│ │ ├── matches.js
│ │ ├── matchesProperty.js
│ │ ├── method.js
│ │ ├── methodOf.js
│ │ ├── mixin.js
│ │ ├── noop.js
│ │ ├── property.js
│ │ ├── propertyOf.js
│ │ ├── range.js
│ │ ├── times.js
│ │ └── uniqueId.js
├── nth-check
│ ├── LICENSE
│ ├── README.md
│ ├── compile.js
│ ├── index.js
│ ├── package.json
│ └── parse.js
├── readable-stream
│ ├── CONTRIBUTING.md
│ ├── GOVERNANCE.md
│ ├── LICENSE
│ ├── README.md
│ ├── errors-browser.js
│ ├── errors.js
│ ├── experimentalWarning.js
│ ├── lib
│ │ ├── _stream_duplex.js
│ │ ├── _stream_passthrough.js
│ │ ├── _stream_readable.js
│ │ ├── _stream_transform.js
│ │ ├── _stream_writable.js
│ │ └── internal
│ │ │ └── streams
│ │ │ ├── async_iterator.js
│ │ │ ├── buffer_list.js
│ │ │ ├── destroy.js
│ │ │ ├── end-of-stream.js
│ │ │ ├── pipeline.js
│ │ │ ├── state.js
│ │ │ ├── stream-browser.js
│ │ │ └── stream.js
│ ├── package.json
│ ├── readable-browser.js
│ ├── readable.js
│ └── yarn.lock
├── safe-buffer
│ ├── LICENSE
│ ├── README.md
│ ├── index.d.ts
│ ├── index.js
│ └── package.json
├── string_decoder
│ ├── LICENSE
│ ├── README.md
│ ├── lib
│ │ └── string_decoder.js
│ └── package.json
└── util-deprecate
│ ├── History.md
│ ├── LICENSE
│ ├── README.md
│ ├── browser.js
│ ├── node.js
│ └── package.json
└── refman.pdf
/.gitbook/assets/0.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/0.jpeg
--------------------------------------------------------------------------------
/.gitbook/assets/cc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/cc.png
--------------------------------------------------------------------------------
/.gitbook/assets/illu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/illu.png
--------------------------------------------------------------------------------
/.gitbook/assets/im2col.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/im2col.png
--------------------------------------------------------------------------------
/.gitbook/assets/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/image.png
--------------------------------------------------------------------------------
/.gitbook/assets/images.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/images.jpeg
--------------------------------------------------------------------------------
/.gitbook/assets/img_1787.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/img_1787.jpg
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-11-at-11.55.23-am.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-11-at-11.55.23-am.png
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-13-at-12.28.53-pm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-13-at-12.28.53-pm.png
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-13-at-9.14.59-pm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-13-at-9.14.59-pm.png
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-14-at-10.31.17-am.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.31.17-am.png
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-14-at-10.31.27-am (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.31.27-am (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-14-at-10.31.27-am.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.31.27-am.png
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-14-at-10.58.53-am (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.58.53-am (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-14-at-10.58.53-am.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.58.53-am.png
--------------------------------------------------------------------------------
/.gitbook/assets/screenshot-2019-09-14-at-10.59.46-am.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/.gitbook/assets/screenshot-2019-09-14-at-10.59.46-am.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 前言
2 |
3 | 如果你是我的老读者,当然我觉得没有几个这样的人,你就会发现这本书甚至改了名字。我承认原来他是专门介绍GPU driver的,但是由于我的研究范围日益扩大(好吧,我承认我只是好奇心重,每个都玩不精),这本书已经完全变成一个~~日记~~技术博客了。
4 |
5 | 这本书原来的前言是_“为了克服自己的皮,以及想当作一个笔记,我决定写一本书叫《年子》(《日子》和《月子》的续集)来记录我对GPU kernel的理解和认识“,_但是现在看并没有什么用处。不过我还是希望能以不那么频繁的更新频率把它坚持下去。
6 |
7 | 鉴于现在只有我一个读者,并且我懂得一些中文,所有我决定使用这种半土不洋的语言。如果有一天这本书火了,三体人还没有打到地球,那么我会考虑把他翻译成英文。
8 |
9 | 差点忘了一点,鉴于我是个半吊子爱好者,这本书可能会有错误的地方,但我会尽量保证它的正确性并且附加适当的reference。如果你发现任何错误,十分感谢能写个email给我,让我别继续丢人。
10 |
11 | 另外我女朋友问我能不能把这本书献给她,那么,应该是能得。
12 |
13 |
--------------------------------------------------------------------------------
/_book/gitbook/fonts/fontawesome/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/FontAwesome.otf
--------------------------------------------------------------------------------
/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/fonts/fontawesome/fontawesome-webfont.woff2
--------------------------------------------------------------------------------
/_book/gitbook/gitbook-plugin-anchor-navigation-ex/lib/log.js:
--------------------------------------------------------------------------------
1 | var colors = require('colors');
2 | colors.setTheme({
3 | silly: 'rainbow',
4 | input: 'grey',
5 | verbose: 'cyan',
6 | prompt: 'grey',
7 | info: 'green',
8 | data: 'grey',
9 | help: 'cyan',
10 | warn: 'yellow',
11 | debug: 'blue',
12 | error: 'red'
13 | });
14 |
15 | module.exports = colors;
16 |
17 |
--------------------------------------------------------------------------------
/_book/gitbook/gitbook-plugin-anchors/plugin.css:
--------------------------------------------------------------------------------
1 |
2 | a.plugin-anchor {
3 | color: inherit !important;
4 | display: none;
5 | margin-left: -30px;
6 | padding-left: 40px;
7 | cursor: pointer;
8 | position: absolute;
9 | top: 0;
10 | left: 0;
11 | bottom: 0;
12 | }
13 |
14 | a.plugin-anchor i {
15 | margin-left: -30px;
16 | font-size: 15px !important;
17 | }
18 |
19 | h1, h2, h3, h4, h5, h6 {
20 | position: relative;
21 | }
22 |
23 | h1:hover a.plugin-anchor, h2:hover a.plugin-anchor, h3:hover a.plugin-anchor,
24 | h4:hover a.plugin-anchor, h5:hover a.plugin-anchor, h6:hover a.plugin-anchor {
25 | display: inline-block;
26 | }
27 |
28 | .book .book-body .page-wrapper .page-inner section.normal {
29 | overflow: visible;
30 | }
31 |
--------------------------------------------------------------------------------
/_book/gitbook/gitbook-plugin-expandable-chapters-small/expandable-chapters-small.css:
--------------------------------------------------------------------------------
1 | .book .book-summary .chapter > .articles {
2 | overflow: hidden;
3 | max-height: 0px;
4 | }
5 |
6 | .book .book-summary .chapter.expanded > .articles {
7 | max-height: 9999px;
8 | }
9 |
10 | .book .book-summary .exc-trigger {
11 | position: absolute;
12 | left: 12px;
13 | top: 12px;
14 | }
15 |
16 | .book .book-summary ul.summary li a,
17 | .book .book-summary ul.summary li span {
18 | padding-left: 30px;
19 | }
20 |
21 | .book .book-summary .exc-trigger:before {
22 | content: "\f105";
23 | }
24 |
25 | .book .book-summary .expanded > a .exc-trigger:before,
26 | .book .book-summary .expanded > span .exc-trigger:before {
27 | content: "\f107";
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/_book/gitbook/gitbook-plugin-github/plugin.js:
--------------------------------------------------------------------------------
1 | require([ 'gitbook' ], function (gitbook) {
2 | gitbook.events.bind('start', function (e, config) {
3 | var githubURL = config.github.url;
4 |
5 | gitbook.toolbar.createButton({
6 | icon: 'fa fa-github',
7 | label: 'GitHub',
8 | position: 'right',
9 | onClick: function() {
10 | window.open(githubURL)
11 | }
12 | });
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/_book/gitbook/gitbook-plugin-livereload/plugin.js:
--------------------------------------------------------------------------------
1 | (function() {
2 | var newEl = document.createElement('script'),
3 | firstScriptTag = document.getElementsByTagName('script')[0];
4 |
5 | if (firstScriptTag) {
6 | newEl.async = 1;
7 | newEl.src = '//' + window.location.hostname + ':35729/livereload.js';
8 | firstScriptTag.parentNode.insertBefore(newEl, firstScriptTag);
9 | }
10 |
11 | })();
12 |
--------------------------------------------------------------------------------
/_book/gitbook/gitbook-plugin-splitter/splitter.css:
--------------------------------------------------------------------------------
1 | .divider-content-summary {
2 | position: absolute;
3 | top: 0;
4 | right: 0;
5 | height: 100%;
6 | width: 5px;
7 | display: table;
8 | cursor: col-resize;
9 | color: #ccc;
10 | -webkit-transition: color 350ms ease;
11 | -moz-transition: color 350ms ease;
12 | -o-transition: color 350ms ease;
13 | transition: color 350ms ease
14 | }
15 | .divider-content-summary:hover {
16 | color: #444;
17 | }
18 | .divider-content-summary__icon {
19 | display: table-cell;
20 | vertical-align: middle;
21 | text-align: center;
22 | }
23 |
--------------------------------------------------------------------------------
/_book/gitbook/images/apple-touch-icon-precomposed-152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/images/apple-touch-icon-precomposed-152.png
--------------------------------------------------------------------------------
/_book/gitbook/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jizhuoran/Mali-GPU-Docs/8c17d5adf4997f9742092bf9598e177d74aaa438/_book/gitbook/images/favicon.ico
--------------------------------------------------------------------------------
/draft:
--------------------------------------------------------------------------------
1 | # 名岂文章著,官应老病休
2 |
3 |
4 | 前面几章粗略的介绍了katom的提交和完成,那么katom都会有一个对应的context。一个context一般都是由一个进程打开,这个context就负责作为一个类似中间人的角色在进程和kdev之间提供一个抽象。对于Mali GPU的context,官方的解释是这个对象代表一个实体,在这个实体里,GPU被调度,并获得自己的内存空间。
5 |
6 | 除了有指向/dev/malixx的文件指针,和一个kdev,context拥有一个structure专门记录MMU table的详细信息。除此之外,context还有一系列和event相关的members。因为是和内存空间相关联,所以有很多和内存相关的lock,list head和红黑树,并且由于这个context一般是进程相关的,所以也会存储pid和tgid。这里需要着重强调mem_pool,在context有两个mem_pool,一个管着4k的内存们,另一个管着2MB的内存们,以及和内存相关的方方面面。另一方面,由于context又跟调度相关,所以会有一个叫jctx的东西,专门用来记录和JD相关的信息。同时,在context里,有很多member是跟just in time分配相关的东西。
7 |
8 | context的init没啥好说的,就是带着lock进行一堆atomic的init操作,然后每一步都需要进行checker,失败了就进入error handler。
9 |
10 | 这一大堆由每个进程创建的一个或多个context是一个叫做context scheduler来schedule的
11 |
12 |
13 |
--------------------------------------------------------------------------------
/fan-wai/wei-shen-me-hui-you-fan-wai.md:
--------------------------------------------------------------------------------
1 | # 为什么会有番外
2 |
3 | 已经一个月没有更新这本书了,但不得不说这其中是有原因的,因为我懒呀!好吧,其实最近长期被干眼症困扰,已经到了一天吃四五粒蓝莓胶囊都没啥用的程度了,所以就不想一直看着屏幕了。如果各位大佬有什么治疗干眼症的秘方,恳请share一下。。。
4 |
5 | 不过也算是因祸得福吧,最近每次晚上回家就把原来写paper写代码的时间用来看书了。突然发现如果每天能拿出两三个小时看书,那么无论多厚的书都很快就读完了。当然,相比大家也都知道我看书就是囫囵吞枣,就图一乐,所以看的快了一点。
6 |
7 | 看了一些书,便想写一点点书评,当然我知道自己肯定坚持不下去,所以肯定会烂尾。。。当然书评也没必要写在自己的书里。其实我本来也是想写个博客的,看了我大学的一个大神同学的博客,那个难啊,像我这么懒的人,肯定是不会专门搭个博客的。另外也考虑过去豆瓣和知乎写书评,但我怕大家骂我啊。了解我的人都知道,我以前可是专门干流氓的,现在进入法制社会不让干了。但是大家一骂我,我再重操旧业,不是很好。
8 |
9 | 思来想去(其实这抬高自己了,我根本就没有想,因为皮),我就决定开个番外。我向大家保证,绝对没有收任何一本书的出版商的钱,因为他们不给我。。。
10 |
11 |
--------------------------------------------------------------------------------
/mali-gpu-driver/zhang-xu.md:
--------------------------------------------------------------------------------
1 | # 章序
2 |
3 | 我之前是做deep learning framework的,同样的代码,在Mali GPU上比在Adreno GPU 上慢几十倍。鉴于两者的硬件差距应该没有这么大,我觉得可能是驱动的问题。作为和kernel直接打交道的东西,驱动我实在是搞不明白。但是现在弄不明白,不见得将来就能弄明白啊,lol。为了克服自己的皮,以及想当作一个笔记,我决定把它加入《年子》来记录我对GPU kernel的理解和认识。由于我在看driver代码的时候才发现自己不是很懂Linux那一套,此章可能会repeat Linux的一部分内容,希望大神们见谅。
4 |
5 | GPU driver需要处理很多东西,首先需要把GPU注册到系统里,其次还要能接受你提交的任务,内部应该还有一个scheduler去schedule所有的tasks。由于每一项都涉及很多步骤,我会用流程图给表示出来,并且还会加上必要的讲解,以防止我忘了是咋回事儿。
6 |
7 | 就是这样。。。
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/mali-gpu-driver/zhou-liu-bu-he-jiu-ren-sheng-lu-bai-zou.md:
--------------------------------------------------------------------------------
1 | # 周六不喝酒,人生路白走
2 |
3 | 周五没鸡煲,朋友算白交。周六不喝酒,人生路白走。这算是我从十几岁就遵从的人生哲学。在那个叛逆的年纪,唯有喝酒是我最符合的中国传统文化。能约三五好友一起畅饮尿啤,回忆往事固然开心;竹影灯下自斟自酌也不失为一种乐趣。唐代诗人李白曾言:举杯邀明月,对影成三人。但我搜了很多关于这首诗的绘画作品,大约都是下图这个样子。画这幅画的画家真的令人窒息啊,都举杯邀明月了,不给月亮准备杯子呗。
4 |
5 | 
6 |
7 | 而作为一个实在的青岛人,若举杯邀月,必备两个杯啊。这张照片是我刚才自己拍的,如果你要吐槽我的照相技术。。。我都用照相而不是摄影了,这要这是张照片而不是一个鼠标那就已经很成功了。哦,对了,今天的文章不会有干货了,今天是闲白专场。两个杯除了能增添情趣之外,还有一个附加的好处,就是可以喝的更快,当然这其中设计了pipeline的原理。
8 |
9 | 
10 |
11 | 回想大学四年,因为好喝酒认识了不少朋友,也闹出了不少笑话。我们曾在我一个朋友的[出pool饭](https://medium.com/accent-magazine/%E5%87%BApool%E9%A5%AD-6d19c1c927cc)上喝到酒吧给送shot,醉到没人知道shot是棕色还是无色透明,当然最重要的是,那个出pool的伙计不喝酒。。。我还有个朋友,咱也别说是谁,善于喝碎香槟杯和红酒杯。
12 |
13 | 幸也。
14 |
15 |
--------------------------------------------------------------------------------
/node_modules/boolbase/README.md:
--------------------------------------------------------------------------------
1 | #boolbase
2 | This very simple module provides two basic functions, one that always returns true (`trueFunc`) and one that always returns false (`falseFunc`).
3 |
4 | ###WTF?
5 |
6 | By having only a single instance of these functions around, it's possible to do some nice optimizations. Eg. [`CSSselect`](https://github.com/fb55/CSSselect) uses these functions to determine whether a selector won't match any elements. If that's the case, the DOM doesn't even have to be touched.
7 |
8 | ###And why is this a separate module?
9 |
10 | I'm trying to modularize `CSSselect` and most modules depend on these functions. IMHO, having a separate module is the easiest solution to this problem.
--------------------------------------------------------------------------------
/node_modules/boolbase/index.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | trueFunc: function trueFunc(){
3 | return true;
4 | },
5 | falseFunc: function falseFunc(){
6 | return false;
7 | }
8 | };
--------------------------------------------------------------------------------
/node_modules/cheerio/index.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Export cheerio (with )
3 | */
4 |
5 | exports = module.exports = require('./lib/cheerio');
6 |
7 | /*
8 | Export the version
9 | */
10 |
11 | exports.version = require('./package.json').version;
12 |
--------------------------------------------------------------------------------
/node_modules/colors/lib/index.js:
--------------------------------------------------------------------------------
1 | var colors = require('./colors');
2 | module['exports'] = colors;
3 |
4 | // Remark: By default, colors will add style properties to String.prototype.
5 | //
6 | // If you don't wish to extend String.prototype, you can do this instead and
7 | // native String will not be touched:
8 | //
9 | // var colors = require('colors/safe);
10 | // colors.red("foo")
11 | //
12 | //
13 | require('./extendStringPrototype')();
14 |
--------------------------------------------------------------------------------
/node_modules/colors/lib/maps/america.js:
--------------------------------------------------------------------------------
1 | module['exports'] = function(colors) {
2 | return function(letter, i, exploded) {
3 | if (letter === ' ') return letter;
4 | switch (i%3) {
5 | case 0: return colors.red(letter);
6 | case 1: return colors.white(letter);
7 | case 2: return colors.blue(letter);
8 | }
9 | };
10 | };
11 |
--------------------------------------------------------------------------------
/node_modules/colors/lib/maps/rainbow.js:
--------------------------------------------------------------------------------
1 | module['exports'] = function(colors) {
2 | // RoY G BiV
3 | var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];
4 | return function(letter, i, exploded) {
5 | if (letter === ' ') {
6 | return letter;
7 | } else {
8 | return colors[rainbowColors[i++ % rainbowColors.length]](letter);
9 | }
10 | };
11 | };
12 |
13 |
--------------------------------------------------------------------------------
/node_modules/colors/lib/maps/random.js:
--------------------------------------------------------------------------------
1 | module['exports'] = function(colors) {
2 | var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',
3 | 'blue', 'white', 'cyan', 'magenta'];
4 | return function(letter, i, exploded) {
5 | return letter === ' ' ? letter :
6 | colors[
7 | available[Math.round(Math.random() * (available.length - 2))]
8 | ](letter);
9 | };
10 | };
11 |
--------------------------------------------------------------------------------
/node_modules/colors/lib/maps/zebra.js:
--------------------------------------------------------------------------------
1 | module['exports'] = function(colors) {
2 | return function(letter, i, exploded) {
3 | return i % 2 === 0 ? letter : colors.inverse(letter);
4 | };
5 | };
6 |
--------------------------------------------------------------------------------
/node_modules/colors/safe.js:
--------------------------------------------------------------------------------
1 | //
2 | // Remark: Requiring this file will use the "safe" colors API,
3 | // which will not touch String.prototype.
4 | //
5 | // var colors = require('colors/safe');
6 | // colors.red("foo")
7 | //
8 | //
9 | var colors = require('./lib/colors');
10 | module['exports'] = colors;
11 |
--------------------------------------------------------------------------------
/node_modules/colors/themes/generic-logging.js:
--------------------------------------------------------------------------------
1 | module['exports'] = {
2 | silly: 'rainbow',
3 | input: 'grey',
4 | verbose: 'cyan',
5 | prompt: 'grey',
6 | info: 'green',
7 | data: 'grey',
8 | help: 'cyan',
9 | warn: 'yellow',
10 | debug: 'blue',
11 | error: 'red',
12 | };
13 |
--------------------------------------------------------------------------------
/node_modules/css-select/lib/procedure.json:
--------------------------------------------------------------------------------
1 | {
2 | "universal": 50,
3 | "tag": 30,
4 | "attribute": 1,
5 | "pseudo": 0,
6 | "descendant": -1,
7 | "child": -1,
8 | "parent": -1,
9 | "sibling": -1,
10 | "adjacent": -1
11 | }
12 |
--------------------------------------------------------------------------------
/node_modules/dom-serializer/node_modules/domelementtype/index.js:
--------------------------------------------------------------------------------
1 | //Types of elements found in the DOM
2 | module.exports = {
3 | Text: "text", //Text
4 | Directive: "directive", // ... ?>
5 | Comment: "comment", //
6 | Script: "script", //",
5 | "expected": [
6 | {
7 | "type": "tag",
8 | "name": "head",
9 | "attribs": {},
10 | "children": [
11 | {
12 | "type": "script",
13 | "name": "script",
14 | "attribs": {
15 | "language": "Javascript"
16 | },
17 | "children": [
18 | {
19 | "data": "var foo = \"\"; alert(2 > foo); var baz = 10 << 2; var zip = 10 >> 1; var yap = \"<<>>>><<\";",
20 | "type": "text"
21 | }
22 | ]
23 | }
24 | ]
25 | }
26 | ]
27 | }
--------------------------------------------------------------------------------
/node_modules/domhandler/test/cases/05-tags_in_comment.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Special char in comment",
3 | "options": {},
4 | "html": "",
5 | "expected": [
6 | {
7 | "type": "tag",
8 | "name": "head",
9 | "attribs": {},
10 | "children": [
11 | {
12 | "data": " commented out tags Test",
13 | "type": "comment"
14 | }
15 | ]
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/node_modules/domhandler/test/cases/06-comment_in_script.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Script source in comment",
3 | "options": {},
4 | "html": "",
5 | "expected": [
6 | {
7 | "type": "script",
8 | "name": "script",
9 | "attribs": {},
10 | "children": [
11 | {
12 | "data": "",
13 | "type": "text"
14 | }
15 | ]
16 | }
17 | ]
18 | }
--------------------------------------------------------------------------------
/node_modules/domhandler/test/cases/07-unescaped_in_style.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Unescaped chars in style",
3 | "options": {},
4 | "html": "",
5 | "expected": [
6 | {
7 | "type": "style",
8 | "name": "style",
9 | "attribs": {
10 | "type": "text/css"
11 | },
12 | "children": [
13 | {
14 | "data": "\n body > p\n\t{ font-weight: bold; }",
15 | "type": "text"
16 | }
17 | ]
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/node_modules/domhandler/test/cases/08-extra_spaces_in_tag.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Extra spaces in tag",
3 | "options": {},
4 | "html": "the text\t\nfont\t \n>",
5 | "expected": [
6 | {
7 | "type": "tag",
8 | "name": "font",
9 | "attribs": {
10 | "size": "14"
11 | },
12 | "children": [
13 | {
14 | "data": "the text",
15 | "type": "text"
16 | }
17 | ]
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/node_modules/domhandler/test/cases/09-unquoted_attrib.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Unquoted attributes",
3 | "options": {},
4 | "html": "the text",
5 | "expected": [
6 | {
7 | "type": "tag",
8 | "name": "font",
9 | "attribs": {
10 | "size": "14"
11 | },
12 | "children": [
13 | {
14 | "data": "the text",
15 | "type": "text"
16 | }
17 | ]
18 | }
19 | ]
20 | }
--------------------------------------------------------------------------------
/node_modules/domhandler/test/cases/10-singular_attribute.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "Singular attribute",
3 | "options": {},
4 | "html": "