0%

1. 概述

最近看技术论坛,发现提到 fly.io 的次数越来越多了。 fly.io 是一个容器化的部署平台,只需要一个Dockerfile文件就能部署代码到fly.io 的服务器上,同时还自动生成域名。其他的好处多多,我根据自己体验,我总结成了下面的这些条:

  • 有免费使用的额度。不填写信用卡信息可以创建一个App,完全不收费;填写信用卡信息后每月有一定额度的免费流量,超过额度会额外收费。所以想做个小demo完全可以不填信用卡试用。 目前已经不支持无信用卡使用了,参见这里的讨论

  • 自动生成域名。比如你创建一个名字叫my_demo的App,那么部署完成后,就会生成my_demo.fly.dev的域名,可以全球访问,不用自己单独买域名了。

  • 可以 SSH 连接进入服务器。部署完成后,可以通过flyctl ssh console 命令登录部署的服务器,所以相当于你有了一台免费的VPS,可以做你想做的任何事情。

  • 部署简单,采用flyctl 命令集合统一部署;支持各种语言的各种框架来搭建部署环境,能自动识别当前目录下代码所采用的是哪个框架,自动部署。

下面简单记录一下使用的流程和一些教程里面没提及的使用命令。

阅读全文 »

1. 概述

ctypes 是Python标准库中提供的外部函数库,可以用来在Python中调用动态链接库或者共享库中的函数,比如将使用大量循环的代码写在C语言中来进行提速,因为Python代码循环实在是太慢了。大致流程是通过 ctypes 来调用C函数,先将Python类型的对象转换为C的类型,在C函数中做完计算,返回结果到Python中。这个过程相对是比较容易的。

现在有个更复杂的情况,我想要在C代码中调用Python中的某些函数来完成C代码的计算,比如在C代码的sort函数中,采用Python中定义的函数来进行大小判断。这个在Python中定义的函数在 ctypes 中称为回调函数 (callback function)。也就是说需要把Python函数当作变量传给C语言,想想还是有些难度。 但调查以后发现 ctypes 提供了 CFUNCTYPE来方便地进行回调函数定义,而C语言本身也是支持函数指针的,因此这个功能实现还算简单,具体展开如下。

阅读全文 »

概述

使用Git时,有时候不同分支的文件是不同步的,因此如果想要把别的分支的文件改动应用到当前分支,应该怎么操作呢?如果两边都有更新,该如何选择合并呢?这篇小文会对不同情形下的合并进行一个简单的介绍。

阅读全文 »

1. 一个故事

在大约十年以前,大二或大三的夏天,子浩 在科大西区活动中心的自习室内,给我帮忙安装Linux系统。当时他问了我一个问题,执行apt-get install 安装软件时,什么时候会弹出Do you want to continue?Y/[n]的提示呢?我当时说应该是包大小超过某个限制大小时会有这个提示吧,但我们随即验证了这个假设并不成立,安装一个很小的包也会有这个提示。当时没有得到明确的结论。

这个问题时不时在脑海中想起,每次想查一下弄个清楚,但始终没来得及调查。这样十年过去了,近日终于又想起来,通过谷歌搜索,发现StackOverflow上已经有人问过同样的问题,而且也有人进行了回答。至此这个小疑问算是解决了,我也不用每次念念不忘了。

具体原因是什么,请见下节。

阅读全文 »

1. 概述

今天才发现,在Python的列表推导式里面,也可以使用多个else,也就是elif的情况,具体来说,可以将下面的一长串的elif 语句转换成一句列表推导式,大大简化代码:

1
2
3
4
5
6
7
8
if cond1:
do1
elif cond2:
do2
elif cond3:
do3
else:
do4

转换成列表推导式如下:

1
res = [do1 if cond1 else do2 if cond2 else do3 if cond3 else do4][0]

Python喜爱值+1,代码行数-N。

阅读全文 »

1. 概述

Pytorch包含了Linear层,可以用来拟合y = w * x + b 形式的函数,其中wbias就是Linear层的weights和bias。这里写个拟合一次多项式的简单demo,作为一个小实验。

阅读全文 »