经常在本地电脑上使用pbcopy和pbpaste十分方便,但是ssh连接到远程机器后需要拷贝远程内容到本地相对就比较麻烦,以前总是需要采用ssh remote 'cat file' | pbcopy,搞多了就很烦,今天搜索了一下remote pbcopy之后发现了OSC52这个东西,用起来十分方便

本质就是输出一段特定格式的转义字符串,终端识别这个转移字符串得到原始内容,写入本机的粘贴板

远程主机

1
2
3
4
5
6
sudo dd of=/usr/local/bin/osc52 <<'EOF'
#!/bin/bash
printf "\033]52;c;$(base64 | tr -d '\r\n')\a"
EOF

sudo chmod +x /usr/local/bin/osc52

本机

Iterm2开启粘贴板访问权限

https://blogimg.ficapy.com/capture/2021_09_22_17_25_38.png

如果需要搭配tmux一起使用,需要在配置文件添加

1
set -g set-clipboard on

至此只需要在远程执行类似语句echo 123 | osc52 ,本机粘贴板就成功复制了

参考

OSC52的支持范围很广

Remote Copy via OSC52

评论和共享

请关闭浏览器的QUIC

发布在 随笔

最近在垃圾网络情况下观看youtube时间稍长一点就直接被中断,很是恼火,看clash的日志,出现了不少UDP的字样。怀疑是被进行了UDP转发操作。

一开始本计划在代理上关闭udp转发,但是没找到配置项……,然后直接关闭谷歌浏览器的QUIC功能,浏览器就不会发起UDP请求了,一切都正常了

总结

  1. 如果现在还有人给我说http3比http2好,我糊他一脸
  2. udp在国内是肯定没有tcp好用的,在udp被限速的情况下, http3真的比http2好吗?
  3. 谷歌浏览器默认是开启quic功能的,建议关闭,除非你确定你的网络环境对udp支持很好, 网址栏输入chrome://flags -> 搜索QUIC然后禁用
  4. 我大清自有国情在此~~

参考

https://www.speedtest.net/

http3 vs http2

disable quic

评论和共享

记一件蠢事

发布在 随笔

今天迁移内网服务器,是物理迁移,把几台服务器从一个地方搬到另外一个地方,需要做的是将ip网段改成新的,从192.168.1改到192.168.50,第一件事情就是将所有服务器的/etc/network/interface里面的改写一下就好~~~~

阅读全文

前两天试用了一下美团买菜,挺便宜的,15块就能免运费,没见过比这更低的免运费门槛了。然后买了五六个东西,其中有个水饺价格很便宜,而且看评论清一色的好评,物超所值啥的。抱着试试看的态度我下单了。本身对该商品的品质没有报太大的希望,买回来尝试之后如我所料,确实不如预期。于是我想着为别人避坑的态度(我网购极少评论)给了一个差评。

这个差评给的我很诧异

  1. 只能选好评或者差评,不是传统的那种一星到五星
  2. 差评必须写理由
  3. 差评会有客服直接联系你

美团买菜少说有几百万用户吧,每天消费买那么多东西,全都是完美无缺的么,随便给个差评就要客服回访,电话打的过来? 最后的结果大概就是消费者觉得麻烦要不换平台,要不遇到不满意的也懒得反馈了,最后留下来的就是齐刷刷的好评,那么作为消费者看其他消费者的评论有什么用呢,一边倒的好评看夸夸群吗~~~~

本来消费者给出客观评价,其他人根据评价挑选比较好的商品,平台和客户都能知道哪些是比较好的商品。评论系统导致整个购物平台能正向循环。在国内直接变成了平台和商家联手坑杀用户,网购淘宝真的变成淘宝,想靠评论系统避坑,不存在的

img

不过有一点不错,打骚扰电话前至少通知了我一下…….

评论和共享

最近在边看视频边做笔记,单个屏幕两个软件,因为经常需要暂停,快进,快退。软件焦点总会在浏览器和笔记软件切换。总是使用触摸板,误操作有点多。就写了个小插件,使用全局快捷键控制视频的播放,不需要在浏览器上操作,这样光标始终在笔记本上就好了

原理也很简单,使用油猴脚本连接本地websocket程序,监听到消息就对视频进行操作。本地程序监听全局快捷键就可以了。另外robotgo这玩意儿感觉不太好用….. 但是也没发现更好用的

阅读全文

在使用Anki制作卡片的时候为了醒目起见,需要修改文字颜色,最好是多种颜色交替,所以找了个插件Quick Colour Changing. 按照文档修改了配置,快捷键设置为了Ctrl+1/2/3/4. 结果发现完全没有反应。

看了下代码,只有十来行是很好理解的。代码逻辑正常,但就是没办法使用。想来一定是快捷键映射的问题。因为Anki基于PyQt构建,最后翻了下PyQt的文档. 有以下这句高亮标识

On macOS, references to “Ctrl”, CTRL , Key_Control and ControlModifier correspond to the Command keys on the Macintosh keyboard, and references to “Meta”, META , Key_Meta and MetaModifier correspond to the Control keys. Developers on macOS can use the same shortcut descriptions across all platforms, and their applications will automatically work as expected on macOS.

还是挺奇葩的,你写Ctrl会映射到Command, 写Command无效,写Meta映射到Command…..

所以在Mac上使用这个插件配置的时候需要特别小心…… 毕竟看起来非常违反直觉

参考

https://doc.qt.io/qtforpython-5/PySide2/QtGui/QKeySequence.html#more

PyQt QShortcut

Quick Colour Changing

PyQt print event

评论和共享

Kotlin DSL

发布在 kotlin

最近在看Kotlin,看到DSL部分觉得比较有意思,记录一下自己的理解

最简单的DSL就是各种大括号嵌套,每一个括号提供了一个独立的上下文,在该括号内使用这个上下文提供的api来影响上下文或者产生一些副作用。

Kotlin 天生就对DSL写法有比较好的支持,典型的scoping function: run、with、let、also、apply 就让大括号嵌套在Kotlin中无所不在

编写本文是因为看到了一段几十行的实现DSL的代码,觉得实现很简单,用法很炫酷,值得记录。代码链接在此 https://github.com/nazmulidris/color-console/blob/4d4503e183ab18434a9c86afd5ebdc66744c3451/src/main/kotlin/color_console_log/ColorConsoleLogUtils.kt#L91-L125

阅读全文

本文参照此处实现: 递归函数转非递归(通用方法)[1/2]——数据结构 递归函数转非递归(通用方法)[2/2]

先说总结,这种方案总的来说就是机械化的强转,时间复杂度和空间复杂度没什么变化,唯二的优点可能是1. 不会爆栈,2. 节省了函数调用的开销

而且最终产出的代码效果不那么美观,比较冗长

思路是:当发生递归调用时,模拟函数调用的压栈。并处理入参返回值记录返回到当前栈的时候该继续从哪里执行

阅读全文

原文: Tricks of the trade: Recursion to Iteration, Part 4: The Trampoline

这是关于将递归算法转换为迭代算法系列文章中的第四篇。如果你没有阅读过前面的文章,你可能想在继续之前阅读。

在我们系列的第一篇文章中,我们展示了如果你能将一个算法的递归调用转换为尾部调用,你就可以消除这些尾部调用,使用简单方法创建一个算法的迭代版本。在这篇文章中,我们将看看另外一种消除尾部调用的方法:trampoline

trampoline背后的思想是:在进行尾部调用之前,手动将当前执行的帧从栈中移除,消除栈堆积

阅读全文

原文: Tricks of the trade: Recursion to Iteration, Part 3: Recursive Data Structures

这是将递归算法转换为迭代算法系列的第三篇。如果下面的任何内容看起来令人困惑,你可能想先阅读前面两章的内容

这是我没有计划的一篇附加文章。之所以写它,是因为在上一篇文章的评论中,有读者要求我展示一个不那么数学化的例子,并建议使用树遍历。所以这就是这篇文章的主题。我们把一颗二叉树扁平化成一个列表,先是递归,然后是迭代

阅读全文

ficapy

author.bio


author.job


深圳