<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Elton&#039;s Blog &#187; Agile Web Development</title>
	<atom:link href="http://blog.prosight.me/index.php/category/agile-web-development/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.prosight.me</link>
	<description>移动开发，敏捷web开发，Linux服务器部署维护，web UI和UE设计，摄影</description>
	<lastBuildDate>Wed, 08 Feb 2012 00:22:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Nginx使用Linux内存加速静态文件访问</title>
		<link>http://blog.prosight.me/index.php/2012/02/889?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nginx%25e4%25bd%25bf%25e7%2594%25a8linux%25e5%2586%2585%25e5%25ad%2598%25e5%258a%25a0%25e9%2580%259f%25e9%259d%2599%25e6%2580%2581%25e6%2596%2587%25e4%25bb%25b6%25e8%25ae%25bf%25e9%2597%25ae</link>
		<comments>http://blog.prosight.me/index.php/2012/02/889#comments</comments>
		<pubDate>Sun, 05 Feb 2012 01:18:43 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Mem]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=889</guid>
		<description><![CDATA[Nginx是一个非常出色的静态资源web服务器。如果你嫌它还不够快，可以把放在磁盘中的文件，映射到内存中，减少高并发下的磁盘IO。 先做几个假设。nginx.conf中所配置站点的路径是/home/wwwroot/res，站点所对应文件原始存储路径：/opt/web/res shell脚本非常简单，思路就是拷贝资源文件到内存中，然后在把网站的静态文件链接指向到内存中即可。具体如下： 1 2 3 4 5 6 7 8 9 10 11 12 13 #! /bin/bash &#160; res_path=&#34;/opt/web/res&#34; mem_path=&#34;/dev/shm/res&#34; lk_path=&#34;/home/wwwroot/res&#34; &#160; if &#91; ! -d &#34;$mem_path&#34; &#93;; then cp -r &#34;$res_path&#34; &#34;$mem_path&#34; fi &#160; if &#91; ! -L &#34;$lk_path&#34; &#93;; then ln -s &#34;$mem_path&#34; &#34;$lk_path&#34; fi =================== 更新测试数据 利用上述方法，在公司的测试服务器上做了个测试，速度提升明显，速度几乎翻倍。 测试前提：将测试网站的首页全部内容包括html，图片，js，css等所有元素都拷贝到内存中,并且每次用户请求静态资源文件都不会缓存。使用LoadRunner按照200和100并发分别进行压力测试。 测试结果: 在高并发下全部使用磁盘文件200人并发 2分钟 [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2012/02/889/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>可伸缩性架构常用技术——之数据切分（Data Sharding/Partition）</title>
		<link>http://blog.prosight.me/index.php/2012/01/885?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e5%258f%25af%25e4%25bc%25b8%25e7%25bc%25a9%25e6%2580%25a7%25e6%259e%25b6%25e6%259e%2584%25e5%25b8%25b8%25e7%2594%25a8%25e6%258a%2580%25e6%259c%25af%25e2%2580%2594%25e2%2580%2594%25e4%25b9%258b%25e6%2595%25b0%25e6%258d%25ae%25e5%2588%2587%25e5%2588%2586%25ef%25bc%2588data-shardingpartition%25ef%25bc%2589</link>
		<comments>http://blog.prosight.me/index.php/2012/01/885#comments</comments>
		<pubDate>Sun, 29 Jan 2012 08:29:48 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Partition]]></category>
		<category><![CDATA[Sharding]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=885</guid>
		<description><![CDATA[1. 简介 我们知道，为了应对不断增长的数据，我们对数据进行切分，存储在不同的数据库里，本文提到的数据库在非特定指明的情况下，均指一个逻辑数据库（是一组数据库，比如Master-Slave），而非单一各个物理数据库。 其主要有两种方式： 垂直切分（Vertical Partition/Sharding）:就是把不同格式的数据，存储到不同的数据库。 水平切分（Horizontal Partition/Sharding）:就是把相同的数据格式的数据，存储到不同的数据库，本文将侧重这点进行讲述。 2. 垂直切分（Vertical Partition/Sharding） 对于垂直切分，其实应用非常广泛，主旨是把那些关系依赖非常紧密的数据保存到同一数据库，主要包含如下几种应用方式： 不同的应用使用不同数据库:这个非常容易理解，即对于一个企业来讲，往往有多个应用，甚至有些应用逐渐演变成两个或者多个应用，这其实就是一种垂直切分应用。 应用的不同模块使用不同的数据库:为同一应用的不同模块分别使用不同的数据库，之间提供低耦合的API进行访问。 同一应用相同模块使用不同数据库:在一些应用中，对于适合关系查询的数据，保存在关系数据库，而另外一些适合以NoSQL数据库保存的数据（例如key-value数据库），保存在NoSQL数据库中，方便数据扩展。这里给出一个例子，比如一个论坛应用，可以对个人用户信息保存在关系数据库，例如，其访问次数，个人信息等等，而对于发表的帖子和回帖，则可以保存在一个NoSQL里，方便扩展。注意，这里给出的例子并非真实例子，只是为了易于说明给出一个假设性的例子。 3. 水平切分（Horizontal Partition/Sharding） 水平切分相对比较复杂，我们还是从水平切分的策略谈起。 3.1 水平切分策略主要分为以下几种： 1. Round-Robin（轮询式）算法 顾名思义，就是把数据按照轮流的方式依次存放在的数据库节点上，比如，有2个节点，N0和N1，那么Data0放在N0节点上，Data1放在N1上，Data2放在N0上，依次类推……。 这种方式实现起来非常容易，对于数字键，我们有：n = key mod N。其中，key为数据的键，N为节点的数量，n为存放数据的节点编号；对于那些非数字键，我们可以让其转变为数字键，比如通过某些hash函数，让键值均匀分布，于是有：n = f (key) mod N。 这种方式有个缺点非常明显，不容易应对数据节点的变化，即不易进行二次切分。所谓二次分片是指，当数据的增长超过数据库容量时，需要增加数据库，或者系统故障导致某些数据库不能使用时，这时需要重新切分数据库。例如，有两个节点，N0和N1，现在需要增加一个节点N2，这时候，都需要吧N0上的数据和N1上的数据迁移到N2上，这个工作量是巨大的；并且可能导致上层应用对数据的改变，比如，之前数据Data5存储在N1上面，上层应用访问该数据时，根据key=5知道其存储在数据库N1里，那么便会在N1里查询数据，现在增加另外一个节点N2，那么这条数据被迁移到N2上了，上层应用就应该去N2上查询此数据了，这个看似简单，其实往往导致应用程序的复杂性很高。 2. 虚拟分片技术 为了保证二次分片时，避免对上层应用因为实际物理数据库发生改变而引起对数据访问逻辑的改变，中间加入了一个虚拟片段—物理片段映射表，数据对象存储在虚拟分片上，每个虚拟片段通过这个映射表找到相应的物理片段。这时间，上层应用依赖于虚拟分片，而非物理分片，只要保证虚拟片段足够多，就能避免上层应用的依赖。 3. 一致性Hash算法 为了避免数据库数量发生变化，引起大规模的数据迁移问题，而引入了一致性Hash算法。此算法由David Karger等人发表于1997年，论文题目为《Consistent hashing and random trees: distributed caching protocols for relieving hot spots on the [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2012/01/885/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用rvm在Mac中安装ruby和rails</title>
		<link>http://blog.prosight.me/index.php/2011/09/805?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25bd%25bf%25e7%2594%25a8rvm%25e5%259c%25a8mac%25e4%25b8%25ad%25e5%25ae%2589%25e8%25a3%2585ruby%25e5%2592%258crails</link>
		<comments>http://blog.prosight.me/index.php/2011/09/805#comments</comments>
		<pubDate>Fri, 09 Sep 2011 00:15:24 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=805</guid>
		<description><![CDATA[MacOS默认安装的是ruby 1.8.7，如果你想使用ruby 1.9.2的话，除了在官网下载源码编译安装外，可以使用rvm来协助安装。 STEP-1 安装RVM 在Terminal中输入以下命令即可安装 1 bash &#60; &#60;&#40;curl -s https://rvm.beginrescueend.com/install/rvm&#41; 为了可以在shell中使用，需要在.bash_profile中输入以下命令 1 2 3 4 5 cd ~/ sudo vim .bash_profile &#160; #在.bash_profile中加入 &#91;&#91; -s &#34;$HOME/.rvm/scripts/rvm&#34; &#93;&#93; &#38;amp;&#38;amp; source &#34;$HOME/.rvm/scripts/rvm&#34; # This loads RVM into a shell session. 之后退出Terminal，重启它。 STEP-2 安装Ruby 使用以下命令，可以看到rvm可以支持安装的内容 1 2 3 4 5 6 7 8 9 10 11 [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2011/09/805/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Redis中7种集合类型应用场景</title>
		<link>http://blog.prosight.me/index.php/2011/08/802?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=redis%25e4%25b8%25ad7%25e7%25a7%258d%25e9%259b%2586%25e5%2590%2588%25e7%25b1%25bb%25e5%259e%258b%25e5%25ba%2594%25e7%2594%25a8%25e5%259c%25ba%25e6%2599%25af</link>
		<comments>http://blog.prosight.me/index.php/2011/08/802#comments</comments>
		<pubDate>Tue, 30 Aug 2011 02:44:34 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Redis]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=802</guid>
		<description><![CDATA[Strings Strings 数据结构是简单的key-value类型，value其实不仅是String，也可以是数字。使用Strings类型，你可以完全实现目前 Memcached 的功能，并且效率更高。还可以享受Redis的定时持久化，操作日志及 Replication等功能。除了提供与 Memcached 一样的get、set、incr、decr 等操作外，Redis还提供了下面一些操作： 获取字符串长度 往字符串append内容 设置和获取字符串的某一段内容 设置及获取字符串的某一位（bit） 批量设置一系列字符串的内容 Hashs 在Memcached中，我们经常将一些结构化的信息打包成hashmap，在客户端序列化后存储为一个字符串的值，比如用户的昵称、年龄、性别、积分等，这时候在需要修改其中某一项时，通常需要将所有值取出反序列化后，修改某一项的值，再序列化存储回去。这样不仅增大了开销，也不适用于一些可能并发操作的场合（比如两个并发的操作都需要修改积分）。而Redis的Hash结构可以使你像在数据库中Update一个属性一样只修改某一项属性值。 Lists Lists 就是链表，相信略有数据结构知识的人都应该能理解其结构。使用Lists结构，我们可以轻松地实现最新消息排行等功能。Lists的另一个应用就是消息队列，可以利用Lists的PUSH操作，将任务存在Lists中，然后工作线程再用POP操作将任务取出进行执行。Redis还提供了操作Lists中某一段的api，你可以直接查询，删除Lists中某一段的元素。 Sets Sets 就是一个集合，集合的概念就是一堆不重复值的组合。利用Redis提供的Sets数据结构，可以存储一些集合性的数据，比如在微博应用中，可以将一个用户所有的关注人存在一个集合中，将其所有粉丝存在一个集合。Redis还为集合提供了求交集、并集、差集等操作，可以非常方便的实现如共同关注、共同喜好、二度好友等功能，对上面的所有集合操作，你还可以使用不同的命令选择将结果返回给客户端还是存集到一个新的集合中。 Sorted Sets 和Sets相比，Sorted Sets增加了一个权重参数score，使得集合中的元素能够按score进行有序排列，比如一个存储全班同学成绩的Sorted Sets，其集合value可以是同学的学号，而score就可以是其考试得分，这样在数据插入集合的时候，就已经进行了天然的排序。另外还可以用Sorted Sets来做带权重的队列，比如普通消息的score为1，重要消息的score为2，然后工作线程可以选择按score的倒序来获取工作任务。让重要的任务优先执行。 Pub/Sub Pub/Sub 从字面上理解就是发布（Publish）与订阅（Subscribe），在Redis中，你可以设定对某一个key值进行消息发布及消息订阅，当一个key值上进行了消息发布后，所有订阅它的客户端都会收到相应的消息。这一功能最明显的用法就是用作实时消息系统，比如普通的即时聊天，群聊等功能。 Transactions 谁说NoSQL都不支持事务，虽然Redis的Transactions提供的并不是严格的ACID的事务（比如一串用EXEC提交执行的命令，在执行中服务器宕机，那么会有一部分命令执行了，剩下的没执行），但是这个Transactions还是提供了基本的命令打包执行的功能（在服务器不出问题的情况下，可以保证一连串的命令是顺序在一起执行的，中间有会有其它客户端命令插进来执行）。Redis还提供了一个Watch功能，你可以对一个key进行Watch，然后再执行Transactions，在这过程中，如果这个Watched的值进行了修改，那么这个Transactions会发现并拒绝执行。]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2011/08/802/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>为自己的网站实现Heatmap</title>
		<link>http://blog.prosight.me/index.php/2011/08/795?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e4%25b8%25ba%25e8%2587%25aa%25e5%25b7%25b1%25e7%259a%2584%25e7%25bd%2591%25e7%25ab%2599%25e5%25ae%259e%25e7%258e%25b0heatmap</link>
		<comments>http://blog.prosight.me/index.php/2011/08/795#comments</comments>
		<pubDate>Sat, 20 Aug 2011 03:18:23 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=795</guid>
		<description><![CDATA[Heatmap，已经有网站提供此类服务，如：clickdensity，clicktale，crazyegg等等，甚至还有类似clickheat项目提供源代码供你直接使用。 不过最灵活的方案莫过于自己搞定，下面大概说说Heatmap的实现： 捕捉点击 当然，这需要Javascript来实现。为了不陷入浏览器兼容的泥潭，我们选择JQuery： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 &#60;script&#62; &#160; jQuery&#40;document&#41;.ready&#40;function&#40;&#41; &#123; $&#40;document&#41;.mousedown&#40;function&#40;e&#41; &#123; if &#40;e.clientX &#38;gt;= $&#40;window&#41;.width&#40;&#41; &#124;&#124; e.clientY &#38;gt;= $&#40;window&#41;.height&#40;&#41;&#41; &#123; return; &#125; &#160; $.get&#40;&#34;/path/to/a/empty/html/file&#34;, &#123; page_x : e.pageX, page_y : e.pageY, screen_width : screen.width, screen_height: screen.height &#125;&#41;; &#125;&#41;; [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2011/08/795/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MongoDB与内存管理</title>
		<link>http://blog.prosight.me/index.php/2011/08/792?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mongodb%25e4%25b8%258e%25e5%2586%2585%25e5%25ad%2598%25e7%25ae%25a1%25e7%2590%2586</link>
		<comments>http://blog.prosight.me/index.php/2011/08/792#comments</comments>
		<pubDate>Sat, 20 Aug 2011 01:33:01 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mongodb]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=792</guid>
		<description><![CDATA[但凡初次接触MongoDB的人，无不惊讶于它对内存的贪得无厌，至于个中缘由，我先讲讲Linux是如何管理内存的，再说说MongoDB是如何使用内存的，答案自然就清楚了。 据说带着问题学习更有效，那就先看一个MongoDB服务器的top命令结果： 1 2 3 4 5 6 shell&#38;gt; top -p $&#40;pidof mongod&#41; Mem: 32872124k total, 30065320k used, 2806804k free, 245020k buffers Swap: 2097144k total, 100k used, 2097044k free, 26482048k cached &#160; VIRT RES SHR %MEM 1892g 21g 21g 69.6 这台MongoDB服务器有没有性能问题？大家可以一边思考一边继续阅读。 先讲讲Linux是如何管理内存的 在Linux里（别的系统也差不多），内存有物理内存和虚拟内存之说，物理内存是什么自然无需解释，虚拟内存实际是物理内存的抽象，多数情况下，出于方便性的考虑，程序访问的都是虚拟内存地址，然后操作系统会把它翻译成物理内存地址。 很多人会把虚拟内存和Swap混为一谈，实际上Swap只是虚拟内存引申出的一种技术而已：操作系统一旦物理内存不足，为了腾出内存空间存放新内容，就会把当前物理内存中的内容放到交换分区里，稍后用到的时候再取回来，需要注意的是，Swap的使用可能会带来性能问题，偶尔为之无需紧张，糟糕的是物理内存和交换分区频繁的发生数据交换，这被称之为Swap颠簸，一旦发生这种情况，先要明确是什么原因造成的，如果是内存不足就好办了，加内存就可以解决，不过有的时候即使内存充足也可能会出现这种问题，比如MySQL就有可能出现这样的情况，解决方法是限制使用Swap： 1 shell&#38;gt; sysctl -w vm.swappiness=0 查看内存情况最常用的是free命令： 1 2 3 4 5 [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2011/08/792/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>通过JNI实现Java对C/C++的调用</title>
		<link>http://blog.prosight.me/index.php/2011/07/769?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e9%2580%259a%25e8%25bf%2587jni%25e5%25ae%259e%25e7%258e%25b0java%25e5%25af%25b9cc%25e7%259a%2584%25e8%25b0%2583%25e7%2594%25a8</link>
		<comments>http://blog.prosight.me/index.php/2011/07/769#comments</comments>
		<pubDate>Fri, 29 Jul 2011 08:20:17 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[jni]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=769</guid>
		<description><![CDATA[JNI是Java Native Interface的缩写，中文为JAVA本地调用。从Java1.1开始，Java Native Interface(JNI)标准成为java平台的一部分，它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言，尤其是C和C++而设计的，但是它并不妨碍你使用其他语言，只要调用约定受支持就可以了。 大致步骤 编写带有native声明的方法的java类 使用javac命令编译所编写的java类 使用javah命令生成扩展名为h的头文件 使用C/C++实现本地方法 将C/C++编写的文件生成动态连接库 1) 编写java程序： 1 2 3 4 5 6 7 8 9 10 11 12 public class HelloNative&#123; public native void greeting&#40;&#41;;//所有native所修饰的都是本地方法 &#160; static&#123; System.loadLibrary&#40;&#34;HelloNative&#34;&#41;;//载入本地库 &#125; &#160; public static void main&#40;String&#91;&#93; args&#41;&#123; new HelloNative&#40;&#41;.greeting&#40;&#41;; // System.out.println(System.getProperty(&#34;java.library.path&#34;)); &#125; &#125; 声明native方法：如果你想将一个方法做为一个本地方法的话，那么你就必须声明该方法为native的，并且不能实现。其中方法的参数和返回值在后面讲述。 Load动态库：System.loadLibrary(“HelloNative”);加载动态库（我们可以这样理解：我们的方法 greeting()没有实现，但是我们在下面就直接使用了，所以必须在使用之前对它进行初始化）这里一般是以static块进行加载的。同时需要注意的是System.loadLibrary();的参数“HelloNative”是动态库的名字。 2) 编译 1 javac [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2011/07/769/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>让Redis使用TCMalloc，实现高性能NOSql服务器</title>
		<link>http://blog.prosight.me/index.php/2011/07/766?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=%25e8%25ae%25a9redis%25e4%25bd%25bf%25e7%2594%25a8tcmalloc%25ef%25bc%258c%25e5%25ae%259e%25e7%258e%25b0%25e9%25ab%2598%25e6%2580%25a7%25e8%2583%25bdnosql%25e6%259c%258d%25e5%258a%25a1%25e5%2599%25a8</link>
		<comments>http://blog.prosight.me/index.php/2011/07/766#comments</comments>
		<pubDate>Thu, 28 Jul 2011 08:43:17 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[Redis]]></category>
		<category><![CDATA[tcmalloc]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=766</guid>
		<description><![CDATA[TCMalloc（Thread-Caching Malloc）是google开发的开源工具──“google-perftools”中的成员。与标准的glibc库的malloc相比，TCMalloc在内存的分配上效率和速度要高得多，可以在很大程度上提高MySQL服务器在高并发情况下的性能，降低系统负载。 TCMalloc库的安装步骤（Linux环境）： Step 1. 64位操作系统请先安装libunwind库(32位操作系统不要安装) libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能，其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。 1 2 3 4 5 6 wget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99-alpha.tar.gz tar zxvf libunwind-0.99-alpha.tar.gz cd libunwind-0.99-alpha/ CFLAGS=-fPIC ./configure make CFLAGS=-fPIC make CFLAGS=-fPIC install Step 2、安装google-perftools： 1 2 3 4 5 6 7 8 wget http://google-perftools.googlecode.com/files/google-perftools-1.8.1.tar.gz tar zxvf google-perftools-1.8.1.tar.gz cd google-perftools-1.8.1/ ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --disable-debugalloc --enable-minimal make &#38;&#38; make install &#160; [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2011/07/766/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ubuntu 11.04安装OpenCV</title>
		<link>http://blog.prosight.me/index.php/2011/07/749?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubuntu-11-04%25e5%25ae%2589%25e8%25a3%2585opencv</link>
		<comments>http://blog.prosight.me/index.php/2011/07/749#comments</comments>
		<pubDate>Wed, 27 Jul 2011 09:54:24 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[opencv]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=749</guid>
		<description><![CDATA[Step 1:安装必要的依赖包 1 sudo apt-get install build-essential libgtk2.0-dev libjpeg62-dev libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev Step 2:安装ffmpeg 1 2 3 4 5 6 7 cd ~ wget http://ffmpeg.org/releases/ffmpeg-0.7-rc1.tar.gz tar -xvzf ffmpeg-0.7-rc1.tar.gz cd ffmpeg-0.7-rc1 ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-libfaac --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libxvid --enable-x11grab --enable-swscale [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2011/07/749/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ubuntu 11.04安装gcc 4.6.1</title>
		<link>http://blog.prosight.me/index.php/2011/07/741?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=ubuntu-11-04%25e5%25ae%2589%25e8%25a3%2585gcc-4-6-1</link>
		<comments>http://blog.prosight.me/index.php/2011/07/741#comments</comments>
		<pubDate>Wed, 27 Jul 2011 07:47:50 +0000</pubDate>
		<dc:creator>Elton</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[gcc]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.prosight.me/?p=741</guid>
		<description><![CDATA[首先下载相应的源代码： ftp://ftp.dti.ad.jp/pub/lang/gcc/releases/gcc-4.6.1/ #下载 gcc-4.6.1.tar.bz2 ftp://ftp.dti.ad.jp/pub/lang/gcc/infrastructure/ #下载 gmp-4.3.2.tar.bz2 mpfr-2.4.2.tar.bz2 mpc-0.8.1.tar.gz Step 0: 1 2 3 $sudo apt-get install build-essential $sudo apt-get install zlibc $sudo apt-get install zlib1g-dev Step 1: 安装 gmp-4.3.2 1 2 3 4 #cd to src_dir $./configure --prefix=/usr/local/gmp-4.3.2 $make $sudo make install Step 2: 安装 mpfr-2.4.2 1 2 3 4 #cd to src_dir $./configure [...]]]></description>
		<wfw:commentRss>http://blog.prosight.me/index.php/2011/07/741/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>

