魏长东

weichangdong

本站的几个特色功能

平时逛别的一些大牛的技术博客,看到比较好的效果,就“拿来主义”,用到这个小小站里面了。有这么几个特色。

1. 浏览文章时,用鼠标选中文字的时候,可以分享到【腾讯和新浪微博】。

2.上传图片,加了【图片水印】。

3. 实现了文章可以【加精华】。

4. 加了支付宝的【捐赠】功能。

5. 加了文章【置顶】功能。

【特别说明】以上实现的功能都是基于新浪SAE的环境。因为SAE 不再赠送免费的云豆给【中级云开发者】了,所以就吧网站被迫签到redhat的openshift。 本站的原本地址是wcd-wcd1986.rhcloud.com  所以一些功能给切掉了。比如图片之前传到SAE的仓库,现在通过sdk传到了【七牛】。

【再次说明】因为本站通过了备案,所以再一次迁移到了【阿里云的云虚拟主机】上。图片还是存在【七牛】上,用了cdn加速。

欲知效果如何,且看图片展示。

»»阅读全文

Tags: 封狼居胥

境界

当你看别人的博客写的东西,你自己都会的时候,说明你的技术已经提升了一个台阶。

开发利器

nc 发送请求到指定端口
netstat /tcpdump 查看网络请求

strace 调试程序,可以看见程序每一步的输出之类的。

另外发现了一个 Linux比较好的工具 inotify-tools。我本地mac也装了一个类似的,但是没有linux下的好。
图片处理 mac装了 gm  convert  和convert  感觉好牛逼啊 。很好用。

lua xml reader

xmlreader

自我感觉和PHP的xmlreader很像。

Provides the XmlReader interface. All functions may return nil plus an error message if LibXML2 reports an error.

  • lifecycle functions
  • methods that move the reader
  • iterators
  • others
  • extract information related to current node
  • extract information related to this reader instance

reader:read()

Moves the position of reader to the next node in the stream. Returns true if the node was read successfully, false if there are no more nodes to be read.

reader:read_inner_xml()

Reads the contents of the current node's child nodes, does not include the tags of the current node. Returns a string containing the XML content, or nil plus an error message if the current node is neither an element nor attribute, or has no child nodes.

reader:read_outer_xml()

Reads the contents of the current node, including child nodes and markup. Returns a string containing the XML content, or nil plus an error message if the current node is neither an element nor attribute, or has no child nodes.

reader:read_string()

Reads the contents of an element of a text node as a string. Returns a string or nil plus an error message if the reader is position on any other type of node.

reader:read_attribute_value()

Parses an attribute value into one or more Text and EntityReference nodes. Returns true in case of success, false if the reader was not positioned on an attribute node or all the attribute value have been read.

»»阅读全文

我的mac 开发机

突然发现我的mac装了好多技术相关的,ide就不列举了。

老本行php:php7,php的yaf框架,composer

数据库:mysql,mongodb,postgresql,redis,elastic search,以及es的插件es head

lua相关:openresty,lua5.14,luarocks,operesty相关的lor框架,operesty相关的lapis框架,基于lor的orange。vanilla香草框架(被我卸载了,感觉不咋喜欢)

版本控制:svn(mac自带的),git

其他对于我比较边缘的:nodejs,npm,go,grunt,ab(自带),wrk,casperjs,phomtonjs,jq,java。

其中好多不是我本意想安装的,比如grunt,casperjs,postgresql,是我在折腾别的东东的时候,需要他就安装了。其实上面好多我都在windows装过了,也折腾过了。

最近没事想折腾go,但是发现go有些恶心的地方,以至于我不想搞了(实在闲的蛋疼的时候,就看看),但是不依赖环境这一点我却非常喜欢。还有就是觉得他适合做一些Linux命令。

还是把主力放到lua上吧,以后lua前段api,php后台,完美胜任各种工作。

Nginx 的 Echo 模块 —— echo-nginx-module

 location /hello {
    echo "hello, world!";
  }

  location /hello {
    echo -n "hello, "
    echo "world!";
  }

  location /timed_hello {
    echo_reset_timer;
    echo hello world;
    echo "'hello world' takes about $echo_timer_elapsed sec.";
    echo hiya igor;
    echo "'hiya igor' takes about $echo_timer_elapsed sec.";
  }

  location /echo_with_sleep {
    echo hello;
    echo_flush;  # ensure the client can see previous output immediately
    echo_sleep   2.5;  # in sec
    echo world;
  }

  # in the following example, accessing /echo yields
  #   hello
  #   world
  #   blah
  #   hiya
  #   igor
  location /echo {
      echo_before_body hello;
      echo_before_body world;
      proxy_pass $scheme://127.0.0.1:$server_port$request_uri/more;
      echo_after_body hiya;
      echo_after_body igor;
  }
  location /echo/more {
      echo blah;
  }

  # the output of /main might be
  #   hello
  #   world
  #   took 0.000 sec for total.
  # and the whole request would take about 2 sec to complete.
  location /main {
      echo_reset_timer;
 
      # subrequests in parallel
      echo_location_async /sub1;
      echo_location_async /sub2;
 
      echo "took $echo_timer_elapsed sec for total.";
  }
  location /sub1 {
      echo_sleep 2;
      echo hello;
  }
  location /sub2 {
      echo_sleep 1;
      echo world;
  }

  # the output of /main might be
  #   hello
  #   world
  #   took 3.003 sec for total.
  # and the whole request would take about 3 sec to complete.
  location /main {
      echo_reset_timer;
 
      # subrequests in series (chained by CPS)
      echo_location /sub1;
      echo_location /sub2;
 
      echo "took $echo_timer_elapsed sec for total.";
  }
  location /sub1 {
      echo_sleep 2;
      echo hello;
  }
  location /sub2 {
      echo_sleep 1;
      echo world;
  }

  # Accessing /dup gives
  #   ------ END ------
  location /dup {
    echo_duplicate 3 "--";
    echo_duplicate 1 " END ";
    echo_duplicate 3 "--";
    echo;
  }

  # /bighello will generate 1000,000,000 hello's.
  location /bighello {
    echo_duplicate 1000_000_000 'hello';
  }

  # echo back the client request
  location /echoback {
    echo_duplicate 1 $echo_client_request_headers;
    echo "\r";
 
    echo_read_request_body;
 
    echo_request_body;
  }

  # GET /multi will yields
  #   querystring: foo=Foo
  #   method: POST
  #   body: hi
  #   content length: 2
  #   ///
  #   querystring: bar=Bar
  #   method: PUT
  #   body: hello
  #   content length: 5
  #   ///
  location /multi {
      echo_subrequest_async POST '/sub' -q 'foo=Foo' -b 'hi';
      echo_subrequest_async PUT '/sub' -q 'bar=Bar' -b 'hello';
  }
  location /sub {
      echo "querystring: $query_string";
      echo "method: $echo_request_method";
      echo "body: $echo_request_body";
      echo "content length: $http_content_length";
      echo '///';
  }

  # GET /merge?/foo.js&/bar/blah.js&/yui/baz.js will merge the .js resources together
  location /merge {
      default_type 'text/javascript';
      echo_foreach_split '&' $query_string;
          echo "/* JS File $echo_it */";
          echo_location_async $echo_it;
          echo;
      echo_end;
  }

  # accessing /if?val=abc yields the "hit" output
  # while /if?val=bcd yields "miss":
  location ^~ /if {
      set $res miss;
      if ($arg_val ~* '^a') {
          set $res hit;
          echo $res;
      }
      echo $res;
  }

好的测试工具wrk

比ab好,我感觉,在并发数量上,wrk更加优胜。可以用lua脚本加强一些功能。

lua和php运行速度

在网上看到一篇文章,同样的功能用集中语言实现,然后执行比较速度。其中有我喜欢的php和正在学习的lua,就把代码搞到自己的机器上运行了,lua比php慢,但是luajit却快了十倍,让我开始喜欢luajit了。我喜欢一个语言,很简单,只需要一个简单的理由。

这是执行时间

php time:17811.112880707ms php5.6

lua time:31530ms lua5.14

luajit time:2790ms

检测你的nginx是否使用了jit

ldd /usr/local/openresty/nginx/sbin/nginx

下面上代码

»»阅读全文

lua的协程学习

有些知识当时看懂了,但是过一阵子发现看半天又看不懂了,真是不知所谓。

可能是学习没有复习的原因吧。

Lua所支持的协程全称被称作协同式多线程,协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个线程,而协同程序却需要彼此协作地运行。就是说,一个具有多个协同程序的程序在任何时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显示地挂起时,它的执行才会暂停。

我的理解。就是暂停程序,等下一次调用,然后从上次停下的地方继续执行。

»»阅读全文

2016年回家图

写了

从北京住的地方到北京西站,坐高铁到西安北站,然后坐地铁去西安南站附近,然后打车去西安南站,做高速到柞水,然后我哥哥接我,在我哥哥加住宿。然后我哥开车从柞水回老家,过完年我哥开车送我们去镇安,在镇安住一晚,然后坐软卧去襄阳,然后他哥哥在襄阳东站接我们,我们又在他哥哥家住宿一晚。在襄阳呆了几天我一个人从yy家出发,去襄阳火车站,然后无座13个小时到北京

的大概过程,结果一不小心全没了,擦擦擦擦擦擦。

懒得在写了,直接上图了吧。

»»阅读全文