rewrite规则里的任意单词匹配和其它地方的似乎有点不一样
比如javascript里这么写
/([ab|cd|ef|gh|ij|kl]) //匹配任意单词
但是RewriteRule里不需要中括号
/(ab|cd|ef|gh|ij|kl) //匹配任意单词
rewrite规则里的任意单词匹配和其它地方的似乎有点不一样
比如javascript里这么写
/([ab|cd|ef|gh|ij|kl]) //匹配任意单词
但是RewriteRule里不需要中括号
/(ab|cd|ef|gh|ij|kl) //匹配任意单词
给html加上min-height:100%的css样式可以让html的最小高度为显示区的高(原
本默认是内部非fixed元素的底撑到的地方)
博主昨天才发现原来css里也是有函数的,【为我以前浪费在写调整样式的js代码上的时间默哀
喵
我现在知道的css函数有这么几个
attr() calc() /*opera不支持*/ counter() cycle() /*支持情况不明*/ max() /*支持情况不明*/ min() /*支持情况不明*/
个人认为里面最实用的就是calc
最近搞MC服的时候碰到命令方块没办法用的问题,于是整理了一下放到这里
首先要使用命令方块要记得在server.properties里把enable-command-block=false改成enable-command-block=true
我碰到了这样的问题
上面写着”必须为在创造模式的管理员”
继续阅读Minecraft命令方块无法使用问题
首先感谢昨[jin]天凌晨金也君一直到3点多的热心帮助,我终于让我的单片机可以跑了起来。
昨晚经过我和金也一起折腾了好久,最后发现了问题的关键,那就是我的单片机实际上没有内置晶振,所以要外接一个晶振才可以让它开始工作,然后经过我又好好研究了一下,把它接成这个样子
多霸气的样子啊,灯泡会轮流着组队亮,晶振是从一个旧显卡上烙下来的间接接在单片机的18、19脚上。
在这里修正一下上一篇的错误,供电为5V,而且资料里的说明也有错误,这不是内置振荡器的单片机。
话说我把它开了一上午了怎么一点热量也没有。。。没有满频跑起来吗?
其实单片机什么的我什么都不知道,写到这里的时候我还不知道它怎么通电【这是一篇边写边搞的文章,你看到的这篇文章可能是我写了几个星期的结果】。
那么我也是从一些书里知道了一些弄单片机需要的材料,比如单片机、什么板、什么线包括灯泡一起从坑爹网上买来了。从管子[管子是什么?点这里]里拉出单片机,然后可以看到它上面有三个很大的鸟语字母,是STC,据说是国货来着,具体什么我也不清楚。
如图
然后后面跟着三排很不清楚的字。
第一排是89C52RC,目测是型号。
第二排是401-PDIP40,这个就不知道是什么了。
第三排是1309H4V095.90C,这个也不知道是啥。
继续阅读第一次的单片机尝试
博主很粗心的研究了一下文档就来写这篇文章了,只是做个笔记,并且没有做测试,所有内容都是我猜的[不怕被我误导的话就看下去吧],有错误请指出,没什么问题的话也提醒我一下,我来给文章mark下可信。
首先说一下我总结出来的Global使用规则先。
1.在函数里使用在函数外定义的变量在变量前加上至少一次Global来访问。
2.要让函数里的变量可以被外部访问,就要在函数里定义的变量之前加上Global,然后可以在外部直接使用,如果在其它函数里使用的话,参考1。
接下来是正文,如果上面的规则没看懂的话,下面会给出一些例子来帮助理解。
继续阅读PHP Global
这是一个笔记,如果有什么建议或学习意见或错误可以留言提出来。
[爪机博]
[想直接看正文请往最底下看]
之前突发奇想要做个什么东西,需要截断小数点后指定位数的小数,当时还不知道有toFixed这个方法,于是乎我自己想了很多伤资源的方法,比如乘以10的几次方以后舍小数再除回去之类的。这是一段悲剧的思考过程,考虑了一堆事情,为了纪念浪费掉的这段时间[对我来说待在学校里比这还浪费时间],我决定特意为这个方法写一篇博文来mark一下。
似乎是正文:
toFixed是一个Number对象的方法,主要用来保留小数,然后它的用法是
var a=213.1234567898754; a.toFixed(指定位数);
Ps:
小数最后一位采用四舍五入。
位数为0〜20的整数,参数错误会抛出异常。
如果参数大于le+21(这是啥?)的话,会返回指数形式的数[结果是string类型]。
如果小数本身位数不足指定位数,会用0补足。
默认参数是0,也就是不输入参数的话它的行为是保留整数。
正文似乎结束了。
以前的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对象清空,让它的空间自动被回收 }
在javascript里是不可以用
function a(q=0){..}
这种方式定义参数的默认值的,但是默认值又是一个很有用的东东,它可以设置一些普遍使用的参数来减小使用时候的麻烦。
那么总会有办法解决这种奇葩的问题的。
接下来就是见证奇迹的时刻!
function a(b){ var c=arguments[1]?arguments[1]:"c的默认值"; alert(b); alert(c); }
这个时候使用它
a(213,3);//先后跳出提示框:213和3 a(213);//先后跳出提示框:213和"c的默认值"
肿么会这样纸呢?细心的小朋友们应该可以发现这么一个[arguments[1]?arguments[1]:”c的默认值”],而且第一次调用a()的时候输入了两个参数。
原因就是:
首先,js不会因为输入的参数个数和定义时的个数不一样而报错
然后,函数中有一个叫做arguments的数组来保存输入函数的参数
这样就可以知道了,在arguments[1]?arguments[1]:”c的默认值”里,arguments[1]就是输入函数的第二个参数(数组的编号从0开始)(首先在这里假如你知道?:操作符的用法,不知道请先去百度回炉。。)
var c= //c等于 arguments[1]? //第二个参数存在吗?存在的话c等于第二个参数的值 arguments[1]: //第二个参数不存在? "c的默认值"; //不存在就设置为"c的默认值"
===========2021/11/27 更新============
现在的js已经可以用文章开头的方法定义默认参数了,只要调用函数时没有填该参数或者参数的值为undefined,都会使用定义的默认参数传入。
有的时候我们需要针对搜索引擎抓取做一些特殊的回应、所以要用到判断是否为搜索引擎的方法,我在网上找了几种来做个笔记,就先不验证效果了。
第一种
来源:php判断是否搜索引擎 – php
function strexists($haystack, $needle) { return !(strpos($haystack, $needle) === FALSE); } /* *检验搜索 */ function getrobot() { if(!defined('IS_ROBOT')) { $kw_spiders = 'Bot|Crawl|Spider|slurp|sohu-search|lycos|robozilla'; $kw_browsers = 'MSIE|Netscape|Opera|Konqueror|Mozilla'; if(!strexists($_SERVER['HTTP_USER_AGENT'], 'http://') && preg_match("/($kw_browsers)/i", $_SERVER['HTTP_USER_AGENT'])) { define('IS_ROBOT', FALSE); } elseif(preg_match("/($kw_spiders)/i", $_SERVER['HTTP_USER_AGENT'])) { define('IS_ROBOT', TRUE); } else { define('IS_ROBOT', FALSE); } } return IS_ROBOT; }
看代码这一种方法是判断来访者是不是某一种浏览器,如果是的话就判断为用户,不是的话就判断为蜘蛛。 继续阅读判断访问者是否是搜索引擎
这是一个无聊的产物[那是相当无聊才会来做这种东西啊~]
先隆重介绍一下,这是一个可以发出声音的程序![其实就是用Beep函数。。]
然后我给它取了个好长好长名字的名字,叫“音乐灵感的来源~”
然后就上代码了
#include "iostream.h"//带上输出功能 #include "windows.h"//用Beep函数 int main(){ int pinlv;//定义频率变量 for(int i=0;i<1000;i++){//循环999次 pinlv=rand();//得到随机数 while(pinlv>2000){//超出了预定范围的话[频率超过一定范围声音会刺耳听不清] pinlv=rand();//再来得一次随机数,一直到得到范围内的数为止 } Beep(pinlv,200);//哔哔哔哔哔哔~ cout<<i<<" "<<pinlv<<endl;//输出次数和本次的频率为多少 } return 0;//结束啦 }
这是多么可爱的一个程序啊。然后我就不说什么了。。
在很久很久以前(其实是忘了时间。。。)我发现iframe内部的内容是可以在iframe外面操作的。
在这之前我曾经把Glory的blog做了iframe放在我的佳佳实验室里,然后他一脸黑线,现在我终于知道是为什么了~
接下来进入正文
访问iframe元素的关键就在于要知道连接到iframe的方法,看下面
Memcache是一个内存存储方案[多简洁的描述啊。。]
在PHP官方有比较全面的说明文档
http://www.php.net/manual/zh/book.memcache.php【中文】
这里就来简单写一下他的数据操作部分的用法
创建一个Mencache对象
$memobj=new Memcache; //使用函数形式的时候不需要创建这个对象
然后就可以以对象的形式对他进行操作
今天我稍微试了试响应式布局的操作方法来为iti做准备,于是就拿我的博客开刀了。
想了一想,这个博客的主题本身就是响应式的了,可以非常好的适应小屏幕,于是我就不再做小屏幕的响应了,于是我做了更大屏幕的响应。
级别[我做的]:800~1299,1300~1460,1461~1880,1881~+∞
由于只是练习,所以我就拿多说评论框做实验了。
目标:让多说评论框在宽度超过1300的屏幕上从文章底部跑到右边,文章靠到左边。
[请掠过代码先看下面]。 继续阅读响应式布局练习
俺花了好长时间,用我这不熟练的技术好不容易做了个带满缺点的js
那么这货的用处就是屏蔽掉flash这样的东西【当然如果修改一下js可以屏蔽掉body里的任何标签
先来个示例【有视频有真相
embed标签的例子(无视频源)video标签的例子(同上)
其实屏蔽了以后看起来都是一样的。。
这货的功能:点击以后再载入,防止意外流量损失或带宽?占用
这就是个鲜明的例子181
里面装满了视频,这样就可以解决打开这个网页一下载入很多视频的问题了
原理:让div插队再干掉背后的原标签并给这个div添加可以给自己内部写入被杀掉标签的事件↓
objarray[i].parentNode.insertBefore(tmpdiv,objarray[i]);//插队到原标签前面
objarray[i].parentNode.removeChild(objarray[i]);//干掉原标签
特点:插队的div使用源元素的宽高和定位【本来想把z-index也算进去的,时间不够就不做了↓
//一堆if用来判断是否有这些属性
if(getwidth(objarray[i])){tmpdiv.style.width=getwidth(objarray[i]);}
if(getheight(objarray[i])){tmpdiv.style.height=getheight(objarray[i]);}
if(getposition(objarray[i])){tmpdiv.style.position=getposition(objarray[i]);}
if(getright(objarray[i])){tmpdiv.style.right=getright(objarray[i]);}
if(getleft(objarray[i])){tmpdiv.style.left=getleft(objarray[i]);}
全代码↓
var changevideos=function(){
var target=new Object;
function findtag(tag) {
return document.getElementsByTagName(tag);
}
function getwidth(obj){
if(obj.width){return obj.width;}else if(obj.style.width){return obj.style.width;}else{return false;}
}
function getheight(obj){
if(obj.height){return obj.height;}else if(obj.style.height){return obj.style.height;}else{return false;}
}
function getposition(obj){
return obj.style.position?obj.style.position:false;
}
function getright(obj){
return obj.style.right?obj.style.right: false;
}
function getleft(obj){
return obj.style.left?obj.style.left:false;
}
function changeinner(html){
target=event.srcElement?event.srcElement:event.target;
target.innerHTML=html;
}
function run(objarray){
for (var i = 0; i < objarray.length; i++) { var aimhtml = objarray[i].outerHTML; var tmpdiv=document.createElement("div"); if(getwidth(objarray[i])){tmpdiv.style.width=getwidth(objarray[i]);} if(getheight(objarray[i])){tmpdiv.style.height=getheight(objarray[i]);} if(getposition(objarray[i])){tmpdiv.style.position=getposition(objarray[i]);} if(getright(objarray[i])){tmpdiv.style.right=getright(objarray[i]);} if(getleft(objarray[i])){tmpdiv.style.left=getleft(objarray[i]);} tmpdiv.innerHTML='<div class="hideitemzhanwei" style="width:'+getwidth(objarray[i])+'px;height:'+getheight(objarray[i])+'px;"><center><h2 style=\'color:#fff;\'>为了防止流量计费用户的流量损失<br>此处已被自动屏蔽</h2><span style="position:absolute;bottom:2px;right:2px;">点击恢复</span></center></div>';//填上填充显示的内容
//tmpdiv.style.overflow="hidden";
tmpdiv.setAttribute('onClick','changevideos.changeinner(\''+aimhtml+'\')');
tmpdiv.style.display="inline-block";
objarray[i].parentNode.insertBefore(tmpdiv,objarray[i]);
objarray[i].parentNode.removeChild(objarray[i]);
}
}
function changehideneededtag() {
var tmpstyle=document.createElement("style");
tmpstyle.innerHTML=".hideitemzhanwei{position:relative;background-color:#66ccff;color:#fff;cursor:pointer;}";
document.getElementsByTagName("head")[0].appendChild(tmpstyle);
var a;
if(a=findtag("embed")){
run(a);}
if(a=findtag("object")){
run(a);}
if(a=findtag("video")){
run(a);}
}
changehideneededtag();
}
changevideos.changeinner=function(html){
target=event.srcElement?event.srcElement:event.target;
target.innerHTML=html;
}
没时间了所以还有些可能出错的地方没做错误处理,以后来补上