{"pageContext":{"index":58,"total":362,"name":"2020-06-14","items":[{"node":{"frontmatter":{"title":"Deno内部代码为什么使用javascript而不是typescript","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"deno","url":"https://blog.kazge.com/javascript/2020/06/09/zh-Use-JavaScript-instead-of-TypeScript-for-internal-Deno-Code/","author":"Ka","translator":"","tags":["deno"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"Docker-OSX Docker运行MacOS,支持x11转发","publish":true,"cover":"https://github.com/sickcodes/Docker-OSX/raw/master/running-mac-inside-docker-qemu.png?raw=true","showCover":true,"date":"2020-06-14","category":"devops","url":"https://github.com/sickcodes/Docker-OSX","author":"sickcodes","translator":"","tags":["docker","macos"],"priority":2},"html":"<p><a href=\"https://medicalxpress.com/news/2020-06-language-brain-scans-reveal-coding.html\">https://medicalxpress.com/news/2020-06-language-brain-scans-reveal-coding.html</a></p>"}},{"node":{"frontmatter":{"title":"IBM将不再研究，提供，开发面部识别软件","publish":true,"cover":"https://cdn.vox-cdn.com/thumbor/6gZOpM8NZFXGlziTAfeD_F0oE-s=/0x0:2040x1360/1820x1213/filters:focal(857x517:1183x843):format(webp)/cdn.vox-cdn.com/uploads/chorus_image/image/66910133/acastro_180730_1777_facial_recognition_0001.0.jpg","showCover":true,"date":"2020-06-14","category":"AI","url":"https://www.theverge.com/2020/6/8/21284683/ibm-no-longer-general-purpose-facial-recognition-analysis-software","author":"Jay Peters","translator":"","tags":["facial recongnition"],"priority":2},"html":""}},{"node":{"frontmatter":{"title":"caprover - 简单易用paas平台实现","publish":true,"cover":"https://raw.githubusercontent.com/caprover/caprover-website/master/graphics/screenshots-video-small.gif","showCover":true,"date":"2020-06-14","category":"devops","url":"https://github.com/CapRover/CapRover","author":"CapRover","translator":"","tags":["kubernetes"],"priority":1},"html":"<p>对于 web developer 不想花时间在 devops 上的，可以用来一键部署。</p>\n<p>类似方案</p>\n<p><a href=\"https://github.com/dokku/dokku/\">dokku</a>\n<a href=\"https://github.com/flynn/flynn\">flynn</a></p>"}},{"node":{"frontmatter":{"title":"animate.css - 动画库","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://github.com/animate-css/animate.css","author":"Animate.css","translator":"","tags":["css"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"cloudflare.tv - 关注互联网技术的网络电视","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"tv","url":"https://cloudflare.tv/live","author":"cloudflare","translator":"","tags":["tv"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"express限流的两种方式","publish":true,"cover":"https://images.unsplash.com/photo-1523286575777-21af045abec8?w=1993&h=600&fit=crop","showCover":true,"date":"2020-06-14","category":"nodejs","url":"https://eugene.coding.blog/rate-limiting-an-express-app","author":"Eugene Ghanizadeh","translator":"","tags":["express"],"priority":1},"html":"<h2 id=\"native中间件方式\"><a href=\"#native%E4%B8%AD%E9%97%B4%E4%BB%B6%E6%96%B9%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>Native中间件方式</h2>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">function</span> <span class=\"token function\">rateLimit</span><span class=\"token punctuation\">(</span>duration<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> lock <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">,</span> res<span class=\"token punctuation\">,</span> next<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>req<span class=\"token punctuation\">.</span>_<span class=\"token punctuation\">.</span>user<span class=\"token punctuation\">.</span>id <span class=\"token keyword\">in</span> lock<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      res<span class=\"token punctuation\">.</span><span class=\"token function\">status</span><span class=\"token punctuation\">(</span><span class=\"token number\">429</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">send</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 keyword\">else</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token function\">next</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      lock<span class=\"token punctuation\">[</span>req<span class=\"token punctuation\">.</span>_<span class=\"token punctuation\">.</span>user<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n      <span class=\"token function\">setTimeout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token keyword\">delete</span> lock<span class=\"token punctuation\">[</span>req<span class=\"token punctuation\">.</span>_<span class=\"token punctuation\">.</span>user<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1000</span> <span class=\"token operator\">*</span> duration<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"流处理方式\"><a href=\"#%E6%B5%81%E5%A4%84%E7%90%86%E6%96%B9%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>流处理方式</h2>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> Router<span class=\"token punctuation\">,</span> next <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'rxxpress'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> throttleTime<span class=\"token punctuation\">,</span> groupBy<span class=\"token punctuation\">,</span> mergeMap <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'rxjs/operators'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> authenticate <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'./auth'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> router <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Router</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\nrouter<span class=\"token punctuation\">.</span><span class=\"token function\">all</span><span class=\"token punctuation\">(</span><span class=\"token string\">'*'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">pipe</span><span class=\"token punctuation\">(</span>\n  <span class=\"token function\">use</span><span class=\"token punctuation\">(</span><span class=\"token function\">authenticate</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>                                  <span class=\"token comment\">// --> conduct authentication</span>\n  <span class=\"token function\">groupBy</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>req<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> req<span class=\"token punctuation\">.</span>_<span class=\"token punctuation\">.</span>user<span class=\"token punctuation\">.</span>id<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>                    <span class=\"token comment\">// --> split request stream based on user</span>\n  <span class=\"token function\">mergeMap</span><span class=\"token punctuation\">(</span>group <span class=\"token operator\">=></span> group<span class=\"token punctuation\">.</span><span class=\"token function\">pipe</span><span class=\"token punctuation\">(</span><span class=\"token function\">throttleTime</span><span class=\"token punctuation\">(</span><span class=\"token number\">10000</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>   <span class=\"token comment\">// --> throttle each split stream 10 seconds, then merge them together</span>\n  <span class=\"token function\">next</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>                                                <span class=\"token comment\">// --> pass to next handler</span>\n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">subscribe</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// ...</span>\n<span class=\"token comment\">// Rest of your API definition</span>\n<span class=\"token comment\">// ...</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> router<span class=\"token punctuation\">.</span>core<span class=\"token punctuation\">;</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"gitops-with-kustomize 示例Kustomize,flux,helm的devops项目","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"devops","url":"https://github.com/swade1987/gitops-with-kustomize","author":"Steven Wade","translator":"","tags":["kubernetes"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"johnny-five 物联网开发框架","publish":true,"cover":"https://github.com/rwaldron/johnny-five/raw/master/assets/sgier-johnny-five.png","showCover":true,"date":"2020-06-14","category":"javascript","url":"https://github.com/rwaldron/johnny-five","author":"Rick Waldron","translator":"","tags":["iot"],"priority":2},"html":"<blockquote>\n<p>还记得<a href=\"https://movie.douban.com/subject/1294366/\">霹雳五号</a>吗？</p>\n</blockquote>"}},{"node":{"frontmatter":{"title":"mathjs 扩展math库","publish":true,"cover":"https://camo.githubusercontent.com/828084979bff8b04b26ce1788a4cf48b611dde91/68747470733a2f2f7261772e6769746875622e636f6d2f6a6f7364656a6f6e672f6d6174686a732f6d61737465722f6d6973632f696d672f6d6174686a732e706e67","showCover":true,"date":"2020-06-14","category":"javascript","url":"https://github.com/josdejong/mathjs","author":"Jos de Jong","translator":"","tags":["math"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"josh.js 页面滚动内容特效","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://github.com/mamunhpath/josh.js","author":"Al Mamun","translator":"","tags":["animation"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"nomad - 支持容器非容器和虚拟机轻量级部署工具","publish":true,"cover":"https://github.com/hashicorp/nomad/raw/19c404ca791d6ebe95a81738d7dc6623ab28564d/website/public/img/logo-hashicorp.svg?sanitize=true","showCover":true,"date":"2020-06-14","category":"devops","url":"https://github.com/hashicorp/nomad","author":"HashiCorp","translator":"","tags":["deploment"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"plnkr.co 在线javascript代码在线运行工具","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"javascript","url":"https://plnkr.co/","author":"plnkr.co","translator":"","tags":["IDE"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"motionia - 动画特效.md","publish":true,"cover":"https://raw.githubusercontent.com/abhiprojectz/motionia/master/assest/keyframe-challenge-large.gif","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://github.com/abhiprojectz/motionia","author":"Abhi","translator":"","tags":["animation"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"rich-markdown-editor - markdown富文本编辑器","publish":true,"cover":"https://www.getoutline.com/screenshot.png","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://github.com/outline/rich-markdown-editor","author":"Outline","translator":"","tags":["markdown"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"scribbletune 使用javascript 创建音乐","publish":true,"cover":"https://scribbletune.com/images/scribble4max.png","showCover":true,"date":"2020-06-14","category":"javascript","url":"https://github.com/scribbletune/scribbletune","author":"Scribbletune","translator":"","tags":["music"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"react-slideshow - 轻量级图片幻灯片特效","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://github.com/femioladeji/react-slideshow","author":"Femi Oladeji","translator":"","tags":["ppt"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"terminal-image 在终端中显示图片","publish":true,"cover":"https://github.com/sindresorhus/terminal-image/raw/master/screenshot.png","showCover":true,"date":"2020-06-14","category":"nodejs","url":"https://github.com/josdejong/mathjs","author":"Sindre Sorhus","translator":"","tags":["terminal"],"priority":2},"html":"<p>支持所有支持颜色系统的命令行终端</p>"}},{"node":{"frontmatter":{"title":"thelounge - web IRC客户端","publish":true,"cover":"https://raw.githubusercontent.com/thelounge/thelounge.github.io/master/img/thelounge-screenshot.png","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://github.com/thelounge/thelounge","author":"The Lounge","translator":"","tags":["IRC"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"sorted-colors - 排序颜色选择器","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://github.com/scriptype/sorted-colors","author":"Mustafa Enes Ertarhanaci","translator":"","tags":["css"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"分享 - Coinbase - kubernets还是太复杂，我们使用odin来发布","publish":true,"cover":"https://github.com/coinbase/odin/raw/master/assets/sm.png","showCover":true,"date":"2020-06-14","category":"devops","url":"https://blog.coinbase.com/container-technologies-at-coinbase-d4ae118dcb6c","author":"Drew Rothstein","translator":"","tags":["kubernetes"],"priority":2},"html":"<p><a href=\"https://github.com/coinbase/odin\">odin</a>是 coinbase 开源的发布部署工具。直接绑定 AWS 的自动扩展组 ASG,可以水平扩展，也可以垂直扩展。</p>"}},{"node":{"frontmatter":{"title":"发现安全问题怎么告知?","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"web","url":"https://blog.kazge.com/web/2020/06/09/zh-how-to-contact-when-found-security-problem/","author":"Ka","translator":"","tags":["security"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"useReactiveForm - 轻量级FORM钩子","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://github.com/Michaeladze/useReactiveForm","author":"Michael Kutateladze","translator":"","tags":["react"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"想让你的文章出现在这里？","publish":true,"cover":"","showCover":true,"date":"2020-06-07","category":"frontend","url":"mailto:editor@zhouexin.com?subject=投稿!","author":"投稿","translator":"","tags":["editor"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"教程 - WebRTC视频会议解析","publish":true,"cover":"https://miro.medium.com/max/1400/1*LrXclKuBwVMlkvYsu5qkMw.png","showCover":true,"date":"2020-06-14","category":"web","url":"https://levelup.gitconnected.com/anatomy-of-a-webrtc-video-conference-f924ba0ba930","author":"Stephan Thamm","translator":"","tags":["webRTC"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"大脑扫描显示-说话和编程在同一大脑区域","publish":true,"cover":"https://scx1.b-cdn.net/csz/news/800/2018/brain.jpg","showCover":true,"date":"2020-06-14","category":"other","url":"https://blog.kazge.com/web/2020/06/09/zh-how-to-contact-when-found-security-problem/","author":"Chemnitz University of Technology 德国开姆尼茨大学","translator":"","tags":["brain"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"教程 - 媒体查询详细教程","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://polypane.app/blog/the-complete-guide-to-css-media-queries/","author":"Polypane blog","translator":"","tags":["css"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"教程 - 写给开发者的威胁建模教程","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"security","url":"https://martinfowler.com/articles/agile-threat-modelling.html","author":"Jim Gumbley","translator":"","tags":["security"],"priority":1},"html":"<blockquote>\n<p>参见<a href=\"https://docs.microsoft.com/zh-cn/azure/security/develop/threat-modeling-tool-getting-started\">威胁建模工具入门</a></p>\n</blockquote>"}},{"node":{"frontmatter":{"title":"教程 - 怎样将git分支master改为main","publish":true,"cover":"https://www.hanselman.com/blog/content/binary/Windows-Live-Writer/81deae93109c_11E8B/image_1ad05b3d-f421-4f90-8dc2-b740f34b4749.png","showCover":true,"date":"2020-06-14","category":"other","url":"https://www.hanselman.com/blog/EasilyRenameYourGitDefaultBranchFromMasterToMain.aspx","author":"Scott Hanselman","translator":"","tags":["git"],"priority":2},"html":""}},{"node":{"frontmatter":{"title":"教程 - vh, vw, vmin 和 vmax","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://www.sitepoint.com/css-viewport-units-quick-start/","author":"Asha Laxmi and Maria Antonietta Perna","translator":"","tags":["css"],"priority":1},"html":"<ul>\n<li>Chrome v34 之前不支持在 border widths, column gaps, transform values, box shadows 以及 calc() 里使用。</li>\n<li>火狐 bug:如果 display 为 table,则 100vh 不起作用。</li>\n</ul>"}},{"node":{"frontmatter":{"title":"教程 - 杂志折页动画特效","publish":true,"cover":"https://thomaspark.co/wp/wp-content/uploads/2020/06/jaffee.png","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://thomaspark.co/2020/06/the-mad-magazine-fold-in-effect-in-css/","author":"Thomas Park","translator":"","tags":["css"],"priority":2},"html":""}},{"node":{"frontmatter":{"title":"教程 - 深入relay-友好并武断的graphQL客户端","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"frontend","url":"https://hasura.io/blog/deep-dive-into-relay-graphql-client//","author":"Hasura","translator":"","tags":["react"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"教程 moment-timezone","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"nodejs","url":"http://thecodebarbarian.com/a-practical-guide-to-moment-timezone.html","author":"Valeri Karpov","translator":"","tags":["css"],"priority":1},"html":"<ul>\n<li>Chrome v34 之前不支持在 border widths, column gaps, transform values, box shadows 以及 calc() 里使用。</li>\n<li>火狐 bug:如果 display 为 table,则 100vh 不起作用。</li>\n</ul>"}},{"node":{"frontmatter":{"title":"机器学习免费论文和代码资源查找","publish":true,"cover":"","showCover":true,"date":"2020-06-14","category":"AI","url":"https://paperswithcode.com/","author":"paperswithcode","translator":"","tags":["Machine Leaning"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"谷歌技术写作公开课","publish":true,"cover":"https://developers.google.com/tech-writing/images/TechWritingCoursesLogo_720.png","showCover":true,"date":"2020-06-14","category":"other","url":"https://developers.google.com/tech-writing","author":"谷歌","translator":"","tags":["writting"],"priority":1},"html":""}}]}}