接口压力测试

ab安装 apt-get install apache2-utils

2019-10-25 16:12:59 · 1 min · Eddie Wang

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. Output files will have the same format as the input file where possible and not overriden by any of various means including providing output format options. -v|--volume FACTOR Input file volume adjustment factor (real number) --ignore-length Ignore input file length given in header; read to EOF -t|--type FILETYPE File type of audio -e|--encoding ENCODING Set encoding (ENCODING may be one of signed-integer, unsigned-integer, floating-point, mu-law, a-law, ima-adpcm, ms-adpcm, gsm-full-rate) -b|--bits BITS Encoded sample size in bits -N|--reverse-nibbles Encoded nibble-order -X|--reverse-bits Encoded bit-order --endian little|big|swap Encoded byte-order; swap means opposite to default -L/-B/-x Short options for the above -c|--channels CHANNELS Number of channels of audio data; e.g. 2 = stereo -r|--rate RATE Sample rate of audio -C|--compression FACTOR Compression factor for output format --add-comment TEXT Append output file comment --comment TEXT Specify comment text for the output file --comment-file FILENAME File containing comment text for the output file --no-glob Don't `glob' wildcard match the following filename AUDIO FILE FORMATS: 8svx aif aifc aiff aiffc al amb amr-nb amr-wb anb au avr awb caf cdda cdr cvs cvsd cvu dat dvms f32 f4 f64 f8 fap flac fssd gsm gsrt hcom htk ima ircam la lpc lpc10 lu mat mat4 mat5 maud mp2 mp3 nist ogg paf prc pvf raw s1 s16 s2 s24 s3 s32 s4 s8 sb sd2 sds sf sl sln smp snd sndfile sndr sndt sou sox sph sw txw u1 u16 u2 u24 u3 u32 u4 u8 ub ul uw vms voc vorbis vox w64 wav wavpcm wv wve xa xi PLAYLIST FORMATS: m3u pls AUDIO DEVICE DRIVERS: alsa EFFECTS: allpass band bandpass bandreject bass bend biquad chorus channels compand contrast dcshift deemph delay dither divide+ downsample earwax echo echos equalizer fade fir firfit+ flanger gain highpass hilbert input# ladspa loudness lowpass mcompand mixer* noiseprof noisered norm oops output# overdrive pad phaser pitch rate remix repeat reverb reverse riaa silence sinc spectrogram speed splice stat stats stretch swap synth tempo treble tremolo trim upsample vad vol * Deprecated effect + Experimental effect # LibSoX-only effect EFFECT OPTIONS (effopts): effect dependent; see --help-effect 参考 http://sox.sourceforge.net/sox.html#OPTIONS

2019-10-22 16:44:31 · 4 min · Eddie Wang

MySql索引

prd是表名,agent是表中的一个字段,index_agent是索引名 create index index_agent on prd(agent) # 创建索引 show index from prd # 显示表上有哪些索引 drop index index_agent on prd # 删除索引 创建索引的好处是查询速度有极大的提成,坏处是更新记录时,有可能也会更新索引,从而降低性能。 所以索引比较适合那种只写入,或者查询,但是一般不会更新的数据。

2019-10-22 10:36:24 · 1 min · Eddie Wang

关于v语言: 越是漂亮的语言,越会骗人

今天逛github trending, 发现榜首有个项目,叫做v语言。https://github.com/vlang/v 看了介绍,说这个语言非常牛X,几乎囊括了所有语言的长处。性能、编译耗时、内存使用都是碾压其他语言。 但是,要记住张无忌娘说过的一句话:越是漂亮的女人,越会骗人。 每一门语言都是由特定的使用场景,从而则决定了该语言在该场景下解决问题的能力。 不谈使用场景,而仅仅强调优点,往往是耍流氓。 你看JavaScript一出生,就是各种问题,但是在浏览器里,JavaScript就是能够一统天下,无人能够掩盖其锋芒。

2019-10-21 21:15:29 · 1 min · Eddie Wang

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.) ...

2019-10-15 22:34:01 · 8 min · Eddie Wang

Restful API 架构思考

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的插入、查询、更新、删除操作。 4. 状态码 1xx - informational; 2xx - success; 3xx - redirection; 4xx - client error; 5xx - server error. 5. RESTful架构设计 GET /users - get all users; GET /users/123 - get a particular user with id = 123; GET /posts - get all posts. POST /users. PUT /users/123 - upgrade a user entity with id = 123. DELETE /users/123 - delete a user with id = 123. 6. 文档 ...

2019-10-15 22:32:40 · 1 min · Eddie Wang

掌握谷歌搜索高级指令

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` +-“OR 指令可以组合,完成更复杂的查询 beach -sandy +albert +nathaniel ~ 包含A, 并且包含B的近义词 A ~B github ~js .. 区间查询 AB之间 A..B china 1888..2000 * 匹配任意字符 node* java site: 站内搜索 A site:B filetype: 按照文件类型搜索 A filetype:B csta filetype:pdf 3. 关键词使用 方法 说明 示例 列举关键词 列举所有和搜索相关的关键词,并且尽量把重要的关键词排在前面。不同的关键词顺序会导致不同的返回不同的结果 书法 毛笔 绘画 不要使用某些词 如代词介词语气词,如i, the, of, it, 我,吗 搜索引擎一般会直接忽略这些信息含量少的词 大小写不敏感 大写字符和小写字符在搜索引擎看没有区别,尽量使用小写的就可以 4. 特殊工具 4.1. define 快速返回关键词定义 ...

2019-10-15 22:30:27 · 1 min · Eddie Wang

如何成为从培训班里出来的牛人?

1. 培训行业的现状和问题 进入培训班学习可能有一下两个原因: 想转行 学校里学的东西太过时了,需要深入学习本行业的知识 培训的行业的核心思想都是:如何快速的让你能够面试通过 老师教的东西大多是一些面试必须要问的一些知识,做的项目也应该都是市面上比较火的项目。这么做的不利之处有以下几点: 局限性:知识局限于教师的授课范围,知识面窄 扩展性:快餐式学习管饱不管消化,很多知识吸收不高,无法举一反三 系统性:没有系统的整体知识体系 所以这些因素可能会让用人不太喜欢培训出来的应聘者,而往往希望刚毕业的应届生。但是,培训行业出来的应聘者,也不乏国士无双的牛逼人物。 2. 如何成为培训出来的牛人? 无论在哪个行业,自学都是必不可少的事情。毕业不是学习的终点,而应该是起点。你和技术牛人之间的距离或许并不遥远,可能只是一个芭蕉扇的距离。 2.1. 读权威书籍,扎实理论基础 每个行业都有一些经历时间考验而熠熠生辉的经典数据,例如在前端行业。我认为下面两本书是必须要读完一本的。 基础 JavaScript高级程序设计 JavaScript权威指南 进阶 JavaScript语言精粹 JavaScript忍者秘籍 You Don’t Know JS JS函数式编程指南 2.2. 动手能力,闲话少说,放码过来 各种demo啊,效果啊,有时间自己都可以撸一遍,放在github上,又不收钱,还能提高动手能力。 2.3. 数据结构 差劲的程序员操心代码,牛逼的程序员操心数据结构和它们之间的关系。 一一Linus Torvalds, Linux 创始人 优秀的数据结构,可以节省你80%的编码时间。差劲的数据结构,你需要花大量的时间去做各种高难度动作的转换,一不小心,数据库就要累的气喘如牛,停机罢工。 2.4. 知识积累,从博客开始 如果你已经在某个行业工作个两三年,一篇像样的博客都没有。 那我觉得你可能是个懒人。因为几乎很少写东西。 我觉得你可以是个自私的人。因为做计算机行业的,谁没有用过别人造的轮子。即使你没有造轮子的能力,即使你给出一个问题应该如何解决的,至少你对计算机行业也作出了你的贡献。 2.5. 互联网的基石 TCP IP 计算机行业是分层的,就像大海一样,海面上的往往都是惊涛骇浪,暴风骤雨,各种框架层出不穷,争奇斗艳。当你深入海底,你会发现,那里是最平静的地方。而TCP IP等协议知识,就是整个互联网大航海时代的海底。互联网行业如此多娇,引无数框架竞折腰。浪潮之巅者成为行业热点,所有资源会喷薄涌入,失去优势被替代者,往往折戟沉沙铁未销。总之,越是上层,竞争越激烈,换代越快。 但是底层的TCP/IP之类的知识,往往几十年都不会有多大的改变。而且无论你从事什么语言开发,只要你涉及到通信了,你就需要TCP/IP的知识点,不过你不清楚这些知识点,你可以随时给自己埋下定时炸弹。 这个错误我也犯过,你可以看我的犯错记录:哑代理 - TCP链接高Recv-Q,内存泄露的罪魁祸首。 关于TCP/IP, 推荐一下书籍 基础 图解TCP/IP : 第5版 图解HTTP 进阶 HTTP权威指南 2.6. 工具的威力 你用刀,我用枪,谁说谁能打过谁。原始社会两个野蛮人相遇,块头大的,食物多,可以拥有更多的繁衍后代的权利。但是当一个野蛮人知道用刀的威力时,他就不会害怕胳膊比较粗的对手了。 举例来说,前端开发免不了有时需要一个静态文件服务器,如果你只知道阿帕奇,那你的工具也太落后了。你可以看看这篇文章:一行命令搭建简易静态文件http服务器 当你想要更偷懒,想要不安于现状时,你会找到更多的厉害的工具。 ...

2019-10-15 22:25:56 · 1 min · Eddie Wang

你不知道的专业化道路

从分工到专业化 分工提高生产效率,专业化提高个人价值。很多人都认为,一旦我们进入了某一行,我们就应该在这个行业深挖到底。例如我是做前端的,我就会去学习各种前端的知识点,各种层出不穷的框架。我总是在如饥似渴的希望自己能够保持在深入学习的状态,我不想哪一天自己突然out了。 专业化的危机在哪? 以前我在上初中的时候,就稍稍的学习了一点点ActionScript的知识。可能有些人不知道ActionScript是干嘛的,它是在flash的环境中工作的,可以在flash里做一些动画和特效之类的。那时候flash是很火的技术,几乎所有的网站都是有flash的,所以会ActionScript语言的程序员,工资都不低。 但是,你现在还听过什么ActionScript吗? 它的宿主环境flash都已经被淘汰了,皮之不存毛将焉附。可想而知,flash的淘汰,同时也让时长淘汰了一批在ActionScript的专家。 所以,专业化并不是一个安全的道路。准确来说,世界上本来就没有安全的路。大多说认为这条路安全,是因为他们总是以静态的眼光看这条路。说点题外话,如果你书读多了,你会发现,其实一直在你思想里的那些观念,那些故事,往往都是忽悠人的。你可以看看我的一个书单:2018年我的阅读计划。 从企业的角度考虑,每个老板都想招在某一方面专家。但是从个人的角度考虑,如果你在专业化的道路钻研的非常深,或许有时候你应该放慢脚步,找个长椅,坐着想一想,如果你前面马上就是死路了,你应该怎么办? 我们应该怎么办? 世界上没有安全的路,世界上也没有一直安全的职业。一个职业的火爆,往往因为这个行业的火爆。而永远也没有永远火爆的行业,当退潮时,将会有大批的弄潮儿会搁浅,干死,窒息…… 除去环境造成的扰动,人的身体也会随着年龄会慢慢老化。 你可以想象一下,当你四十多岁时。那些新来的实习生,比你要的工资低,比你更容易接受这个行业的前沿知识,比你更加能加班,比你能力更强时,比你更听话时。你的优势在哪里?我相信到那时候,你的领导会毫不犹豫开了你。 在此,你要改变。我给出以下几个角度,你可以自行延伸。 开始锻炼身体 这是一切的基石 搞一搞副业,学习一下你喜欢的东西,你可以去深入学学如何做菜,如何摄影等等 学习理财知识,这是学校从没教你的,但是却是非常重要的东西 读书,越多越好 参考文献 专业主义 日 大前研一 富爸爸穷爸爸 罗伯特·清崎 / 莎伦·莱希特 国富论 英 亚当·斯密 失控 乌合之众 法 古斯塔夫·勒庞 未来世界的幸存者 阮一峰 新生 七年就是一辈子 李笑来

2019-10-15 22:25:18 · 1 min · Eddie Wang

我苦苦寻找诡异的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 本质上不过是语法糖,它负责监听用户的输入事件以更新数据,并特别处理一些极端的例子。 ...

2019-10-15 22:22:24 · 1 min · Eddie Wang