<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Snooda]]></title> 
<link>http://www.snooda.com/index</link> 
<description><![CDATA[Snooda's Blog]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Snooda]]></copyright>
<item>
<link>http://www.snooda.com/read/351</link>
<title><![CDATA[Windows RDP远程桌面全屏后显示菜单栏方法/退出全屏方法]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Tue, 23 Nov 2021 14:33:17 +0000</pubDate> 
<guid>http://www.snooda.com/read/351</guid> 
<description>
<![CDATA[ 
	Windows远程桌面有个很实用的功能，就是全屏时不显示菜单栏，这样鼠标在顶部操作时（常用比如切换网页tab），不会频繁唤出烦人的菜单栏。<br/>但是这样有个问题，就是全屏如果想要退出来，Ctrl+Tab是不行的，会被识别为远程切窗口。<br/>需要按Ctrl+Alt+Break退出全屏。或者Ctrl+Alt+Del打开主机的锁屏页，然后打开任务管理器的方式间接切出来。但是后者明显要麻烦很多。<br/><br/>现在越来越多的键盘并没有设置Break键了。我尝试了一下网上推荐的Ctrl+Alt+Fn+B和Ctrl+Alt+Fn+P，均没有任何作用。杂牌键鼠和tp键盘均无效。<br/><br/>偶然发现按Ctrl+Alt+Home键是可以唤出菜单栏的，这时候点击菜单栏上的最小化/退出全屏按钮就ok了，很方便。<br/>Tags - <a href="http://www.snooda.com/tags/rdp/" rel="tag">rdp</a> , <a href="http://www.snooda.com/tags/%25E8%25BF%259C%25E7%25A8%258B%25E6%25A1%258C%25E9%259D%25A2/" rel="tag">远程桌面</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/349</link>
<title><![CDATA[gitlab使用samba/cifs作为存储]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Thu, 16 Sep 2021 18:14:10 +0000</pubDate> 
<guid>http://www.snooda.com/read/349</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;gitlab默认是无法直接使用cifs挂载作为数据存储目录的，不过经过一些小小的移植，可以实现正常运行。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;1，关注.ssh/authorzed_keys，由于cifs挂载默认使用同样的权限，而.ssh/authorized_keys分别要求目录是700，文件是600权限，所以默认会导致推送代码时公钥认证失败，一般对.ssh目录额外进行一个挂载即可，挂载参数添加file_mode=0600,dir_mode=0700。另外该目录所有人需要是gitlab-shell指定的用户，默认为git，需要查询git在/etc/passwd内的uid，/etc/group中的gid，指定uid=xxx,gid=yyy。（同样适用于docker内）。<br/>&nbsp;&nbsp;&nbsp;&nbsp;2，关注repositories，默认迁移后会发现一个诡异的问题，就是提交代码可以成功，代码库也可以看到新代码，但是push events没有更新。其实是因为gitlab的hooks默认是软链，迁移至samba后，被屏蔽掉了，这里推荐gitlab自带的check工具（scripts目录下），可以检查每个仓库的hooks是否正常安装了。如果提示hooks有问题，那么直接ln -s是不行的，需要在挂载参数里添加mfsymlinks，启用软链支持，然后需要在samba server上将原有软链删除掉（如果不删除，则client端既看不到软链，但创建时又提示存在），再使用ln -s重新修复hook即可，此时可以看到，samba server是使用一个特殊文件来存储软链信息的。理论上对于所有的软链，迁移至samba后都要进行这个修复。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 修复后，就可以使用了。<br/>Tags - <a href="http://www.snooda.com/tags/gitlab/" rel="tag">gitlab</a> , <a href="http://www.snooda.com/tags/samba/" rel="tag">samba</a> , <a href="http://www.snooda.com/tags/cifs/" rel="tag">cifs</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/348</link>
<title><![CDATA[Gpu Passthrough实践-Windows7/10]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Thu, 09 Sep 2021 13:56:56 +0000</pubDate> 
<guid>http://www.snooda.com/read/348</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;Passthrough技术在虚拟化场景运用的比较成熟了，最早落地的像网卡SR-IOV技术，可以将网卡直通到虚机内，提升网络吞吐性能。像Gpu Passthrough技术，最近几年随着深度学习的快速发展，也得到了大规模的运用，不过线上用的一般都是计算卡直接跑计算任务，对于家用场景，则是另外一种玩法。现在多合一越来越流行起来，NAS，软路由，下载机，steam多合一可以更好的节省空间，避免了塞爆弱电箱。<br/>&nbsp;&nbsp;&nbsp;&nbsp;本着学习的态度，调研了一下kvm下Gpu Passthrough的落地，发现有如下几个要点<br/>&nbsp;&nbsp;&nbsp;&nbsp;1，SeaBIOS兼容性更好，OVMF使用比较复杂，Windows10用SeaBIOS也可以直通的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;2，i440fx在Windows10下运行通过，Q35在Windows7下运行通过，互换没有测试，大概率是ok的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;3，如果启用了hyper-v支持，里面的vendor_id属性一定要去掉，否则会黑屏。网上有教程说vendor_id是用来绕过n卡43错误的，但随着今年n卡放开虚拟化场景下使用，直接安装21年4月后的n卡驱动就没有43问题了，不需要vendor_id（用21年8月的30版本驱动跑通）<br/>&nbsp;&nbsp;&nbsp;&nbsp;4，存量系统也可以直通的，第一显卡设vnc，第二显卡设要直通的显卡，进系统后打好驱动，这时候物理显卡应该会报12错误，没问题，第一显卡设置成透传显卡，然后启动，rdp远程登陆，进去后查看显卡状态是否正常，有可能会报43等其他的错误，卸掉驱动后重新安装/禁用重新启用，一般会解决。之所以要先vnc那一步，主要是排查一下是否有其他影响启动的因素（如强制关机导致的默认进修复模式/开机蓝屏等，此时rdp无法登陆，vnc就很重要），实测物理机上的windows7迁移到kvm内直通成功。<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;综上，win7，存量系统，老硬件（Ivy Bridge）均可以直通，放心实践。显卡直通技术可以解决一机多人使用（同时使用需多套键鼠+多显卡）问题。<br/>Tags - <a href="http://www.snooda.com/tags/gpu/" rel="tag">gpu</a> , <a href="http://www.snooda.com/tags/passthrough/" rel="tag">passthrough</a> , <a href="http://www.snooda.com/tags/windows/" rel="tag">windows</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/347</link>
<title><![CDATA[一个C++的坑-unorderedmap之顺序问题]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Wed, 21 Jul 2021 12:34:14 +0000</pubDate> 
<guid>http://www.snooda.com/read/347</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;最近遇到一个bug，定位了非常久，感觉有必要分享出来。。。避免后人掉坑。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;前段时间发现了一个raft主从间内存不一致的场景，导致切主后数据异常。。当时费了很大的力气排除掉其他模块逻辑问题。后来问题缩小到raft state machine里。由于raft高度依赖state machine幂等性（重启、切主都会导致状态机重做，如果逻辑不是严格幂等，就会出现状态不一致问题），一般要求日志中必须记录绝对操作，尽量不记相对操作。但有一个round-robin分配资源的场景，还是依赖了一下资源节点的排序问题。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;最早是使用std::map来存，使用迭代器遍历。由于map本身是有序的，所以三副本之间是一致的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;后来有不熟悉的同学为了优化map的lg(n)性能，改用了基于哈希的unorderedmap，那么问题就来了。逻辑上map和unorderedmap都支持迭代器遍历。所以只修改数据类型，不修改逻辑是可以兼容的。简单执行也没有问题。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;已知unorderedmap肯定不能保证遍历结果的有序，但是目前场景也并不要求结果有序，只要每次遍历结果顺序不变就行，那么unorderedmap能否保证遍历顺序幂等性？目前看答案是“不能”。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;简单来想，hash表就是对元素做哈希，然后选定桶，对于桶内的元素就串到list上。那么只要按同样的顺序插入，似乎也是可以保序的。因为unorderedmap内部存在自动rehash过程。。一旦rehash，节点的遍历顺序就会变化。。。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;所以一定要重视“unordered”关键字。。。任何情况下unorderedmap都不保证任何顺序。。。。<br/>Tags - <a href="http://www.snooda.com/tags/unorderedmap/" rel="tag">unorderedmap</a> , <a href="http://www.snooda.com/tags/c%252B%252B/" rel="tag">c++</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/346</link>
<title><![CDATA[iptables规则延迟生效/不生效问题-conntrack]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Wed, 21 Jul 2021 12:04:39 +0000</pubDate> 
<guid>http://www.snooda.com/read/346</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;生产环境线上一般是不允许开启conntrack的，因为默认的连接跟踪表也就万级别，不小心打满后，容易导致很难排查的网络问题。（iptables -t nat只查看也会不知不觉启用conntrack）所以很多团队是规定禁止线上运行iptables的。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但是某些设备上，conntrack是必备的一项功能，比如网关，用来做防火墙、包转发等。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;今天就遇到了一个很特殊的场景。。表现特征是iptables配的MASQUERADE看起来并不生效。有时不知怎么回事生效以后，删掉规则居然仍然能转发。。明明删除了规则，居然还能ping通，新增了规则，居然还转发到老的地方。。<br/><br/>后来研究了一下，发现原来对于iptables的nat表来讲，只有连接新建时，才会查表进行一次匹配。当连接被conntrack后，就不再走nat表匹配了。<br/>对于icmp来讲，默认conntrack会保留30s，所以如果添加规则前30s如果ping了一下。那么添加完并不会生效已有的。。。。反之亦然。<br/>可以使用conntrack -E作为验证手段。该命令会打印conntrack模块对连接的跟踪情况。<br/><br/>如果想手动移除映射关系，可以使用conntrack -D<br/>Tags - <a href="http://www.snooda.com/tags/iptables/" rel="tag">iptables</a> , <a href="http://www.snooda.com/tags/conntrack/" rel="tag">conntrack</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/281</link>
<title><![CDATA[Thinkpad X200拆机及清灰]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Sat, 05 May 2012 07:59:32 +0000</pubDate> 
<guid>http://www.snooda.com/read/281</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;又到夏天了，电脑底面的温度直线上升，准备清一下灰尘，之前清过一次，用清洁气吹了下，但没有合适的工具，拧不开风扇，只能从散热器外侧向内侧吹，效果不好，吹过一次后还变响了，这次有了全套螺丝刀，准备彻底清洁一下。<br/><br/>&nbsp;&nbsp; 底面的螺丝很顺利，很快都拧开了，取下键盘和掌托，然后把屏幕的螺丝拧开，把屏幕下的u型塑料拿下来，开始准备拆主板，主板弄不下来，被无线网卡压住了，于是就开始拆无线网卡，结果悲剧发生了，拧下第一个螺丝后，第二个螺丝拧了几下没拧下来，因为选的十字螺丝刀头的尺寸大了点，又拧了几下，结果拧花了，鸭梨很大，搞了半天搞不下来，只能先将旁边的声卡/sd模块拆下来，腾出地方，捣鼓了半天搞不定，于是决定先搞个小刀把螺丝划出一个沟再拧，找不到小刀，去小区门口5角钱买了个，回来发现螺丝拧起来跟豆腐一样，用小刀划起来还挺硬，把小刀刀头都划平了，勉强在右边划了一个小沟，左边划了几个痕迹，螺丝刀还是吃不上力气，到了吃饭的日子，于是先吃了饭，吃完饭想起来指甲刀，指甲刀一般比较厉害，用指甲刀剪了几下左边，果然剪出一个凹槽，还是不好用力，但指甲刀也无能为力了，蛋疼，期间还试过用核桃夹夹住螺丝刀拧、用螺丝刀顶着侧边的凹槽用核桃夹敲等方法，都纹丝不动。搞了很久耐心快到极限了，之前屏幕还和主板上的无线网卡有信号线连接，现在把信号线拔掉，屏幕取下，然后换了一个稍小一点的一字螺丝刀大力拧了几下，期待奇迹的发生，结果发现螺丝真的动了。赶紧又拧了几下，终于拧下来了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;主板取下后直接就开始拆散热器了，发现cpu上的三个大螺丝是用弹簧压的，估计防止力度过大把cpu压坏，之前以为铜散热器下有空间，里面是很多灰尘，结果拆下来后发现铜散热器直接是整个和cpu/gpu接触的，没有缝隙，cpu上是导热硅脂，gpu上是导热海绵（不知道是不是这么叫，不过样子挺像），由于手头没有新的，所以不能重涂了，怕灰尘进去，急忙又把散热器拧上了。<br/>&nbsp;&nbsp;&nbsp;&nbsp;然后拧风扇和散热器之间的三个螺丝，上次就是在拧三个螺丝中的一个的时候拧不下来放弃的，这次有了合适的螺丝刀，很快拧下来了，把风扇和散热器分离后，散热器内侧的景象展现在眼前，怪不得之前吹的没效果，原来散热器和风扇之间的那个界面上覆盖了一层黑乎乎毛毛的东西，把散热器的缝隙塞住了一半，急忙把脏东西清理出来，用清洁气吹了一下，干净了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;然后开始拧螺丝，比较顺利，无线网卡右侧那个螺丝用旁边预留槽的螺丝替换了，发现那个位置的四个螺丝都跟豆腐一样，稍微一拧就花了，别的地方都还好，看来thinkpad也开始偷工减料了，我的还是08年的tp，现在出的估计更没法用了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;拧好后用鲁大师看了看，貌似效果不错，不过压力压一会后还是比较烫，但平时使用时底座温度降下来了，爽。<br/><br/><br/><br/>Tags - <a href="http://www.snooda.com/tags/thinkpad/" rel="tag">thinkpad</a> , <a href="http://www.snooda.com/tags/%25E6%258B%2586%25E6%259C%25BA/" rel="tag">拆机</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/264</link>
<title><![CDATA[为blog添加ping插件-自动通知搜索引擎]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Fri, 13 Apr 2012 14:13:07 +0000</pubDate> 
<guid>http://www.snooda.com/read/264</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;现在主流搜索引擎都支持ping功能了，每当网站更新时可以主动向搜索引擎发一个xml格式信息，称之为”ping“，通知搜索引擎来抓取，对于收录是非常有好处的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;之前一直懒得搞，今天弄了一下。<br/>&nbsp;&nbsp;&nbsp;&nbsp;参照百度站长工具里提供的格式，搞了一个，试试是否好用呢。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;添加了baidu和google的ping地址：<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;http://ping.baidu.com/ping/RPC2<br/>&nbsp;&nbsp;&nbsp;&nbsp;http://blogsearch.google.com/ping/RPC2<br/>Tags - <a href="http://www.snooda.com/tags/ping/" rel="tag">ping</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/253</link>
<title><![CDATA[nginx做反向代理proxy_pass,proxy_redirect的使用]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Sat, 10 Mar 2012 17:39:45 +0000</pubDate> 
<guid>http://www.snooda.com/read/253</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;今天用nginx作为trac的反代，发现一个问题，就是登入登出跳转的时候是白页，看了下网页相应内容，发现相应的location是空的。查了一下发现是只单纯用了proxy_pass，没有使用proxy_redirect.<br/>&nbsp;&nbsp;&nbsp;&nbsp;假设前端url是example.com。后端server域名是in.com，那么后端server在返回refresh或location的时候，host为in.com，显然这个信息直接返回给客户端是不行的，需要nginx做转换，这时可以设置:<br/>&nbsp;&nbsp;&nbsp;&nbsp;proxy_redirect http://in.com&nbsp;&nbsp;/<br/>&nbsp;&nbsp;&nbsp;&nbsp;nginx会将host及port部分替换成自身的server_name及listen port。不过这种配置对server_name有多个值的情况下支持不好。<br/>我们可以用nginx内部变量来解决这一问题：<br/>&nbsp;&nbsp;&nbsp;&nbsp;proxy_redirect http://in.com http://$host:$server_port<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;搞定<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;如果不设定的话，proxy_redirect默认是default属性，官网例子是这样介绍default的：<br/><div class="quote"><div class="quote-title">引用</div><div class="quote-content">location /one/ &#123;<br/>&nbsp;&nbsp;proxy_pass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://upstream:port/two/;<br/>&nbsp;&nbsp;proxy_redirect&nbsp;&nbsp; default;<br/>&#125;<br/> <br/>location /one/ &#123;<br/>&nbsp;&nbsp;proxy_pass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; http://upstream:port/two/;<br/>&nbsp;&nbsp;proxy_redirect&nbsp;&nbsp; http://upstream:port/two/&nbsp;&nbsp; /one/;<br/>&#125;</div></div><br/><br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;我试了下，location /&#123;&#125;规则时似乎不太正常，会导致location为空。这个有待详细考证<br/>Tags - <a href="http://www.snooda.com/tags/nginx/" rel="tag">nginx</a> , <a href="http://www.snooda.com/tags/proxy_pass/" rel="tag">proxy pass</a> , <a href="http://www.snooda.com/tags/proxy_redirect/" rel="tag">proxy redirect</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/251</link>
<title><![CDATA[项目管理软件--trac安装手记]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Wed, 07 Mar 2012 17:17:25 +0000</pubDate> 
<guid>http://www.snooda.com/read/251</guid> 
<description>
<![CDATA[ 
	之前安装了redmine，确实功能多、使用简单，但ror架构实在是吃内存，小vps根本hold不住，于是还是选用python写的trac。丰富的插件使trac只要配置得当，功能还是很强大的。<br/><br/>首先安装setuptools。这个可以用apt或yum安装，也是一个类似于apt的包管理器，是针对python的。安装后可使用easy_install命令<br/>然后配置PYTHONPATH，使用easy_install默认是安装到系统路径下的。需要root权限。不推荐使用这种方式，这样会把文件放到用户不可控的位置，为以后的升级备份带来困难。所以就需要--install-dir参数（使用--prefix参数无效，不知为何），但单纯使用该参数会报指定目录不在PYTHONPATH里。这是easy_install会推荐去看一个网页，我看了下，讲的几个方法都很繁琐，也没什么理由。其实只需要export PYTHONPATH=$&#123;PYTHONPATH&#125;:your_dir即可。在.bash_profile里设置一下，避免每次都要手动。<br/>这里建议在.bash_profile里设置一下alias easy_install='easy_install --install-dir=your_dir'，这样就不用每次安装时都手动输入一大坨地址了。<br/>设置完后source .bash_profile生效一下。<br/>然后开始安装，先执行：easy_install Babel==0.9.5&nbsp;&nbsp; 这个一定要装，否则安装后的trac没有中文。<br/>然后easy_install Trac<br/>ok，trac的安装就完成了。<br/><br/>现在需要建立项目，trac需要为每个项目建立一个实例。这时在your_dir里找到trac-admin，这个是用来管理项目实例的工具。<br/>运行：trac-admin your_proj_dir initenv<br/>会提示项目名和使用的数据源。<br/>在数据源那里我使用官方推荐的：mysql://name:password@localhost:3306/test报错：trac TypeError: unsupported operand type(s) for /: 'int' and 'NoneType'&nbsp;&nbsp; 看了下代码，是数据库没有配成utf8字符集导致的。配了一下，ok了<br/>建立数据库时要使用：CREATE DATABASE IF NOT EXISTS test default charset utf8 COLLATE utf8_general_ci;<br/>建好项目后就可以登陆进行进一步设置了。<br/>首先配置用户具有admin权限：<br/>trac-admin your_proj_dir permission add user TRAC_ADMIN<br/>然后指定使用web auth进行用户验证：<br/>./tracd --port 8000 --auth="*,/your_dir/user.htdigest,trac" /your_dir<br/>user.htdigest文件是用户名密码文件，需要自己生成，比较麻烦，反正也是临时使用，这里贴个成品：<br/><br/>user:trac:fb05f80adf782a74f48a5acdc71dba65<br/>这个的文件名和密码分别是“user”，“password”<br/>启动后进入控制台<br/>进入管理，插件，开启TracAccountManager 0.3.2<br/>修改trac.ini，<br/>[components]下添加trac.web.auth.loginmodule = disabled<br/>然后在account配置里SessionStore选一个1，（为啥不知道），但不开这个就不能注册<br/>然后手动添加管理员账户<br/>然后可以用./tracd --port 8000&nbsp;&nbsp;/your_dir&nbsp;&nbsp; 启动了。<br/>用permission add给刚才添加的用户加上管理员权限。然后ok了。可以使用web登陆了<br/><br/>然后添加git支持：<br/>easy_install http://github.com/hvr/trac-git-plugin/tarball/master<br/>暂时没找到支持远程git的方法<br/><br/><br/>Tags - <a href="http://www.snooda.com/tags/trac/" rel="tag">trac</a> , <a href="http://www.snooda.com/tags/redmine/" rel="tag">redmine</a>
]]>
</description>
</item><item>
<link>http://www.snooda.com/read/250</link>
<title><![CDATA[一个unsigned int（size_t）的坑]]></title> 
<author>snooda &lt;admin@snooda.com&gt;</author>
<category><![CDATA[默认分类]]></category>
<pubDate>Wed, 07 Mar 2012 14:24:19 +0000</pubDate> 
<guid>http://www.snooda.com/read/250</guid> 
<description>
<![CDATA[ 
	&nbsp;&nbsp;&nbsp;&nbsp;前几天把一个函数的返回值由int改为size_t了。当时心想就是改个类型的问题，逻辑没啥要动的。反正都是算数。<br/>编译器什么也没报。似乎没什么问题。<br/>&nbsp;&nbsp;&nbsp;&nbsp;后来凑巧又改了一下另外一个程序的相同函数，结果编译的时候报了error，说试图转换-1到unsigned。一检查，果然程序中的异常分支返回了-1.急忙改了过来。<br/>&nbsp;&nbsp;&nbsp;&nbsp;所以在返回值是size_t类型的函数中，异常处理要注意。（主要是c程序，因为没有异常）<br/>Tags - <a href="http://www.snooda.com/tags/size_t/" rel="tag">size t</a>
]]>
</description>
</item>
</channel>
</rss>