Hot For Coding
网页加载完后动态更换favicon.ico图标

最近遇到一个需求:网页加载完后动态更换favicon.ico,因为这个favicon.ico是用户动态通过页面上传的并且网页还不能刷新,这不是一个容易实现的需求,因为浏览器的兼容性。根据我当时的初步判断,这个需求应该没有什么难度,只要获取新的地址之后把link的href地址给替换就好!

事实证明并非那么简单就能搞定,后来经过我实践发现这里有浏览器兼容的问题,先给大家看一段示例代码:

favicon.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <link rel="shortcut icon" href="favicon1.ico" />
  </head>
  <body>
    <p>默认指定favicon1.ico,然后中途使用js更换为favicon2.ico</p>

    <script type="text/javascript">
          
      var changeIcon = function () {    
        var link = document.head.querySelector("link");
        link.href = "favicon2.ico";
      };
    
      changeIcon();
    </script>
  </body>
</html>

...

READ ALL

给Ckeditor添加一个插入code标签的按钮

Ckeditor是一个非常受欢迎的JavaScript编辑器,问世至今走了十年,依然还是市场老大,经得起时间考验就是好程序。

因为经常写一些技术博文,可能有些地方需要插入code标签,而默认Ckeditor不具备插入code标签功能,但它提供的拓展灵活程度让我感觉这就是那么容易。

下载程序

下载地址:http://ckeditor.com/

创建插件目录

目录plugins就是Ckeditor插件目录,所有的插件都集合在里边,在里边创建一个code目录,作为插入code标签功能的插件目录。

编写插件程序

Ckditor插件的规则是在插件目录下创建一个plugin.js文件作为插件主程序处理文件,如果是复杂的插件可能会有N个js文件。

...

READ ALL

CentOS yum 提示段错误 (core dumped)

今天在yum install或者yum update的时候都提示段错误(core dumped),然后终止运行了。

[root@lee ~]# yum -y update
Loaded plugins: fastestmirror, refresh-packagekit
Determining fastest mirrors
 * base: mirror.esocc.com
 * extras: mirror.esocc.com
 * soluslabs: mirror.us1.soluslabs.net
 * updates: mirror.esocc.com
base                                                                                                                                           | 3.7 kB     00:00     
base/primary_db                                                                                                                                | 4.4 MB     00:14     
extras                                                                                                                                         | 3.4 kB     00:00     
extras/primary_db                                                                                                                              |  18 kB     00:00     
soluslabs                                                                                                                                      |  951 B     00:00     
soluslabs/primary                                                                                                                              |  11 kB     00:00     
段错误 (core dumped)

...

READ ALL

读TCP/IP网络编程几点纪要

由于不是科班出身,所以对计算机网络基础知识匮乏,只能通过读一些书来弥补盲点,以下是读完此书的一些摘要总结

关于以太网

这个是很早的时候玩电脑总是发现有一个名词:以太网,但是个什么东西不太清楚,正好通过此书得解,它是一种计算机局域网技术,它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网是目前应用最普遍的局域网技术。

IP协议

IP(Internet Protocol)协议是TCP/IP协议族的核心组成部分,是目前应用最广的网络互联协议。IP层对应于ISO/OSI七层参考模型中的网络层。通过IP数据包和IP地址屏蔽掉了不同的物理网络(如以太网、令牌环网等)的帧格式、地址格式等各种底层物理网络细节,使得各种物理网络的差异性对上层协议不复存在,从而使网络互联成为可能

...

READ ALL

Supervisor守护Python进程

使用Python socket + HTML5 WebSocket写一个Web聊天室,上线使用时经常进程经常挂掉,然后手动重启进程,大家重新进入聊天室继续聊。时间长了以后,发现这样不是没有根本解决办法,因为每天聊天室的进程可能会因为各种原因挂掉。

Supervisor

Supervisor的出现,结束了我这苦恼的问题,它可以帮你守护任何进程,守护的意思是如果你的进程死了,会重新帮你起服务,确保你的服务一直可用。当然如果它的进程也挂了就全都over了。实际情况是上线三个多月运行非常好,没有发现服务断过。

CentOS下安装Supervisor

...

READ ALL

用QUnit单元测试开发你的程序

关于单元测试

单元测试是保障程序按照预期逻辑执行的一种测试方式,现在也逐渐被应用到前端项目。我刚开始写JavaScript的时候每次测试都要启动浏览器调用一下需要测试的代码,甚至还需要模拟一些数据来达到效果,最后这些测试的代码片段会被删除。但是bug出现的时候不得不在页面中重新写测试代码,非常费时。

事实上单元测试已经非常的成熟,包括赫赫有名的YUI test,今天我们介绍jQuery团队开发的QUnit单元测试框架,目前jQuery的测试正是使用这个单元测试框架,如果感兴趣可以到github上看看jQuery的test内容

准备

QUnit框架实际上就是一个JavaScript文件还有一个css文件,从官网http://qunitjs.com/下载引用或者直接使用cdn镜像

...

READ ALL

lsof好用的Linux命令

lsof(list open files)是一个列出当前系统打开文件的工具,我通常使用它来查看网络端口占用,因为在Linux下所有事物都是以文件的形式存在。

root@node5:~# lsof | head -10
COMMAND     PID   TID       USER   FD      TYPE             DEVICE   SIZE/OFF       NODE NAME
systemd       1             root  cwd       DIR              254,0       4096          2 /
systemd       1             root  rtd       DIR              254,0       4096          2 /
systemd       1             root  txt       REG              254,0    1120992    2884146 /lib/systemd/systemd
systemd       1             root  mem       REG              254,0      19008    2883683 /lib/x86_64-linux-gnu/libuuid.so.1.3.0
systemd       1             root  mem       REG              254,0      18832    2883613 /lib/x86_64-linux-gnu/libattr.so.1.1.0
systemd       1             root  mem       REG              254,0      79936    2883655 /lib/x86_64-linux-gnu/libgpg-error.so.0.21.0
systemd       1             root  mem       REG              254,0     283464    2883666 /lib/x86_64-linux-gnu/libblkid.so.1.1.0
systemd       1             root  mem       REG              254,0      22944    2883621 /lib/x86_64-linux-gnu/libcap-ng.so.0.0.0
systemd       1             root  mem       REG              254,0      14640    2883595 /lib/x86_64-linux-gnu/libdl-2.24.so

...

READ ALL

Cannot locate header file MagickWand.h

今天编译安装PHP拓展imagick的时候,总是提示:

checking for MagickWand.h header file... configure: error: Cannot locate header file MagickWand.h

跳不过去,缺少头文件

configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.
checking for gawk... gawk
checking whether to enable the imagick extension... yes, shared
checking whether to enable the imagick GraphicsMagick backend... no
checking ImageMagick MagickWand API configuration program... found in /usr/local/bin/MagickWand-config
checking if ImageMagick version is at least 6.2.4... found version 6.8.6 Q16 
checking for MagickWand.h header file... configure: error: Cannot locate header file MagickWand.h

...

READ ALL

jQuery Ajax 的同步与异步

默认jQuery所有的Ajax请求默认都是异步处理,即在回调函数里处理返回结果:

$.get('b.txt', function(data){
  console.log(data);
});

执行结果:

full

为了更清楚的知道异步处理特性,改写一下

console.log("开始请求!");
 
$.get('b.txt',function(data){
  console.log("请求结果!");
});
 
console.log("请求之后!");

...

READ ALL

JsDoc生成你的JavaScript文档

这是一个Java写的文档生成工具,注释风格要求跟Java的一样即可生成出注释文档,非常好用。直接到官网下载,网上一大堆教程都是JsDoc2版的,现在官网已经说了不再支持JsDoc2版,推荐使用JsDoc3版本。

Github: https://github.com/jsdoc3/jsdoc

下载后不用安装直接就能用,当然还是要先安装配置好JDK环境,不会的自行找资料。以Win平台做例子,下载过来后解压然后启动命令模式进入程序目录下执行jsdoc即可启动程序,可以直接jsdoc --help查看帮助文档,jsdoc3更直接方便的生成注释文档

...

READ ALL