Ruby 2.7.0 上手体验以及问题记录

正如过去的每个版本一样,Ruby 最新大版本 2.7.0 在圣诞节那一天正式发布了。空下来以后,我第一时间开始使用了。因为里面有一个我期待已久的新功能,那就是 block default parameters。 在 2.7 以前,Ruby 里面写一个带参数的 block 是这样的。 [1, 2, 3].each { |item| puts item } Block 的参数放在两个|中间,这跟目前流行的大多数语言都不一样,非常的不直观,而且这个|符号也不好敲。 在 2.7 以后,你可以用_1 来引用第一个参数,_2 来引用第二个参数。所以,上面的例子就变成了: [1, 2,…

Continue ReadingRuby 2.7.0 上手体验以及问题记录

PostgreSQL 数据库从9.1版本升级到11.5

## 起因 === # 如果你不想听我自言自语,请跳到以下“升级”部分。 随着年龄越来越大,我在技术上的“最求”也变得更保守了,慢慢的,我开始信奉这样一句名言 Don't fix what's not broken -- 不知道是谁说的不过不是我 这次选择这么大跨度的一个升级(很大吗?是的,9.1版本是2011年发布的,那一年,我还没毕业)自然是有原因的。 之前说过,打卡团服务器是用Elixir(一门语言)/Phoenix(一个Web框架)写的,这是个错误。至于为什么说这是个错误,以后有时间写写(这句话好像之前说过?)。 于是,最近一直想把它迁移到我信仰的Ruby on Rails(RoR)。当然,“迁移”是没时间迁移的,永远都没时间迁移。准确的说,是新功能用RoR开发,原来的功能就留着(“Don't fix what's not broken”,remember?)。 但是搭建好Rails scaffold之后,发现数据库连接不上。老是提示这样一个错误: Traceback (most recent call last): 2:…

Continue ReadingPostgreSQL 数据库从9.1版本升级到11.5

我对Embedding的理解

Embedding是NLP中,用来表示一个词的常见的方式。不过,他的用途其实不仅仅可以用在NLP中,在简单的线性回归或逻辑回归中 ———— 进而在神经网络中,也可以使用到这个东西。 我当初在学习Embeding这个概念的时候,花了比较长一段时间才算真正理解。我不知道到底是这个概念本身理解起来就比较难,还是容易遗忘的原因。Anyway,因为这一点,我决定写一篇文章,说说我对Embedding的理解。 在回答什么叫Embedding之前,我们先提出一个问题:给定任意的两个东西,怎么样来衡量他们之间的相似性呢? 举个例子,比如说,牛奶、咖啡和苹果。通常意义下,可能大部分人都会认为“牛奶”和“咖啡”更相似,其他两对组合“牛奶”和“苹果”以及“咖啡”和“苹果”没那么相似。 如果要进一步问为什么,大家可能会说,“牛奶”和“咖啡”都是液体,都是可以喝的,都是常见饮料,都是装在杯子或瓶子里面的等等等等。也就是说,我们会想出某一些角度,或者说一些特征,来衡量他们的相似性。这些“角度”或者说“特征”,我们用稍微显得专业一点的词来说,叫做维度。 如果我们把主要考虑的几个维度简单的列一下,可能会得出以下的一些: 是否食物、是否液体、是否需要人为加工、颜色、味道等等。列出这些维度以后,我们可以给这三个考察对象的每一个维度都分别“打个分”,分配一个数值。如下: 是否食物 是否液体 人为加工 颜色 味道 牛奶 1 1 0.8 -1 1 咖啡 1 1 0.9 -16777216 2 苹果 1 0.2 0.1…

Continue Reading我对Embedding的理解

PyTorch自动求导(Autograd)原理解析

我们知道,深度学习最核心的其中一个步骤,就是求导:根据函数(linear + activation function)求weights相对于loss的导数(还是loss相对于weights的导数?)。然后根据得出的导数,相应的修改weights,让loss最小化。 各大深度学习框架Tensorflow,Keras,PyTorch都自带有自动求导功能,不需要我们手动算。 在初步学习PyTorch的时候,看到PyTorch的自动求导过程时,感觉非常的别扭和不直观。我下面举个例子,大家自己感受一下。 >>> import torch >>> >>> a = torch.tensor(2.0, requires_grad=True) >>> b = torch.tensor(3.0, requires_grad=True) >>> c = a + b >>> d = torch.tensor(4.0,…

Continue ReadingPyTorch自动求导(Autograd)原理解析

把 Postgresql 数据库内容从 10.xxx 升级到 11.2

我 Mac 本地的 psql version 不知道何时何因被升级到了 11.1_1。今天尝试使用的时候,提示: FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 10.xxx, which is not compatible with this…

Continue Reading把 Postgresql 数据库内容从 10.xxx 升级到 11.2

记打卡团服务器的一(三)次升级:从 Ubuntu 12.04 到 18.04

正月初六,乘着春节假期的最后一天,我窝在家里,一鼓作气,把我的一个业余项目(见证打卡团)的服务器,从古老的 Ubuntu 12.04 连续升级了三次,到了最新的 LTS 版本,18.04。 Ubuntu 12.04 -> Ubuntu 14.04 Ubuntu 14.04 -> Ubuntu 16.04 Ubuntu 16.04 -> Ubuntu 18.04 你可能会问,为什么不直接从 12.04 升级到 18.04 呢?这是因为系统不支持这样升级,只能两个大版本一步一步升级。 ## 升级方法 其实三次升级的方法(或者说过程)都是一样的。网上文章也有很多,我主要参考的是这篇文章,一方面是因为这篇文章的作者的服务器也是在阿里云上,跟我的一样,二是因为这篇文章写得比较清楚,一步一步截图都有。 在开始之前,可以考虑把…

Continue Reading记打卡团服务器的一(三)次升级:从 Ubuntu 12.04 到 18.04