2019-01-07 Xie Jingyi
前几天和阿三聚了一餐,这大概是一年到头来我们为数不多能好好聊天的时间。 我们谈了很多,从考试到动漫到未来。令人惊讶的是,他表现出了一种忧虑,对未来的忧虑。在我看来这是很少见的。忧虑的一方面是关于短期的未来,有CSST面试的压力,以及成堆的考试;另一方面是更遥远的未来,暑研或是升学或是就业。再往前两天的团队聚餐上大家的讨论,关于资本寒冬的,关于机器学习的逐渐饱和,都给我们留下了深刻的印象。 我问他不做金融吗。他说经过暑假的实习他也对这个行业失去了兴趣,量化交易不过也是机械性的脑力劳动(如有冒犯请见谅,这是我凭回忆归纳的,然而我对这个行业一窍不通)。现在他也开始迷茫将来要做什么。 他说有点羡慕我的状态,对周围的环境不care,沉浸在自己 继续阅读 »
2019-01-06 Xie Jingyi
rustup v.s. cargo cargo 是 Rust 最底层的包管理器,类似 npm 或 pip。 rustup 是 Rust 的工具链管理器,允许开发者在多个不同版本的工具间切换。所谓工具不仅包括 rustc 和 cargo,还包括 rustfmt、racer 等一系列辅助开发的模块。类似于 Anaconda、Pipenv 之于 Python,或是 n 之于 Node.js。 Rust 的工具链默认存在于 ~/.cargo/bin 中,rustup 会用代理脚本覆盖其中的可执行文件,从而用户可以通过命令行标志方便地切换版本。 stable v.s. beta v.s. nightly Rust 官方默认提供三个通 继续阅读 »
2018-12-31 Xie Jingyi
四月,我大病了一场。先是呼吸时胸口隐隐作痛,我以为是运动伤害,毕竟始发时刚剧烈地骑完车。后而逐渐变成呼吸困难,镜子里的自己嘴唇发紫,睡觉时也像是有人扼着喉咙。我开始在傍晚时发烧。 清明前后,春寒未散。宿舍已没有了暖气。清明节我在宿舍躺了两天,睡到饭点起来吃,吃完继续睡。两个舍友出去玩了,合肥一直在下雨,屋里甚是寒冷。 躺在床上,我不停查找着可能的病源。我是个不轻易上医院的人,但这突如其来的状况着实让我害怕。我想在相关疾病的列表中寻求安慰,希望只是一场小病。为什么不上医院呢?去医院一切就定下来了,无论结果是好是坏。但如果不去,就还有无数的可能。我总是这么想。 入夜时,我也会想,如果这真是糟糕的病又该怎么办呢?我在一个陌生的城市, 继续阅读 »
2018-12-15 Xie Jingyi
一个依赖于外部状态 s 的伪函数 f' :: a -> b,我们可以将其改写为 f :: a -> s -> (b, s) 使其良定。即,在输入输出中显式传递状态 s。现在,我们需要利用 Monad 将状态传递过程隐藏起来。 注意到,输出值 (b, s) 中的末状态 s 不仅依赖于输入状态,更依赖于之前更改过状态的一系列函数及其逻辑。因此我们不能简单地将 Monad 定义为 (a, s) 类似的形式,否则两个函数用 >=> 结合的结果将与函数逻辑无关,这与我们的期望不符。 考虑如下定义: haskell newtype State s a = { runState :: s -> (a, s) } 由于 -> 的右结合性, 继续阅读 »
2018-12-14 Xie Jingyi
动机 pure functions 看似完美,但却不能模拟现实世界中的诸多任务。这是由于 pure functions 是良定的映射,对于特定的输入值会返回唯一的输出。这种模式在面对如下任务时会显得苍白无力: 有可能失败的任务。如大多数的 IO。 依赖外部状态的任务。如(伪)随机数生成器。 非确定性任务,即对于确定的输入可能有多个输出。这种在 IP 中较为少见。 对外界会造成影响的任务。如大多数的写入过程。 这些问题可以用数学中的域扩充技巧来解决。 域扩充 在数学中,当定义问题的范畴不足以容纳问题的解时,我们通常会对相关的范畴进行扩充。类似的技巧同样也可以应用在这里。 假设一个不良定的函数 f: A -> B: 如果 f 继续阅读 »
2018-11-18 Xie Jingyi
Motivation Functor solves the problem of mapping regular one-parameter functions into a sub-category, but that's not easy for functions with more than one parameters. Let's consider a function with two parameters f :: a -> b -> c, which can also read as a -> (b -> c). Applying fmap on f, we will get fmap f :: m a -> 继续阅读 »
2018-11-16 Xie Jingyi
新类型有自己的 data constructor (literals 可以看成特殊的 data constructor),由这一点来区分是否创建了新类型。 data 创建了新类型,可以有多个 data constructor。 newtype 创建了新类型,只能有一个 data constructor,同时新类型的内存布局与原来的类型相同。 type 没有创建新类型,只是建立了 alias,没有新的 data constructor。 type 常用于语义化类型,是业务逻辑层的概念。 ```haskell type ID = Int a = 1 :: ID b = a + 2 -- legal showID :: ID - 继续阅读 »
2018-11-10 Xie Jingyi
Prelude.foldl foldl 为 left-associative folding。 haskell foldl :: (b -> a -> b) -> b -> [a] -> b foldl f acc [] = acc foldl f acc (x:xs) = foldl f (f acc x) xs foldl (+) 0 [1..3] 等价于 (((0 + 1) + 2) + 3)。 尾递归,因此有 strict 版本 foldl' 求值时必须先到达栈底,遍历完列表,因此无法处理无穷列表 Data.List.foldl' foldl' 为 foldl 的 TRO 版本。 Prelude.foldr 继续阅读 »
2018-03-10 Xie Jingyi
写在前面 作者电脑有 4 个 CPU,因此使用 4 个线程测试是合理的 本文使用的 cpython 版本为 3.6.4 本文使用的 pypy 版本为 5.9.0-beta0,兼容 Python 3.5 语法 本文使用的 jython 版本为 2.7.0,兼容 Python 2.7 语法 若无特殊说明,作语言解时,python 指 Python 语言;作解释器解时,python 指 cpython more 本文使用的测速函数代码如下: ```python from future import print_function import sys PY2 = sys.version_info[0] == 2 因为 Jython 继续阅读 »
2018-03-08 Xie Jingyi
论文地址:https://arxiv.org/pdf/1612.00137 more 现有的 Pose Estimation 解决方案 Single Person Pose Estimation (SPPE) 只尝试估计一个人的姿势。早期曾使用诸如随机森林等机器学习方法,近几年采用深度学习方案,大致有如下几种: 基于 DNN 的 基于 CNN 的(如 RMPE 使用的 Hourglass) 其他架构,如 DeepPose 局限: 要求人能被精准定位,对人的位置十分敏感。 Multi Person Pose Estimation (MPPE) 可以估计多人的姿势,不同架构的框架对噪音(如 人的重叠、人的鲜有姿态)有不同的 继续阅读 »