Edge浏览器双击标签栏 关闭标签页
在设置里搜索双击,如果有使用双击关闭浏览器选项卡, 则开启。 +
all
行位结束符引起的问题
CRLF 二进制 十进制 十六进制 八进制 字符/缩写 解释 00001010 10 0A 012 LF/NL(Line Feed/New Line) 换行键 00001101 13 0D 085 CR (Carriage Return) 回车键 CR代表回车符,LF代表换行符。 +这两个符号本身都是不可见的。 +如果打印出来 +CR 会显示 \r LF 会显示 \n 不同系统的行结束符 Linux系统和Mac换行符是 \n Windows系统的换行符是 \r\n 如何区分文件的换行符? 可以使用od命令 +od -bc index.md 假如文件的原始内容如下 +- 1 - 2 注意012是八进制的数,十进制对应的数字是10,也就是换行符。 +0000000 055 040 061 012 055 040 062 - 1 \n - 2 0000007 如果用vscode打开文件,也能看到对应的文件格式,如LF。 +换行符的的差异会导致哪些问题? shell脚本问题 如果bash脚本里包含CRLF, 可能导致脚本无法解析等各种异常问题。 +例如下面的报错,docker启动shell脚本可能是在windows下编写的。所以脚本无法 +standard_init_linux.go:211: exec user process caused "no such file or directory" 如何把windows文件类型转为unix?...
Edge浏览器双击标签栏 关闭标签页
在设置里搜索双击,如果有使用双击关闭浏览器选项卡, 则开启。 对于用鼠标关闭标签页来说,的确可以提高极大的效率。
为什么我不再使用语雀
我在2019年的六月份时候,开始使用语雀。 一路走来,我见证了语雀的功能越来越多,但是于此同时,我也越来越讨厌语雀。 2022年12月初,我基本上把语雀上的所有内容都迁移到我的hugo博客上。 diff --git a/categories/index.html b/categories/index.html index 379758611..2e3aafaea 100644 --- a/categories/index.html +++ b/categories/index.html @@ -1,6 +1,6 @@
Categories
Categories
Eddie Wang
当你在穿山越岭的另一边, 我在孤独的路上没有尽头
Vite React Route URL含有.时,路径无法正常匹配
今天遇到一个奇怪的问题,react-router的路径匹配无法正常工作,反而向vite的dev server发送了GET请求,这个请求报错404。页面直接无法访问。 +
Eddie Wang
当你在穿山越岭的另一边, 我在孤独的路上没有尽头
解决 VsCode pwsh终端环境变量不生效问题
我在系统的环境变量设置里,用户和系统中,都加入了ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/这个环境变量。 +单独打开windows Terminal应用,使用 env | grep ELE 是能搜到我设置的环境变量的。但是在vscode中,这个环境变量不存在。 +我尝试了以下几个方法 +重启电脑,无效 配置"terminal.integrated.persistentSessionReviveProcess": "never", 然后重启电脑,无效 在终端直接执行code ., 在终端打开vscode, 依然无效 因此,我想起了之前配置的pwsh的配置文件。 可以使用code $PROFILE, 打开pwsh的配置文件。 +然后再配置文件中设置环境变量, 之后重启vscode, 环境变量就正常能读取到了。 +# 文件名 Microsoft.PowerShell_profile.ps1 $env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" 参考 https://www.zhihu.com/question/266858097
Vite React Route URL含有.时,路径无法正常匹配
今天遇到一个奇怪的问题,react-router的路径匹配无法正常工作,反而向vite的dev server发送了GET请求,这个请求报错404。页面直接无法访问。 按理说这种前端路由的框架应该不需要向后段发送请求的。 后来我怀疑是不是代理的问题,但是只是部分页面无法访问,所以排出这个选项。 随后我的系统又收到一条测试数据,这条测试数据却能够正常跳转。 @@ -77,17 +82,7 @@ export N_NODE_MIRROR=https://npmmirror.com/mirrors/node 但是,我发现在命令行里用echo可以打印N_NODE_MIRROR这个变量的值,但是在安装脚本里,还是无法获取设置的这个mirror。 我想或许和我在执行sudo n lts时的sudo有关,这个.zshrc在sudo这种管理员模式下是不生效的。普通用户的环境变量也不会继承到sudo执行的环境变量里 最后,我用sudo -E n lts, 成功的从npmmirror上更新了nodejs的版本。 -关于curl超时的这个问题,我也给n仓库提出了pull request, https://github.com/tj/n/pull/771
JS运行时构建独立二进制程序比较
很早以前,要运行js,则必须安装nodejs,且没什么办法可以把js直接构建成一个可执行的文件。 -后来出现一个pkg的npm包,可以用来将js打包成可执行的文件。 -我好像用过这个包,但是似乎中间出过一些问题。 -现在是2023年,前端有了新的气象。 -除了nodejs外,还有其他的后来新秀,如deno, 还有最近表火的bun -另外nodejs本身也开始支持打包独立二进制文件了,但是需要最新的20.x版本,而且我看了它的使用介绍文档,single-executable-applications, 看起来是有有点复杂,光一个构建就写了七八步。 -所以今天只比较一些deno和bun的构建出的文件大小。 -准备的js文件内容 -// app.js console.log("hello world") deno构建指令: deno compile --output h1 app.js, 构建产物为h1 bun构建指令: bun build ./app.js --compile --outfile h2, 构建产物为h2 --rw-r--r--@ 1 wangduanduan staff 26B Jun 1 13:34 app.js -rwxrwxrwx@ 1 wangduanduan staff 78M Jun 1 13:59 h1 -rwxrwxrwx@ 1 wangduanduan staff 45M Jun 1 14:01 h2 源代码为26b字节 -deno构建相比于源码的倍数: 3152838 bun构建相比于源码的翻倍: 1804415 deno构建的可执行文件相比bun翻倍:1.7 参考 https://bun.sh/docs/bundler/executables https://deno.com/manual@v1.34.1/tools/compiler https://nodejs.org/api/single-executable-applications.html
RabbitMq 大量的连接抖动
连接抖动介绍 Workloads with high connection churn (a high rate of connections being opened and closed) will require TCP setting tuning to avoid exhaustion of certain resources: max number of file handles, Erlang processes on RabbitMQ nodes, kernel’s ephemeral port range (for hosts that open a lot of connections, including Federation links and Shovel connections), and others. Nodes that are exhausted of those resources won’t be able to accept new connections, which will negatively affect overall system availability....
用古龙的手法 写我只会心疼哥哥
【我只会心疼哥哥(原视频)-哔哩哔哩】https://b23.tv/9YIMtp +
使用AI让卡通人物更加真实
魔女宅急便 琪琪 有点像花木兰 佐助 不认识 小樱 不认识 不认识 不认识 参考 https://designyoutrust.com/2021/04/person-uses-artificial-intelligence-to-make-anime-and-cartoon-characters-look-more-realistic/
RabbitMq 大量的连接抖动
连接抖动介绍 Workloads with high connection churn (a high rate of connections being opened and closed) will require TCP setting tuning to avoid exhaustion of certain resources: max number of file handles, Erlang processes on RabbitMQ nodes, kernel’s ephemeral port range (for hosts that open a lot of connections, including Federation links and Shovel connections), and others. Nodes that are exhausted of those resources won’t be able to accept new connections, which will negatively affect overall system availability....
用古龙的手法 写我只会心疼哥哥
【我只会心疼哥哥(原视频)-哔哩哔哩】https://b23.tv/9YIMtp 蓝天白云,晴空万里。路旁的电线杆笔挺的站着,有几只小鸟,在电线上蹦来蹦去,叫着闹着,空气中充了令人愉快的感觉。 一辆白色雅迪冠能T5石墨烯72电池增程矩阵式大灯轻便型电动车自北向南,疾驰而过。 车上坐着一男一女。少女扎着马尾辫,手中举着一根折叠式棒棒糖,笑靥如画,喃喃道:“哥哥,哥哥,你给我买这个,你女朋友知道了,不会生气吧?” 不等男生回答,她自顾自的先尝了一口。然后把棒棒糖举到男生嘴边,然后嘻嘻笑道:“真好吃,哥,你也尝一口” @@ -62,8 +62,7 @@ 这本小说叫做《项塔兰》 我花了很长的岁月,走过大半个世界,才真正学到什么是爱、什么是命运,以及我们所做的抉择。我被拴在墙上遭受拷打时,才顿悟这个真谛。不知为何,就在我内心发出呐喊之际,我意识到,即使镣铐加身,一身血污,孤立无助,我仍然是自由之身,我可以决定是要痛恨拷打我的人,还是原谅他们。我知道,这听起来似乎算不了什么,但在镣铐加身、痛苦万分的当下,当镣铐是你唯一仅有的,那份自由将带给你无限的希望。是要痛恨,还是要原谅,这抉择足以决定人一生的际遇。《项塔兰》 这是一名通缉犯的十年印度流亡岁月的记录,很难想象,一名在逃犯是如何写出如此优秀的文笔。各位看官有时间可以看看。 -参考 https://mp.weixin.qq.com/s/9kfGCXevO5Hlpg_iINof6Q
learn Sonic
Intro Sonic is a fast, lightweight and schema-less search backend. It ingests search texts and identifier tuples that can then be queried against in a microsecond’s time. -install ref https://github.com/valeriansaliou/sonic https://crates.io/crates/sonic-server
command + tab 无法切换窗口了?
今天发现一个问题,按住command + tab, 已经切换到对应的应用图标上,但是松开按键之后,屏幕并没有切换到新的App屏幕上。特别是那些全屏的应用。 +
learn Sonic
Intro Sonic is a fast, lightweight and schema-less search backend. It ingests search texts and identifier tuples that can then be queried against in a microsecond’s time. +install ref https://github.com/valeriansaliou/sonic https://crates.io/crates/sonic-server
command + tab 无法切换窗口了?
今天发现一个问题,按住command + tab, 已经切换到对应的应用图标上,但是松开按键之后,屏幕并没有切换到新的App屏幕上。特别是那些全屏的应用。 看了很多资料,都是没啥用的,最后发现 https://apple.stackexchange.com/questions/112350/cmdtab-does-not-work-on-hidden-or-minimized-windows 最终发现,需要设置调度中心的 切换到某个应用时,会切换到包含该应用程序的打开的窗口空间, 这个必需要勾选。
draw.io居然有桌面客户端了
当你需要解释一个概念的时候,图形化的展示是最容易让人理解的方式。 以前我一直用processon来绘制, processon的优点很多,用过的都知道。 @@ -44,8 +45,7 @@ 记笔记何须离开终端? 特点 plain-text data storage, encryption, filtering and search, Git-backed versioning and syncing, Pandoc-backed conversion, global and local notebooks, customizable color themes, extensibility through plugins, 支持各种编辑器打开笔记, 我自然用VIM了。 A text editor with command line support, such as:Vim,Emacs,Visual Studio Code,Sublime Text,micro,nano,Atom,TextMate,MacDown,some of these,and many of these. -使用体验截图 参考 https://xwmx.github.io/nb/ https://github.com/xwmx/nb
Taskwarrior 命令行下的专业TodoList神器
简介 Taskwarrior是命令行下的todolist, 特点是快速高效且功能强大, -支持项目组 支持燃烧图 支持各种类似SQL的语法过滤 支持各种统计报表 安装 sudo apt-get install taskwarrior 使用说明 增加Todo task add 分机注册测试 due:today Created task 1. 显示TodoList ➜ ~ task list ID Age Due Description Urg 1 5s 2021-03-25 分机注册测试 8.98 开始一个任务 ➜ ~ task 1 start Starting task 1 '分机注册测试'. Started 1 task. ➜ ~ task ls ID A Due Description 1 * 9h 分机注册测试 标记完成一个任务 ➜ ~ task 1 done Completed task 1 '分机注册测试'....
electerm 免费开源跨平台且功能强大的ssh工具
https://electerm.github.io/electerm/ +
Taskwarrior 命令行下的专业TodoList神器
简介 Taskwarrior是命令行下的todolist, 特点是快速高效且功能强大, +支持项目组 支持燃烧图 支持各种类似SQL的语法过滤 支持各种统计报表 安装 sudo apt-get install taskwarrior 使用说明 增加Todo task add 分机注册测试 due:today Created task 1. 显示TodoList ➜ ~ task list ID Age Due Description Urg 1 5s 2021-03-25 分机注册测试 8.98 开始一个任务 ➜ ~ task 1 start Starting task 1 '分机注册测试'. Started 1 task. ➜ ~ task ls ID A Due Description 1 * 9h 分机注册测试 标记完成一个任务 ➜ ~ task 1 done Completed task 1 '分机注册测试'....
electerm 免费开源跨平台且功能强大的ssh工具
https://electerm.github.io/electerm/ 功能特点 Work as a terminal/file manager or ssh/sftp client(similar to xshell) Global hotkey to toggle window visibility (simliar to guake, default is ctrl + 2) Multi platform(linux, mac, win) 🇺🇸 🇨🇳 🇧🇷 🇷🇺 🇪🇸 🇫🇷 🇹🇷 🇭🇰 🇯🇵 Support multi-language(electerm-locales, contribute/fix welcome) Double click to directly edit remote file(small ones). Edit local file with built-in editor(small ones). Auth with publickey + password. Zmodem(rz, sz). Transparent window(Mac, win). Terminal background image....
mac升级后命令行报错 xcrun: error: invalid active developer path
xcode-select --install 参考 https://www.jianshu.com/p/50b6771eb853
网页分享到微信添加缩略图
header部分 <meta property="og:image" content="http://abc.cc/x.jpg" /> body部分 <div style="display:none"> <img src="http://abc.cc/x.jpg"> </div> 注意,图片的连接,必须是绝对地址。就是格式必需以http开头的地址,不能用相对地址,否则缩略图不会显示。
RFC阅读神器 rfcreader
rfc http://www.rfcreader.com/ @@ -20,15 +21,7 @@ The primary advantage is speed, which has become critical in an environment with billions of mobile, IoT devices and other sources continuously streaming data....
macbook pro 1708 换电池记录
人类灭绝的7种方式
人类将以什么方式走向灭绝,很多科幻电影中都有过设想。 最近读到一本书《人类灭绝》来自日本作家高野和明的科幻小说给出系统的介绍。小说中有一份报告,叫做《海斯曼报告》。 下面表格中的1-5是报告中提到的人类灭绝方式,6-7是我自己添加。 -种类 类别 举例 相关电影,或者书籍 1 宇宙规模的灾难 小行星撞地球,太阳燃尽 2 地球规模的环境变动 地球磁场的南北逆转现象,环境污染 《2012》《后天》 3 核战 二战 日本 核武器 4 疫病 病毒威胁 生物武器 电影生化危机,今年的新冠肺炎疫情,HIV 《生化危机》《行尸走肉》 5 人类进化 由于基因突变,产生更加智能的人类 《东京食尸鬼》《人类灭绝》 6 AI失控 人工智能出现自我意识 《我,机器人》《终结者系列》《黑客帝国系列》 7 外星人入侵 高层次文明入侵低层次文明 《三体》 于三体不同的是,作者从人类第5种可能性展开小说。如果你喜欢三体的话,《人类灭绝》这本小说,也是非常值得一读的。
南京尧新科目二考试考试回顾
科目二倒库和四项练的差不多了,决定去参加考试,考试虽然一波三折,但结果还是好的,一次通过了 -考场熟悉 考场倒库有14各区,没什么好讲的。 四项有4各环线,每个环线上有两个考试线路,所以一共是8条线路 务必看懂各种符号的含义,例如曲线,侧方, 直角与坡道 【重点】当你知道你自己在那条线上考试之后,务必对照着线路图,将四项的顺序以及位置牢记于心。虽然路上会有牌子指示下一项内容是什么,但是考试的时候,由于视线等各种原因可能不会去在意。也有人,看到前面是直角,就以为是前面是直角转弯,结果到了真正直角转弯的位置,却没有做直角相关的操作,导致考试失败。 例如,当你被选择到8号线的四项时,你到了7-8待考等待区后,等待自己的考试车。在等待过程中按照平面图,可以发现,离待考最近的起点之后,8号线,第一个考试项目侧方停车,然后是直角转弯,接着是S弯,最后是坡道。 -模拟考相关 模拟的费用以及项目内容 模拟的费用是360,包含一下内容 -倒车入库120,可以倒库3次 四项有八条线路,每个线路各跑一次 四项的车和倒库的车是不同的,这点需要注意。 -模拟考有用吗? 我觉的是有用的 -一般驾校只有一两条线路,实际考场有8条线路。每条线路你都可以跑一次,从1号线到8号线。跑过这8条线,你会基本知道自己四项中哪些项目比较容易出错。可以针对性加强。另外也可以找找坡道的点位。 跑模拟四项的时候,有个教练会坐在副驾驶上。他会不断的催促你,此时你千万不要让他的催促导致你连续的出错,进而影响到你考试的心态。你是交了钱的,离合和油门都在你这边,教练再催,也是没办法让车加速的。你不要怂。【注意:在真实考试时,副驾驶是没有人的。】 教练为什么要不停的催你,因为你越快跑完8条线路,他就可以接更多的学员,他手里的小票就越多,提成就越多。当你模拟完8条线路,教练会让你再买几条线路。线路其实是可以按条买的,每条线跑一次30块。真是车轮一转,家财万贯。车轮一响,黄金万两啊。 虽然倒库的车库有14个,但是你模拟的那个车库,其实有极大的可能就是你真实考试的那个车库。这样你就可以提前熟悉一下车库的点位。我比较菜,模拟三次的倒库都倒失败了。但是我从三次失败中也学到了自己失败的原因。从而在真实考试时成功通过。倒库如果你三次都失败了,也可以单独买的。倒3次60块。倒6次120块。但是这就不建议再花钱了。你应该记住自己的错误的点。比如是那边压线了,然后回到驾校,和你的教练沟通一下。驾校的教练会给你更加有用的建议。另外你务必要记住自己是几号库,你只要和驾校教练沟通一下,他都知道这个库位的处理细节的。 如果我没有模拟考过,很可能我科目二第一次会挂,然后还要花时间去搞这件事。如果能用钱解决的事情,我更希望能节省一些时间。 心态 考试的心态很重要,和我一起参见考试的一个同学。他没有参加模拟考,但是他在考试中倒库一把就倒进去了。我认为他是比较牛逼的。但是有可能他骄傲了,挂在了几个转向灯和坡道定点上。侧方停车时,出库居然忘记打转向灯了。 -也有人忘记系安全带了。 -很多小的点,也很容易的点。在驾校都练的很熟练,但是一到考场,就总是丢三落四的忘记。为什么会有这种场景的。 -因为心态变了。
macbook pro 使用三年后的感受
我的macbook是2017买的, 使用到今天大概1204天。 +
南京尧新科目二考试考试回顾
科目二倒库和四项练的差不多了,决定去参加考试,考试虽然一波三折,但结果还是好的,一次通过了 +考场熟悉 考场倒库有14各区,没什么好讲的。 四项有4各环线,每个环线上有两个考试线路,所以一共是8条线路 务必看懂各种符号的含义,例如曲线,侧方, 直角与坡道 【重点】当你知道你自己在那条线上考试之后,务必对照着线路图,将四项的顺序以及位置牢记于心。虽然路上会有牌子指示下一项内容是什么,但是考试的时候,由于视线等各种原因可能不会去在意。也有人,看到前面是直角,就以为是前面是直角转弯,结果到了真正直角转弯的位置,却没有做直角相关的操作,导致考试失败。 例如,当你被选择到8号线的四项时,你到了7-8待考等待区后,等待自己的考试车。在等待过程中按照平面图,可以发现,离待考最近的起点之后,8号线,第一个考试项目侧方停车,然后是直角转弯,接着是S弯,最后是坡道。 +模拟考相关 模拟的费用以及项目内容 模拟的费用是360,包含一下内容 +倒车入库120,可以倒库3次 四项有八条线路,每个线路各跑一次 四项的车和倒库的车是不同的,这点需要注意。 +模拟考有用吗? 我觉的是有用的 +一般驾校只有一两条线路,实际考场有8条线路。每条线路你都可以跑一次,从1号线到8号线。跑过这8条线,你会基本知道自己四项中哪些项目比较容易出错。可以针对性加强。另外也可以找找坡道的点位。 跑模拟四项的时候,有个教练会坐在副驾驶上。他会不断的催促你,此时你千万不要让他的催促导致你连续的出错,进而影响到你考试的心态。你是交了钱的,离合和油门都在你这边,教练再催,也是没办法让车加速的。你不要怂。【注意:在真实考试时,副驾驶是没有人的。】 教练为什么要不停的催你,因为你越快跑完8条线路,他就可以接更多的学员,他手里的小票就越多,提成就越多。当你模拟完8条线路,教练会让你再买几条线路。线路其实是可以按条买的,每条线跑一次30块。真是车轮一转,家财万贯。车轮一响,黄金万两啊。 虽然倒库的车库有14个,但是你模拟的那个车库,其实有极大的可能就是你真实考试的那个车库。这样你就可以提前熟悉一下车库的点位。我比较菜,模拟三次的倒库都倒失败了。但是我从三次失败中也学到了自己失败的原因。从而在真实考试时成功通过。倒库如果你三次都失败了,也可以单独买的。倒3次60块。倒6次120块。但是这就不建议再花钱了。你应该记住自己的错误的点。比如是那边压线了,然后回到驾校,和你的教练沟通一下。驾校的教练会给你更加有用的建议。另外你务必要记住自己是几号库,你只要和驾校教练沟通一下,他都知道这个库位的处理细节的。 如果我没有模拟考过,很可能我科目二第一次会挂,然后还要花时间去搞这件事。如果能用钱解决的事情,我更希望能节省一些时间。 心态 考试的心态很重要,和我一起参见考试的一个同学。他没有参加模拟考,但是他在考试中倒库一把就倒进去了。我认为他是比较牛逼的。但是有可能他骄傲了,挂在了几个转向灯和坡道定点上。侧方停车时,出库居然忘记打转向灯了。 +也有人忘记系安全带了。 +很多小的点,也很容易的点。在驾校都练的很熟练,但是一到考场,就总是丢三落四的忘记。为什么会有这种场景的。 +因为心态变了。
macbook pro 使用三年后的感受
我的macbook是2017买的, 使用到今天大概1204天。 最初的使用体验是 触摸板很灵敏 屏幕很高清 系统很流畅 三年中出现过的问题 键盘中的几个按键出现过问题,按键不灵敏。17年是用的蝴蝶键盘,这个键盘问题很多。最新版已经换成了剪刀脚键盘了。 屏幕老化,屏幕的四周出现淡红色的红晕,但是不影响使用。 如果不充电的情况下,掉电蛮快的,而且有时候电量还很多,就自动关机。 现在的感觉: @@ -16,8 +24,7 @@ step3: apk update 虽然安装了apk, 但是不更新的话,可能很多安装包都没有,所以最好先更新。 在更新之前。最好执行下面的命令,把apk的源换成清华的,这样之后的安装软件会比较快点。 sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories apk update step4: 安装各种开发工具 git zsh tmux vim… apk add git zsh tmux vim step5: 安装oh-my-zsh 这是必不可少的神器 因为从github上克隆oh-my-zsh可能会很慢,所以我用了码云上的一个仓库。 这样速度就会很快了。 -git clone https://gitee.com/nuannuande/oh-my-zsh.git ~/.oh-my-zsh cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc chsh -s $(which zsh) step6: 安装nodejs python golang等。 apk add nodejs python3 下面看到输出了nodejs和python的版本,说明安装成功。另外ish支持换肤的。之前的白色的,下面的是黑色的。...
tar打包小技巧: 替换根目录
环境mac -# 这个目录打包之后,内部的顶层目录是dist, 解压之后,有可能覆盖到以前的dist tar -zcvf demo.tar.gz dist/ # 使用这个命令,顶层目录将会被修改成demo-0210 tar -s /^dist/demo-0210/ -zcvf demo.tar.gz dist/
讲价的学问
只要有价格,就可以讲价 ****只要有价格,就可以讲价。**但是也有例外,例如超市,超市的东西明码标价。售货员一般不会管价格。 +
tar打包小技巧: 替换根目录
环境mac +# 这个目录打包之后,内部的顶层目录是dist, 解压之后,有可能覆盖到以前的dist tar -zcvf demo.tar.gz dist/ # 使用这个命令,顶层目录将会被修改成demo-0210 tar -s /^dist/demo-0210/ -zcvf demo.tar.gz dist/
讲价的学问
只要有价格,就可以讲价 ****只要有价格,就可以讲价。**但是也有例外,例如超市,超市的东西明码标价。售货员一般不会管价格。 其次,要和能管价的人谈 **其次,要和能管价的人谈。 有些人不管价格,讲多少都没用。 50%理论 第一次喊价以后,一般只会抬价,而不会降价,所以务必要重视。 例如一束花,店家要价80,实际这束花成本20。如果你第一喊价70,那你只能优惠小于10元。 @@ -45,12 +46,7 @@ 我回想起了高中时学的生物学,皮肤是人类最大的一个器官,并且是保护人体的第一道防线。 我不禁看了看自己胳膊,思绪万千。或许以后我的皮肤也是这样吧。这就是岁月的皮肤! 时间啊!你走的慢点吧! -人生很短,做些值得回忆的事情吧。
从日漫到美漫
我挺喜欢看动漫的,尤其是日漫(似乎也没有别的选择🐶)。 -小时候星空卫视放七龙珠,大学追火影和海贼王。日漫中梦想和激战总是少不了,这也是少年所必不可少的。但是日漫有个很大的特点,就是烂尾。 -没办法,漫画一旦达到了一定的连载时期,很多时候往往不受原作者控制了。这其中可能涉及到不少人的利益纠葛。 -与动辄几百集的日漫相比,美漫似乎更加偏向于短小精悍。 -近年来我也看过一些不错的美漫。例如瑞克和莫提,脆莓公园。这类漫画有个特点,就是更加现实,当然其中也不乏有温情出现。看这类漫画,让我想到李宗吾先生所说的厚黑学。感觉美国人是无师自通,深谙厚黑之哲学。 -也许动漫没有变,变的是我们自己:从梦想和激战转变到现实和厚黑。
统一入口Makefile
Makefile ---src |___Makefile |___main.c 如何编写顶层的Makefiel, 使其进入到src中,执行src中的Makefile? +
从日漫到美漫
我挺喜欢看动漫的,尤其是日漫(似乎也没有别的选择🐶)。 +小时候星空卫视放七龙珠,大学追火影和海贼王。日漫中梦想和激战总是少不了,这也是少年所必不可少的。但是日漫有个很大的特点,就是烂尾。 +没办法,漫画一旦达到了一定的连载时期,很多时候往往不受原作者控制了。这其中可能涉及到不少人的利益纠葛。 +与动辄几百集的日漫相比,美漫似乎更加偏向于短小精悍。 +近年来我也看过一些不错的美漫。例如瑞克和莫提,脆莓公园。这类漫画有个特点,就是更加现实,当然其中也不乏有温情出现。看这类漫画,让我想到李宗吾先生所说的厚黑学。感觉美国人是无师自通,深谙厚黑之哲学。 +也许动漫没有变,变的是我们自己:从梦想和激战转变到现实和厚黑。
统一入口Makefile
Makefile ---src |___Makefile |___main.c 如何编写顶层的Makefiel, 使其进入到src中,执行src中的Makefile? run: $(MAKE) -C src target a=1 b=2
tmux深度教学
tmux使用场景 远程ssh连接到服务器,最难受的是随时有可能ssh掉线,然后一切都需要花额外的时间重新恢复,也有可能一些工作只能重新开始。 在接续介绍tmux之前,先说说mosh。 【mosh架构图】 @@ -18,10 +23,7 @@ 然后我就去研究iTerm2的配置,发现关于鼠标的配置中,有一个 Scroll wheel send arrow keys when in alternat screen mode , 把这个指设置为Yes。那么无论Vim, 还是man命令,都可以用触摸板去滚动屏幕了。
mac上netstat命令
Mac上的netstat和Linux上的有不少的不同之处。 在Liunx上常使用 Linux Mac netstat -nulp netstat -nva -p udp netsat -ntlp netsat -nva -p tcp 注意,在Mac上netstat的-n和linux上的含义相同
获取本机外部公网IP
curl ip.sb curl cip.cc
exec user process caused no such file or diectory
exec user process caused "no such file or diectory" 解决方案: 将镜像构建的 Dockerfile ENTRYPOINT ["/run.sh"] 改为下面的 -ENTRYPOINT ["sh","/run.sh"] 其实就是加了个sh
使用image标签上传日志
function report(msg:string){ var msg = new Image() msg.src = `/report?log=${msg}` } report
ModuleNotFoundError: No module named 'SocketServer'
python Flask框架报错。刚开始我只关注了这个报错,没有看到这个报错上上面还有一个报错 -ModuleNotFoundError: No module named 'http.client'; 'http' is not a package 实际上问题的关键其实是 'http' is not a package , 为什么会有这个报错呢? -其实因为我自己在项目目录里新建一个叫做http.py的文件,这个文件名和python的标准库重名了,就导致了后续的一系列的问题。 -问题总结 文件名一定不要和某些标准库的文件名相同 排查问题的时候,一定要首先排查最先出现问题的点
使用image标签上传日志
function report(msg:string){ var msg = new Image() msg.src = `/report?log=${msg}` } report
iTerm2技巧 维护多个host与固定tab页面标题
iTerm我已经使用了很长时间了,总体各方面的特点都非常好,但是有几个地方也是让我苦恼的地方。 +
ModuleNotFoundError: No module named 'SocketServer'
python Flask框架报错。刚开始我只关注了这个报错,没有看到这个报错上上面还有一个报错 +ModuleNotFoundError: No module named 'http.client'; 'http' is not a package 实际上问题的关键其实是 'http' is not a package , 为什么会有这个报错呢? +其实因为我自己在项目目录里新建一个叫做http.py的文件,这个文件名和python的标准库重名了,就导致了后续的一系列的问题。 +问题总结 文件名一定不要和某些标准库的文件名相同 排查问题的时候,一定要首先排查最先出现问题的点
iTerm2技巧 维护多个host与固定tab页面标题
iTerm我已经使用了很长时间了,总体各方面的特点都非常好,但是有几个地方也是让我苦恼的地方。 tab 页面的标题会根据执行的命令或者路径发生变化,如果你开了七八个ssh远程,有时候很难区分这个tab页面到底是连接的哪台机器。 如果你有十几个机器需要连接,你不可能手动输入ssh root@ip地址的方式去连接,太多了记不住。 如何维护多个远程host? 使用profile维护多个远程host, 每个profile对应连接到一台机器。profile name填入该host的名字。 注意右边的Command, Send text at start的输入框,这个输入框,就是要执行的ssh指令,里面包含了远程host的地址。 然后你就可以在Profils的菜单中选择一个profile进行连接了。 @@ -28,7 +31,7 @@ [1592643928.961414] 192.168.40.20 : [0], 84 bytes, 3.22 ms (3.22 avg, 0% loss) [1592643928.969987] 192.168.40.21 : [0], 84 bytes, 1.22 ms (1.22 avg, 0% loss) [1592643930.965753] 192.168.40.20 : [1], 84 bytes, 5.25 ms (4.23 avg, 0% loss) [1592643930.972833] 192.168.40.21 : [1], 84 bytes, 1.14 ms (1....
oh-my-zsh 安装 tmux插件
.zshrc配置 vim ~/.zshrc plugins=(git tmux) # 加入tmux, 然后保存退出 source ~/.zshrc tmux 快捷键 Alias Command Description ta tmux attach -t Attach new tmux session to already running named session tad tmux attach -d -t Detach named tmux session ts tmux new-session -s Create a new named tmux session tl tmux list-sessions Displays a list of running tmux sessions tksv tmux kill-server Terminate all running tmux sessions tkss tmux kill-session -t Terminate named running tmux session tmux _zsh_tmux_plugin_run Start a new tmux session
Nodejs诊断报告
解决问题的最后一个思路:拼写错误!!
从各种层次排查了问题,包括 docker版本不一样 脚本不一样 镜像的问题 … 从各种角度排查过后,却发现,问题在是拼写错误。环境变量没有设置对,导致进程无法前台运行。 能不拼写就不要拼写!!直接复制。 -大文件在传输图中可能会文件损坏,最好使用md5sum计算文件校验和,然后做对比。
01 手绘风格的流程图
webrtc的各种demo https://webrtc.github.io/samples/ 在线音频处理 https://audiomass.co/ 值得深入阅读,关于如何demo的思考 https://kitsonkelly.com/posts/deno-is-a-browser-for-code/ 不错的介绍demo的博客 https://kitsonkelly.com/posts js如何获取音频视频 https://www.webdevdrops.com/en/how-to-access-device-cameras-with-javascript/ bats可以用来测试shell脚本 https://github.com/bats-core/bats-core 手绘风格的流程图 https://excalidraw.com/
理发店的营业模式分析
1. 理发店分类 类别 店面大小 并发理发人数 业务范围 消费者画像 定价 A(单一理发类) 较小 4-6 理发、染发、烫发 学生、普通工人 较低 B(综合服务类) 较大 12-20 理发、染发、烫发、美容、减肥、刮痧、按摩、脱毛等等 白领、老板等有一定经济能力者 中上 2. 如何吸引顾客上门? 优惠卡:在理发店营业之前,往往可以以极低的价格,派发理发卡。例如办理20元理发5次这样的理发卡。这样在理发店营业之初,就会有足够的客户上门理发。 认知偏差:很多理发店会门口挂个横幅: x+x+x 仅需5元。全场套餐仅需1折。其实这些都是吸引顾客的钩子,而真正的前提条件,往往是要办理xxxx元的会员卡。 3. 如何吸引客户更多的消费? 对于B类理发店来说,一般情况下顾客进店之后,并不会对其立即理发。而需要一位服务员进行理发前的准备,例如头部按摩、颈部刮痧、肩部按摩的放松准备。也可能会上一些茶水,糖果瓜子之类的食品。 +
01 手绘风格的流程图
webrtc的各种demo https://webrtc.github.io/samples/ 在线音频处理 https://audiomass.co/ 值得深入阅读,关于如何demo的思考 https://kitsonkelly.com/posts/deno-is-a-browser-for-code/ 不错的介绍demo的博客 https://kitsonkelly.com/posts js如何获取音频视频 https://www.webdevdrops.com/en/how-to-access-device-cameras-with-javascript/ bats可以用来测试shell脚本 https://github.com/bats-core/bats-core 手绘风格的流程图 https://excalidraw.com/
理发店的营业模式分析
1. 理发店分类 类别 店面大小 并发理发人数 业务范围 消费者画像 定价 A(单一理发类) 较小 4-6 理发、染发、烫发 学生、普通工人 较低 B(综合服务类) 较大 12-20 理发、染发、烫发、美容、减肥、刮痧、按摩、脱毛等等 白领、老板等有一定经济能力者 中上 2. 如何吸引顾客上门? 优惠卡:在理发店营业之前,往往可以以极低的价格,派发理发卡。例如办理20元理发5次这样的理发卡。这样在理发店营业之初,就会有足够的客户上门理发。 认知偏差:很多理发店会门口挂个横幅: x+x+x 仅需5元。全场套餐仅需1折。其实这些都是吸引顾客的钩子,而真正的前提条件,往往是要办理xxxx元的会员卡。 3. 如何吸引客户更多的消费? 对于B类理发店来说,一般情况下顾客进店之后,并不会对其立即理发。而需要一位服务员进行理发前的准备,例如头部按摩、颈部刮痧、肩部按摩的放松准备。也可能会上一些茶水,糖果瓜子之类的食品。 进入理发店,除了有理发的消费之外,还可能纯在其他的消费机会。而消费机会的前提在于**服务人员和顾客之间的沟通。所以以为能够察言寡色的服务员则显得尤为重要。如果顾客一句话也不说,那也是无法让其更多的消费的。常见的沟通手法如下: 发现顾客身上的小瑕疵,进而咨询顾客是否需要专业的人员帮您看看。(注意这一步一定不要立即推荐套餐服务,这样会立即引起顾客的反感情绪。) 经过专业人员的查看之后,一般会向客户推荐比较优惠的体验一次的项目。因为体验一次往往是话费比较小的。如果上来给客户推荐一两千的套餐,客户一般会拒绝。 简单的套餐体验过后,可以向顾客推荐套餐,以及如果使用套餐,单次理疗会更加优惠。 总得理念就是:循序渐诱,不可操之过急 4. 如何留住顾客? 理发店顾客粘性一般比较小,周围四五家理发店,顾客凭什么再次光顾你这家呢? @@ -70,7 +70,7 @@ 不要等到失去任劳任怨的肾脏之后,再后悔莫及。 参考 https://baike.baidu.com/item/%E4%BA%BA%E4%BD%93%E7%BB%86%E8%83%9E
kaldi安装
为了省去安装的麻烦,我直接使用的是容器版本的kaldi https://hub.docker.com/r/kaldiasr/kaldi -docker pull kaldiasr/kaldi This is the official Docker Hub of the Kaldi project: http://kaldi-asr.org Kaldi offers two sets of images: CPU-based images and GPU-based images. Daily builds of the latest version of the master branch (both CPU and GPU images) are pushed to DockerHub. Sample usage of the CPU based images: docker run -it kaldiasr/kaldi:latest Sample usage of the GPU based images: Note: use nvidia-docker to run the GPU images....
Type 'Timeout' is not assignable to type 'number'
let timer:NodeJS.Timer; timer = global.setTimeout(myFunction, 1000); 参考http://evanshortiss.com/development/nodejs/typescript/2016/11/16/timers-in-typescript.html
macbook 清空DNS缓存
sudo killall -HUP mDNSResponder
Type 'Timeout' is not assignable to type 'number'
let timer:NodeJS.Timer; timer = global.setTimeout(myFunction, 1000); 参考http://evanshortiss.com/development/nodejs/typescript/2016/11/16/timers-in-typescript.html
xmpp学习
从pcap文件提取转wav语音文件
wireshark具有这个功能,但是并不适合做批量执行。 +
macbook 清空DNS缓存
sudo killall -HUP mDNSResponder
xmpp学习
从pcap文件提取转wav语音文件
wireshark具有这个功能,但是并不适合做批量执行。 下面的方案比较适合批量执行。 # 1. 安装依赖 yum install gcc libpcap-devel libnet-devel sox -y # 2. 克隆源码 git clone https://github.com/wangduanduan/rtpsplit.git # 3. 切换目录 cd rtpsplit # 4. 编译可执行文件 make # 5. 将可执行文件复制到/usr/local/bin目录下 cp src/rtpbreak /usr/local/bin # 6. 切换到录音文件的目录,假如当前目录只有一个文件 rtpbreak -r krk9hprvin1u1laqe14g-8beffe8aaeb9bf99.pcap -g -m -d ./ audio git:(edge) ✗ rtpbreak -r krk9hprvin1u1laqe14g-8beffe8aaeb9bf99.pcap -g -m -d ./ + rtpbreak v1.3a running here! + pid: 1885, date/time: 01/05/2020#09:49:05 + Configuration + INPUT Packet source: rxfile 'krk9hprvin1u1laqe14g-8beffe8aaeb9bf99....
娱乐智障
娱乐至死,娱乐也能让人变得智障。 贪图于精神愉悦,在永无休止的欢悦中难以自拔。 @@ -30,11 +30,7 @@ 显示网卡列表 输入RawCap.exe –help, 可以显示命令的使用帮助、网卡列表还有使用例子。 F:\Tools>RawCap.exe --help NETRESEC RawCap version 0.2.0.0 Usage: RawCap.exe [OPTIONS] <interface> <pcap_target> <interface> can be an interface number or IP address <pcap_target> can be filename, stdout (-) or named pipe (starting with \\.\pipe\) OPTIONS: -f Flush data to file after each packet (no buffer) -c <count> Stop sniffing after receiving <count> packets -s <sec> Stop sniffing after <sec> seconds -m Disable automatic creation of RawCap firewall entry -q Quiet, don't print packet count to standard out INTERFACES: 0....
大数据时代的平民新装
之前在百毒搜索了一下营养师考证,然后最近就经常收到骚扰电话,咨询我是否有意参加考试。 在没有留任何电话号码的情况下,我的手机号就被精准的定位到。可想而知个人隐私问题是多么严重。 -以前只有皇帝一个人穿透明新装,现在每个人都穿着这件衣服。
孩子血型一定和父母血型相同吗?
之前看过一个报道,父亲发现儿子的血型和自己以及妻子的血型都不一样,怀疑儿子不是自己亲生的,最后把自己妻儿弄死了。但是孩子的DNA检测显示是自己亲生的。 -这是一个不懂血型相关知识的悲剧啊。 -血型是由红细胞表面的两种抗原决定的。 -A抗原 B抗原 血型 1 0 A 0 1 B 1 1 AB 0 0 O 下图的表格是父母血型与子女血型的可能性与比例。 -父母血型 子女可能有血型及比例 子女不可能有血型 O、O O A、B、AB O、A O、A (1:3) B、AB O、B O、B (1:3) A、AB O、AB A、B (1:1) O、AB A、A O、A (1:15) B、AB A、B A、B、AB、O (3:3:9:1) — A、AB A、B、AB (4:1:3) O B、B O、B(1:15) A、AB B、AB A、B、AB(1:4:3) O AB、AB A、B、AB(1:1:2) O 虽说孩子的血型不一定和父母的血型相同。但是如果父母都是O型血,生出的孩子如果不是O型,那么不是亲生的可能性也是蛮大的。
食物的酸碱性的误解
大多数人可能由下面的两种方式去判断食物的酸碱性 +
孩子血型一定和父母血型相同吗?
之前看过一个报道,父亲发现儿子的血型和自己以及妻子的血型都不一样,怀疑儿子不是自己亲生的,最后把自己妻儿弄死了。但是孩子的DNA检测显示是自己亲生的。 +这是一个不懂血型相关知识的悲剧啊。 +血型是由红细胞表面的两种抗原决定的。 +A抗原 B抗原 血型 1 0 A 0 1 B 1 1 AB 0 0 O 下图的表格是父母血型与子女血型的可能性与比例。 +父母血型 子女可能有血型及比例 子女不可能有血型 O、O O A、B、AB O、A O、A (1:3) B、AB O、B O、B (1:3) A、AB O、AB A、B (1:1) O、AB A、A O、A (1:15) B、AB A、B A、B、AB、O (3:3:9:1) — A、AB A、B、AB (4:1:3) O B、B O、B(1:15) A、AB B、AB A、B、AB(1:4:3) O AB、AB A、B、AB(1:1:2) O 虽说孩子的血型不一定和父母的血型相同。但是如果父母都是O型血,生出的孩子如果不是O型,那么不是亲生的可能性也是蛮大的。
食物的酸碱性的误解
大多数人可能由下面的两种方式去判断食物的酸碱性 舌头👅。用嘴巴尝一下,酸的食物就是酸性的。 ph值。可以用ph试纸 以上两种判断食物酸碱性的方法都是错误的。 食物的酸碱性,取决于食物中含有矿物质的种类和含量。 碱性食物:含有钠、钾、钙、镁、铁 酸性食物:还有磷、氯、硫 从元素周期表中也可以看出来,酸碱性相同的物质基本都是比较靠近的。 含有钠钾钙镁铝的食物,进入人体之后,在人体的氧化作用下,最终代谢产物呈现碱性。 @@ -38,15 +42,7 @@ 我是一个重度读者,每天都会花上一些时间去阅读。最近两天发现,本来可以连续两周不用充电的kindle。基本上现在是电量以每天50%的速度减少。或许,2年,就是kindle的寿命。 刚开始读书总觉得没有什么进度,后来我就喜欢把每天读书的进度给记录下来。这样做的好处是能够督促我不要偷懒, 我读书有个习惯,每天以至少1%的进度去读一本书,并且我会将进度记录下来。基本上,我每天会读7-8本书的1%。 -两年时间内我读过的书,要比我从小学到大学读过的书都要多。
论禹三过家门而不入的真实原因
最早听说“三过家门而不入”,是说禹治水大公无私,路过家门都没有回家。 -最近看到史记,发现这句话原本是 -禹伤先人父鲧(发音和滚相同)功之不成受诛,乃劳身焦思,居外十三年,过家门不敢入 -“三过家门而不入"这个短语中, 与原文少一个“敢”字,少了一个字,含义差距很大。 -没有敢字,说明是自己主动的。加上敢字,则会让人思考。禹为什么不敢回家?他在怕什么呢? -这里就需要提到禹的父亲鲧。 -鲧治水九年,没有把水治理好。在舜巡视的时候,被赐死在羽山。 -舜登用,摄行天子之政,巡狩。行视鲧之治水无状,乃殛(发音和即相同)鲧于羽山以死 -所以,如果禹治不好水,你想禹的下场是什么?
Build Docker Image With Libpcap
常规构建 一般情况下,我们的Dockerfile可能是下面这样的 +
JS运行时构建独立二进制程序比较
很早以前,要运行js,则必须安装nodejs,且没什么办法可以把js直接构建成一个可执行的文件。 +后来出现一个pkg的npm包,可以用来将js打包成可执行的文件。 +我好像用过这个包,但是似乎中间出过一些问题。 +现在是2023年,前端有了新的气象。 +除了nodejs外,还有其他的后来新秀,如deno, 还有最近表火的bun +另外nodejs本身也开始支持打包独立二进制文件了,但是需要最新的20.x版本,而且我看了它的使用介绍文档,single-executable-applications, 看起来是有有点复杂,光一个构建就写了七八步。 +所以今天只比较一些deno和bun的构建出的文件大小。 +准备的js文件内容 +// app.js console.log("hello world") deno构建指令: deno compile --output h1 app.js, 构建产物为h1 bun构建指令: bun build ./app.js --compile --outfile h2, 构建产物为h2 +-rw-r--r--@ 1 wangduanduan staff 26B Jun 1 13:34 app.js -rwxrwxrwx@ 1 wangduanduan staff 78M Jun 1 13:59 h1 -rwxrwxrwx@ 1 wangduanduan staff 45M Jun 1 14:01 h2 源代码为26b字节 +deno构建相比于源码的倍数: 3152838 bun构建相比于源码的翻倍: 1804415 deno构建的可执行文件相比bun翻倍:1.7 参考 https://bun.sh/docs/bundler/executables https://deno.com/manual@v1.34.1/tools/compiler https://nodejs.org/api/single-executable-applications.html
Build Docker Image With Libpcap
常规构建 一般情况下,我们的Dockerfile可能是下面这样的 这个Dockerfile使用了多步构建,使用golang:1.19.4作为构建容器,二进制文件构建成功后,单独把文件复制到alpine镜像。 这样做的好处是最后产出的镜像非常小,一般只有十几MB的样子,如果直接使用golang的镜像来构建,镜像体积就可能达到1G左右。 FROM golang:1.19.4 as builder ENV GO111MODULE=on GOPROXY=https://goproxy.cn,direct WORKDIR /app COPY . . RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o run . FROM alpine:3.14.2 WORKDIR /app COPY encdec run.sh /app/ COPY --from=builder /app/run . EXPOSE 3000 ENTRYPOINT ["/app/run"] 依赖libpcap的构建 如果使用了程序使用了libpcap 来抓包,那么除了我们自己代码产生的二进制文件外,可能还会依赖libpcap的文件。常规打包就会报各种错误,例如文件找不到,缺少so文件等等。 libpcap是一个c库,并不是golang的代码,所以处理起来要不一样。 下面直接给出Dockerfile @@ -53,7 +63,7 @@ 性能差,首页渲染慢,常常要等很久,首页才能打开 产品定位混乱,随意更改用户数据 我记得有时候我把知识库升级成了空间,过了一段时间,不知道为什么空间由变成了知识库。 数字花园这个概念真的很烂。我好好的个人主页,某一天打开,大变样,换了个名字,叫做数字花园。甚至没有给用户一个选择保留老版本的个人主页的权利。太不尊重用户了!! 就好像你下班回家,看见房门被人撬开,你打开房门,看见有人在你的客厅种满大蒜,然后还兴高采烈的告诉你,看,这是您的数字菜园!多好,以后不用买蒜了。 会员的流量计费规则, 或许现在的计费规则已经变了,我也没有再充会员,但是再以前。即使是会员,也是按流量计费的。什么叫按流量计费,假如你的一篇博客里上传了一张1mb的图片,即使你后来把这个图片删了,这1mb的流量还是会存在。而且流量是一直往上涨的,还不像运营商,每月一号给你清零一次的机会。
模块传参的重构
写过opensips脚本的同学,往往对函数的传参感到困惑。 例如: ds_select_dst()可以接受整数或者值为正数的变量作为第一个参数,但是nat_uac_test()的第一个参数就只能是整数,而不能是变量 为什么rl_check()可以接受格式化的字符串,而save()只能接受字符串。 为什么ds_select_dst("1", "4") 作为整数也要加上双引号? 为什么变量要加上双引号? ds_select_dst("$var(aa)", "4") 为什么t_on_branch("1")路由的钩子要加上双引号? 为什么route(go_to_something);这里又不需要加上引号? ds_select_dst("1", "0"); $var(aa)=1; ds_select_dst("$var(aa)", "0"); rl_check("gw_$ru", "$var(limit)"); #格式化的gw_$ru save("location"); #单纯的字符串作为参数 从3.0开始,传参可以更加自然。 -整数可以直接传参,不用加双引号 do_something(1, 1); 输入或者输出的$var(), 不用加双引号,加了反而会报错 do_something($var(a), $var(b)); 格式化字符串,需要加双引号 do_something(1, "$var(bb)_$var(b)"); 参考 https://blog.opensips.org/2019/11/05/the-module-function-interface-rework-in-opensips-3-0/ https://www.opensips.org/Documentation/Script-Syntax-3-0#
Pdf学习资料
TelNYX.pdf OpenSIPS 2.3 mediasoup Cutting Edge WebRTC Video COnferencing FreeSWITCH-driven routing in OpenSIPS Voicenter: Contact center on Steroids Vlad_Paiu-Distributed_OpenSIPS_Systems_Cluecon14.pdf Vlad_Paiu-OpenSIPS_Summit_Austin_2015-Async.pdf Ionut_Ionita-OpenSIPS_Summit2017-Capturing_beyond_SIP FLAVIO_GONCALVES-Fraud_in_VoIP_Today.pdf Alexandr_Dubovikov-OpenSIPS_Summit2017-RTC_Threat_Intelligence_Exchange.pdf OpenSIPS_LoadBalancing.pdf Vlad_Paiu-OpenSIPS_Summit_2104-OpenSIPS_End_User_Services.pdf Razvan_Crainea-OpenSIPS_Summit2017-From_SIPI_Trunks_to_End_Users.pdf Razvan_Crainea-OpenSIPS_Summit-Scaling_Asterisk.pdf Vlad_Paiu-OpenSIPS_Summit-Service_Enabling_for_Asterisk.pdf Jonas_Borjesson-OpenSIPS_Summit_Austin_2015.pdf Michele_Pinasi-OpenSIPS_Summit2017-How_we_did_VoIP.pdf Bogdan_Iancu-OpenSIPS_Summit_Keynotes.pdf Giovanni_Maruzselli-OpenSIPS_Summit2017-Scaling_FreeSWITCHes.pdf Maksym_Sobolyev-OpenSIPS_Summit2017-Sippy_Labs_update.pdf docker-cluster.pdf voip malware attack tool .pdf Bogdan_Iancu-OpenSIPS_Summit-OpenSIPS_2_1.pdf Pete_Kelly-OpenSIPS_Workshop_Chicago_2015-Calling_Cards_B2BUA.pdf Bogdan_Iancu-OpenSIPS_Summit-keynotes.pdf Alex_Goulis-Opensips_CNAME.pdf OpenSIPS_2.0_Framework.pdf Norman_Brandinger-OpenSIPS_Summit_2014-Advanced_SIP_Routing_with_OpenSIPS_modules.pdf
进程实战
docker slim
wifi工作模式测试
路由器无线网络的模式有11b only ,11g only, 11n only,11bg mixed,11bgn mixed +
论禹三过家门而不入的真实原因
最早听说“三过家门而不入”,是说禹治水大公无私,路过家门都没有回家。 +最近看到史记,发现这句话原本是 +禹伤先人父鲧(发音和滚相同)功之不成受诛,乃劳身焦思,居外十三年,过家门不敢入 +“三过家门而不入"这个短语中, 与原文少一个“敢”字,少了一个字,含义差距很大。 +没有敢字,说明是自己主动的。加上敢字,则会让人思考。禹为什么不敢回家?他在怕什么呢? +这里就需要提到禹的父亲鲧。 +鲧治水九年,没有把水治理好。在舜巡视的时候,被赐死在羽山。 +舜登用,摄行天子之政,巡狩。行视鲧之治水无状,乃殛(发音和即相同)鲧于羽山以死 +所以,如果禹治不好水,你想禹的下场是什么?
进程实战
docker slim
wifi工作模式测试
路由器无线网络的模式有11b only ,11g only, 11n only,11bg mixed,11bgn mixed 11b:就是11M 11g:就是54M 11n:就是150M或者300M only:在此模式下,频道仅使用 802.11b标准mixed:支持混合 802.11b 和 802.11g 装置 修改路由器工作模式后,手机连接wifi,然后用腾讯手机管家对WiFi测速 工作模式 下载速度 11b 200kb/s 11g 400kb/s 11n 1.1MB/s 11bgn mixed 2.06MB/s 所以,选择11bgn是个不错的选择。
influxdb时间精度到秒
var data = [] var t1 = [ ["2019-12-11T09:13:06.078545239Z",153], ["2019-12-11T09:14:06.087484224Z",118], ["2019-12-11T09:15:07.723571286Z",198], ["2019-12-11T09:16:09.534879791Z",249], ] var t2 = [ ["2019-12-11T09:13:06Z",153], ["2019-12-11T09:14:06Z",118], ["2019-12-11T09:15:07Z",198], ["2019-12-11T09:16:09Z",249], ] var data = t1.map(function(item){ return { value: [item[0], item[1]] } }) option = { title: { text: '动态数据 + 时间坐标轴' }, tooltip: { trigger: 'axis' }, xAxis: { type: 'time' }, yAxis: { type: 'value' }, series: [{ name: '模拟数据', type: 'line', showSymbol: false, hoverAnimation: false, data: data }] }; 数据集t1时间精度到秒,并且带9位小数 数据集t2时间精确到秒,不带小数 t1的绘线出现往回拐,明显有问题。不知道这是不是echars的bug...
influxdb HTTP 接口学习
查询某个字段 q=SELECT real_used_size FROM opensips WHERE time > '2019-12-05T00:10:00Z' 正常查询结果,下面是例子,和上面的sql没有关系。 @@ -32,7 +40,7 @@ 有一天他突然想搞点事情,就对猴子说:从今以后,每天早上每人给你们四颗枣,下午每人给你们三颗枣,你们说好不好? 猴子们上蹿下跳,怒发冲冠,生气的说:不行!不行!那怎么行呢? 养猴子人摆摆手,和气的说:好吧,好吧,还按照以前方式来。 -猴子们很满意,笼子里充满祥和的空气~
众生鱼肉
冷风如刀,以大地为砧板,视众生为鱼肉。万里飞雪,将苍穹作洪炉,溶万物为白银 《多情剑客无情剑》
第三种生存
我以前看过王志刚的一本书《第三种生存》,觉得蛮有意思的。 +
众生鱼肉
冷风如刀,以大地为砧板,视众生为鱼肉。万里飞雪,将苍穹作洪炉,溶万物为白银 《多情剑客无情剑》
第三种生存
我以前看过王志刚的一本书《第三种生存》,觉得蛮有意思的。 依赖于权利阶层。例如当官 依赖于财富阶层。例如打工 大部分人其实都在依赖权利阶层或者财富阶层在生存,能够跳出的人这两种生存方式的,称之为第三种生存。 第三种生存方式,是讲自己打造成某个领域中专家级别的人物。 称为专家,称为大多数中的少数人。物以稀为贵,人亦如此。
所有的古镇都是一个样[todo]
买了语雀会员是怎样体验?
今天打开语雀,发现已经有了会员功能。说实在的,相比普通用户,会员的优势并不大。除非你是哪种重度文字控患者,10个知识库并不够你用了。 @@ -39,9 +39,7 @@ 9. 无继国 国人从不生育,也没有孩子。而且他们也不区分男女。 之所以他们国家的人口没有减少,是因为人死后120年之后还会再次复活。 所以他们都是死了又活,活了有死。 -10. 深目国 他们脸上没有眼睛,他们的两个眼睛都长在自己的手掌里。是不是觉得似曾相识呢?火影里面的我爱罗。
接口压力测试
ab安装 apt-get install apache2-utils
vox语音转mp3
apt-get install sox libsox-fmt-mp3 -y sox input.vox output.mp3 sox支持命令 ➜ vox sox --help sox: SoX v14.4.1 Usage summary: [gopts] [[fopts] infile]... [fopts] outfile [effect [effopt]]... SPECIAL FILENAMES (infile, outfile): - Pipe/redirect input/output (stdin/stdout); may need -t -d, --default-device Use the default audio device (where available) -n, --null Use the `null' file handler; e.g. with synth effect -p, --sox-pipe Alias for `-t sox -' SPECIAL FILENAMES (infile only): "|program [options] ..." Pipe input from external program (where supported) http://server/file Use the given URL as input file (where supported) GLOBAL OPTIONS (gopts) (can be specified at any point before the first effect): --buffer BYTES Set the size of all processing buffers (default 8192) --clobber Don't prompt to overwrite output file (default) --combine concatenate Concatenate all input files (default for sox, rec) --combine sequence Sequence all input files (default for play) -D, --no-dither Don't dither automatically --effects-file FILENAME File containing effects and options -G, --guard Use temporary files to guard against clipping -h, --help Display version number and usage information --help-effect NAME Show usage of effect NAME, or NAME=all for all --help-format NAME Show info on format NAME, or NAME=all for all --i, --info Behave as soxi(1) --input-buffer BYTES Override the input buffer size (default: as --buffer) --no-clobber Prompt to overwrite output file -m, --combine mix Mix multiple input files (instead of concatenating) --combine mix-power Mix to equal power (instead of concatenating) -M, --combine merge Merge multiple input files (instead of concatenating) --magic Use `magic' file-type detection --multi-threaded Enable parallel effects channels processing --norm Guard (see --guard) & normalise --play-rate-arg ARG Default `rate' argument for auto-resample with `play' --plot gnuplot|octave Generate script to plot response of filter effect -q, --no-show-progress Run in quiet mode; opposite of -S --replay-gain track|album|off Default: off (sox, rec), track (play) -R Use default random numbers (same on each run of SoX) -S, --show-progress Display progress while processing audio data --single-threaded Disable parallel effects channels processing --temp DIRECTORY Specify the directory to use for temporary files -T, --combine multiply Multiply samples of corresponding channels from all input files (instead of concatenating) --version Display version number of SoX and exit -V[LEVEL] Increment or set verbosity level (default 2); levels: 1: failure messages 2: warnings 3: details of processing 4-6: increasing levels of debug messages FORMAT OPTIONS (fopts): Input file format options need only be supplied for files that are headerless....
MySql索引
prd是表名,agent是表中的一个字段,index_agent是索引名 -create index index_agent on prd(agent) # 创建索引 show index from prd # 显示表上有哪些索引 drop index index_agent on prd # 删除索引 创建索引的好处是查询速度有极大的提成,坏处是更新记录时,有可能也会更新索引,从而降低性能。 -所以索引比较适合那种只写入,或者查询,但是一般不会更新的数据。
接口压力测试
ab安装 apt-get install apache2-utils
vox语音转mp3
apt-get install sox libsox-fmt-mp3 -y sox input.vox output.mp3 sox支持命令 ➜ vox sox --help sox: SoX v14.4.1 Usage summary: [gopts] [[fopts] infile]... [fopts] outfile [effect [effopt]]... SPECIAL FILENAMES (infile, outfile): - Pipe/redirect input/output (stdin/stdout); may need -t -d, --default-device Use the default audio device (where available) -n, --null Use the `null' file handler; e.g. with synth effect -p, --sox-pipe Alias for `-t sox -' SPECIAL FILENAMES (infile only): "|program [options] ..." Pipe input from external program (where supported) http://server/file Use the given URL as input file (where supported) GLOBAL OPTIONS (gopts) (can be specified at any point before the first effect): --buffer BYTES Set the size of all processing buffers (default 8192) --clobber Don't prompt to overwrite output file (default) --combine concatenate Concatenate all input files (default for sox, rec) --combine sequence Sequence all input files (default for play) -D, --no-dither Don't dither automatically --effects-file FILENAME File containing effects and options -G, --guard Use temporary files to guard against clipping -h, --help Display version number and usage information --help-effect NAME Show usage of effect NAME, or NAME=all for all --help-format NAME Show info on format NAME, or NAME=all for all --i, --info Behave as soxi(1) --input-buffer BYTES Override the input buffer size (default: as --buffer) --no-clobber Prompt to overwrite output file -m, --combine mix Mix multiple input files (instead of concatenating) --combine mix-power Mix to equal power (instead of concatenating) -M, --combine merge Merge multiple input files (instead of concatenating) --magic Use `magic' file-type detection --multi-threaded Enable parallel effects channels processing --norm Guard (see --guard) & normalise --play-rate-arg ARG Default `rate' argument for auto-resample with `play' --plot gnuplot|octave Generate script to plot response of filter effect -q, --no-show-progress Run in quiet mode; opposite of -S --replay-gain track|album|off Default: off (sox, rec), track (play) -R Use default random numbers (same on each run of SoX) -S, --show-progress Display progress while processing audio data --single-threaded Disable parallel effects channels processing --temp DIRECTORY Specify the directory to use for temporary files -T, --combine multiply Multiply samples of corresponding channels from all input files (instead of concatenating) --version Display version number of SoX and exit -V[LEVEL] Increment or set verbosity level (default 2); levels: 1: failure messages 2: warnings 3: details of processing 4-6: increasing levels of debug messages FORMAT OPTIONS (fopts): Input file format options need only be supplied for files that are headerless....
关于v语言: 越是漂亮的语言,越会骗人
今天逛github trending, 发现榜首有个项目,叫做v语言。https://github.com/vlang/v +
MySql索引
prd是表名,agent是表中的一个字段,index_agent是索引名 +create index index_agent on prd(agent) # 创建索引 show index from prd # 显示表上有哪些索引 drop index index_agent on prd # 删除索引 创建索引的好处是查询速度有极大的提成,坏处是更新记录时,有可能也会更新索引,从而降低性能。 +所以索引比较适合那种只写入,或者查询,但是一般不会更新的数据。
关于v语言: 越是漂亮的语言,越会骗人
今天逛github trending, 发现榜首有个项目,叫做v语言。https://github.com/vlang/v 看了介绍,说这个语言非常牛X,几乎囊括了所有语言的长处。性能、编译耗时、内存使用都是碾压其他语言。 但是,要记住张无忌娘说过的一句话:越是漂亮的女人,越会骗人。 每一门语言都是由特定的使用场景,从而则决定了该语言在该场景下解决问题的能力。 @@ -62,10 +64,7 @@ 功能 nodejs版 python版 http工具 request requests 中文分词工具 node-segment, nodejieba(一直没有安装成功过) jieba(分词准确度比node-segment好) DOM解析工具 cheeio pyquery(这两个工具都是有类似jQuery那种选择DOM的接口,很方便) 函数编程工具 underscore.js underscore.py(underscore来处理集合比较方便) 服务器 express flask 4. 开始的噩梦:中文乱码 感觉每个学python的人都遇到过中文乱码的问题。我也不例外。 首先要抓取网页,但是网页在控制台输出的时候,中文总是乱码。搞了好久,搞得我差点要放弃python。最终找到解决方法。 解决python3 UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xXX’ in position XX 过程很艰辛,但是从中也学到很多知识。 -import io import sys sys.stdout = io.TextIOWrapper(sys.stoodout.buffer,encoding='gb18030') 5. 函数式编程: 顺享丝滑 #filename word_rank.py import requests import io import re import sys import jieba as _jieba # 中文分词比较优秀的一个库 from pyquery import PyQuery as pq #类似于jquery、cheerio的库 from underscore import _ # underscore....
代码整洁之道 - 有意义的命名
在小朱元璋出生一个月后,父母为他取了一个名字(元时惯例):朱重八,这个名字也可以叫做朱八八。我们这里再介绍一下,朱重八家族的名字,都很有特点。 -朱重八高祖名字:朱百六; 朱重八曾祖名字:朱四九; 朱重八祖父名字:朱初一; 他的父亲我们介绍过了,叫朱五四。 取这样的名字不是因为朱家是搞数学的,而是因为在元朝,老百姓如果不能上学和当官就没有名字,只能以父母年龄相加或者出生的日期命名。(登记户口的人一定会眼花)–《明朝那些事儿》 -那么问题来了,朱四九和朱百六是什么关系? 你可能马上懵逼了。所以说:命名不仅仅是一种科学,更是一种艺术。 -1. 名副其实 // bad var d; // 分手的时间,以天计算 // good var daysAfterBrokeUp; // 分手以后,以天计算 2. 避免误导 // bad var nameList = 'wdd'; // List一般暗指数据是数组,而不应该赋值给字符串 // good var nameList = ['wdd','ddw','dwd']; // // bad var ill10o = 10; //千万不要把i,1,l,0,o,O放在一起,傻傻分不清楚 // good var illOne = 10; 3. 做有意义的区分 // bad var userData, userInfo; // Data和Info, 有什么区别????, 不要再用data和info这样模糊不清的单词了 // good var userProfile, userAcount 4. 使用读得出来的名称 // bad var beeceearrthrtee; // 你知道怎么读吗? 鼻涕阿三?? // good var userName; 5....
【译】13简单的优秀编码规则(从我15年的经验)
原文地址:https://hackernoon.com/few-simple-rules-for-good-coding-my-15-years-experience-96cb29d4acd9#.ddzpjb80c +
代码整洁之道 - 有意义的命名
在小朱元璋出生一个月后,父母为他取了一个名字(元时惯例):朱重八,这个名字也可以叫做朱八八。我们这里再介绍一下,朱重八家族的名字,都很有特点。 +朱重八高祖名字:朱百六; 朱重八曾祖名字:朱四九; 朱重八祖父名字:朱初一; 他的父亲我们介绍过了,叫朱五四。 取这样的名字不是因为朱家是搞数学的,而是因为在元朝,老百姓如果不能上学和当官就没有名字,只能以父母年龄相加或者出生的日期命名。(登记户口的人一定会眼花)–《明朝那些事儿》 +那么问题来了,朱四九和朱百六是什么关系? 你可能马上懵逼了。所以说:命名不仅仅是一种科学,更是一种艺术。 +1. 名副其实 // bad var d; // 分手的时间,以天计算 // good var daysAfterBrokeUp; // 分手以后,以天计算 2. 避免误导 // bad var nameList = 'wdd'; // List一般暗指数据是数组,而不应该赋值给字符串 // good var nameList = ['wdd','ddw','dwd']; // // bad var ill10o = 10; //千万不要把i,1,l,0,o,O放在一起,傻傻分不清楚 // good var illOne = 10; 3. 做有意义的区分 // bad var userData, userInfo; // Data和Info, 有什么区别????, 不要再用data和info这样模糊不清的单词了 // good var userProfile, userAcount 4. 使用读得出来的名称 // bad var beeceearrthrtee; // 你知道怎么读吗? 鼻涕阿三?? // good var userName; 5....
【译】13简单的优秀编码规则(从我15年的经验)
原文地址:https://hackernoon.com/few-simple-rules-for-good-coding-my-15-years-experience-96cb29d4acd9#.ddzpjb80c 嗨,我的工作作为一个程序员超过15年,并使用许多不同的语言,范例,框架和其他狗屎。我想和大家分享我写好代码的规则。 1. 优化VS可读性 去他妈的优化 始终编写易于阅读且对开发人员可理解的代码。因为在硬可读代码上花费的时间和资源将远远高于从优化中获得的。如果你需要进行优化,那么使它像DI的独立模块,具有100%的测试覆盖率,并且不会被触及至少一年。 2. 架构第一 我看到很多人说“我们需要快速做事,我们没有时间做架构”。其中约99%的人因为这样的想法而遇到了大问题。编写代码而不考虑其架构是没有用的,就像没有实现它们的计划一样,梦想你的愿望。在编写代码的第一行之前,你应该明白它将要做什么,它将如何使用,模块,服务如何相互工作,它将有什么结构,如何进行测试和调试,以及如何更新。 @@ -32,7 +35,7 @@ 后悔药 哪怕是改动一行代码,也要创建一个新的分支。如果发现前方有无法绕行的故障,你将会庆幸自己给自己留下退路。 不要把自己逼到死角,永远给自己留下一个B计划。 小碎步 不要大段重构,要小步慢走。尽量减少发生问题的点。在一本书中找错别字很难,但是在一行文字中找错别字就非常容易了。 -勿猜测 当你不知道某个函数如何使用时,不要去猜测,而应该去看官方文档是如何讲解这个函数的。
一个人喝粥太淡
一个人喝粥太淡,两个人电话粥太甜。回忆似水流年,翘首如花美眷。对着微信聊天,凌晨了也没有觉得晚。窗外的月亮很圆,就像你那双明亮的眼。说一声晚安,道一声再见,我的梦中是有你的春天。
你有邮箱吗?
你有邮箱吗?如果你有的话,那么当我不在你身边的时候,我会每天给你写一封信,告诉你,我今天遇见的的人,告诉你,我身边发生的事,告诉你,当你不在我身边时,我有多想你
MySql表复制 与 调整字段
表复制 # 不跨数据库 insert into subscriber_copy(id, username) select id, username from subscriber # 跨数据库 需要在表名前加上数据库名 insert into wdd.test(id, username) select id, username from opensips.subscriber 调整表结构 增加字段 ALTER TABLE test ADD `username` char(64) not null default ''
一个人喝粥太淡
一个人喝粥太淡,两个人电话粥太甜。回忆似水流年,翘首如花美眷。对着微信聊天,凌晨了也没有觉得晚。窗外的月亮很圆,就像你那双明亮的眼。说一声晚安,道一声再见,我的梦中是有你的春天。
你有邮箱吗?
你有邮箱吗?如果你有的话,那么当我不在你身边的时候,我会每天给你写一封信,告诉你,我今天遇见的的人,告诉你,我身边发生的事,告诉你,当你不在我身边时,我有多想你
理解mysql 表连接
表wdd_a 表wdd_b +
MySql表复制 与 调整字段
表复制 # 不跨数据库 insert into subscriber_copy(id, username) select id, username from subscriber # 跨数据库 需要在表名前加上数据库名 insert into wdd.test(id, username) select id, username from opensips.subscriber 调整表结构 增加字段 ALTER TABLE test ADD `username` char(64) not null default ''
理解mysql 表连接
表wdd_a 表wdd_b 不使用where子句生成的表的数是两个表行数的积,其字段的字段两个表的拼接 查询的行数 = 表a的行数 x 表b的行数 SELECT * FROM `wdd_a` join `wdd_b` order by wdd_a.id 表联合不使用where子句,会存在两个问题 @@ -25,7 +25,7 @@ 一般情况下,我不喜欢看婚姻题材的影视。但是,任何事情都逃不过真相定律。
git 删除未跟踪的文件
git clean -n # 打印哪些文件将会被删除 git clean -f # 删除文件 git clean -fd # 删除文件个目录 参考 https://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the-current-git-working-tree
pdf转ppt工具收集
https://smallpdf.com https://www.pdfpai.com/pdf-to-powerpoint
Royal TSX git status 输出乱码
问题描述 连接服务器时的报警 -bash: 警告:setlocale: LC_CTYPE: 无法改变区域选项 (UTF-8): 没有那个文件或目录 git status 发现本来应该显示 ‘on brance master’ 之类的地方,居然英文也乱码了,都是问号。 解决方案 vim /etc/environment , 然后加入如下代码,然后重新打开ssh窗口 -LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
git取消设置http代理
git config --global --unset http.proxy
关注点分离的问题
前端组件化时,有个很时髦的词语叫做关注点分离,这个用在组件上比较好,我们可以把大的模块分割成小的模块,降低了整个模块的复杂度。 +
git取消设置http代理
git config --global --unset http.proxy
关注点分离的问题
前端组件化时,有个很时髦的词语叫做关注点分离,这个用在组件上比较好,我们可以把大的模块分割成小的模块,降低了整个模块的复杂度。 但是有时候,我觉得关注点分离并不好。这个不是指在代码开发过程,而是解决问题的过程。 关注点分离的处理方式 假如我要解决问题A,但是在解决过程中,我发现了一个我不知道的东西B, 然后我就去研究这B是什么东西,然后接二连三,我从B一路找到了Z。 然后在这个解决过程耽误一段时候后,才想起来:我之前是要解决什么问题来着?? @@ -18,7 +18,7 @@ 参考 https://discussionschinese.apple.com/thread/140138832?answerId=140339277322#140339277322 https://www.v2ex.com/t/505737 https://blog.csdn.net/Goals1989/article/details/88578012
mysql远程连接速度太慢
编辑/etc/my.cnf,增加skip-name-resolve skip-name-resolve 然后重启mysql
xmysql 一行命令从任何mysql数据库生成REST API
github向我推荐这个xmysql时候,我瞟了一眼它的简介One command to generate REST APIs for any MySql Database, 说实话这个介绍让我眼前一亮,想想每次向后端的同学要个接口的时候,他们总是要哼哧哼哧搞个半天给才能我。抱着试试看的心态,我试用了一个疗程,oh不是, 是安装并使用了一下。 说实话,体验是蛮不错的,但是体验一把过后,我想不到这个工具的使用场景,因为你不可能把数据库的所有表都公开出来,让前端随意读写, 但是试试看总是不错的. 1 来吧,冒险一次! 安装与使用 -npm install -g xmysqlxmysql -h localhost -u mysqlUsername -p mysqlPassword -d databaseName浏览器打开:http://localhost:3000, 应该可以看到一堆json 2 特点 产生REST Api从任何mysql 数据库 🔥🔥 无论主键,外键,表等的命名规则如何,都提供API 🔥🔥 支持复合主键 🔥🔥 REST API通常使用:CRUD,List,FindOne,Count,Exists,Distinct批量插入,批量删除,批量读取 🔥 关联表 翻页 排序 按字段过滤 🔥 行过滤 🔥 综合功能 Group By, Having (as query params) 🔥🔥 Group By, Having (as a separate API) 🔥🔥 Multiple group by in one API 🔥🔥🔥🔥 Chart API for numeric column 🔥🔥🔥🔥🔥🔥 Auto Chart API - (a gift for lazy while prototyping) 🔥🔥🔥🔥🔥🔥 XJOIN - (Supports any number of JOINS) 🔥🔥🔥🔥🔥🔥🔥🔥🔥 Supports views Prototyping (features available when using local MySql server only) Run dynamic queries 🔥🔥🔥 Upload single file Upload multiple files Download file 3 API 概览 HTTP Type API URL Comments GET / Gets all REST APIs GET /api/tableName Lists rows of table POST /api/tableName Create a new row PUT /api/tableName Replaces existing row with new row POST :fire: /api/tableName/bulk Create multiple rows - send object array in request body GET :fire: /api/tableName/bulk Lists multiple rows - /api/tableName/bulk?...
Jenkins 全局变量参考
docker The docker variable offers convenient access to Docker-related functions from a Pipeline script.Methods needing a slave will implicitly run a node {…} block if you have not wrapped them in one. It is a good idea to enclose a block of steps which should all run on the same node in such a block yourself. (If using a Swarm server, or any other specific Docker server, this probably does not matter, but if you are using the default server on localhost it likely will....
【笔记】操作系统:虚拟化 并发 持久化
虚拟化 问题: +
Jenkins 全局变量参考
docker The docker variable offers convenient access to Docker-related functions from a Pipeline script.Methods needing a slave will implicitly run a node {…} block if you have not wrapped them in one. It is a good idea to enclose a block of steps which should all run on the same node in such a block yourself. (If using a Swarm server, or any other specific Docker server, this probably does not matter, but if you are using the default server on localhost it likely will....
【笔记】操作系统:虚拟化 并发 持久化
虚拟化 问题: 操作系统如何虚拟化? 虚拟化有什么好处? 操作系统向下控制硬件,向上提供API给应用程序调用。 系统的资源是有限的,应用程序都需要资源才能正常运行,所以操作系统也要负责资源的分配和协调。通常计算机有以下的资源。 cpu 内存 磁盘 网络 有些资源可以轮流使用,而有些资源只能被独占使用。
问题排查方法论
处理问题的关键在于收集数据,基于数据找出触发条件。 1. 处理步骤 收集信息并记录:包括日志,截图,抓包,客户反馈等等。注意:原始数据非常重要,如果不记录下来,有可能再也无法去重现。 分析数据:注意:分析数据不要有提前的结果倾向,否者只会找有利于该倾向的证据。 给出报告和建议,以及解决方案,并记录存档 2. 概率维度 问题出现的概率,是一个非常重要的指标,需要提前明确 @@ -27,7 +27,7 @@ 等自己能够理解老代码时,再去重构。我相信在理解基础上重构,会更快,也更安全。 不要大段改写,要见缝插针 不要在老代码中直接写自己的代码,应该使用函数。 在老代码中改动一行,调用自己写的函数。 -几乎每种语言中都有函数这种组织代码的形式,通过见缝插针调用函数的方式。能够尽量减少老代码的改动,如果出现问题,也比较容易调试。
1秒搭建静态文件服务器
基于python # 基于python2 python -m SimpleHTTPServer 8088 # 基于python3 python -m http.server 8088 基于Node.js https://github.com/zeit/serve https://github.com/http-party/http-server
python request 库学习
上传文件 import requests headers = { "ssid":"1234" } files = {'file': open('yourfile.tar.gz', 'rb')} url="http://localhost:1345/fileUpload/" r = requests.post(url, files=files, headers=headers) print(r.status_code)
编码规则
变量不要使用缩写,要见名知意。现代化的IDE都提供自动补全功能,即使是VIM, 也可以用ctrl+n, ctrl+p, ctrl+y, ctrl+e去自动补全。 变量名缩写真是灾难。
Docker相关问题及解决方案
使用HTTP仓库 默认docker不允许使用HTTP的仓库,只允许HTTPS的仓库。如果你用http的仓库,可能会报如下的错误。 +
1秒搭建静态文件服务器
基于python # 基于python2 python -m SimpleHTTPServer 8088 # 基于python3 python -m http.server 8088 基于Node.js https://github.com/zeit/serve https://github.com/http-party/http-server
python request 库学习
上传文件 import requests headers = { "ssid":"1234" } files = {'file': open('yourfile.tar.gz', 'rb')} url="http://localhost:1345/fileUpload/" r = requests.post(url, files=files, headers=headers) print(r.status_code)
编码规则
变量不要使用缩写,要见名知意。现代化的IDE都提供自动补全功能,即使是VIM, 也可以用ctrl+n, ctrl+p, ctrl+y, ctrl+e去自动补全。 变量名缩写真是灾难。
Docker相关问题及解决方案
使用HTTP仓库 默认docker不允许使用HTTP的仓库,只允许HTTPS的仓库。如果你用http的仓库,可能会报如下的错误。 Get https://registry:5000/v1/_ping: http: server gave HTTP response to HTTPS client 解决方案是:配置insecure-registries使docker使用我们的http仓库。 在 /etc/docker/daemon.json 文件中添加 @@ -51,9 +51,7 @@ 我记得之前看过一篇文章,一个开发者调通过回调函数计费,回调函数是由事件触发,但是没想到有时候事件会重发,导致重复计费。后来这名开发者在自己的代码中加入事件去重的功能,最终解决了这个问题。 事后总结:我觉得我不该怀疑Vue这种库出现了问题,但是我又不禁去怀疑。 通过这个bug, 我也学到了第二方法,可以删除Vue数组中的某一项,参考下面代码。 -// Only in 2.2.0+: Also works with Array + index. removeOneAgentByIndex: function (index) { this.$delete(this.agents, index) } 另外Vue devtools有时候并不会实时的观测到组件属性的变化,即使点了Refresh按钮。如果点了Refresh按钮还不行,那建议你重新打开谷歌浏览器的devtools面板。
Node.js 如何找出循环依赖的文件?如何解决循环依赖问题?
本文重点是讲解如何解决循环依赖这个问题。关心这个问题是如何产生的,可以自行谷歌。 -如何重现这个问题 // a.js const {sayB} = require('./b.js') sayB() function sayA () { console.log('say A') } module.exports = { sayA } // b.js const {sayA} = require('./a.js') sayA() function sayB () { console.log('say B') } module.exports = { sayB } 执行下面的代码 -➜ test git:(master) ✗ node a.js /Users/dd/wj-gitlab/tools/test/b.js:3 sayA() ^ TypeError: sayA is not a function at Object.<anonymous> (/Users/dd/wj-gitlab/tools/test/b.js:3:1) at Module._compile (module.js:635:30) at Object.Module._extensions..js (module.js:646:10) at Module.load (module.js:554:32) at tryModuleLoad (module....
shields小徽章是如何生成的?以及搭建自己的shield服务器
shields小徽章介绍 一般开源项目都会有一些小徽章来标识项目的状态信息,并且这些信息是会自动更新的。在shields的官网https://shields.io/#/, 上面有各种各样的小图标,并且有很多自定义的方案。 +
Node.js 如何找出循环依赖的文件?如何解决循环依赖问题?
本文重点是讲解如何解决循环依赖这个问题。关心这个问题是如何产生的,可以自行谷歌。 +如何重现这个问题 // a.js const {sayB} = require('./b.js') sayB() function sayA () { console.log('say A') } module.exports = { sayA } // b.js const {sayA} = require('./a.js') sayA() function sayB () { console.log('say B') } module.exports = { sayB } 执行下面的代码 +➜ test git:(master) ✗ node a.js /Users/dd/wj-gitlab/tools/test/b.js:3 sayA() ^ TypeError: sayA is not a function at Object.<anonymous> (/Users/dd/wj-gitlab/tools/test/b.js:3:1) at Module._compile (module.js:635:30) at Object.Module._extensions..js (module.js:646:10) at Module.load (module.js:554:32) at tryModuleLoad (module....
shields小徽章是如何生成的?以及搭建自己的shield服务器
shields小徽章介绍 一般开源项目都会有一些小徽章来标识项目的状态信息,并且这些信息是会自动更新的。在shields的官网https://shields.io/#/, 上面有各种各样的小图标,并且有很多自定义的方案。 起因:如何给私有部署的jenkins制作shields服务? 私有部署的jenkins是用来打包docker镜像的,而我想获取最新的项目打包的jenkins镜像信息。但是私有的jenkins项目信息,公网的shields服务是无法获取其信息的。那么如果搭建一个私有的shields服务呢? 第一步:如何根据一些信息,制作svg图标 查看shields图标的源码,可以看到这些图标都是svg格式的图标。然后的思路就是,将文字信息转成svg图标。最后我发现这个思路是个死胡同, 有个npm包叫做,text-to-svg, 似乎可以将文本转成svg, 但是看了文本转svg的效果,果断就放弃了。 @@ -76,12 +78,7 @@ 也有几家使用动态背景图的官网。我记得知乎以前就用过动态背景图,但是现在找不到了。另外一个使用动态背景图的是daocloud, CPU也是会在首页飙升到50%。 所谓:强招必自损,动态背景图在给人以炫酷科技感的同时,也需要权衡这种技术对客户计算机的压力。 另外,不要小看JavaScript, 它也可能引起大问题
IE浏览器不支持location.origin
某些IE浏览器location.origin属性是undefined,所以如果你要使用该属性,那么要注意做个能力检测。 -if (!window.location.origin) { window.location.origin = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ':' + window.location.port: ''); }i
端到端测试哪家强?不容错过的Cypress
1. 目前E2E测试工具有哪些? 项目 Web Star puppeteer Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) 31906 nightmare Electron 15502 nightwatch WebDriver 8135 protractor selenium 7532 casperjs PhantomJS 7180 cypress Electron 5303 Zombie 不需要 4880 testcafe 不需要 4645 CodeceptJS webdriverio 1665 端到端测试一般都需要一个Web容器,来运行前端应用。例如Chromium, Electron, PhantomJS, WebDriver等等。 -从体积角度考虑,这些Web容器体积一般都很大。 -从速度的角度考虑:PhantomJS, WebDriver < Electon, Chromium。 -而且每个工具的侧重点也不同,建议按照需要去选择。 -2. 优秀的端到端测试工具应该有哪些特点? 安装简易:我希望它非常容易安装,最好可以一行命令就可以安装完毕 依赖较少:我只想做个E2E测试,不想安装jdk, python之类的东西 速度很快:运行测试用例的速度要快 报错详细:详细的报错 API完备:鼠标键盘操作接口,DOM查询接口等 Debug方便:出错了可以很方便的调试,而不是去猜 3. 为什么要用Cypress? Cypress基本上拥有了上面的特点之外,还有以下特点。 -时光穿梭 测试运行时,Cypress会自动截图,你可以轻易的查看每个时间的截图 Debug友好 不需要再去猜测为什么测试有失败了,Cypress提供Chrome DevTools, 所以Debug是非常方便的。 实时刷新 Cypress检测测试用例改变后,会自动刷新 自动等待 不需要在使用wait类似的方法等待某个DOM出现,Cypress会自动帮你做这些 Spies, stubs, and clocks Verify and control the behavior of functions, server responses, or timers....
掌握谷歌搜索高级指令
1. 谷歌搜索指令 2. 基本命令 3. 关键词使用 4. 特殊工具 4.1. define 快速返回关键词定义 4.2. 计算器 4.3. 单位转换 4.4. 时区查询 4.5. 地区查询 4.6. 天气查询 5. 参考 1. 谷歌搜索指令 2. 基本命令 符号 简介 语法 注意点 示例 | 包含A且必须包含B | A +B | A和+之间有空格 | Maxwell +wills | 包含A且不包含B | A -B | A和+之间有空格 | Maxwell -Absolom " " | 完整匹配AB | “AB” | | “Thomas Jefferson” OR | 包含A或者B | A OR B 或者 A | B | | nodejs OR webpack +-“OR | 指令可以组合,完成更复杂的查询 | | | beach -sandy +albert +nathaniel ~ | 包含A, 并且包含B的近义词 | A ~B | | github ~js ....
金钱游戏 - 银行造钱的秘密
1. 角色划分 名称 角色 账户 A 银行家 0 B 建筑商 100万 C 商人 0 2. 建筑商向银行存储100万 名称 角色 账户 A 银行家 100万 现金 B 建筑商 100万 支票 C 商人 0 2. 商人向银行贷款100万 此时银行的账户存款已经是0了,但是B还在银行存了100万。那银行究竟是还有100万呢, 还是一毛都没有了呢。 +
端到端测试哪家强?不容错过的Cypress
1. 目前E2E测试工具有哪些? 项目 Web Star puppeteer Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) 31906 nightmare Electron 15502 nightwatch WebDriver 8135 protractor selenium 7532 casperjs PhantomJS 7180 cypress Electron 5303 Zombie 不需要 4880 testcafe 不需要 4645 CodeceptJS webdriverio 1665 端到端测试一般都需要一个Web容器,来运行前端应用。例如Chromium, Electron, PhantomJS, WebDriver等等。 +从体积角度考虑,这些Web容器体积一般都很大。 +从速度的角度考虑:PhantomJS, WebDriver < Electon, Chromium。 +而且每个工具的侧重点也不同,建议按照需要去选择。 +2. 优秀的端到端测试工具应该有哪些特点? 安装简易:我希望它非常容易安装,最好可以一行命令就可以安装完毕 依赖较少:我只想做个E2E测试,不想安装jdk, python之类的东西 速度很快:运行测试用例的速度要快 报错详细:详细的报错 API完备:鼠标键盘操作接口,DOM查询接口等 Debug方便:出错了可以很方便的调试,而不是去猜 3. 为什么要用Cypress? Cypress基本上拥有了上面的特点之外,还有以下特点。 +时光穿梭 测试运行时,Cypress会自动截图,你可以轻易的查看每个时间的截图 Debug友好 不需要再去猜测为什么测试有失败了,Cypress提供Chrome DevTools, 所以Debug是非常方便的。 实时刷新 Cypress检测测试用例改变后,会自动刷新 自动等待 不需要在使用wait类似的方法等待某个DOM出现,Cypress会自动帮你做这些 Spies, stubs, and clocks Verify and control the behavior of functions, server responses, or timers....
掌握谷歌搜索高级指令
1. 谷歌搜索指令 2. 基本命令 3. 关键词使用 4. 特殊工具 4.1. define 快速返回关键词定义 4.2. 计算器 4.3. 单位转换 4.4. 时区查询 4.5. 地区查询 4.6. 天气查询 5. 参考 1. 谷歌搜索指令 2. 基本命令 符号 简介 语法 注意点 示例 | 包含A且必须包含B | A +B | A和+之间有空格 | Maxwell +wills | 包含A且不包含B | A -B | A和+之间有空格 | Maxwell -Absolom " " | 完整匹配AB | “AB” | | “Thomas Jefferson” OR | 包含A或者B | A OR B 或者 A | B | | nodejs OR webpack +-“OR | 指令可以组合,完成更复杂的查询 | | | beach -sandy +albert +nathaniel ~ | 包含A, 并且包含B的近义词 | A ~B | | github ~js ....
金钱游戏 - 银行造钱的秘密
1. 角色划分 名称 角色 账户 A 银行家 0 B 建筑商 100万 C 商人 0 2. 建筑商向银行存储100万 名称 角色 账户 A 银行家 100万 现金 B 建筑商 100万 支票 C 商人 0 2. 商人向银行贷款100万 此时银行的账户存款已经是0了,但是B还在银行存了100万。那银行究竟是还有100万呢, 还是一毛都没有了呢。 此时建筑商如果要取现金,那么银行马上就要破产。 名称 角色 账户 A 银行家 100现金 B 建筑商 100万 支票 C 商人 100万 支票 3. 商人需要建筑商来建造房子 商人需要建筑商来建筑房子,费用是100万,付给建筑商,建筑商又把100支票存到银行 名称 角色 账户 A 银行家 100万现金 B 建筑商 200万 支票 C 商人 0 商人又从银行借钱100万,来付给建筑商建房子,建筑商把钱存到银行 @@ -39,12 +44,7 @@ 3. 解决方案 以下给出三个解决方案,第一个最快,第三个作为彻底。 3.1. 方案1 给Chrome快捷方式中增加 –allow-file-access-from-files 打开Chrome快捷方式的属性中设置:右击Chrome浏览器快捷方式,选择“属性”,在“目标”中加"–allow-file-access-from-files",注意前面有个空格,重启Chrome浏览器便可。 3.2. 方案2 启动一个简单的静态文件服务器, 以http协议访问html 参见我的这篇文章: 一行命令搭建简易静态文件http服务器 -3.3. 方案3 服务端响应修改Access-Control-Allow-Origin : * response.addHeader("Access-Control-Allow-Origin","*") 4. 参考文章 如何解决XMLHttpRequest cannot load file~~~~~~~Origin ’null’ is therefore not allowed access 让chrome支持本地Ajax请求,Ajax请求status cancel Origin null is not allowed by Access-Control-Allow-Origin Origin null is not allowed by Access-Control-Allow-Origin
正则表达式在线工具集合
1. 功能最强:regex101 优点: -支持多种语言, prec,php,javascript,python,golang 界面美观大方 支持错误提示,实时匹配 缺点: -有时候加载速度太慢 2. 可视化正则绘图: Regulex 优点: -实时根据正则表达式绘图 页面加载速度快 3. 可视化正则绘图:regexper 优点: -根据正则表达式绘图 页面加载速度快 缺点: -无法实时绘图,需要点击才可以 4. 专注于python正则:pyregex 专注python 页面加载速度快
西安之旅 不仅有羊肉泡馍 也有长恨歌
一年过半以后,偶然打开微信公众号,看到草稿箱里的篇文章。我才回想起去年带女友去西安的那个遥远的夏天。 +
Pdf学习资料
TelNYX.pdf OpenSIPS 2.3 mediasoup Cutting Edge WebRTC Video COnferencing FreeSWITCH-driven routing in OpenSIPS Voicenter: Contact center on Steroids Vlad_Paiu-Distributed_OpenSIPS_Systems_Cluecon14.pdf Vlad_Paiu-OpenSIPS_Summit_Austin_2015-Async.pdf Ionut_Ionita-OpenSIPS_Summit2017-Capturing_beyond_SIP FLAVIO_GONCALVES-Fraud_in_VoIP_Today.pdf Alexandr_Dubovikov-OpenSIPS_Summit2017-RTC_Threat_Intelligence_Exchange.pdf OpenSIPS_LoadBalancing.pdf Vlad_Paiu-OpenSIPS_Summit_2104-OpenSIPS_End_User_Services.pdf Razvan_Crainea-OpenSIPS_Summit2017-From_SIPI_Trunks_to_End_Users.pdf Razvan_Crainea-OpenSIPS_Summit-Scaling_Asterisk.pdf Vlad_Paiu-OpenSIPS_Summit-Service_Enabling_for_Asterisk.pdf Jonas_Borjesson-OpenSIPS_Summit_Austin_2015.pdf Michele_Pinasi-OpenSIPS_Summit2017-How_we_did_VoIP.pdf Bogdan_Iancu-OpenSIPS_Summit_Keynotes.pdf Giovanni_Maruzselli-OpenSIPS_Summit2017-Scaling_FreeSWITCHes.pdf Maksym_Sobolyev-OpenSIPS_Summit2017-Sippy_Labs_update.pdf docker-cluster.pdf voip malware attack tool .pdf Bogdan_Iancu-OpenSIPS_Summit-OpenSIPS_2_1.pdf Pete_Kelly-OpenSIPS_Workshop_Chicago_2015-Calling_Cards_B2BUA.pdf Bogdan_Iancu-OpenSIPS_Summit-keynotes.pdf Alex_Goulis-Opensips_CNAME.pdf OpenSIPS_2.0_Framework.pdf Norman_Brandinger-OpenSIPS_Summit_2014-Advanced_SIP_Routing_with_OpenSIPS_modules.pdf
西安之旅 不仅有羊肉泡馍 也有长恨歌
一年过半以后,偶然打开微信公众号,看到草稿箱里的篇文章。我才回想起去年带女友去西安的那个遥远的夏天。 如今女友已经变成老婆,这篇文章我才想起来发表。 day 1 钟楼 鼓楼 回民街 那是六月末的时候,和女友一起坐火车去了趟西安。 为什么要去西安呢?据吃货女友说,西安有非常多的好吃的。所以人生是必须要去一趟的。 @@ -85,8 +85,7 @@ 3. 常用过滤表达式 一般我们的过滤都是基于协议,ip地址或者端口号进行过滤的, 3.1. 基于协议的过滤 直接输入协议名进行过滤 3.2. 基于IP地址的过滤 3.3. 基于端口的过滤 基于端口的过滤一般就两种 -tcp.port == xxx udp.port == xxx 3.4. 基于host的过滤 4. 比较运算符支持 == 等于 != 不等于 > 大于 < 小于 >= 大于等于 <= 小于等于 ip.addr == 192.168.2.4 5. 逻辑运算符 and 条件与 or 条件或 xor 仅能有一个条件为真 not 所有条件都不能为真 ip....
Tcpdump抓包教程
查看帮助文档 从帮助文档可以看出,包过滤的表达式一定要放在最后一个参数 -tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ] [ -c count ] [ --count ] [ -C file_size ] [ -E spi@ipaddr algo:secret,... ] [ -F file ] [ -G rotate_seconds ] [ -i interface ] [ --immediate-mode ] [ -j tstamp_type ] [ -m module ] [ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ] [ -r file ] [ -s snaplen ] [ -T type ] [ --version ] [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ --time-stamp-precision=tstamp_precision ] [ --micro ] [ --nano ] [ expression ] 列出所有网卡 tcpdump -D 1....
前端面试和笔试题目
1. 问答题 1.1. HTML相关 1.1.1. 的作用是什么? 1.1.2. script, script async和script defer之间有什么区别? 1.1.3. cookie, sessionStorage 和 localStorage之间有什么区别? 1.1.4. 用过哪些html模板渲染工具? 1.2. CSS相关 1.2.1. 简述CSS盒子模型 1.2.2. CSS有哪些选择器? 1.2.3. CSS sprite是什么? 1.2.4. 写一下你知道的前端UI框架? 1.3. JS相关 1.3.1. js有哪些数据类型? 1.3.2. js有哪些假值? 1.3.3. js数字和字符串之间有什么快速转换的写法? 1.3.4. 经常使用哪些ES6的语法? 1.3.5. 什么是同源策略? 1.3.6. 跨域有哪些解决方法? 1.3.7. 网页进度条实现的原理 1.3.8. 请问console.log是同步的,还是异步的? 1.3.9. 下面console输出的值是什么? var scores = [10,11,12]; var total = 0; for(var score in scores){ total += score; } var average = total/scores.length; console.log(average); 1....
small is better than big 我的读书方法论
床底下秘密 我是一个毅力不是很够的人。我曾经下定决心要锻炼身体,买了一些健身器材,例如瑜伽垫,仰卧起坐的器材,俯卧撑的器材。然而三分钟的热度过后,我把瑜伽垫卷了起来,塞到床底下。把仰卧起坐的器材拆开,也塞到了床底下。 +
正则表达式在线工具集合
1. 功能最强:regex101 优点: +支持多种语言, prec,php,javascript,python,golang 界面美观大方 支持错误提示,实时匹配 缺点: +有时候加载速度太慢 2. 可视化正则绘图: Regulex 优点: +实时根据正则表达式绘图 页面加载速度快 3. 可视化正则绘图:regexper 优点: +根据正则表达式绘图 页面加载速度快 缺点: +无法实时绘图,需要点击才可以 4. 专注于python正则:pyregex 专注python 页面加载速度快
前端面试和笔试题目
1. 问答题 1.1. HTML相关 1.1.1. 的作用是什么? 1.1.2. script, script async和script defer之间有什么区别? 1.1.3. cookie, sessionStorage 和 localStorage之间有什么区别? 1.1.4. 用过哪些html模板渲染工具? 1.2. CSS相关 1.2.1. 简述CSS盒子模型 1.2.2. CSS有哪些选择器? 1.2.3. CSS sprite是什么? 1.2.4. 写一下你知道的前端UI框架? 1.3. JS相关 1.3.1. js有哪些数据类型? 1.3.2. js有哪些假值? 1.3.3. js数字和字符串之间有什么快速转换的写法? 1.3.4. 经常使用哪些ES6的语法? 1.3.5. 什么是同源策略? 1.3.6. 跨域有哪些解决方法? 1.3.7. 网页进度条实现的原理 1.3.8. 请问console.log是同步的,还是异步的? 1.3.9. 下面console输出的值是什么? var scores = [10,11,12]; var total = 0; for(var score in scores){ total += score; } var average = total/scores.length; console.log(average); 1....
small is better than big 我的读书方法论
床底下秘密 我是一个毅力不是很够的人。我曾经下定决心要锻炼身体,买了一些健身器材,例如瑜伽垫,仰卧起坐的器材,俯卧撑的器材。然而三分钟的热度过后,我把瑜伽垫卷了起来,塞到床底下。把仰卧起坐的器材拆开,也塞到了床底下。 所以每次我都不敢看床底下,那里塞满了我的羞愧。我常常想,我这不就是永远睡在羞愧之上吗? 那么,是什么让我放弃了自己的目标,慢慢活成了自己讨厌的样子呢? 之前和朋友聊天,我们有一段时间没见了。我突然觉得他也太能聊了,说了很多我不知道的新鲜事,还有一些可以让人茅塞顿开的想法。完了之后,他劝我让我多读书。我觉得这个想法很多。我是确实需要读书了。毕竟我的床底下已经没有空间再塞其他的东西了。 @@ -54,11 +59,7 @@ var user = {name: 'andy', isDead: false, age: 11, addr: 'shanghai'}; JSON.stringify(user, function(key, value){ if(key === 'isDead'){ return value === true ? 1 : 0; } return value; }); "{"name":"andy","isDead":0,"age":11,"addr":"shanghai"}" 功能2:删除某个属性 将isDead属性删除,如果replacer的返回值是undefined,那么该属性会被删除。 var user = {name: 'andy', isDead: false, age: 11, addr: 'shanghai'}; JSON....
ECharts 轮流高亮中国地图各个省份
1. 小栗子 最早我是想通过dispatchAction方法去改变选中的省份,但是没有起作用,如果你知道这个方法怎么实现,麻烦你可以告诉我。 我实现的方法是另外一种。 dispatchAction({ type: 'geoSelect', // 可选,系列 index,可以是一个数组指定多个系列 seriesIndex?: number|Array, // 可选,系列名称,可以是一个数组指定多个系列 seriesName?: string|Array, // 数据的 index,如果不指定也可以通过 name 属性根据名称指定数据 dataIndex?: number, // 可选,数据名称,在有 dataIndex 的时候忽略 name?: string }) 后来我改变了一个方法。这个方法的核心思路是定时获取图标的配置,然后更新配置,最后在设置配置。 -var myChart = echarts.init(document.getElementById('china-map')); var COLORS = ["#070093", "#1c3fbf", "#1482e5", "#70b4eb", "#b4e0f3", "#ffffff"]; // 指定图表的配置项和数据 var option = { tooltip: { trigger: 'item', formatter: '{b}' }, series: [ { name: '中国', type: 'map', mapType: 'china', selectedMode : 'single', label: { normal: { show: true }, emphasis: { show: true } }, data:[ // 默认高亮安徽省 {name:'安徽', selected:true} ], itemStyle: { normal: { areaColor: 'rgba(255,255,255,0....
一行命令搭建简易静态文件http服务器
简易服务器:在命令执行的所在路径启动一个http服务器,然后你可以通过浏览器访问该路径下的所有文件。 -在局域网内传文件,或者自己测试使用都是非常方便的。 -1. 基于python 1.1. 基于Python2 python -m SimpleHTTPServer port -> python -m SimpleHTTPServer 8099 Serving HTTP on 0.0.0.0 port 8099 ... 127.0.0.1 - - [24/Oct/2017 11:07:56] "GET / HTTP/1.1" 200 - 1.2. 基于python3 python3 -m http.server port -> python3 -m http.server 8099 Serving HTTP on 0.0.0.0 port 8099 (http://0.0.0.0:8099/) ... 127.0.0.1 - - [24/Oct/2017 11:05:06] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [24/Oct/2017 11:05:06] code 404, message File not found 127....
120行代码实现 浏览器WebRTC视频聊天
本例子是参考webrtc-tutorial-simple-video-chat做的。 这个教程应该主要是去宣传ScaleDrone的sdk, 他们的服务是收费的,但是免费的也可以用,就是有些次数限制。 +
一行命令搭建简易静态文件http服务器
简易服务器:在命令执行的所在路径启动一个http服务器,然后你可以通过浏览器访问该路径下的所有文件。 +在局域网内传文件,或者自己测试使用都是非常方便的。 +1. 基于python 1.1. 基于Python2 python -m SimpleHTTPServer port +> python -m SimpleHTTPServer 8099 Serving HTTP on 0.0.0.0 port 8099 ... 127.0.0.1 - - [24/Oct/2017 11:07:56] "GET / HTTP/1.1" 200 - 1.2. 基于python3 python3 -m http.server port +> python3 -m http.server 8099 Serving HTTP on 0.0.0.0 port 8099 (http://0.0.0.0:8099/) ... 127.0.0.1 - - [24/Oct/2017 11:05:06] "GET / HTTP/1.1" 200 - 127.0.0.1 - - [24/Oct/2017 11:05:06] code 404, message File not found 127....
120行代码实现 浏览器WebRTC视频聊天
本例子是参考webrtc-tutorial-simple-video-chat做的。 这个教程应该主要是去宣传ScaleDrone的sdk, 他们的服务是收费的,但是免费的也可以用,就是有些次数限制。 本栗子的地址 本栗子的pages地址 因为使用的是ScaleDrone的js sdk, 后期很可能服务不稳定之类的 1. 准备 使用最新版谷歌浏览器(62版) 视频聊天中 一个是windows, 一个是mac stun服务器使用谷歌的,trun使用ScaleDrone的sdk,这样我就不用管服务端了。 2. 先上效果图 3. 再上在线例子点击此处 4. 源码分析 // 产生随机数 if (!location.hash) { location.hash = Math.floor(Math.random() * 0xFFFFFF).toString(16); } // 获取房间号 var roomHash = location.hash.substring(1); // 放置你自己的频道id, 这是我注册了ScaleDrone 官网后,创建的channel // 你也可以自己创建 var drone = new ScaleDrone('87fYv4ncOoa0Cjne'); // 房间名必须以 'observable-'开头 var roomName = 'observable-' + roomHash; var configuration = { iceServers: [{ urls: 'stun:stun.l.google.com:19302' // 使用谷歌的stun服务 }] }; var room; var pc; function onSuccess() {} function onError(error) { console....
如何写好技术文档?
本文来自于公司内部的一个分享。 在文档方面,对内的一些接口文档主要是用swagger来写的。虽然可以在线测试,比较方便。但是也存在着一些更新不及时,swgger文档无法导出成文件的问题。 在对外提供的文档方面:我主要负责做一个浏览器端的一个js sdk。文档还算可以github地址,所以想把一些写文档的心得分享给大家。 @@ -54,11 +58,7 @@ 2. 基本用法 1 <audio src="http://65.ierge.cn/12/186/372266.mp3"> Your browser does not support the audio element. </audio> <br> 2 <audio src="http://65.ierge.cn/12/186/372266.mp3" controls="controls"> Your browser does not support the audio element. </audio> <br> // controlsList属性目前只支持 chrome 58+ 3 <audio src="http://65.ierge.cn/12/186/372266.mp3" controls="controls" controlsList="nodownload"> Your browser does not support the audio element. </audio> <br> 4 <audio controls="controls"> <source src="http://65....
可能被遗漏的https与http的知识点
1. HTTPS域向HTTP域发送请求会被浏览器直接拒绝,HTTP向HTTPS则不会 例如在github pages页面,这是一个https页面,如果在这个页面向http发送请求,那么会直接被浏览器拒绝,并在控制台输出下面的报错信息。 jquery-1.11.3.min.js:5 Mixed Content: The page at 'https://wangduanduan.github.io/ddddddd/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://cccccc/log/conf?token=welljoint'. This request has been blocked; the content must be served over HTTPS. 如果你在做第三方集成的系统,如果他们是在浏览器中直接调用你提供的接口,那么最好你使用https协议,这样无论对方是https还是http都可以访问。(相信我,这个很重要,我曾经经历过上线后遇到这个问题,然后连夜申请证书,把http升级到https的痛苦经历) 2. HTTPS的默认端口是443,而不是443 如果443端口已经被其他服务占用了,那么使用其他任何没有被占用的端口都可以用作HTTPS服务,只不过在请求的时候需要加上端口号罢了。 -3. 如何快速隐藏一个DOM元素 选中一个元素,然后按h,这时候就会在选中的DOM元素上加上__web-inspector-hide-shortcut__类,这个类会让元素隐藏。谷歌和火狐上都可以,IE上没有试过行不行。
直接在Chrome DevTools调试Node.js
英文好的,直接看原文 -https://blog.hospodarets.com/nodejs-debugging-in-chrome-devtools -1. 要求 Node.js 6.3+ Chrome 55+ 2. 操作步骤 1 打开连接 chrome://flags/#enable-devtools-experiments 2 开启开发者工具实验性功能 3 重启浏览器 4 打开 DevTools Setting -> Experiments tab 5 按6次shift后,隐藏的功能会出现,勾选"Node debugging" 3. 运行程序 必须要有 --inspect -> node --inspect www Debugger listening on port 9229. Warning: This is an experimental feature and could change at any time. To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2312f5bf532f6aec5f284980/inspector.html?experiments=true&v8only=true&ws=localhost:9229/78a884f4-8c2e-459e-93f7-e1cbe87cf5cf 将这个地址粘贴到谷歌浏览器:chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2312f5bf532f6aec5f284980/inspector.html?experiments=true&v8only=true&ws=localhost:9229/78a884f4-8c2e-459e-93f7-e1cbe87cf5cf -程序后端输出的日志也回输出到谷歌浏览器的console里面,同时也可以在Sources里进行断点调试了。
【译】13简单的优秀编码规则(从我15年的经验)
原文地址:https://hackernoon.com/few-simple-rules-for-good-coding-my-15-years-experience-96cb29d4acd9#.ddzpjb80c +
直接在Chrome DevTools调试Node.js
英文好的,直接看原文 +https://blog.hospodarets.com/nodejs-debugging-in-chrome-devtools +1. 要求 Node.js 6.3+ Chrome 55+ 2. 操作步骤 1 打开连接 chrome://flags/#enable-devtools-experiments 2 开启开发者工具实验性功能 3 重启浏览器 4 打开 DevTools Setting -> Experiments tab 5 按6次shift后,隐藏的功能会出现,勾选"Node debugging" 3. 运行程序 必须要有 --inspect +> node --inspect www Debugger listening on port 9229. Warning: This is an experimental feature and could change at any time. To start debugging, open the following URL in Chrome: chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2312f5bf532f6aec5f284980/inspector.html?experiments=true&v8only=true&ws=localhost:9229/78a884f4-8c2e-459e-93f7-e1cbe87cf5cf 将这个地址粘贴到谷歌浏览器:chrome-devtools://devtools/remote/serve_file/@60cd6e859b9f557d2312f5bf532f6aec5f284980/inspector.html?experiments=true&v8only=true&ws=localhost:9229/78a884f4-8c2e-459e-93f7-e1cbe87cf5cf +程序后端输出的日志也回输出到谷歌浏览器的console里面,同时也可以在Sources里进行断点调试了。
【译】13简单的优秀编码规则(从我15年的经验)
原文地址:https://hackernoon.com/few-simple-rules-for-good-coding-my-15-years-experience-96cb29d4acd9#.ddzpjb80c 嗨,我的工作作为一个程序员超过15年,并使用许多不同的语言,范例,框架和其他狗屎。我想和大家分享我写好代码的规则。 1. 优化VS可读性 去他妈的优化 始终编写易于阅读且对开发人员可理解的代码。因为在硬可读代码上花费的时间和资源将远远高于从优化中获得的。 如果你需要进行优化,那么使它像DI的独立模块,具有100%的测试覆盖率,并且不会被触及至少一年。 2. 架构第一 我看到很多人说“我们需要快速做事,我们没有时间做架构”。其中约99%的人因为这样的想法而遇到了大问题。 编写代码而不考虑其架构是没有用的,就像没有实现它们的计划一样,梦想你的愿望。 在编写代码的第一行之前,你应该明白它将要做什么,它将如何使用,模块,服务如何相互工作,它将有什么结构,如何进行测试和调试,以及如何更新。 @@ -65,13 +69,7 @@ 我在我的gh-pages分支的source目录下加入CNAME文件, 内容只有一行 wdd.js.org 将博客再次部署好,如果CNAME生效的话,你已经无法从原来的地址访问:wangduanduan.github.io, 这个博客了。 5. 向js.org项目发起pull-request 找到你fork后的项目,点击 new pull request, 向原来的项目发起请求。 -然后你可以在js-org/dns.js.org项目的pull requests看到你的请求,当这个请求被合并时,你就拥有了js.org的二级域名。
不常用却很有妙用的事件及方法
1. visibilitychange事件 触发条件:浏览器标签页被隐藏或显示的时候会触发visibilitychange事件. -使用场景:当标签页显示或者隐藏时,触发一些业务逻辑 -document.addEventListener("visibilitychange", function() { console.log( document.visibilityState ); }); 2. storage事件 触发条件:使用localStorage or sessionStorage存储或者修改某个本地存储时 -使用场景:标签页间通信 -// AB页面同源 // 在A 页面 window.addEventListener('storage', (e) => {console.log(e)}) // 在B 页面,向120打个电话 localStorage.setItem('makeCall','120') // 然后可以在A页面间有输出, 可以看出A页面 收到了B页面的通知 ...key: "makeCall", oldValue: "119", newValue: "120", ... 3. beforeunload事件 触发条件:当页面的资源将要卸载(及刷新或者关闭标签页前). 当页面依然可见,并且该事件可以被取消只时 -使用场景:关闭或者刷新页面时弹窗确认,关闭页面时向后端发送报告等 -window.addEventListener("beforeunload", function (e) { var confirmationMessage = "\o/"; e.returnValue = confirmationMessage; // Gecko, Trident, Chrome 34+ return confirmationMessage; // Gecko, WebKit, Chrome <34 }); 4....
油猴子脚本 - 我的地盘我做主
当你用浏览器访问某个网页时,你可曾想过,你看到的这个网页,实际上是属于你自己的。 +
不常用却很有妙用的事件及方法
1. visibilitychange事件 触发条件:浏览器标签页被隐藏或显示的时候会触发visibilitychange事件. +使用场景:当标签页显示或者隐藏时,触发一些业务逻辑 +document.addEventListener("visibilitychange", function() { console.log( document.visibilityState ); }); 2. storage事件 触发条件:使用localStorage or sessionStorage存储或者修改某个本地存储时 +使用场景:标签页间通信 +// AB页面同源 // 在A 页面 window.addEventListener('storage', (e) => {console.log(e)}) // 在B 页面,向120打个电话 localStorage.setItem('makeCall','120') // 然后可以在A页面间有输出, 可以看出A页面 收到了B页面的通知 ...key: "makeCall", oldValue: "119", newValue: "120", ... 3. beforeunload事件 触发条件:当页面的资源将要卸载(及刷新或者关闭标签页前). 当页面依然可见,并且该事件可以被取消只时 +使用场景:关闭或者刷新页面时弹窗确认,关闭页面时向后端发送报告等 +window.addEventListener("beforeunload", function (e) { var confirmationMessage = "\o/"; e.returnValue = confirmationMessage; // Gecko, Trident, Chrome 34+ return confirmationMessage; // Gecko, WebKit, Chrome <34 }); 4....
油猴子脚本 - 我的地盘我做主
当你用浏览器访问某个网页时,你可曾想过,你看到的这个网页,实际上是属于你自己的。 打个比喻:访问某个网站就好像是网购了一筐鸡蛋,鸡蛋虽然是养鸡场生产的,但是这个蛋我怎么吃,你养鸡场管不着。 当然了,对于很多人来说,鸡蛋没有别的吃法,鸡蛋只能煮着吃。 你可以看如下的页面:当你在某搜索引擎上搜索前端开发时 diff --git a/page/4/index.html b/page/4/index.html index a202dacab..64009b018 100644 --- a/page/4/index.html +++ b/page/4/index.html @@ -1,6 +1,7 @@
http抓包工具httpry使用
git clone https://gitee.com/nuannuande/httpry.git cd httpry yum install libpcap-devel -y make make install cp -f httpry /usr/sbin/ httpry -i eth0
Hugo Timezone没有设置, 导致页面无法渲染
写好了博客,但是没有在网页上渲染出来,岂不是很气人! +
Tcpdump抓包教程
查看帮助文档 从帮助文档可以看出,包过滤的表达式一定要放在最后一个参数 +tcpdump [ -AbdDefhHIJKlLnNOpqStuUvxX# ] [ -B buffer_size ] [ -c count ] [ --count ] [ -C file_size ] [ -E spi@ipaddr algo:secret,... ] [ -F file ] [ -G rotate_seconds ] [ -i interface ] [ --immediate-mode ] [ -j tstamp_type ] [ -m module ] [ -M secret ] [ --number ] [ --print ] [ -Q in|out|inout ] [ -r file ] [ -s snaplen ] [ -T type ] [ --version ] [ -V file ] [ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ] [ --time-stamp-precision=tstamp_precision ] [ --micro ] [ --nano ] [ expression ] 列出所有网卡 tcpdump -D 1....
http抓包工具httpry使用
git clone https://gitee.com/nuannuande/httpry.git cd httpry yum install libpcap-devel -y make make install cp -f httpry /usr/sbin/ httpry -i eth0
Hugo Timezone没有设置, 导致页面无法渲染
写好了博客,但是没有在网页上渲染出来,岂不是很气人! 我的archtypes/default.md配置如下 --- title: "{{ replace .Name "-" " " | title }}" date: "{{ now.Format "2006-01-02 15:04:05" }}" draft: false --- 当使用 hugo new 创建一个文章的时候,有如下的头 --- title: "01: 学习建议" date: "2022-09-03 10:23:10" draft: false --- Hugo 默认采用的是 格林尼治平时 (GMT),比北京时间 (UTC+8) 晚了 8 个小时,Hugo 在生成静态页面的时候,不会生成超过当前时间的文章。 @@ -53,10 +54,7 @@ oh-my-posh init pwsh | Invoke-Expression 保存文件,然后再次打开windows termial, 输入下面的命令来reload profile . $PROFILE 然后你可以看到终端出现了提示符,有可能有点卡,第一次是有点慢的。但是很多符号可能是乱码,因为是没有配置相关的字体。 3. 字体配置 3.1 安装字体 下载文件 https://github.com/ryanoasis/nerd-fonts/releases/download/v2.1.0/Meslo.zip 解压文件 打开设置,在个性化》字体中,将之前下载好的所有字体,拖动到下面的红框中,字体就会自动安装 3.2 windows termial字体配置 用vscode打开对windows termial的配置json文件,在profiles.default.font中配置如下字体 -"font": { "face": "MesloLGM NF" } 配置之后,需要重启windows termial...
关于我在闲鱼卖二手这件事
自从我换了新款的惠普战X之后,我的老搭档,2017款的macbook pro, 已经在沙发上躺了很久了。 -我拍了拍它的脑袋,对它语重心长的说: 人不能闲着,闲着容易生病,笔记本也是如此。虽然你已经是5年前的mbp了, 但是廉颇老矣,尚能饭否? -mbp面无表情,胡子邋遢,朝我瞥了一眼,像是嘲讽,又像是不满,一口气吸掉还剩一点的香烟,有气无力的说:我已经工作五年了,按照国家的法律规定,已经到了退休的年龄,是该享受享受了。 -我
最后一篇blog, 是时候说再见了
我最早用过有道,我觉得有道很烂。 +
关于我在闲鱼卖二手这件事
自从我换了新款的惠普战X之后,我的老搭档,2017款的macbook pro, 已经在沙发上躺了很久了。 +我拍了拍它的脑袋,对它语重心长的说: 人不能闲着,闲着容易生病,笔记本也是如此。虽然你已经是5年前的mbp了, 但是廉颇老矣,尚能饭否? +mbp面无表情,胡子邋遢,朝我瞥了一眼,像是嘲讽,又像是不满,一口气吸掉还剩一点的香烟,有气无力的说:我已经工作五年了,按照国家的法律规定,已经到了退休的年龄,是该享受享受了。 +我
最后一篇blog, 是时候说再见了
我最早用过有道,我觉得有道很烂。 后来我开始用印象笔记,我发现印象笔记更烂。不仅界面做的让人觉得侮辱眼睛,即使你开了会员也要看广告。 印象笔记会员被割了韭菜,充到了2026年,但是我最近一两年我基本没有用过印象笔记。 后来我遇到了文档blog界的new school, notion、语雀、飞书, 就完全抛弃了有道和印象笔记的old school。 做任何事情,都需要动机。 @@ -59,10 +62,7 @@ 舒适噪音的payload, 也被称作静音插入描述帧(SID: a Silence Insertion Descriptor frame), 包括一个字节的数据,用来描述噪音的级别。也可以包含其他的额外的数据。早期版本的舒适噪音的格式定义在RFC 1890中,这个版本的格式只包含一个字段,就是噪音级别。 噪音级别占用一个字节,其中第一个bit必须是0, 因此噪音级别有127中可能。 0 1 2 3 4 5 6 7 +-+-+-+-+-+-+-+-+ |0| level | +-+-+-+-+-+-+-+-+ 跟着噪音级别的后续字节都是声音的频谱信息。 -Byte 1 2 3 ... M+1 +-----+-----+-----+-----+-----+ |level| N1 | N2 | ....
Hugo博客常见问题以及解决方案
如何在markdown中插入图片 在static 目录中创建 images 目录,然后把图片放到images目录中。 -在文章中引用的时候 -![](/images/qianxun.jpeg#center) Warning 我之前创建的文件夹的名字叫做 img, 本地可以正常显示,但是部署之后,就无法显示图片了。 -最后我把img改成images才能正常在网页上显示。
Shell 教程技巧
复制文本到剪贴板 sudo apt install xclip vim ~/.zshrc +
Hugo博客常见问题以及解决方案
如何在markdown中插入图片 在static 目录中创建 images 目录,然后把图片放到images目录中。 +在文章中引用的时候 +![](/images/qianxun.jpeg#center) Warning 我之前创建的文件夹的名字叫做 img, 本地可以正常显示,但是部署之后,就无法显示图片了。 +最后我把img改成images才能正常在网页上显示。
Shell 教程技巧
复制文本到剪贴板 sudo apt install xclip vim ~/.zshrc alias copy='xclip -selection clipboard' 这样我们就可以用copy命令来考本文件内容到系统剪贴板了。 copy aaa.txt 判断工作区是否clean if [ -z "$(git status --porcelain)" ]; then # Working directory clean else # Uncommitted changes fi
C和gdb调试
开启coredump #如果该命令的返回值是0,则表示不开启coredump ulimit -c # 开启coredump ulimit -c unlimited 准备c文件 #include<stdio.h> void crash() { char * p = NULL; *p = 0; } int main(){ printf("hello world 1"); int phone [4]; phone[232] = 12; crash(); return 0; } 编译执行 gcc -g hello.c -o hello ./hello 之后程序崩溃,产生core文件。 gdb分析 gdb 启动的二进制文件 core文件 @@ -41,9 +44,7 @@ 当然安装使用Firefox的时候,也出现了几小插曲。 macos 我在ios上登录Firefox上的账户,在MacOS的Firefox却无法登陆,查了才发现,原来FireFox的账号分为国内版和国际版,两者之间数据不通,所以在macos上,也要登陆国内版本,就是带有火狐通行证的登陆页面。 需要在同步页面点击切换至本地服务。 -linux/manjaro manjaro上安装的firefox居然没有切换本地服务这个选项,后来发现这个浏览器上没有附加组件管理器所以需要去 http://mozilla.com.cn/moz-addon.html, 安装好附加组件管理器,登陆的时候,应该就可以跳转到带有火狐通行证的登陆页面了。
有意思的命令行工具
1. datamash https://www.gnu.org/software/datamash/ 能够方便的计算数据的平均值,最大值,最小值等数据。 -2. textsql https://github.com/dinedal/textql 能够方便的对csv文件做sql查询 -3. graph-cli https://github.com/mcastorina/graph-cli 能够直接读取csv文件,然后绘图。
manjaro kde 之旅
1. 安装vivaldi浏览器 pamac install vivaldi 参考:https://wiki.manjaro.org/index.php/Vivaldi_Browser +
有意思的命令行工具
1. datamash https://www.gnu.org/software/datamash/ 能够方便的计算数据的平均值,最大值,最小值等数据。 +2. textsql https://github.com/dinedal/textql 能够方便的对csv文件做sql查询 +3. graph-cli https://github.com/mcastorina/graph-cli 能够直接读取csv文件,然后绘图。
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被禁用, 然后应用。
开源免费的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 @@ -55,10 +57,7 @@ 能稳定运行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....
监控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....
udp cluster 多进程调度策略学习
本来我的目的是使用cluster模块的fork出多个进程,让各个进程都能处理udp消息的。但是最终测试发现,实际上仅有一个进程处理了绝大数消息,其他的进程,要么不处理消息,要么处理的非常少的消息。 +
监控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....
udp cluster 多进程调度策略学习
本来我的目的是使用cluster模块的fork出多个进程,让各个进程都能处理udp消息的。但是最终测试发现,实际上仅有一个进程处理了绝大数消息,其他的进程,要么不处理消息,要么处理的非常少的消息。 然而使用cluster来开启http服务的多进程,却能够达到多进程的负载。 server端demo代码: const cluster = require('cluster') const numCPUs = require('os').cpus().length const { logger } = require('./logger') const dgram = require('dgram') // const { createHTTPServer, createUDPServer } = require('./app') const port = 8088 if (cluster.isMaster) { for (let i = 0; i < numCPUs; i++) { cluster.fork() } cluster.on('exit', (worker, code, signal) => { logger.info(`工作进程 ${worker.process.pid} 已退出`) }) } else { const server = dgram.createSocket({ type: 'udp4', reuseAddr: true }) server....
使用nginx为udp服务负载均衡
对nginx的最低版本要求是? 1.9.13 The ngx_stream_proxy_module module (1.9.0) allows proxying data streams over TCP, UDP (1.9.13), and UNIX-domain sockets. 简单的配置是什么样? 例如监听本地53的udp端口,然后转发到192.168.136.130和192.168.136.131的53端口 @@ -14,7 +17,7 @@ # 启动udp server 监听8888端口 nc -ulp 20000 # 启动udp client nc -u 127.0.0.1 20000 在linux上启动nc udp server很简单,但是在windows上,没办法安装nc啊?😭 峰回路转 https://nmap.org/download.html 在查看了nc的官网之后,发现nc实际上也提供了windows的程序,有两种版本。 有GUI界面的,使用友好,安装包比较大 https://nmap.org/dist/nmap-7.91-setup.exe 仅仅在命令行下执行,刚好满足需求 https://nmap.org/dist/nmap-7.91-win32.zip 看看带GUI界面的 -附件 nmap-7.91-win32.zip
macos 鼠标滚轮不灵敏
现象 有时候轻微滚动滚轮,页面不滚动,然后突然又发生了滚动 解决方案 Mos https://github.com/Caldis/Mos 一个用于在MacOS上平滑你的鼠标滚动效果的小工具, 让你的滚轮爽如触控板。 特性 疯狂平滑你的鼠标滚动效果 支持分离触控板/鼠标事件, 单独翻转鼠标滚动方向。 滚动曲线的自定义调整。 支持区分应用处理, 黑/白名单系统。 用于监控滚动事件的图形化呈现窗口。 基于 Swift4 构建 免费 附件 Mos.Versions.3.3.2.dmg
一日看尽长安花——听北大教授畅讲中国古代文学
第一讲 关关雎鸠在河洲 ——先秦神话和诗歌标注(黄色) - 位置 129女娲炼石补天处,石破天惊逗秋雨”,第二讲 百家争鸣写春秋 ——先秦散文标注(黄色) - 位置 306为川者决之使导,为民者宣之使言。”标注(黄色) - 位置 466他就发愤努力,一定要做仓库里的老鼠。第三讲 大风起兮云飞扬 ——汉朝的赋和散文标注(黄色) - 位置 538有两个情况可以免死:一是拿出大量的金钱赎身;第二就是受宫刑。标注(黄色) - 位置 539叫《报任安书》:标注(黄色) - 位置 557事情。《史记》写完之后,司马迁就不知所终了。第六讲 独念天地之悠悠 ——隋与初唐文学标注(黄色) - 位置 1346王勃,他在初唐时代是一个非常有才华的少年,他 27岁就死了。真是“千古文章未尽才”。他写《滕王阁序》,标注(黄色) - 位置 1359就是把你的遭遇拉到跟他相同的地步。譬如说,你考试得了 65分,不高兴,我就对你说:不要难过嘛,我不过只考 67分而已,咱们俩都差不多。第七讲 登高壮观天地间 ——盛唐诗歌标注(黄色) - 位置 1406秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。——王昌龄《出塞二首》(其一)标注(黄色) - 位置 1664桃花潭水深千尺,不及汪伦送我情。第八讲 乌衣巷口夕阳斜 ——中唐诗歌标注(黄色) - 位置 1809座中泣下谁最多,江州司马青衫湿。”标注(黄色) - 位置 1892十年磨一剑,霜刃未曾试。第九讲 霜叶红于二月花 ——晚唐诗歌标注(黄色) - 位置 1906停车坐爱枫林晚,霜叶红于二月花。第十讲 大江东去浪淘沙 ——两宋金元文学书签 - 位置 2168标注(黄色) - 位置 2509山盟虽在,锦书难托。标注(黄色) - 位置 2559劝君更尽一杯酒,西出阳关无故人”,标注(黄色) - 位置 2560桃花潭水深千尺,不及汪伦送我情”,
6月书单
5月书单回顾 《鲁滨逊漂流》记 读完 人在孤独的时候,适合读这本书 《被讨厌的勇气》读到 69%, 很有幸读到这本书,6月继续 《围城》读到21%,我好喜欢钱老的比喻句,总是那么别具一格,让人耳目一新 《一日看尽长安花》读到81%, 我喜欢唐诗宋词,就像是喜欢牛奶一样,非常有营养,又让人回味无穷 《牛津通识读本 数学》读完,如果我能早点读到这本书,我就很可能喜欢上数学。 6月书单 《鳗鱼的旅行》刚读到20% 《Googler软件测试之道》刚读到53%, 牛逼的公司,牛逼的测试 《软件测试之道微软技术专家经验总结》10% 《沉默的病人》1% 《一个人的朝圣》0% 《读懂发票》12% 《108个训练让你成为手机摄影达人》 《经济学通识课》 《楚留香传奇》21%
macos 鼠标滚轮不灵敏
现象 有时候轻微滚动滚轮,页面不滚动,然后突然又发生了滚动 解决方案 Mos https://github.com/Caldis/Mos 一个用于在MacOS上平滑你的鼠标滚动效果的小工具, 让你的滚轮爽如触控板。 特性 疯狂平滑你的鼠标滚动效果 支持分离触控板/鼠标事件, 单独翻转鼠标滚动方向。 滚动曲线的自定义调整。 支持区分应用处理, 黑/白名单系统。 用于监控滚动事件的图形化呈现窗口。 基于 Swift4 构建 免费 附件 Mos.Versions.3.3.2.dmg
一日看尽长安花——听北大教授畅讲中国古代文学
第一讲 关关雎鸠在河洲 ——先秦神话和诗歌标注(黄色) - 位置 129女娲炼石补天处,石破天惊逗秋雨”,第二讲 百家争鸣写春秋 ——先秦散文标注(黄色) - 位置 306为川者决之使导,为民者宣之使言。”标注(黄色) - 位置 466他就发愤努力,一定要做仓库里的老鼠。第三讲 大风起兮云飞扬 ——汉朝的赋和散文标注(黄色) - 位置 538有两个情况可以免死:一是拿出大量的金钱赎身;第二就是受宫刑。标注(黄色) - 位置 539叫《报任安书》:标注(黄色) - 位置 557事情。《史记》写完之后,司马迁就不知所终了。第六讲 独念天地之悠悠 ——隋与初唐文学标注(黄色) - 位置 1346王勃,他在初唐时代是一个非常有才华的少年,他 27岁就死了。真是“千古文章未尽才”。他写《滕王阁序》,标注(黄色) - 位置 1359就是把你的遭遇拉到跟他相同的地步。譬如说,你考试得了 65分,不高兴,我就对你说:不要难过嘛,我不过只考 67分而已,咱们俩都差不多。第七讲 登高壮观天地间 ——盛唐诗歌标注(黄色) - 位置 1406秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。——王昌龄《出塞二首》(其一)标注(黄色) - 位置 1664桃花潭水深千尺,不及汪伦送我情。第八讲 乌衣巷口夕阳斜 ——中唐诗歌标注(黄色) - 位置 1809座中泣下谁最多,江州司马青衫湿。”标注(黄色) - 位置 1892十年磨一剑,霜刃未曾试。第九讲 霜叶红于二月花 ——晚唐诗歌标注(黄色) - 位置 1906停车坐爱枫林晚,霜叶红于二月花。第十讲 大江东去浪淘沙 ——两宋金元文学书签 - 位置 2168标注(黄色) - 位置 2509山盟虽在,锦书难托。标注(黄色) - 位置 2559劝君更尽一杯酒,西出阳关无故人”,标注(黄色) - 位置 2560桃花潭水深千尺,不及汪伦送我情”,
1分钟将微信网页版转为桌面应用
在manjaro上我用的wine版本的微信,然而保存文件时,文件无法保存到manjaro中,而只能保存到wine里面的windows中。 +
6月书单
5月书单回顾 《鲁滨逊漂流》记 读完 人在孤独的时候,适合读这本书 《被讨厌的勇气》读到 69%, 很有幸读到这本书,6月继续 《围城》读到21%,我好喜欢钱老的比喻句,总是那么别具一格,让人耳目一新 《一日看尽长安花》读到81%, 我喜欢唐诗宋词,就像是喜欢牛奶一样,非常有营养,又让人回味无穷 《牛津通识读本 数学》读完,如果我能早点读到这本书,我就很可能喜欢上数学。 6月书单 《鳗鱼的旅行》刚读到20% 《Googler软件测试之道》刚读到53%, 牛逼的公司,牛逼的测试 《软件测试之道微软技术专家经验总结》10% 《沉默的病人》1% 《一个人的朝圣》0% 《读懂发票》12% 《108个训练让你成为手机摄影达人》 《经济学通识课》 《楚留香传奇》21%
1分钟将微信网页版转为桌面应用
在manjaro上我用的wine版本的微信,然而保存文件时,文件无法保存到manjaro中,而只能保存到wine里面的windows中。 用wine还是很麻烦的,于是我就选择了网页版本的微信。 前提 chrome浏览器 操作步骤: 将微信网页版保存为书签 打开谷歌浏览器的 chrome://apps/ 这个页面 @@ -58,7 +58,7 @@ 找到自己的信仰 鲁滨逊在一次生病过程中,身体非常虚弱,当他回忆往事的时候,总觉得自己是个罪恶的人,无法得到谅解。但是偶然他得到一本《圣经》,他阅读圣经,从中找到自己的信仰。有信仰是非常幸福的事情,但是你若问我我的信仰是什么,我也不知道我的信仰是什么。 这是最好的时代,也是最坏的时代。所有的人都觉得90后是压力最大的一代,90都神经也是最敏感的(腾讯张军的致敬青年,白岩松的“不会吧”)。我们承受着各种压力,其中最大的可能就是房价了。 人生当中,自由自在可能仅仅是片刻的,承受压力却是主旋律。但是如何面对压力,却把人分成了不同的样子。有的人会被压力击垮,放弃抵抗,沉醉于各种网络精神鸦片中,有的人却能负重前行,坚持学习,一往无前。 -罗曼罗兰说过:这世上只有一种真正的英雄主义,就是认清生活的真相,并且任然热爱她。
使用AI让卡通人物更加真实
魔女宅急便 琪琪 有点像花木兰 佐助 不认识 小樱 不认识 不认识 不认识 参考 https://designyoutrust.com/2021/04/person-uses-artificial-intelligence-to-make-anime-and-cartoon-characters-look-more-realistic/
Vite React Route URL含有.时,路径无法正常匹配
今天遇到一个奇怪的问题,react-router的路径匹配无法正常工作,反而向vite的dev server发送了GET请求,这个请求报错404。页面直接无法访问。
按理说这种前端路由的框架应该不需要向后段发送请求的。
后来我怀疑是不是代理的问题,但是只是部分页面无法访问,所以排出这个选项。
随后我的系统又收到一条测试数据,这条测试数据却能够正常跳转。
我仔细的对别了两个不同的url,发现有问题的那个url包含了一个英文字符.
, 所以我怀疑是react-router的路径匹配有问题。
/call/2023-11-09/nlLBs32pp.2oXhnY6xzmYBCnjhYUkc7Z
/call/2023-11-09/fYqZKTGHBFVCz4iC5irulFc83giH9bsa
-
我的第一反应是react-router对于动态的路径,是有字符要求的。翻阅官方文档后,没有发现类似的描述。
然后我在react-router的issue列表上查找有没有人提出类似的问题,发现了 [Bug]: paths with dynamic parameters do not work correctly when there is a dot in the url,
紧接着有人分析,说这个问题并不是react-router上的,而是出在vite上。 vite的项目上也有对应的issue反应这个问题。
解决方案
- 方案1: 升级vite 到5.x, 由于当前稳定的还是4.x的vite, 所以这个方案改动太大,放弃
- 方案2: 在匹配路径最后加上
/
, 也就是原本的/a.b
要改成/a.b/
, 我试了这个方案,是有效的。 - 方案3: 使用这个专门用来解决这个问题的插件, https://github.com/ivesia/vite-plugin-rewrite-all
深入分析
路径带有点,一般可能认为是一个静态资源,例如a.js, b.css
之类的,所以vite会把符合这个模式的路径直接向后段发送请求,去获取静态资源,而不是去匹配一个组件。
参考
我的第一反应是react-router对于动态的路径,是有字符要求的。翻阅官方文档后,没有发现类似的描述。
然后我在react-router的issue列表上查找有没有人提出类似的问题,发现了 [Bug]: paths with dynamic parameters do not work correctly when there is a dot in the url,
紧接着有人分析,说这个问题并不是react-router上的,而是出在vite上。 vite的项目上也有对应的issue反应这个问题。
解决方案#
- 方案1: 升级vite 到5.x, 由于当前稳定的还是4.x的vite, 所以这个方案改动太大,放弃
- 方案2: 在匹配路径最后加上
/
, 也就是原本的/a.b
要改成/a.b/
, 我试了这个方案,是有效的。 - 方案3: 使用这个专门用来解决这个问题的插件, https://github.com/ivesia/vite-plugin-rewrite-all
深入分析#
路径带有点,一般可能认为是一个静态资源,例如a.js, b.css
之类的,所以vite会把符合这个模式的路径直接向后段发送请求,去获取静态资源,而不是去匹配一个组件。
参考#
- https://github.com/remix-run/react-router/issues/8389
- https://github.com/vitejs/vite/issues/2415
- https://github.com/vitejs/vite/issues/11282
- https://github.com/vitejs/vite/issues/2628
- https://github.com/vitejs/vite/pull/2191/files
- https://github.com/bripkens/connect-history-api-fallback
解决 VsCode pwsh终端环境变量不生效问题
我在系统的环境变量设置里,用户和系统中,都加入了ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/
这个环境变量。
单独打开windows Terminal应用,使用 env | grep ELE
是能搜到我设置的环境变量的。但是在vscode中,这个环境变量不存在。
我尝试了以下几个方法
- 重启电脑,无效
- 配置
"terminal.integrated.persistentSessionReviveProcess": "never"
, 然后重启电脑,无效 - 在终端直接执行
code .
, 在终端打开vscode, 依然无效
因此,我想起了之前配置的pwsh的配置文件。 可以使用code $PROFILE
, 打开pwsh的配置文件。
然后再配置文件中设置环境变量, 之后重启vscode, 环境变量就正常能读取到了。
# 文件名 Microsoft.PowerShell_profile.ps1
+$env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"
+
参考
Posts
Vite React Route URL含有.时,路径无法正常匹配
今天遇到一个奇怪的问题,react-router的路径匹配无法正常工作,反而向vite的dev server发送了GET请求,这个请求报错404。页面直接无法访问。 +
Posts
解决 VsCode pwsh终端环境变量不生效问题
我在系统的环境变量设置里,用户和系统中,都加入了ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/这个环境变量。 +单独打开windows Terminal应用,使用 env | grep ELE 是能搜到我设置的环境变量的。但是在vscode中,这个环境变量不存在。 +我尝试了以下几个方法 +重启电脑,无效 配置"terminal.integrated.persistentSessionReviveProcess": "never", 然后重启电脑,无效 在终端直接执行code ., 在终端打开vscode, 依然无效 因此,我想起了之前配置的pwsh的配置文件。 可以使用code $PROFILE, 打开pwsh的配置文件。 +然后再配置文件中设置环境变量, 之后重启vscode, 环境变量就正常能读取到了。 +# 文件名 Microsoft.PowerShell_profile.ps1 $env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" 参考 https://www.zhihu.com/question/266858097
Vite React Route URL含有.时,路径无法正常匹配
今天遇到一个奇怪的问题,react-router的路径匹配无法正常工作,反而向vite的dev server发送了GET请求,这个请求报错404。页面直接无法访问。 按理说这种前端路由的框架应该不需要向后段发送请求的。 后来我怀疑是不是代理的问题,但是只是部分页面无法访问,所以排出这个选项。 随后我的系统又收到一条测试数据,这条测试数据却能够正常跳转。 @@ -89,13 +94,7 @@ 磁盘分区 因为之前设置了默认的整个磁盘分区,根目录只有15G, 太小了,所以我选择手动分区 先设置一个efi分区,就用默认的300M就可以,默认弹窗出来,是不需要设置挂在目录的 设置根分区 /, 我分了300G 设置/home分区,剩下的磁盘都分给他 我没有设置swap分区,因为我觉得32G内存够大,不需要swap 其他 后续的配置非常简单,基本点点按钮就能搞定 体验 总体来说,安装软件是最舒服的一件事。不需要像安装manjaro那样,到处找安装常用应用的教程。只需要打开应用商店,点击下载就可以了。 整个安装过程,我觉得磁盘分区是最难的部分。其他都是非常方便的。 感觉深度的界面很漂亮,值得体验 -问题 NUC自带的麦克风无法外放声音,插有线耳机也不行,只有蓝牙耳机能用
Wireshark 使用技巧
0. 前提条件 wireshark 4.0.2 1. 时间显示 wireshark的默认时间显示是抓包的相对时间, 如果我们时间按照年月日时分秒显示,就需要进行如下设置: -视图->时间显示格式->选择具体的时间格式 -2. UDP解码为RTP 方案1 在一个包UDP包上点击右键,出现如下弹框,选择Decode As -再当前值上选择RTP 方案2 方案1有一个缺点,只能过滤单一端口的UDP包,将其解码为RTP。 -假如有很多的UDP包,并且端口都不一样,如果想把这些包都解码为RTP, 则需要如下设置。 -选择分析->启用的协议 -在搜索框中输入RTP, 然后启用RTP的rtp_udp
Posts
黑客帝国终端字符瀑布
安装 sudo apt install cmatrix 帮助文档 ➜ ~ cmatrix --help Usage: cmatrix -[abBcfhlsmVx] [-u delay] [-C color] -a: Asynchronous scroll -b: Bold characters on -B: All bold characters (overrides -b) -c: Use Japanese characters as seen in the original matrix. Requires appropriate fonts -f: Force the linux $TERM type to be on -l: Linux mode (uses matrix console font) -L: Lock mode (can be closed from another terminal) -o: Use old-style scrolling -h: Print usage and exit -n: No bold characters (overrides -b and -B, default) -s: "Screensaver" mode, exits on first keystroke -x: X window mode, use if your xterm is using mtx....
命令行笔记本 nb 记笔记何须离开终端?
nb是一个基于命令行的笔记本工具,功能很强大。 +
Posts
#shazam算法分析
参考 http://coding-geek.com/how-shazam-works/ https://blog.csdn.net/yutianzuijin/article/details/49787551 http://hpac.cs.umu.se/teaching/sem-mus-17/Reports/Froitzheim.pdf https://github.com/sfluor/musig
黑客帝国终端字符瀑布
安装 sudo apt install cmatrix 帮助文档 ➜ ~ cmatrix --help Usage: cmatrix -[abBcfhlsmVx] [-u delay] [-C color] -a: Asynchronous scroll -b: Bold characters on -B: All bold characters (overrides -b) -c: Use Japanese characters as seen in the original matrix. Requires appropriate fonts -f: Force the linux $TERM type to be on -l: Linux mode (uses matrix console font) -L: Lock mode (can be closed from another terminal) -o: Use old-style scrolling -h: Print usage and exit -n: No bold characters (overrides -b and -B, default) -s: "Screensaver" mode, exits on first keystroke -x: X window mode, use if your xterm is using mtx....
命令行笔记本 nb 记笔记何须离开终端?
nb是一个基于命令行的笔记本工具,功能很强大。 记笔记何须离开终端? 特点 plain-text data storage, encryption, filtering and search, Git-backed versioning and syncing, Pandoc-backed conversion, global and local notebooks, customizable color themes, extensibility through plugins, 支持各种编辑器打开笔记, 我自然用VIM了。 A text editor with command line support, such as:Vim,Emacs,Visual Studio Code,Sublime Text,micro,nano,Atom,TextMate,MacDown,some of these,and many of these. @@ -17,12 +17,7 @@ 所以我们需要恢复ctrl+a的原有功能。 只需要把下面的两行取消注释 set -gu prefix2 unbind C-a 复制模式支持jk上下移动 set -g mode-keys vi 在相同的目录打开新的窗口或者标签页 tmux_conf_new_window_retain_current_path=true tmux_conf_new_pane_retain_current_path=true 隐藏系统运行时间信息 状态栏的系统运行时长似乎没什么用,可以隐藏 -tmux_conf_theme_status_left=" ❐ #S "
stompjs 心跳机制调研
hazelcast IDMG
IDMG是 IN-MEMORY DATA GRID的缩写。 -官方的一句话介绍: -The industry’s fastest, most scalable in-memory data grid, where speed, scalability and continuous processing are the core requirements for deployment. -抽取关键词: -快 可伸缩 内存 分布式 简介 An IMDG (in-memory data grid) is a set of networked/clustered computers that pool together their random access memory (RAM) to let applications share data structures with other applications running in the cluster. -The primary advantage is speed, which has become critical in an environment with billions of mobile, IoT devices and other sources continuously streaming data....
stompjs 心跳机制调研
Posts
macbook pro 1708 换电池记录
人类灭绝的7种方式
人类将以什么方式走向灭绝,很多科幻电影中都有过设想。 +
Posts
hazelcast IDMG
IDMG是 IN-MEMORY DATA GRID的缩写。 +官方的一句话介绍: +The industry’s fastest, most scalable in-memory data grid, where speed, scalability and continuous processing are the core requirements for deployment. +抽取关键词: +快 可伸缩 内存 分布式 简介 An IMDG (in-memory data grid) is a set of networked/clustered computers that pool together their random access memory (RAM) to let applications share data structures with other applications running in the cluster. +The primary advantage is speed, which has become critical in an environment with billions of mobile, IoT devices and other sources continuously streaming data....
macbook pro 1708 换电池记录
人类灭绝的7种方式
人类将以什么方式走向灭绝,很多科幻电影中都有过设想。 最近读到一本书《人类灭绝》来自日本作家高野和明的科幻小说给出系统的介绍。小说中有一份报告,叫做《海斯曼报告》。 下面表格中的1-5是报告中提到的人类灭绝方式,6-7是我自己添加。 种类 类别 举例 相关电影,或者书籍 1 宇宙规模的灾难 小行星撞地球,太阳燃尽 2 地球规模的环境变动 地球磁场的南北逆转现象,环境污染 《2012》《后天》 3 核战 二战 日本 核武器 4 疫病 病毒威胁 生物武器 电影生化危机,今年的新冠肺炎疫情,HIV 《生化危机》《行尸走肉》 5 人类进化 由于基因突变,产生更加智能的人类 《东京食尸鬼》《人类灭绝》 6 AI失控 人工智能出现自我意识 《我,机器人》《终结者系列》《黑客帝国系列》 7 外星人入侵 高层次文明入侵低层次文明 《三体》 于三体不同的是,作者从人类第5种可能性展开小说。如果你喜欢三体的话,《人类灭绝》这本小说,也是非常值得一读的。
南京尧新科目二考试考试回顾
科目二倒库和四项练的差不多了,决定去参加考试,考试虽然一波三折,但结果还是好的,一次通过了 @@ -21,7 +26,7 @@ export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8 export LC_COLLATE=C export LC_CTYPE=en_US.UTF-8 source ~/.bashrc
Get: shift + 鼠标滚轮 左右滚动页面
使用触摸板,可以左右滑动,来左右滚动只能部分显示的页面。但是在用鼠标的时候,由于鼠标滚轮只能上下滚动页面,所以不太方便。 此时,你可以按住shift + 滚动鼠标滚轮,来实现左右滚动页面
Chrome 键盘快捷键参考
本页介绍 Chrome DevTools 中所有键盘快捷键的参考信息。一些快捷键全局可用,而其他快捷键会特定于单一面板。您也可以在提示中找到快捷键。将鼠标悬停在 DevTools 的 UI 元素上可以显示元素的提示。 如果元素有快捷键,提示将包含快捷键。 访问 DevTools 访问 DevTools 在 Windows 上 在 Mac 上 打开 Developer Tools F12、Ctrl + Shift + I Cmd + Opt + I 打开/切换检查元素模式和浏览器窗口 Ctrl + Shift + C Cmd + Shift + C 打开 Developer Tools 并聚焦到控制台 Ctrl + Shift + J Cmd + Opt + J 检查检查器(取消停靠第一个后按) Ctrl + Shift + I Cmd + Opt + I 全局键盘快捷键 下列键盘快捷键可以在所有 DevTools 面板中使用:...
RFC 6917 笔记
when considered in conjunction with deployment architectures that include 1:M and M:N combinations of Application Servers and Media Servers -Media Resource Broker (MRB) entity, which manages the availability of Media Servers and the media resource demands of Application Servers. The document includes potential deployment options for an MRB and appropriate interfaces to Application Servers and Media Servers.
NAT
4种NAT类型 NAT类型 接收数据前是否要先发送数据 有没有可能检测下一个IP:PORT对是否打开 是否限制发包目的的IP:PORT 全锥型 no yes no 限制锥型 yes yes only IP 端口限制型 yes yes yes 对称型 yes no yes NAT穿透 • STUN: Simple traversal of UDP over NAT• TURN: Traversal of UDP over Relay NAT• ALG: Application Layer Gateways• MANUAL: Manual configuration (port forwarding)• UPNP: Universal Plug and Play
Posts
树莓派安装fs 1.10
1. 将源码包上传到服务器, 并解压 安装依赖 apt update apt install autoconf \ libtool \ libtool-bin \ libjpeg-dev \ libsqlite3-dev \ libspeex-dev libspeexdsp-dev \ libldns-dev \ libedit-dev \ libtiff-dev \ libavformat-dev libswscale-dev libsndfile-dev \ liblua5.1-0-dev libcurl4-openssl-dev libpcre3-dev libopus-dev libpq-dev 配置 ./bootstrap.sh ./configure make make && make install 参考:https://www.cnblogs.com/MikeZhang/p/RaspberryPiInstallFreeSwitch.html
在iPhone iPad上搭建Linux本地开发环境
我在家里的时候,大部分时间用iPad远程连接到服务端做开发。虽然也是蛮方便的,但是每年都需要买个云服务器,也是一笔花费,最近看到一个App, 可以在手机上直接运行一个Linux环境,试了一下,果然还不错。下面记录一下安装过程。 +
Posts
NAT
4种NAT类型 NAT类型 接收数据前是否要先发送数据 有没有可能检测下一个IP:PORT对是否打开 是否限制发包目的的IP:PORT 全锥型 no yes no 限制锥型 yes yes only IP 端口限制型 yes yes yes 对称型 yes no yes NAT穿透 • STUN: Simple traversal of UDP over NAT• TURN: Traversal of UDP over Relay NAT• ALG: Application Layer Gateways• MANUAL: Manual configuration (port forwarding)• UPNP: Universal Plug and Play
树莓派安装fs 1.10
1. 将源码包上传到服务器, 并解压 安装依赖 apt update apt install autoconf \ libtool \ libtool-bin \ libjpeg-dev \ libsqlite3-dev \ libspeex-dev libspeexdsp-dev \ libldns-dev \ libedit-dev \ libtiff-dev \ libavformat-dev libswscale-dev libsndfile-dev \ liblua5.1-0-dev libcurl4-openssl-dev libpcre3-dev libopus-dev libpq-dev 配置 ./bootstrap.sh ./configure make make && make install 参考:https://www.cnblogs.com/MikeZhang/p/RaspberryPiInstallFreeSwitch.html
在iPhone iPad上搭建Linux本地开发环境
我在家里的时候,大部分时间用iPad远程连接到服务端做开发。虽然也是蛮方便的,但是每年都需要买个云服务器,也是一笔花费,最近看到一个App, 可以在手机上直接运行一个Linux环境,试了一下,果然还不错。下面记录一下安装过程。 step1: 下载iSh step2: 安装apk 这个软件下载之后打开,就直接进到shell界面,虽然它是一个基于alpine的环境,但是没有apk, 我们需要手工安装这个包管理工具。 wget -qO- http://dl-cdn.alpinelinux.org/alpine/v3.12/main/x86/apk-tools-static-2.10.5-r1.apk | tar -xz sbin/apk.static && ./sbin/apk.static add apk-tools && rm sbin/apk.static && rmdir sbin 2> /dev/null 温馨提示:在iSh的右下角,有个按钮是粘贴按钮。 step3: apk update 虽然安装了apk, 但是不更新的话,可能很多安装包都没有,所以最好先更新。 @@ -40,7 +40,7 @@ shit! 很多人真的就直接掏钱了。 你看看,收银员说的不好意思多值钱,简直是一字千金啊!但是更多时候,我们都是稀里糊涂的蒙在鼓里。 要想不被辱羊毛,务必要谨记。 -商品的标价要谨记于心 不要相信收银员的信口开河的算钱,要自己算 买完东西,一定要问收银员要小票 收银员称重的时候,要注意观察称上显示的价格和摆货区的价格是否一致
IO性能 Node vs PHP vs Java vs Go
System Calls 应用程序工作在用户模式 应用程序不能直接访问硬件资源,应用程序需要调用操作系统提供的接口间接访问。这个叫做系统调用。一般的系统调用都是阻塞的。阻塞的意思就是你在网上买了个苹果,在你收到这个快递之前,你啥也不干,就躺在床上等着。 非阻塞 非阻塞的程序,在系统调用时,会立即返回一个标shi
Posts
使用iPad开发折腾记
为什么要用iPad开发? 第一,我不想再买台电脑或者笔记本放在家里。因为我也不用电脑来打游戏。而且无论台式机还是笔记本都比较占地方。搬家也费劲。 第二,我只有一台MacBook Pro,以前下班也会背着,因为总有些事情需要做。但是自从有一天觉得肩膀不舒服了,我就决定不再背电脑。廉颇老矣,腰酸背痛。 虽然不再背电脑,但是偶有雅兴,心血来潮,我还需要写点博客或者代码的。 所以我买了台iPad来开发或者写博客。 前期准备工作 硬件准备 一台iPad 一个蓝牙键盘。最好买那种适合笔记本的蓝牙键盘,千万不要买可折叠的蓝牙键盘,因为用着不舒服 软件准备 常规的功能,例如写文字,写博客,一个浏览器足以胜任。唯一的难点在于如何编程。 +
Posts
IO性能 Node vs PHP vs Java vs Go
System Calls 应用程序工作在用户模式 应用程序不能直接访问硬件资源,应用程序需要调用操作系统提供的接口间接访问。这个叫做系统调用。一般的系统调用都是阻塞的。阻塞的意思就是你在网上买了个苹果,在你收到这个快递之前,你啥也不干,就躺在床上等着。 非阻塞 非阻塞的程序,在系统调用时,会立即返回一个标shi
使用iPad开发折腾记
为什么要用iPad开发? 第一,我不想再买台电脑或者笔记本放在家里。因为我也不用电脑来打游戏。而且无论台式机还是笔记本都比较占地方。搬家也费劲。 第二,我只有一台MacBook Pro,以前下班也会背着,因为总有些事情需要做。但是自从有一天觉得肩膀不舒服了,我就决定不再背电脑。廉颇老矣,腰酸背痛。 虽然不再背电脑,但是偶有雅兴,心血来潮,我还需要写点博客或者代码的。 所以我买了台iPad来开发或者写博客。 前期准备工作 硬件准备 一台iPad 一个蓝牙键盘。最好买那种适合笔记本的蓝牙键盘,千万不要买可折叠的蓝牙键盘,因为用着不舒服 软件准备 常规的功能,例如写文字,写博客,一个浏览器足以胜任。唯一的难点在于如何编程。 目前来说,有两个方案: 方案1: 使用在线编辑器。例如码云,github, codepen等网站,都是提供在线编辑器的。优点是方便,免费。缺点也很明显,无法调试或者运行代码。 方案2: 购买云主机,iPad上安装Termius, ssh远程连接到服务端,在真正的操作系统中做开发。优点是比较自由,扩展性强。缺点是需要花钱,而且在没有IDE环境做开发是有不小的难度的。 方案1由于比较简单,就不赘述了。 着重讲讲方案2: @@ -34,7 +34,7 @@ 为了让vim能够接受鼠标向下滚动功能,我也曾设置了 set mouse=a 这个设置虽然可以用触摸板来向下滚屏了,但是也出现了意想不到的问题。 然后我就去研究iTerm2的配置,发现关于鼠标的配置中,有一个 Scroll wheel send arrow keys when in alternat screen mode , 把这个指设置为Yes。那么无论Vim, 还是man命令,都可以用触摸板去滚动屏幕了。
mac上netstat命令
Mac上的netstat和Linux上的有不少的不同之处。 在Liunx上常使用 -Linux Mac netstat -nulp netstat -nva -p udp netsat -ntlp netsat -nva -p tcp 注意,在Mac上netstat的-n和linux上的含义相同
获取本机外部公网IP
curl ip.sb curl cip.cc
Posts
exec user process caused no such file or diectory
exec user process caused "no such file or diectory" 解决方案: 将镜像构建的 Dockerfile ENTRYPOINT ["/run.sh"] 改为下面的 +
Posts
获取本机外部公网IP
curl ip.sb curl cip.cc
exec user process caused no such file or diectory
exec user process caused "no such file or diectory" 解决方案: 将镜像构建的 Dockerfile ENTRYPOINT ["/run.sh"] 改为下面的 ENTRYPOINT ["sh","/run.sh"] 其实就是加了个sh
使用image标签上传日志
function report(msg:string){ var msg = new Image() msg.src = `/report?log=${msg}` } report
ModuleNotFoundError: No module named 'SocketServer'
python Flask框架报错。刚开始我只关注了这个报错,没有看到这个报错上上面还有一个报错 ModuleNotFoundError: No module named 'http.client'; 'http' is not a package 实际上问题的关键其实是 'http' is not a package , 为什么会有这个报错呢? 其实因为我自己在项目目录里新建一个叫做http.py的文件,这个文件名和python的标准库重名了,就导致了后续的一系列的问题。 @@ -29,7 +29,7 @@ code 断开原因码 reason 具体原因 wasClean 是否是正常断开 官方文档上,code字段有很多个值。但是大多数情况下,要么拿到的值是undefined, 要么是1006,基本上没有其他情况。...
fping 网络状态监控测试
新建一个文件 ip.list.cfg, 包含所有的带测试的ip地址。 192.168.40.20 192.168.40.21 执行命令: nohup fping -D -u -l -p 2000 -f ip.list.cfg & -D 显示时间戳 -u 显示不可达的目标 -l 持续的ping -p 每隔多少毫秒执行一次 -f 指定ip列表文件 在nohup.out中,回持续的显示到各个ip的网络状况。 -[1592643928.961414] 192.168.40.20 : [0], 84 bytes, 3.22 ms (3.22 avg, 0% loss) [1592643928.969987] 192.168.40.21 : [0], 84 bytes, 1.22 ms (1.22 avg, 0% loss) [1592643930.965753] 192.168.40.20 : [1], 84 bytes, 5.25 ms (4.23 avg, 0% loss) [1592643930.972833] 192.168.40.21 : [1], 84 bytes, 1.14 ms (1....
oh-my-zsh 安装 tmux插件
.zshrc配置 vim ~/.zshrc plugins=(git tmux) # 加入tmux, 然后保存退出 source ~/.zshrc tmux 快捷键 Alias Command Description ta tmux attach -t Attach new tmux session to already running named session tad tmux attach -d -t Detach named tmux session ts tmux new-session -s Create a new named tmux session tl tmux list-sessions Displays a list of running tmux sessions tksv tmux kill-server Terminate all running tmux sessions tkss tmux kill-session -t Terminate named running tmux session tmux _zsh_tmux_plugin_run Start a new tmux session
Posts
Nodejs诊断报告
解决问题的最后一个思路:拼写错误!!
从各种层次排查了问题,包括 +
Posts
oh-my-zsh 安装 tmux插件
.zshrc配置 vim ~/.zshrc plugins=(git tmux) # 加入tmux, 然后保存退出 source ~/.zshrc tmux 快捷键 Alias Command Description ta tmux attach -t Attach new tmux session to already running named session tad tmux attach -d -t Detach named tmux session ts tmux new-session -s Create a new named tmux session tl tmux list-sessions Displays a list of running tmux sessions tksv tmux kill-server Terminate all running tmux sessions tkss tmux kill-session -t Terminate named running tmux session tmux _zsh_tmux_plugin_run Start a new tmux session
Nodejs诊断报告
解决问题的最后一个思路:拼写错误!!
从各种层次排查了问题,包括 docker版本不一样 脚本不一样 镜像的问题 … 从各种角度排查过后,却发现,问题在是拼写错误。环境变量没有设置对,导致进程无法前台运行。 能不拼写就不要拼写!!直接复制。 大文件在传输图中可能会文件损坏,最好使用md5sum计算文件校验和,然后做对比。
01 手绘风格的流程图
webrtc的各种demo https://webrtc.github.io/samples/ 在线音频处理 https://audiomass.co/ 值得深入阅读,关于如何demo的思考 https://kitsonkelly.com/posts/deno-is-a-browser-for-code/ 不错的介绍demo的博客 https://kitsonkelly.com/posts js如何获取音频视频 https://www.webdevdrops.com/en/how-to-access-device-cameras-with-javascript/ bats可以用来测试shell脚本 https://github.com/bats-core/bats-core 手绘风格的流程图 https://excalidraw.com/
理发店的营业模式分析
1. 理发店分类 类别 店面大小 并发理发人数 业务范围 消费者画像 定价 A(单一理发类) 较小 4-6 理发、染发、烫发 学生、普通工人 较低 B(综合服务类) 较大 12-20 理发、染发、烫发、美容、减肥、刮痧、按摩、脱毛等等 白领、老板等有一定经济能力者 中上 2. 如何吸引顾客上门? 优惠卡:在理发店营业之前,往往可以以极低的价格,派发理发卡。例如办理20元理发5次这样的理发卡。这样在理发店营业之初,就会有足够的客户上门理发。 认知偏差:很多理发店会门口挂个横幅: x+x+x 仅需5元。全场套餐仅需1折。其实这些都是吸引顾客的钩子,而真正的前提条件,往往是要办理xxxx元的会员卡。 3. 如何吸引客户更多的消费? 对于B类理发店来说,一般情况下顾客进店之后,并不会对其立即理发。而需要一位服务员进行理发前的准备,例如头部按摩、颈部刮痧、肩部按摩的放松准备。也可能会上一些茶水,糖果瓜子之类的食品。 @@ -53,25 +53,7 @@ 我们不是刚出生的婴儿,我们有完全发育的下丘脑。 控制你的体温,同时也控制你的脾气,你说话的方式。 每个人都值得温柔以待,即使是你不喜欢的人。 -你好,下丘脑~
尿酸简史
从细胞说起 人体由细胞组成。人体的细胞中大约有40-60万亿个。细胞无时无刻不再新老更替、新陈代谢。 -微观世界的细胞变化,反应在人体生产,就是一个人从成长到衰老的过程。 -细胞中有一种重要的物质,核酸。核酸是脱氧核糖核酸(DNA)和核糖核酸(RNA)的总称。 -核酸由无数的核苷酸组成,核苷酸里有一种物质叫做嘌呤。而嘌呤和人体的尿酸有着密不可分的关系。 -除了作为遗传物质的一部分,嘌呤中的腺嘌呤也是腺苷三磷酸(ATP)的重要组成部分。APT是人体直接的能量来源。 -在剧烈运动时,APT会进一步分解成腺嘌呤。 -总之:尿酸和嘌呤的关系非常密切。人体细胞的遗传物质以及作为能量来源的APT都会产生嘌呤。 -尿酸来源分类 内源性尿酸: 来自人体自身细胞衰亡,残留的嘌呤经过酶的作用产生尿酸 外源性尿酸: 大多来自食物中的嘌呤类化合物、核酸、核蛋白等物质、经过酶的作用下产生尿酸。 我们身体中的尿酸2/3来自自身的生命活动, 1/3来自食物。 -尿酸的合成与排泄 大部分的嘌呤在肝脏中经过氧化代谢、变成尿酸。在词过程中,有两类酶扮演着重要作用。 抑制尿酸合成的酶 促进尿酸合成的酶 2/3的尿酸通过肾脏排出。肾脏只有也有能够促进或者抑制尿酸重吸收的酶。 1/3的尿酸通过肠道排出 所以尿酸较高的患者,医生会让你抽血查肝功能和肾功能,如果肝脏中的某些指标异常,也会进一步通过B超去做进一步的判断。 -很多人误以为尿酸是查尿液,实际上这是被尿酸的名字误解了,尿酸是抽血检测的。 -人体中酶在声明活动中扮演着重要的角色。酶就好像是太极中的阴与阳一样,相互制衡达到平衡之时,身体才会健康。否则阴阳失衡,必然会存在身体病变。 -另外一些降低尿酸的药品,例如苯溴马隆片,其药理也是通过降低肾脏对尿酸的重吸收,来促进尿酸的排泄的。 -食物中的尿酸对人体影响有多大? 具体哪些不能吃,哪些能吃,网上都有很多资料了。总之,大鱼大肉是要尽量避免的。食物主要要以清淡为主,吃饭不要吃撑,尽量迟到7分饱,或者迟到不饿为佳。 -高尿酸的危害 有溶解度相关知识的同学都会知道,溶质在溶液中都是由溶解度的,超过溶解度之后,物质就会析出。尿酸也是如此,过饱和的尿酸会析出称为尿酸结晶。 -这些结晶会沉积在关节和各种软组织,就可能造成这些部位的损害。 -当尿酸结晶附着在关节软骨表面上的滑膜上时,血液中的白细胞会把它当做敌人,释放各种酶去进攻。这些酶在进攻敌人的同时,对自身的关节软骨的溶解和自身软组织的损伤。 对痛风患者而言,感受到的就是苦不堪言的痛风性关节炎 -另外,大量的尿酸最终是通过肾脏排泄的,如果尿酸在肾脏上析出。对肾脏也会造成难以修复的损害,甚至患上尿毒症。光听这个尿毒症的名字,你就应该这道,这个病有多厉害。当你管不住自己嘴的时候,想想尿毒症吧。 -不要等到失去任劳任怨的肾脏之后,再后悔莫及。 -参考 https://baike.baidu.com/item/%E4%BA%BA%E4%BD%93%E7%BB%86%E8%83%9E
Posts
kaldi安装
为了省去安装的麻烦,我直接使用的是容器版本的kaldi +
Posts
尿酸简史
从细胞说起 人体由细胞组成。人体的细胞中大约有40-60万亿个。细胞无时无刻不再新老更替、新陈代谢。 +微观世界的细胞变化,反应在人体生产,就是一个人从成长到衰老的过程。 +细胞中有一种重要的物质,核酸。核酸是脱氧核糖核酸(DNA)和核糖核酸(RNA)的总称。 +核酸由无数的核苷酸组成,核苷酸里有一种物质叫做嘌呤。而嘌呤和人体的尿酸有着密不可分的关系。 +除了作为遗传物质的一部分,嘌呤中的腺嘌呤也是腺苷三磷酸(ATP)的重要组成部分。APT是人体直接的能量来源。 +在剧烈运动时,APT会进一步分解成腺嘌呤。 +总之:尿酸和嘌呤的关系非常密切。人体细胞的遗传物质以及作为能量来源的APT都会产生嘌呤。 +尿酸来源分类 内源性尿酸: 来自人体自身细胞衰亡,残留的嘌呤经过酶的作用产生尿酸 外源性尿酸: 大多来自食物中的嘌呤类化合物、核酸、核蛋白等物质、经过酶的作用下产生尿酸。 我们身体中的尿酸2/3来自自身的生命活动, 1/3来自食物。 +尿酸的合成与排泄 大部分的嘌呤在肝脏中经过氧化代谢、变成尿酸。在词过程中,有两类酶扮演着重要作用。 抑制尿酸合成的酶 促进尿酸合成的酶 2/3的尿酸通过肾脏排出。肾脏只有也有能够促进或者抑制尿酸重吸收的酶。 1/3的尿酸通过肠道排出 所以尿酸较高的患者,医生会让你抽血查肝功能和肾功能,如果肝脏中的某些指标异常,也会进一步通过B超去做进一步的判断。 +很多人误以为尿酸是查尿液,实际上这是被尿酸的名字误解了,尿酸是抽血检测的。 +人体中酶在声明活动中扮演着重要的角色。酶就好像是太极中的阴与阳一样,相互制衡达到平衡之时,身体才会健康。否则阴阳失衡,必然会存在身体病变。 +另外一些降低尿酸的药品,例如苯溴马隆片,其药理也是通过降低肾脏对尿酸的重吸收,来促进尿酸的排泄的。 +食物中的尿酸对人体影响有多大? 具体哪些不能吃,哪些能吃,网上都有很多资料了。总之,大鱼大肉是要尽量避免的。食物主要要以清淡为主,吃饭不要吃撑,尽量迟到7分饱,或者迟到不饿为佳。 +高尿酸的危害 有溶解度相关知识的同学都会知道,溶质在溶液中都是由溶解度的,超过溶解度之后,物质就会析出。尿酸也是如此,过饱和的尿酸会析出称为尿酸结晶。 +这些结晶会沉积在关节和各种软组织,就可能造成这些部位的损害。 +当尿酸结晶附着在关节软骨表面上的滑膜上时,血液中的白细胞会把它当做敌人,释放各种酶去进攻。这些酶在进攻敌人的同时,对自身的关节软骨的溶解和自身软组织的损伤。 对痛风患者而言,感受到的就是苦不堪言的痛风性关节炎 +另外,大量的尿酸最终是通过肾脏排泄的,如果尿酸在肾脏上析出。对肾脏也会造成难以修复的损害,甚至患上尿毒症。光听这个尿毒症的名字,你就应该这道,这个病有多厉害。当你管不住自己嘴的时候,想想尿毒症吧。 +不要等到失去任劳任怨的肾脏之后,再后悔莫及。 +参考 https://baike.baidu.com/item/%E4%BA%BA%E4%BD%93%E7%BB%86%E8%83%9E
kaldi安装
为了省去安装的麻烦,我直接使用的是容器版本的kaldi https://hub.docker.com/r/kaldiasr/kaldi docker pull kaldiasr/kaldi This is the official Docker Hub of the Kaldi project: http://kaldi-asr.org Kaldi offers two sets of images: CPU-based images and GPU-based images. Daily builds of the latest version of the master branch (both CPU and GPU images) are pushed to DockerHub. Sample usage of the CPU based images: docker run -it kaldiasr/kaldi:latest Sample usage of the GPU based images: Note: use nvidia-docker to run the GPU images....
Type 'Timeout' is not assignable to type 'number'
let timer:NodeJS.Timer; timer = global.setTimeout(myFunction, 1000); 参考http://evanshortiss.com/development/nodejs/typescript/2016/11/16/timers-in-typescript.html
macbook 清空DNS缓存
sudo killall -HUP mDNSResponder
xmpp学习
从pcap文件提取转wav语音文件
wireshark具有这个功能,但是并不适合做批量执行。 下面的方案比较适合批量执行。 @@ -24,10 +42,7 @@ /proc/pid/fd/目录下也有文件描述符 lsof -c 进程名lsof -p 进程号lsof filename # 查看某个文件被哪个进程打开** [root@localhost ~]# lsof -c rtpproxy COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rtpproxy 2073 root cwd DIR 253,0 4096 128 / rtpproxy 2073 root rtd DIR 253,0 4096 128 / rtpproxy 2073 root txt REG 253,0 933247 18295252 /usr/local/bin/rtpproxy rtpproxy 2073 root mem REG 253,0 2127336 33617010 /usr/lib64/libc-2....
老年生活
最近感觉提前步入老年生活,晚上九点睡觉,早上六点醒来。醒来之后打盹一会,等着按灭六点十分的闹钟。 -哎,又困了。😩😩😩😩😩😩
简历之吃苦耐劳
最近需要招个前端开发,我更想让他向Nodejs方面发展。 -简历看的眼花,不知道为什么有那么多人都在简历上写吃苦难耐,难道做前端开发真的需要吃苦耐劳吗? -我在NPM上没有找到能收邮件的包,找到了发邮件的包。 -我想找个能收邮件的包,自动收邮件,自动分析和过滤一些不想看的简历。
Posts
window轻量级抓包工具RawCap介绍
相比于wireshark, RawCap非常小,仅有48kb。 +
Posts
简历之吃苦耐劳
最近需要招个前端开发,我更想让他向Nodejs方面发展。 +简历看的眼花,不知道为什么有那么多人都在简历上写吃苦难耐,难道做前端开发真的需要吃苦耐劳吗? +我在NPM上没有找到能收邮件的包,找到了发邮件的包。 +我想找个能收邮件的包,自动收邮件,自动分析和过滤一些不想看的简历。
window轻量级抓包工具RawCap介绍
相比于wireshark, RawCap非常小,仅有48kb。 使用RawCap命令需要使用管理员权限打开CMD,然后进入到RawCap.exe的目录。例如F:\Tools 显示网卡列表 输入RawCap.exe –help, 可以显示命令的使用帮助、网卡列表还有使用例子。 F:\Tools>RawCap.exe --help NETRESEC RawCap version 0.2.0.0 Usage: RawCap.exe [OPTIONS] <interface> <pcap_target> <interface> can be an interface number or IP address <pcap_target> can be filename, stdout (-) or named pipe (starting with \\.\pipe\) OPTIONS: -f Flush data to file after each packet (no buffer) -c <count> Stop sniffing after receiving <count> packets -s <sec> Stop sniffing after <sec> seconds -m Disable automatic creation of RawCap firewall entry -q Quiet, don't print packet count to standard out INTERFACES: 0....
大数据时代的平民新装
之前在百毒搜索了一下营养师考证,然后最近就经常收到骚扰电话,咨询我是否有意参加考试。 @@ -41,7 +44,7 @@ 一般情况下我会用grep或者awk进行初步的整理。如果shell脚本处理不太方便,通常我会写个js脚本。 Node.js的readline可以实现按行取出。处理过后的输出依然是写文件。 const readline = require('readline') const fs = require('fs') const dayjs = require('dayjs') const fileName = 'data.log' const batch = dayjs().format('MMDDHHmmss') const dist = fs.createWriteStream(`${fileName}.out`) const rl = readline.createInterface({ input: fs.createReadStream(fileName) }) rl.on('line', handlerLine) function handlerLine (line) { let info = line.split(' ') let time = dayjs(`2020-${info[0]} ${info[1]}`).valueOf() let log = `rtpproxy,tag=b${batch} socket=${info[2]},mem=${info[3]} ${time}000000\n` console.log(log) dist.write(log) } 输出的文件格式如下,至于为什么是这种格式,且看下文分晓。 -rtpproxy,tag=b0216014954 socket=691,mem=3106936 1581477499000000000 rtpproxy,tag=b0216014954 socket=615,mem=3109328 1581477648000000000 rtpproxy,tag=b0216014954 socket=669,mem=3113764 1581477901000000000 rtpproxy,tag=b0216014954 socket=701,mem=3114820 1581477961000000000 数据导入 以前我都会把数据规整后的输出写成一个JSON文件,然后写html页面,引入Echarts库,进行数据可视化。...
故障的特征分析方法
特征维度 特征项 集中 无规律 周期性 时间 集中在某个时间点发生 按固定时间间隔发生 空间 集中在某个空间发生 人物 集中在某个人物身上发生
Posts
我走过的nginx反向代理的坑
下文的论述都以下面的配置为例子 +
Posts
故障的特征分析方法
特征维度 特征项 集中 无规律 周期性 时间 集中在某个时间点发生 按固定时间间隔发生 空间 集中在某个空间发生 人物 集中在某个人物身上发生
我走过的nginx反向代理的坑
下文的论述都以下面的配置为例子 location ^~ /p/security { rewrite /p/security/(.*) /security/$1 break; proxy_pass http://security:8080; proxy_redirect off; proxy_set_header Host $host; add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Credentials' 'true' always; } 如果dns无法解析,nginx则无法启动 security如果无法解析,那么nginx则无法启动 DNS缓存问题: nginx启动时,如果将security dns解析为1.2.3.4。如果security的ip地址变了。nginx不会自动解析新的ip地址,导致反向代理报错504。 反向代理的DNS缓存问题务必重视 跨域头配置的always 反向代理一般都是希望允许跨域的。如果不加always,那么只会对成功的请求加跨域头,失败的请求则不会。 关于**‘Access-Control-Allow-Origin’ ‘*’,如果后端服务本身就带有这个头,那么如果你在nginx中再添加这个头,就会在浏览器中遇到下面的报错。而解决办法就是不要在nginx中设置这个头。** Access to fetch at 'http://192.168.40.107:31088/p/security/v2/login' from origin 'http://localhost:5000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed....
kindle阅读器的寿命
2018年1月26日,我在京东上买了一个Kindle Paperwhite, 距离今天,大概已经2年多一点了。 我是一个重度读者,每天都会花上一些时间去阅读。最近两天发现,本来可以连续两周不用充电的kindle。基本上现在是电量以每天50%的速度减少。或许,2年,就是kindle的寿命。 @@ -35,13 +35,7 @@ “那个姑娘,长得再高一点就太高了,长得再低一点就太低了。擦了粉底的话就太白,擦了腮红就太红了。眉毛像黑色的羽毛,肌肤像白雪一样。腰非常细,牙齿像贝壳一样白皙。” “她一笑,阳城和下蔡这两个地方的所有男人,都会被迷住。” “然而这个美女,天天登上我家的墙头偷窥我三年了,我至今都没有答应她让她作为我女朋友。” -“登徒先生则不然,他老婆蓬头垢面、兔唇龅牙、走路佝偻、还长痔疮。但是登徒先生却非常喜欢她,和她生了5个孩子。大王你仔细想想,谁才是真正的好色?”
洛神赋
黄初三年,余朝京师,还济洛川。古人有言:斯水之神,名曰宓妃。感宋玉对楚王神女之事,遂作斯赋。其词曰: -余从京域,言归东藩,背伊阙,越轘辕,经通谷,陵景山。日既西倾,车殆马烦。尔乃税驾乎蘅皋,秣驷乎芝田,容与乎阳林,流眄乎洛川。于是精移神骇,忽焉思散。俯则未察,仰以殊观。睹一丽人,于岩之畔。乃援御者而告之曰:“尔有觌于彼者乎?彼何人斯,若此之艳也!”御者对曰:“臣闻河洛之神,名曰宓妃。然则君王之所见,无乃是乎!其状若何?臣愿闻之。” -余告之曰:其形也,翩若惊鸿,婉若游龙。荣曜秋菊,华茂春松。髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。秾纤得中,修短合度。肩若削成,腰如约素。延颈秀项,皓质呈露。芳泽无加,铅华弗御。云髻峨峨,修眉联娟。丹唇外朗,皓齿内鲜。明眸善睐,靥辅承权。瓌姿艳逸,仪静体闲。柔情绰态,媚于语言。奇服旷世,骨像应图。披罗衣之璀粲兮,珥瑶碧之华琚。戴金翠之首饰,缀明珠以耀躯。践远游之文履,曳雾绡之轻裾。微幽兰之芳蔼兮,步踟蹰于山隅。于是忽焉纵体,以遨以嬉。左倚采旄,右荫桂旗。攘皓腕于神浒兮,采湍濑之玄芝。 -余情悦其淑美兮,心振荡而不怡。无良媒以接欢兮,托微波而通辞。愿诚素之先达兮,解玉佩以要之。嗟佳人之信修,羌习礼而明诗。抗琼珶以和予兮,指潜渊而为期。执眷眷之款实兮,惧斯灵之我欺。感交甫之弃言兮,怅犹豫而狐疑。收和颜而静志兮,申礼防以自持。 -于是洛灵感焉,徙倚彷徨。神光离合,乍阴乍阳。竦轻躯以鹤立,若将飞而未翔。践椒途之郁烈,步蘅薄而流芳。超长吟以永慕兮,声哀厉而弥长。尔乃众灵杂沓,命俦啸侣。或戏清流,或翔神渚,或采明珠,或拾翠羽。从南湘之二妃,携汉滨之游女。叹匏瓜之无匹兮,咏牵牛之独处。扬轻袿之猗靡兮,翳修袖以延伫。体迅飞凫,飘忽若神。**凌波微步,罗袜生尘。**动无常则,若危若安;进止难期,若往若还。转眄流精,光润玉颜。含辞未吐,气若幽兰。华容婀娜,令我忘餐。 -于是屏翳收风,川后静波。冯夷鸣鼓,女娲清歌。腾文鱼以警乘,鸣玉銮以偕逝。六龙俨其齐首,载云车之容裔。鲸鲵踊而夹毂,水禽翔而为卫。于是越北沚,过南冈,纡素领,回清扬。动朱唇以徐言,陈交接之大纲。恨人神之道殊兮,怨盛年之莫当。抗罗袂以掩涕兮,泪流襟之浪浪。悼良会之永绝兮,哀一逝而异乡。无微情以效爱兮,献江南之明珰。虽潜处于太阴,长寄心于君王。忽不悟其所舍,怅神宵而蔽光。 -于是背下陵高,足往神留。遗情想像,顾望怀愁。冀灵体之复形,御轻舟而上溯。浮长川而忘反,思绵绵而增慕。夜耿耿而不寐,沾繁霜而至曙。命仆夫而就驾,吾将归乎东路。揽騑辔以抗策,怅盘桓而不能去。
Posts
割韭菜
有两种选择,要么被忽悠成韭菜被别人割,要么割别热的韭菜。
朝三暮四
“狙公赋芧,曰:‘朝三而暮四。‘众狙皆怒。曰:‘然则朝四而暮三。‘众狙皆悦。名实未亏而喜怒为用,亦因是也。《庄子—齐物论》 +
Posts
洛神赋
黄初三年,余朝京师,还济洛川。古人有言:斯水之神,名曰宓妃。感宋玉对楚王神女之事,遂作斯赋。其词曰: +余从京域,言归东藩,背伊阙,越轘辕,经通谷,陵景山。日既西倾,车殆马烦。尔乃税驾乎蘅皋,秣驷乎芝田,容与乎阳林,流眄乎洛川。于是精移神骇,忽焉思散。俯则未察,仰以殊观。睹一丽人,于岩之畔。乃援御者而告之曰:“尔有觌于彼者乎?彼何人斯,若此之艳也!”御者对曰:“臣闻河洛之神,名曰宓妃。然则君王之所见,无乃是乎!其状若何?臣愿闻之。” +余告之曰:其形也,翩若惊鸿,婉若游龙。荣曜秋菊,华茂春松。髣髴兮若轻云之蔽月,飘飖兮若流风之回雪。远而望之,皎若太阳升朝霞;迫而察之,灼若芙蕖出渌波。秾纤得中,修短合度。肩若削成,腰如约素。延颈秀项,皓质呈露。芳泽无加,铅华弗御。云髻峨峨,修眉联娟。丹唇外朗,皓齿内鲜。明眸善睐,靥辅承权。瓌姿艳逸,仪静体闲。柔情绰态,媚于语言。奇服旷世,骨像应图。披罗衣之璀粲兮,珥瑶碧之华琚。戴金翠之首饰,缀明珠以耀躯。践远游之文履,曳雾绡之轻裾。微幽兰之芳蔼兮,步踟蹰于山隅。于是忽焉纵体,以遨以嬉。左倚采旄,右荫桂旗。攘皓腕于神浒兮,采湍濑之玄芝。 +余情悦其淑美兮,心振荡而不怡。无良媒以接欢兮,托微波而通辞。愿诚素之先达兮,解玉佩以要之。嗟佳人之信修,羌习礼而明诗。抗琼珶以和予兮,指潜渊而为期。执眷眷之款实兮,惧斯灵之我欺。感交甫之弃言兮,怅犹豫而狐疑。收和颜而静志兮,申礼防以自持。 +于是洛灵感焉,徙倚彷徨。神光离合,乍阴乍阳。竦轻躯以鹤立,若将飞而未翔。践椒途之郁烈,步蘅薄而流芳。超长吟以永慕兮,声哀厉而弥长。尔乃众灵杂沓,命俦啸侣。或戏清流,或翔神渚,或采明珠,或拾翠羽。从南湘之二妃,携汉滨之游女。叹匏瓜之无匹兮,咏牵牛之独处。扬轻袿之猗靡兮,翳修袖以延伫。体迅飞凫,飘忽若神。**凌波微步,罗袜生尘。**动无常则,若危若安;进止难期,若往若还。转眄流精,光润玉颜。含辞未吐,气若幽兰。华容婀娜,令我忘餐。 +于是屏翳收风,川后静波。冯夷鸣鼓,女娲清歌。腾文鱼以警乘,鸣玉銮以偕逝。六龙俨其齐首,载云车之容裔。鲸鲵踊而夹毂,水禽翔而为卫。于是越北沚,过南冈,纡素领,回清扬。动朱唇以徐言,陈交接之大纲。恨人神之道殊兮,怨盛年之莫当。抗罗袂以掩涕兮,泪流襟之浪浪。悼良会之永绝兮,哀一逝而异乡。无微情以效爱兮,献江南之明珰。虽潜处于太阴,长寄心于君王。忽不悟其所舍,怅神宵而蔽光。 +于是背下陵高,足往神留。遗情想像,顾望怀愁。冀灵体之复形,御轻舟而上溯。浮长川而忘反,思绵绵而增慕。夜耿耿而不寐,沾繁霜而至曙。命仆夫而就驾,吾将归乎东路。揽騑辔以抗策,怅盘桓而不能去。
割韭菜
有两种选择,要么被忽悠成韭菜被别人割,要么割别热的韭菜。
朝三暮四
“狙公赋芧,曰:‘朝三而暮四。‘众狙皆怒。曰:‘然则朝四而暮三。‘众狙皆悦。名实未亏而喜怒为用,亦因是也。《庄子—齐物论》 有个人养猴子,每天早上喂给每个猴子三颗枣,下午每个猴子喂四颗枣。 有一天他突然想搞点事情,就对猴子说:从今以后,每天早上每人给你们四颗枣,下午每人给你们三颗枣,你们说好不好? 猴子们上蹿下跳,怒发冲冠,生气的说:不行!不行!那怎么行呢? @@ -18,33 +24,7 @@ 判断计划任务是否启动 SHOW VARIABLES LIKE 'event_scheduler' 开启计划任务 set global event_scheduler=on 创建计划任务 create test_e on scheduler every 1 day do sql 修改计划任务 # 临时关闭事件 ALTER EVENT e_test DISABLE; # 开启事件 ALTER EVENT e_test ENABLE; # 将每天清空test表改为5天清空一次 ALTER EVENT e_test ON SCHEDULE EVERY 5 DAY; 删除计划任务 drop event e_test
打印易于提取关键词的日志
下面的日志是打印出socket.io断开的信息 // bad logger.info(`socket.io ${socket.handshake.query.agentId} disconnect. reason: ${reason} ${socket.id}`) 但是这条日志不利于关键词搜索,如果搜disconnect,那么可能很多地方都有这个关键词。 // good logger.info(`socket.io disconnect ${socket.handshake.query.agentId} reason: ${reason} ${socket.id}`) // bad logger.info(`socket.io ${socket.handshake.query.agentId} disconnect. reason: ${reason} ${socket.id}`) 总结经验 -多个关键词位置要靠前 多个关键词要集中 日志日志要标记来自特殊的用于,比如说,来自
Linux私房菜
五大单元 输入单元 CPU:算术,逻辑,内存 输出单元 指令集 精简指令集 福仔指令集
带你领略镜花缘中的神奇国度
《镜花缘》是清代李汝珍写的一部长篇小说,小说前半部分是主角游历海外各国的清代经历,有点像日本动漫海贼王。后半部分比较无趣,略过不提。 -单讲小说的前半部分,小说发生在唐代,主角叫做唐敖,本来科举中了探花,但是因为他和讨伐武则天的徐敬业有结拜之交,被人告发,遂革去了探花,降为秀才。 -唐敖心灰意冷,煮熟的鸭子就这么飞了。于是决定舍弃功名,游历山水。正好他的妹夫,林之洋是个跑远洋贸易的。 -唐敖正好搭上了妹夫的顺风船,环游世界之旅就这么开始了!! -1. 君子国 君子国讲究好让不正,惟善为宝。说的是这个国家的人啊,素质非常高,高到什么地步呢?高到有点反人类。 -下面的一个场景,是我从小说中简化的一个场景: -买家说:老板,你的东西质量真好,价格却那么低,如果我买了去,我内心会不安的。跪求你抬高些价格,我才买,不然我就不买了。 -店铺老板说:我要的价格这么高,已经觉得过意不去了,如果你还让我涨价,还你还是去别的地方买东西吧。 -买家说:既然你不愿意涨价,那也行,我还按照这个价格买你的东西,但是我只拿一半东西走。 -是不是很反人类,从来只见过买家想要压低价格的,还未听说过买家想抬高价格的。 -2. 大人国 此处的大人国,并不是说他们的身材巨大,而是形容他们国人的品格高大。他们都是争相做善事,不作恶事。 -除此以外,在他们的国家,很容易区分好人和坏人。他们所有的人脚下都踩着云。光明正大的人,脚下是彩云;经常做坏事的人,脚下是黑云。 -云的色彩会随着人的品行而变化,坏人如果能够向善,足下也会产生彩云。 -有些大官人,不希望别人看到他们脚下云的颜色,所以会用布裹上,但是这样做岂不是掩耳盗铃吗? -3. 黑齿国 这个国家的人全身通黑,连牙齿都是黑的。我怀疑作者是不是去过非洲,但是非洲人的牙齿往往都是白色的。 -但是人不可貌相,黑齿国的人非常喜欢读书,个个都是满腹经纶。而且这个地方的小偷,只会偷书,却不偷金银宝物。 -4. 劳民国 该国的人也是面色墨黑,走路都是摇摇晃晃,终日忙忙碌碌。但是呢,这个国家的人每个都是长寿。 -5. 聂耳国 聂耳国的耳朵很长,长耳及腰,走路都需要用手去捧着耳朵。更有甚者,耳朵及地。 -除了耳朵长的这个特点之外,有的人耳朵也特别大。据说可以一个耳朵当床垫,一个耳朵当棉被,睡在自己的耳朵里。 -6. 无肠国 这个国家的人都没有肠子,无论吃喝什么东西,都会立即排出体外。所以他们在吃饭之前,都先找好厕所,不然就变成随地大小便了。 -更为恶心的是,因为他们吃的快也拉的快,很多食物都没有消化完全。所以有些人就把拉出来的便便收集起来,再给其他人吃。 -7. 鬼国 国人夜晚不睡觉,颠倒白天黑夜,行为似鬼。 -8. 毛民国 国人一身长毛,据说是上一世太为吝啬,一毛不拔。所以阎王让他下一世出生在毛民国,让他们满身长满毛。 -9. 无继国 国人从不生育,也没有孩子。而且他们也不区分男女。 -之所以他们国家的人口没有减少,是因为人死后120年之后还会再次复活。 -所以他们都是死了又活,活了有死。 -10. 深目国 他们脸上没有眼睛,他们的两个眼睛都长在自己的手掌里。是不是觉得似曾相识呢?火影里面的我爱罗。
Linux私房菜
五大单元 输入单元 CPU:算术,逻辑,内存 输出单元 指令集 精简指令集 福仔指令集
Posts
Windows更新之后 Linux报错 Error 0x80040154
最近我更新了Windows, 之后我的Windows Linux子系统Ubuntu打开就报错了 +
Posts
Wireshark 使用技巧
0. 前提条件 wireshark 4.0.2 1. 时间显示 wireshark的默认时间显示是抓包的相对时间, 如果我们时间按照年月日时分秒显示,就需要进行如下设置: +视图->时间显示格式->选择具体的时间格式 +2. UDP解码为RTP 方案1 在一个包UDP包上点击右键,出现如下弹框,选择Decode As +再当前值上选择RTP 方案2 方案1有一个缺点,只能过滤单一端口的UDP包,将其解码为RTP。 +假如有很多的UDP包,并且端口都不一样,如果想把这些包都解码为RTP, 则需要如下设置。 +选择分析->启用的协议 +在搜索框中输入RTP, 然后启用RTP的rtp_udp
Windows更新之后 Linux报错 Error 0x80040154
最近我更新了Windows, 之后我的Windows Linux子系统Ubuntu打开就报错了 报错截图如下: 在网上搜了一边之后,很多教程都是说要打开Windows的子系统的功能。 但是由于我已经使用Linux子系统已经很长时间了,我觉得应该和这个设置无关。 而且我检查了一下,我的这个设置本来就是打开的。 @@ -94,14 +100,7 @@ 按下箭头,选择NetWork Options,按回车确认 进入网络设置后,按下箭头,选择N2 Wi-fi 然后就很简单了,输入wifi名称和wifi密码,最好你的wifi名称是英文的,出现中文会很尴尬的。 6. 如何找到树莓派的IP地址 某些情况下,树莓派在断电重启之后会获得新的IP地址。在没有显示器的情况下,如果找到树莓派的IP呢? 树莓派的MAC地址是:b8:27:eb:6c 开头 所以你只需要输入: arp -a 就会打印网络中的主机以及MAC地址,找以b8:e7:eb:6c开头的,很可能就是树莓派。 -7. 设置清华镜像源 https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/
Hugo Timezone没有设置, 导致页面无法渲染
写好了博客,但是没有在网页上渲染出来,岂不是很气人! -我的archtypes/default.md配置如下 ---- title: "{{ replace .Name "-" " " | title }}" date: "{{ now.Format "2006-01-02 15:04:05" }}" draft: false --- 当使用 hugo new 创建一个文章的时候,有如下的头 ---- title: "01: 学习建议" date: "2022-09-03 10:23:10" draft: false --- Hugo 默认采用的是 格林尼治平时 (GMT),比北京时间 (UTC+8) 晚了 8 个小时,Hugo 在生成静态页面的时候,不会生成超过当前时间的文章。 -如果把北京时间当作格林尼治时间来计算,那么肯定还没有超过当前时间。 -所以我们要给站点设置时区。 -在config.yaml增加如下内容 -timeZone: "Asia/Shanghai"
Posts
接口压力测试
ab安装 apt-get install apache2-utils
vox语音转mp3
apt-get install sox libsox-fmt-mp3 -y sox input.vox output.mp3 sox支持命令 ➜ vox sox --help sox: SoX v14.4.1 Usage summary: [gopts] [[fopts] infile]... [fopts] outfile [effect [effopt]]... SPECIAL FILENAMES (infile, outfile): - Pipe/redirect input/output (stdin/stdout); may need -t -d, --default-device Use the default audio device (where available) -n, --null Use the `null' file handler; e.g. with synth effect -p, --sox-pipe Alias for `-t sox -' SPECIAL FILENAMES (infile only): "|program [options] ..." Pipe input from external program (where supported) http://server/file Use the given URL as input file (where supported) GLOBAL OPTIONS (gopts) (can be specified at any point before the first effect): --buffer BYTES Set the size of all processing buffers (default 8192) --clobber Don't prompt to overwrite output file (default) --combine concatenate Concatenate all input files (default for sox, rec) --combine sequence Sequence all input files (default for play) -D, --no-dither Don't dither automatically --effects-file FILENAME File containing effects and options -G, --guard Use temporary files to guard against clipping -h, --help Display version number and usage information --help-effect NAME Show usage of effect NAME, or NAME=all for all --help-format NAME Show info on format NAME, or NAME=all for all --i, --info Behave as soxi(1) --input-buffer BYTES Override the input buffer size (default: as --buffer) --no-clobber Prompt to overwrite output file -m, --combine mix Mix multiple input files (instead of concatenating) --combine mix-power Mix to equal power (instead of concatenating) -M, --combine merge Merge multiple input files (instead of concatenating) --magic Use `magic' file-type detection --multi-threaded Enable parallel effects channels processing --norm Guard (see --guard) & normalise --play-rate-arg ARG Default `rate' argument for auto-resample with `play' --plot gnuplot|octave Generate script to plot response of filter effect -q, --no-show-progress Run in quiet mode; opposite of -S --replay-gain track|album|off Default: off (sox, rec), track (play) -R Use default random numbers (same on each run of SoX) -S, --show-progress Display progress while processing audio data --single-threaded Disable parallel effects channels processing --temp DIRECTORY Specify the directory to use for temporary files -T, --combine multiply Multiply samples of corresponding channels from all input files (instead of concatenating) --version Display version number of SoX and exit -V[LEVEL] Increment or set verbosity level (default 2); levels: 1: failure messages 2: warnings 3: details of processing 4-6: increasing levels of debug messages FORMAT OPTIONS (fopts): Input file format options need only be supplied for files that are headerless....
MySql索引
prd是表名,agent是表中的一个字段,index_agent是索引名 +
Posts
带你领略镜花缘中的神奇国度
《镜花缘》是清代李汝珍写的一部长篇小说,小说前半部分是主角游历海外各国的清代经历,有点像日本动漫海贼王。后半部分比较无趣,略过不提。 +单讲小说的前半部分,小说发生在唐代,主角叫做唐敖,本来科举中了探花,但是因为他和讨伐武则天的徐敬业有结拜之交,被人告发,遂革去了探花,降为秀才。 +唐敖心灰意冷,煮熟的鸭子就这么飞了。于是决定舍弃功名,游历山水。正好他的妹夫,林之洋是个跑远洋贸易的。 +唐敖正好搭上了妹夫的顺风船,环游世界之旅就这么开始了!! +1. 君子国 君子国讲究好让不正,惟善为宝。说的是这个国家的人啊,素质非常高,高到什么地步呢?高到有点反人类。 +下面的一个场景,是我从小说中简化的一个场景: +买家说:老板,你的东西质量真好,价格却那么低,如果我买了去,我内心会不安的。跪求你抬高些价格,我才买,不然我就不买了。 +店铺老板说:我要的价格这么高,已经觉得过意不去了,如果你还让我涨价,还你还是去别的地方买东西吧。 +买家说:既然你不愿意涨价,那也行,我还按照这个价格买你的东西,但是我只拿一半东西走。 +是不是很反人类,从来只见过买家想要压低价格的,还未听说过买家想抬高价格的。 +2. 大人国 此处的大人国,并不是说他们的身材巨大,而是形容他们国人的品格高大。他们都是争相做善事,不作恶事。 +除此以外,在他们的国家,很容易区分好人和坏人。他们所有的人脚下都踩着云。光明正大的人,脚下是彩云;经常做坏事的人,脚下是黑云。 +云的色彩会随着人的品行而变化,坏人如果能够向善,足下也会产生彩云。 +有些大官人,不希望别人看到他们脚下云的颜色,所以会用布裹上,但是这样做岂不是掩耳盗铃吗? +3. 黑齿国 这个国家的人全身通黑,连牙齿都是黑的。我怀疑作者是不是去过非洲,但是非洲人的牙齿往往都是白色的。 +但是人不可貌相,黑齿国的人非常喜欢读书,个个都是满腹经纶。而且这个地方的小偷,只会偷书,却不偷金银宝物。 +4. 劳民国 该国的人也是面色墨黑,走路都是摇摇晃晃,终日忙忙碌碌。但是呢,这个国家的人每个都是长寿。 +5. 聂耳国 聂耳国的耳朵很长,长耳及腰,走路都需要用手去捧着耳朵。更有甚者,耳朵及地。 +除了耳朵长的这个特点之外,有的人耳朵也特别大。据说可以一个耳朵当床垫,一个耳朵当棉被,睡在自己的耳朵里。 +6. 无肠国 这个国家的人都没有肠子,无论吃喝什么东西,都会立即排出体外。所以他们在吃饭之前,都先找好厕所,不然就变成随地大小便了。 +更为恶心的是,因为他们吃的快也拉的快,很多食物都没有消化完全。所以有些人就把拉出来的便便收集起来,再给其他人吃。 +7. 鬼国 国人夜晚不睡觉,颠倒白天黑夜,行为似鬼。 +8. 毛民国 国人一身长毛,据说是上一世太为吝啬,一毛不拔。所以阎王让他下一世出生在毛民国,让他们满身长满毛。 +9. 无继国 国人从不生育,也没有孩子。而且他们也不区分男女。 +之所以他们国家的人口没有减少,是因为人死后120年之后还会再次复活。 +所以他们都是死了又活,活了有死。 +10. 深目国 他们脸上没有眼睛,他们的两个眼睛都长在自己的手掌里。是不是觉得似曾相识呢?火影里面的我爱罗。
接口压力测试
ab安装 apt-get install apache2-utils
vox语音转mp3
apt-get install sox libsox-fmt-mp3 -y sox input.vox output.mp3 sox支持命令 ➜ vox sox --help sox: SoX v14.4.1 Usage summary: [gopts] [[fopts] infile]... [fopts] outfile [effect [effopt]]... SPECIAL FILENAMES (infile, outfile): - Pipe/redirect input/output (stdin/stdout); may need -t -d, --default-device Use the default audio device (where available) -n, --null Use the `null' file handler; e.g. with synth effect -p, --sox-pipe Alias for `-t sox -' SPECIAL FILENAMES (infile only): "|program [options] ..." Pipe input from external program (where supported) http://server/file Use the given URL as input file (where supported) GLOBAL OPTIONS (gopts) (can be specified at any point before the first effect): --buffer BYTES Set the size of all processing buffers (default 8192) --clobber Don't prompt to overwrite output file (default) --combine concatenate Concatenate all input files (default for sox, rec) --combine sequence Sequence all input files (default for play) -D, --no-dither Don't dither automatically --effects-file FILENAME File containing effects and options -G, --guard Use temporary files to guard against clipping -h, --help Display version number and usage information --help-effect NAME Show usage of effect NAME, or NAME=all for all --help-format NAME Show info on format NAME, or NAME=all for all --i, --info Behave as soxi(1) --input-buffer BYTES Override the input buffer size (default: as --buffer) --no-clobber Prompt to overwrite output file -m, --combine mix Mix multiple input files (instead of concatenating) --combine mix-power Mix to equal power (instead of concatenating) -M, --combine merge Merge multiple input files (instead of concatenating) --magic Use `magic' file-type detection --multi-threaded Enable parallel effects channels processing --norm Guard (see --guard) & normalise --play-rate-arg ARG Default `rate' argument for auto-resample with `play' --plot gnuplot|octave Generate script to plot response of filter effect -q, --no-show-progress Run in quiet mode; opposite of -S --replay-gain track|album|off Default: off (sox, rec), track (play) -R Use default random numbers (same on each run of SoX) -S, --show-progress Display progress while processing audio data --single-threaded Disable parallel effects channels processing --temp DIRECTORY Specify the directory to use for temporary files -T, --combine multiply Multiply samples of corresponding channels from all input files (instead of concatenating) --version Display version number of SoX and exit -V[LEVEL] Increment or set verbosity level (default 2); levels: 1: failure messages 2: warnings 3: details of processing 4-6: increasing levels of debug messages FORMAT OPTIONS (fopts): Input file format options need only be supplied for files that are headerless....
MySql索引
prd是表名,agent是表中的一个字段,index_agent是索引名 create index index_agent on prd(agent) # 创建索引 show index from prd # 显示表上有哪些索引 drop index index_agent on prd # 删除索引 创建索引的好处是查询速度有极大的提成,坏处是更新记录时,有可能也会更新索引,从而降低性能。 所以索引比较适合那种只写入,或者查询,但是一般不会更新的数据。
关于v语言: 越是漂亮的语言,越会骗人
今天逛github trending, 发现榜首有个项目,叫做v语言。https://github.com/vlang/v 看了介绍,说这个语言非常牛X,几乎囊括了所有语言的长处。性能、编译耗时、内存使用都是碾压其他语言。 @@ -44,18 +70,7 @@ 除去环境造成的扰动,人的身体也会随着年龄会慢慢老化。 你可以想象一下,当你四十多岁时。那些新来的实习生,比你要的工资低,比你更容易接受这个行业的前沿知识,比你更加能加班,比你能力更强时,比你更听话时。你的优势在哪里?我相信到那时候,你的领导会毫不犹豫开了你。 在此,你要改变。我给出以下几个角度,你可以自行延伸。 -开始锻炼身体 这是一切的基石 搞一搞副业,学习一下你喜欢的东西,你可以去深入学学如何做菜,如何摄影等等 学习理财知识,这是学校从没教你的,但是却是非常重要的东西 读书,越多越好 参考文献 专业主义 日 大前研一 富爸爸穷爸爸 罗伯特·清崎 / 莎伦·莱希特 国富论 英 亚当·斯密 失控 乌合之众 法 古斯塔夫·勒庞 未来世界的幸存者 阮一峰 新生 七年就是一辈子 李笑来
我苦苦寻找诡异的bug原因,其实是我的无知
1. 问题1:chosen插件无法显示图标 问题现象在我本地调试的时候,我使用了一个多选下拉框的插件,就是chosen, 不知道为什么,这个多选框上面的图标不见了。我找了半天没有找到原因,然后我把我的机器的内网地址给我同事,让他访问我机器,当它访问到这个页面时。他的电脑上居然显示出了这个下拉框的图标。 -这是什么鬼?, 为什么同样的代码,在我的电脑上显示不出图标,但是在他的电脑上可以显示。有句名言说的好:没有什么bug是一遍调试解决不了的,如果有,就再仔细调试一遍。于是我就再次调试一遍。 -我发现了一些第一遍没有注意到的东西媒体查询,就是在css里有这样的语句: -@media 从这里作为切入口,我发现:媒体查询的类会覆盖它原生的类的属性 -由于我的电脑视网膜屏幕,分辨率比较高,触发了媒体查询,这就导致了媒体查询的类覆盖了原生的类。而覆盖后的类,使用了chosen-sprite@2x.png作为图标的背景图片。但是这个图片并没有被放在这个插件的目录下,有的只有chosen-sprite.png这个图片。在一般情况下,都是用chosen-sprite.png作为背景图片的。这就解释了:为什么同事的电脑上出现了图标,但是我的电脑上没有出现这个图标。 -总结: 如果你要使用一个插件,你最好把这个插件的所有文件都放在同一个目录下。而不要只放一些你认为有用的文件。最后:媒体查询的相关知识也是必要的。 -2. 问题2:jQuery 与 Vue之间的暧昧 jQuery流派代表着直接操纵DOM的流派,Vue流派代表着操纵数据的流派。 -如果在项目里,你使用了一些jQuery插件,也使用了Vue,这就可能导致一些问题。 -举个例子: -<!DOCTYPE html> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.4.4/vue.js"></script> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> </head> <body> <div id="app"> 姓名 <input type="text" v-model="userName"> <br/> 年龄 <input type="text" id="userAge" v-model="userAge"> <br/> </div> <script type="text/javascript"> new Vue({ el: '#app', data: { userName: '', userAge: 12 } }); $('#userAge').val(14); </script> </body> </html> 在页面刚打开时:姓名输入框是空的,年龄输入框是14。但是一旦你在姓名输入框输入任何字符时,年龄输入框的值就会变成12。 -如果你仔细看过Vue官方文档,你会很容易定位问题所在。 -v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值。因为它会选择 Vue 实例数据来作为具体的值。你应该通过 JavaScript 在组件的 data 选项中声明初始值。---Vue官方文档 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并特别处理一些极端的例子。...
Posts
一行命令搭建简易静态文件http服务器
简易服务器:在命令执行的所在路径启动一个http服务器,然后你可以通过浏览器访问该路径下的所有文件。 +
Posts
我苦苦寻找诡异的bug原因,其实是我的无知
1. 问题1:chosen插件无法显示图标 问题现象在我本地调试的时候,我使用了一个多选下拉框的插件,就是chosen, 不知道为什么,这个多选框上面的图标不见了。我找了半天没有找到原因,然后我把我的机器的内网地址给我同事,让他访问我机器,当它访问到这个页面时。他的电脑上居然显示出了这个下拉框的图标。 +这是什么鬼?, 为什么同样的代码,在我的电脑上显示不出图标,但是在他的电脑上可以显示。有句名言说的好:没有什么bug是一遍调试解决不了的,如果有,就再仔细调试一遍。于是我就再次调试一遍。 +我发现了一些第一遍没有注意到的东西媒体查询,就是在css里有这样的语句: +@media 从这里作为切入口,我发现:媒体查询的类会覆盖它原生的类的属性 +由于我的电脑视网膜屏幕,分辨率比较高,触发了媒体查询,这就导致了媒体查询的类覆盖了原生的类。而覆盖后的类,使用了chosen-sprite@2x.png作为图标的背景图片。但是这个图片并没有被放在这个插件的目录下,有的只有chosen-sprite.png这个图片。在一般情况下,都是用chosen-sprite.png作为背景图片的。这就解释了:为什么同事的电脑上出现了图标,但是我的电脑上没有出现这个图标。 +总结: 如果你要使用一个插件,你最好把这个插件的所有文件都放在同一个目录下。而不要只放一些你认为有用的文件。最后:媒体查询的相关知识也是必要的。 +2. 问题2:jQuery 与 Vue之间的暧昧 jQuery流派代表着直接操纵DOM的流派,Vue流派代表着操纵数据的流派。 +如果在项目里,你使用了一些jQuery插件,也使用了Vue,这就可能导致一些问题。 +举个例子: +<!DOCTYPE html> <html> <head> <title></title> <script src="https://cdn.bootcss.com/vue/2.4.4/vue.js"></script> <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> </head> <body> <div id="app"> 姓名 <input type="text" v-model="userName"> <br/> 年龄 <input type="text" id="userAge" v-model="userAge"> <br/> </div> <script type="text/javascript"> new Vue({ el: '#app', data: { userName: '', userAge: 12 } }); $('#userAge').val(14); </script> </body> </html> 在页面刚打开时:姓名输入框是空的,年龄输入框是14。但是一旦你在姓名输入框输入任何字符时,年龄输入框的值就会变成12。 +如果你仔细看过Vue官方文档,你会很容易定位问题所在。 +v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值。因为它会选择 Vue 实例数据来作为具体的值。你应该通过 JavaScript 在组件的 data 选项中声明初始值。---Vue官方文档 你可以用 v-model 指令在表单控件元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。尽管有些神奇,但 v-model 本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并特别处理一些极端的例子。...
一行命令搭建简易静态文件http服务器
简易服务器:在命令执行的所在路径启动一个http服务器,然后你可以通过浏览器访问该路径下的所有文件。 在局域网内传文件,或者自己测试使用都是非常方便的。 1. 基于python 1.1. 基于Python2 python -m SimpleHTTPServer port > python -m SimpleHTTPServer 8099 Serving HTTP on 0.0.0.0 port 8099 ... 127.0.0.1 - - [24/Oct/2017 11:07:56] "GET / HTTP/1.1" 200 - 1.2. 基于python3 python3 -m http.server port @@ -40,11 +51,7 @@ 4. 切换ctrl和ctrl的位置: F1-F12 as primary function [enabled] 5. 保存,退出
windows上免费的文本对比工具
https://winmerge.org/?lang=en WinMerge-2.16.4-Setup.exe.zip
手工安装git最新版
Step 1: Install Required PackagesFirstly we need to make sure that we have installed required packages on your system. Use following command to install required packages before compiling Git source. -# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel # yum install gcc perl-ExtUtils-MakeMaker Step 2: Uninstall old Git RPMNow remove any prior installation of Git through RPM file or Yum package manager. If your older version is also compiled through source, then skip this step....
如何面对未知的项目
有些项目,文档写的不是很清楚,很多地方都需要摸着石头过河,在此写下自己的一点心得体会。 -后悔药 哪怕是改动一行代码,也要创建一个新的分支。如果发现前方有无法绕行的故障,你将会庆幸自己给自己留下退路。 -不要把自己逼到死角,永远给自己留下一个B计划。 -小碎步 不要大段重构,要小步慢走。尽量减少发生问题的点。在一本书中找错别字很难,但是在一行文字中找错别字就非常容易了。 -勿猜测 当你不知道某个函数如何使用时,不要去猜测,而应该去看官方文档是如何讲解这个函数的。
Posts
一个人喝粥太淡
一个人喝粥太淡,两个人电话粥太甜。回忆似水流年,翘首如花美眷。对着微信聊天,凌晨了也没有觉得晚。窗外的月亮很圆,就像你那双明亮的眼。说一声晚安,道一声再见,我的梦中是有你的春天。
你有邮箱吗?
你有邮箱吗?如果你有的话,那么当我不在你身边的时候,我会每天给你写一封信,告诉你,我今天遇见的的人,告诉你,我身边发生的事,告诉你,当你不在我身边时,我有多想你
MySql表复制 与 调整字段
表复制 # 不跨数据库 insert into subscriber_copy(id, username) select id, username from subscriber # 跨数据库 需要在表名前加上数据库名 insert into wdd.test(id, username) select id, username from opensips.subscriber 调整表结构 增加字段 ALTER TABLE test ADD `username` char(64) not null default ''
理解mysql 表连接
表wdd_a 表wdd_b +
Posts
如何面对未知的项目
有些项目,文档写的不是很清楚,很多地方都需要摸着石头过河,在此写下自己的一点心得体会。 +后悔药 哪怕是改动一行代码,也要创建一个新的分支。如果发现前方有无法绕行的故障,你将会庆幸自己给自己留下退路。 +不要把自己逼到死角,永远给自己留下一个B计划。 +小碎步 不要大段重构,要小步慢走。尽量减少发生问题的点。在一本书中找错别字很难,但是在一行文字中找错别字就非常容易了。 +勿猜测 当你不知道某个函数如何使用时,不要去猜测,而应该去看官方文档是如何讲解这个函数的。
一个人喝粥太淡
一个人喝粥太淡,两个人电话粥太甜。回忆似水流年,翘首如花美眷。对着微信聊天,凌晨了也没有觉得晚。窗外的月亮很圆,就像你那双明亮的眼。说一声晚安,道一声再见,我的梦中是有你的春天。
你有邮箱吗?
你有邮箱吗?如果你有的话,那么当我不在你身边的时候,我会每天给你写一封信,告诉你,我今天遇见的的人,告诉你,我身边发生的事,告诉你,当你不在我身边时,我有多想你
MySql表复制 与 调整字段
表复制 # 不跨数据库 insert into subscriber_copy(id, username) select id, username from subscriber # 跨数据库 需要在表名前加上数据库名 insert into wdd.test(id, username) select id, username from opensips.subscriber 调整表结构 增加字段 ALTER TABLE test ADD `username` char(64) not null default ''
理解mysql 表连接
表wdd_a 表wdd_b 不使用where子句生成的表的数是两个表行数的积,其字段的字段两个表的拼接 查询的行数 = 表a的行数 x 表b的行数 SELECT * FROM `wdd_a` join `wdd_b` order by wdd_a.id 表联合不使用where子句,会存在两个问题 @@ -22,7 +26,7 @@ 帝国烽烟:云原生时代 微服务 应用编排调度 容器化 面向API 参考 https://en.wikipedia.org/wiki/Docker,_Inc. https://thenewstack.io/10-key-attributes-of-cloud-native-applications/ https://jimmysong.io/kubernetes-handbook/cloud-native/cloud-native-definition.html https://www.redhat.com/en/topics/cloud-native-apps
influxdb http操作
创建数据库 curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE testdb" 写数据到数据库 curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000' 批量写入 output.txt nginx_second,tag=ip169 value=21 1592638800000000000 nginx_second,tag=ip169 value=32 1592638801000000000 nginx_second,tag=ip169 value=20 1592638802000000000 nginx_second,tag=ip169 value=11 1592638803000000000 curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary @output.txt 参考 https://docs.influxdata.com/influxdb/v1.7/guides/writing_data/
ssh保持连接状态不断开
编辑这个文件 ~/.ssh/config 在顶部添加下边两行 Host * ServerAliveInterval=30 每隔30秒向服务端发送 no-op包
致命女人 Why Women Kill
前些天,有朋友推荐一部美剧《致命女人》,听着名字,觉得有点像特工或者犯罪系列的电视剧。 看了前第一集之后,才发现这个剧是讲述关于婚姻方面问题美剧。 -一般情况下,我不喜欢看婚姻题材的影视。但是,任何事情都逃不过真相定律。
git 删除未跟踪的文件
git clean -n # 打印哪些文件将会被删除 git clean -f # 删除文件 git clean -fd # 删除文件个目录 参考 https://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the-current-git-working-tree
Posts
pdf转ppt工具收集
https://smallpdf.com https://www.pdfpai.com/pdf-to-powerpoint
Royal TSX git status 输出乱码
问题描述 连接服务器时的报警 +
Posts
git 删除未跟踪的文件
git clean -n # 打印哪些文件将会被删除 git clean -f # 删除文件 git clean -fd # 删除文件个目录 参考 https://stackoverflow.com/questions/61212/how-to-remove-local-untracked-files-from-the-current-git-working-tree
pdf转ppt工具收集
https://smallpdf.com https://www.pdfpai.com/pdf-to-powerpoint
Royal TSX git status 输出乱码
问题描述 连接服务器时的报警 -bash: 警告:setlocale: LC_CTYPE: 无法改变区域选项 (UTF-8): 没有那个文件或目录 git status 发现本来应该显示 ‘on brance master’ 之类的地方,居然英文也乱码了,都是问号。 解决方案 vim /etc/environment , 然后加入如下代码,然后重新打开ssh窗口 LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
git取消设置http代理
git config --global --unset http.proxy
关注点分离的问题
前端组件化时,有个很时髦的词语叫做关注点分离,这个用在组件上比较好,我们可以把大的模块分割成小的模块,降低了整个模块的复杂度。 @@ -17,8 +17,7 @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: UNPROTECTED PRIVATE KEY FILE! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Permissions 0644 for 'mmmmm' are too open. It is required that your private key files are NOT accessible by others. This private key will be ignored. 解决方案:将你的私钥的权限改为600, 也就是说只有你自己可读可写,其他人都不能用 chmod 600 你的私钥
在不打开文件,将全文复制到剪贴板
一般拷贝全文分为以下几步 使用编辑器打开文件 全文选择文件 执行拷贝命令 实际上操作系统提供了一些命令,可以在不打开文件的情况下,将文件内容复制到剪贴板。 -mac pbcopy cat aaa.txt | pbcopy linux xsel cat aaa.txt | xsel windows clip cat aaa.txt | clip
macbook pro 开机后wifi无响应问题调研
解决方案 方案1: sudo kill -9 `ps aux | grep -v grep | grep /usr/libexec/airportd | awk '{print $2}'` 或者任务管理器搜索并且杀掉airportd这个进程 -参考 https://discussionschinese.apple.com/thread/140138832?answerId=140339277322#140339277322 https://www.v2ex.com/t/505737 https://blog.csdn.net/Goals1989/article/details/88578012
Posts
mysql远程连接速度太慢
编辑/etc/my.cnf,增加skip-name-resolve +
Posts
macbook pro 开机后wifi无响应问题调研
解决方案 方案1: sudo kill -9 `ps aux | grep -v grep | grep /usr/libexec/airportd | awk '{print $2}'` 或者任务管理器搜索并且杀掉airportd这个进程 +参考 https://discussionschinese.apple.com/thread/140138832?answerId=140339277322#140339277322 https://www.v2ex.com/t/505737 https://blog.csdn.net/Goals1989/article/details/88578012
mysql远程连接速度太慢
编辑/etc/my.cnf,增加skip-name-resolve skip-name-resolve 然后重启mysql
xmysql 一行命令从任何mysql数据库生成REST API
github向我推荐这个xmysql时候,我瞟了一眼它的简介One command to generate REST APIs for any MySql Database, 说实话这个介绍让我眼前一亮,想想每次向后端的同学要个接口的时候,他们总是要哼哧哼哧搞个半天给才能我。抱着试试看的心态,我试用了一个疗程,oh不是, 是安装并使用了一下。 说实话,体验是蛮不错的,但是体验一把过后,我想不到这个工具的使用场景,因为你不可能把数据库的所有表都公开出来,让前端随意读写, 但是试试看总是不错的. 1 来吧,冒险一次! 安装与使用 npm install -g xmysqlxmysql -h localhost -u mysqlUsername -p mysqlPassword -d databaseName浏览器打开:http://localhost:3000, 应该可以看到一堆json 2 特点 产生REST Api从任何mysql 数据库 🔥🔥 无论主键,外键,表等的命名规则如何,都提供API 🔥🔥 支持复合主键 🔥🔥 REST API通常使用:CRUD,List,FindOne,Count,Exists,Distinct批量插入,批量删除,批量读取 🔥 关联表 翻页 排序 按字段过滤 🔥 行过滤 🔥 综合功能 Group By, Having (as query params) 🔥🔥 Group By, Having (as a separate API) 🔥🔥 Multiple group by in one API 🔥🔥🔥🔥 Chart API for numeric column 🔥🔥🔥🔥🔥🔥 Auto Chart API - (a gift for lazy while prototyping) 🔥🔥🔥🔥🔥🔥 XJOIN - (Supports any number of JOINS) 🔥🔥🔥🔥🔥🔥🔥🔥🔥 Supports views Prototyping (features available when using local MySql server only) Run dynamic queries 🔥🔥🔥 Upload single file Upload multiple files Download file 3 API 概览 HTTP Type API URL Comments GET / Gets all REST APIs GET /api/tableName Lists rows of table POST /api/tableName Create a new row PUT /api/tableName Replaces existing row with new row POST :fire: /api/tableName/bulk Create multiple rows - send object array in request body GET :fire: /api/tableName/bulk Lists multiple rows - /api/tableName/bulk?...
Jenkins 全局变量参考
docker The docker variable offers convenient access to Docker-related functions from a Pipeline script.Methods needing a slave will implicitly run a node {…} block if you have not wrapped them in one. It is a good idea to enclose a block of steps which should all run on the same node in such a block yourself. (If using a Swarm server, or any other specific Docker server, this probably does not matter, but if you are using the default server on localhost it likely will....
【笔记】操作系统:虚拟化 并发 持久化
虚拟化 问题: @@ -15,7 +16,7 @@ 情歌 刘半农天上飘着些微云地上吹着些微风啊!微风吹动了我的头发教我如何不想她? 沙扬娜拉 赠日本女郎 徐志摩最是那一低头的温柔像一朵水莲花不胜凉风的娇羞道一声珍重道一声珍重那一声珍重里有蜜甜的忧愁沙扬娜拉! 再别康桥 徐志摩轻轻地我走了正如我轻轻地来我轻轻地招手作别西天的云彩 -伊眼底 汪静之伊眼底是温暖的太阳不然,何以伊一望着我我受了冻的心就热了呢
ghost博客 固定feature博客
Docker ghost 安装 docker run -d --name myghost -p 8090:2368 -e url=http://172.16.200.228:8090/ \ -v /root/volumes/ghost:/var/lib/ghost/content ghost 模板修改 参考 https://www.ghostforbeginners.com/move-featured-posts-to-the-top-of-your-blog/
MySql学习
表复制 # 不跨数据库 insert into subscriber_copy(id, username) select id, username from subscriber # 跨数据库 需要在表名前加上数据库名 insert into wdd.test(id, username) select id, username from opensips.subscriber 调整表结构 增加字段 ALTER TABLE test ADD `username` char(64) not null default '' 随机选择一个数据 SELECT name FROM table_name order by rand() limit 1
无题 再读唐诗宋词
【少年】慈母手中线,游子身上衣【毕业】浔阳江头夜送客,枫叶荻花秋瑟瑟【实习】千呼万唤始出来,犹抱琵琶半遮面【工作加班】衣带渐宽终不悔,为伊消得人憔悴【同学结婚】昔别君未婚,儿女忽成行【表白】欲得周郎顾,时时误拂弦【恋爱】在天愿作比翼鸟,在地愿为连理枝【分手】别有幽愁暗恨生,此时无声胜有声【春节回家】近乡情更怯,不敢问来人【车站遇友】马上相逢无纸笔,凭君传语报平安【外婆去世】洛阳亲友如相问,一片冰心在玉壶【节后会沪】两岸猿声啼不住,动车已过万重山【情人节】天阶夜色凉如水,坐看牵牛织女星【重游南京】浮云一别后,流水十年间【秦淮灯会】云想衣裳花想容,春风拂槛露华浓
ghost博客 固定feature博客
Docker ghost 安装 docker run -d --name myghost -p 8090:2368 -e url=http://172.16.200.228:8090/ \ -v /root/volumes/ghost:/var/lib/ghost/content ghost 模板修改 参考 https://www.ghostforbeginners.com/move-featured-posts-to-the-top-of-your-blog/
MySql学习
表复制 # 不跨数据库 insert into subscriber_copy(id, username) select id, username from subscriber # 跨数据库 需要在表名前加上数据库名 insert into wdd.test(id, username) select id, username from opensips.subscriber 调整表结构 增加字段 ALTER TABLE test ADD `username` char(64) not null default '' 随机选择一个数据 SELECT name FROM table_name order by rand() limit 1
Posts
从千与千寻谈编程风格
汤婆婆给千寻签订了契约,之后千寻的名字被抹去了,每个人都叫千寻小千,甚至千寻自己,也忘记了自己原来的名字。 +
Posts
无题 再读唐诗宋词
【少年】慈母手中线,游子身上衣【毕业】浔阳江头夜送客,枫叶荻花秋瑟瑟【实习】千呼万唤始出来,犹抱琵琶半遮面【工作加班】衣带渐宽终不悔,为伊消得人憔悴【同学结婚】昔别君未婚,儿女忽成行【表白】欲得周郎顾,时时误拂弦【恋爱】在天愿作比翼鸟,在地愿为连理枝【分手】别有幽愁暗恨生,此时无声胜有声【春节回家】近乡情更怯,不敢问来人【车站遇友】马上相逢无纸笔,凭君传语报平安【外婆去世】洛阳亲友如相问,一片冰心在玉壶【节后会沪】两岸猿声啼不住,动车已过万重山【情人节】天阶夜色凉如水,坐看牵牛织女星【重游南京】浮云一别后,流水十年间【秦淮灯会】云想衣裳花想容,春风拂槛露华浓
从千与千寻谈编程风格
汤婆婆给千寻签订了契约,之后千寻的名字被抹去了,每个人都叫千寻小千,甚至千寻自己,也忘记了自己原来的名字。 但是只有白先生告诫千寻,一定要记住自己的名字,否则再也无法回到原来的世界。而白先生自己,就是那个已经无法回到原来世界的人。 最重要的是记住自己的名字 名字要有意义 不要使用缩写,缩写会让你忘记自己的原来的名字 没有工作的人,会变成妖怪的 没有用的变量,会变成垃圾 别吃得太胖,会被杀掉的 别占用太多内存,会被操作系统给杀掉的
如何维护老代码?
Photo by Blair Fraser on Unsplash 从头开发一个软件只是小儿科,改进一个程序才显真本事。《若为自由故 自由软件之父理查德·斯托曼传》 @@ -39,21 +39,7 @@ 那么端口号和ip地址到底有什么区别呢? ip用来用来标记主机的位置 端口号用来标记该数据应该被目标主机上的哪个应用程序去处理 1.4. 数据在协议栈的流动 封装与分用 当发送消息时,数据在向下传递时,经过不同层次的协议处理,打上各种头部信息 当接受消息时,数据在向上传递,通过不同的头部信息字段,才知道要交给上层的那个模块来处理。比如一个ip包,如果没有头部信息,那么这个消息究竟是交给tcp协议来处理,还是udp来处理,就不得而知了 2. 深入阅读,好书推荐 《http权威指南》 有人说这本书太厚,偷偷告诉你,其实这本书并厚,因为这本书的后面的30%部分都是附录,这本书的精华是前50%的部分 《图解http》、《图解tcp/ip》这两本图解的书,知识点讲的都是比较通俗易懂的,适合入门 《tcp/ip 详解 卷1》这本书,让你知其然,更知其所以然 《tcp/ip 基础》、《tcp/ip 路由技术》这两本书,会让你从不同角度思考协议 《精通wireshark》、《wireshark网络分析实战》如果你看了很多书,却从来没有试过网络抓包,那你只是懂纸上谈兵罢了。你永远无法理解tcp三次握手的怦然心动,与四次分手的刻骨铭心。
呼叫中心简史
什么是呼叫中心? 呼叫中心又称为客户服务中心。有以下关键词 CTI 通信网络 计算机 企业级 高质量、高效率、全方位、综合信息服务 呼叫中心历史 1956年美国泛美航空公司建成世界第一家呼叫中心。 -阶段 行业范围 技术 功能与意义 第一代呼叫中心 民航 PBX、电话排队 主要服务由人工完成 第二代呼叫中心 银行、生活 IVR(交互式语音应答)、DTMF 显著提高工作效率,提供全天候服务 第三代呼叫中心 CTI(电脑计算机集成) 语音数据同步,客户信息存储与查阅,个性化服务,自动化 第四代呼叫中心 接入电子邮件、互联网、手机短信等 多渠道接入、多渠道统一排队 第五代呼叫中心 接入社交网络、社交媒体(微博、微信等) 文本交谈,音频视频沟通 呼叫中心分类 按呼叫方式分类 外呼型呼叫中心(如电话营销) 客服型呼叫中心(如客户服务) 混合型呼叫中心 (如营销和客服) 按技术架构分类 交换机 板卡 软交换(IPCC) 【交换机类型呼叫中心】
时间花在哪里,你就会成为什么样的人
2008-2018 十年,往事如昨 2018年已经是昨天,今天是2019的第一天。 -2008年已经是10年前,10年前的傍晚,我走在南京仙林的一个大街上,提着一瓶矿泉水,擦着额头的汗水,仰头看着大屏幕上播放着北京奥运会的开幕式。 -10年前的夏天,我带着一步诺基亚手机功能机,独自一人去了南京。 -坐过绣球公园的石凳,穿过天妃宫的回廊,吹过阅江楼的凉爽的江风,踏着古老斑驳的城墙,在林荫小路的长椅上,我想着10年后我会在哪里?做着什么事情? -往事如昨,而今将近而立,但是依然觉得自己还是10年的那个独自出去玩的小男孩。 -2018 读了10年都没有读完的书,五味杂陈 2018年,在我做手术前,我觉得自己出了工作的时间外,大多数时间都在看书。2018年这一年看的书,要比2008到2018年这十年间的看的书都要多。这都归功于我对每天的看书都有定量的计划,一旦按照这个计划实行几个月,积累的效果还是非常明显的。 -2018年,手机几乎成为人的四肢之外的第五肢。对大多人来说,上厕所可以不带纸,但是不能不带手机。 -各种APP, 都在极力的吸引用户多花点时间在自己身上 信息流充斥着各种毫无营养,专门吸人眼球的垃圾新闻,但是这种新闻的阅读量还是蛮大的 各种借钱,信用卡,花呗等都像青楼的小姐,妩媚的笑容,说道:官人,进来做一做 共享单车,在今年退潮之后,才发现自己都在裸泳 比特币,挖矿机。不知道谁割了谁的韭菜,总希望有下一个傻子来接盘,最后发现自己可能就是最后一个傻子 AI,人工智能很火,放佛就快要进入终结者那样的世界 锤子垮了,曾经吹过的牛逼,曾经理想主义终于脱去那又黑又亮的面具 图灵测试(The Turing test)由艾伦·麦席森·图灵发明,指测试者与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。 进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人类智能。图灵测试一词来源于计算机科学和密码学的先驱阿兰·麦席森·图灵写于1950年的一篇论文《计算机器与智能》,其中30%是图灵对2000年时的机器思考能力的一个预测,目前我们已远远落后于这个预测。 -最后说一下图灵测试,在AI方面,这个测试无人不知。一个机器如果通过了图灵测试,则说明该机器具有了只能。但是三体的作者大刘曾经说过一句话,给我一种醍醐灌顶的感觉,假如一个机器人有能力通过图灵测试,却假装无法通过,你说这个机器是否具有人工智能。所以大刘的这种说法才更加让人恐惧。机器人能通过图灵测试,只说明这个机器人具有了智能。但是现阶段的智能只不过是条件反射,或者是基于概率计算的结果。后者这种能通话测试,却假装无法通过的智能。这不仅仅是智能,而是机器的城府。 -有智能的机器并不可怕,有城府的机器人才是真正的可怕。 -如果梦中更加幸福快乐,为什么要回到现实 火影的最后,大筒木辉夜使用无限月读将世界上的所有人都带入梦境,每个人的查克拉都被吸取,并作为神树的养料。 -如果真的存在大筒木这样的上帝,那么时间就是查克拉。人类唯一真正拥有过的东西,时间,将作为神树的养料,从每个人身上提取。 -各种具有吸引力的术,其实可以理解为无限月读,让人沉醉于梦幻中。 -如果梦中更加幸福快乐,为什么要回到现实中承受压力与悲哀呢? 目前我无法回复自己的这个问题,期待2019年我可以得到这个答案。 -工作方面 2019年,我会在做一些后端方面的工作,努力加油吧。
Posts
深入理解 JavaScript中的变量、值、函数传参
1. demo 如果你对下面的代码没有任何疑问就能自信的回答出输出的内容,那么本篇文章就不值得你浪费时间了。 +
Posts
时间花在哪里,你就会成为什么样的人
2008-2018 十年,往事如昨 2018年已经是昨天,今天是2019的第一天。 +2008年已经是10年前,10年前的傍晚,我走在南京仙林的一个大街上,提着一瓶矿泉水,擦着额头的汗水,仰头看着大屏幕上播放着北京奥运会的开幕式。 +10年前的夏天,我带着一步诺基亚手机功能机,独自一人去了南京。 +坐过绣球公园的石凳,穿过天妃宫的回廊,吹过阅江楼的凉爽的江风,踏着古老斑驳的城墙,在林荫小路的长椅上,我想着10年后我会在哪里?做着什么事情? +往事如昨,而今将近而立,但是依然觉得自己还是10年的那个独自出去玩的小男孩。 +2018 读了10年都没有读完的书,五味杂陈 2018年,在我做手术前,我觉得自己出了工作的时间外,大多数时间都在看书。2018年这一年看的书,要比2008到2018年这十年间的看的书都要多。这都归功于我对每天的看书都有定量的计划,一旦按照这个计划实行几个月,积累的效果还是非常明显的。 +2018年,手机几乎成为人的四肢之外的第五肢。对大多人来说,上厕所可以不带纸,但是不能不带手机。 +各种APP, 都在极力的吸引用户多花点时间在自己身上 信息流充斥着各种毫无营养,专门吸人眼球的垃圾新闻,但是这种新闻的阅读量还是蛮大的 各种借钱,信用卡,花呗等都像青楼的小姐,妩媚的笑容,说道:官人,进来做一做 共享单车,在今年退潮之后,才发现自己都在裸泳 比特币,挖矿机。不知道谁割了谁的韭菜,总希望有下一个傻子来接盘,最后发现自己可能就是最后一个傻子 AI,人工智能很火,放佛就快要进入终结者那样的世界 锤子垮了,曾经吹过的牛逼,曾经理想主义终于脱去那又黑又亮的面具 图灵测试(The Turing test)由艾伦·麦席森·图灵发明,指测试者与被测试者(一个人和一台机器)隔开的情况下,通过一些装置(如键盘)向被测试者随意提问。 进行多次测试后,如果有超过30%的测试者不能确定出被测试者是人还是机器,那么这台机器就通过了测试,并被认为具有人类智能。图灵测试一词来源于计算机科学和密码学的先驱阿兰·麦席森·图灵写于1950年的一篇论文《计算机器与智能》,其中30%是图灵对2000年时的机器思考能力的一个预测,目前我们已远远落后于这个预测。 +最后说一下图灵测试,在AI方面,这个测试无人不知。一个机器如果通过了图灵测试,则说明该机器具有了只能。但是三体的作者大刘曾经说过一句话,给我一种醍醐灌顶的感觉,假如一个机器人有能力通过图灵测试,却假装无法通过,你说这个机器是否具有人工智能。所以大刘的这种说法才更加让人恐惧。机器人能通过图灵测试,只说明这个机器人具有了智能。但是现阶段的智能只不过是条件反射,或者是基于概率计算的结果。后者这种能通话测试,却假装无法通过的智能。这不仅仅是智能,而是机器的城府。 +有智能的机器并不可怕,有城府的机器人才是真正的可怕。 +如果梦中更加幸福快乐,为什么要回到现实 火影的最后,大筒木辉夜使用无限月读将世界上的所有人都带入梦境,每个人的查克拉都被吸取,并作为神树的养料。 +如果真的存在大筒木这样的上帝,那么时间就是查克拉。人类唯一真正拥有过的东西,时间,将作为神树的养料,从每个人身上提取。 +各种具有吸引力的术,其实可以理解为无限月读,让人沉醉于梦幻中。 +如果梦中更加幸福快乐,为什么要回到现实中承受压力与悲哀呢? 目前我无法回复自己的这个问题,期待2019年我可以得到这个答案。 +工作方面 2019年,我会在做一些后端方面的工作,努力加油吧。
深入理解 JavaScript中的变量、值、函数传参
1. demo 如果你对下面的代码没有任何疑问就能自信的回答出输出的内容,那么本篇文章就不值得你浪费时间了。 var var1 = 1 var var2 = true var var3 = [1,2,3] var var4 = var3 function test (var1, var3) { var1 = 'changed' var3[0] = 'changed' var3 = 'changed' } test(var1, var3) console.log(var1, var2, var3, var4) 2. 深入理解原始类型 原始类型有5个 Undefinded, Null, Boolean, Number, String 2.1. 原始类型变量没有属性和方法 // 抬杠, 下面的length属性,toString方法怎么有属性和方法呢? var a = 'oooo' a.length a.toString 原始类型中,有三个特殊的引用类型Boolean, Number, String,在操作原始类型时,原始类型变量会转换成对应的基本包装类型变量去操作。参考JavaScript高级程序设计 5.6 基本包装类型。 2.2. 原始类型值不可变 原始类型的变量的值是不可变的,只能给变量赋予新的值。 @@ -72,10 +86,7 @@ 【毕业了,老校区下了一场雨】 【毕业了,青春像一艘船,沉入海底】 【毕业了,我等的人,你在哪里?】
NodeJS Events 模块笔记
1. 环境 node 8.11.3 2. 基本使用 // 01.js const EventEmitter = require('events'); class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter(); myEmitter.on('event', () => { console.log('an event occurred!'); }); myEmitter.emit('event'); 输出: -an event occurred! 3. 传参与this指向 emit()方法可以传不限制数量的参数。 除了箭头函数外,在回调函数内部,this会被绑定到EventEmitter类的实例上 // 02.js const EventEmitter = require('events') class MyEmitter extends EventEmitter {} const myEmitter = new MyEmitter() myEmitter.on('event', function (a, b){ console.log(a, b, this, this === myEmitter) }) myEmitter.on('event', (a, b) => { console....
JavaScript动态下载文件
需求描述 可以把字符串下载成txt文件 可以把对象序列化后下载json文件 下载由ajax请求返回的Excel, Word, pdf 等等其他文件 基本思想 downloadJsonIVR () { var data = {name: 'age'} data = JSON.stringify(data) data = new Blob([data]) var a = document.createElement('a') var url = window.URL.createObjectURL(data) a.href = url a.download = 'what-you-want.json' a.click() }, 从字符串下载文件 从ajax请求中下载文件
Restful API 架构思考
1. 什么是REST? 2. REST API最为重要的约束 3. REST API HTTP方法 与 CURD 4. 状态码 5. RESTful架构设计 6. 文档 7. 版本 8. 深入理解状态与无状态 9. 参考 1. 什么是REST? 表现层状态转换(REST,英文:Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博士论文[1] 中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换(REST,英文:Representational State Transfer)是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。匹配或兼容于这种架构风格(简称为 REST 或 RESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。wikipdeia -REST API 不是一个标准或者一个是协议,仅仅是一种风格,一种style。 -RESTful API的简单定义可以轻松解释这个概念。 REST是一种架构风格,RESTful是它的解释。也就是说,如果您的后端服务器具有REST API,并且您(从网站/应用程序)向客户端请求此API,则您的客户端为RESTful。 -2. REST API最为重要的约束 Client-Server 通信只能由客户端单方面发起,表现为请求-响应的形式 Stateless 通信的会话状态(Session State)应该全部由客户端负责维护 Cache 响应内容可以在通信链的某处被缓存,以改善网络效率 Uniform Interface 通信链的组件之间通过统一的接口相互通信,以提高交互的可见性 Layered System 通过限制组件的行为(即每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。 Code-On-Demand 支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。 3. REST API HTTP方法 与 CURD REST API 使用POST,GET, PUT, DELETE的HTTP方法来描述对资源的增、查、改、删。 这四个HTTP方法在数据层对应着SQL的插入、查询、更新、删除操作。...
JavaScript动态下载文件
需求描述 可以把字符串下载成txt文件 可以把对象序列化后下载json文件 下载由ajax请求返回的Excel, Word, pdf 等等其他文件 基本思想 downloadJsonIVR () { var data = {name: 'age'} data = JSON.stringify(data) data = new Blob([data]) var a = document.createElement('a') var url = window.URL.createObjectURL(data) a.href = url a.download = 'what-you-want.json' a.click() }, 从字符串下载文件 从ajax请求中下载文件
Posts
记一次如何解决谷歌浏览器占用过高cpu问题过程
1. 问题现象 有时候发现mac风扇响的厉害,于是我检查了mac系统的活动监视器,发现Google Chrome Helper占用99%的CPU。 +
Posts
Restful API 架构思考
1. 什么是REST? 2. REST API最为重要的约束 3. REST API HTTP方法 与 CURD 4. 状态码 5. RESTful架构设计 6. 文档 7. 版本 8. 深入理解状态与无状态 9. 参考 1. 什么是REST? 表现层状态转换(REST,英文:Representational State Transfer)是Roy Thomas Fielding博士于2000年在他的博士论文[1] 中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表现层状态转换(REST,英文:Representational State Transfer)是根基于超文本传输协议(HTTP)之上而确定的一组约束和属性,是一种设计提供万维网络服务的软件构建风格。匹配或兼容于这种架构风格(简称为 REST 或 RESTful)的网络服务,允许客户端发出以统一资源标识符访问和操作网络资源的请求,而与预先定义好的无状态操作集一致化。wikipdeia +REST API 不是一个标准或者一个是协议,仅仅是一种风格,一种style。 +RESTful API的简单定义可以轻松解释这个概念。 REST是一种架构风格,RESTful是它的解释。也就是说,如果您的后端服务器具有REST API,并且您(从网站/应用程序)向客户端请求此API,则您的客户端为RESTful。 +2. REST API最为重要的约束 Client-Server 通信只能由客户端单方面发起,表现为请求-响应的形式 Stateless 通信的会话状态(Session State)应该全部由客户端负责维护 Cache 响应内容可以在通信链的某处被缓存,以改善网络效率 Uniform Interface 通信链的组件之间通过统一的接口相互通信,以提高交互的可见性 Layered System 通过限制组件的行为(即每个组件只能“看到”与其交互的紧邻层),将架构分解为若干等级的层。 Code-On-Demand 支持通过下载并执行一些代码(例如Java Applet、Flash或JavaScript),对客户端的功能进行扩展。 3. REST API HTTP方法 与 CURD REST API 使用POST,GET, PUT, DELETE的HTTP方法来描述对资源的增、查、改、删。 这四个HTTP方法在数据层对应着SQL的插入、查询、更新、删除操作。...
记一次如何解决谷歌浏览器占用过高cpu问题过程
1. 问题现象 有时候发现mac风扇响的厉害,于是我检查了mac系统的活动监视器,发现Google Chrome Helper占用99%的CPU。 通常来说Chrome如果占用过高的内存,这并不是什么问题,毕竟Chrome的性能以及易用性是建立在占用很多内存的基础上的。但是无论什么程序,持续的占用超过80%的cpu,都是极不正常的。大多数程序都是占用维持在低于10%的CPU。 活动监视器指出问题出现在Chrome浏览器。那么问题可以再次细分为三块。 Chrome系统自身问题 一些插件,例如flash插件,扩展插件 网页程序js出现的问题 2. 从任务管理器着手 其实Chrome浏览器自身也是有任务管理器的,一般来说windows版chrome按住shift+esc就会调出任务管理器窗口。mac版调出任务管理器没有快捷,只能通过Window > Task Manager调出。 @@ -46,10 +49,7 @@ 简单说一下思路:WebSocket底层基于TCP协议的,如果你的服务器基于HTTP协议暴露80端口,那WebSocket肯定无法连接。你只要将HTTP协议修改成TCP协议就可以了。 然后是安全组的配置: 同样如果使用了NGINX作为反向代理,那么NGINX也需要做配置的。 -// https://gist.githubusercontent.com/unshift/324be6a8dc9e880d4d670de0dc97a8ce/raw/29507ed6b3c9394ecd7842f9d3228827cffd1c58/elasticbeanstalk_websockets files: "/etc/nginx/conf.d/01_websockets.conf" : mode: "000644" owner: root group: root content : | upstream nodejs { server 127.0.0.1:8081; keepalive 256; } server { listen 8080; location / { proxy_pass http://nodejs; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } "/opt/elasticbeanstalk/hooks/appdeploy/enact/41_remove_eb_nginx_confg.sh": mode: "000755" owner: root group: root content : | mv /etc/nginx/conf....
状态码为200时 jQuery ajax报错
1. 问题现象 HTTP 状态码为 200 OK 时, jquery ajax报错 -2. 问题原因 jquery ajax的dataType字段包含:json, 但是服务端返回的数据不是规范的json格式,导致jquery解析json字符串报错,最终导致ajax报错。 -jQuery ajax 官方文档上说明: -“json”: Evaluates the response as JSON and returns a JavaScript object. Cross-domain “json” requests are converted to “jsonp” unless the request includes jsonp: false in its request options. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead....
Posts
前端剪贴板复制功能实现原理
1. 兼容情况 如果想浏览器支持粘贴功能,那么浏览器必须支持,document.execCommand(‘copy’)方法,也可以根据document.queryCommandEnabled(‘copy’),返回的true或者false判断浏览器是否支持copy命令。 +
Posts
状态码为200时 jQuery ajax报错
1. 问题现象 HTTP 状态码为 200 OK 时, jquery ajax报错 +2. 问题原因 jquery ajax的dataType字段包含:json, 但是服务端返回的数据不是规范的json格式,导致jquery解析json字符串报错,最终导致ajax报错。 +jQuery ajax 官方文档上说明: +“json”: Evaluates the response as JSON and returns a JavaScript object. Cross-domain “json” requests are converted to “jsonp” unless the request includes jsonp: false in its request options. The JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. As of jQuery 1.9, an empty response is also rejected; the server should return a response of null or {} instead....
前端剪贴板复制功能实现原理
1. 兼容情况 如果想浏览器支持粘贴功能,那么浏览器必须支持,document.execCommand(‘copy’)方法,也可以根据document.queryCommandEnabled(‘copy’),返回的true或者false判断浏览器是否支持copy命令。 从下表可以看出,主流的浏览器都支持execCommand命令 2. 复制的原理 查询元素 选中元素 执行复制命令 3. 代码展示 // html <input id="username" value="123456"> // 查询元素 var username = document.getElementById(‘username’) // 选中元素 username.select() // 执行复制 document.execCommand('copy') 注意: 以上代码只是简单示意,在实践过程中还有几个要判断的情况 首要要去检测浏览器execCommand能力检测 选取元素时,有可能选取元素为空,要考虑这种情况的处理 4. 第三方方案 clipboard.js是一个比较方便的剪贴板库,功能蛮多的。 @@ -62,9 +65,7 @@ 解决方法 去掉check for server certificate revocation*, 也有可能你那边是中文翻译的:叫检查服务器证书是否已吊销 去掉检查发型商证书是否已吊销 点击确定 重启计算机 2 其他常规设置 2.1 去掉兼容模式, 使用Edge文档模式 下图中红色框里的按钮也要取消勾选 2.2 有些使用activeX,还是需要检查是否启用的 2.3 允许跨域 如果你的接口跨域了,还要检查浏览器是否允许跨域,否则浏览器可能默认就禁止跨域的 设置方法 -internet选项 安全 自定义级别 启用通过跨域访问数据源 启用跨域浏览窗口和框架 确定 然后重启电脑
Vue+ElementUI 手把手教你做一个audio组件
1. 简介 1.1. 相关技术 Vue Vue-cli ElementUI yarn (之前我用npm, 并使用cnpm的源,但是用了yarn之后,我发现它比cnpm的速度还快,功能更好,我就毫不犹豫选择yarn了) Audio相关API和事件 1.2. 从本教程你会学到什么? Vue单文件组件开发知识 Element UI基本用法 Audio原生API及Audio相关事件 音频播放器的基本原理 音频的播放暂停控制 更新音频显示时间 音频进度条控制与跳转 音频音量控制 音频播放速度控制 音频静音控制 音频下载控制 个性化配置与排他性播放 一点点ES6语法 2. 学前准备 基本上不需要什么准备,但是如果你能先看一下Aduio相关API和事件将会更好 -Audio: 如果你愿意一层一层剥开我的心 使用 HTML5 音频和视频 3. 在线demon 没有在线demo的教程都是耍流氓 -查看在线demon 项目地址 4. 开始编码 5. 项目初始化 ➜ test vue init webpack element-audio A newer version of vue-cli is available. latest: 2.9.2 installed: 2.9.1 ? Project name element-audio ? Project description A Vue.js project ?...
Posts
你不知道的JSON.stringify()妙用
1. 语法 JSON.stringify(value[, replacer[, space]]) 一般用法: +
Posts
Vue+ElementUI 手把手教你做一个audio组件
1. 简介 1.1. 相关技术 Vue Vue-cli ElementUI yarn (之前我用npm, 并使用cnpm的源,但是用了yarn之后,我发现它比cnpm的速度还快,功能更好,我就毫不犹豫选择yarn了) Audio相关API和事件 1.2. 从本教程你会学到什么? Vue单文件组件开发知识 Element UI基本用法 Audio原生API及Audio相关事件 音频播放器的基本原理 音频的播放暂停控制 更新音频显示时间 音频进度条控制与跳转 音频音量控制 音频播放速度控制 音频静音控制 音频下载控制 个性化配置与排他性播放 一点点ES6语法 2. 学前准备 基本上不需要什么准备,但是如果你能先看一下Aduio相关API和事件将会更好 +Audio: 如果你愿意一层一层剥开我的心 使用 HTML5 音频和视频 3. 在线demon 没有在线demo的教程都是耍流氓 +查看在线demon 项目地址 4. 开始编码 5. 项目初始化 ➜ test vue init webpack element-audio A newer version of vue-cli is available. latest: 2.9.2 installed: 2.9.1 ? Project name element-audio ? Project description A Vue.js project ?...
你不知道的JSON.stringify()妙用
1. 语法 JSON.stringify(value[, replacer[, space]]) 一般用法: var user = {name: 'andy', isDead: false, age: 11, addr: 'shanghai'}; JSON.stringify(user); "{"name":"andy","isDead":false,"age":11,"addr":"shanghai"}" 2. 扩展用法 2.1. replacer replacer可以是函数或者是数组。 功能1: 改变属性值 将isDead属性的值翻译成0或1,0对应false,1对应true var user = {name: 'andy', isDead: false, age: 11, addr: 'shanghai'}; JSON.stringify(user, function(key, value){ if(key === 'isDead'){ return value === true ? 1 : 0; } return value; }); "{"name":"andy","isDead":0,"age":11,"addr":"shanghai"}" 功能2:删除某个属性 将isDead属性删除,如果replacer的返回值是undefined,那么该属性会被删除。 @@ -54,12 +56,7 @@ 在运行时或任何时间获取整个日志或尾部 搜索并切片日志 更好地了解可选时间戳的使用模式 在一个地方切换实时日志记录(console.log) 可选地将输出存储在window.localStorage中,并在每个会话中持续添加到同一个日志 可选地,将日志上限为X个最新行以限制内存消耗 下图是使用downloadLog方法下载的日志文件。 官方提供的demo示例,欢迎试玩。http://inorganik.github.io/debugout.js/ 2. 使用 在脚本顶部的全局命名空间中创建一个新的调试对象,并使用debugout的日志方法替换所有控制台日志方法: -var bugout = new debugout(); // instead of console.log('some object or string') bugout.log('some object or string'); 3. API log() -像console.log(), 但是会自动存储 getLog() - 返回所有日志 tail(numLines) - 返回尾部执行行日志,默认100行 search(string) - 搜索日志 getSlice(start, numLines) - 日志切割 downloadLog() - 下载日志 clear() - 清空日志 determineType() - 一个更细粒度的typeof为您提供方便 4. 可选配置 ··· // log in real time (forwards to console....
如何浏览器里调试iframe里层的代码?
之前一直非常痛苦,在iframe外层根本获取不了里面的信息,后来使用了postMessage用传递消息来实现,但是用起来还是非常不方便。 -其实浏览器本身是可以选择不同的iframe的执行环境的。例如有个变量是在iframe里面定义的,你只需要切换到这个iframe的执行环境,你就可以随意操作这个环境的任何变量了。 -这个小技巧,对于调试非常有用,但是我直到今天才发现。 -1. Chrome 这个小箭头可以让你选择不同的iframe的执行环境,可以切换到你的iframe环境里。 -2. IE 如图所示是ie11的dev tool点击下来箭头,也可以选择不同的iframe执行环境。 -3. 其他浏览器 其他浏览器可以自行摸索一下。。。(G_H)
Posts
读书笔记 - Packet Guide to VoIP
书名 Packet Guide to Voip over IP 作者 Bruce Hartpence 状态 已读完 简介 Go under the hood of an operating Voice over IP network, and build your knowledge of protocol …. 读后感 新技术出现的时机 Pulling the trigger early might put you at risk of making the wrong decision in terms of vendor or protocol. Adopting late might put you behind the competition or make you rush to deploy a system that is not well understood by the local staff....
中途多语言适配
1. 前提说明 项目已经处于维护期 项目一开始并没有考虑多语言,所以很多地方都是写死的中文 现在要给这个项目添加多语言适配 2. 工具选择 https://www.npmjs.com/package/i18n https://www.npmjs.com/package/vue-i18n 3. 难点 项目很大,中文可能存在于各种文件中,例如html, vue, js, typescript等等, 人工查找不现实 所以首先第一步是要找出所有的中文语句 4. 让文本飞 安装ripgrep apt-get instal ripgrep 搜索所有包含中文的代码: rg -e '[\p{Han}]' > han.all.md 给所有包含中文的代码,按照文件名,和出现的次数排序: cat han.all.md | awk -F: '{print $1}' | uniq -c | sort -nr > stat.han.md 这一步主要是看看哪些文件包含的中文比较多 按照中文的语句,排序并统计出现的次数: cat han.all.md |rg -o -e '([\p{Han}]+)' | sort | uniq -c | sort -nr > word.han.md 经过上面4步,基本上可以定位出哪些代码中包含中文,中文的语句有哪些。
0 A.D. 一款开发了21年还未release的游戏
1. 我为什么会知道0 A.D. 这款游戏? 最近切换到windows开发,用了scoop这个包管理工具来安装软件,随便逛逛的时候,发现scoop还可以用来安装游戏,然后我就在里面看了一下,然后排名第一的是一个名叫 0 A.D.的游戏,然后我就安装,并试玩了一下。 +
Posts
Hugo Timezone没有设置, 导致页面无法渲染
写好了博客,但是没有在网页上渲染出来,岂不是很气人! +我的archtypes/default.md配置如下 +--- title: "{{ replace .Name "-" " " | title }}" date: "{{ now.Format "2006-01-02 15:04:05" }}" draft: false --- 当使用 hugo new 创建一个文章的时候,有如下的头 +--- title: "01: 学习建议" date: "2022-09-03 10:23:10" draft: false --- Hugo 默认采用的是 格林尼治平时 (GMT),比北京时间 (UTC+8) 晚了 8 个小时,Hugo 在生成静态页面的时候,不会生成超过当前时间的文章。 +如果把北京时间当作格林尼治时间来计算,那么肯定还没有超过当前时间。 +所以我们要给站点设置时区。 +在config.yaml增加如下内容 +timeZone: "Asia/Shanghai"
读书笔记 - Packet Guide to VoIP
书名 Packet Guide to Voip over IP 作者 Bruce Hartpence 状态 已读完 简介 Go under the hood of an operating Voice over IP network, and build your knowledge of protocol …. 读后感 新技术出现的时机 Pulling the trigger early might put you at risk of making the wrong decision in terms of vendor or protocol. Adopting late might put you behind the competition or make you rush to deploy a system that is not well understood by the local staff....
中途多语言适配
1. 前提说明 项目已经处于维护期 项目一开始并没有考虑多语言,所以很多地方都是写死的中文 现在要给这个项目添加多语言适配 2. 工具选择 https://www.npmjs.com/package/i18n https://www.npmjs.com/package/vue-i18n 3. 难点 项目很大,中文可能存在于各种文件中,例如html, vue, js, typescript等等, 人工查找不现实 所以首先第一步是要找出所有的中文语句 4. 让文本飞 安装ripgrep apt-get instal ripgrep 搜索所有包含中文的代码: rg -e '[\p{Han}]' > han.all.md 给所有包含中文的代码,按照文件名,和出现的次数排序: cat han.all.md | awk -F: '{print $1}' | uniq -c | sort -nr > stat.han.md 这一步主要是看看哪些文件包含的中文比较多 按照中文的语句,排序并统计出现的次数: cat han.all.md |rg -o -e '([\p{Han}]+)' | sort | uniq -c | sort -nr > word.han.md 经过上面4步,基本上可以定位出哪些代码中包含中文,中文的语句有哪些。
0 A.D. 一款开发了21年还未release的游戏
1. 我为什么会知道0 A.D. 这款游戏? 最近切换到windows开发,用了scoop这个包管理工具来安装软件,随便逛逛的时候,发现scoop还可以用来安装游戏,然后我就在里面看了一下,然后排名第一的是一个名叫 0 A.D.的游戏,然后我就安装,并试玩了一下。 2. 0 A.D. 这个名字是啥意思? 基督教称耶稣诞生的那年为公元元年, A.D. 就是Anno Domini(A.D.)(拉丁)的缩写,对应的公元前就是而在耶稣诞生之前,称为B.C. Before Christ(B.C.). 我们现在的阳历,例如今年是2022年,这其实就是公元2022年。对应的公元元年,对中国来说,大致在西汉年间。 所以 0 A.D. 其实的意思就是一个不存在的元年。 @@ -65,7 +72,7 @@ 我们只不过是为他人做嫁衣罢了。就像旧时代的长工,只不过在一个大一点的地主家干活了吧。 再见了,语雀。 新的bolg地址: wdd.js.org -我以前没得选,我现在想选择做个自由人
vfs_cache_pressure和min_free_kbytes对cache的影响
环境 kernal Linux 5.15.48-1-MANJARO #1 SMP PREEMPT Thu Jun 16 12:33:56 UTC 2022 x86_64 GNU/Linux docker 20.10.16 初始内存 total used free shared buff/cache available 内存: 30Gi 1.9Gi 19Gi 2.0Mi 9.6Gi 28Gi 交换: 0B 0B 0B 初始配置 sysctl -n vm.min_free_kbytes 67584 sysctl -n vm.vfs_cache_pressure 200 vfs_cache_pressure的对内存的影响 vfs_cache_pressure设置为200, 理论系统倾向于回收内存
Posts
Audio 如果你愿意一层一层剥开我的心
我觉得DOM就好像是元素周期表里的元素,JS就好像是实验器材,通过各种化学反应,产生各种魔术。 +
Posts
如何浏览器里调试iframe里层的代码?
之前一直非常痛苦,在iframe外层根本获取不了里面的信息,后来使用了postMessage用传递消息来实现,但是用起来还是非常不方便。 +其实浏览器本身是可以选择不同的iframe的执行环境的。例如有个变量是在iframe里面定义的,你只需要切换到这个iframe的执行环境,你就可以随意操作这个环境的任何变量了。 +这个小技巧,对于调试非常有用,但是我直到今天才发现。 +1. Chrome 这个小箭头可以让你选择不同的iframe的执行环境,可以切换到你的iframe环境里。 +2. IE 如图所示是ie11的dev tool点击下来箭头,也可以选择不同的iframe执行环境。 +3. 其他浏览器 其他浏览器可以自行摸索一下。。。(G_H)
Audio 如果你愿意一层一层剥开我的心
我觉得DOM就好像是元素周期表里的元素,JS就好像是实验器材,通过各种化学反应,产生各种魔术。 1. Audio 通过打开谷歌浏览器的dev tools -> Settings -> Elements -> Show user agent shadow DOM, 你可以看到其实Audio标签也是由常用的 input标签和div等标签合成的。 2. 基本用法 1 <audio src="http://65.ierge.cn/12/186/372266.mp3"> Your browser does not support the audio element. </audio> <br> 2 <audio src="http://65.ierge.cn/12/186/372266.mp3" controls="controls"> Your browser does not support the audio element. </audio> <br> // controlsList属性目前只支持 chrome 58+ 3 <audio src="http://65.ierge.cn/12/186/372266.mp3" controls="controls" controlsList="nodownload"> Your browser does not support the audio element. </audio> <br> 4 <audio controls="controls"> <source src="http://65....
可能被遗漏的https与http的知识点
1. HTTPS域向HTTP域发送请求会被浏览器直接拒绝,HTTP向HTTPS则不会 例如在github pages页面,这是一个https页面,如果在这个页面向http发送请求,那么会直接被浏览器拒绝,并在控制台输出下面的报错信息。 jquery-1.11.3.min.js:5 Mixed Content: The page at 'https://wangduanduan.github.io/ddddddd/' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://cccccc/log/conf?token=welljoint'. This request has been blocked; the content must be served over HTTPS. 如果你在做第三方集成的系统,如果他们是在浏览器中直接调用你提供的接口,那么最好你使用https协议,这样无论对方是https还是http都可以访问。(相信我,这个很重要,我曾经经历过上线后遇到这个问题,然后连夜申请证书,把http升级到https的痛苦经历) @@ -55,7 +60,7 @@ 一些文档里可能会加入字段的类型,但是我认为这是没必要的。以为HTTP传输的数据往往都需要序列化,大部分数据类型都是字符串。一些特殊的类型,例如枚举类型的字符串,可以在说明里描述。 另外:数据模型非常建议使用表格来表现。 举个栗子🌰: -名称 是否必须 说明 userType 是 用户类型。commom表示普通用户,vip表示vip用户 age 否 用户年龄 gender 否 用户性别。1表示男,0表示女 5. 请求示例 // general POST http://www.testapi.com/api/user // request payload { "name": "qianxun", "age": 14, "like": ["music", "reading"], "userType": "vip" } // response { "id": "asdkfjalsdkf" } 6. 异常处理 异常处理最小数据集...
win7 ie11 开发者工具打开后一片空白
解决方法安装Windows7补丁:KB3008923; 下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=45134 (32位) http://www.microsoft.com/zh-CN/download/details.aspx?id=45154 (64位)
Posts
CSTA 呼叫模型简介
1. 内容概要 CSTA协议与标准概述 CSTA OpenScape 语音架构概述 2. CSTA协议标准 2.1. 什么是CSTA ? CSTA:电脑支持通讯程序(Computer Supported TelecommunicationsApplications) +
Posts
win7 ie11 开发者工具打开后一片空白
解决方法安装Windows7补丁:KB3008923; 下载地址: http://www.microsoft.com/en-us/download/details.aspx?id=45134 (32位) http://www.microsoft.com/zh-CN/download/details.aspx?id=45154 (64位)
CSTA 呼叫模型简介
1. 内容概要 CSTA协议与标准概述 CSTA OpenScape 语音架构概述 2. CSTA协议标准 2.1. 什么是CSTA ? CSTA:电脑支持通讯程序(Computer Supported TelecommunicationsApplications) 基本的呼叫模型在1992建立,后来随着行业发展,呼叫模型也被加强和扩展,例如新的协议等等 CSTA是一个应用层接口,用来监控呼叫,设备和网络 CSTA创建了一个通讯程序的抽象层: diff --git a/posts/page/4/index.html b/posts/page/4/index.html index 1f657d76b..627d859df 100644 --- a/posts/page/4/index.html +++ b/posts/page/4/index.html @@ -1,6 +1,6 @@
Posts
manjaro 安装 packettracer
# 将会下载packettracer到当前目录下 yay -G packettracer cd packettracer # Download PacketTracer_731_amd64.deb to this folder makepkg sudo pacman -U packettracer-7.3.1-2-x86_64.pkg.tar.xz 注意,如果下载的packetraacer包不是PacketTracer_731_amd64.deb, 则需要修改PKGBUILD文件中的, souce对应的文件名。 例如我下载的packettracer是Cisco_Packet_Tracer_811_Ubuntu_64bit_cf200f5851.deb +
Posts
vfs_cache_pressure和min_free_kbytes对cache的影响
环境 kernal Linux 5.15.48-1-MANJARO #1 SMP PREEMPT Thu Jun 16 12:33:56 UTC 2022 x86_64 GNU/Linux docker 20.10.16 初始内存 total used free shared buff/cache available 内存: 30Gi 1.9Gi 19Gi 2.0Mi 9.6Gi 28Gi 交换: 0B 0B 0B 初始配置 sysctl -n vm.min_free_kbytes 67584 sysctl -n vm.vfs_cache_pressure 200 vfs_cache_pressure的对内存的影响 vfs_cache_pressure设置为200, 理论系统倾向于回收内存
manjaro 安装 packettracer
# 将会下载packettracer到当前目录下 yay -G packettracer cd packettracer # Download PacketTracer_731_amd64.deb to this folder makepkg sudo pacman -U packettracer-7.3.1-2-x86_64.pkg.tar.xz 注意,如果下载的packetraacer包不是PacketTracer_731_amd64.deb, 则需要修改PKGBUILD文件中的, souce对应的文件名。 例如我下载的packettracer是Cisco_Packet_Tracer_811_Ubuntu_64bit_cf200f5851.deb source=('local://Cisco_Packet_Tracer_811_Ubuntu_64bit_cf200f5851.deb' 'packettracer.sh') 注意:最新版的packertracer打开后,必须登陆账号才能使用,有点坑。 花费点时间注册了账号后,才能用。 参考 https://forum.manjaro.org/t/how-to-get-cisco-packet-tracer-on-manjaro/25506/5
mysql placeholder的错误使用方式
Error EXTRA *mysql.MySQLError=Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘? ( 然而我仔细看了看sql语句,没有看出来究竟哪里有sql报错。 然而当我把作为placeholder的问号去掉,直接用表的名字,sql是可以直接执行的。我意识到这个可能是和placeholder有关。 @@ -37,10 +37,7 @@ 是时候准备和陪伴我4.5年的电脑说再见了。 本来想买14寸的macbook pro m1的,但是重量的增加以及很丑的刘海也是我不能忍的。 所以我觉得我会买一台轻便点的windows笔记本,而且windows还有一个很吸引我的点,就是linux子系统。这个linux子系统,要比mac的系统更加linux。 -各位同学有没有推荐的windows的轻便笔记本呢?
github clone加速
我有一个github仓库,https://github.com/wangduanduan/opensips, 这个源码比较大,git clone 比较慢。 -我们使用https://www.gitclone.com/提供的加速服务。 -# 从github上clone git clone https://github.com/wangduanduan/opensips.git # 从gitclone上clone # 只需要在github前面加上gitclone.com/ # 速度就非常快,达到1mb/s git clone https://gitclone.com/github.com/wangduanduan/opensips.git 但是这时候git repo的仓库地址是 https://gitclone.com/github.com/wangduanduan/opensips.git,并不是真正的仓库地址,而且我更喜欢用的是ssh方式的远程地址,所以我们就需要修改一下 -git remote set-url origin git@github.com:wangduanduan/opensips.git
Posts
[未完成] 浪潮之底系列 - tcpdump的故事
故事发生在1988年的美国。这一年互联网的始祖网络,阿帕网已经诞生了将近20年。而我们所熟知的linux将在三年后,也就是1991才出现。 +
Posts
github clone加速
我有一个github仓库,https://github.com/wangduanduan/opensips, 这个源码比较大,git clone 比较慢。 +我们使用https://www.gitclone.com/提供的加速服务。 +# 从github上clone git clone https://github.com/wangduanduan/opensips.git # 从gitclone上clone # 只需要在github前面加上gitclone.com/ # 速度就非常快,达到1mb/s git clone https://gitclone.com/github.com/wangduanduan/opensips.git 但是这时候git repo的仓库地址是 https://gitclone.com/github.com/wangduanduan/opensips.git,并不是真正的仓库地址,而且我更喜欢用的是ssh方式的远程地址,所以我们就需要修改一下 +git remote set-url origin git@github.com:wangduanduan/opensips.git
[未完成] 浪潮之底系列 - tcpdump的故事
故事发生在1988年的美国。这一年互联网的始祖网络,阿帕网已经诞生了将近20年。而我们所熟知的linux将在三年后,也就是1991才出现。 在1988年,这时候的互联网只有阿帕网。 然而这个网络并没有想象中的那么好用,他还存在很多问题,而且也经常崩溃。 解决阿帕网崩溃的这个问题,落到了LBL(Lawrence Berkeley National Laboratory实验室的肩上。 这个实验室有四个牛人,他们同时也是tcpdump的发明人。 @@ -45,22 +48,7 @@ 如果定义的占位符太多,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 { ....
使用树莓派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 :!...
树莓派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了。...
Posts
js sdk 跨层穿透问题
关于js sdk的设计,这篇文档基本上详细介绍了很多的点,值得深入阅读一遍。https://github.com/hueitan/javascript-sdk-design +
Posts
树莓派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了。...
js sdk 跨层穿透问题
关于js sdk的设计,这篇文档基本上详细介绍了很多的点,值得深入阅读一遍。https://github.com/hueitan/javascript-sdk-design 然而最近在重构某个js sdk时,也发现了一些问题,这个问题并不存在于上述文章中的。 js sdk在收到服务端的响应时,直接将server端返回的错误码给到用户。 这里会有一个问题,这个响应码,实际上是js sdk和server之间的消息交流。并不是js sdk和用户之间的消息交流。 @@ -24,11 +39,7 @@ This directive appeared in version 1.9.13. Sets the number of datagrams expected from the proxied server in response to a client datagram if the UDP protocol is used....
7月书单
6月书单回顾 《鳗鱼的旅行》刚读到92% 《Googler软件测试之道》100% 《软件测试之道微软技术专家经验总结》24% 《沉默的病人》100% 《一个人的朝圣》9% 《读懂发票》100% 《108个训练让你成为手机摄影达人》100% 《经济学通识课》5% 《楚留香新传》100% 7月书单 《鳗鱼的旅行》 《软件测试之道微软技术专家经验总结》 [KU]《一个人的朝圣》 [KU]《经济学通识课》 new 水浒传 [KU] new 围城 [KU] new 黄金时代 new 长安十二时辰 [KU] new 幻夜 new 软件开发本质论 [KU] new 苏东坡传 [KU] new 诡计博物馆 [KU] new 大师的盛宴 二十世纪最佳科幻小说 [KU] new 活出生命的意义
Google软件测试之道(异步图书) James Whittaker; Jason Arbon; Jeff Carollo
Google软件测试之道(异步图书)James Whittaker; Jason Arbon; Jeff Carollo 序标注(黄色) - 位置 361从根本上说,如果测试人员想加入这个俱乐部,就必须具备良好的计算机科学基础和编程能力。变革标注(黄色) - 位置 367招聘具备开发能力的测试人员很难,找到懂测试的开发人员就更难,标注(黄色) - 位置 368但是维持现状更要命,我只能往前走。标注(黄色) - 位置 388我们寻找的人要兼具开发人员的技能和测试人员的思维,他们必须会编程,能实现工具、平台和测试自动化。第1章 Google软件测试介绍标注(黄色) - 1.1 质量不等于测试 > 位置 573Google能用如此少的专职测试人员的原因,就是开发对质量的负责。标注(黄色) - 1.1 质量不等于测试 > 位置 574如果某个产品出了问题,第一个跳出来的肯定是导致这个问题发生的开发人员,而不是遗漏这个 bug的测试人员。标注(黄色) - 1.2.1 软件开发工程师(SWE) > 位置 593软件开发工程师(标注(黄色) - 1.2.2 软件测试开发工程师(SET) > 位置 600软件测试开发工程师(标注(黄色) - 1.2.3 测试工程师(TE) > 位置 612TE把用户放在第一位来思考。 TE组织整体质量实践,分析解释测试运行结果,第2章 软件测试开发工程师书签 - 位置 784标注(黄色) - 位置 787Google的 SWE是功能开发人员; Google的 SET是测试开发人员; Google的 TE是用户开发人员。标注(黄色) - 2.1.1 开发和测试流程 > 位置 864测试驱动开发”标注(黄色) - 2....
沉默的病人(世界狂销300万册的烧脑神作!多少看似完美的夫妻,都在等待杀死对方的契机)
沉默的病人(世界狂销300万册的烧脑神作!多少看似完美的夫妻,都在等待杀死对方的契机)亚历克斯·麦克利兹 -第二部分 PAPT TWO标注(黄色) - 9 > 位置 1294选择自己所爱的人就像选择心理治疗师,”鲁思说,“我们有必要问自己,这个人会不会对我忠诚,能不能听得进批评,标注(黄色) - 9 > 位置 1295承认所犯的错误,而且做不到的事情决不承诺?”第三部分 PAPT THREE标注(黄色) - 位置 2577虽然我生来不是个好人,有时我却偶然要做个好人。——威廉·莎士比亚《冬天的故事》[
被讨厌的勇气:“自我启发之父”阿德勒的哲学课
引言标注(黄色) - 位置 225人并不是住在客观的世界,而是住在自己营造的主观世界里。第一夜 我们的不幸是谁的错?标注(黄色) - 不为人知的心理学“第三巨头” > 位置 335但在世界上,阿德勒是与弗洛伊德、荣格并列的三大巨头之一。标注(黄色) - 再怎么“找原因”,也没法改变一个人 > 位置 377如果所有人的“现在”都由“过去”所决定,那岂不是很奇怪吗?标注(黄色) - 再怎么“找原因”,也没法改变一个人 > 位置 384您是说与过去没有关系?哲人:是的,这就是阿德勒心理学的立场。标注(黄色) - 再怎么“找原因”,也没法改变一个人 > 位置 389阿德勒心理学考虑的不是过去的“原因”,而是现在的“目的”。标注(黄色) - 心理创伤并不存在 > 位置 417任何经历本身并不是成功或者失败的原因。我们并非因为自身经历中的刺激——所谓的心理创伤——而痛苦,事实上我们会从经历中发现符合自己目的的因素。决定我们自身的不是过去的经历,而是我们自己赋予经历的意义。”标注(黄色) - 心理创伤并不存在 > 位置 423人生不是由别人赋予的,而是由自己选择的,是自己选择自己如何生活。标注(黄色) - 心理创伤并不存在 > 位置 443我们大家都是在为了某种“目的”而活着。这就是目的论。标注(黄色) - 你的不幸,皆是自己“选择”的 > 位置 599而是因为你认为“不幸”对你自身而言是一种“善”。标注(黄色) - 人们常常下定决心“不改变” > 位置 614某人如何看“世界”,又如何看“自己”,把这些“赋予意义的方式”汇集起来的概念就可以理解为生活方式。标注(黄色) - 你的人生取决于“当下” > 位置 706无论之前的人生发生过什么,都对今后的人生如何度过没有影响。”决定自己人生的是活在“此时此刻”的你自己。第二夜 一切烦恼都来自人际关系标注(黄色) - 为什么讨厌自己? > 位置 780阿德勒心理学把这叫作“鼓励”。青年:鼓励?书签 - 一切烦恼都是人际关系的烦恼 > 位置 834标注(黄色) - 自卑情结只是一种借口 > 位置 936自卑情结是指把自己的自卑感当作某种借口使用的状态。标注(黄色) - 自卑情结只是一种借口 > 位置 943外部因果律”一词来进行说明。意思就是:将原本没有任何因果关系的事情解释成似乎有重大因果关系一样。标注(黄色) - 人生不是与他人的比赛 > 位置 1044健全的自卑感不是来自与别人的比较,而是来自与“理想的自己”的比较。标注(黄色) - 在意你长相的,只有你自己 > 位置 1071在意你长相的,只有你自己标注(黄色) - 人生的三大课题:交友课题、工作课题以及爱的课题 > 位置 1223交友课题、工作课题以及爱的课题标注(黄色) - 人生的三大课题:交友课题、工作课题以及爱的课题 > 位置 1224一切烦恼皆源于人际关系”标注(黄色) - 浪漫的红线和坚固的锁链 > 位置 1313当人能够感觉到“与这个人在一起可以无拘无束”的时候,才能够体会到爱。既没有自卑感也不必炫耀优越性,能够保持一种平静而自然的状态。真正的爱应该是这样的。标注(黄色) - 浪漫的红线和坚固的锁链 > 位置 1315束缚是想要支配对方的表现,也是一种基于不信任感的想法。与一个不信任自己的人处在同一个空间里,那就根本不可能保持一种自然状态。标注(黄色) - “人生谎言”教我们学会逃避 > 位置 1333那并不是因为无法容忍 A的缺点才讨厌他,而是你先有“要讨厌 A”这个目的,之后才找出了符合这个目的的缺点。标注(黄色) - “人生谎言”教我们学会逃避 > 位置 1345人就是这么任性而自私的生物,一旦产生这种想法,无论怎样都能发现对方的缺点。标注(黄色) - 阿德勒心理学是“勇气的心理学” > 位置 1373青年:也就是“不在于被给予了什么,而在于如何去使用被给予的东西”那句话吗?第三夜 让干涉你生活的人见鬼去标注(黄色) - 自由就是不再寻求认可? > 位置 1405就是:“货币是被铸造的自由。”它是陀思妥耶夫斯基的小说中出现的一句话。“被铸造的自由”这种说法是何等的痛快啊!我认为这是一句非常精辟的话,它一语道破了货币的标注(黄色) - 自由就是不再寻求认可? > 位置 1449阿德勒心理学否定寻求他人的认可。标注(黄色) - 要不要活在别人的期待中? > 位置 1479在犹太教教义中有这么一句话:“倘若自己都不为自己活出自己的人生,那还有谁会为自己而活呢?”你就活在自己的人生中。书签 - 要不要活在别人的期待中? > 位置 1498标注(黄色) - 砍断“格尔迪奥斯绳结” > 位置 1689否定原因论、否定精神创伤、采取目的论;认为人的烦恼全都是关于人际关系的烦恼;此外,不寻求认可或者课题分离也全都是反常识的理论。标注(黄色) - 自由就是被别人讨厌 > 位置 1764自由就是被别人讨厌”。标注(黄色) - 自由就是被别人讨厌 > 位置 1785不畏惧被人讨厌而是勇往直前,不随波逐流而是激流勇进,这才是对人而言的自由。第五夜 认真的人生“活在当下”标注(黄色) - 对决“人生最大的谎言” > 位置 2910人生中最大的谎言就是不活在“此时此刻”。纠结过去、关注未来,把微弱而模糊的光打向人生整体,自认为看到了些什么。标注(黄色) - 对决“人生最大的谎言” > 位置 2916因为过去和未来根本不存在,所以才要谈现在。起决定作用的既不是昨天也不是明天,而是“此时此刻”。标注(黄色) - 人生的意义,由你自己决定 > 位置 2982必须有人开始。即使别人不合作,那也与你无关。我的意见就是这样。应该由你开始,不用去考虑别人是否合作。”后记标注(黄色) - 位置 3011一切烦恼皆源于人际关系”“人可以随时改变并能够获得幸福”“问题不在于能力而在于勇气
windows版本nc教程:在windows上做udp测试
有时候,客户端的udp包被中间的防火墙拦截了,在linux上可以很简单的用nc启动一个udp server -# 启动udp server 监听8888端口 nc -ulp 20000 # 启动udp client nc -u 127.0.0.1 20000 在linux上启动nc udp server很简单,但是在windows上,没办法安装nc啊?😭 -峰回路转 https://nmap.org/download.html 在查看了nc的官网之后,发现nc实际上也提供了windows的程序,有两种版本。 -有GUI界面的,使用友好,安装包比较大 https://nmap.org/dist/nmap-7.91-setup.exe 仅仅在命令行下执行,刚好满足需求 https://nmap.org/dist/nmap-7.91-win32.zip 看看带GUI界面的 -附件 nmap-7.91-win32.zip
被讨厌的勇气:“自我启发之父”阿德勒的哲学课
引言标注(黄色) - 位置 225人并不是住在客观的世界,而是住在自己营造的主观世界里。第一夜 我们的不幸是谁的错?标注(黄色) - 不为人知的心理学“第三巨头” > 位置 335但在世界上,阿德勒是与弗洛伊德、荣格并列的三大巨头之一。标注(黄色) - 再怎么“找原因”,也没法改变一个人 > 位置 377如果所有人的“现在”都由“过去”所决定,那岂不是很奇怪吗?标注(黄色) - 再怎么“找原因”,也没法改变一个人 > 位置 384您是说与过去没有关系?哲人:是的,这就是阿德勒心理学的立场。标注(黄色) - 再怎么“找原因”,也没法改变一个人 > 位置 389阿德勒心理学考虑的不是过去的“原因”,而是现在的“目的”。标注(黄色) - 心理创伤并不存在 > 位置 417任何经历本身并不是成功或者失败的原因。我们并非因为自身经历中的刺激——所谓的心理创伤——而痛苦,事实上我们会从经历中发现符合自己目的的因素。决定我们自身的不是过去的经历,而是我们自己赋予经历的意义。”标注(黄色) - 心理创伤并不存在 > 位置 423人生不是由别人赋予的,而是由自己选择的,是自己选择自己如何生活。标注(黄色) - 心理创伤并不存在 > 位置 443我们大家都是在为了某种“目的”而活着。这就是目的论。标注(黄色) - 你的不幸,皆是自己“选择”的 > 位置 599而是因为你认为“不幸”对你自身而言是一种“善”。标注(黄色) - 人们常常下定决心“不改变” > 位置 614某人如何看“世界”,又如何看“自己”,把这些“赋予意义的方式”汇集起来的概念就可以理解为生活方式。标注(黄色) - 你的人生取决于“当下” > 位置 706无论之前的人生发生过什么,都对今后的人生如何度过没有影响。”决定自己人生的是活在“此时此刻”的你自己。第二夜 一切烦恼都来自人际关系标注(黄色) - 为什么讨厌自己? > 位置 780阿德勒心理学把这叫作“鼓励”。青年:鼓励?书签 - 一切烦恼都是人际关系的烦恼 > 位置 834标注(黄色) - 自卑情结只是一种借口 > 位置 936自卑情结是指把自己的自卑感当作某种借口使用的状态。标注(黄色) - 自卑情结只是一种借口 > 位置 943外部因果律”一词来进行说明。意思就是:将原本没有任何因果关系的事情解释成似乎有重大因果关系一样。标注(黄色) - 人生不是与他人的比赛 > 位置 1044健全的自卑感不是来自与别人的比较,而是来自与“理想的自己”的比较。标注(黄色) - 在意你长相的,只有你自己 > 位置 1071在意你长相的,只有你自己标注(黄色) - 人生的三大课题:交友课题、工作课题以及爱的课题 > 位置 1223交友课题、工作课题以及爱的课题标注(黄色) - 人生的三大课题:交友课题、工作课题以及爱的课题 > 位置 1224一切烦恼皆源于人际关系”标注(黄色) - 浪漫的红线和坚固的锁链 > 位置 1313当人能够感觉到“与这个人在一起可以无拘无束”的时候,才能够体会到爱。既没有自卑感也不必炫耀优越性,能够保持一种平静而自然的状态。真正的爱应该是这样的。标注(黄色) - 浪漫的红线和坚固的锁链 > 位置 1315束缚是想要支配对方的表现,也是一种基于不信任感的想法。与一个不信任自己的人处在同一个空间里,那就根本不可能保持一种自然状态。标注(黄色) - “人生谎言”教我们学会逃避 > 位置 1333那并不是因为无法容忍 A的缺点才讨厌他,而是你先有“要讨厌 A”这个目的,之后才找出了符合这个目的的缺点。标注(黄色) - “人生谎言”教我们学会逃避 > 位置 1345人就是这么任性而自私的生物,一旦产生这种想法,无论怎样都能发现对方的缺点。标注(黄色) - 阿德勒心理学是“勇气的心理学” > 位置 1373青年:也就是“不在于被给予了什么,而在于如何去使用被给予的东西”那句话吗?第三夜 让干涉你生活的人见鬼去标注(黄色) - 自由就是不再寻求认可? > 位置 1405就是:“货币是被铸造的自由。”它是陀思妥耶夫斯基的小说中出现的一句话。“被铸造的自由”这种说法是何等的痛快啊!我认为这是一句非常精辟的话,它一语道破了货币的标注(黄色) - 自由就是不再寻求认可? > 位置 1449阿德勒心理学否定寻求他人的认可。标注(黄色) - 要不要活在别人的期待中? > 位置 1479在犹太教教义中有这么一句话:“倘若自己都不为自己活出自己的人生,那还有谁会为自己而活呢?”你就活在自己的人生中。书签 - 要不要活在别人的期待中? > 位置 1498标注(黄色) - 砍断“格尔迪奥斯绳结” > 位置 1689否定原因论、否定精神创伤、采取目的论;认为人的烦恼全都是关于人际关系的烦恼;此外,不寻求认可或者课题分离也全都是反常识的理论。标注(黄色) - 自由就是被别人讨厌 > 位置 1764自由就是被别人讨厌”。标注(黄色) - 自由就是被别人讨厌 > 位置 1785不畏惧被人讨厌而是勇往直前,不随波逐流而是激流勇进,这才是对人而言的自由。第五夜 认真的人生“活在当下”标注(黄色) - 对决“人生最大的谎言” > 位置 2910人生中最大的谎言就是不活在“此时此刻”。纠结过去、关注未来,把微弱而模糊的光打向人生整体,自认为看到了些什么。标注(黄色) - 对决“人生最大的谎言” > 位置 2916因为过去和未来根本不存在,所以才要谈现在。起决定作用的既不是昨天也不是明天,而是“此时此刻”。标注(黄色) - 人生的意义,由你自己决定 > 位置 2982必须有人开始。即使别人不合作,那也与你无关。我的意见就是这样。应该由你开始,不用去考虑别人是否合作。”后记标注(黄色) - 位置 3011一切烦恼皆源于人际关系”“人可以随时改变并能够获得幸福”“问题不在于能力而在于勇气
Posts
macos 鼠标滚轮不灵敏
现象 有时候轻微滚动滚轮,页面不滚动,然后突然又发生了滚动 解决方案 Mos https://github.com/Caldis/Mos 一个用于在MacOS上平滑你的鼠标滚动效果的小工具, 让你的滚轮爽如触控板。 特性 疯狂平滑你的鼠标滚动效果 支持分离触控板/鼠标事件, 单独翻转鼠标滚动方向。 滚动曲线的自定义调整。 支持区分应用处理, 黑/白名单系统。 用于监控滚动事件的图形化呈现窗口。 基于 Swift4 构建 免费 附件 Mos.Versions.3.3.2.dmg
一日看尽长安花——听北大教授畅讲中国古代文学
第一讲 关关雎鸠在河洲 ——先秦神话和诗歌标注(黄色) - 位置 129女娲炼石补天处,石破天惊逗秋雨”,第二讲 百家争鸣写春秋 ——先秦散文标注(黄色) - 位置 306为川者决之使导,为民者宣之使言。”标注(黄色) - 位置 466他就发愤努力,一定要做仓库里的老鼠。第三讲 大风起兮云飞扬 ——汉朝的赋和散文标注(黄色) - 位置 538有两个情况可以免死:一是拿出大量的金钱赎身;第二就是受宫刑。标注(黄色) - 位置 539叫《报任安书》:标注(黄色) - 位置 557事情。《史记》写完之后,司马迁就不知所终了。第六讲 独念天地之悠悠 ——隋与初唐文学标注(黄色) - 位置 1346王勃,他在初唐时代是一个非常有才华的少年,他 27岁就死了。真是“千古文章未尽才”。他写《滕王阁序》,标注(黄色) - 位置 1359就是把你的遭遇拉到跟他相同的地步。譬如说,你考试得了 65分,不高兴,我就对你说:不要难过嘛,我不过只考 67分而已,咱们俩都差不多。第七讲 登高壮观天地间 ——盛唐诗歌标注(黄色) - 位置 1406秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。——王昌龄《出塞二首》(其一)标注(黄色) - 位置 1664桃花潭水深千尺,不及汪伦送我情。第八讲 乌衣巷口夕阳斜 ——中唐诗歌标注(黄色) - 位置 1809座中泣下谁最多,江州司马青衫湿。”标注(黄色) - 位置 1892十年磨一剑,霜刃未曾试。第九讲 霜叶红于二月花 ——晚唐诗歌标注(黄色) - 位置 1906停车坐爱枫林晚,霜叶红于二月花。第十讲 大江东去浪淘沙 ——两宋金元文学书签 - 位置 2168标注(黄色) - 位置 2509山盟虽在,锦书难托。标注(黄色) - 位置 2559劝君更尽一杯酒,西出阳关无故人”,标注(黄色) - 位置 2560桃花潭水深千尺,不及汪伦送我情”,
6月书单
5月书单回顾 《鲁滨逊漂流》记 读完 人在孤独的时候,适合读这本书 《被讨厌的勇气》读到 69%, 很有幸读到这本书,6月继续 《围城》读到21%,我好喜欢钱老的比喻句,总是那么别具一格,让人耳目一新 《一日看尽长安花》读到81%, 我喜欢唐诗宋词,就像是喜欢牛奶一样,非常有营养,又让人回味无穷 《牛津通识读本 数学》读完,如果我能早点读到这本书,我就很可能喜欢上数学。 6月书单 《鳗鱼的旅行》刚读到20% 《Googler软件测试之道》刚读到53%, 牛逼的公司,牛逼的测试 《软件测试之道微软技术专家经验总结》10% 《沉默的病人》1% 《一个人的朝圣》0% 《读懂发票》12% 《108个训练让你成为手机摄影达人》 《经济学通识课》 《楚留香传奇》21%
1分钟将微信网页版转为桌面应用
在manjaro上我用的wine版本的微信,然而保存文件时,文件无法保存到manjaro中,而只能保存到wine里面的windows中。 +
Posts
windows版本nc教程:在windows上做udp测试
有时候,客户端的udp包被中间的防火墙拦截了,在linux上可以很简单的用nc启动一个udp server +# 启动udp server 监听8888端口 nc -ulp 20000 # 启动udp client nc -u 127.0.0.1 20000 在linux上启动nc udp server很简单,但是在windows上,没办法安装nc啊?😭 +峰回路转 https://nmap.org/download.html 在查看了nc的官网之后,发现nc实际上也提供了windows的程序,有两种版本。 +有GUI界面的,使用友好,安装包比较大 https://nmap.org/dist/nmap-7.91-setup.exe 仅仅在命令行下执行,刚好满足需求 https://nmap.org/dist/nmap-7.91-win32.zip 看看带GUI界面的 +附件 nmap-7.91-win32.zip
macos 鼠标滚轮不灵敏
现象 有时候轻微滚动滚轮,页面不滚动,然后突然又发生了滚动 解决方案 Mos https://github.com/Caldis/Mos 一个用于在MacOS上平滑你的鼠标滚动效果的小工具, 让你的滚轮爽如触控板。 特性 疯狂平滑你的鼠标滚动效果 支持分离触控板/鼠标事件, 单独翻转鼠标滚动方向。 滚动曲线的自定义调整。 支持区分应用处理, 黑/白名单系统。 用于监控滚动事件的图形化呈现窗口。 基于 Swift4 构建 免费 附件 Mos.Versions.3.3.2.dmg
一日看尽长安花——听北大教授畅讲中国古代文学
第一讲 关关雎鸠在河洲 ——先秦神话和诗歌标注(黄色) - 位置 129女娲炼石补天处,石破天惊逗秋雨”,第二讲 百家争鸣写春秋 ——先秦散文标注(黄色) - 位置 306为川者决之使导,为民者宣之使言。”标注(黄色) - 位置 466他就发愤努力,一定要做仓库里的老鼠。第三讲 大风起兮云飞扬 ——汉朝的赋和散文标注(黄色) - 位置 538有两个情况可以免死:一是拿出大量的金钱赎身;第二就是受宫刑。标注(黄色) - 位置 539叫《报任安书》:标注(黄色) - 位置 557事情。《史记》写完之后,司马迁就不知所终了。第六讲 独念天地之悠悠 ——隋与初唐文学标注(黄色) - 位置 1346王勃,他在初唐时代是一个非常有才华的少年,他 27岁就死了。真是“千古文章未尽才”。他写《滕王阁序》,标注(黄色) - 位置 1359就是把你的遭遇拉到跟他相同的地步。譬如说,你考试得了 65分,不高兴,我就对你说:不要难过嘛,我不过只考 67分而已,咱们俩都差不多。第七讲 登高壮观天地间 ——盛唐诗歌标注(黄色) - 位置 1406秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。——王昌龄《出塞二首》(其一)标注(黄色) - 位置 1664桃花潭水深千尺,不及汪伦送我情。第八讲 乌衣巷口夕阳斜 ——中唐诗歌标注(黄色) - 位置 1809座中泣下谁最多,江州司马青衫湿。”标注(黄色) - 位置 1892十年磨一剑,霜刃未曾试。第九讲 霜叶红于二月花 ——晚唐诗歌标注(黄色) - 位置 1906停车坐爱枫林晚,霜叶红于二月花。第十讲 大江东去浪淘沙 ——两宋金元文学书签 - 位置 2168标注(黄色) - 位置 2509山盟虽在,锦书难托。标注(黄色) - 位置 2559劝君更尽一杯酒,西出阳关无故人”,标注(黄色) - 位置 2560桃花潭水深千尺,不及汪伦送我情”,
6月书单
5月书单回顾 《鲁滨逊漂流》记 读完 人在孤独的时候,适合读这本书 《被讨厌的勇气》读到 69%, 很有幸读到这本书,6月继续 《围城》读到21%,我好喜欢钱老的比喻句,总是那么别具一格,让人耳目一新 《一日看尽长安花》读到81%, 我喜欢唐诗宋词,就像是喜欢牛奶一样,非常有营养,又让人回味无穷 《牛津通识读本 数学》读完,如果我能早点读到这本书,我就很可能喜欢上数学。 6月书单 《鳗鱼的旅行》刚读到20% 《Googler软件测试之道》刚读到53%, 牛逼的公司,牛逼的测试 《软件测试之道微软技术专家经验总结》10% 《沉默的病人》1% 《一个人的朝圣》0% 《读懂发票》12% 《108个训练让你成为手机摄影达人》 《经济学通识课》 《楚留香传奇》21%
1分钟将微信网页版转为桌面应用
在manjaro上我用的wine版本的微信,然而保存文件时,文件无法保存到manjaro中,而只能保存到wine里面的windows中。 用wine还是很麻烦的,于是我就选择了网页版本的微信。 前提 chrome浏览器 操作步骤: 将微信网页版保存为书签 打开谷歌浏览器的 chrome://apps/ 这个页面 @@ -21,27 +25,7 @@ py.test -k fake
大写锁定键映射为escape
大写锁定键一般都是非常鸡肋的功能。 仅仅一次生效 setxkbmap -option caps:escape 大写锁定键改为esc setxkbmap -option ctrl:nocaps 大写锁定键改为ctrl 永久生效 /etc/X11/xorg.conf.d/90-custom-kbd.conf Section "InputClass" Identifier "keyboard defaults" MatchIsKeyboard "on" Option "XKbOptions" "caps:escape" EndSection 注销或者重启后生效 https://superuser.com/questions/566871/how-to-map-the-caps-lock-key-to-escape-key-in-arch-linuxhttps://wiki.archlinux.org/title/X_keyboard_extension
牛津通识读本:数学(中文版)笔记
笔记本导出牛津通识读本:数学(中文版)蒂莫西·高尔斯 -第二章 数与抽象标注(黄色) - 位置 483重要的只是它们所遵循的规则。标注(黄色) - 位置 486我们通过接受 i作出小小的投资,结果得到了许多倍的回报。
鲁滨逊漂流记 笔记与读后感
第一章 人生的起点标注(黄色) - 位置 44他对我说,只有那些穷到走投无路,或心怀大志的巨富,才会选择出海冒险,想让自己以非凡的事业扬名于世。 -走投无路的穷人剩下的只是作为动物的本能,怎么可能和心怀大志的巨富相提并论呢 -标注(黄色) - 位置 194在去伦敦的路上,以及到了伦敦以后,我内心一直剧烈挣扎,我到底该选什么样的人生道路,我该回家还是该航海? -我相信,每个人都有面对人生道路的艰难抉择的时候。 -第三章 荒岛遇难标注(黄色) - 位置 621“因为突来的欣喜,如同突来的悲伤,都令人难以承受。” -悲伤与快乐都是来自比较。 -第六章 生病以及良心有愧标注(黄色) - 位置 1193大麦刚刚长出来的时候,我曾深受感动,第一次认为那是上帝显示的神迹。不过后来发现那不是神迹以后,所有从它而来的感动就随之消失了。 -无法解释的时候,才会想到鬼神。 -第九章 小船标注(黄色) - 位置 1701我认为,我们之所以感到缺乏和不满足,是因为我们对已经拥有的东西缺少感恩之心。 -看到苹果又出了新手机,macbook pro又出了新款的m1笔记本,对比我本自己目前手中所拥有的东西,你真的珍惜过吗? 得不到的永远在骚动 –《红玫瑰》 -第十章 驯养山羊标注(黄色) - 位置 1797我在统治这岛——或者说,被囚禁在这岛——的第六年的十一月六日 -你在获得无尽的自由的时候,也被自由所囚禁。 -第十七章 叛乱者到访标注(黄色) - 位置 3187你知道,”他说,“以色列的百姓一开始获救离开埃及的时候,人人欢欣鼓舞,但是,当他们在旷野里缺乏面包时,他们甚至背叛了拯救他们的 -人性而已 -第十九章 重返英国标注(黄色) - 位置 3714等医生问明了病因之后,他给我放了血,之后我才放松下来,逐渐好转。 -我曾听过放血疗法,没想到还真的在小说中看过。 -标注(黄色) - 位置 3715我相信,如果当时没有用放血来舒缓我激动的情绪,我早就死了。 -第二十章 星期五与熊之战标注(黄色) - 位置 4018那条船上除了一些必需品,我还给他们送了七个女人去。她们是我亲自鉴别的,有的适于干活,有的适于做老婆,只要那边有人愿意娶她们。 -惊讶了,鲁滨逊在那里找到的女人,是奴隶吗? -标注(黄色) - 位置 4025以及我个人在后续十多年中各种新的冒险和奇遇,我会在我的第二部冒险故事中一一叙述。 -好像没有第二部吧
Posts
官方客服也开始割韭菜
联通官方客服已经开始割韭菜了。 +
Posts
鲁滨逊漂流记 笔记与读后感
第一章 人生的起点标注(黄色) - 位置 44他对我说,只有那些穷到走投无路,或心怀大志的巨富,才会选择出海冒险,想让自己以非凡的事业扬名于世。 +走投无路的穷人剩下的只是作为动物的本能,怎么可能和心怀大志的巨富相提并论呢 +标注(黄色) - 位置 194在去伦敦的路上,以及到了伦敦以后,我内心一直剧烈挣扎,我到底该选什么样的人生道路,我该回家还是该航海? +我相信,每个人都有面对人生道路的艰难抉择的时候。 +第三章 荒岛遇难标注(黄色) - 位置 621“因为突来的欣喜,如同突来的悲伤,都令人难以承受。” +悲伤与快乐都是来自比较。 +第六章 生病以及良心有愧标注(黄色) - 位置 1193大麦刚刚长出来的时候,我曾深受感动,第一次认为那是上帝显示的神迹。不过后来发现那不是神迹以后,所有从它而来的感动就随之消失了。 +无法解释的时候,才会想到鬼神。 +第九章 小船标注(黄色) - 位置 1701我认为,我们之所以感到缺乏和不满足,是因为我们对已经拥有的东西缺少感恩之心。 +看到苹果又出了新手机,macbook pro又出了新款的m1笔记本,对比我本自己目前手中所拥有的东西,你真的珍惜过吗? 得不到的永远在骚动 –《红玫瑰》 +第十章 驯养山羊标注(黄色) - 位置 1797我在统治这岛——或者说,被囚禁在这岛——的第六年的十一月六日 +你在获得无尽的自由的时候,也被自由所囚禁。 +第十七章 叛乱者到访标注(黄色) - 位置 3187你知道,”他说,“以色列的百姓一开始获救离开埃及的时候,人人欢欣鼓舞,但是,当他们在旷野里缺乏面包时,他们甚至背叛了拯救他们的 +人性而已 +第十九章 重返英国标注(黄色) - 位置 3714等医生问明了病因之后,他给我放了血,之后我才放松下来,逐渐好转。 +我曾听过放血疗法,没想到还真的在小说中看过。 +标注(黄色) - 位置 3715我相信,如果当时没有用放血来舒缓我激动的情绪,我早就死了。 +第二十章 星期五与熊之战标注(黄色) - 位置 4018那条船上除了一些必需品,我还给他们送了七个女人去。她们是我亲自鉴别的,有的适于干活,有的适于做老婆,只要那边有人愿意娶她们。 +惊讶了,鲁滨逊在那里找到的女人,是奴隶吗? +标注(黄色) - 位置 4025以及我个人在后续十多年中各种新的冒险和奇遇,我会在我的第二部冒险故事中一一叙述。 +好像没有第二部吧
官方客服也开始割韭菜
联通官方客服已经开始割韭菜了。 前两天10010给我打电话,一个女客服操着浓重的口音,兴奋的给说我是优质客户,然后因为回馈老用户的关系,每个月会多送我2个G的5G高速流量。 我当时很警觉,立马问她这个会对我原来的套餐有影响吗,她说没任何影响,接着殷切的问我要不要办理。我思考了一下,觉得不用花钱,又多了2个G的流量,索性就办理了。 今天我在联通掌上营业厅上查自己的实时话费,突然多出了一项9元的流量叠加包月套餐费。的确对我原来的套餐没有影响,只是多了一个新的业务。😂 @@ -34,21 +54,7 @@ ncp-ciphers "BF-CBC" PS: 今天是我的生日,QQ邮箱又是第一个发来祝福的 苦笑.jpg
不曾忘的一首小诗
我小时候曾去过成都,那时候还没有高速公路,而是九曲回肠的盘山公路。路的一边是看不到底悬崖,另一边上接近90度的峭壁。在峭壁之上,有很多巨石,摇摇欲坠,十分吓人。 深夜时分,车灯蔓延处,连起来放佛是一条天路。 从成都回来的时候,我写下这个小诗,匆匆十年,桃花依旧,物是人非。曾经梦想中的的那个遥远的未来,已然近在咫尺。然而这首小诗,却从未忘记。 -灯光随血液而流动心跳伴坎坷而起伏极目远眺想看见路的时候蓦然回首路的尽头心里头
从/bin/sh到费曼学习法
今天在写一个shell脚本的时候,遇到一个奇怪的报错,说我的脚本有语法错误。 -if [ $1 == $2 ]; then echo ok else echo not ok fi 编译器的报错是说if语句是有问题的,但是我核对了好久遍,也看了网上的例子,发现没什么毛病。 -我自己看了几分钟,还是看不出所以然来。然后我就找了一位同事帮我看看,首先我给他解释了一遍我的脚本是如何工作的,说着说着,他还在思考的时候。我突然发现,我知道原因了。 -这个shell脚本是我从另一个脚本里拷贝的。脚本的第一行是 -#!/bin/sh 原因就在与第一行的这条语句。 -一般情况下我们都是写得/bin/bash, 但是在拷贝的时候,我没有考虑到这个。实际在我的电脑上/bin/sh很可能不是bash, 而是zsh,zsh的语法和bash的语法是不一样的。所以会抱语法错误 -#!/bin/bash 这就是典型的一叶障目,不见泰山。 我觉得我需要买个小黄鸭,在遇到的难以解决的问题时,抽丝剥茧的解释给它听。 -经过这件事情后,我也想到了今天刚学到的一个概念。叫做费曼学习法,据说是很牛逼的学习法,可以非常快的学习一门知识。 -简单介绍一下费曼学习法: -选择一个你要学学习的概念,写在本子上 假装你要把这个概念教会别人 你一定会某些地方卡壳的,当你卡壳的时候,就立即回去看书 简化你的语言,目的是用你自己的语言,解释某个概念,如果你依然还是有些困惑,那说明你还是不够了解这个概念。 费曼曾获得诺贝尔奖,所以上他不是个简单的人。费曼的老师叫惠勒,费曼的学习方法很可能收到惠勒的影响。 -惠勒常常说:人只有教别人的时候,才能学到更多。 -Another favorite Wheelerism is “one can only learn by teaching. 惠勒主义 -惠勒还有一句名言: -去恨就是是学习,去学习是去理解,去理解是去欣赏,去欣赏则是去爱,也许你会爱上你的理论。, -To hate is to study, to study is to understand, to understand is to appreciate, to appreciate is to love. So maybe I’ll end up loving your theory....
Posts
我的传记 - 大学篇
2012年,我从安徽的一个小城市考到上海,前往一个普通的二本院校上大学,学习网络工程。 +
Posts
从/bin/sh到费曼学习法
今天在写一个shell脚本的时候,遇到一个奇怪的报错,说我的脚本有语法错误。 +if [ $1 == $2 ]; then echo ok else echo not ok fi 编译器的报错是说if语句是有问题的,但是我核对了好久遍,也看了网上的例子,发现没什么毛病。 +我自己看了几分钟,还是看不出所以然来。然后我就找了一位同事帮我看看,首先我给他解释了一遍我的脚本是如何工作的,说着说着,他还在思考的时候。我突然发现,我知道原因了。 +这个shell脚本是我从另一个脚本里拷贝的。脚本的第一行是 +#!/bin/sh 原因就在与第一行的这条语句。 +一般情况下我们都是写得/bin/bash, 但是在拷贝的时候,我没有考虑到这个。实际在我的电脑上/bin/sh很可能不是bash, 而是zsh,zsh的语法和bash的语法是不一样的。所以会抱语法错误 +#!/bin/bash 这就是典型的一叶障目,不见泰山。 我觉得我需要买个小黄鸭,在遇到的难以解决的问题时,抽丝剥茧的解释给它听。 +经过这件事情后,我也想到了今天刚学到的一个概念。叫做费曼学习法,据说是很牛逼的学习法,可以非常快的学习一门知识。 +简单介绍一下费曼学习法: +选择一个你要学学习的概念,写在本子上 假装你要把这个概念教会别人 你一定会某些地方卡壳的,当你卡壳的时候,就立即回去看书 简化你的语言,目的是用你自己的语言,解释某个概念,如果你依然还是有些困惑,那说明你还是不够了解这个概念。 费曼曾获得诺贝尔奖,所以上他不是个简单的人。费曼的老师叫惠勒,费曼的学习方法很可能收到惠勒的影响。 +惠勒常常说:人只有教别人的时候,才能学到更多。 +Another favorite Wheelerism is “one can only learn by teaching. 惠勒主义 +惠勒还有一句名言: +去恨就是是学习,去学习是去理解,去理解是去欣赏,去欣赏则是去爱,也许你会爱上你的理论。, +To hate is to study, to study is to understand, to understand is to appreciate, to appreciate is to love. So maybe I’ll end up loving your theory....
我的传记 - 大学篇
2012年,我从安徽的一个小城市考到上海,前往一个普通的二本院校上大学,学习网络工程。 在很多人以为,上大学不就是玩吗?其实也基本属实,特别是像我们这种普通的学校。但是我的大学也并没有荒废,这其实也并不是说明我就多优秀。 这其中的原因,说来也是蛮有意思。我打游戏太菜,而且心理素质不好,且又没有坚持不懈的毅力。所以我就早早的放弃了英雄联盟这种游戏。 一个大学生,一旦放弃了打游戏,其实他就剩余了很多空余的时间。多余的时间能干生么呢? 选择不多。1. 可以选择谈谈恋爱。但是一来我囊中羞涩,而来也没有什么长得比较漂亮,一见钟情的女生。所以谈恋爱这事就放下了。 剩下的选择便只有一个,学习。 @@ -72,7 +86,7 @@ 查到sf上正好有相关的问题,可能是在tmux里面PATH环境变量引起的问题。 问题给的建议是把下面的代码写入.bashrc中, If you’re on a Mac and have been wondering why /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin keeps getting prepended to PATH when you run tmux, it’s because of a utility called path_helper that’s run from your /etc/profile file. -You can’t easily persuade tmux (or rather, bash) not to source /etc/profile (for some reason tmux always runs as a login shell, which means /etc/profile will be read), but you can make sure that the effects of path_helper don’t screw with your PATH....
#shazam算法分析
参考 http://coding-geek.com/how-shazam-works/ https://blog.csdn.net/yutianzuijin/article/details/49787551 http://hpac.cs.umu.se/teaching/sem-mus-17/Reports/Froitzheim.pdf https://github.com/sfluor/musig
all
如何选择,汉王Clear7与文石Leaf3
购买选择 我的kindle pw4已经用了快三年了,机器性能有些不足,电池也有些不够用了。正逢双十一之际,我觉得可以买一个开放系统的电纸书来用用。 +
all
解决 VsCode pwsh终端环境变量不生效问题
我在系统的环境变量设置里,用户和系统中,都加入了ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/这个环境变量。 +单独打开windows Terminal应用,使用 env | grep ELE 是能搜到我设置的环境变量的。但是在vscode中,这个环境变量不存在。 +我尝试了以下几个方法 +重启电脑,无效 配置"terminal.integrated.persistentSessionReviveProcess": "never", 然后重启电脑,无效 在终端直接执行code ., 在终端打开vscode, 依然无效 因此,我想起了之前配置的pwsh的配置文件。 可以使用code $PROFILE, 打开pwsh的配置文件。 +然后再配置文件中设置环境变量, 之后重启vscode, 环境变量就正常能读取到了。 +# 文件名 Microsoft.PowerShell_profile.ps1 $env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/" 参考 https://www.zhihu.com/question/266858097
如何选择,汉王Clear7与文石Leaf3
购买选择 我的kindle pw4已经用了快三年了,机器性能有些不足,电池也有些不够用了。正逢双十一之际,我觉得可以买一个开放系统的电纸书来用用。 买开放系统的另一个原因是自从亚马逊退出中国后,我用微信读书比较多,也买了微信读书的会员。 开放系统基本上都是基于安卓系统定制的,可以选择的厂商比较多。 最终筛选下来,我选择了汉王clear7和文石leaf3, 我下单了两个,觉得先体验一下,然后在退一个。 @@ -68,7 +73,7 @@ 性能差,首页渲染慢,常常要等很久,首页才能打开 产品定位混乱,随意更改用户数据 我记得有时候我把知识库升级成了空间,过了一段时间,不知道为什么空间由变成了知识库。 数字花园这个概念真的很烂。我好好的个人主页,某一天打开,大变样,换了个名字,叫做数字花园。甚至没有给用户一个选择保留老版本的个人主页的权利。太不尊重用户了!! 就好像你下班回家,看见房门被人撬开,你打开房门,看见有人在你的客厅种满大蒜,然后还兴高采烈的告诉你,看,这是您的数字菜园!多好,以后不用买蒜了。 会员的流量计费规则, 或许现在的计费规则已经变了,我也没有再充会员,但是再以前。即使是会员,也是按流量计费的。什么叫按流量计费,假如你的一篇博客里上传了一张1mb的图片,即使你后来把这个图片删了,这1mb的流量还是会存在。而且流量是一直往上涨的,还不像运营商,每月一号给你清零一次的机会。
模块传参的重构
写过opensips脚本的同学,往往对函数的传参感到困惑。 例如: ds_select_dst()可以接受整数或者值为正数的变量作为第一个参数,但是nat_uac_test()的第一个参数就只能是整数,而不能是变量 为什么rl_check()可以接受格式化的字符串,而save()只能接受字符串。 为什么ds_select_dst("1", "4") 作为整数也要加上双引号? 为什么变量要加上双引号? ds_select_dst("$var(aa)", "4") 为什么t_on_branch("1")路由的钩子要加上双引号? 为什么route(go_to_something);这里又不需要加上引号? ds_select_dst("1", "0"); $var(aa)=1; ds_select_dst("$var(aa)", "0"); rl_check("gw_$ru", "$var(limit)"); #格式化的gw_$ru save("location"); #单纯的字符串作为参数 从3.0开始,传参可以更加自然。 -整数可以直接传参,不用加双引号 do_something(1, 1); 输入或者输出的$var(), 不用加双引号,加了反而会报错 do_something($var(a), $var(b)); 格式化字符串,需要加双引号 do_something(1, "$var(bb)_$var(b)"); 参考 https://blog.opensips.org/2019/11/05/the-module-function-interface-rework-in-opensips-3-0/ https://www.opensips.org/Documentation/Script-Syntax-3-0#
Pdf学习资料
TelNYX.pdf OpenSIPS 2.3 mediasoup Cutting Edge WebRTC Video COnferencing FreeSWITCH-driven routing in OpenSIPS Voicenter: Contact center on Steroids Vlad_Paiu-Distributed_OpenSIPS_Systems_Cluecon14.pdf Vlad_Paiu-OpenSIPS_Summit_Austin_2015-Async.pdf Ionut_Ionita-OpenSIPS_Summit2017-Capturing_beyond_SIP FLAVIO_GONCALVES-Fraud_in_VoIP_Today.pdf Alexandr_Dubovikov-OpenSIPS_Summit2017-RTC_Threat_Intelligence_Exchange.pdf OpenSIPS_LoadBalancing.pdf Vlad_Paiu-OpenSIPS_Summit_2104-OpenSIPS_End_User_Services.pdf Razvan_Crainea-OpenSIPS_Summit2017-From_SIPI_Trunks_to_End_Users.pdf Razvan_Crainea-OpenSIPS_Summit-Scaling_Asterisk.pdf Vlad_Paiu-OpenSIPS_Summit-Service_Enabling_for_Asterisk.pdf Jonas_Borjesson-OpenSIPS_Summit_Austin_2015.pdf Michele_Pinasi-OpenSIPS_Summit2017-How_we_did_VoIP.pdf Bogdan_Iancu-OpenSIPS_Summit_Keynotes.pdf Giovanni_Maruzselli-OpenSIPS_Summit2017-Scaling_FreeSWITCHes.pdf Maksym_Sobolyev-OpenSIPS_Summit2017-Sippy_Labs_update.pdf docker-cluster.pdf voip malware attack tool .pdf Bogdan_Iancu-OpenSIPS_Summit-OpenSIPS_2_1.pdf Pete_Kelly-OpenSIPS_Workshop_Chicago_2015-Calling_Cards_B2BUA.pdf Bogdan_Iancu-OpenSIPS_Summit-keynotes.pdf Alex_Goulis-Opensips_CNAME.pdf OpenSIPS_2.0_Framework.pdf Norman_Brandinger-OpenSIPS_Summit_2014-Advanced_SIP_Routing_with_OpenSIPS_modules.pdf
all
西安之旅 不仅有羊肉泡馍 也有长恨歌
一年过半以后,偶然打开微信公众号,看到草稿箱里的篇文章。我才回想起去年带女友去西安的那个遥远的夏天。 +
all
Pdf学习资料
TelNYX.pdf OpenSIPS 2.3 mediasoup Cutting Edge WebRTC Video COnferencing FreeSWITCH-driven routing in OpenSIPS Voicenter: Contact center on Steroids Vlad_Paiu-Distributed_OpenSIPS_Systems_Cluecon14.pdf Vlad_Paiu-OpenSIPS_Summit_Austin_2015-Async.pdf Ionut_Ionita-OpenSIPS_Summit2017-Capturing_beyond_SIP FLAVIO_GONCALVES-Fraud_in_VoIP_Today.pdf Alexandr_Dubovikov-OpenSIPS_Summit2017-RTC_Threat_Intelligence_Exchange.pdf OpenSIPS_LoadBalancing.pdf Vlad_Paiu-OpenSIPS_Summit_2104-OpenSIPS_End_User_Services.pdf Razvan_Crainea-OpenSIPS_Summit2017-From_SIPI_Trunks_to_End_Users.pdf Razvan_Crainea-OpenSIPS_Summit-Scaling_Asterisk.pdf Vlad_Paiu-OpenSIPS_Summit-Service_Enabling_for_Asterisk.pdf Jonas_Borjesson-OpenSIPS_Summit_Austin_2015.pdf Michele_Pinasi-OpenSIPS_Summit2017-How_we_did_VoIP.pdf Bogdan_Iancu-OpenSIPS_Summit_Keynotes.pdf Giovanni_Maruzselli-OpenSIPS_Summit2017-Scaling_FreeSWITCHes.pdf Maksym_Sobolyev-OpenSIPS_Summit2017-Sippy_Labs_update.pdf docker-cluster.pdf voip malware attack tool .pdf Bogdan_Iancu-OpenSIPS_Summit-OpenSIPS_2_1.pdf Pete_Kelly-OpenSIPS_Workshop_Chicago_2015-Calling_Cards_B2BUA.pdf Bogdan_Iancu-OpenSIPS_Summit-keynotes.pdf Alex_Goulis-Opensips_CNAME.pdf OpenSIPS_2.0_Framework.pdf Norman_Brandinger-OpenSIPS_Summit_2014-Advanced_SIP_Routing_with_OpenSIPS_modules.pdf
西安之旅 不仅有羊肉泡馍 也有长恨歌
一年过半以后,偶然打开微信公众号,看到草稿箱里的篇文章。我才回想起去年带女友去西安的那个遥远的夏天。 如今女友已经变成老婆,这篇文章我才想起来发表。 day 1 钟楼 鼓楼 回民街 那是六月末的时候,和女友一起坐火车去了趟西安。 为什么要去西安呢?据吃货女友说,西安有非常多的好吃的。所以人生是必须要去一趟的。 diff --git a/tags/index.html b/tags/index.html index 43a3bb8e3..94a35fb8d 100644 --- a/tags/index.html +++ b/tags/index.html @@ -1,6 +1,6 @@