manjaro kde 之旅

1. 安装vivaldi浏览器 pamac install vivaldi 参考:https://wiki.manjaro.org/index.php/Vivaldi_Browser 2. 关闭三次密码错误锁定 修改/etc/security/faillock.conf, 将其中的deny取消注释,并改为0,然后注销。重新登录。 deny = 0 3. 禁用大写锁定键 在输入设备中,选择键盘-》高级》 Caps Lock行为, 选中Caps Lock被禁用, 然后应用。

2022-01-18 09:39:05 · 1 min · Eddie Wang

开源免费的ssh终端工具

要求 [必须] 能够保存密码, 或者用私钥登录 [必须] 能够支持ftp/sftp [必须] 开源免费 [必须] 界面漂亮,支持中文字符 [可选] 支持同步ssh配置 [必须] 支持跨平台 Tabby A terminal for a more modern age (formerly Terminus) https://github.com/Eugeny/tabby https://tabby.sh/ 25.7k Star 基于electron, 主要开发语言typescript Electerm Terminal/ssh/sftp client(linux, mac, win) https://github.com/electerm/electerm https://electerm.github.io/electerm/ 4.8k star 基于electron, 主要开发语言javascript WindTerm A Quicker and better SSH/Telnet/Serial/Shell/Sftp client for DevOps. https://github.com/kingToolbox/WindTerm 2.6K star 主要开发语言: C

2021-12-22 16:53:05 · 1 min · Eddie Wang

使用brew作为deepin的包管理工具

11月2号,我的主力开发工具macbook开始退役。 我换了nuc11 i7, 安装了国产的deepin(深度)操作系统。总体体验蛮好的,只是apt-get的软件包里,太多都是很老的包。所以我想到以前用mac的包管理工具homebrew, 据说它不仅仅可以在mac上工作,主流的linux也是能够使用的。 homebrew的介绍是:The Missing Package Manager for macOS (or Linux)。也就是说brew完全可以在linux上运行。 安装方式也很简单: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 上面的shell执行之后,brew就安装成功了。 和mac不同的是,linux homebrew的安装包的可执行命令的目录是:/home/linuxbrew/.linuxbrew/bin, 所以需要把它加入到PATH中,安装的软件才能正确执行。 参考 https://brew.sh/

2021-11-18 08:42:53 · 1 min · Eddie Wang

印象笔记不太智能的智能替换

为什么是印象笔记 作为一个笔记,或者说文本编辑器,一个最基本的要求,就是能按照用户的按键输入。而不是用户输入了A,然后在页面上看到了B。 但是对于印象笔记来说,我已经遇到过好多次因为输入问题,几乎想要放弃印象笔记。但是就目前来讲,仍然没有好用的替代品。 对于笔记软件来说,我有以下的几个最为基础的要求。 必须跨平台。能够有桌面端App和IOS或者安卓的APP 必须同步要快。 必须要能有网页剪藏的插件 必须要少折腾,用户体验好。我的目的是记录内容,而不是折腾各种同步或者网络配置。 必须是付费的产品。免费的产品,是没有可持续发展潜力的。当然,付费需要在接受范围之内。 必须足够稳定 用户界面,体验必须足够好 必须要离线使用 就目前来说,能满足以上几个要求的,屈指可数。 印象笔记虽然有恶心的广告推送(即使会员也有广告),但是一般在非特殊的日子,广告不回一直存在的。 印象笔记不太智能的替换 把英文单引号替换成中文单引号 把两个–天换成一个中文破折号 以上两个问题,在粘贴代码的时候,是致命的问题。我本来粘贴的是两个–,粘贴到印象笔记里居然变成一个中文破折号,那么后期在复制出来用的,必然出现问题。 我问了官方的客服,官方的客户也不知道怎么解决。 后来我自己在网上搜索,发现了解决问题的方法。 以上所有的关于替换的问题,都是和编辑器的替换设置有关。 打开一个笔记,然后点击右键 选择替换,可以看到里面有智能引号,只能破折号,智能连接,文本替换,建议把这几个都取消勾选 还有一个可能性,就是在**编辑->拼写和语法->自动拼写纠正,**这个要关闭。

2021-10-02 12:25:34 · 1 min · Eddie Wang

简单实用的M4教程

文本处理的难点 有一个文本文件,内容如下,摘抄其中两行内容如下,里面有两个配置db_addr, local_ip这两个配置,需要在不同环境要修改的。 db_addr=1.2.3.4:3306 local_ip=192.168.2.4 但是哪些地方要修改呢?为了提醒后续的维护者,我们给要修改的地方加个备注吧。 db_addr=1.2.3.4:3306 # 这里要修改 local_ip=192.168.2.4 # 这里要修改 .... ... if len(a) = 1024 { # 这里要修改1024 ... } ... 用sed替换? 让别人一个一个地方去修改,也太麻烦了,有没有可能用脚本去处理呢?例如我们用DB_ADDR和LOCAL_IP这种字符串作为占位符,然后我们就可以用sed之类的命令去做替换了。 db_addr=DB_ADDR local_ip=LOCAL_IP sed -i 's/DB_ADDR/1.2.3.4:3306/g;s/LOCAL_IP/192.168.0.1/g' 1.cfg 这样做是有点方便了,但是也有以下几个问题 如果定义的占位符太多,sed会变得越来越长 如果某些占位符里本身就含有/或者一些特殊含义的字符,就需要做特殊处理了 用M4吧,专业的人做专业的事情 apt-get install m4 通过命令行定义宏 1.m4 db_addr=DB_ADDR local_ip=LOCAL_IP .... ... if len(a) = MAX_LEN { ... } ... M4可以使用-D来定义宏和宏对应的值,默认输出到标准输出,我们可以用>将输出写到文件中 m4 -D DB_ADDR=1.2.3.4:3306 -D LOCAL_IP=192.168.2.2 -D MAX_LEN=2048 1.m4 db_addr=1.2.3.4:3306 local_ip=192.168.2.2 .... ... if 1 = 2048 { ....

2021-09-25 12:22:19 · 1 min · Eddie Wang

使用树莓派3b+作为辅助开发体验

配置 树莓派3B+的配置 4核1G CPU ARMv7 Processor 64G SD卡 常用软件 neovim LXTerminal终端 chrome浏览器 谷歌拼音输入法 常用语言 golang c nodejs 外设 键盘鼠标: 雷柏 无线机械键盘加鼠标 150块左右 屏幕:一块ipad大小外接屏幕,400块左右 常用工作 Golang UDP Server开发, 总体还算流畅。前提时不要加载太多的neovim插件,特别象coc-vim, go-vim等插件,安装过后让你卡的绝望。每次当我绝望之时,我就关闭了图形界面,回到终端继续干活。但是即使使用纯文本方式登录,运行vim还是很卡。 后来我在macbook pro上也用neovim开发,发现也是很卡。于是我就释然了,9千多的macbook都卡,300多的树莓派卡一点怎么了! 但是卡顿还是非常影响心情的,于是我就大量精简vim的插件。 我基本上就用两个插件,都是和状态栏有关的。其他十二个插件都给注释掉了 call plug#begin('~/.vim/plugged') Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' Plug 'jiangmiao/auto-pairs' "Plug 'yonchu/accelerated-smooth-scroll' "Plug 'preservim/tagbar', { 'for': ['go', 'c']} "Plug 'airblade/vim-gitgutter' "Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries', 'for': 'go' } "Plug 'dense-analysis/ale' "Plug 'vim-scripts/matchit.zip' "Plug 'pangloss/vim-javascript', {'for':'javascript'} "Plug 'leafgarland/typescript-vim' "Plug 'neoclide/coc.nvim', {'branch': 'release'} "Plug 'jremmen/vim-ripgrep' "Plug 'plasticboy/vim-markdown' "Plug 'mzlogin/vim-markdown-toc' call plug#end() filetype plugin indent on filetype plugin on filetype indent on set guicursor= set history=1000 let g:netrw_banner=0 let g:ale_linters = { \ 'javascript': ['standard'], \ 'typescript': ['tsserver'] \} let g:ale_fixers = {'javascript': ['standard']} let g:ale_lint_on_save = 1 let g:ale_fix_on_save = 1 let g:ale_typescript_tsserver_executable='tsserver' let g:airline#extensions#tabline#enabled = 1 let g:ale_set_loclist = 0 let g:ale_set_quickfix = 1 let g:ale_open_list = 0 let g:vim_markdown_folding_disabled = 1 let g:vmt_cycle_list_item_markers = 1 let g:tagbar_sort = 0 " colorscheme codedark " let g:airline_theme = 'codedark' " " buffer let mapleader = "," nnoremap <Leader>j :bp<CR> " previous buffer nnoremap <Leader>k :bn<CR> " next buffer nnoremap <Leader>n :bf<CR> " previous buffer nnoremap <Leader>m :bl<CR> " next buffer nnoremap <Leader>l :b#<CR> " previous buffer nnoremap <Leader>e :e<CR> " open netrw nnoremap <Leader>d :bd<CR> " close buffer nnoremap <Leader>g :!...

2021-08-30 21:18:15 · 2 min · Eddie Wang

树莓派3b+踩坑记录

选择那个版本的系统? 不要过高的估算树莓派的性能,最好不要选择那些具有漂亮界面的ubuntu或者manjaro, 因为当你使用这些带桌面的系统时,很大概率界面能让你卡的想把树莓派砸了。 所以优先选择不带图形界面的lite版本的系统,如果确实需要的话,可以再安装lxde 网线插了,还是无法联网 插了网线,网口上的绿灯也是在闪烁,但是eth0就是无法联网成功。真是气人。 解决方案: 编辑 /etc/network/interfaces, 将里面的内容改写成下面的,然后重启树莓派。 这个配置文件的涵义是:在启动时就使用eth0有线网卡,并且使用dhcp给这个网卡自动配置IP auto eth0 iface eth0 inet dhcp iface etho inet6 dhcp source-directory /etc/network/interfaces.d 无桌面版本,如何手工安装桌面 首先安装lxde sudo apt update sudo apt install lxde -y 然后通过raspi-config, 配置默认从桌面启动 sudo rasip-config 选择系统配置, 按回车键进入 选择Boot/Auto login, 按回车进入 选择Desktop, 回车确认。保存之后,退出重启。 键盘无法输入| | 在linux中是管道的意思,然而我的键盘却无法输入。最终发现是键盘布局的原因。 在图标上右键,选择配置 注意这里是US, 这是正常的。如果是UK,就是英式布局,是有问题的,需要把UK的删除,重新增加一个US的。 如何安装最新版本的neovim? 树莓派使用apt安装的neovim, 版本太老了。很多插件使用上都会体验不好。所以建议安装最新版的neovim。 sudo apt install snapd sudo snap install --classic nvim 注意: nvim的默认安装的路径是/snap/bin, 所以你需要把这个路径设置到PATH里,才能使用nvim. 如何安装最新的golang? 打开这个页面 https://golang.google.cn/dl/ 因为树莓是armhf架构的,所以这这么多版本里,只有armv6l这个版本是能够在树莓派上运行的。 压缩包下载之后解压,里面的go/bin目录中就有go的可执行文件,只要将这个目录暴露到PTAH中,就能使用golang了。...

2021-08-14 11:01:17 · 1 min · Eddie Wang

js sdk 跨层穿透问题

关于js sdk的设计,这篇文档基本上详细介绍了很多的点,值得深入阅读一遍。https://github.com/hueitan/javascript-sdk-design 然而最近在重构某个js sdk时,也发现了一些问题,这个问题并不存在于上述文章中的。 js sdk在收到服务端的响应时,直接将server端返回的错误码给到用户。 这里会有一个问题,这个响应码,实际上是js sdk和server之间的消息交流。并不是js sdk和用户之间的消息交流。 如果我们将server端的响应直接返回给用户,则js sdk可以理解为是一个透明代理。用户将会和server端产生强耦合。如果server端有不兼容的变化,将会直接影响到用户的使用。 所以较好的做法是js sdk将这个错误封装为另一个种表现形式,和server端分离出来。

2021-08-12 13:46:39 · 1 min · Eddie Wang

面向异常编程todo

程序可能大部分时间都是按照正常的逻辑运行,然而也有少数的概率,程序发生异常。 优秀程序,不仅仅要考虑正常运行,还需要考虑两点: 如何处理异常 如何在发生异常后,快速定位原因 正常的处理如果称为收益的话,异常的处理就是要能够及时止损。 能稳定运行364天的程序,很可能因为一天的问题,就被客户抛弃。因为这一天的损失,就可能会超过之前收益的总和。 异常应当如何处理 如果事情有变坏的可能,不管这种可能性有多小,它总会发生。《莫非定律》 对于程序来说,避免变坏的方法只有一个,就是不要运行程序(纯粹废话😂)。 1. 及时崩溃 var conn = nil var maxConnectTimes = 3 var reconnectDelay = 3 * 1000 var currentReconnectTimes = 0 var timeId = 0 func InitDb () { conn = connect("数据库") conn.on("connected", ()=>{ // 将当前重连次数重制为0 currentReconnectTimes = 0 }) conn.on("error", ReconnectDb) } func ReconnectDb () { conn.Close() // 如果重连次数大于最大重连次数,将不在重连 if currentReconnecTimes > maxConnectTimes { return } // 如果已经催在重连的任务,则先关闭 if timeId != 0 { cleanTimeout(timeId) } // 当前重连次数增加 currentReconnectTimes++ // 开始延迟重连 timeId = setTimeout(InitDb, reconnectDelay) } 2....

2021-08-05 08:58:30 · 1 min · Eddie Wang

监控pod重启并写日志文件

一般来说,监控pod状态重启和告警,可以使用普罗米修斯或者kubewatch。 但是如果你只想将某个pod重启了,往某个日志文件中写一条记录,那么下面的方式将是非常简单的。 实现的思路是使用kubectl 获取所有pod的状态信息,统计发生过重启的pod, 然后和之前的重启次数做对比,如果比之前记录的次数大,那么肯定是发生过重启了。 #!/bin/bash now=$(date "+%Y-%m-%d %H:%M:%S") log_file="/var/log/pod.restart.log" ns="some-namespace" echo $now start pod restart monitor >> $log_file # touch一下之前的记录文件,防止文件不存在 touch restart.old.log # 生成本次的统计数据 kubectl get pod -n $ns -o wide | awk '$4 > 0{print $1,$4}' | grep -v NAME > restart.now.log # 按行读取本次统计数据 # 数据格式为:podname 重启次数 while read line do # pod name name=$(echo $line | awk '{print $1}') # 重启次数 count=$(echo $line | awk '{print $2}') # 检查本次重启的pod名称是否在之前的记录中存在 if grep $name restart....

2021-07-28 21:21:33 · 1 min · Eddie Wang