Hot For Coding
Linux系统邮件查看及清空

在操作Linux命令时,时常出现以下这样一句话

You have mail in /var/spool/mail/root

这个是提示有最新的邮件,你可以使用mail命令阅读

-bash-4.1# mail 
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 383 messages 381 unread
    1 user@localhost.local  Tue Apr 10 20:09 183/7743  "[abrt] full crash report"
    2 user@localhost.local  Tue Apr 10 20:15 183/7730  "[abrt] full crash report"
    3 user@localhost.local  Tue Apr 10 20:20 183/7730  "[abrt] full crash report"
    4 user@localhost.local  Tue Apr 10 20:22 183/7730  "[abrt] full crash report"

...

READ ALL

JavaScript里弹出</script>标记出错解决方法

在JavaScript里弹出</script>会让JavaScript误以为这是一个结束标签,而出现异常。

如以下代码

<script>
alert('</script>');
</script>

我们在<script>块内使用alert弹出</script>字符串,结果被误以为是结束标签,vim还变了颜色。运行结果

full

由于把字符串里的当成了结束标签,所以就出现异常,显然这不是我们想要的结果。我们只需要把代码稍加处理一下即可实现。

<script>
alert('</scr' + 'ipt>');
</script>

...

READ ALL

设置Linux计划任务crontab容易出错的地方

Linux的计划任务可以说是最常用也实用的系统程序了,Linux的计划任务设置也很简单,但稍有不注意就会出错。

如:使用ntpdate命令每天凌晨自动对时,可能会这么写

00 00 * * * ntpdate asia.pool.ntp.org;

但这么写是出错的,你可能百思不得其解,在命令状态下执行看下结果

-bash-4.1# ntpdate asia.pool.ntp.org
25 Jul 14:00:21 ntpdate[5815]: step time server 212.26.18.43 offset 19.175301 sec

...

READ ALL

PHP判断字符串是纯英文、纯汉字或汉英混合

PHP没有直接函数来判断一个字符串是否是纯英文或纯汉字以及汉英混合,只能自己写函数。要想实现此功能就必需对字符集汉字编码占位进行了解,就目前国内比较常用的字符集当属UTF8与GBK了。

  • UTF8每个汉字等于3个长度;
  • GBK每个汉字等于2个长度;

利用以上汉字与英文的差异,我们就可以利用mb_strlen()函数与strlen()函数分别计算出两组长度数字,然后根据规律进行运算即可判断出字符串的类型了。

UTF8实例

<?php
/**
 * PHP判断字符串纯汉字 or 纯英文 or 汉英混合
 * Nicholas Lee www.qttc.net
 */
function utf8_str($str){
  $mb = mb_strlen($str,'utf-8');
  $st = strlen($str);
  if($st==$mb)
    return '纯英文';
  if($st%$mb==0 && $st%3==0)
    return '纯汉字';
  return '汉英混合';
}
 
$str = '琼台博客';
echo utf8_str($str); // Output: 纯汉字

$str = '琼台博客 www.qttc.net'
echo utf8_str($str); // Output: 汉英混合

...

READ ALL

关于博客生成HTML静态化的一些看法

这两周,忙着给自己的站点动手术,而且是大手术。五月份,我的小站写好了以后经过线上运行修修补补也已稳定,这个月我给小站生成HTML静态页一是缓解鸭梨,二是试试看。以下就总结这几天生成HTML的一些问题与分享。

采用内容生成静态方式

本来想着生成全页HTML,但由于页面上有动态信息,如随机博文与相关博文、评论以及浏览次数等,于是放弃全页HTML方式,采用部分内容生成静态方式。

当然,也许会有些人会说全页生成HTML方式比较好。如果是全页生成HTML的方式那么就需要在动态内容的地方放入<script>标签指向一个PHP页面,然后由PHP来生成JavaScript写出动态内容,但这样种方式不利于SEO。

...

READ ALL

推荐一款带左右按钮无缝图片滑动JavaScript插件

由于手上正好有一个需求,点击左右箭头可以滑动图片并且要求无缝效果,本来想自己写的但越写越发现貌似力不从心,于是从网上搜搜,结果找到了这一款插件。插件的作者以及相关信息我没有去关注,但下载过来用了一下,发现效果很不错,还支持自动滑动,非常完美的一款插件。

插件的下载地址:ScrollPic.js

使用方法

// 先加载ScrollPic.js插件后再执行以下语句
window.onload = function(){
  scrollPic_01 = new ScrollPic();
  scrollPic_01.scrollContId   = "pic"; //图片容器ID
  scrollPic_01.arrLeftId      = "left"; //左按钮ID
  scrollPic_01.arrRightId     = "right"; //右按钮ID
  scrollPic_01.frameWidth     = 840; //图片容器宽度
  scrollPic_01.pageWidth      = 210; //每张图片宽度
  scrollPic_01.speed          = 10; //移动速度(单位毫秒,越小越快)
  scrollPic_01.space          = 10; //每次移动像素(单位px,越大越快)
  scrollPic_01.autoPlay       = false; //自动播放
  scrollPic_01.autoPlayTime   = 3; //自动播放间隔时间(秒)
  scrollPic_01.initialize();  //初始化
}

...

READ ALL

Nginx设置proxy_cache缓存

Nginx原先是没有proxy_cache功能的,貌似从0.8.x版本以后就加入了这个类似Squid缓存的功能,proxy_cache是吧URL当作Key,用md5编码哈希后保存在磁盘上,支持任意的URL,也支持非200状态码,如404/302等。这个功能已经可以取代Squid,特别是性能上,Nginx对多核CPU的利用就比Squid强很多。

nginx.conf里的http块加入以下代码

# proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
proxy_temp_path   /tmp/proxy_temp_dir;
# 设置名称为nginx_cache,内存缓存空间大小为500MB,30天没有被访问的内容自动清除,硬盘缓存空间大小为30GB。
proxy_cache_path  /tmp/proxy_cache_dir  levels=1:2   keys_zone=nginx_cache:200m inactive=3d max_size=30g;

...

READ ALL

JavaScript写的一个石头剪子布游戏,大家进来玩玩吧!

游戏通常都要做到以下两点

  • 电脑随机
  • 判断胜负

首先是胜负算法,游戏规则

  • 石头 杀 剪子
  • 剪子 杀 抹布
  • 抹布 杀 石头
  • 石头 杀 剪子

根据以上规则找出规律,写出算法即可。

让电脑随机,这点比较容易,前面我有写过文章介绍,不明白的童鞋可以去看看。

随机刷屏,其实这个效果不是游戏的关键性,但为了看起来更加互动,好玩,我就给加上了。这里用到了一个取模算法,根据余数去循环显示即可达到效果。

完整代码

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>JS写的石头剪子布游戏 - Nicholas Lee</title>
    <style type="text/css">
      div{margin:20px auto;padding:10px;border:2px solid #999;width:200px;background:#ffe;}
      div#cu{font-weight:bold;font-size:30px;height:40px;color:red;}
      div#la{border:none;background:none;display:none;}
      span{color:red;font-weight:bold;}
    </style>
    <script type="text/javascript">
        var se = null,time=20,you=0,arr=['石头','抹布','剪子'];
        function p(n){
          you = n;
          document.getElementById('you').innerHTML=s(n);
          document.getElementById('st').disabled=true;
          document.getElementById('mb').disabled=true;
          document.getElementById('jz').disabled=true;
          document.getElementById('cu').innerHTML = '...';
          se = setInterval('t()',50);
        }
        function agin(){
          document.getElementById('st').disabled=false;
          document.getElementById('mb').disabled=false;
          document.getElementById('jz').disabled=false;       
          document.getElementById('la').style.display = 'none';
          document.getElementById('you').innerHTML = '';      
          document.getElementById('pc').innerHTML = '';
          document.getElementById('cu').innerHTML = '';
          document.getElementById('you').innerHTML= '请选择';        
        }
        function bt(){
          var pc = Math.floor(Math.random() * 3 + 1);
          document.getElementById('pc').innerHTML = s(pc);
          var str='';
          if(pc==you){
              str += '平局';    
          }else{
            var b = pc-you;
            if(b>0){
              if(b==1){
                str += '电脑赢';   
              }else{
                str += '你赢啦';   
              }               
            }else{
              b = b*-1;   
              if(b==1){
                str += '你赢啦';   
              }else{
                str += '电脑赢';   
              }   
            }       
          }
          document.getElementById('la').style.display = 'block';
          document.getElementById('cu').innerHTML = str;
        }
        function t(){
          if(time>0){
            document.getElementById('pc').innerHTML = arr[time%3];
            time--;
          }else{
            clearInterval(se);
            se = null;
            time = 20;
            bt();
          }
        }
        function s(n){
          if(n==1){
            return '石头';    
          }else if(n==2){
            return '抹布';    
          }else{
            return '剪子';    
          }
        }
    </script>
  </head>
  <body>
    <div>
      <p>你出什么?<span id="you">请选择</span></p>
      <p><button id="st" onclick="p(1);">石头</button></p>
      <p><button id="mb" onclick="p(2);">抹布</button></p>
      <p><button id="jz" onclick="p(3);">剪子</button></p>
    </div>
    <div>
      <p>电脑出?</p>
      <span style="" id="pc"></span>
    </div>
    <div id="cu"></div>
    <div id="la"><button id="agin" onclick="agin()">再来一次</button></div>
    <div><p><a href="https://www.qttc.net" target="_blank">Nicholas Lee www.qttc.net</a></p></div>
  </body>
</html> 

...

READ ALL

JavaScript实现N到M的总和

有这样一个需求,计算从N到M的总和,要实现这个需求并不困难,只是要看哪种方式更简洁,执行效率更快

简单的for循环

var sum = function (n, m) {
  var t = 0;

  for (;n <= m; n++) {
    t += n;
  }

  return t;
}

console.log(sum(1, 10)) // Output: 55

while循环

var sum = function (n, m) {
  var t = 0;

  while (n <= m) {
    t += n;
    n++;
  }

  return t;
}

console.log(sum(1, 10)) // Output: 55

...

READ ALL

JavaScript统计GBK/UTF8字符串长度

大家都知道,在JavaScript中字符串的长度不分中英文字符, 每一个字符都算一个长度,这跟PHP里的strlen()函数就不太一样。PHP里的strlen()函数根据字符集把GBK的中文每个2累加,把UTF-8的中文字符每个按3累加。

var s = 'www.qttc.net'

console.log(s.length) // Output: 12

有些童鞋可能要问了,为什么要计算GBK/UTF8长度?

主要是为了匹配数据库的长度范围内,比如GBK的数据库某字段是varchar(10),那么就相当于5个汉字长度,一个汉字等于两个字母长度。如果是UTF8的数据库则是每个汉字长度为3。

...

READ ALL