{"pageContext":{"index":4,"total":364,"name":"2019-06-02","items":[{"node":{"frontmatter":{"title":"756 个有趣的公开免费数据集","publish":true,"cover":"","showCover":true,"date":"2019-06-01","category":"database","url":"https://docs.google.com/spreadsheets/d/1wZhPLMCHKJvwOkP4juclhjFgqIY8fQFMemwKL2c64vk/edit#gid=0","author":"Data Is Plural","translator":"","tags":["dataset"],"priority":1},"html":"<p>例如<a href=\"https://github.com/fivethirtyeight/data/tree/master/tarantino\">昆汀的电影里的领盒饭的角色</a></p>"}},{"node":{"frontmatter":{"title":"16个Devtools技巧","publish":true,"cover":"","showCover":true,"date":"2018-11-20","category":"frontend","url":"https://www.heartinternet.uk/blog/16-devtools-tips-and-tricks-every-css-developer-need-to-know/","author":"Louis Lazaris 摘译 Ka","translator":"","tags":["devtools"],"priority":1},"html":"<p>摘录部分：</p>\n<h3 id=\"f8暂停以获取动态展示的元素\"><a href=\"#f8%E6%9A%82%E5%81%9C%E4%BB%A5%E8%8E%B7%E5%8F%96%E5%8A%A8%E6%80%81%E5%B1%95%E7%A4%BA%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>F8暂停以获取动态展示的元素</h3>\n<h3 id=\"ctrl-shift-o查找css源码\"><a href=\"#ctrl-shift-o%E6%9F%A5%E6%89%BEcss%E6%BA%90%E7%A0%81\" 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>CTRL-SHIFT-O查找css源码</h3>\n<p>打开一个css文件,按CTRL-SHIFT-O\n<img src=\"https://www.heartinternet.uk/blog/wp-content/uploads/search-with-css-selector-shortcut.gif\"></p>\n<h3 id=\"切换颜色格式\"><a href=\"#%E5%88%87%E6%8D%A2%E9%A2%9C%E8%89%B2%E6%A0%BC%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<p><img src=\"https://www.heartinternet.uk/blog/wp-content/uploads/toggling-colour-value-syntax.gif\"></p>\n<h3 id=\"调试阴影\"><a href=\"#%E8%B0%83%E8%AF%95%E9%98%B4%E5%BD%B1\" 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><img src=\"https://www.heartinternet.uk/blog/wp-content/uploads/editing-css-shadows.gif\"></p>\n<h3 id=\"火狐的grid布局查看器\"><a href=\"#%E7%81%AB%E7%8B%90%E7%9A%84grid%E5%B8%83%E5%B1%80%E6%9F%A5%E7%9C%8B%E5%99%A8\" 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>火狐的Grid布局查看器</h3>\n<p><img src=\"https://www.heartinternet.uk/blog/wp-content/uploads/grid-layout-inspector-in-firefox.gif\"></p>\n<h3 id=\"火狐的滤镜编辑器\"><a href=\"#%E7%81%AB%E7%8B%90%E7%9A%84%E6%BB%A4%E9%95%9C%E7%BC%96%E8%BE%91%E5%99%A8\" 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><img src=\"https://www.heartinternet.uk/blog/wp-content/uploads/css-filter-editor-in-firefox.gif\"></p>\n<h3 id=\"chrome的动画编辑\"><a href=\"#chrome%E7%9A%84%E5%8A%A8%E7%94%BB%E7%BC%96%E8%BE%91\" 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>Chrome的动画编辑</h3>\n<p>在三个圆点菜单处选择more tool/Animations\n<img src=\"https://www.heartinternet.uk/blog/wp-content/uploads/editting-css-animations-in-chrome-style-panel.gif\"></p>\n<h3 id=\"chrome查看未使用的样式\"><a href=\"#chrome%E6%9F%A5%E7%9C%8B%E6%9C%AA%E4%BD%BF%E7%94%A8%E7%9A%84%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>Chrome查看未使用的样式</h3>\n<p>在三个圆点菜单处选择more tool/Coverage</p>"}},{"node":{"frontmatter":{"title":"MIT 最新研究：只听 6 秒语音，就知道说话者长相","publish":true,"cover":"","showCover":true,"date":"2019-05-28","category":"python","url":"https://constatic.geekbang.org/infoq/5ceb8707f3633.png?imageView2/0/w/800","author":"MIT CSAIL","translator":"","tags":["Machine Learning"],"priority":1},"html":"<p>MIT 使用了 AVSpeech 数据集，它由来自 YouTube 的数百万个视频片段组成，有超过 10 万人的语言数据。Speech2Face 是通过自我监督的方式训练的。</p>\n<blockquote>\n<p>当然，目前效果还很不可靠。</p>\n</blockquote>"}},{"node":{"frontmatter":{"title":"2019 年，互联网企业起薪最高，数据科学家岗位薪资排第一","publish":true,"cover":"","showCover":true,"date":"2019-05-29","category":"misc","url":"https://www.infoq.cn/article/ctPIg1VwhOggJIk-7CVT","author":"Amanda Stansell 译者 王强","translator":"","tags":["salary"],"priority":1},"html":"<ul>\n<li>科技企业比金融岗位工资还高</li>\n<li>Facebook <mark>实习生</mark>月薪中位数为 $8,000</li>\n<li>这些实习生每年的收入大约为 84,000 美元，远高于美国的工资中位数。</li>\n</ul>\n<p>如今美国就业形势喜人，是大学生和新毕业生进入劳动力市场开始职业生涯的好时机。<mark>由于失业率处于历史最低水平且工作需求不断增加，求职者在市场上处于主导地位，</mark>雇主愿意为需求高而供应短缺的职位和技能支付高额报酬。</p>"}},{"node":{"frontmatter":{"title":"Papa Parse 5.0发布","publish":true,"cover":"","showCover":true,"date":"2019-05-10","category":"frontend","url":"https://github.com/mholt/PapaParse","author":"Matt Holt","translator":"","tags":["csv"],"priority":1},"html":"<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token comment\">//解析字符串</span>\nPapa<span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>csvString<span class=\"token punctuation\">[</span><span class=\"token punctuation\">,</span> config<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">//解析本地文件 参见FileReader</span>\nPapa<span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>file<span class=\"token punctuation\">,</span> config<span class=\"token punctuation\">)</span>\n\n<span class=\"token comment\">//解析远程文件</span>\nPapa<span class=\"token punctuation\">.</span><span class=\"token function\">parse</span><span class=\"token punctuation\">(</span>url<span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n\tdownload<span class=\"token punctuation\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n\t<span class=\"token comment\">// rest of config ...</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">//json转csv</span>\nPapa<span class=\"token punctuation\">.</span><span class=\"token function\">unparse</span><span class=\"token punctuation\">(</span>data<span class=\"token punctuation\">[</span><span class=\"token punctuation\">,</span> config<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"Deepfake 盛行背后：合成数据到底有什么用？","publish":true,"cover":"https://constatic.geekbang.org/infoq/5ceaa8d5b7e2d.png?imageView2/0/w/800","showCover":true,"date":"2019-05-29","category":"python","url":"https://www.infoq.cn/article/TWe-q9gupK4CSlshG7GB","author":"Astasia Myers 译者 Sambodhi","translator":"","tags":["Machine Learning"],"priority":1},"html":"<p>像 Google 这样的大公司拥有大量难以突破的数据护城河。今天，正在捕获数据的公司正在以手工的方式标记数据，这可能是缓慢的、昂贵的和低质的方式。如果使用合成数据的话，就可以帮助公司绕过这些限制，使数据民主化。</p>\n<p>可以使用 Unreal、Blender 和 Unity 等游戏引擎以编程方式来创建合成数据。</p>\n<p>域随机化通过以非真实感的方式，随机干扰环境，有意放弃照片级的真实感，迫使网络学会专注于图像的基本特征。</p>\n<p>由于合成实体数据可以删除姓名、电子邮件、社会安全号码等信息，但仍然能够反映出基础数据集，因此受到了隐私问题的推动。这有助于数据科学家在不访问敏感信息的情况下进行实验。</p>"}},{"node":{"frontmatter":{"title":"VS Code 的全栈 Web 模板 WebTemplateStudio","publish":true,"cover":"","showCover":true,"date":"2019-05-17","category":"nodejs","url":"https://www.oschina.net/p/webtemplatestudio","author":"xplanet@OSCHINA","translator":"","tags":["vscode"],"priority":1},"html":"<p>项目类型：目前只支持一种类型：Fullstack 应用程序。\n框架：目前支持一个前端框架：React.js，和一个后端框架：Node.js。\n应用页面：当前页面模板包括：空白页面、公共布局和实现常见模式的页面（例如网格或列表）。\n云服务：当前支持的服务包括存储（Azure Cosmos DB）和计算（Azure 功能）。</p>"}},{"node":{"frontmatter":{"title":"Segment 放弃了微服务","publish":true,"cover":"","showCover":true,"date":"2019-05-27","category":"devops","url":"https://www.infoq.cn/article/v3VjP*BYtY3qhD3438ay","author":"Alexandra Noonan 译者 平川","translator":"","tags":["microservice"],"priority":1},"html":"<p>2017 年初，Segment 的一个核心产品达到了一个临界点。这就像我们从微服务的树上掉下来，并在下落的过程中砸到每根树枝一样。小团队没有让我们更快地前进，相反，我们发现自己陷入了复杂性爆炸的泥潭。这种架构的基本好处变成了负担。我们的速度急剧下降，我们的缺陷率却呈现爆炸式增长。</p>\n<p>从单代码库-》多代码库+共享代码库-》再回到单代码库。主要是还是基于运维的原因。</p>\n<p>一旦所有目标的代码都存在于一个代码库中，就可以将它们合并到一个服务中。由于每个目标都存在于一个服务中，我们的开发人员的工作效率得到了显著提升。<mark>我们不再需要因为变更一个共享库而部署 140 多个服务。</mark>一个工程师可以在几分钟内完成服务部署。</p>\n<p>从微服务架构到整体的单体架构是一个巨大的改进，但是，也有一些妥协：</p>\n<p>故障隔离很困难。由于所有内容都在一个整体中运行，如果在一个目标引入了导致服务崩溃的 Bug，那么所有目标服务都会崩溃。我们有全面的自动化测试，但测试有其局限性。<strong>我们目前正在研究一种更加健壮的方法，以防止一个目标使整个服务宕掉，同时又保持所有目标都在一个单体中。</strong></p>\n<p><strong>我们需要一个健壮的测试套件，把所有的东西都放在一个代码库中</strong>。如果没有这个，我们就会和当初决定把它们分开时一样。</p>"}},{"node":{"frontmatter":{"title":"PostGIS 3并行查询不再需要额外配置","publish":true,"cover":"https://blog.cleverelephant.ca/images//2017/parallel_4.jpg","showCover":true,"date":"2019-05-30","category":"database","url":"https://blog.cleverelephant.ca/2019/05/parallel-postgis-4.html","author":"Paul Ramsey","translator":"","tags":["postgres"],"priority":1},"html":"<p>PostgreSQL 12 and PostGIS 3 并行空间查询不再需要额外的配置。</p>\n<p>包括三种查询处理</p>\n<ul>\n<li>Parallel sequence scans,</li>\n<li>Parallel aggregates, and</li>\n<li>Parallel joins!!</li>\n</ul>\n<p>只需要增加你的计算处理内核(core)的数量。</p>\n<p>此改进是由于加入了<a href=\"https://www.postgresql.org/message-id/flat/15193.1548028093%40sss.pgh.pa.us\">优化了核心空间查询功能实现</a>。</p>"}},{"node":{"frontmatter":{"title":"W3C与WHATWG协同推进开放Web平台建设","publish":true,"cover":"","showCover":true,"date":"2019-05-28","category":"frontend","url":"https://www.chinaw3c.org/blog-w3c-and-whatwg-to-work-together-to-advance-the-open-web-platform.html","author":"chinaw3c","translator":"","tags":["w3c"],"priority":1},"html":"<p>W3C CEO Jeff Jaffe：我在此高兴地宣布 W3C 与 WHATWG 经过协商现最终签署了一份《合作备忘录》作为双方认可合作模式，继而共同开发相同的 HTML 与 DOM 规范。</p>"}},{"node":{"frontmatter":{"title":"Zdog-基于canvas的伪3d引擎","publish":true,"cover":"","showCover":true,"date":"2019-05-28","category":"frontend","url":"https://github.com/metafizzy/zdog","author":"Metafizzy","translator":"","tags":["3d"],"priority":1},"html":"<p>目前看到的是代码创建模型，不能导入3d模型？</p>"}},{"node":{"frontmatter":{"title":"dbkoda-开源mongo GUI客户端1.1发布","publish":true,"cover":"https://www.dbkoda.com/assets/images/art/screen-09.jpg","showCover":true,"date":"2019-05-29","category":"database","url":"https://www.dbkoda.com","author":"Southbank Software","translator":"","tags":["mongo"],"priority":1},"html":"<p>试用了一下，样子很酷，有以下问题:</p>\n<ul>\n<li>不知道怎么查看 json 格式</li>\n<li>不知道怎么创建 database</li>\n<li>提示功能没怎么起作用</li>\n</ul>\n<p>感觉还是不如 ROBOT 3T</p>"}},{"node":{"frontmatter":{"title":"mongo atlas现在也支持Azure和GCP的私有虚拟网络","publish":true,"cover":"","showCover":true,"date":"2019-05-14","category":"database","url":"https://www.mongodb.com/blog/post/atlas-mapped-private-network-peering-on-azure--gcp","author":"Leo Zheng","translator":"","tags":["mongo"],"priority":1},"html":"<p>至此 Atlas 支持 AWS,Azure,GCP 三个平台的私有虚拟网络。</p>"}},{"node":{"frontmatter":{"title":"mongo 的数组 schema 定义","publish":true,"cover":"","showCover":true,"date":"2019-05-10","category":"database","url":"https://www.mongodb.com/blog/post/json-schema-validation--checking-your-arrays?elqTrackId=d302f93c945d4d07b7b73ad4cd3eeab1&elq=73c3b8ce386d43e99efdb4f8829681cd&elqaid=8398&elqat=1&elqCampaignId=11890","author":"Ken W. Alger","translator":"","tags":["mongo"],"priority":1},"html":"<p>见下面示例的<code class=\"language-text\">dyes</code>字段</p>\n<div class=\"gatsby-highlight\" data-language=\"sql\"><pre class=\"language-sql\"><code class=\"language-sql\">db<span class=\"token punctuation\">.</span>foodColor<span class=\"token punctuation\">.</span><span class=\"token keyword\">drop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\ndb<span class=\"token punctuation\">.</span>createCollection <span class=\"token punctuation\">(</span> <span class=\"token string\">\"foodColor\"</span><span class=\"token punctuation\">,</span>\n{\n    validator:\n    {\n        $jsonSchema:\n      {\n        bsonType: <span class=\"token string\">\"object\"</span><span class=\"token punctuation\">,</span>\n        required: <span class=\"token punctuation\">[</span><span class=\"token string\">\"name\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"box_size\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"dyes\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n        properties:\n        {\n            _id: {}<span class=\"token punctuation\">,</span>\n            name: {\n                bsonType: <span class=\"token punctuation\">[</span><span class=\"token string\">\"string\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n                description: <span class=\"token string\">\"'name' is a required string\"</span>\n            }<span class=\"token punctuation\">,</span>\n            box_size: {\n                <span class=\"token keyword\">enum</span>: <span class=\"token punctuation\">[</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">6</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n                description: <span class=\"token string\">\"'box_size' must be one of the values listed and is required\"</span>\n            }<span class=\"token punctuation\">,</span>\n            dyes: {\n                bsonType: <span class=\"token punctuation\">[</span><span class=\"token string\">\"array\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n                minItems: <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// each box of food color must have at least one color</span>\n                uniqueItems: <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n                additionalProperties: <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n                items: {\n                    bsonType: <span class=\"token punctuation\">[</span><span class=\"token string\">\"object\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n                    required: <span class=\"token punctuation\">[</span><span class=\"token string\">\"size\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"color\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n                    additionalProperties: <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n                    description: <span class=\"token string\">\"'items' must contain the stated fields.\"</span><span class=\"token punctuation\">,</span>\n                    properties: {\n                        size: {\n                          <span class=\"token keyword\">enum</span>: <span class=\"token punctuation\">[</span><span class=\"token string\">\"small\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"medium\"</span><span class=\"token punctuation\">,</span> <span class=\"token string\">\"large\"</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n                          description: <span class=\"token string\">\"'size' is required and can only be one of the given enum values\"</span>\n                                }<span class=\"token punctuation\">,</span>\n                        color: {\n                          bsonType: <span class=\"token string\">\"string\"</span><span class=\"token punctuation\">,</span>\n                          description: <span class=\"token string\">\"'color' is a required field of type string\"</span>\n                                }\n                    }\n                }\n            }\n        }\n      }\n    }\n}<span class=\"token punctuation\">)</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"react hook循环检测工具","publish":true,"cover":"","showCover":true,"date":"2019-05-17","category":"frontend","url":"https://github.com/kentcdodds/stop-runaway-react-effects","author":"Kent C. Dodds","translator":"","tags":["react"],"priority":1},"html":"<p>react <a href=\"https://zh-hans.reactjs.org/docs/hooks-effect.html\">useEffect</a> 和 <a href=\"https://zh-hans.reactjs.org/docs/hooks-reference.html#uselayouteffect\">useLayoutEffect</a>都是在渲染之后触发，那么如果在这里面再次出发了渲染，就造成了递归。</p>\n<p><a href=\"https://github.com/kentcdodds/stop-runaway-react-effects\">stop-runaway-react-effects</a>可以在开发时检测这种问题。它是通过包装useEffect和useLayoutEffect来达到目的的。</p>\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>hijackEffectHook<span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'stop-runaway-react-effects'</span>\n\n<span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>process<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">NODE_ENV</span> <span class=\"token operator\">!==</span> <span class=\"token string\">'production'</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">hijackEffects</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>"}},{"node":{"frontmatter":{"title":"京东开源Alita: ReactNative对微信小程序转换工具开源","publish":true,"cover":"https://github.com/areslabs/alita/raw/master/docs/static/wxalita.gif","showCover":true,"date":"2019-05-29","category":"frontend","url":"https://github.com/areslabs/alita","author":"ARES Labs","translator":"","tags":["React Native"],"priority":1},"html":"<p>一套把 React Native 代码转换成微信小程序代码的转换引擎工具</p>\n<blockquote>\n<p>目前文档还不算很详细。</p>\n</blockquote>"}},{"node":{"frontmatter":{"title":"react-div-100vh解决手机浏览器100vh问题","publish":true,"cover":"https://raw.githubusercontent.com/mvasin/react-div-100vh/master/images/react-div-100vh.png","showCover":true,"date":"2019-05-30","category":"frontend","url":"https://github.com/mvasin/react-div-100vh","author":"Mikhail Vasin","translator":"","tags":["react"],"priority":1},"html":"<p><a href=\"https://segmentfault.com/a/1190000018341214\">CSS3常见问题：100vh在移动浏览器中不是固定的，恒定的</a> </p>\n<p>手机浏览器加载页面时,所有浏览器都有一个顶级菜单（例如显示地址栏），当您开始滚动页面时，该菜单会向上滑动。这个时候该菜单会变小，由于100vh仅在视口的可见部分计算，因此会导致所有布局都重新绘制并重新调整，对用户体验的糟糕跳跃效果。</p>\n<p><a href=\"https://github.com/mvasin/react-div-100vh\">react-div-100vh</a>的解决方案就是，监听resize事件动态修改样式。</p>"}},{"node":{"frontmatter":{"title":"使用picture不要使用background-image","publish":true,"cover":"","showCover":true,"date":"2019-05-28","category":"frontend","url":"https://nystudio107.com/blog/the-css-background-image-property-as-an-anti-pattern","author":"Andrew Welch 摘译 Ka","translator":"","tags":["edge"],"priority":1},"html":"<p>background-image 方式</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 style-attr language-css\"><span class=\"token attr-name\">\n  <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">background-image</span><span class=\"token punctuation\">:</span> <span class=\"token url\">url('/some/man-with-a-dog.jpg')</span><span class=\"token punctuation\">;</span></span>\n<span class=\"token attr-value\">            <span class=\"token property\">background-size</span><span class=\"token punctuation\">:</span> cover<span class=\"token punctuation\">;</span></span><span class=\"token punctuation\">\"</span></span>\n<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<p>picture 方式</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>picture</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>img</span>\n    <span class=\"token attr-name\">src</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>/some/man-with-a-dog.jpg<span class=\"token punctuation\">\"</span></span>\n    <span class=\"token attr-name\">alt</span><span class=\"token attr-value\"><span class=\"token punctuation\">=</span><span class=\"token punctuation\">\"</span>Man with a dog<span class=\"token punctuation\">\"</span></span><span class=\"token style-attr language-css\"><span class=\"token attr-name\">\n    <span class=\"token attr-name\">style</span></span><span class=\"token punctuation\">=\"</span><span class=\"token attr-value\"><span class=\"token property\">object-fit</span><span class=\"token punctuation\">:</span> cover<span class=\"token punctuation\">;</span></span><span class=\"token punctuation\">\"</span></span>\n  <span class=\"token punctuation\">/></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>picture</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>注意<code class=\"language-text\">object-fit: cover</code></p>\n<ul>\n<li>有利于 SEO</li>\n<li>有利于 Acces­si­bil­i­ty</li>\n<li>支持.webp</li>\n<li>可配合 src­set 自适应提升性能</li>\n</ul>"}},{"node":{"frontmatter":{"title":"在线grid布局生成器","publish":true,"cover":"https://camo.githubusercontent.com/12984818e7ee47c8a1afc3ca5d300834162703c4/68747470733a2f2f73332d75732d776573742d322e616d617a6f6e6177732e636f6d2f732e6364706e2e696f2f32383936332f6f672d637373677269642e6a7067","showCover":true,"date":"2019-05-14","category":"frontend","url":"https://cssgrid-generator.netlify.com/","author":"Sarah Drasner 摘译 Ka","translator":"","tags":["css"],"priority":1},"html":"<p>鼠标选择多个格子表示合并。\n一个格子点多次则会在此位置上生成多个div。</p>\n<p>问题：需要一个回退操作。</p>"}},{"node":{"frontmatter":{"title":"吵起来-Google强制Edge 预览版用户浏览Modern YouTube 时使用chrome","publish":true,"cover":"https://www.thurrott.com/wp-content/uploads/sites/2/2019/05/youtubeedge.jpg","showCover":true,"date":"2019-05-28","category":"misc","url":"https://www.thurrott.com/google/207371/google-now-forces-microsoft-edge-preview-users-to-use-chrome-for-the-modern-youtube-experience","author":"Mehedi Hassan 摘译 Ka","translator":"","tags":["edge"],"priority":1},"html":"<p>基于Chromium的微软新Edge浏览器的用户爆料：两天前使用google旗下youtube网站的“modern YouTube experience”还好好的，突然youtube告知不支持的浏览器，请下载chrome。</p>\n<p>然后就人们吵起来了！有说是个偶然bug，更多人倾向于认为google故意作恶。</p>\n<p>这意味着“从保守转向开放的微软”还是“从不作恶走向反面的谷歌”？</p>"}},{"node":{"frontmatter":{"title":"实时消息总线选择","publish":true,"cover":"","showCover":true,"date":"2019-05-28","category":"database","url":"https://www.datanami.com/2019/05/28/assessing-your-options-for-real-time-message-buses/","author":"Alex Woodie","translator":"","tags":["realtime"],"priority":1},"html":"<h2 id=\"apache-kafka\"><a href=\"#apache-kafka\" 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>Apache Kafka</h2>\n<ul>\n<li>producers 和 consumers 模式</li>\n<li>依赖 Apache Zookeeper 管理集群</li>\n<li>一定时间内保留消息历史</li>\n<li>原先用于 linkedin</li>\n<li>项目创建者后台创建了 Confluent</li>\n<li>流式处理可与 Apache Flink, Apache Storm, 或 Apache Spark Streaming 很好的配合。</li>\n</ul>\n<h2 id=\"apache-pulsar\"><a href=\"#apache-pulsar\" 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>Apache Pulsar</h2>\n<ul>\n<li>分布式 pub-sub 消息系统</li>\n<li>原先用于 yahoo</li>\n<li>也基于 Zookeeper</li>\n<li>基于 Apache BookKeeper 实现排序</li>\n<li>背后由 Streamlio 商业支持</li>\n<li>同一个 api 接口使用 quque 或者 pub-sub</li>\n<li>容易扩展</li>\n</ul>\n<h2 id=\"rabbitmq\"><a href=\"#rabbitmq\" 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>RabbitMQ</h2>\n<ul>\n<li>Erlang 实现</li>\n<li>Advanced Message Queuing Protocol (AMQP)</li>\n<li>Streaming Text Oriented Messaging Protocol (STOMP)</li>\n<li>Message Queuing Telemetry Transport (MQTT)</li>\n</ul>\n<h2 id=\"apache-activemq\"><a href=\"#apache-activemq\" 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>Apache ActiveMQ</h2>\n<ul>\n<li>2007 开始的老项目，由 Apache Software Foundation 支持</li>\n<li>Java 编写</li>\n<li>支持 JMS, STOMP, MQTT, AMQP, REST, 和 WebSockets.</li>\n<li>支持 Zookeeper</li>\n</ul>\n<h2 id=\"tibco-messaging\"><a href=\"#tibco-messaging\" 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>TIBCO Messaging</h2>\n<ul>\n<li>更老的一个工具</li>\n<li>The Information Bus COmpany (TIBCO)</li>\n<li>支持 JMS</li>\n<li>支持 MQTT</li>\n</ul>"}},{"node":{"frontmatter":{"title":"我放弃了成为一个全栈开发工程师的理想","publish":true,"cover":"","showCover":true,"date":"2019-05-29","category":"misc","url":"https://www.infoq.cn/article/girKQeiW9YXAt*k9ujfB","author":"Artur Martsinkovskyi 译者 Sambodhi","translator":"","tags":["some"],"priority":1},"html":"<p>随着时间的推移，这一行业正在越来越深地陷入了以开发人员为中心的工程流程，不知不觉花掉了很多时间；<strong>而开发人员一人则承担了越来越多的责任。</strong></p>\n<p>我认为拓宽知识面，运用对你所负责的部分的理解来更好地完成你所负责的部分，还是有好处的，<mark>但要让开发人员成为这样的一个人：对各种领域样样都懂但无一精通，如此一来，会直接影响代码质量、解决方案的选择以及所开发项目的未来。</mark></p>\n<p>要知道我们的大脑空间是有限的，但我们可以对一个或几个领域的更深、更好的知识来填充它，或者开始汲取多个领域的信息，<mark>结果得到的就是对所有事物都是肤浅的了解。这种知识体系创造了信心泡沫，</mark>不幸的是，这种信心并不能证明自己的正确性，结果导致了更槽糕的解决方案，如重新发明轮子、错误的技术选型、用显微镜敲钉子。</p>"}},{"node":{"frontmatter":{"title":"流式字体的现状","publish":true,"cover":"https://betterwebtype.com/assets/img/posts/state-of-fluid-web-typography/css-locks.mov.gif","showCover":true,"date":"2019-05-14","category":"frontend","url":"https://betterwebtype.com/articles/2019/05/14/the-state-of-fluid-web-typography/","author":"Matej Latin 摘译 Ka","translator":"","tags":["font"],"priority":2},"html":"<p>流式字体(FULLY FLUID TYPOGRAPHY)此处指的是使用viewpoint unit定义的字体。</p>\n<p>流式字体例子:</p>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token selector\">html</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 1.3vw<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">h1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 3vw<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>css锁响应流式字体例子:</p>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token selector\">body</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> <span class=\"token function\">calc</span><span class=\"token punctuation\">(</span>[minimum size] + <span class=\"token punctuation\">(</span>[maximum size] - [minimum size]<span class=\"token punctuation\">)</span> * <span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>100vw - [minimum viewport width]<span class=\"token punctuation\">)</span> / <span class=\"token punctuation\">(</span>[maximum viewport width] - [minimum viewport width]<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>作者认为并不适合现在使用：</p>\n<ul>\n<li>用户不能控制字体大小</li>\n<li>覆盖了用户定义的浏览器默认字体大小</li>\n</ul>\n<p>目前作者认为还是应该使用rem的响应式字体：</p>\n<div class=\"gatsby-highlight\" data-language=\"css\"><pre class=\"language-css\"><code class=\"language-css\"><span class=\"token selector\">html</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 100%<span class=\"token punctuation\">;</span>\n\n  <span class=\"token atrule\"><span class=\"token rule\">@media</span> <span class=\"token punctuation\">(</span><span class=\"token property\">min-width</span><span class=\"token punctuation\">:</span> 768px<span class=\"token punctuation\">)</span></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 112.5%<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token selector\">h1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 3rem<span class=\"token punctuation\">;</span>\n\n  <span class=\"token atrule\"><span class=\"token rule\">@media</span> <span class=\"token punctuation\">(</span><span class=\"token property\">min-width</span><span class=\"token punctuation\">:</span> 768px<span class=\"token punctuation\">)</span></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 3.5rem<span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>"}}]}}