分类目录归档:笔记

正则表达式匹配引号内内容

用正则匹配引号内容还是很常用的嘛,于是我来发一篇相关文章。也是因为我自己用到了,并自己写了个,所以来记录一下。

匹配所有的成对单双引号
“`
/((?<!\\)[‘”`]).*?\1/g
“`
匹配效果是:寻找一个没有被转义的单引号或双引号,然后匹配包括引号在内的内容,直到下一个对应的没有被转义的单引号或双引号,这样匹配可以不受单双引号嵌套的干扰。

如果只要引号内的内容,只要给.*?加上括号即可,只是这样似乎没法一次匹配所有的结果
“`
/((?<!\\)[‘”`])(.*?)\1/
“`
然后提取编号为2的结果即为引号里的内容

Canvas文字绘制性能测试

做了个canvas文字测试,看看效果如何。
由于代码中包含了图片的base64码所以放在最后了,测试结果如下:

//代码内容:一张写了5个蓝色喵的图片和5个无任何样式的喵字各绘制十万次
123.8950000006298	//图片
153.4990000000107	//文字
91.63100000114355	//图片
150.8400000002439	//文字
88.55799999946612	//图片
150.93399999932444	//文字
88.62000000044645	//图片
150.16500000092492	//文字
87.77499999996508	//图片
149.93399999912072	//文字
87.90600000065751	//图片
149.8909999991156	//文字
87.98000000024331 	//图片
65.1319999997213 	//文字

为了尽量准确一点,避免浏览器热身等原因我把测试放在循环里进行多次测试。
可见文字渲染确实是效率比较低的,不过这里还不是太明显。
这里的文字渲染还是无任何样式的,平常应用的时候不可能就这么用没样式的字,所以我还要再来一个有样式文字渲染测试。
继续阅读Canvas文字绘制性能测试

【复习】C++定义变量

好久没动C++了,几乎都给忘得差不多了,于是我来打一些复习笔记的说。

写了那么久的js都已经没有主函数的概念了。。。所以出现了函数到处定义,变量到处定义,企图动态修改类之类的事情,然后就是一堆错误信息<(。_。)>

首先从定义变量开始

//括号里代表写不写都一个意思
(signed) short (int) a;
(signed) int miao;
(signed) (long) int b;
(signed) long long (int) d;
unsigned short (int) c;
unsigned int;
unsigned (long) int d;
unsigned long long (int) bilibili;

float e;//-3.4e38~3.4e38
double f;//long double的默认形式 -1.7e308~1.7e308
(signed) char g;//-128~127(不同值代表不同符号)
unsigned char h;//0~255
bool i;//true/false

继续阅读【复习】C++定义变量

使用git备份网站

这两天我突然想备份一下网站,总是担心啥时候openshift会挂掉。

一开始我想直接把网站打包下载下来,但是现在我的网络太不争气了,下载只有10K/s的速度了。。。。这得下到什么时候(ーー;)
于是我就想把网站备份到在线服务上去,然后发现了各种备份wordpress的插件巴拉巴拉巴拉。。。。

但是感觉这样每次备份都要把整个网站打包发出去实在太伤身了啊,于是我就想到了用git来备份这个方法。。இ௰இ,这样只要朝备份服务器push改动的文件就行了,而且这样也方便在网站搬家的时候直接从备份拉取,免了上传下载的烦恼。

那么接下来就开始做吧!

1是设置git服务的教程,已经有了的跳到底下看2

继续阅读使用git备份网站

接触node.js有感

今天我出于好奇接触了一下node.js。
由于还有点js基础,看起来不是很费劲,先不说我学到了什么,我想说的是我发现了自己一直以来的错误观念。

原来我认为:访问一个url,它的地址就是对应的服务器路径。比如http:\\blog.luojia.me\1.html,这里1.html就是对应网站目录里的1.html。
但其实并不是,url应该当作一整个字符串来看而不是分成目录层级或文件,如何处理这个1.html文件的请求完全是由服务器程序说了算的。

也许和我有一样误解的人还没看懂是啥意思,那就举个例子:
我在用node.js启动一个最简单的hello world服务器时,访问了同目录下的其它文件,结果浏览器结果还是那个hello world页面,也就是服务器在不解析url的情况下,完全不可能访问到任何文件。这个问题自己尝试的时候比较好理解,但是就我这极渣的表达能力可能说不清楚。

总之就是说明了url路径和服务器路径并没有一定的相关关系,这也就是服务器路径重写的原理。

另外nodejs给了我一点惊奇,我原以为它类似于php需要个像apache或iis这样的服务器来运行,没想到它本身就可以做成服务端(虽然PHP似乎也有内置的服务器功能)。从编写代码层面来说,如果php是用钢筋混凝土在造房子,那nodejs就像在造钢筋混凝土材料,然后再搭房子。虽然当我看到连静态文件都得自己写代码路由的时候我有点想找小伙伴来一起惊呆,不过从零配件角度来看还是可以理解的。

再另外,每改一次代码我就得ctrl+c停掉服务器再启动真是太不科学的设计了吖,难道没有debug模式自动监视文件更改吗。(到底有没有我也不知道,有的话求方法)

函数指针利用

在C++里,变量有指针,比如int *a;之类的,指针的用处是很大的,可以让程序操作过程更加灵活。
我写这篇文章是为了记录刚刚自己无师自通的函数指针和它的用法。

一般的函数用法类似这样【只是举个例子我懒得写return了_( •́ ​ω •̀ 」∠)/_】

int a(){
	cout<<"这是a函数";
}
a();
//输出结果:这是a函数

继续阅读函数指针利用

禁止百度网页转码

现在进入移动设备时代以后,百度自然也会有相应的移动版百度,移动百度我用到今天最蛋疼的地方就是百度的网页转码,通常转码结果都是不能直视的,比如看不到代码,顺序混乱什么的。
所以建议禁止百度转码你的网站(每次都要我进入转码结果再去点查看原网页简直有种轰炸百度的冲动)

那么只要在你的网页head里加入一个meta就行了

然后按理说百度就不会转码你的网页了

在css中使用函数,减少js代码

博主昨天才发现原来css里也是有函数的,【为我以前浪费在写调整样式的js代码上的时间默哀

我现在知道的css函数有这么几个

attr()
calc()  /*opera不支持*/
counter()
cycle() /*支持情况不明*/  
max()   /*支持情况不明*/
min()   /*支持情况不明*/

个人认为里面最实用的就是calc

继续阅读在css中使用函数,减少js代码

Minecraft命令方块无法使用问题

最近搞MC服的时候碰到命令方块没办法用的问题,于是整理了一下放到这里

首先要使用命令方块要记得在server.properties里把enable-command-block=false改成enable-command-block=true

我碰到了这样的问题

上面写着”必须为在创造模式的管理员”
继续阅读Minecraft命令方块无法使用问题

单片机的第二次尝试

首先感谢昨[jin]天凌晨金也君一直到3点多的热心帮助,我终于让我的单片机可以跑了起来。

昨晚经过我和金也一起折腾了好久,最后发现了问题的关键,那就是我的单片机实际上没有内置晶振,所以要外接一个晶振才可以让它开始工作,然后经过我又好好研究了一下,把它接成这个样子

多霸气的样子啊,灯泡会轮流着组队亮,晶振是从一个旧显卡上烙下来的间接接在单片机的18、19脚上。

在这里修正一下上一篇的错误,供电为5V,而且资料里的说明也有错误,这不是内置振荡器的单片机。

话说我把它开了一上午了怎么一点热量也没有。。。没有满频跑起来吗?

第一次的单片机尝试

其实单片机什么的我什么都不知道,写到这里的时候我还不知道它怎么通电【这是一篇边写边搞的文章,你看到的这篇文章可能是我写了几个星期的结果】。

那么我也是从一些书里知道了一些弄单片机需要的材料,比如单片机、什么板、什么线包括灯泡一起从坑爹网上买来了。从管子[管子是什么?点这里]里拉出单片机,然后可以看到它上面有三个很大的鸟语字母,是STC,据说是国货来着,具体什么我也不清楚。
如图

然后后面跟着三排很不清楚的字。
第一排是89C52RC,目测是型号。
第二排是401-PDIP40,这个就不知道是什么了。
第三排是1309H4V095.90C,这个也不知道是啥。
继续阅读第一次的单片机尝试

PHP Global

本文内容最终以PHP: 变量范围 – Manual中的Global部分为准。

博主很粗心的研究了一下文档就来写这篇文章了,只是做个笔记,并且没有做测试,所有内容都是我猜的[不怕被我误导的话就看下去吧],有错误请指出,没什么问题的话也提醒我一下,我来给文章mark下可信。
首先说一下我总结出来的Global使用规则先。
1.在函数里使用在函数外定义的变量在变量前加上至少一次Global来访问。
2.要让函数里的变量可以被外部访问,就要在函数里定义的变量之前加上Global,然后可以在外部直接使用,如果在其它函数里使用的话,参考1。

接下来是正文,如果上面的规则没看懂的话,下面会给出一些例子来帮助理解。
继续阅读PHP Global

[javascript]toFixed保留小数位数

这是一个笔记,如果有什么建议或学习意见或错误可以留言提出来。
[爪机博]
[想直接看正文请往最底下看]

之前突发奇想要做个什么东西,需要截断小数点后指定位数的小数,当时还不知道有toFixed这个方法,于是乎我自己想了很多伤资源的方法,比如乘以10的几次方以后舍小数再除回去之类的。这是一段悲剧的思考过程,考虑了一堆事情,为了纪念浪费掉的这段时间[对我来说待在学校里比这还浪费时间],我决定特意为这个方法写一篇博文来mark一下。

似乎是正文:
toFixed是一个Number对象的方法,主要用来保留小数,然后它的用法是

var a=213.1234567898754;
a.toFixed(指定位数);

Ps:
小数最后一位采用四舍五入。
位数为0〜20的整数,参数错误会抛出异常。
如果参数大于le+21(这是啥?)的话,会返回指数形式的数[结果是string类型]。
如果小数本身位数不足指定位数,会用0补足。
默认参数是0,也就是不输入参数的话它的行为是保留整数。

正文似乎结束了。

server-sent 服务器主动发送事件

以前的HTML版本中,要获取实时数据,必须要不断向服务器发出请求来查询有没有新内容,这样不管从建立连接还是等待时间来说都是要多苦逼就有多苦逼啊(微观来说),[最近死在学校里实在没事做就去逛了逛w3,中文的w3school更新比英文版慢了不知多少啊]然后我发现了w3的html专版里多出了一个HTML5 服务器发送事件这东西。
看了一下他的介绍大概知道她是干什么用的了,简单地说就是用javascript建立一个长连接到一个网页脚本,然后脚本就可以按需向浏览器页面主动发送数据。

下面来解释一下工作方式

//这是我整合了w3里的示例代码,添加详细注释来助解
if (typeof(EventSource) !== "undefined") {//检查是否支持服务器推送
	var a = new EventSource("脚本.php");//建立和"脚本.php"的连接
	a.onmessage=function(event) {//接收到消息的事件
		/*这里的event.data存储了从服务器传回来的数据*/
        /*比如alert(event.data)来提示返回的数据*/
	};
    
    a.onopen=function(event){//打开连接时的事件
    /*用event.readyState可以获取此时的状态号*/
        /*建立好连接的时候干些什么*/
    };
    
    a.onerror=function(event){//发生错误时的事件
    /*用event.readyState可以获取此时的状态号*/
        /*发生错误的时候干些什么*/
    };
} else {//不支持推送的话
	alert("您老的浏览器不支持服务器推送");
    
    a.close();//用close()方法可以关闭连接
    a=null;//把a对象清空,让它的空间自动被回收
}