PT's Blog

嗷嗷嗷嗷嗷嗷嗷嗷

前言

本文涉及的所有vim插件,在这里均有列出:pt.vim

问题起源

猪厂内网,本人某一台开发服务器上目前还运行着古董Debian:Jessie,官方repo中各种legacy软件让人崩溃。所以我在home路径下放了个.local,把各种常用软件都编译了一份最新版扔在这里,比如:

  • vim 8.1.789——为了体验8.1引入的terminal功能
  • tmux 2.8——因为vim material主题在老版本的tmux中会颜色错乱
  • rg——Debian Jessie repo中没有这货
  • mc——Debian Jessie repo中这货版本太老了
  • python 3.7.2——好用的vim插件denite.nvim要求Python 3.6以上,而官方repo中只有3.4
  • gcc 8.2——编译Python 3.7需要新版本的gcc,索性build一个当下最新版本

某天早上,我在开发服务器上的vim中例(手)行(贱)运行更新了所有vim插件:

1
:call dein#update()

然后,denite.nvim就不能用了:当我例行Ctrl-P,期望打开当前路径下某一文件时爆了一个Python trace。一个Python 3.6才引入的新方法报错了——找不到。打开denite.nvim的git log一看,果然作者有了新想法(我也喜欢追新,比如--std=c++latest):

1
* [2018-10-21] [9ba61c7] | Python 3.5+ is required {{Shougo Matsushita}}

因为这个插件很好用,所以只能升级开发机上的Python了。上文也说了,repo中只有3.4,搜索了各种backport,都没有为Jessie提供3.5以上的Python3,遂动手从源码编译。

Read more »

不负众望呀,本人在公司的主力PC在从Ubuntu 18.04升级到Ubuntu 18.10时,又双叒叕扑街了,记得我之前也写过一篇blog记录:Ubuntu从17.04升级到17.10

升级

按照How to Upgrade to Ubuntu 18.10 from Ubuntu 18.04 LTS,首先修改更新配置,只要由新版本就更新:

  1. Open the “Software & Updates” app
  2. Tap the “Updates” tab
  3. Find the section titled “Notify me of a new Ubuntu version”
  4. Set ‘For long-term support versions’ to ‘For any new version’
  5. Click ‘Close’

接着:

1
sudo do-release-upgrade -d

这次在升级过程中,一切顺利什么事没有,重启之后就宕机了。

Read more »

前言

因为工作关系,本猪厂程序员常年在多个操作系统1和语言2,框架3之前频繁切换,所以尽管已经有强如PyCharm和Android Studio这样好用的免费IDE可供使用,还是离不开Vim.

回归正题,既然Vim不得不用,被PyCharm和Android Studio宠坏了之后,就总会不自觉想把Vim变得和它们一样好用.或者更好一些;)

这个系列的文章主要记录采用各种Vim插件在两个方面增强Vim的使用体验:

  • 自动补全
  • 搜索、导航
  • 文件
  • 符号
  • 调用/被调用(Caller and Callee)
  • 文本

最后也会记录一下其它小功能,比如显示缩进字符,pattern match次数什么的.

Read more »

Ubuntu 17.10出现有一段时间了,最近正好有空,决定把笔记本上的Ubuntu 17.04 + GNOME 3升级到17.10。因为GNOME 3不算很稳定,所以开始升级前就有心理准备,可能会出状况,反正有的是方法可以拯救数据,索性不备份直接用do-release-upgrade升级。

升级到一半,GNOME 3突然蹦了,do-release-upgrade突然不见了,够可以的……

好在打开一个UXTerm,心想这种时候应该还有一个screen/tmux在后台吧?一查果然有,screen -x进去,升级正卡在闻某个配置文件是否需要更新的地方,一番操作加等待之后,升级顺利完成。

写在前面

阅读本文之前,我假设你已经在Debian/Ubuntu上安装了最新的docker enginedocker compose,如果这倆尚未安装,请先参考这篇blog: 最简单的用Docker在Debian上安装GitLab的方法 。另外,本文描述的安装方法,在Ubuntu上应该也是可以用的。

安装步骤

获取最新的docker image

1
$ sudo docker pull jupyter/datascience-notebook

这条指令大概会下载5.5G左右的数据,下载完之后可以运行:

1
2
3
4
5
6
$ sudo docker images

...
REPOSITORY TAG IMAGE ID CREATED SIZE
jupyter/datascience-notebook latest 312e1540f9f0 6 days ago 5.66GB
...

如果输出中出现jupyter/datascience-notebook,那就是已经下载好了

Read more »

安装步骤

安装最新版docker engine

参考文章:How to upgrade Docker on Debian or Ubuntu using the official source

源里面的docker版本

开发服务器上使用的版本是Debian jessie,已经是老版本了,不出意料,源里面的docker果然是老版本:

1
2
3
4
$ apt search docker

lxc-docker-1.6.0/未知,now 1.6.0 amd64
Linux container runtime

安装Docker官方源中的docker

显然太老了,那么就从docker官方源安装最新版吧,Debian指令如下:

1
2
3
4
5
# 添加docker官方源repo key(对Debian和Ubuntu都一样)
$ sudo apt-key adv --keyserver http://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

# 添加docker官方源,For Debian (7.0 and higher)
$ sudo sh -c "echo 'deb https://apt.dockerproject.org/repo debian-$(lsb_release -sc) main' | cat > /etc/apt/sources.list.d/docker.list"
Read more »

OS和Desktop Environment

操作系统:Ubuntu 17.04
桌面环境:GNOME Shell 3.24 on wayland

问题详情

Ubuntu 17.04可以安装gnome shell on wayland,得知这个消息之后我立即扔掉了默认的桌面环境,切换到了gnome shell on wayland。至今已经使用了几个月,大部分情况下还算挺稳定,不过也遇到了一些问题:

  1. gnome-mplayer在wayland下无法工作,因为:it only works under X11
  2. fcitx在所有的GTK和QT程序中都没法用,注意不是ctrl-space的问题,是没法用,但是在chromium中又可以正常使用
  3. gnome-terminal如果开启透明背景,窗口四周的阴影无法征程渲染,会显示成一个相同宽度的白色边框

其实除了第2点,其它的都可以忍,今天要在笔记本上写中文blog,只好又去放狗搜索解决方案,看到的问题分析有以下几类:

fcitx没有正常启动

这种情况下需要自己添加启动项,在gnome shell启动的时候去启动fcitx,否则chromium里面也不能用fcitx,但是我之前已经解决掉这个问题了(可以可以使用”GNOME 3 设置工具”来添加启动项)。

不能使用CTRL-SPACE来切换输入法

1
gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Gtk/IMModule':<'fcitx'>}"

不过我这里不是切换的问题,是没法使用,另外在chromium中,这个快捷键切换fcitx是有效的,看起来之前我已经敲了一遍了。

环境变量

1
2
3
4
# 向~/.xprofile中间添加如下内容:
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

赶紧检查了一下,之前我已经添加过这3行内容了,但是echo GTK_IM_MODULE的结果依然为空,后来在arch linux的fcitx wiki上看到,对于新版本的gnome,需要把这三行加到/etc/environment这个文件中去……

添加,注销,重新登入,果然可以使用在gnome-terminal中使用fcitx了。

问题来源

跳转,尤其是条件跳转有可能会打断CPU指令的流水线执行,所以在性能要求比较高的代码中,我都是系统尽量不要出现if,那实在要出现怎么办了,比如有如下代码:

1
2
3
4
for component in components:
# 判断是否要处理component数据
if component.enabled:
# do sth...

这种情况下我是应该写成上面这种形式,还是应该写成下面的形式呢,哪种更高效?

1
2
3
4
5
for component in components:
# 判断是否要处理component数据
if not component.enabled:
continue
# do sth...

别问我为什么性能要求比较高的时候还要用python,我也不想……那么假设我们知道条件为TrueFalse的概率,哪一种比较高效?

Read more »

致谢

“Thanks to zokis”

缘由

Python: faster way是一篇很有意思的文章,原项目的github地址在这里:zokis/Python–Faster-Way

原来的项目可以自动将一些benchmark转换为Python虚拟机字节码形式,辅以运行时间告诉你哪些Python写法稍微快那么一点或者快很多,但是最近,原始的页面无法访问了。所以我决定在我的github.io上也放一份备查:

看这里,看这里:Python: faster way

“挥别blogspot,迎来github.io”

好久没写blog乐,以前的blog在blogspot上,读者少的可怜,基本上还都是Google搜索CTeX引过去的,满满都是泪。

好在github对天朝网民来说,至少有时还是可见的,偶然间从知乎上看到Hux同学的blog,还挺好用的,之后又发现hexo + next也不错,遂愉快的开启github.io之旅。

大家好,我来了~

0%