Hot For Coding
Python socket.error [Errno 98] Address already in use

今天在写一个Python与HTML5 WebSocket实例,每次重新运行脚本总是提示地址已经存在并且被使用!查询相关文档才知道在socket编程中,当通过客户端向服务器端发送消息,关闭了连接后,这时如果马上再去运行服务器端程序,会提示这个错误:

socket.error: [Errno 98] Address already in use

这是因为在TCP/IP终止连接的四次握手中,当最后的ACK回复发出后,有个2MSL的时间等待,MSL指一个片段在网络中最大的存活时间,这个时间一般是30秒,所以基本上过60秒后就可以重新连接!

为什么要等待2MSL?是因为在最后发出ACK回复后,发送方不能确认ACK是否被另一端正常收到,如果另一端没有收到ACK回复的话,将会在1MSL后再次发送FIN片段。所以说发送方等待2MSL时间,也就是刚好它发ACK回复和对方发送FIN片段的时间,如果此时间内都没有再次收到FIN片段的话,发送方就假设对方已经正常接收到了ACK回复,此时它就会正常关闭连接!

...

READ ALL

MySQL的timestamp自动更新时间

通常表中会有一个Create date创建日期的字段,其它数据库均有默认值的选项。MySQL也有默认值timestamp,但在MySQL中,不仅是插入就算是修改也会更新timestamp的值!

Example

CREATE TABLE categories (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(255) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

记得,要改时区

SET time_zone='+08:00';

...

READ ALL

jQuery自定义插件开发

喜欢使用jQuery的朋友,或许在经过一段时间的使用以后,可能会感觉这个插件少一点了自己想要的某些功能。其实jQuery支持插件开发模式,简单容易!

如以下代码:

// 插件代码开始
(function($) {
  // 插件名称命名
  $.fn.plugin_name = function(){ 
    // 代码处理块
  };
})(jQuery);
// 插件代码结束

使用的时候可以直接

// 调用定义的方法名
$('#id').plugin_name();

我们这里主要以颜色赋值的实例来谈谈插件的具体模式开发!我们首先需要两个方法,一个是color前景颜色设置,一个是bgcolor背景颜色设置。

...

READ ALL

新浪微博加关注按钮IE下不能显示

今天产品给我提一个Bug,称在IE浏览器下微博关注按钮出不来,并且有JavaScript报错

full

其它浏览器均正常,唯独IE下有这个报错,但从图片上的错误信息来看,很难判断是哪出了问题?怎么解决?

当时想,微博不会有一个这么严重的Bug吧?在IE下就不能出现按钮?因此怀疑跟我的页面某块地方有冲突了,于是单独写一个html静态页测试

<html>
  <head>
  </head>
  <body>
    <wb:follow-button uid="2619203540" type="red_1" width="67" height="24" ></wb:follow-button>
    <script src="http://tjs.sjs.sinajs.cn/open/api/js/wb.js?appkey=2844920245" type="text/javascript" charset="utf-8"></script>
  </body>
</html>

...

READ ALL

Python实现斐波那契

昨天我写了一版JavaScript实现的,今天用Python实现一下

什么是斐波那契

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
这个数列从第3项开始,每一项都等于前两项之和

代码实现

arr = []

def fibonacci():
  i = 0
  l = len(arr)
  if l < 2:
    i = 1
  else:
    i = arr[l - 1] + arr[l - 2]
  arr.append(i)

  return i

for i in range(10):
  print(fibonacci())

...

READ ALL

JavaScript实现斐波那契

什么是斐波那契

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
这个数列从第3项开始,每一项都等于前两项之和

代码实现

function fibonacci() {
  var list = [];
  return function () {
    var i;
    if (list.length < 2) {
      i = 1;
    } else {
      i = list[list.length - 1] + list[list.length - 2]
    }

    list.push(i);
    return i;
  };
}

var f = fibonacci();
for (var i = 0; i < 10; i++) {
  console.log(f());
}

...

READ ALL

C读写字符getchar和putchar

C语言标准库提供了读写一个字符的函数,分别是getcharputchar两个函数

getchar

使用方法也很简单,每次调用getchar时,getchar函数从文本流中读入下一个输入字符,并将其作为结果值返回

#include <stdio.h>

int main() {
  int c = getchar();
  return 0;
}

以上代码使用int类型接收返回值是因为getchar返回的是ASCII码

putchar

每次调用putchar时将会打印一个字符,如

#include <stdio.h>

int main() {
  putchar(65); // Output: A
  return 0;
}

...

READ ALL

Canvas画饼图!

近来比较忙,有点无暇顾忌小站了!于是忙里偷闲,把项目中的收获记录下来,方便他人,提升自己!

饼图

饼图,大家都应该熟知,在统计数据对比方面,几乎处处用到。如cnzz的统计饼图

full

从饼图中,很形象地展示了访问者地区的分布,以扇形为块的方式拼成一个大圆。

都使用什么方法实现

目前众多站点制作饼图大多使用Flash,或者服务器端生成,如C++、PHP、Python、Java等等,只要安装相应的基础库就能实现画图。但很少有站点这么干,因为耗费服务器资源。

cnzz里使用的就是Flash

...

READ ALL

学习C语言

C语言,一门系统级语言,虽然现在很多应用层很少用到它,但学习一下C语言有利于更好的了解系统底层

任何语言的开端都从Hello World开始,新建一个hello.c并写入以下代码

#include <stdio.h>

int main() {
  printf("Hello world");
  return 0;
}

源码写完了,下一步是需要编译

[root@test01 learn]# gcc hello.c 

编译结束后会在目录下生成a.out编译文件

[root@test01 learn]# ll
total 16
-rwxr-xr-x 1 root root 8440 Oct 10 16:45 a.out
-rw-r--r-- 1 root root   72 Oct 10 16:45 hello.c

...

READ ALL

IE6通过class动态切换样式无效解决方法

美工那边给了一个焦点图的样式

full

当图片切换的时候,底部小白点的样式要相应变化,美工写好了样式,直接在白点element上添加class=ok就好。

但在IE6下不起作用,通过工具查看,发现样式class属性已改写成功,但小白点的样式就是不变化。

后来直接用JavaScript在标签inline-style方式写样式,而不是通过class切换修改样式,问题解决了!

有点不清楚IE6下为何会有这个bug

...

READ ALL