{"componentChunkName":"component---src-pages-index-js","path":"/","result":{"data":{"site":{"siteMetadata":{"title":"😏"}},"allMarkdownRemark":{"edges":[{"node":{"excerpt":"这两天 ::MacStories:: 又推荐了一款新的笔记 App—Craft。你可以认为它是原生版的 notion，比较相似的使用体验，但是对网络条件依赖不高。iOS 版本的动效和恰到好处的 Haptic Touch，都让人爱不释手。如果不是重度 notion…","fields":{"slug":"/about-craft/"},"frontmatter":{"date":"2021/05/10","title":"Why use Craft","spoiler":"介绍 Craft 这款软件，还挺不错哦"}}},{"node":{"excerpt":"现代工业下肉类面对的挑战 肉本身没有任何问题，我们喜欢它的口感，也离不开它的蕴含的营养物质。有研究表明，人类之所以能从智人演化而来，一个重要的原因就是开始吃肉，从而让脑容量变大。 事实上我们也根本离不开肉，中国目前是肉类消费最大的国家，因为我们从吃不饱的时光中发展过来，不过 3…","fields":{"slug":"/Artificial-meat/"},"frontmatter":{"date":"2021/04/26","title":"人造肉(WIP)","spoiler":"本文尝试介绍一些人造肉的基本概念，为什么会出现人造肉，人造肉解决了为什么问题，人造肉目前的前景如何"}}},{"node":{"excerpt":"技术 在技术上，国产用的是灭活疫苗，也是最古老的第一代疫苗技术。而美国的辉瑞（其实辉瑞本身不研制疫苗技术，而是德国的 BioTech，辉瑞负责三期临床和市场工作）和 Moderna 用的是第三代的 mRNA…","fields":{"slug":"/Vaccine-Comparison/"},"frontmatter":{"date":"2021/04/07","title":"国产疫苗和美国疫苗","spoiler":"简单对比国产疫苗和美国疫苗"}}},{"node":{"excerpt":"如果要讨论隐私，不得不谈起一个广为人知的都市传说： 我刚和朋友聊到 XXX，为什么淘宝就给我推荐了 XXX，是不是这些软件在偷听？ 这段话我们可以分别从技术侧，叙事者侧来分析 首先从叙事者侧来看，这个「聊到 XXX」并不够精确，它没有说明聊到是仅仅聊到，还是也通过某个 app…","fields":{"slug":"/privacy/"},"frontmatter":{"date":"2021/03/26","title":"现代生活下的隐私问题(WIP)","spoiler":"个人视角看看当代隐私，iOS 14 如何改进了隐私"}}},{"node":{"excerpt":"Apple 股票跌倒 360 的时候没买，贪心，希望还能跌到 355，然后希望涨到 420。虽然在 8 月 2 日的时候，涨到了 425，市值超过 一万八千亿…… 但是仔细算一下，355 买和 360 买区别大么，一个是 16.4%，一个是 15.…","fields":{"slug":"/2020-08-02-thinking/"},"frontmatter":{"date":"2020/08/02","title":"八月感叹","spoiler":"一点小感想"}}},{"node":{"excerpt":"之前写过一篇关于 emoji 有趣的小知识，随着自己对 emoji 相关有更多的了解，并看了一点规范后，打算从更全面的视角和专业词汇，来讲述 emoji 的相关知识。 本文尝试讲解 Emoji…","fields":{"slug":"/emoji-again/"},"frontmatter":{"date":"2020/04/21","title":"成为一个 Emoji 公民","spoiler":"更加全面的理解 emoji"}}},{"node":{"excerpt":"用 Notion…","fields":{"slug":"/readlist/"},"frontmatter":{"date":"2020/03/10","title":"阅读清单","spoiler":null}}},{"node":{"excerpt":"本文将会从下面 3 个点，来披露遵循 a11y 的重要性和优点，不多就三个点。 HTML 语义化 合理的焦点 快捷键 关于  类标签本文先不深入讨论，我们应该先慢慢地改变自己的习惯，先由 HTML 语义化更好的组织代码的层级结构。接着通过合理的焦点控制，让用户能够使用 Tab…","fields":{"slug":"/lets-a11y/"},"frontmatter":{"date":"2019/12/02","title":"Let's a11y","spoiler":"a11y 才是决定你产品品质的关键"}}},{"node":{"excerpt":"NOTE： 手机到了，更新一波小发现。 虽然 iPhone 在每次发布会前都会被大大小小的曝光：外观，三摄，Logo…","fields":{"slug":"/buy-an-iphone11/"},"frontmatter":{"date":"2019/09/20","title":"对于新 iPhone 的看法","spoiler":"大哥换个肾？"}}},{"node":{"excerpt":"以前在面试候选人的时候，我总是喜欢先问一个问题： -1 的补码是多少？ 这么多次面试下来，结果令我很失望，绝大多数候选人，只是记住了大学时候学到的：取反加 1，接着就给出了 1000000000…","fields":{"slug":"/how-to-add/"},"frontmatter":{"date":"2019/09/01","title":"如何实现加法和减法","spoiler":"你知道 -1 的补码是多少吗？"}}},{"node":{"excerpt":"这篇文章其实在大学的时候就写好了, 不过今天突然忘记怎么写, 就重新看了一遍, 然后调整了一下. 虽然以前一直知道如何写一个随机数算法，但是从来不知道从理论上为什么能证明这个.\n直到看了 WiKi 的介绍，终于明白了原因。 算法起源 这个算法的刚开始的起源是在 193…","fields":{"slug":"/shuffle/"},"frontmatter":{"date":"2019/07/29","title":"Shuffle 算法","spoiler":"随机算法的基本实现"}}},{"node":{"excerpt":"一个月前，WWDC19 上推出的 SwiftUI，震惊了我和一众 iOS 开发者。这种类似 jQuery 向 React 推进的革命，也终于在 iOS 开发中挂起浪潮。据说这个项目开发了三年，和它配套的 Data Flow 框架 Combine…","fields":{"slug":"/first-look-of-swiftui/first look of swiftui/"},"frontmatter":{"date":"2019/07/07","title":"对于 SwiftUI 的一些认识","spoiler":"在写了一些 SwiftUI 代码后的初级看法"}}},{"node":{"excerpt":"想要正常的阅读本文，要求系统版本大于 iOS 12.1，或者 Android O。 101 大多数 Emoji 的 code 是大于 0xFFFF 的，也就说他们不位于 Unicode 的基本零平面上。在我看来，这主要的是差别是 首先 Emoji 是字体不是图片，在 Apple…","fields":{"slug":"/emoji/"},"frontmatter":{"date":"2019/05/19","title":"一些 Emoji 的有趣事情","spoiler":"🌈"}}},{"node":{"excerpt":"今天在听最新一期疯投圈，了解关于信息过载的问题，以及如何提升信息获取的效率。 URL…","fields":{"slug":"/toutiao/"},"frontmatter":{"date":"2019/05/12","title":"头条的对与错","spoiler":"头条没我想的那么坏"}}},{"node":{"excerpt":"背景 从开始接触异步请求和 Promise 后，就会发现这些操作很「套路化」。绝大多数的异步操作似乎都可以类似下面 👇 的代码： 这种套路话的方式，和  的引入，确实让我们在处理异步问题的时候简单了很多。但是这也带来了一些体验上的缺陷。在请求返回足够快（910…","fields":{"slug":"/solve-fresh-of-loading/"},"frontmatter":{"date":"2019/02/23","title":"解决 loading 闪烁的问题","spoiler":"无条件 loading 是有代价的"}}},{"node":{"excerpt":"背景 现公司是做电商的，电商就免不了和价格打交道。为了防止进度丢失，方便加减运行的问题，业界通用的方式是使用整数来表示。最小单位为分，123 就表示 “1 元 2 毛 3 分” 或者 ”1.23” 元，这个不需要过多介绍。 但是它们返回给前端用来展示的价格，也是这个 12…","fields":{"slug":"/division100/division100/"},"frontmatter":{"date":"2019/02/20","title":"为什么要除以 100?","spoiler":"一个整数除以 100 得到的浮点数，是否会丢失进度"}}},{"node":{"excerpt":"翻译自 Dan 的博客。文章很长:) 许多教程中提到 React 是一个 UI 库，这说得没什么问题。就像字面上一样，它确实是一个 UI 库！\n 我之前写过关于创建 UI 所遇到的挑战，但是这篇博客将采用一个不同的方式的来讨论 React—更接近 programming…","fields":{"slug":"/react-as-a-runtime/"},"frontmatter":{"date":"2019/02/02","title":"React as a UI Runtime","spoiler":"An in-depth description of the React programming model."}}},{"node":{"excerpt":"收集一些不为人所知的，React 的细节问题。帮助自己理顺 React 内部深层的逻辑。 Synthetic Event 和 DOM Event 同时出现的问题 首先解释下，为什么 React 会有 Synthetic Event 这个概念。主要两个原因 1…","fields":{"slug":"/react-trap/"},"frontmatter":{"date":"2019/01/02","title":"一些 React 中的刁钻问题","spoiler":"收集一些不为人所知的，React 的细节问题。帮助自己理顺 React 内部深层的逻辑"}}},{"node":{"excerpt":"NOTE: 8 月 15 号重写了内容，之前的描述有点太迷，完全没有逻辑性 以下分析基于 16.8  的实现其实是内部维护是一个新的对象，拥有四种状态，分别对应 Promise 的。它们是一个 enum，从 0-2 分别对应：\n\n\n 我们可以看一下 React…","fields":{"slug":"/react-lazy/"},"frontmatter":{"date":"2018/12/23","title":"React Lazy 的实现原理","spoiler":"简单讨论一下 React.lazy 内部实现"}}},{"node":{"excerpt":"原文系列: https://developers.google.cn/web/updates/2018/09/inside-browser-part1 之前，我们提到了 Chrome 的多进程构架和 URL…","fields":{"slug":"/browser/"},"frontmatter":{"date":"2018/10/05","title":"Inside look at modern web browser（翻译）","spoiler":"谷歌搬砖"}}},{"node":{"excerpt":"因为 Git 的操作实在太多，但是有些操作在很多时候又很重要，所以写一篇文章记录一下那些容易被忽略, 又较为常用的命令。 git 是饭桶的意思，因为 Linus 的自嘲 git init…","fields":{"slug":"/git/"},"frontmatter":{"date":"2018/08/12","title":"The Junior Git","spoiler":null}}},{"node":{"excerpt":"这篇文章主要是针对打算学习前端的小白，和想学点前端的后端大佬，为了提升你们的编码幸福感。 工欲善其功，必先利其器 简单介绍下背景，VSCode 是目前前端界最为流行的一款编辑器，每月一次的更新，强大的插件生态和 TypeScript…","fields":{"slug":"/vscode/"},"frontmatter":{"date":"2018/06/04","title":"使用 VSCode 搭建一个很爽的前端环境","spoiler":null}}},{"node":{"excerpt":"这篇文章有点标题党, 其实主要要强调的是 到处使用 PureComponent 是不对的. 和 Component…","fields":{"slug":"/purecomponent-is-harmful/purecomponent-is-harmful/"},"frontmatter":{"date":"2018/05/21","title":"PureComponent Considered Harmful","spoiler":"不要让所有的组件都是 PureComponent 或者 memo"}}},{"node":{"excerpt":"NOTE: 2019-08-25 调整一些描述和格式更新，并添加 pipeline 相关。 这篇文章主要是介绍 lodash 的 fp 模块, 通过它的特点来让 React 的  少写很多代码. 同样的原理也能放在 redux 的  上, 但是因为 lodash/fp…","fields":{"slug":"/lodash-fp/"},"frontmatter":{"date":"2018/04/02","title":"使用 lodash/fp","spoiler":"感受 fp 的强大"}}},{"node":{"excerpt":"在 immutable struct 或者说 functional programming 的影响下,  和 Object Spread 是我们离不开的操作. 不过它的功能真的是 shadow copy…","fields":{"slug":"/object-assign/"},"frontmatter":{"date":"2018/01/31","title":"Object.assign 的一些问题","spoiler":null}}},{"node":{"excerpt":"原文 AI(Artificial Intelligence) 和 ML(Machine Learning) 是当下最热的话题. 我们每天都能看到 AI 的字眼, 那些有抱负的程序员都说自己想学点 AI. 你也听到高层说他们想在服务中集成 AI…","fields":{"slug":"/deep-learning/"},"frontmatter":{"date":"2018/01/28","title":"Deep Learning Quick Guide（翻译）","spoiler":null}}},{"node":{"excerpt":"原文, 需要翻墙  作为一个刚毕业的计算机科学学生，在课堂上学到的东西和你在真实世界看到的东西会存在断层。各种循环操作： 不在话下。你可以不费吹灰之力写一个基于命令行的井字棋(Tic-Tac-Toe)游戏. 你还可以在 X86 上直接写汇编代码! 但是, 你对于 Facebook…","fields":{"slug":"/first-step-software-world/"},"frontmatter":{"date":"2018/01/16","title":"我进入编程世界的第一步（翻译）","spoiler":null}}},{"node":{"excerpt":"本文的出现离不开 Dan 的一篇卓越的 blog。\n原文章 一句话概括就是， 是  的返回值.\nElement 其实就是一个纯对象，这个对象定义了一些对于 React 来说很重要的属性.\n比如  这些的。举个实际的例子 上面的 type 就是这个 Element…","fields":{"slug":"/react-component-and-element/"},"frontmatter":{"date":"2018/01/14","title":"Element 和 Component 的区别","spoiler":"一个判断是否是 React 新手的概念"}}},{"node":{"excerpt":"这个问题可能非常老，写过代码的都知道使用 但是，需要注意的是，因为 JS 默认使用的是 UCS-2 来编码的，对于中文支持也貌似没问题。可是到了 Unicode 环境下，大量的 emoji，就会出问题咯。\n\n就像上面显示的这样。那改怎么解决呢？在 ES…","fields":{"slug":"/reverse-string/"},"frontmatter":{"date":"2018/01/12","title":"反转字符串","spoiler":null}}},{"node":{"excerpt":"Parcel 这种工具虽然号称零配置, 但是在 React 相关开关的时候还需要一些必要的配置才能让整个代码真的跑起来. 特别是如果需要 Hot Reloader 的时候. 如果使用 create-react-app…","fields":{"slug":"/parcel/Parcel 📦 和 React ⚛️ 的使用/"},"frontmatter":{"date":"2018/01/07","title":"Parcel 📦 和 React ⚛️ 的使用","spoiler":"你也用 parcel?"}}},{"node":{"excerpt":"花了一个晚上看了一下 UUID 的实现源码. 发现 UUID 有 5 个版本, 其中的特点分别为:\nV1: 以机子的网卡和时间戳以及一些其他的东西作为因子来生成一个唯一的标识符\nV2: 没有提及\nV3: 为了方便同样的标识符生成同样的 uuid, 用 MD5 来 hash…","fields":{"slug":"/uuid/UUID/"},"frontmatter":{"date":"2018/01/05","title":"UUID","spoiler":null}}},{"node":{"excerpt":"这几天不务正业, 在看 HTTP 以及 express 的服务端应用. 关于认证就有很多技巧. 什么基本认证, 记号认证, Passport 认证. 虽然其它认证都是通过 md5 或者 UUID…","fields":{"slug":"/base64/Base64 编码的简单尝试/"},"frontmatter":{"date":"2018/01/03","title":"Base64 编码的简单尝试","spoiler":null}}},{"node":{"excerpt":"作为个人博客的第一篇文章, 没有太多的意义, 就当为自己终于开通了博客做一个喝彩 🎉🎈\n在一年左右的前端学习时间中, 能构建出一个属于自己的博客, 也算是十分满足了.\n感谢  和  成为我的前端老师, 另外一个前端老师就是 MDN.  好了, 一段代码开始我的博客之旅.","fields":{"slug":"/hello-world/"},"frontmatter":{"date":"2017/12/31","title":"Hello World","spoiler":"第一篇博客 hhh"}}}]}},"pageContext":{}}}