A crazy guy
  • PHP实现斐波那契

    前几天我写了一版JavaScript与Python实现的,今天用PHP实现一下

    什么是斐波那契

    斐波那契数列指的是这样一个数列 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项开始,每一项都等于前两项之和

    代码实现

    <?php
    
    $last1 = 0;
    $last2 = 0;
    
    function fibonacci() {
      global $last1, $last2;
    
      if ($last1 == 0) {
        $last1 = 1;
        $ret = $last1;
      } else if ($last2 == 0) {
        $last2 = 1;
        $ret = $last2;
      } else {
        $tmp = $last1 + $last2;
        $last2 = $last1;
        $last1 = $tmp;
        
        $ret = $tmp;
      }
    
      return $ret;
    }
    
    for ($i = 0; $i < 10; $i++) {
      echo fibonacci()."\n";
    }
    

    ...

    READ ALL

  • 关于图片加载进度

    这里说的图片加载进度可能有两种含义:

    • 第一种,单张图片实时加载进度(浏览器实现不了)
    • 第二种,多张图片以数量来模拟加载进度(容易实现)

    在网上搜索图片加载进度几乎说的都是第二种含义,而谈及第一种的甚少, 原因就是浏览器实现不了!

    第一种的图片实时加载进度目前几乎都是与AS交互实现,因为Flash有读取加载进度的功能并且又能与JavaScript交互。因此这种模式就是在网页中嵌入一个不现实的Flash,然后在加载图片的时候出Flash的实时读取已加载数据功能,然后把数据回传给JavaScript,再去计算出百分比,实时的显示在网页上,从而实现图片加载的实时进度。

    ...

    READ ALL

  • 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等等,只要安装相应的基础库就能实现画图。但很少有站点这么干,因为耗费服务器资源。

    ...

    READ ALL