﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-stone2083</title><link>http://www.blogjava.net/stone2083/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 07:51:25 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 07:51:25 GMT</pubDate><ttl>60</ttl><item><title>Camunda学习点滴</title><link>http://www.blogjava.net/stone2083/archive/2022/05/16/450746.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Mon, 16 May 2022 02:10:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2022/05/16/450746.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/450746.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2022/05/16/450746.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/450746.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/450746.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1. 主要包括：<br>    架构总览、核心概念关系、场景例子、源码分析<br>2. 建议阅读顺序<br>    2.1 从架构总览，了解整体camunda概念，包括DB表结构，内心有概念和底层存储的关系映射<br>    2.2 再解核心概念关系，建立业务概念、代码模型、表结构的映射关系<br>    2.3 通过场景例子，了解不同概念的使用场景，配置<br>    2.4 通过源码分析，了解底层实现，方便必要时对其做扩展&nbsp;&nbsp;<a href='http://www.blogjava.net/stone2083/archive/2022/05/16/450746.html'>阅读全文</a><img src ="http://www.blogjava.net/stone2083/aggbug/450746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2022-05-16 10:10 <a href="http://www.blogjava.net/stone2083/archive/2022/05/16/450746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IEEE 754 浮点存储小记</title><link>http://www.blogjava.net/stone2083/archive/2017/10/12/432854.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Thu, 12 Oct 2017 03:23:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2017/10/12/432854.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/432854.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2017/10/12/432854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/432854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/432854.html</trackback:ping><description><![CDATA[<p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">IEEE 754:</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">https://zh.wikipedia.org/wiki/IEEE_754</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">FLOAT:</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">31 &nbsp;30 &nbsp; &nbsp; &nbsp; &nbsp; 22 &nbsp; &nbsp; &nbsp; 15 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">+---+----------+---------+----------+----------+</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">| &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">+---+----------+---------+----------+----------+</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">+ S + &nbsp; &nbsp; E &nbsp; &nbsp;+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; M &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">EXAMPLE(5.5):</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">=============================</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">int main() {</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; float a = 5.5;</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; int *p = &amp;a;</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; printf("%d\n", *p);</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; printf("%X\n", *p);</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">}</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">gcc -o main main.c; ./main</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">十进制： &nbsp; &nbsp;1085276160</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">十六进制： &nbsp;40B00000</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">=============================</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">十进制 = 二进制 = 二进制指数形式</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">5.5 &nbsp; &nbsp;= 101.1 &nbsp;= 1.011 * 2^2</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">==&gt; S=0 E=2 M = 11</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">31 &nbsp;30 &nbsp; &nbsp; &nbsp; &nbsp; 22 &nbsp; &nbsp; &nbsp; 15 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">+---+----------+---------+----------+----------+</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">| 0 | 10000001 | 0110000 | 00000000 | 00000000 |</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">+---+----------+---------+----------+----------+</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">+ S + &nbsp; &nbsp; E &nbsp; &nbsp;+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; M &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">转换成INT:</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">二进制： &nbsp; &nbsp;01000000101100000000000000000000</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">十进制： &nbsp; &nbsp;1085276160</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">十六进制： &nbsp;40B00000</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">EXAMPLE(5.1):</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">===========================================</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">int main() {</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; float a = 5.1;</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; int *p = &amp;a;</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; printf("Float：\t%f\n", a);</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; printf("十进制：\t%d\n", *p);</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">&nbsp; &nbsp; printf("十六进制：\t%X\n", *p);</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">}</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">gcc -o main main.c; ./main</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">Float： &nbsp; &nbsp;5.100000</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">十进制： &nbsp; &nbsp;1084437299</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">十六进制： &nbsp;40A33333</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">===========================================</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">存储形式：0b01000000101000110011001100110011</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">有效尾数：01000110011001100110011</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">表达方式：1.01000110011001100110011 * 2^2 ==&gt; 101.000110011001100110011</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">101 ==&gt; 5</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">0.000110011001100110011 ==&gt; 2^-4 + 2^-5 + 2^-8 + 2^-9 + 2^-12 + 2^-13 + 2^-16 + 2^-17 + 2^-20 + 2^-21</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;"><br /></p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">实际表达： &nbsp; &nbsp; &nbsp;5.09999990463256836</p><p style="margin: 0px; font-family: Menlo; font-size: 15px; line-height: 24px; widows: 1;">保留6位小数： &nbsp; 5.100000</p><img src ="http://www.blogjava.net/stone2083/aggbug/432854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2017-10-12 11:23 <a href="http://www.blogjava.net/stone2083/archive/2017/10/12/432854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>socks协议+netty实现（协议部分）</title><link>http://www.blogjava.net/stone2083/archive/2016/09/08/431772.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Thu, 08 Sep 2016 04:51:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2016/09/08/431772.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/431772.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2016/09/08/431772.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/431772.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/431772.html</trackback:ping><description><![CDATA[<img src="http://www.blogjava.net/images/blogjava_net/stone2083/socks.thu.png" border="0" alt="" /><img src ="http://www.blogjava.net/stone2083/aggbug/431772.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2016-09-08 12:51 <a href="http://www.blogjava.net/stone2083/archive/2016/09/08/431772.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>docker overlay network</title><link>http://www.blogjava.net/stone2083/archive/2015/10/21/427854.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Wed, 21 Oct 2015 07:14:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2015/10/21/427854.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/427854.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2015/10/21/427854.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/427854.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/427854.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: docker overlay network&nbsp;&nbsp;<a href='http://www.blogjava.net/stone2083/archive/2015/10/21/427854.html'>阅读全文</a><img src ="http://www.blogjava.net/stone2083/aggbug/427854.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2015-10-21 15:14 <a href="http://www.blogjava.net/stone2083/archive/2015/10/21/427854.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>四张图了解iptables原理和使用</title><link>http://www.blogjava.net/stone2083/archive/2015/05/08/424946.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Fri, 08 May 2015 05:01:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2015/05/08/424946.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/424946.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2015/05/08/424946.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/424946.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/424946.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 四张图了解iptables原理和使用&nbsp;&nbsp;<a href='http://www.blogjava.net/stone2083/archive/2015/05/08/424946.html'>阅读全文</a><img src ="http://www.blogjava.net/stone2083/aggbug/424946.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2015-05-08 13:01 <a href="http://www.blogjava.net/stone2083/archive/2015/05/08/424946.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mykeepass for command line</title><link>http://www.blogjava.net/stone2083/archive/2014/11/06/419598.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Thu, 06 Nov 2014 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2014/11/06/419598.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/419598.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2014/11/06/419598.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/419598.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/419598.html</trackback:ping><description><![CDATA[命令行下的类似keepass一个东东.<br /><br /><strong>如何使用</strong><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->Command&nbsp;line&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;Keep&nbsp;Password.<br />Usage:<br />&nbsp;&nbsp;keepass.sh&nbsp;-l<br />&nbsp;&nbsp;keepass.sh&nbsp;-e&nbsp;plain-text<br />&nbsp;&nbsp;keepass.sh&nbsp;-d&nbsp;encoded-text<br />&nbsp;&nbsp;keepass.sh&nbsp;-s&nbsp;encoded-text&nbsp;name</div><br /><strong>-l<br /></strong>展示保存下所有加密后的密码信息<br /><strong>-e<br /></strong>将明文密码, 加密, 密文自动保存到剪切板上<br /><strong>-d<br /></strong>将密文界面, 解密后的明文自动保存到剪切板上<br /><strong>-s<br /></strong>将密文持久化保存到文件中<br /><br /><strong>代码实现<br /></strong><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">#</span><span style="color: #008000; ">!/bin/sh</span><span style="color: #008000; "><br /></span><br />DATA=<span style="color: #800000; ">"</span><span style="color: #800000; ">$HOME/.password/data</span><span style="color: #800000; ">"</span><br />declare&nbsp;-a&nbsp;passwords<br /><br />function&nbsp;enc()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">$1:&nbsp;plain&nbsp;text</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$1</span><span style="color: #800000; ">"</span>&nbsp;|&nbsp;openssl&nbsp;enc&nbsp;-des&nbsp;|&nbsp;base64<br />}<br /><br />function&nbsp;dec()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">$1:&nbsp;encoded&nbsp;text</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$1</span><span style="color: #800000; ">"</span>&nbsp;|&nbsp;base64&nbsp;-D&nbsp;|&nbsp;openssl&nbsp;enc&nbsp;-des&nbsp;-d<br />}<br /><br />function&nbsp;sync()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;((loop=0;loop&lt;${<span style="color: #008000; ">#</span><span style="color: #008000; ">passwords[*]};loop++))</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;-z&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">${passwords[$loop]}</span><span style="color: #800000; ">"</span>&nbsp;];then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value=<span style="color: #800000; ">"</span><span style="color: #800000; ">$value\n${passwords[$loop]}</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$value&nbsp;&gt;&nbsp;$DATA<br />}<br /><br />function&nbsp;save()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">$1&nbsp;encoded&nbsp;password</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">$2&nbsp;name</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;((loop=0;&nbsp;loop&lt;${<span style="color: #008000; ">#</span><span style="color: #008000; ">passwords[*]};&nbsp;loop++))</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info=${passwords[$loop]}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password=$(echo&nbsp;$info&nbsp;|&nbsp;awk&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">{print&nbsp;$1}</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=$(echo&nbsp;$info&nbsp;|&nbsp;awk&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">{print&nbsp;$2}</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$2</span><span style="color: #800000; ">"</span>&nbsp;==&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$name</span><span style="color: #800000; ">"</span>&nbsp;];then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;passwords[$loop]=<span style="color: #800000; ">"</span><span style="color: #800000; ">$1&nbsp;$2</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;done<br />&nbsp;&nbsp;&nbsp;&nbsp;passwords[$loop]=<span style="color: #800000; ">"</span><span style="color: #800000; ">$1&nbsp;$2</span><span style="color: #800000; ">"</span><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;sync<br />}<br /><br />function&nbsp;delete()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">$1:&nbsp;name</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;((loop=0;&nbsp;loop&lt;${<span style="color: #008000; ">#</span><span style="color: #008000; ">passwords[*]};&nbsp;loop++))</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info=${passwords[$loop]}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;password=$(echo&nbsp;$info&nbsp;|&nbsp;awk&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">{print&nbsp;$1}</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=$(echo&nbsp;$info&nbsp;|&nbsp;awk&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">{print&nbsp;$2}</span><span style="color: #800000; ">'</span>)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$1</span><span style="color: #800000; ">"</span>&nbsp;==&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$name</span><span style="color: #800000; ">"</span>&nbsp;];then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;passwords[$loop]=<span style="color: #800000; ">""</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;done<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;sync<br />}<br /><br />function&nbsp;list()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;((loop=0;loop&lt;${<span style="color: #008000; ">#</span><span style="color: #008000; ">passwords[*]};loop++))</span><span style="color: #008000; "><br /></span>&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;${passwords[$loop]}<br />&nbsp;&nbsp;&nbsp;&nbsp;done<br />}<br /><br />function&nbsp;help()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">Command&nbsp;line&nbsp;for&nbsp;Keep&nbsp;Password.</span><span style="color: #800000; "><br /></span>Usage:<br />&nbsp;&nbsp;keepass.sh&nbsp;-l<br />&nbsp;&nbsp;keepass.sh&nbsp;-e&nbsp;plain-text<br />&nbsp;&nbsp;keepass.sh&nbsp;-d&nbsp;encoded-text<br />&nbsp;&nbsp;keepass.sh&nbsp;-s&nbsp;encoded-text&nbsp;name<span style="color: #800000; ">"<br /></span>}<br /><br />function&nbsp;init()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;loop=0<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;read&nbsp;line<br />&nbsp;&nbsp;&nbsp;&nbsp;do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;[&nbsp;-z&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$line</span><span style="color: #800000; ">"</span>&nbsp;];then<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">continue</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;passwords[$loop]=$line<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;loop=$(echo&nbsp;$loop+1&nbsp;|&nbsp;bc)<br />&nbsp;&nbsp;&nbsp;&nbsp;done&nbsp;&lt;&nbsp;$DATA<br />}<br /><br />init<br />case&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$1</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #0000FF; ">in</span><br />&nbsp;&nbsp;&nbsp;&nbsp;-l)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;list<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;-e)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;enc&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$2</span><span style="color: #800000; ">"</span>&nbsp;|&nbsp;tr&nbsp;-d&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">\n</span><span style="color: #800000; ">'</span>&nbsp;|&nbsp;pbcopy<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;-d)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dec&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$2</span><span style="color: #800000; ">"</span>&nbsp;|&nbsp;tr&nbsp;-d&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">\n</span><span style="color: #800000; ">'</span>&nbsp;|&nbsp;pbcopy<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;-s)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;save&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$2</span><span style="color: #800000; ">"</span>&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$3</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;-r)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;<span style="color: #800000; ">"</span><span style="color: #800000; ">$2</span><span style="color: #800000; ">"</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />&nbsp;&nbsp;&nbsp;&nbsp;*)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;<br />esac</div><br />备注:<br />1. 纯shell打造<br />2. 目前支持Mac shell, 理论上支持linux系统(唯一的改动, 把pbcopy改成linux下剪切板复制的命令即可)<br /><br /><br /><img src ="http://www.blogjava.net/stone2083/aggbug/419598.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2014-11-06 14:45 <a href="http://www.blogjava.net/stone2083/archive/2014/11/06/419598.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SCP限速逻辑实现--带中文注释的bandwidth_limit函数</title><link>http://www.blogjava.net/stone2083/archive/2014/09/22/418166.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Mon, 22 Sep 2014 09:45:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2014/09/22/418166.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/418166.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2014/09/22/418166.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/418166.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/418166.html</trackback:ping><description><![CDATA[<div><strong>SCP限速逻辑实现--带中文注释的bandwidth_limit函数</strong></div><br />SCP支持限速, 通过-l参数, 指定拷贝的速度
<div style="font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; background-color: #eeeeee;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&nbsp;-l&nbsp;limit<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Limits&nbsp;the&nbsp;used&nbsp;bandwidth,&nbsp;specified&nbsp;in&nbsp;Kbit/s.</div>
<br />具体实现, 是在misc.c中的bandwidth_limit函数
<br />下面附上带中文注释的bandwidth_limit函数代码<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;1</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;bwlimit&nbsp;{<br /><span style="color: #008080; ">&nbsp;2</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size_t&nbsp;buflen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;每次read的buf长度</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;3</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;u_int64_t&nbsp;rate,&nbsp;thresh,&nbsp;lamt;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;rate:&nbsp;&nbsp;限速速率,&nbsp;单位kpbs<br /></span><span style="color: #008080; ">&nbsp;4</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;thresh:统计周期,read长度到了指定阈值,&nbsp;触发限速统计<br /></span><span style="color: #008080; ">&nbsp;5</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;lamt:&nbsp;&nbsp;一次统计周期内,&nbsp;read了多少长度</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;6</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;timeval&nbsp;bwstart,&nbsp;bwend;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;bwstart:&nbsp;统计周期之开始时间<br /></span><span style="color: #008080; ">&nbsp;7</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;bwend:&nbsp;&nbsp;&nbsp;统计周期之结束时间</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #008000; "></span>};<br /><span style="color: #008080; ">&nbsp;9</span>&nbsp;<br /><span style="color: #008080; ">10</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;bandwidth_limit_init(<span style="color: #0000FF; ">struct</span>&nbsp;bwlimit&nbsp;*bw,&nbsp;u_int64_t&nbsp;kbps,&nbsp;size_t&nbsp;buflen)<br /><span style="color: #008080; ">11</span>&nbsp;{<br /><span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;buflen&nbsp;=&nbsp;buflen;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化read&nbsp;buf长度</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">13</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;rate&nbsp;=&nbsp;kbps;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化限速速率</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">14</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;thresh&nbsp;=&nbsp;bw-&gt;rate;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化统计周期</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">15</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;lamt&nbsp;=&nbsp;0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化当前read长度</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">16</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;timerclear(&amp;bw-&gt;bwstart);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化统计开始时间</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">17</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;timerclear(&amp;bw-&gt;bwend);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;初始化统计结束时间</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">18</span>&nbsp;<span style="color: #008000; "></span>}<br /><span style="color: #008080; ">19</span>&nbsp;<br /><span style="color: #008080; ">20</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;bandwidth_limit(<span style="color: #0000FF; ">struct</span>&nbsp;bwlimit&nbsp;*bw,&nbsp;size_t&nbsp;read_len)<br /><span style="color: #008080; ">21</span>&nbsp;{<br /><span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;u_int64_t&nbsp;waitlen;<br /><span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;timespec&nbsp;ts,&nbsp;rm;<br /><span style="color: #008080; ">24</span>&nbsp;<br /><span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置统计开始时间,&nbsp;为当前时间</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">26</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!timerisset(&amp;bw-&gt;bwstart))&nbsp;{<br /><span style="color: #008080; ">27</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;bw-&gt;bwstart,&nbsp;NULL);<br /><span style="color: #008080; ">28</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br /><span style="color: #008080; ">29</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">30</span>&nbsp;<br /><span style="color: #008080; ">31</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置当前read长度</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">32</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;lamt&nbsp;+=&nbsp;read_len;<br /><span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;判断当前read长度是否到达统计周期的阈值</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">34</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(bw-&gt;lamt&nbsp;&lt;&nbsp;bw-&gt;thresh)<br /><span style="color: #008080; ">35</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br /><span style="color: #008080; ">36</span>&nbsp;<br /><span style="color: #008080; ">37</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;设置统计结束时间,为当前时间</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">38</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;bw-&gt;bwend,&nbsp;NULL);<br /><span style="color: #008080; ">39</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;bwend变量复用,&nbsp;这个时候,&nbsp;bwend含义为,&nbsp;本次统计周期实际开销的时间:&nbsp;既read&nbsp;thresh长度字节,花了多少时间.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">40</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;timersub(&amp;bw-&gt;bwend,&nbsp;&amp;bw-&gt;bwstart,&nbsp;&amp;bw-&gt;bwend);<br /><span style="color: #008080; ">41</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(!timerisset(&amp;bw-&gt;bwend))<br /><span style="color: #008080; ">42</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>;<br /><span style="color: #008080; ">43</span>&nbsp;<br /><span style="color: #008080; ">44</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;将单位从Byte变成bit</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">45</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;lamt&nbsp;*=&nbsp;8;<br /><span style="color: #008080; ">46</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;根据限速速率,&nbsp;计算理论应该花费多少时间</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">47</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;waitlen&nbsp;=&nbsp;(<span style="color: #0000FF; ">double</span>)1000000L&nbsp;*&nbsp;bw-&gt;lamt&nbsp;/&nbsp;bw-&gt;rate;<br /><span style="color: #008080; ">48</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;bwstart变量复用,&nbsp;这个时候,&nbsp;bwstart含义为,&nbsp;本次统计周期理论开销的时间</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">49</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;bwstart.tv_sec&nbsp;=&nbsp;waitlen&nbsp;/&nbsp;1000000L;<br /><span style="color: #008080; ">50</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;bwstart.tv_usec&nbsp;=&nbsp;waitlen&nbsp;%&nbsp;1000000L;<br /><span style="color: #008080; ">51</span>&nbsp;<br /><span style="color: #008080; ">52</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果理论开销时间&nbsp;&gt;&nbsp;&nbsp;实际开销时间,&nbsp;则需要做限速</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">53</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(timercmp(&amp;bw-&gt;bwstart,&nbsp;&amp;bw-&gt;bwend,&nbsp;&gt;))&nbsp;{<br /><span style="color: #008080; ">54</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;bwend变量复用,&nbsp;这个时间,&nbsp;bwend含义为,&nbsp;理论开销时间&nbsp;和&nbsp;实际开销时间的差值,&nbsp;既需要sleep的时间,&nbsp;确保达到限速到指定的rate值</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">55</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timersub(&amp;bw-&gt;bwstart,&nbsp;&amp;bw-&gt;bwend,&nbsp;&amp;bw-&gt;bwend);<br /><span style="color: #008080; ">56</span>&nbsp;<br /><span style="color: #008080; ">57</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果差值达到了秒级,&nbsp;则需要降低统计周期阈值,&nbsp;确保统计相对精确<br /></span><span style="color: #008080; ">58</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;thresh变为原先的1/2,&nbsp;但不能低于buflen的1/4</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">59</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(bw-&gt;bwend.tv_sec)&nbsp;{<br /><span style="color: #008080; ">60</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;thresh&nbsp;/=&nbsp;2;<br /><span style="color: #008080; ">61</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(bw-&gt;thresh&nbsp;&lt;&nbsp;bw-&gt;buflen&nbsp;/&nbsp;4)<br /><span style="color: #008080; ">62</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;thresh&nbsp;=&nbsp;bw-&gt;buflen&nbsp;/&nbsp;4;<br /><span style="color: #008080; ">63</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br /><span style="color: #008080; ">64</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;如果差值小于10毫秒,&nbsp;则需要加大统计周期阈值,&nbsp;确保统计相对精确<br /></span><span style="color: #008080; ">65</span>&nbsp;<span style="color: #008000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;thresh变为原先的2倍,&nbsp;但不能高于buflen的8倍</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">66</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(bw-&gt;bwend.tv_usec&nbsp;&lt;&nbsp;10000)&nbsp;{<br /><span style="color: #008080; ">67</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;thresh&nbsp;*=&nbsp;2;<br /><span style="color: #008080; ">68</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(bw-&gt;thresh&nbsp;&gt;&nbsp;bw-&gt;buflen&nbsp;*&nbsp;8)<br /><span style="color: #008080; ">69</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;thresh&nbsp;=&nbsp;bw-&gt;buflen&nbsp;*&nbsp;8;<br /><span style="color: #008080; ">70</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">71</span>&nbsp;<br /><span style="color: #008080; ">72</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;乖乖的睡一会吧,&nbsp;以达到限速目的</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">73</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TIMEVAL_TO_TIMESPEC(&amp;bw-&gt;bwend,&nbsp;&amp;ts);<br /><span style="color: #008080; ">74</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">while</span>&nbsp;(nanosleep(&amp;ts,&nbsp;&amp;rm)&nbsp;==&nbsp;-1)&nbsp;{<br /><span style="color: #008080; ">75</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;(errno&nbsp;!=&nbsp;EINTR)<br /><span style="color: #008080; ">76</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">break</span>;<br /><span style="color: #008080; ">77</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ts&nbsp;=&nbsp;rm;<br /><span style="color: #008080; ">78</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">79</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">80</span>&nbsp;<br /><span style="color: #008080; ">81</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000; ">//</span><span style="color: #008000; ">&nbsp;新的统计周期开始,&nbsp;初始化lamt,&nbsp;bwstart变量</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">82</span>&nbsp;<span style="color: #008000; "></span>&nbsp;&nbsp;&nbsp;&nbsp;bw-&gt;lamt&nbsp;=&nbsp;0;<br /><span style="color: #008080; ">83</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gettimeofday(&amp;bw-&gt;bwstart,&nbsp;NULL);<br /><span style="color: #008080; ">84</span>&nbsp;}</div><img src ="http://www.blogjava.net/stone2083/aggbug/418166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2014-09-22 17:45 <a href="http://www.blogjava.net/stone2083/archive/2014/09/22/418166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将图片转成HTML格式--原理&amp;代码</title><link>http://www.blogjava.net/stone2083/archive/2013/12/20/407809.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Fri, 20 Dec 2013 06:28:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2013/12/20/407809.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/407809.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2013/12/20/407809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/407809.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/407809.html</trackback:ping><description><![CDATA[之前的文章，因为贴了效果图，导致无法编辑。<br />
<div>@see http://www.blogjava.net/stone2083/archive/2013/12/20/407807.html</div>
<br />
<h1>
原理</h1>
使用table,tr/td作为一个像素点，画点。<br />
<img src="http://www.blogjava.net/images/blogjava_net/stone2083/misc/img2html.png" width="800" height="250" alt="" /><br />
<br />
<br />
<h1>
代码</h1>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #008080; ">&nbsp;2</span>&nbsp;<span style="color: #008000; "></span><span style="color: #0000FF; ">import</span>&nbsp;sys,&nbsp;optparse,&nbsp;Image<br />
<span style="color: #008080; ">&nbsp;3</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;4</span>&nbsp;TABLE=<span style="color: #800000; ">'</span><span style="color: #800000; ">&lt;table&nbsp;id="image"&nbsp;border="0"&nbsp;cellpadding="0"&nbsp;cellspacing="0"&gt;%s&lt;/table&gt;</span><span style="color: #800000; ">'</span><br />
<span style="color: #008080; ">&nbsp;5</span>&nbsp;TR=<span style="color: #800000; ">'</span><span style="color: #800000; ">&lt;tr&gt;%s&lt;/tr&gt;</span><span style="color: #800000; ">'</span><br />
<span style="color: #008080; ">&nbsp;6</span>&nbsp;TD=<span style="color: #800000; ">'</span><span style="color: #800000; ">&lt;td&nbsp;width="1px;"&nbsp;height="1px;"&nbsp;bgcolor="%s"/&gt;</span><span style="color: #800000; ">'</span><br />
<span style="color: #008080; ">&nbsp;7</span>&nbsp;<br />
<span style="color: #008080; ">&nbsp;8</span>&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;rgb2hex(rgb):<br />
<span style="color: #008080; ">&nbsp;9</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">#{:02x}{:02x}{:02x}</span><span style="color: #800000; ">'</span>.format(rgb[0],rgb[1],rgb[2])<br />
<span style="color: #008080; ">10</span>&nbsp;<br />
<span style="color: #008080; ">11</span>&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;get_image(name,&nbsp;thumbnail=1):<br />
<span style="color: #008080; ">12</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>(thumbnail&nbsp;&gt;=&nbsp;1&nbsp;<span style="color: #0000FF; ">or</span>&nbsp;thumbnail&nbsp;&lt;=&nbsp;0):&nbsp;<br />
<span style="color: #008080; ">13</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;Image.open(name)<br />
<span style="color: #008080; ">14</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">else</span>:<br />
<span style="color: #008080; ">15</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;img&nbsp;=&nbsp;Image.open(name)<br />
<span style="color: #008080; ">16</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;img.resize((int(img.size[0]&nbsp;*&nbsp;thumbnail),int(img.size[1]&nbsp;*&nbsp;thumbnail)))<br />
<span style="color: #008080; ">17</span>&nbsp;<br />
<span style="color: #008080; ">18</span>&nbsp;<span style="color: #0000FF; ">def</span>&nbsp;convert(img):<br />
<span style="color: #008080; ">19</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trs&nbsp;=&nbsp;[]<br />
<span style="color: #008080; ">20</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;height&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(img.size[1]):<br />
<span style="color: #008080; ">21</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tds&nbsp;=&nbsp;[]<br />
<span style="color: #008080; ">22</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;width&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;xrange(img.size[0]):<br />
<span style="color: #008080; ">23</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tds.append(TD&nbsp;%&nbsp;rgb2hex(img.getpixel((width,&nbsp;height))))<br />
<span style="color: #008080; ">24</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trs.append(TR&nbsp;%&nbsp;(<span style="color: #800000; ">''</span>.join(tds)))<br />
<span style="color: #008080; ">25</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;TABLE&nbsp;%&nbsp;(<span style="color: #800000; ">''</span>.join(trs),)<br />
<span style="color: #008080; ">26</span>&nbsp;<br />
<span style="color: #008080; ">27</span>&nbsp;parser&nbsp;=&nbsp;optparse.OptionParser(<span style="color: #800000; ">'</span><span style="color: #800000; ">Usage:&nbsp;%prog&nbsp;[options]&nbsp;image</span><span style="color: #800000; ">'</span>)<br />
<span style="color: #008080; ">28</span>&nbsp;parser.add_option(<span style="color: #800000; ">'</span><span style="color: #800000; ">-c</span><span style="color: #800000; ">'</span>,&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">--compress</span><span style="color: #800000; ">'</span>,&nbsp;dest=<span style="color: #800000; ">'</span><span style="color: #800000; ">thumbnail</span><span style="color: #800000; ">'</span>,&nbsp;default=<span style="color: #800000; ">'</span><span style="color: #800000; ">1</span><span style="color: #800000; ">'</span>,&nbsp;metavar=<span style="color: #800000; ">'</span><span style="color: #800000; ">float</span><span style="color: #800000; ">'</span>,&nbsp;help=<span style="color: #800000; ">'</span><span style="color: #800000; ">specify&nbsp;the&nbsp;compress&nbsp;value&nbsp;(0,&nbsp;1)</span><span style="color: #800000; ">'</span>)<br />
<span style="color: #008080; ">29</span>&nbsp;parser.add_option(<span style="color: #800000; ">'</span><span style="color: #800000; ">-o</span><span style="color: #800000; ">'</span>,&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">--out</span><span style="color: #800000; ">'</span>,&nbsp;dest=<span style="color: #800000; ">'</span><span style="color: #800000; ">out</span><span style="color: #800000; ">'</span>,&nbsp;default=<span style="color: #800000; ">'</span><span style="color: #800000; ">out.html</span><span style="color: #800000; ">'</span>,&nbsp;help=<span style="color: #800000; ">'</span><span style="color: #800000; ">specify&nbsp;the&nbsp;output&nbsp;file</span><span style="color: #800000; ">'</span>)<br />
<span style="color: #008080; ">30</span>&nbsp;opts,&nbsp;args&nbsp;=&nbsp;parser.parse_args()<br />
<span style="color: #008080; ">31</span>&nbsp;<br />
<span style="color: #008080; ">32</span>&nbsp;<span style="color: #0000FF; ">if</span>(len(args)&nbsp;!=&nbsp;1):&nbsp;<br />
<span style="color: #008080; ">33</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parser.print_help()<br />
<span style="color: #008080; ">34</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys.exit(-1)<br />
<span style="color: #008080; ">35</span>&nbsp;<br />
<span style="color: #008080; ">36</span>&nbsp;html&nbsp;=&nbsp;open(opts.out,<span style="color: #800000; ">'</span><span style="color: #800000; ">w</span><span style="color: #800000; ">'</span>)<br />
<span style="color: #008080; ">37</span>&nbsp;html.write(convert(get_image(args[0],&nbsp;float(opts.thumbnail))))<br />
<span style="color: #008080; ">38</span>&nbsp;html.close()</div>
<br /><h3>下载地址&nbsp;</h3>https://code.google.com/p/stonelab/downloads/detail?name=img2html.py#makechanges<img src ="http://www.blogjava.net/stone2083/aggbug/407809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2013-12-20 14:28 <a href="http://www.blogjava.net/stone2083/archive/2013/12/20/407809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>将图片转成HTML格式－－用HTML画图</title><link>http://www.blogjava.net/stone2083/archive/2013/12/20/407807.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Fri, 20 Dec 2013 06:18:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2013/12/20/407807.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/407807.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2013/12/20/407807.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/407807.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/407807.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 介绍img2html，将图片转成HTML格式。用HTML来画图。效果原始图片转成HTML后的效果（压缩1倍后的效果--主意：请查看html源码，这边没有src图片属性，全是通过html代码渲染）                                                               ...&nbsp;&nbsp;<a href='http://www.blogjava.net/stone2083/archive/2013/12/20/407807.html'>阅读全文</a><img src ="http://www.blogjava.net/stone2083/aggbug/407807.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2013-12-20 14:18 <a href="http://www.blogjava.net/stone2083/archive/2013/12/20/407807.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>pystack--python stack trace--让python打印线程栈信息</title><link>http://www.blogjava.net/stone2083/archive/2013/08/19/403028.html</link><dc:creator>stone2083</dc:creator><author>stone2083</author><pubDate>Mon, 19 Aug 2013 05:15:00 GMT</pubDate><guid>http://www.blogjava.net/stone2083/archive/2013/08/19/403028.html</guid><wfw:comment>http://www.blogjava.net/stone2083/comments/403028.html</wfw:comment><comments>http://www.blogjava.net/stone2083/archive/2013/08/19/403028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/stone2083/comments/commentRss/403028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/stone2083/services/trackbacks/403028.html</trackback:ping><description><![CDATA[pystack: python stack trace. 类似java中的jstack功能.<br />
使用方式:<br />
1. https://pypi.python.org/pypi/pdbx/0.3.0 下载, 或者直接通过easyinstall安装<br />
2. python scripts中, import pdbx; pdbx.enable_pystack(); 开启pystack功能<br />
3. kill -30 pid , 就可以打印stack信息了.&nbsp;<br />
如:<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->"CP&nbsp;Server&nbsp;Thread-10"&nbsp;tid=4564467712<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-9"&nbsp;tid=4560261120<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-1"&nbsp;tid=4526608384<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-7"&nbsp;tid=4551847936<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-4"&nbsp;tid=4539228160<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-2"&nbsp;tid=4530814976<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"MainThread"&nbsp;tid=140735286018432<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;app.run()(raspctl.py:173)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;wsgi.runwsgi(self.wsgifunc(*middleware))(application.py:313)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;httpserver.runsimple(func,&nbsp;validip(listget(sys.argv,&nbsp;1,&nbsp;'')))(wsgi.py:54)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;server.start()(httpserver.py:157)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.tick()(__init__.py:1765)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;s,&nbsp;addr&nbsp;=&nbsp;self.socket.accept()(__init__.py:1800)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;sock,&nbsp;addr&nbsp;=&nbsp;self._sock.accept()(socket.py:202)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;pystack()(pdbx.py:181)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;filename,&nbsp;lineno,&nbsp;_,&nbsp;line&nbsp;in&nbsp;traceback.extract_stack(stack):(pdbx.py:169)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-5"&nbsp;tid=4543434752<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-8"&nbsp;tid=4556054528<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-3"&nbsp;tid=4535021568<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)<br />
<br />
"CP&nbsp;Server&nbsp;Thread-6"&nbsp;tid=4547641344<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.__bootstrap_inner()(threading.py:525)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.run()(threading.py:552)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;conn&nbsp;=&nbsp;self.server.requests.get()(__init__.py:1367)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;self.not_empty.wait()(Queue.py:168)<br />
&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;waiter.acquire()(threading.py:244)</div>
<br />
<br />
核心代码:<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;pystack</span><span style="color: #008000; "><br />
</span><span style="color: #0000FF; ">def</span>&nbsp;pystack():<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;tid,&nbsp;stack&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;sys._current_frames().items():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info&nbsp;=&nbsp;[]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;_get_thread(tid)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info.append(<span style="color: #800000; ">'</span><span style="color: #800000; ">"%s"&nbsp;tid=%d</span><span style="color: #800000; ">'</span>&nbsp;%&nbsp;(t.name,&nbsp;tid))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;filename,&nbsp;lineno,&nbsp;_,&nbsp;line&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;traceback.extract_stack(stack):<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;info.append(<span style="color: #800000; ">'</span><span style="color: #800000; ">&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;%s(%s:%d)</span><span style="color: #800000; ">'</span>&nbsp;%&nbsp;(line,&nbsp;filename[filename.rfind(<span style="color: #800000; ">'</span><span style="color: #800000; ">/</span><span style="color: #800000; ">'</span>)&nbsp;+&nbsp;1:],&nbsp;lineno))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">'</span><span style="color: #800000; ">\r\n</span><span style="color: #800000; ">'</span>.join(info)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">print</span>&nbsp;<span style="color: #800000; ">''</span><br />
<br />
<span style="color: #0000FF; ">def</span>&nbsp;_get_thread(tid):<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">for</span>&nbsp;t&nbsp;<span style="color: #0000FF; ">in</span>&nbsp;threading.enumerate():<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">if</span>&nbsp;t.ident&nbsp;==&nbsp;tid:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;t<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;None<br />
<br />
<span style="color: #0000FF; ">def</span>&nbsp;_pystack(sig,&nbsp;frame):<br />
&nbsp;&nbsp;&nbsp;&nbsp;pystack()<br />
<br />
<span style="color: #0000FF; ">def</span>&nbsp;enable_pystack():<br />
&nbsp;&nbsp;&nbsp;&nbsp;signal.signal(signal.SIGUSR1,&nbsp;_pystack)</div><br />有需要的朋友,赶紧拿走吧.<img src ="http://www.blogjava.net/stone2083/aggbug/403028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/stone2083/" target="_blank">stone2083</a> 2013-08-19 13:15 <a href="http://www.blogjava.net/stone2083/archive/2013/08/19/403028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>