跳至主要内容

博文

目前显示的是 五月, 2019的博文

Linux 下正常使用 go get

Picture from wallhaven.cc 安装 需要安装的软件包括两个: shadowsocks-libevprivoxy 这两个应用应该都在官方库当中,直接使用包管理命令安装就可以了。 配置 shadowsocks-libev shadowsocks-libev 的配置可以参考我之前的 在终端使用 shadowsocks。 privoxy privoxy 是一个 HTTP 协议过滤代理,支持单系统和多用户网络 ^1。 privoxy 的主配置文件位于 /etc/privoxy/config 下,privoxy 默认只提供给本地使用,对应配置 listen-address 127.0.0.1:8118,如果你只是想为 socks 做转发,用这种模式就可以了。 还需要在这个文件中修改一下转发规则,在 /etc/privoxy/config 中添加下面这一行: forward-socks5 / localhost:9050 . 注意在最后有一个空格和一个点。 这里 localhost 后的端口号就是上一步中 shadowsocks 配置里的本地端口号。 然后用下面的命令开启 privoxy 服务: $ sudo systemctl start privoxy.service 你也可以使用下面的命令让 privoxy 服务开机自启: $ sudo systemctl enable privoxy.service 使用 之后如果想要使用 http 代理的话,可以在命令前添加 http_proxy=127.0.0.1:8118,比如 http_proxy=127.0.0.1:8118 chromium,http_proxy=127.0.0.1:8118 go get -u golang.org/x/lint/golint。上面的命令如果提示 http 无法到达的话,可以尝试把 http 改为 https。 ​

自言自语 — 4

一、 peek 是 Linux 下一个轻量的录制软件,特别是用来录制 gif 图特别方便。当然,你也可以使用它来录制 MP4 或者 WebM、APNG 格式的视频。 二、 很多时候在安装完 zsh 之后,都喜欢配套 oh my zsh 使用。oh my zsh 配置很简单,而且有很多插件和主题可供选择。不过有些主题使用的时候,总会显示一个很长的主机名和用户名,我反正是不太喜欢的,这个问题可以通过下面的方法解决: 确定正在使用的主题名,例如 agnoster。在 ~/.oh-my-zsh/themes 目录下找到 主题名.zsh-theme,例如 agnoster.zsh-theme,然后使用文本编辑器,例如 vim 打开该文件。 搜索找到 prompt_context() 函数字段,该函数内容可能如下: prompt_context(){ if ... prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m" fi } 使用 # 注释掉 prompt_segment black default "%(!.%{%F{yellow}%}.)%n@%m" 就可以了。三、 如果你的使用的代理服务的协议是 socks5(如 shadowsocks 服务),chromium/chrome 也没有安装浏览器代理插件(如 SwitchyOmega),可以配置好并开启 ss 服务之后,在终端输入 chromium --proxy-server="socks5://127.0.0.1:9050" 来为 chromium/chrome 来添加 socks5 代理,如果你使用的是 chrome,就把命令开头的 chromium 改为 chrome,socks5:// 后的本地地址及端口根据自己的情况来修改。
这种添加代理方式可以用作某些情况下的应急情况(如初次装机之后),建议还是最好为浏览器添加代理插件(如 SwitchyOmega)。如果你习惯在命令行开启 chromium/chrome,那可以为上面的命令创建别名 `alias chromium='chromium —proxy-server="socks5://1…

安装 Arch Linux

整理自 viseator‘s blog。 准备 使用启动盘进入系统之后,使用下面两种方式连接到网络。 有线 dhcpcd无线 wifi-menu 连接之后可以使用 ping 命令查看是否连接成功。 更新时间 $ timedatectl set-ntp true 使用 fdisk -l 确定系统要安装到的硬盘,下面以 /dev/sda 为例。 使用 fdisk /dev/sda 开始编辑硬盘,先删掉其中所有的分区,然后输入 g 创建一个 GPT 分区表,先创建一个 512M 的引导分区,然后输入 t 更改分区类型,将分区类型修改为 EFI。把剩下的硬盘内容也创建为一个新的分区,用于系统分区。输入 p 查看目前 /dev/sda 的分区情况,应该有两个分区:一个 512M 的 EFI 类型的分区 /dev/sda1,以及一个占据剩余磁盘空间的 Linux 类型的分区 /dev/sda2。分区无误后,输入 w 写入分区。 分别格式化两个分区。 $ mkfs.fat -F32 /dev/sda1 $ mkfs.ext4 /dev/sda2 将 /dev/sda2 挂载到 /mnt 目录下。 $ mount /dev/sda2 /mnt 在 /mnt 下创建 /boot 目录,并将 /dev/sda1 挂载到此处。 $ mkdir /mnt/boot $ mount /dev/sda1 /mnt/boot 安装系统 编辑 /etc/pacman.d/mirrorlist,选择几个离自己比较近的镜像源粘贴到文件顶端。 执行下面的命令安装基本包。 $ pacstrap /mnt base base-devel 生成自动挂载分区的 fstab 文件。 $ genfstab -L /mnt >> /mnt/etc/fstab 使用 cat /mnt/etc/fstab 查看输出文件是否正确。 使用 arch-chroot /mnt 进入安装好基本包的 Arch Linux。 使用下面的命令设置上海时区。

自言自语-3

一、 Linux 安装成功之后的第一件事:把软件源改为距离你计算机最近的软件源。 二、 使用 git 对某个目录进行版本管理的过程中,如果该目录中包含一些自己不想添加到 git 但是又没办法删除的文件或者目录,可以在进行把本控制目录的根目录下创建 .gitignore 文件,然后把那些不想添加到版本管理的文件或者目录统统添加到 .gitignore 里。 三、 在 VSCode 中导入一些外部文件时,常有中文乱码的情况出现,可以在 文件-首选项-设置 中开启 Auto Guess Encoding,这样 VSCode 就会自动猜测导入文件的编码类型,能大大减少乱码的可能性。 四、 在之前的 自言自语-2 中说到过可以通过关闭 KDE 桌面设置里的 避免撕裂 选项,来避免在录屏时出现的闪屏状况。最近发现在浏览网页的时候,如果页面滑动地太快,整个页面就会忽地有一道 “皱痕”,然后就是一瞬,再次快速滑动的时候又会出现这种情况,,估计就是因为关闭了这个选项造成的。所以建议在不录屏的时候再把该选项开启。 ​

使用 gimp 删除图片的背景(or 抠图)

图片来自 wallhaven.cc 首先是选中你想要抠出来的部分,有两种方法: 1、如果想要的部分跟背景的颜色差异比较大,可以直接使用左侧工具栏第一行最后一个 “按颜色选择工具”,点击你想要的部分的边缘,然后按 Ctrl + I 组合键来 “反转” 选区到背景上;
2、如果颜色的差异不是那么大,或者你对第一种方法选择的区域不太满意,可以使用左侧工具栏第二行第三列 “路径工具”,在图片上一点点地绕着你想要的部分绕一个闭环(也就是起点跟终点要重合到一起),回车选中,然后按 Ctrl + I 组合键来 “反转” 选区到背景; 上面选中后,可以直接使用 delete 键删掉背景。 如果发现删错了,可以按 Ctrl + z 来恢复到上一步。 上一步中按下 delete 之后,可能背景并没有消失,只是变成了白色的而已,可以在 图层 —> 透明 —> 添加透明通道,添加完之后,再使用 delete 删除一次背景选区即可。 当然,这个办法也可以用来抠掉一些图中自己不想要的部分,而不仅仅是背景。 ​

移除一个正序数组中重复的元素

之前翻译过一篇有关 go 切片 的文章,其中介绍了很多有关切片的基础知识。 今天在做了一道 leetcode easy 模式的算法题,题目是“移除一个已排序(正序)数组中所有重复元素,使得每个元素只出现一次,最后返回数组的长度,而且所有的操作都只能在同一个数组上进行”。当然这里的数组对应的就是 go 中的切片。 根据题目要求,这个切片本来就是已经排好序的,所以在进行去重的时候,只需要比较一个第 i 个元素和第 i+1 个元素是否相等即可。只要第 i 个元素和第 i+1 个元素相等,那就直接使用 append() 函数跳过第 i+1 个元素(go 并没有移除切片中某个元素的内建函数)。 我的第一版代码如下: func ArrayRemoveDuplicates(nums []int) int { for i := 0; i < len(nums)-1; i++ { if nums[i+1] == nums[i] { nums = append(nums[:i], nums[i+1:]...) } } } append(nums[:i], nums[i+1]...) 可以保证当 nums[i] 和 nums[i+1] 相等时,可以从原 nums 切片中删掉 nums[i],如果切片中所有的元素最多重复一次的话,这版代码是可以正常执行的。例如:输入的切片为 [1,1,2,3,5,6,7,7],最终可以输出 6,nums 切片的元素为 [1,2,3,5,6,7]。 但是一旦切片中的元素重复出现了多次的话,程序虽然可以正常执行,但是执行结果是不正确的。例如:输入的切片为 [0,0,1,1,1,2,2,3,3,4],输出为 6,nums 切片的元素为 [0,1,1,2,3,4],可以看到最终生成的切片中仍旧出现了重复的元素。 注:为了方便下面的理解,将 [0,0,1,1,1,2,2,3,3,4] 中的三个 1 元素分别记为 ,,。,也就是 [0,0,,,,2,2,3,3,4] 原因如下: 当 i=2 时 nums[i]=,i+1=3 时 nums[i+1]=,此时 nums[i] == nums[i+1],然后使用 nums = append(nums[:i], nums[i+1:]..…