使用 Supervisor 将你的 Python 程序变成服务

不少朋友都是用 Flask 框架来写小服务器的,方便又快捷,还能一键运行,很舒服。不过,如果你真的想把你的服务部署到服务器上,那你就会发现其实还有一些功课要做,这篇文章里,我们主要来谈谈如何将写好的程序在服务器上变成一个服务而不是终端里执行的命令。

如果我们用 Python 写了一个网站应用,那么它就需要一直运行来监听 HTTP 请求,如果在终端直接执行
[crayon-6908774e6[……]

点击跳转以继续阅读

macOS app 自动化上传发布到 AppCenter

之前我曾经写过macOS app 实现自动化 notarize 脚本,由于我的输入法使用微软的 HockeyApp 进行崩溃统计,所以我还需要把 app 上传到这里进行一次“发布”,好让 HockeyApp 能够收到对应版本的错误统计。

如今,微软的 HockeyApp 已经更新成了 AppCenter,自动化命令也十分友好,其实这个操作也可以加入到你的自动化脚本里边,一步到位。

点击跳转以继续阅读

在 macOS 上编译 Tensorflow 以开启 AVX2 和 FMA

在使用 Tensorflow 时,一直有一个奇怪的警告: Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA ,虽然不影响使用,但看着很烦,你可以用这个命令关闭它: os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' 。

不过,你有注意到吗?“ could speed up CPU computations”……嗯?!

背景

总之,根据官方所述,Ten[……]

点击跳转以继续阅读

正确使用 PIP 安装 Python 包 避免 TypeError: ‘module’ object is not callable

在此之前,我一直是这样在 macOS 上安装和使用 pip 的:

后来,这个方法失效了,变成了这样:

终于有一天,pip 提示我它需要更新,于是:

查询后,发现原来 Python 是要这样安[……]

点击跳转以继续阅读

WordPress 正文自动添加版权和原文链接

这几日博客文章又被别人拿去抓取了,虽然后来联系站长沟通解决,不过我还是要反思一下自己,文章正文中没有添加本文链接,导致即使被人抓取也无法拿到pingback……

插件法

总之,搜索了一通,似乎以前有一个插件可以一步到位(我恰好是那种喜欢一大堆插件的人),叫“Add Post URL”,不过这个插件已经下架了。

这个办法行不通,只好尝试代码级修改了:

改正文模板法

这个办法要求你的主题[……]

点击跳转以继续阅读

使用 ClamAV 和 Linux Malware Detection (LMD) 保护你的服务器

使用 CalmAV 扫描 /home

本文原创于落格博客,点击查看原文

 

通常,说起病毒木马,人们可能都会想起 Windows,实际上只要是操作系统,就会有漏洞,那么只要这个操作系统有人用,那就一定会有人利用这个漏洞来开发恶意软件(比如说病毒木马)。总之,由于 Windows 操作系统的用户远远大于 macOS 和各种类 Unix,于是很多人就觉得后者甚至是对病毒免疫的。

实际上并不是,虽然 Linux[……]

点击跳转以继续阅读

落格输入法 macOS 2 是如何实现免重启激活输入法的

在 macOS 上,安装输入法一直是一个噩梦,要打开系统输入法目录,要把输入法拖拽进这个目录,过程中还要输入密码,全手动也就罢了,还得重启后系统才能识别,真的是让人头疼的不行。

后来大家逐渐意识到这个问题,落格输入法也提供了 macOS 标准的 pkg 安装包。

说是这么说,但实际上似乎还是有办法让系统自动加载输入法的,比如搜狗就做到了免重启,安装后不光不需要重启系统就能识别,甚至安装[……]

点击跳转以继续阅读

使用 Mailgun 创建你的免费域名邮箱

这篇文章现在已经失效了,因为 Mailgun 不再提供免费额度,且把文中使用的必要功能“收件路由”设置为了高级用户功能不再免费提供,我换了另一家网站来实现域名邮箱,见:当 Mailgun 不再免费,你如何安置你的域名邮箱?

创建一个网站很容易,但要有一个和自己域名关联的邮箱地址 域名邮箱,似乎比较麻烦。对于中国站长来说,“QQ 域名邮箱” 似乎是唯一的选择,当然如果付费使用,那么使用[……]

点击跳转以继续阅读

为何我的 Fastlane 上传那么慢?

自动化

使用自动化工具处理 iOS 的 TestFlight 分发,是一件很惬意的事情,它能帮你节省很多时间,减少大量人工干预——尤其是像这种需要等很久才需要人工操作一下的事情,虽然并不会让你觉得很累,但大量的时间就这样浪费掉了。

使用 fastlane 一键编译、上传,然后等待苹果服务器处理完成,全自动发布 TestFlight,本来是一个很棒的操作,但由于网络环境的变化,我的 fast[……]

点击跳转以继续阅读

macOS app 实现自动化 notarize 脚本

根据苹果官方的说明,自 macOS 10.15 起,所有从互联网下载的未进行 notarize 的 app,默认将无法被打开,所以在 App Store 外分发的 app,也必须在发布前将 app 上传到苹果的服务器进行处理。

使用 Xcode 自带 archive 工具可以很方便地进行 notarize,但这个操作无法实现自动化处理,为了方便分发,我将 落格输入法 macOS 2 的分发流[……]

点击跳转以继续阅读

禁用 Android File Transfer 自动启动

Android File Transfer 是个好东西,可以在 macOS 中方便地给安卓手机传输文件等等,但有一点不好就是这东西会在后台驻留进程来监控usb插入,让人很不爽。

尤其是在插入 Android 设备时,自动弹出窗口,还连接失败(因为你来不及在手机上点授权),十分讨厌。

要禁用自动启动,首先打开 活动管理器,在里边搜索 Android File Transfer Agent[……]

点击跳转以继续阅读

从 cns11643 中文标准全字库生成仓颉和速成官方码表

一直以来,我对仓颉速成这对难兄难弟是很有意见的……网上流传的码表版本繁多,但名字都叫“仓颉”,和五笔对比起来,好歹五笔还分个 86 和 98,再新一点还有 新世纪 等等,但仓颉没有,不论什么版本的仓颉,都叫“仓颉”。

这就很尴尬,每个人用的仓颉码表都不一样,但不一样在哪里,他自己也不知道。

总之, 全字库(cns11643) 提供了一种官方的通用的中文编码,本来这个东西是用来弥补 utf8[……]

点击跳转以继续阅读

落格输入法是如何处理按键消息的

要做一款移动设备上的软键盘,那么怎么处理用户的点击位置,就是你遇到的第一个难题,在这个问题上,我也走了很长的路。

我把落格输入法开发以来的触控逻辑大致分类为三个阶段,现在分别来讲讲设计思路,希望能够对你有所帮助。

第一代触控引擎

显然,对于一个初学者来说,没什么比系统控件更好用的了,功能全,速度也不慢,业务逻辑完善,所以,落格输入法的第一代消息处理就是用的[crayon-6908774e[……]

点击跳转以继续阅读

df-dferh-01 中国区 Android 安装 Google Play Store 后报错 的 解决办法

在使用 Android 设备时,如果你购买的是一台中国区单独发行的定制版本 Android 设备,那么很有可能你的设备中并不内置谷歌套件,比如 Play Store。

这时候我们就需要自己安装它,安装的办法有很多,这里不再赘述。总之,一但你安装好,就会发现,即使开了代理,Play Store 也有可能在登录后无法正常加载内容(登录是正常的)。

此时会显示错误:df-dferh-01[……]

点击跳转以继续阅读

Ubuntu 超快部署 wireguard 服务端

新出的 Wireguard 很多人都想尝试,这里 VPN 到底适不适合用来翻墙我们先不讨论,先来看看怎么快速在 vps 上起一个 wireguard 服务。很多人听说这个服务配置起来特别复杂,所以望而却步,实际上很简单。

环境

这里我用最新的 ubuntu 18.04.2 来配置,首先你得有一个 vps,创建好后最好按照我的 购买了VPS之后你应该做足的安全措施里配置ssh的证书访问。

安装[……]

点击跳转以继续阅读

让 iOS macOS 中文字体实现视觉垂直居中

在开发落格输入法 macOS 的时候,我遇到了一个比较奇葩的问题,这个问题一直困扰我到现在——当有些地方需要垂直居中显示一排文字的时候,如何让这些字真正的“居中”?

 

乍看之下这似乎没什么道理,垂直居中嘛……等等,macOS 上的 NSTextField  还真没有办法让你的一行文字垂直居中……🤷‍♂️

第一代方案

后来,我[……]

点击跳转以继续阅读

iOS 独立开发:管理你的兑换码

作为 iOS 开发者的你,肯定是知道 Promo codes 这个东西的,也就是我们常说的兑换码。(当然,作为 iOS 用户兴许你也对此不陌生)

这次,我们就来看看,这个看似无穷无尽的兑换码,到底有哪些限制。

有效期

苹果后台生成的兑换码有效期一直是一个谜,虽然官方的说法的 4 周,也就是 28 天,但实际上如果这期间你的 app 更新了,那么兑换码很可能就会失效[1]。

&nbs[……]

点击跳转以继续阅读

Swift 里的数组去重方案

在使用 Swift 进行开发落格输入法时,我遇到了一个很有意思的问题——去重

众所周知,输入法的候选在计算出来后总会有可能是重复的选项(比如码表和词库中都有某个词,也许他们编码不同,但字是一样的之类),这时候就需要去重,但又要保持候选的先后顺序不变。

别人的解决方案

如果你去网上找,那么你可能找到的是这样的:

来源:[……]

点击跳转以继续阅读