{"pageContext":{"index":2,"total":365,"name":"2019-05-19","items":[{"node":{"frontmatter":{"title":"Electron将每12周发布一稳定版","publish":true,"cover":"https://user-images.githubusercontent.com/2138661/57543187-86340700-7308-11e9-9745-a9371bb29275.png","showCover":true,"date":"2019-05-13","category":"frontend","url":"https://electronjs.org/blog/12-week-cadence","author":"Sofia Nguy","translator":"","tags":["desktop"],"priority":1},"html":"<p><a href=\"https://github.com/electron/electron\">Electron</a>为适应 Chromium 每 6 周发布一版本的步伐，将开始每 12 周发布一稳定版，同时依然支持最近的三个大版本。</p>"}},{"node":{"frontmatter":{"title":"FireFox Send - 火狐免费个人文件分享网盘服务 (加密传输 ,设置密码,限制时间)","publish":true,"cover":"https://img.iplaysoft.com/wp-content/uploads/2019/firefox-send/firefox_send_web_2x.png","showCover":true,"date":"2019-05-18","category":"misc","url":"https://www.iplaysoft.com/firefox-send.html","author":"X-Force","translator":"","tags":["css"],"priority":1},"html":"<p><a href=\"https://send.firefox.com/\">FireFox Send</a> 作为一款“临时性的文件传输共享服务”，与传统网盘不同，你上传的文件可设置访问密码、过期时间、最大下载次数。一旦时间或次数超限后，分享链接将自动失效，文件也会彻底销毁删除，无法再被恢复。</p>\n<p>实际测试，在国内访问和上传下载的速度都比较快，体验不错，有很高的实用性。</p>\n<p>匿名用户可以上传最大 1GB、最长 1 天的临时文件、被下载 1 次后自动删除文件；而注册用户 (同样完全免费) 则最大可以上传 2.5 GB 文件、最长可以保留 7 天的时间、最多允许 100 次下载次数。</p>\n<p>得益于 FireFox Send 完全开源 (基于 Node.js 开发)，甚至还有开发者推出了命令行版本的工具，可以通过命令一键上传并分享文件，对于运维或开发人员，可以非常方便地通过服务器传输文件或者编写脚本整合到自己的工作流中去。</p>"}},{"node":{"frontmatter":{"title":"cssfx-复制即可用的纯css效果集合","publish":true,"cover":"https://github.com/jolaleye/cssfx/blob/master/banner.png","showCover":true,"date":"2019-05-13","category":"frontend","url":"https://cssfx.dev/","author":"Jonathan Olaleye","translator":"","tags":["css"],"priority":1},"html":"<p>精简常用的特效，例如加载动画等，不需要图片就可以实现。</p>"}},{"node":{"frontmatter":{"title":"googlefont 开始支持 font-display 特性","publish":true,"cover":"","showCover":true,"date":"2019-05-13","category":"frontend","url":"https://www.zachleat.com/web/google-fonts-display/","author":"Zach Leatherman ","translator":"","tags":["googlefont"],"priority":1},"html":"<p>googlefont 通过生成样式表使用 <a href=\"https://www.w3cplus.com/css/font-display-masses.html\">font-display</a> 来控制字体加载方式。</p>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token atrule\"><span class=\"token rule\">@font-face</span></span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">font-family</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'my-font'</span><span class=\"token punctuation\">;</span>\n  <span class=\"token comment\">/* 当我们将font-display的值设置为swap的时候，\n  最开始会先使用系统字体来显示文字，当自定义字体下\n  载完毕后，自定义字体就会取代系统字体。*/</span>\n  <span class=\"token property\">font-display</span><span class=\"token punctuation\">:</span> swap<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">src</span><span class=\"token punctuation\">:</span> <span class=\"token url\">url(my-font.woff2)</span> <span class=\"token function\">format</span><span class=\"token punctuation\">(</span><span class=\"token string\">'woff2'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>link</span>\n  <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>https://fonts.googleapis.com/css?family=Lobster&amp;display=swap<span class=\"token punctuation\">\"</span></span>\n  <span class=\"token attr-name\">rel</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>stylesheet<span class=\"token punctuation\">\"</span></span>\n<span class=\"token punctuation\">/></span></span></code></pre></div>"}},{"node":{"frontmatter":{"title":"ola-实时数字平滑插值动画js库","publish":true,"cover":"https://raw.githubusercontent.com/franciscop/ola/master/docs/line.gif","showCover":true,"date":"2019-05-18","category":"frontend","url":"https://www.iplaysoft.com/firefox-send.html","author":"Francisco Presencia","translator":"","tags":["javascript","animation"],"priority":1},"html":"<p><img src=\"https://raw.githubusercontent.com/franciscop/ola/master/docs/dots.gif\">\n示例</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">// 创建1000个数字实例</span>\n<span class=\"token keyword\">const</span> dots <span class=\"token operator\">=</span> <span class=\"token function\">Ola</span><span class=\"token punctuation\">(</span><span class=\"token function\">Array</span><span class=\"token punctuation\">(</span><span class=\"token number\">1000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">fill</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// 每600毫秒更新所有</span>\n<span class=\"token function\">setInterval</span><span class=\"token punctuation\">(</span>\n  <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span>\n    dots<span class=\"token punctuation\">.</span><span class=\"token function\">forEach</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>dot<span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n      dots<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">random</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  <span class=\"token number\">600</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"python3.8将要引入fstring调试语法","publish":true,"cover":"","showCover":true,"date":"2019-05-08","category":"python","url":"https://tirkarthi.github.io/programming/2019/05/08/f-string-debugging.html","author":"Karthikeyan","translator":"","tags":["css"],"priority":1},"html":"<p>Python3.8 beta 1.将会引入<a href=\"https://bugs.python.org/issue36817\">fstring新语法</a>以方便调试:\n<code class=\"language-text\">f&quot;name={name}&quot;</code>可简写为<code class=\"language-text\">f&quot;{name=}&quot;</code></p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">./python.exe\nPython 3.8.0a4+ (heads/master:88db8bd064, May  9 2019, 15:54:59)\n[Clang 7.0.2 (clang-700.1.81)] on darwin\nType &quot;help&quot;, &quot;copyright&quot;, &quot;credits&quot; or &quot;license&quot; for more information.\n&gt;&gt;&gt; name = &quot;karthikeyan&quot;\n&gt;&gt;&gt; f&quot;name={name}&quot;\n&#39;name=karthikeyan&#39;\n&gt;&gt;&gt; f&quot;{name=}&quot;\n&quot;name=&#39;karthikeyan&#39;&quot;</code></pre></div>"}},{"node":{"frontmatter":{"title":"postgraphile支持Postgres订阅","publish":true,"cover":"https://github.com/graphile/livesotope/raw/master/demo.gif","showCover":true,"date":"2019-05-16","category":"database","url":"https://blog.kazge.com/nodejs/database/2019/05/16/zh-postgraphile-introduce/","author":"Ka","translator":"","tags":["postgres"],"priority":1},"html":"<p><a href=\"https://github.com/graphile/postgraphile\">postgraphile</a>是基于 Postgres 的支持实时订阅和实时查询的 GraphoQL Nodejs 工具。</p>\n<p>其<a href=\"https://www.graphile.org/postgraphile/subscriptions/\">订阅特性</a>开始于刚刚发布的 <a href=\"https://github.com/graphile/postgraphile/releases/tag/v4.4.0\">4.4.0 版本</a>。基于 Postgres 的<a href=\"https://www.postgresql.org/docs/9.4/sql-notify.html\">LISTEN/NOTIFY</a>特性。</p>\n<p><a href=\"https://www.graphile.org/postgraphile/usage-library/\">支持 http,express,connect 整合</a>。</p>\n<p><a href=\"https://www.graphile.org/postgraphile/relations/\">可自动映射 SQL 关系到 GraphQL Schema</a>。</p>\n<p><a href=\"https://www.graphile.org/postgraphile/connections/\">支持基于指针的翻页</a>。</p>\n<p><a href=\"https://www.graphile.org/postgraphile/security/\">支持 JWT 整合</a>。</p>\n<p>自带 GraphQL 开发 UI。</p>"}},{"node":{"frontmatter":{"title":"react-smooth-range-input 简洁美观的React范围选择组件","publish":true,"cover":"https://raw.githubusercontent.com/bluebill1049/react-smooth-range-input/master/example/example.gif","showCover":true,"date":"2019-05-16","category":"frontend","url":"https://github.com/bluebill1049/react-smooth-range-input","author":"Blue Bill","translator":"","tags":["react"],"priority":2},"html":"<p><a href=\"https://react-smooth-range-input.now.sh/\">在线 Demo</a></p>"}},{"node":{"frontmatter":{"title":"将二进制文件分割成 BASE64 文本然后传到 google 不需要占用空间","publish":true,"cover":"","showCover":true,"date":"2019-05-16","category":"python","url":"https://github.com/stewartmcgown/uds","author":"Stewart McGown","translator":"","tags":["react"],"priority":2},"html":"<p>google doc 文档文本内容不占空间？\n那么就这样利用？</p>\n<div class=\"gatsby-highlight\" data-language=\"shell\"><pre class=\"language-shell\"><code class=\"language-shell\">&gt; python uds.py push Ubuntu.Desktop.16.04.iso\nUbuntu.Desktop.16.04.iso 需要 543 个文档来保存.\n创建父目录成功 ID 1fc6JGpX6vUWiwflL1jBxM1YpuMHFAms8\n上传成功 Ubuntu.Desktop.16.04.iso: [██████████████████████████████] 100%</code></pre></div>"}},{"node":{"frontmatter":{"title":"丹麦一出租车公司接到信息隐私违规罚款约18万美元","publish":true,"cover":"https://www.compliancejunction.com/wp-content/uploads/2019/04/Danish-DPA-Issues-First-Ever-GDPR-Fine-Against-Taxi-Company.png","showCover":true,"date":"2019-05-16","category":"database","url":"https://www.compliancejunction.com/danish-dpa-issues-first-ever-gdpr-fine-against-taxi-company/","author":"Compliance Junction","translator":"","tags":["GDPR"],"priority":1},"html":"<p>丹麦一家出租车公司 Taxa  因违反 GDPR（一般数据保护条例 General Data Protection Regulation） 数据保留期而被丹麦数据保护局 datatilsynet (DPA) 处以一般数据保护条例处罚。</p>\n<p>尽管此数据公司已对用户数据做了匿名处理，然而DPA认为依然可以由电话号码关联到具体用户。</p>"}},{"node":{"frontmatter":{"title":"你在python3里应该使用的新特性","publish":true,"cover":"","showCover":true,"date":"2019-05-06","category":"python","url":"https://datawhatnow.com/things-you-are-probably-not-using-in-python-3-but-should/","author":"Vinko Kodžoman","translator":"","tags":["python3"],"priority":1},"html":"<h3 id=\"内置lru最近最少使用缓存-32\"><a href=\"#%E5%86%85%E7%BD%AElru%E6%9C%80%E8%BF%91%E6%9C%80%E5%B0%91%E4%BD%BF%E7%94%A8%E7%BC%93%E5%AD%98-32\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://docs.python.org/3/library/functools.html#functools.lru_cache\">内置LRU最近最少使用缓存 (3.2+)</a></h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">import</span> time\n<span class=\"token keyword\">from</span> functools <span class=\"token keyword\">import</span> lru_cache\n@lru_cache<span class=\"token punctuation\">(</span>maxsize<span class=\"token operator\">=</span><span class=\"token number\">512</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">def</span> <span class=\"token function\">fib_memoization</span><span class=\"token punctuation\">(</span>number<span class=\"token punctuation\">:</span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token builtin\">int</span><span class=\"token punctuation\">:</span>\n    <span class=\"token keyword\">if</span> number <span class=\"token operator\">==</span> <span class=\"token number\">0</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> <span class=\"token number\">0</span>\n    <span class=\"token keyword\">if</span> number <span class=\"token operator\">==</span> <span class=\"token number\">1</span><span class=\"token punctuation\">:</span> <span class=\"token keyword\">return</span> <span class=\"token number\">1</span>\n    \n    <span class=\"token keyword\">return</span> fib_memoization<span class=\"token punctuation\">(</span>number<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> fib_memoization<span class=\"token punctuation\">(</span>number<span class=\"token operator\">-</span><span class=\"token number\">2</span><span class=\"token punctuation\">)</span>\nstart <span class=\"token operator\">=</span> time<span class=\"token punctuation\">.</span>time<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\nfib_memoization<span class=\"token punctuation\">(</span><span class=\"token number\">40</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>f<span class=\"token string\">'Duration: {time.time() - start}s'</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># Duration: 6.866455078125e-05s</span></code></pre></div>\n<h3 id=\"pathlib-34\"><a href=\"#pathlib-34\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://docs.python.org/3/library/pathlib.html\">Pathlib (3.4+)</a></h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> pathlib <span class=\"token keyword\">import</span> Path\nroot <span class=\"token operator\">=</span> Path<span class=\"token punctuation\">(</span><span class=\"token string\">'post_sub_folder'</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>root<span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># post_sub_folder</span>\npath <span class=\"token operator\">=</span> root <span class=\"token operator\">/</span> <span class=\"token string\">'happy_user'</span>\n<span class=\"token comment\"># 获得绝对路径</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>path<span class=\"token punctuation\">.</span>resolve<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># /home/somefolder/post_sub_folder/happy_user</span></code></pre></div>\n<h3 id=\"类型提示-35\"><a href=\"#%E7%B1%BB%E5%9E%8B%E6%8F%90%E7%A4%BA-35\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://docs.python.org/3/library/typing.html\">类型提示 (3.5+)</a></h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">def</span> <span class=\"token function\">sentence_has_animal</span><span class=\"token punctuation\">(</span>sentence<span class=\"token punctuation\">:</span> <span class=\"token builtin\">str</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">-</span><span class=\"token operator\">></span> <span class=\"token builtin\">bool</span><span class=\"token punctuation\">:</span>\n  <span class=\"token keyword\">return</span> <span class=\"token string\">\"animal\"</span> <span class=\"token keyword\">in</span> sentence\nsentence_has_animal<span class=\"token punctuation\">(</span><span class=\"token string\">\"Donald had a farm without animals\"</span><span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># True</span></code></pre></div>\n<h3 id=\"枚举-34\"><a href=\"#%E6%9E%9A%E4%B8%BE-34\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://docs.python.org/3/library/enum.html\">枚举 (3.4+)</a></h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token keyword\">from</span> enum <span class=\"token keyword\">import</span> Enum<span class=\"token punctuation\">,</span> auto\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Monster</span><span class=\"token punctuation\">(</span>Enum<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    ZOMBIE <span class=\"token operator\">=</span> auto<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    WARRIOR <span class=\"token operator\">=</span> auto<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    BEAR <span class=\"token operator\">=</span> auto<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    \n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>Monster<span class=\"token punctuation\">.</span>ZOMBIE<span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># Monster.ZOMBIE</span></code></pre></div>\n<h3 id=\"extended-iterable-unpacking-30\"><a href=\"#extended-iterable-unpacking-30\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a><a href=\"https://www.python.org/dev/peps/pep-3132/\">Extended iterable unpacking (3.0+)</a></h3>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">head<span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>body<span class=\"token punctuation\">,</span> tail <span class=\"token operator\">=</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>head<span class=\"token punctuation\">,</span> body<span class=\"token punctuation\">,</span> tail<span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># 0 [1, 2, 3] 4</span>\npy<span class=\"token punctuation\">,</span> filename<span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>cmds <span class=\"token operator\">=</span> <span class=\"token string\">\"python3.7 script.py -n 5 -l 15\"</span><span class=\"token punctuation\">.</span>split<span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>py<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>filename<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>cmds<span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># python3.7</span>\n<span class=\"token comment\"># script.py</span>\n<span class=\"token comment\"># ['-n', '5', '-l', '15']</span>\nfirst<span class=\"token punctuation\">,</span> _<span class=\"token punctuation\">,</span> third<span class=\"token punctuation\">,</span> <span class=\"token operator\">*</span>_ <span class=\"token operator\">=</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>first<span class=\"token punctuation\">,</span> third<span class=\"token punctuation\">)</span>\n<span class=\"token comment\"># 0 2</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"使用create-dmg秒建Mac DMG安装文件","publish":true,"cover":"https://github.com/sindresorhus/create-dmg/raw/master/screenshot-dmg.png","showCover":true,"date":"2019-05-14","category":"frontend","url":"https://github.com/sindresorhus/create-dmg","author":"Sindre Sorhus","translator":"","tags":["microservice"],"priority":1},"html":"<p>安装<code class=\"language-text\">npm install --global create-dmg</code><br>\n创建<code class=\"language-text\">create-dmg &#39;Lungo.app&#39; Build/Releases</code>\n开发者证书不是必须的。</p>"}},{"node":{"frontmatter":{"title":"使用 css filter 改变 audio 标签的颜色","publish":true,"cover":"https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60/v1557744400/jsslpbh5vaikfuqpsieq.jpg","showCover":true,"date":"2019-05-18","category":"frontend","url":"https://codepen.io/peterc/pen/joWdEB","author":"Peter Cooper","translator":"","tags":["css"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"响应式纯css框架tailwind1.0发布","publish":true,"cover":"https://camo.githubusercontent.com/97517e40f9727cc4637bea2d0e1b813d4639f8b2/68747470733a2f2f7461696c77696e646373732e636f6d2f696d672f7461696c77696e642e737667","showCover":true,"date":"2019-05-13","category":"frontend","url":"https://tailwindcss.com/","author":"Tailwind","translator":"","tags":["css"],"priority":1},"html":"<p>工具组合式的使用方式</p>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>max-w-sm mx-auto flex p-6 bg-white rounded-lg shadow-xl<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>flex-shrink-0<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>h-12 w-12<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/img/logo.svg<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">alt</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>ChitChat Logo<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>ml-6 pt-1<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h4</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text-xl text-gray-900 leading-tight<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>ChitChat<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h4</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text-base text-gray-600 leading-normal<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      You have a new message!\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></code></pre></div>"}},{"node":{"frontmatter":{"title":"既要高精度也要高性能，人脸识别主流算法大合集","publish":true,"cover":"https://static001.infoq.cn/resource/image/58/49/58b94bc077b750308fa55ed30fda7449.png","showCover":true,"date":"2019-05-16","category":"python","url":"https://www.infoq.cn/article/Kg-86juaHo6PlJG69rNs?utm_source=rss&utm_medium=article","author":"何智翔","translator":"","tags":["ai"],"priority":2},"html":"<p>人脸识别的主要应用方式:</p>\n<ul>\n<li>\n<p>在验证场景下，人脸识别算法主要用于回答“这是否为某人”。<br>\n通常直接比较两幅人脸图像提取出来的两个特征的相似度，所以我们常称之为 1：1。</p>\n</li>\n<li>\n<p>在辨认场景下，人脸识别算法主要回答“这是谁”。<br>\n通常需要将给定的一副人脸图像与计算机中存储的 N 个人的图像比较，所以我们常称之为 1：N。<br>\n比对目标库通常是常住人口库、逃犯库等覆盖面非常广泛，容量非常庞大的人脸数据库，库容量 N 通常能够达到上千万、甚至上亿级别。</p>\n</li>\n<li>\n<p>监控场景同时具有辨认和验证的特点，人脸识别算法需要回答“这是否为要找的人”。<br>\n库容量相对辨认场景要小，所以我们称之为 1：n。<br>\n库容量一般为几千人甚至万人级别。</p>\n</li>\n</ul>\n<p>对于深度学习来说，不一定总是数据越多，效果越好，但是在人脸识别领域，绝大多数情况是数据越多，效果越好。</p>\n<p>残差结构可以很轻松的构建几百层，一千多层的网络而不用担心梯度消失过快的问题，原因就在于残差结构的捷径（shortcut）部分。\n<img src=\"https://static001.infoq.cn/resource/image/32/88/320f00df0a3e3ae81f54c1fee2fa6188.jpg\"></p>\n<p>残差结构利用捷径这样一个跨层连接的机制，无损地传播梯度，解决了深层网络训练中的梯度消失的问题。从此，深度学习的网络可以轻松到达上百乃至上千层，而不用担心难以训练的问题。</p>\n<p>BN 全名是 batch normalization 即批规范化，通过规范化操作将输出信号规范化保证网络的稳定性。</p>\n<p>可以理解为 BN 层将输出从饱和区拉倒了非饱和区。它带来的优点主要有：</p>\n<p>（1）可以放心的使用大学习率而不用小心的调参了，较大的学习率极大的提高了学习速度；</p>\n<p>（2）BN 本身上也是一种正则化的方式，能够增加模型的泛化能力；</p>\n<p>（3）BN 降低了数据之间的绝对差异，有一个去相关的性质，更多的考虑相对差异性，因此在分类任务上具有更好的效果。</p>\n<p>评价一个人脸识别模型性能好坏最直接的就是它验证性能的好坏。</p>\n<p>一个完整的人脸识别系统并不是只有人脸识别算法就能够正常的工作运行的，它还需要诸如人脸检测、关键点定位等诸多算法的配合。</p>"}},{"node":{"frontmatter":{"title":"火狐开发版支持行内断点，logpoint","publish":true,"cover":"https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/05/inline-bps.gif","showCover":true,"date":"2019-05-16","category":"frontend","url":"https://hacks.mozilla.org/2019/05/faster-smarter-javascript-debugging-in-firefox/","author":"Harald Kirschner (digitarald)","translator":"","tags":["firefox"],"priority":1},"html":"<p><a href=\"https://developer.mozilla.org/en-US/docs/Tools/Debugger/Set_a_logpoint\">logpoint</a>不会导致 pause。</p>\n<p><img src=\"https://2r4s9p1yi1fa2jd7j43zph8r-wpengine.netdna-ssl.com/files/2019/05/logpoints.gif\"></p>\n<p><img src=\"https://hacks.mozilla.org/files/2019/05/Worker-Threads-Panel.png\"></p>\n<p>新的线程面板可更方便的调试 worker,可单独或并排显示多个 worker,可单独 pause worker。</p>"}},{"node":{"frontmatter":{"title":"纯css实现弹出菜单","publish":true,"cover":"","showCover":true,"date":"2019-05-13","category":"frontend","url":"https://www.simonewebdesign.it/pure-css-onclick-context-menu/","author":"Simone Vittori","translator":"","tags":["css"],"priority":1},"html":"<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span><span class=\"token punctuation\">></span></span>☰<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>nav</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>menu<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>ul</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onclick</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>alert(<span class=\"token punctuation\">'</span>Hello there!<span class=\"token punctuation\">'</span>)<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        Display Greeting\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>li</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">onclick</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>print()<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        Print This Page\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>li</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>ul</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>nav</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token selector\">.menu</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">visibility</span><span class=\"token punctuation\">:</span> hidden<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token comment\">/**\n当点击按钮触发focus时显示菜单，\n显示后菜单后点击菜单会触发菜单的active,\n这时也要显示，否则菜单按钮无法点击\n*/</span>\n<span class=\"token selector\">button + .menu:active,\nbutton:focus + .menu</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">visibility</span><span class=\"token punctuation\">:</span> visible<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>在线<a href=\"https://codepen.io/imhazige/pen/JqJYPR\">demo</a></p>"}},{"node":{"frontmatter":{"title":"谷歌在微服务上的坑和教训","publish":true,"cover":"https://static001.infoq.cn/resource/image/b7/3a/b74d9aed2aa3b33febd53bb014f8a93a.png","showCover":true,"date":"2019-05-14","category":"misc","url":"https://www.infoq.cn/article/L*bT1UfuVoj1I6NRNM3U?utm_source=rss&utm_medium=article","author":"Ben Sigelman 译者 禚娴静","translator":"","tags":["microservice"],"priority":1},"html":"<h3 id=\"第一条-开始之前需要明确构建微服务的原因\"><a href=\"#%E7%AC%AC%E4%B8%80%E6%9D%A1-%E5%BC%80%E5%A7%8B%E4%B9%8B%E5%89%8D%E9%9C%80%E8%A6%81%E6%98%8E%E7%A1%AE%E6%9E%84%E5%BB%BA%E5%BE%AE%E6%9C%8D%E5%8A%A1%E7%9A%84%E5%8E%9F%E5%9B%A0\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>第一条 开始之前需要明确构建微服务的原因</h3>\n<p>我认为构建微服务的唯一充分理由是组织结构，并且这也应该是大多数组织构建微服务的唯一原因。</p>\n<h3 id=\"第二条-无服务器服务仍然运行在服务器上\"><a href=\"#%E7%AC%AC%E4%BA%8C%E6%9D%A1-%E6%97%A0%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%9C%8D%E5%8A%A1%E4%BB%8D%E7%84%B6%E8%BF%90%E8%A1%8C%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>第二条 无服务器服务仍然运行在服务器上</h3>\n<p>我认为有一种趋势，将事情分解成越来越小的部分会变得非常有趣，以至于我们会忘记了其实两个进程间通过网络通信的成本非常高。我也确实看到很多人在这个方向上走的太远，再次强调一下，这还是痴迷于单一目的服务的理念，也是盲目蛮干的失败模式。 我宁愿看到围绕工程组织中的功能单元构建服务，并考虑一定的分区，而不是将事情细分为尽可能小的部分。</p>\n<h3 id=\"第三条-独立并不是绝对的\"><a href=\"#%E7%AC%AC%E4%B8%89%E6%9D%A1-%E7%8B%AC%E7%AB%8B%E5%B9%B6%E4%B8%8D%E6%98%AF%E7%BB%9D%E5%AF%B9%E7%9A%84\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>第三条 独立并不是绝对的</h3>\n<p>在为单个服务写代码的时候开发工作还是很顺利的，但在部署的时候问题就来了，交叉出现了一系列的跨服务横切关注点，尤其在生产环境中。那些显而易见的关注点包括安全性、监控、服务发现、身份验证等。这些都是跨功能的关注点。这时候会面临两个问题，第一个问题，每一个团队都必须承担运维压力，而每一个团队的规模相对较小，所以必须要付出额外的成本。第二，其中一些事情是全局的问题，特别像可观察性，需要从系统的全局进行设计，而这样的事情如果每个团队自己做决定，将会失去统一有效的机制。</p>\n<p>我认为，当人们追求微服务的独立性时，他们应该考虑哪些维度实际上是独立的，哪些维度应该委托给某类平台团队</p>\n<h3 id=\"第四条-警惕巨大的仪表板\"><a href=\"#%E7%AC%AC%E5%9B%9B%E6%9D%A1-%E8%AD%A6%E6%83%95%E5%B7%A8%E5%A4%A7%E7%9A%84%E4%BB%AA%E8%A1%A8%E6%9D%BF\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>第四条 警惕巨大的仪表板</h3>\n<p>监控不应该对根本原因发出告警，它应该是细化过程的一部分；而应该对 SLI(即服务水平指标)发出告警，对于任何特定系统，SLI 的信息不会有那么多而导致无法处理。</p>\n<h3 id=\"第五条-无法跟踪一切\"><a href=\"#%E7%AC%AC%E4%BA%94%E6%9D%A1-%E6%97%A0%E6%B3%95%E8%B7%9F%E8%B8%AA%E4%B8%80%E5%88%87\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>第五条 无法跟踪一切</h3>\n<p>了解一个微服务系统最基础层面发生的事情可以更好的维护和提供服务，诸如服务请求的起点、它的旅程直到请求的结束，这就是分布式跟踪的最基本想法。</p>"}},{"node":{"frontmatter":{"title":"页面下滚动动画辅助脚本-delighters","publish":true,"cover":"","showCover":true,"date":"2019-05-18","category":"frontend","url":"https://q42.github.io/delighters/","author":"Q42","translator":"","tags":["javascript","animation"],"priority":1},"html":"<p>只用于页面向下滚动时触发的动画</p>\n<p>使用方法：</p>\n<h3 id=\"引入脚本\"><a href=\"#%E5%BC%95%E5%85%A5%E8%84%9A%E6%9C%AC\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>引入脚本</h3>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">type</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>text/javascript<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>delighters.js<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h3 id=\"设置需要动画的元素\"><a href=\"#%E8%AE%BE%E7%BD%AE%E9%9C%80%E8%A6%81%E5%8A%A8%E7%94%BB%E7%9A%84%E5%85%83%E7%B4%A0\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>设置需要动画的元素</h3>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>foo<span class=\"token punctuation\">\"</span></span> <span class=\"token attr-name\">data-delighter</span><span class=\"token punctuation\">></span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h3 id=\"自己写动画样式\"><a href=\"#%E8%87%AA%E5%B7%B1%E5%86%99%E5%8A%A8%E7%94%BB%E6%A0%B7%E5%BC%8F\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>自己写动画样式</h3>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token comment\">/* 初始 */</span>\n<span class=\"token selector\">.foo.delighter</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">transition</span><span class=\"token punctuation\">:</span> all 0.3s ease-out<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">transform</span><span class=\"token punctuation\">:</span> <span class=\"token function\">translateX</span><span class=\"token punctuation\">(</span>-100%<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">opacity</span><span class=\"token punctuation\">:</span> 0<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token comment\">/* 动画开始 当元素top处于viewpoint 75%处时触发 */</span>\n<span class=\"token selector\">.foo.delighter.started</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">transform</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">opacity</span><span class=\"token punctuation\">:</span> 1<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token comment\">/* 动画结束 当元素bottom处于viewpoint 75%处时触发 */</span>\n<span class=\"token selector\">.foo.delighter.started.ended</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">border</span><span class=\"token punctuation\">:</span> solid red 10px<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>delighters 的作用就是当页面滚动到元素时会应用你的动画样式。</p>"}}]}}