标签 知识 下的文章

编译原理从零到一 写一个 JSON parser

最近在做 Chrome 插件的高级功能,突然想要试试可视化选择 key 的路径,再一想,咦,这不就是个编译原理的典型例题吗?

于是我就开始着手学编译原理了,主要参考 dalao 的以下两篇文章:

编译原理一共分为四个部分:词法分析,语法(文法)分析,语义分析,代码生成。

词法分析,就是逐个解析之后加上词性,语法分析则是将词法分析后的结果解析为抽象语法树,语义分析是在语法分析时针对具体的实例加上额外的动作解释。具体的可以见上面的链接。

JSON 的首页有非常完整的词法和语法分析的 token 列表甚至是流程图,所以可以省去了一些劳动。

- 阅读剩余部分 -

MongoDB aggregate 入门

本文可能随着 MongoDB 使用技能的增长而更新,因为 aggregate 可以做的事情太多啦。

在 MongoDB 中,最强大的工具无异于 aggregate,aggregate 接受一个数组,数组的每一项都是管道(pipeline)对象。

管道的概念我们在 Linux 中也遇到过,可以把前面的返回值作为后者的输入值操作。

- 阅读剩余部分 -

MongoDB 初窥

这周开始由于项目的原因正式接触 MongoDB,之前稍微看过一点,但没怎么正式用过,一方面是设计思维牢固的钉死在了关系数据库的三大范式上(第四和 BC 有点过了……),另一方面是没有一个机会去做 PHP 以外的站(嗯,因为黄金搭档……)。

所以兜兜转转,稍微介绍一下 MongoDB 的一些事。

引言

MongoDB 是一个 NoSQL (Not Only SQL) 的数据库,提供面向文档的存储,操作简单,天生的分布式,带文件存储功能(GridFS)。

- 阅读剩余部分 -

双端队列 Deque 与 随机化队列 RandomizedQueue 的实现

双端队列,也就是栈和队列的结合,同时可以从头和尾进行进出栈 / 队列的功能,看一下他的数据结构就懂了:

public class Deque<Item> implements Iterable<Item> {
   public Deque()                           // construct an empty deque
   public boolean isEmpty()                 // is the deque empty?
   public int size()                        // return the number of items on the deque
   public void addFirst(Item item)          // add the item to the front
   public void addLast(Item item)           // add the item to the end
   public Item removeFirst()                // remove and return the item from the front
   public Item removeLast()                 // remove and return the item from the end
   public Iterator<Item> iterator()         // return an iterator over items in order from front to end
   public static void main(String[] args)   // unit testing (optional)
}

双端队列的实现还是比较简单的(虽然实际上还会是踩了一些微小的坑)。

- 阅读剩余部分 -

CSS Safari Hack

这次的标题起得比较简单是因为起标题太难了。

故事要从我在 Element 里发现了一个 Bug 说起,实际上这是 Safari 的渲染问题:http://jsfiddle.net/erpf75ky/4/

实际上在新版也能够复现这个问题,只要是 Safari,屡试不爽。

我们发现是table-layout的问题,在动态添加的table-layout似乎存在了一些微妙的渲染问题,于是在 Safari 下添加一个 class 去修改table-layout的状态,改变一次设置值即可正确渲染。

然而,这样的 Hack 在大部分浏览器里是没有必要的,所以就想着试试加了一下 Safari 的 Hack:

 // Simple hack for Safari 9+
_::-webkit-:not(:root:root), .el-table.loading {
    .el-table__body, .el-table__header {
        table-layout: auto;
    }
}

参考:

is there a css hack for safari only NOT chrome?

并查集与渗漏问题

前两周的时候看到有人推荐https://www.coursera.org/learn/algorithms-part1/的算法课,正好基础也忘得差不多了,觉得也是应该复(yu)习(xi)一下了,普林斯顿的这个公开课确实不错。

好了,废话不多说,来总结一下第一周,说说并查集和渗漏问题吧。

数据结构介绍

并查集是一个处理连接问题的数据结构,可以用这个结构快速的找到两个元素是否属于同一集合(或者说连通),和图的连通算法不同的是它忽略了路径的概念,只需要结果。

- 阅读剩余部分 -

CSS 解决 Chrome 限制最小12px字号问题

在 PC 上,有的时候我们并不需要 Chrome 给我们限定 12px 的最小字号,可是我们也不可能强行要求用户人工设置一波(当年 CodeCademy 的 Bug 就是因为最小字号的问题),所以必须想办法。

旧版 Chrome 可以通过:-webkit-text-size-adjust:none来设置,但其实是利用了一个微小的 Bug,在新版已经修复了,此外,这种方法会导致全局的缩放失效,不够友好。

在新版中,可以用 scale 解决缩放的问题,但如果是:-webkit-transform: scale(0.75);,Safari 也在缩放范围内,有两个方法解决:

第一是所有的浏览器统一的使用缩放,在 12px 的基础上操作。

- 阅读剩余部分 -