Secbone 发布的文章

关于 bash prompt 的相关知识

PS1/PS2/PS3/PS4 及 PROMPT_COMMAND 的意义 PS1: 命令行提示符 PS2: 延续命令行提示符 PS3: 脚本中 select 语句提示符 PS4: 调试模式下脚本命令提示符 (set -x 提示所执行命令) PROMPT_COMMAND: Bash shell 在显示 PS1 提示符前所执行的命令 提示符转义码 Bash shell 允许用户在提示符中使用以下转义符号: \a: 响铃 (ASCII 0x07) \d: 日期 (格式: 星期 月 日) \D{format}: 以指定格式显示当前日期 (格式字符串将传递给 strftime() 函数,若为空则使用本机标准格式) \e: ESC, (ASCII 0x1B) \h: 本机名称 (从左至右直到遇到 '.') \H: 本机名称 \j: shell 当前正在处理任务号 \l: shell 终端设备基本名称 \n: 换行 (ASCII 0x0A) \r: 回车 (ASCII 0x0D) \s: shell 名, $0 的基本名 \t: 当前时间, 24小...

The Wall

その日、人类は思い出した。 やつらに支配されていた恐怖を… 鸟かごの中に囚われていた…屈辱を… 故事发生在某个东方神秘国度,这里的人们由于一些神秘力量的影响,他们每天吃的东西不是普通是食物,而是数据信息。他们生活的区域被一堵看不见摸不着的墙包围着。你可能会问:既然看不见也摸不到,那人们是怎么知道有这样一堵墙呢? 关于这个问题,并没有文字资料可以证明它的存在,不过生活在其中的人们却分明感受到,它,一直在... 起源 据一个不存在的网站记载,这堵墙起步建造于 1998 年,然后一直到 2002 年的时候,有一名西方记者在一篇文章中描述了这堵墙,文章中用了 Great Firewall 来称呼它,后来就有了 GFW 这个缩写来代指它并广为流传。 像其他所有的城墙一样,GFW 的主要作用也是防御外部的威胁和对来往的旅人进行盘查。不过不同的是,GFW 防御和盘查的不是人,而是信息,也就是人们每天吃的粮食。它主要过滤一些 政治敏感内容、色情 和 青少年犯罪 等内容,当然还包括一些国家敏感信息的监控。而这些数据如果一不小心没有被过滤到被墙内的人误食了...

关于 js 的取整

今天在写一个倒计时的时候,突然想起一个问题,“对于 js 的小数取整,那种方法效率最高呢?” 然后我就把我能想到的取整的方法做了一下测试,大概是这个样子 Math.floor(-100/3) parseInt(-100/3) ~~(-100/3) (-100/3 >> 0) (-100/3 | 0) ( -100 - (-100%3) ) / 3 然后我把每种方法跑了 10^7 次,取了一下平均值,然后发现: Math.floor 耗时 0.0000197 ms parseInt 耗时 0.0000225 ms ~~(-100/3)、(-100/3 >> 0)、(-100/3 | 0) 三个耗时基本相同,大概都是 0.0000029ms 的样子 ( -100 - (-100%3) ) / 3 耗时 0.0000155ms 基本可以看出,三个位运算的方法耗时最少,而且少很多,那么是不是我们就可以使用这三种方法了呢? 在说答案之前,我们先来看看他们都干了什么吧 首先,位运算为什么能取整? 因为 js 是弱类型的语言...

Javascript 中的装饰器

前言 在 ES6 中增加了对类对象的相关定义和操作(比如 class 和 extends ),这就使得我们在多个不同类之间共享或者扩展一些方法或者行为的时候,变得并不是那么优雅。这个时候,我们就需要一种更优雅的方法来帮助我们完成这些事情。 Python 中的装饰器 decorators 即 装饰器,这一特性的提出来源于 python 之类的语言,如果你熟悉 python 的话,对它一定不会陌生。那么我们先来看一下 python 里的装饰器是什么样子的吧: A Python decorator is a function that takes another function, extending the behavior of the latter function without explicitly modifying it. 装饰器是在 python 2.4 里增加的功能,它的主要作用是给一个已有的方法或类扩展一些新的行为,而不是去直接修改它本身。 听起来有点儿懵,“show me the code !” def decorato...

safari 10 下 rem 失效问题

上个月苹果更新的系统版本,包括 iOS 10 和 MacOS,伴随更新的还有新的 safari。 新版本上来必然会多多少少存在一些坑。还好上个月有段时间在休假,并没有踩到坑。 但是,就在昨天,终于被我踩到了。。。。 大概是这样的: 公司的项目会使用 rem 来做不同屏幕的适配,然后昨天做完一个页面以后,发现在 chrome 下调试没有任何问题,自己的安卓手机也没有问题,但是到了 iphone 上就会出现:上半部分样式正常,下半部分 rem 布局的样式全部都缩小了! 从来没有遇到过同一个页面里面,一部分样式没问题,另一部分样式有问题的情况。。 切换各种浏览器测试发现,只有 safari 10 下会出现这个问题,包括 iOS 下、MacOS 下 和使用 safari 10 的微信浏览器,都会出现这样的问题。。。 好吧,经过了一晚上蛋疼的排查问题,终于找到了原因: 原来是因为一个 summary 标签!!!! 最终发现在 summary 标签前面的样式都没有问题,后面的元素全部缩小了,而把 summary 标签一去掉,样式就全部正常了! 然后自己...

mac 如何升级 vim 8

话说最近比较大的是应该就是 vim 更新出了一个时隔 N 年的版本 8.0,其实我不用 vim 也好长时间了,也只有在登录远程服务器或者一些比较特殊的情况下才用用 vim,但是这依然不影响 vim 在我心目中的地位,我认为它依然是一个很棒的编辑器。那么它这次的更新自然也不会错过,忍不住赶紧更新一下自己的 vim。 mac 是默认装有 vim 的,我的貌似是 7.4 版本,那么下面就开始我的神奇的更新之旅。。。 在 mac 下更新这种命令行工具,最自然想到的就是 homebrew,赶紧来试一下 brew update brew install macvim 嗯嗯,貌似一切很顺利,但是,这样并不行,你再次查看 vim 版本的时候发现,还是 7.4 这是因为系统自带的 vim 是在 /usr/bin/vim 这里,而 homebrew 安装的是在 /usr/local/bin/vim 这里,所以并没有覆盖掉系统的 vim,所以现在调用的还是系统版本的 vim 那么,要怎么办呢? 通常就是两种办法,一个是在 .bashrc 或者 .bash_pr...

关于字体那些事儿

事情起源于一次 github 的改样式... 某一天安然君告诉我:“你看 github 是不是改字体大小了?”,然后我就兴冲冲地去看了一眼,噫!丑死了! 但是毕竟是作为一条职业前端,我还是很自然的点开了它的样式代码,看了一眼是这样儿的: font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" 哎?好像好多没见过的?那个 -apple-system 是个什么东西,好像没有见过? 遇到不认识的为什么不去问一下神奇海螺呢? 于是,我就去搜索了一下,然后事情大概是这样的: 从名字上就可以看出来,-apple-system 是表示使用苹果系统默认的字体,那么,它具体是指的什么字体呢? 大概了解了一下苹...

safari 下旋转动画的迷之 bug

前几天在写一个活动页的时候发现一个你一样问题,先还原一下现场 页面中有一个地方要做一个一直旋转的动画,类似转盘的效果,很简单是不是?是的! .rotate{ animation: rotate 1s linear infinite; } @keyframes rotate{ from{ transform: rotate3d(0,0,1,0deg) } to{ transform: rotate3d(0,0,1,360deg) } } 简洁明了,有木有,还带 3D 加速,完美是不是? 然而。。。 为什么 safari 下并不动。。。。 = =!,老夫可是最新的 safari 9.1.1 呀! 额,这就尴尬了~ 请教一下同事,然后试着改成了这样 @keyframes rotate{ 0% { transform: rotate3d(0,0,1,0deg) } 50% { transform: rotate3d(0,0,1,180deg) } 100% { transform: rot...

用 mocha 和 istanbul 测试你的 Babel 应用

补一篇文章,攒了好几篇想写的内容,今天先补一篇,然后慢慢补 单元测试这种东西大家都很熟悉了,它可以很方便的帮助你进行自检,增加代码的稳定性,同时可以帮助我们完成持续集成。mocha 大家也比较熟悉了,这里也不说了 先说一下 istanbul 这货吧,没错,就是伊斯坦布尔,其实就是一个检测代码覆盖率的一个工具,然后 Github 长这样儿 istanbul 这货可以帮你检测你各个地方的 js 代码,服务端、浏览器端都可以,也可以生成多种格式的检测报告。好吧,我知道你们对这个不感兴趣,那就直接来试试喽~ npm install -g istanbul 安装完成后,我们就可以去我们的代码目录试一下啦~ istanbul cover test.js 如果你在使用 mocha 也可以这样: istanbul cover mocha 然后你就会发现,你的文件夹下出现了一个 coverage 的文件夹。对了!这就是我们的检测报告~ 报告里会标注你的测试覆盖率以及那些代码没有被覆盖到,是不是感觉一下子就清楚了要完善什么了呢,哈哈哈哈哈 然后有小伙伴会...

在 ajax 跨域请求中携带 cookie 做身份认证

好吧,一如既往的短篇记录性文章,记下坑供查阅 原因大概是这样的,公司有很多内网的服务系统,同属于同一个主域,但是是不同的子域,然后呢,当在一个系统需要调用另一个系统的时候,就会出现跨域的问题。所以呢,我们打算写一个通用代理程序来做中转,然后呢,先简单贴一下代码吧 var server = http.createServer(function(request, response) { ... var options = { hostname: address.hostname, port: address.port || 80, path: address.path, method: request.method, headers: request.headers, }; options.headers.host = address.host; var proxy = http.request(options, fun...