{"pageContext":{"index":112,"total":362,"name":"2021-06-27","items":[{"node":{"frontmatter":{"title":"2021 年软件开发人员短缺即将到来","publish":true,"cover":"https://cacm.acm.org/system/assets/0004/0228/061821_CACMpg39_The-2021-Software.large.jpg?1623867174&1623867174","showCover":true,"date":"2021-06-27","category":"career","url":"https://cacm.acm.org/magazines/2021/7/253461-the-2021-software-developer-shortage-is-coming/fulltext","author":"Travis Breaux","translator":"","tags":["hire"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"3 个有用的 TypeScript 模式","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"javascript","url":"https://spin.atomicobject.com/2021/05/11/3-useful-typescript-patterns/","author":"CASEY FALKOWSKI","translator":"","tags":["typescript"],"priority":1},"html":"<h3 id=\"映射类型\"><a href=\"#%E6%98%A0%E5%B0%84%E7%B1%BB%E5%9E%8B\" 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=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\">type Names <span class=\"token operator\">=</span> <span class=\"token string\">\"Bob\"</span> <span class=\"token operator\">|</span> <span class=\"token string\">\"Bill\"</span> <span class=\"token operator\">|</span> <span class=\"token string\">\"Ben\"</span><span class=\"token punctuation\">;</span>\ntype JobTitles <span class=\"token operator\">=</span> <span class=\"token string\">\"Welder\"</span> <span class=\"token operator\">|</span> <span class=\"token string\">\"Carpenter\"</span> <span class=\"token operator\">|</span> <span class=\"token string\">\"Plumber\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> JobAssignments<span class=\"token punctuation\">:</span> <span class=\"token punctuation\">{</span> <span class=\"token punctuation\">[</span>Key <span class=\"token keyword\">in</span> Names<span class=\"token punctuation\">]</span><span class=\"token operator\">?</span><span class=\"token punctuation\">:</span> JobTitles <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  Bob<span class=\"token punctuation\">:</span> <span class=\"token string\">\"Welder\"</span><span class=\"token punctuation\">,</span>\n  Bill<span class=\"token punctuation\">:</span> <span class=\"token string\">\"Carpenter\"</span><span class=\"token punctuation\">,</span>\n  Ben<span class=\"token punctuation\">:</span> <span class=\"token string\">\"Plumber\"</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"函数重载定义\"><a href=\"#%E5%87%BD%E6%95%B0%E9%87%8D%E8%BD%BD%E5%AE%9A%E4%B9%89\" 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=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">inputDoubler</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">:</span> string<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> string<span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">function</span> <span class=\"token function\">inputDoubler</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">:</span> number<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> number<span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">inputDoubler</span><span class=\"token punctuation\">(</span>input<span class=\"token punctuation\">:</span> string <span class=\"token operator\">|</span> number<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">typeof</span> input <span class=\"token operator\">===</span> <span class=\"token string\">\"string\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token template-string\"><span class=\"token string\">`</span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>input<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token interpolation\"><span class=\"token interpolation-punctuation punctuation\">${</span>input<span class=\"token interpolation-punctuation punctuation\">}</span></span><span class=\"token string\">`</span></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 keyword\">return</span> input <span class=\"token operator\">*</span> <span class=\"token number\">2</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token function\">inputDoubler</span><span class=\"token punctuation\">(</span><span class=\"token number\">5</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">+</span> <span class=\"token function\">inputDoubler</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"is\"><a href=\"#is\" 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>is</h3>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">isPizza</span> <span class=\"token punctuation\">(</span>food<span class=\"token punctuation\">:</span> Pizza <span class=\"token operator\">|</span> Burrito<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span> food is Pizza <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> food<span class=\"token punctuation\">.</span>ingredients<span class=\"token punctuation\">.</span>topping <span class=\"token operator\">!==</span> undefined<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">printIngredients</span> <span class=\"token punctuation\">(</span>food<span class=\"token punctuation\">:</span> Pizza <span class=\"token operator\">|</span> Burrito<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token function\">isPizza</span><span class=\"token punctuation\">(</span>food<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>food<span class=\"token punctuation\">.</span>ingredients<span class=\"token punctuation\">.</span>topping<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    console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span>food<span class=\"token punctuation\">.</span>ingredients<span class=\"token punctuation\">.</span>filling<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"AWS Step Functions Workflow Studio – 用于构建状态机的工作流可视化工具","publish":true,"cover":"https://d2908q01vomqb2.cloudfront.net/da4b9237bacccdf19c0760cab7aec4a8359010b0/2021/05/14/03_architecture_diagram.png","showCover":true,"date":"2021-06-27","category":"devops","url":"https://aws.amazon.com/cn/blogs/aws/new-aws-step-functions-workflow-studio-a-low-code-visual-tool-for-building-state-machines/","author":"Marcia Villalba","translator":"","tags":["workflow"],"priority":2},"html":""}},{"node":{"frontmatter":{"title":"Resemble.js - 图片分析比较库","publish":true,"cover":"https://camo.githubusercontent.com/c084a4c3fc5feca7b9bc6211cd11bd0c0a7c10f71b48765dd666778fd5c757b9/68747470733a2f2f7261772e6769746875622e636f6d2f72736d626c2f526573656d626c652e6a732f6d61737465722f64656d6f6173736574732f726573656d626c652e706e67","showCover":true,"date":"2021-06-27","category":"javascript","url":"https://github.com/rsmbl/Resemble.js","author":"Resemble","translator":"","tags":["image"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"ES2021新特性","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"javascript","url":"https://h3manth.com/ES2021/","author":"Hemanth.HM","translator":"","tags":["feature"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"Epic Games 为开发者发布免费的反作弊和语音聊天服务","publish":true,"cover":"https://cdn.vox-cdn.com/thumbor/EaWFdKnaAf0WKNHRu8vVJngS_6Y=/0x0:3840x2160/1820x1213/filters:focal(1613x773:2227x1387):format(webp)/cdn.vox-cdn.com/uploads/chorus_image/image/69485724/Epic_Online_Services___Voice___Easy_Anti_Cheat.0.jpg","showCover":true,"date":"2021-06-27","category":"game","url":"https://www.theverge.com/2021/6/22/22544447/epic-games-anti-cheat-voice-chat-online-services-free","author":"Jay Peters and Jon Porter","translator":"","tags":["game"],"priority":2},"html":""}},{"node":{"frontmatter":{"title":"LANDrop - 开源局域网文件共享工具","publish":true,"cover":"https://github.com/LANDrop/LANDrop/raw/master/LANDrop/icons/banner.png","showCover":true,"date":"2021-06-27","category":"transfer","url":"https://github.com/LANDrop/LANDrop","author":"LANDrop","translator":"","tags":["lan"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"Vercel(NextJS开发商)获得一亿美元c轮投资","publish":true,"cover":"https://rauchg.com/_next/image?url=https%3A%2F%2Fpbs.twimg.com%2Fmedia%2FExMtnH7VkAUO51f%3Fformat%3Djpg%26name%3Dmedium&w=3840&q=80","showCover":true,"date":"2021-06-27","category":"nodejs","url":"https://rauchg.com/2021/making-the-web-faster","author":"Guillermo Rauch","translator":"","tags":["react"],"priority":2},"html":""}},{"node":{"frontmatter":{"title":"WebAssembly状况2021","publish":true,"cover":"https://blog.scottlogic.com/ceberhardt/assets/state-of-wasm/wasm-usage.png","showCover":true,"date":"2021-06-27","category":"javascript","url":"https://blog.scottlogic.com/2021/06/21/state-of-wasm.html","author":"Colin Eberhardt","translator":"","tags":["WASM"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"is-website-vulnerable - 在网站的前端 JavaScript 库中发现已知的安全漏洞","publish":true,"cover":"https://github.com/lirantal/is-website-vulnerable/raw/master/.github/is-website-vulnerable-logo.png","showCover":true,"date":"2021-06-27","category":"frontend","url":"https://github.com/lirantal/is-website-vulnerable","author":"Liran Tal","translator":"","tags":["hire"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"micromark - markdown解析器","publish":true,"cover":"https://raw.githubusercontent.com/micromark/micromark/2e476c9/logo.svg?sanitize=true","showCover":true,"date":"2021-06-27","category":"nodejs","url":"https://github.com/micromark/micromark","author":"micromark","translator":"","tags":["markdown"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"node-serialport - nodejs访问串口","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"nodejs","url":"https://github.com/serialport/node-serialport","author":"Serialport","translator":"","tags":["markdown"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"pica - 浏览器端高质量减小图片大小","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"javascript","url":"https://github.com/nodeca/pica","author":"Nodeca","translator":"","tags":["image"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"optional chaining的用法","publish":true,"cover":"https://pbs.twimg.com/media/E4lgeohVgAAHICQ.png","showCover":true,"date":"2021-06-27","category":"javascript","url":"https://swizec.com/blog/a-surprising-feature-of-javascript-optional-chaining/","author":"Swizec Teller","translator":"","tags":["syntax"],"priority":1},"html":"<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">//调用方法</span>\nobject<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>deepProp<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span><span class=\"token keyword\">function</span><span class=\"token operator\">?</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">(</span>args<span class=\"token punctuation\">)</span>\n<span class=\"token comment\">//数组</span>\nobject<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>deepProp<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>deepArray<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span><span class=\"token number\">5</span><span class=\"token punctuation\">]</span>\n<span class=\"token comment\">//表达式 知道就行，不要这样用！</span>\nobject<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span>deepProp<span class=\"token operator\">?</span><span class=\"token punctuation\">.</span><span class=\"token punctuation\">[</span>console<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"runs if deepProp defined\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"react-time-ago - 时间比较显示国际化组件","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"frontend","url":"https://gitlab.com/catamphetamine/react-time-ago","author":"Nikolay Kuchumov","translator":"","tags":["react"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"你可能不知道的react的5个问题","publish":true,"cover":"https://miro.medium.com/max/2400/1*ii44ETPS0c5dDsAmlvdXmA.jpeg","showCover":true,"date":"2021-06-27","category":"frontend","url":"https://medium.com/geekculture/react-5-things-that-might-surprise-you-ddefd9fbac0f","author":"Sveta Slepner","translator":"","tags":["react"],"priority":1},"html":"<p>改变key可强制让组件重新加载</p>"}},{"node":{"frontmatter":{"title":"wuzz- 用于 HTTP 的交互式 cli 工具","publish":true,"cover":"https://github.com/asciimoo/wuzz/raw/master/docs/images/screencast.gif","showCover":true,"date":"2021-06-27","category":"devops","url":"https://github.com/asciimoo/wuzz","author":"Adam Tauber","translator":"","tags":["cli"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"useFilePicker - 文件选择hook","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"frontend","url":"https://github.com/Jaaneek/useFilePicker","author":"Jaaneek","translator":"","tags":["react"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"一位 HBO Max 实习生不小心发送了一封空的测试电子邮件，互联网对此表现非常温柔","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"test","url":"https://ftw.usatoday.com/lists/hbo-max-intern-test-email-twitter","author":"Mike D. Sykes, II","translator":"","tags":["mistake"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"发现入侵 iCloud 帐户的漏洞而Apple赖账","publish":true,"cover":"https://thezerohack.com/wp-content/uploads/2021/06/iphoneother-e1623844871191.jpg","showCover":true,"date":"2021-06-27","category":"security","url":"https://thezerohack.com/apple-vulnerability-bug-bounty","author":"LAXMAN MUTHIYAH","translator":"","tags":["hack"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"将 SHA-256 哈希表示为头像","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"frontend","url":"https://francoisbest.com/posts/2021/hashvatars","author":"Jay Peters","translator":"","tags":["avatar"],"priority":1},"html":"<p><a href=\"https://github.com/franky47/francoisbest.com/blob/next/src/components/SHA256Avatar.tsx\">代码</a></p>"}},{"node":{"frontmatter":{"title":"教程 - css修改滚动条","publish":true,"cover":"https://ishadeed.com/assets/scrollbars/scrollbar-parts.jpg","showCover":true,"date":"2021-06-27","category":"frontend","url":"https://ishadeed.com/article/custom-scrollbars-css/","author":"Ahmad Shadeed","translator":"","tags":["css"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"每个程序员都应该了解的关于 SSD 的知识","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"other","url":"https://databasearchitects.blogspot.com/2021/06/what-every-programmer-should-know-about.html","author":"Viktor Leis","translator":"","tags":["SSD"],"priority":1},"html":"<ul>\n<li>SSD 通常被称为磁盘，但这是一种误导，因为它们将数据存储在半导体而不是机械磁盘上​​。</li>\n<li>磁盘和 SSD 之间的另一个重要区别是磁盘只有一个磁头，并且仅在顺序访问时性能良好。相比之下，SSD 由数十个甚至数百个闪存芯片（“并行单元”）组成，可以同时访问。</li>\n</ul>"}},{"node":{"frontmatter":{"title":"恶意软件Vigilante阻止软件盗版","publish":true,"cover":"https://cdn.arstechnica.net/wp-content/uploads/2021/06/malware-names.png","showCover":true,"date":"2021-06-27","category":"security","url":"https://arstechnica.com/gadgets/2021/06/newly-discovered-vigilante-malware-outs-software-pirates-and-blocks-them/","author":"DAN GOODIN","translator":"","tags":["malware"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"无障碍工具指南","publish":true,"cover":"https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_auto/w_2000/https://cloud.netlifyusercontent.com/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/13c07c60-0d91-46cf-b043-1320a15d7060/2-complete-guide-accessibility-tooling.PNG","showCover":true,"date":"2021-06-27","category":"frontend","url":"https://www.smashingmagazine.com/2021/06/complete-guide-accessibility-tooling/","author":"Nic Chan","translator":"","tags":["accessibility"],"priority":1},"html":""}},{"node":{"frontmatter":{"title":"故事 - 曾经误删生产库且没有正式备份","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"database","url":"https://threadreaderapp.com/thread/1405826698839576576.html","author":"Francis Stokes","translator":"","tags":["database"],"priority":1},"html":"<blockquote>\n<p>算是运气好，有个离职的员工离职前偷偷备份了数据库并邮寄给他们恢复--这怎么算？</p>\n</blockquote>"}},{"node":{"frontmatter":{"title":"虽然工时估计很难但无论如何都要做","publish":true,"cover":"","showCover":true,"date":"2021-06-27","category":"project","url":"https://jacobian.org/2021/may/20/estimation/","author":"Jacob Kaplan-Moss","translator":"","tags":["estimation"],"priority":1},"html":""}}]}}