分类目录归档:笔记

【C++】lambda表达式笔记

我刚开始学C++的时候似乎还没有lambda表达式这东西。这个blog的第一篇可见文章在2012年8月,还有一些更早的都是些垃圾水文被我删掉了,开设这个blog的时间我记得在学了web一段时间之后,在那之前我也在各种免费php空间搭过wordpress用过一段时间,后来废了。在更之前我还坚持用自己写的“佳佳空间”当blog用了很长一段时间(虽然后来终于还是放弃了,因为写得太垃圾)。推算下来可能要到9年多前了,大概就是小学的时候?反正是在2011年之前,而lambda表达式是C++11标准里的,所以那时候应该确实没有这东西。

 

好了回到正题。

C++的lambda表达式和js里的有点不一样,它可以自己选择是否打通函数范围之外的上下文,以使用外面的变量。还可以选择如何打通(引用外部变量和复制外部变量)。

lambda函数的结构长这样

C++20又加了一个形式,暂时就不写在这了,毕竟2020年还没到呢不着急,而且也没编译器实现了。

继续阅读【C++】lambda表达式笔记

【Javascript】获取触发message事件的源iframe

翻了翻message事件的属性,没找到可以直接获取事件源iframe的属性,想想也没毛病,毕竟事件也可以是其它窗口post过来的。于是想了个曲线方法。

先让发送源获取焦点,然后获取焦点元素。

如果不想影响焦点的话,可以遍历一遍所有的iframe

 

【Javascript】base32编解码

用javascript写了个base32的编解码函数

【node】拦截process.stdout和process.stderr

由于解决这个问题花了我一些时间,所以记录一下说不定可以帮到其他人。

process.stdout是一个getter,所以我们不能用普通的替换来换掉process.stdout来拦截写入它的数据。同时,process.stdout是一个Writable Stream,所以也不能简单地直接从它里面获取写入的数据。

 

一开始我花了不少时间来研究怎么可以从这个Writable Stream里读出数据,但是这似乎太麻烦了,然后我甚至想到了利用child process来拦截数据。最后发现其实很简单,我们只要重新定义这个Getter就可以了。

这样我们就成功拦截到标准输出了,要注意,这段代码必须放在有任何输出之前,一旦在之前有了内容输出,它就没用了。

然后我们就可以自己决定怎么处理stdout了比如:

 

 

同理,process.stderr也可以这样拦截

【Javascript】清空数组

上面的清空方式虽然非常不合字面含义,不过还确实清空了。。。

 

 

 

这方法倒是符合字面含义了,不过这个操作会返回整个一个新的数组,所以可能性能不如上面的一种方法。

【Javascript】不要试图给字符串添加属性

虽然我以前就吃过一次这个亏,不过昨天又犯这错误了。

虽然js里万物皆对象,不过也不是啥对象都可以加属性的,比如字符串。

所以字符串是没法添加属性的,同理,数字、Boolean也不能添加属性。

我发现它们都是传值型变量诶。因为本体只有一个值,所以不能添加属性吗。

让Windows在高DPI显示屏上正确显示

我在macbook上虚拟机里装了个Win10,装好了之后发现,一切都是那么的小,小的几乎看不清。因为这个macbook是Retina屏的,所以dpi比较高,于是东西都变小了。

我的标题里不直接写win10是因为我也不知道自定义项目大小是从哪个系统开始有的,没有这个功能的系统很简单,就是把分辨率按比例调低即可。

继续阅读让Windows在高DPI显示屏上正确显示

【Javascript】数字添加千分位符函数

这种函数虽然百度一大把,不过我还是准备自己用很简单的代码写一个。现在访客暴涨然后我发现了在线人数显示功能好多bug,修了一下午。这个函数也是为此功能而写的。

示例

 

【node】批量重命名音乐专辑内音乐文件名

这只是个便签博,方便以后再拿出来用。。

刚刚下了个LL大法的全套音乐专辑,(原谅我又盗版了),然后里面每个CD的音乐都是一如既往有编号的,不过我们放进自己播放列表的话并不需要这些编号,所以我要把它们去掉。

 

作为一个程序员,怎么能一个个手动改名呢,这简直是耻辱!

继续阅读【node】批量重命名音乐专辑内音乐文件名

node.js isFile

昨天被nodejs的 isfile 坑了一下午。

本来我是这么用的

结果没有任何返回,也没有报错。于是我就研究了一下午是不是相对路径问题,是不是系统问题什么的。。。

为什么我要这么写呢,因为API文档很简单就带过了这个内容,连个例子也没有:


 

Class: fs.Stats

fs.stat() , fs.lstat()  和 fs.fstat()  以及他们对应的同步版本返回的对象。

  • (仅在与 一起使用时合法)

由于看到了 class fs.Stats ,我第一反应就是先 new 一个出来,结果就悲剧了。后来经过不断探索,昂头奋进,披荆斩棘,终于从废渣信息爆满的百度里找到了 isFile 的正确用法,是这样:


isDirectory() 和 isFile() 同理

【PHP】禁止json_encode显式转换为UTF8编码

我今天发现弹幕播放器载入的弹幕虽然不多,但是传回的弹幕json却很大,于是我想起了一个鬼故事[json_encode对[非正常字符]的显式utf8转换],所以很多弹幕数据会被转换成字符形式的utf8码『\uxxxx』,虽然英文字符和中文字符实际上占用的大小不一样,不过把文字显式转换成utf8码仍然是额外消耗空间的,json完全可以保留原本的文字进行json格式化。

那么现在问题来了,会画画的妹纸好还是会唱歌的妹纸好呢
那么现在问题来了,json是否可以直接取消utf8转换呢?如果可以那真是极好,要是不可以的话还得在转换以后正则替换掉所有utf8码。

还好json_encode的第二个设置参数可以设置

这样就可以取消utf8显式转换了,某视频的弹幕返回的json也从90+K变成了50+K。

windows下创建.htaccess文件

一定有不少人尝试过在win下建立一个.htaccess文件,一般都是先右键新建一个文本文档,然后把它的名字改成.htaccess,然后windows会告诉你一定要输入文件名。(虽然不知道windows为什么要这样做不过看起来好像很高级的样子呢!

那怎么办呢?去找一个现成的.htaccess文件复制过来吗?

当然不是咯,实际上windows也可以命名点点开头的文件,比如你用cmd重命名文件就不会有这样的提示。

不过先创建一个文件再重命名还是有点繁琐,不如直接创建一个.htaccess文件。虽然cmd里没有创建空文件的命令,不过利用输出重定向,很多没有输出内容的命令也是可以用来创建空文件的。

首先在要创建的目录按住shift并右键,点“在此处打开命令窗口”,跳出来一个cmd窗口,然后输入

一个.htaccess文件就出来了, cls 是清空控制台内容的命令,此命令没有输出,所以重定向到.htaccess文件就创建了一个空文件。

更新:有些情况下cls创建的不是空文件,请尝试以下方法。

同理,其他无输出命令也可以创建各种在图形模式下无法创建的文件。比如

以及类似命令。

 

请尝试你的系统是否支持touch命令

如果你的系统支持touch命令,那么一切烦恼就都没有了。直接在控制台输入 touch .htaccess 即可创建一个空的文件