不少朋友都是用 Flask 框架来写小服务器的,方便又快捷,还能一键运行,很舒服。不过,如果你真的想把你的服务部署到服务器上,那你就会发现其实还有一些功课要做,这篇文章里,我们主要来谈谈如何将写好的程序在服务器上变成一个服务而不是终端里执行的命令。
如果我们用 Python 写了一个网站应用,那么它就需要一直运行来监听 HTTP 请求,如果在终端直接执行
[crayon-6908774e6[……]
不少朋友都是用 Flask 框架来写小服务器的,方便又快捷,还能一键运行,很舒服。不过,如果你真的想把你的服务部署到服务器上,那你就会发现其实还有一些功课要做,这篇文章里,我们主要来谈谈如何将写好的程序在服务器上变成一个服务而不是终端里执行的命令。
如果我们用 Python 写了一个网站应用,那么它就需要一直运行来监听 HTTP 请求,如果在终端直接执行
[crayon-6908774e6[……]
之前我曾经写过macOS app 实现自动化 notarize 脚本,由于我的输入法使用微软的 HockeyApp 进行崩溃统计,所以我还需要把 app 上传到这里进行一次“发布”,好让 HockeyApp 能够收到对应版本的错误统计。
如今,微软的 HockeyApp 已经更新成了 AppCenter,自动化命令也十分友好,其实这个操作也可以加入到你的自动化脚本里边,一步到位。
在此之前,我一直是这样在 macOS 上安装和使用 pip 的:
|
1 2 3 |
sudo easy_install pip3 pip3 install my_package |
后来,这个方法失效了,变成了这样:
|
1 2 3 4 |
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py pip install my_package |
终于有一天,pip 提示我它需要更新,于是:
|
1 2 3 4 5 6 7 |
pip3 install --upgrade pip3 ... ... TypeError: 'module' object is not callable |
查询后,发现原来 Python 是要这样安[……]
这几日博客文章又被别人拿去抓取了,虽然后来联系站长沟通解决,不过我还是要反思一下自己,文章正文中没有添加本文链接,导致即使被人抓取也无法拿到pingback……
总之,搜索了一通,似乎以前有一个插件可以一步到位(我恰好是那种喜欢一大堆插件的人),叫“Add Post URL”,不过这个插件已经下架了。
这个办法行不通,只好尝试代码级修改了:
这个办法要求你的主题[……]
在 macOS 上,安装输入法一直是一个噩梦,要打开系统输入法目录,要把输入法拖拽进这个目录,过程中还要输入密码,全手动也就罢了,还得重启后系统才能识别,真的是让人头疼的不行。
后来大家逐渐意识到这个问题,落格输入法也提供了 macOS 标准的 pkg 安装包。
说是这么说,但实际上似乎还是有办法让系统自动加载输入法的,比如搜狗就做到了免重启,安装后不光不需要重启系统就能识别,甚至安装[……]
通常来讲,Swift 里的 String 是和 NSString 桥接的,比如我曾写过 NSString 和 String 究竟 有什么区别 ?,总之这里我们主要来讨论一下,String 的 count 和 NSString 的[……]
这篇文章现在已经失效了,因为 Mailgun 不再提供免费额度,且把文中使用的必要功能“收件路由”设置为了高级用户功能不再免费提供,我换了另一家网站来实现域名邮箱,见:当 Mailgun 不再免费,你如何安置你的域名邮箱?
创建一个网站很容易,但要有一个和自己域名关联的邮箱地址 域名邮箱,似乎比较麻烦。对于中国站长来说,“QQ 域名邮箱” 似乎是唯一的选择,当然如果付费使用,那么使用[……]
Android File Transfer 是个好东西,可以在 macOS 中方便地给安卓手机传输文件等等,但有一点不好就是这东西会在后台驻留进程来监控usb插入,让人很不爽。
尤其是在插入 Android 设备时,自动弹出窗口,还连接失败(因为你来不及在手机上点授权),十分讨厌。
要禁用自动启动,首先打开 活动管理器,在里边搜索 Android File Transfer Agent[……]
一直以来,我对仓颉和速成这对难兄难弟是很有意见的……网上流传的码表版本繁多,但名字都叫“仓颉”,和五笔对比起来,好歹五笔还分个 86 和 98,再新一点还有 新世纪 等等,但仓颉没有,不论什么版本的仓颉,都叫“仓颉”。
这就很尴尬,每个人用的仓颉码表都不一样,但不一样在哪里,他自己也不知道。
总之, 全字库(cns11643) 提供了一种官方的通用的中文编码,本来这个东西是用来弥补 utf8[……]
要做一款移动设备上的软键盘,那么怎么处理用户的点击位置,就是你遇到的第一个难题,在这个问题上,我也走了很长的路。
我把落格输入法开发以来的触控逻辑大致分类为三个阶段,现在分别来讲讲设计思路,希望能够对你有所帮助。
显然,对于一个初学者来说,没什么比系统控件更好用的了,功能全,速度也不慢,业务逻辑完善,所以,落格输入法的第一代消息处理就是用的[crayon-6908774e[……]
在使用 Android 设备时,如果你购买的是一台中国区单独发行的定制版本 Android 设备,那么很有可能你的设备中并不内置谷歌套件,比如 Play Store。
这时候我们就需要自己安装它,安装的办法有很多,这里不再赘述。总之,一但你安装好,就会发现,即使开了代理,Play Store 也有可能在登录后无法正常加载内容(登录是正常的)。
此时会显示错误:df-dferh-01[……]
新出的 Wireguard 很多人都想尝试,这里 VPN 到底适不适合用来翻墙我们先不讨论,先来看看怎么快速在 vps 上起一个 wireguard 服务。很多人听说这个服务配置起来特别复杂,所以望而却步,实际上很简单。
这里我用最新的 ubuntu 18.04.2 来配置,首先你得有一个 vps,创建好后最好按照我的 购买了VPS之后你应该做足的安全措施里配置ssh的证书访问。
在开发落格输入法 macOS 的时候,我遇到了一个比较奇葩的问题,这个问题一直困扰我到现在——当有些地方需要垂直居中显示一排文字的时候,如何让这些字真正的“居中”?
乍看之下这似乎没什么道理,垂直居中嘛……等等,macOS 上的 NSTextField 还真没有办法让你的一行文字垂直居中……🤷♂️
后来,我[……]
作为 iOS 开发者的你,肯定是知道 Promo codes 这个东西的,也就是我们常说的兑换码。(当然,作为 iOS 用户兴许你也对此不陌生)
这次,我们就来看看,这个看似无穷无尽的兑换码,到底有哪些限制。
苹果后台生成的兑换码有效期一直是一个谜,虽然官方的说法的 4 周,也就是 28 天,但实际上如果这期间你的 app 更新了,那么兑换码很可能就会失效[1]。
&nbs[……]
在使用 Swift 进行开发落格输入法时,我遇到了一个很有意思的问题——去重。
众所周知,输入法的候选在计算出来后总会有可能是重复的选项(比如码表和词库中都有某个词,也许他们编码不同,但字是一样的之类),这时候就需要去重,但又要保持候选的先后顺序不变。
如果你去网上找,那么你可能找到的是这样的:
|
1 2 3 4 5 |
extension Array where Element : Hashable { var unique: [Element] { return Array(Set(self)) } } |
来源:[……]