<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5045585014779378243</id><updated>2026-02-14T00:53:20.587-08:00</updated><category term="art"/><category term="artwork"/><category term="node.js"/><category term="perl"/><category term="python"/><category term="MongoDB"/><category term="NoSQL"/><category term="algorithm"/><category term="asynchronous"/><category term="avatar"/><category term="brushmarkers"/><category term="core dump"/><category term="eventdriven"/><category term="eventloop"/><category term="hash"/><category term="javascript"/><category term="performance"/><category term="qmail"/><category term="ruby"/><category term="solaris"/><category term="tcp"/><category term="websockets"/><category term="winsor &amp; newton"/><title type='text'>gulden-pt</title><subtitle type='html'>Gulden as a blogger</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-5630664555843089587</id><published>2017-07-12T05:00:00.001-07:00</published><updated>2017-07-12T05:00:59.606-07:00</updated><title type='text'>PAINTING BIG RED LIPS!!!!</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/oT7CNQvPo_Y&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/5630664555843089587/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/5630664555843089587' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5630664555843089587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5630664555843089587'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2017/07/painting-big-red-lips.html' title='PAINTING BIG RED LIPS!!!!'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/oT7CNQvPo_Y/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-5064821136606951626</id><published>2017-06-22T02:14:00.001-07:00</published><updated>2017-06-22T02:14:31.894-07:00</updated><title type='text'>DIY FOAM DOLL! [ PART 2]</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/jfnuj_ZjEkI&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/5064821136606951626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/5064821136606951626' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5064821136606951626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5064821136606951626'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2017/06/diy-foam-doll-part-2.html' title='DIY FOAM DOLL! [ PART 2]'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/jfnuj_ZjEkI/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-1274729148583731300</id><published>2017-02-06T03:30:00.001-08:00</published><updated>2017-02-06T03:30:30.974-08:00</updated><title type='text'>DIY Foam Doll (part 1)</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/qX2wuw2s9oY&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/1274729148583731300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/1274729148583731300' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/1274729148583731300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/1274729148583731300'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2017/02/diy-foam-doll-part-1.html' title='DIY Foam Doll (part 1)'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/qX2wuw2s9oY/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-5894499812380232930</id><published>2017-01-09T06:39:00.001-08:00</published><updated>2017-01-09T06:40:28.570-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><category scheme="http://www.blogger.com/atom/ns#" term="artwork"/><title type='text'>BIG MANDALA!</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/vtykpLa8QkI&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/5894499812380232930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/5894499812380232930' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5894499812380232930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5894499812380232930'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2017/01/big-mandala.html' title='BIG MANDALA!'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/vtykpLa8QkI/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-481706360943543133</id><published>2016-11-17T09:43:00.001-08:00</published><updated>2016-11-17T09:43:17.748-08:00</updated><title type='text'>BUTTERFLY WORLD PART 1</title><content type='html'>&lt;iframe width=&quot;480&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/nk1B4eJae0c&quot; frameborder=&quot;0&quot; allowFullScreen=&quot;&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/481706360943543133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/481706360943543133' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/481706360943543133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/481706360943543133'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2016/11/butterfly-world-part-1.html' title='BUTTERFLY WORLD PART 1'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/nk1B4eJae0c/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-5902631202786085909</id><published>2016-11-11T07:00:00.001-08:00</published><updated>2016-11-11T07:01:13.674-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><category scheme="http://www.blogger.com/atom/ns#" term="artwork"/><category scheme="http://www.blogger.com/atom/ns#" term="brushmarkers"/><category scheme="http://www.blogger.com/atom/ns#" term="winsor &amp; newton"/><title type='text'>MY TRUE GUARDIAN ANGEL</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/u20lPLLPlDE&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/5902631202786085909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/5902631202786085909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5902631202786085909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5902631202786085909'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2016/11/my-true-guardian-angel.html' title='MY TRUE GUARDIAN ANGEL'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/u20lPLLPlDE/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-8043641354237333984</id><published>2016-10-21T16:00:00.001-07:00</published><updated>2016-10-21T16:01:40.089-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><category scheme="http://www.blogger.com/atom/ns#" term="artwork"/><title type='text'>good vs evil part II</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/mcf_QuPsvnU&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/8043641354237333984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/8043641354237333984' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8043641354237333984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8043641354237333984'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2016/10/good-vs-evil-part-ii.html' title='good vs evil part II'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/mcf_QuPsvnU/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-8297878496607925003</id><published>2016-10-18T07:47:00.001-07:00</published><updated>2016-10-18T07:48:21.480-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><category scheme="http://www.blogger.com/atom/ns#" term="artwork"/><title type='text'>Good vs Evil</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/4cL_wwNpZoU&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/8297878496607925003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/8297878496607925003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8297878496607925003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8297878496607925003'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2016/10/good-vs-evil.html' title='Good vs Evil'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/4cL_wwNpZoU/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-9130983213291906058</id><published>2016-10-03T14:27:00.001-07:00</published><updated>2016-10-03T14:28:10.076-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><category scheme="http://www.blogger.com/atom/ns#" term="artwork"/><title type='text'>DRAWING A GIRL WHITH A MASSIVE DRESS (PART 1)</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/zV19NPEQkzs&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/9130983213291906058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/9130983213291906058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/9130983213291906058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/9130983213291906058'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2016/10/drawing-girl-whith-massive-dress-part-1.html' title='DRAWING A GIRL WHITH A MASSIVE DRESS (PART 1)'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/zV19NPEQkzs/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-888384950574278680</id><published>2016-09-21T14:43:00.001-07:00</published><updated>2016-09-21T15:04:13.752-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="art"/><category scheme="http://www.blogger.com/atom/ns#" term="avatar"/><title type='text'>How to DRAW an AVATAR!!!</title><content type='html'>&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;270&quot; src=&quot;https://www.youtube.com/embed/lYfZX_a8FHY&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/888384950574278680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/888384950574278680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/888384950574278680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/888384950574278680'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2016/09/how-to-draw-avatar.html' title='How to DRAW an AVATAR!!!'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/lYfZX_a8FHY/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-887155210282915405</id><published>2013-01-27T15:31:00.001-08:00</published><updated>2013-01-27T15:40:37.294-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="MongoDB"/><category scheme="http://www.blogger.com/atom/ns#" term="NoSQL"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>M101: MongoDB for Developers</title><content type='html'>&lt;br /&gt;
I am pleased to announce that I&#39;ve concluded with distinction the course of MongoDB. My final grade of 95% puts me in the top 5% of all students ( 21,116 in total) who registered for the course.&lt;br /&gt;
&lt;br /&gt;
You can find other stats on the course on the &lt;a href=&quot;http://ed-blog.10gen.com/post/38413879802/m101-completion-stats?mkt_tok=3RkMMJWWfF9wsRohuKzJZKXonjHpfsX97%2BwqWaG%2FlMI%2F0ER3fOvrPUfGjI4HS8tgI%2FqLAzICFpZo2FEJSueQcg%3D%3D&quot;&gt;link&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
And this is my certificate:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRxlZ2UnYo22g6RsCUSBP5cetMkroVd7Q8JffBHPiQ_FOOUNhRkTB7jyQPtFFtlNzoiSRgtuqyTc16gU8GN1eIRAEPlmQcHKDMmR0Lvmbpghq-yM0mbSZa61HteqzQKEeW0lpA5NEg798/s1600/Gulden_MongoDB_Certification.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;271&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRxlZ2UnYo22g6RsCUSBP5cetMkroVd7Q8JffBHPiQ_FOOUNhRkTB7jyQPtFFtlNzoiSRgtuqyTc16gU8GN1eIRAEPlmQcHKDMmR0Lvmbpghq-yM0mbSZa61HteqzQKEeW0lpA5NEg798/s400/Gulden_MongoDB_Certification.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
If you intend to start with MongoDB &lt;a href=&quot;https://education.10gen.com/&quot; target=&quot;_blank&quot;&gt;this course&lt;/a&gt; is the right place to start.</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/887155210282915405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/887155210282915405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/887155210282915405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/887155210282915405'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2013/01/m101-mongodb-for-developers.html' title='M101: MongoDB for Developers'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRxlZ2UnYo22g6RsCUSBP5cetMkroVd7Q8JffBHPiQ_FOOUNhRkTB7jyQPtFFtlNzoiSRgtuqyTc16gU8GN1eIRAEPlmQcHKDMmR0Lvmbpghq-yM0mbSZa61HteqzQKEeW0lpA5NEg798/s72-c/Gulden_MongoDB_Certification.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-8833393336392473114</id><published>2012-10-03T03:56:00.001-07:00</published><updated>2012-10-03T04:55:17.034-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="asynchronous"/><category scheme="http://www.blogger.com/atom/ns#" term="eventdriven"/><category scheme="http://www.blogger.com/atom/ns#" term="eventloop"/><category scheme="http://www.blogger.com/atom/ns#" term="javascript"/><category scheme="http://www.blogger.com/atom/ns#" term="node.js"/><category scheme="http://www.blogger.com/atom/ns#" term="websockets"/><title type='text'>Before start coding in Node.JS</title><content type='html'>Following on the Node.js hype, I&#39;ve noticed that a lot of people are talking about Node.js but do you really know how it works?&lt;br /&gt;
Before start coding in Node.js is necessary to understand how it  works internally and understand a new programming paradigm. So, in my talk i&#39;ll start talking about the internal architecture of Node.js and which core libraries are being used in windows and linux. It is very important to understand the concept of event driven programming as well as how the event loop works internally and, therefore, prevent the development of bad code or apply Node.js for a function for which it was not designed. The fundamental concepts about Node.js are very simple, but first you have to learn them.&lt;br /&gt;
&lt;br /&gt;
Finally, I will talk about how to do profiling in Node.js, some performance tips and present some real cases where Node.js is being used.&lt;br /&gt;
&lt;br /&gt;
Presentation Topics&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Internal Architecture&lt;/li&gt;
&lt;li&gt;Asynchronous I / O&lt;/li&gt;
&lt;li&gt;Event Driven Programming&lt;/li&gt;
&lt;li&gt;EventLoop&lt;/li&gt;
&lt;li&gt;Node.js is single threaded?&lt;/li&gt;
&lt;li&gt;Flow control&lt;/li&gt;
&lt;li&gt;Performance tips&lt;/li&gt;
&lt;li&gt;WebSockets&lt;/li&gt;
&lt;li&gt;Who &amp;amp; How is using Node.js&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;script async=&quot;async&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;506c16702838cc000204e3b1&quot; data-ratio=&quot;1.3333333333333333&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;

If you are interested in this talk, please contact me.&lt;span style=&quot;font-family: arial, sans-serif; font-size: x-small;&quot;&gt;&lt;span style=&quot;line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: arial, sans-serif; font-size: x-small;&quot;&gt;&lt;span style=&quot;line-height: 18px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/8833393336392473114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/8833393336392473114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8833393336392473114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8833393336392473114'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2012/10/before-start-coding-in-nodejs.html' title='Before start coding in Node.JS'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-5678532374236601440</id><published>2012-05-25T10:10:00.000-07:00</published><updated>2012-06-05T11:52:28.281-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="hash"/><category scheme="http://www.blogger.com/atom/ns#" term="node.js"/><category scheme="http://www.blogger.com/atom/ns#" term="performance"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="ruby"/><title type='text'>Hash read performance (perl,ruby,python,node.js)</title><content type='html'>&lt;br /&gt;
After having read the chapter &quot;How Hashes Scale From One To One Million Elements&quot; from the book &quot;&lt;a href=&quot;http://patshaughnessy.net/Ruby-Under-a-Microscope-Rough-Draft-May.pdf&quot; style=&quot;background-color: white; border: 0px; font-family: &#39;Helvetica Neue&#39;, Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; margin: 0px; padding: 0px;&quot;&gt;Ruby Under A Microscope&lt;/a&gt;&quot; (&lt;i&gt;This post does not dispense the reading of the respective chapter&lt;/i&gt;), I decided to play around with the subject and make some tests with other languages and do a small analysis of the performance of each. The&amp;nbsp;chosen&amp;nbsp;languages ​​were&amp;nbsp;&lt;a href=&quot;http://www.perl.org/&quot;&gt;Perl&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.ruby-lang.org/&quot;&gt;Ruby&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.python.org/&quot;&gt;Python&lt;/a&gt;&amp;nbsp;and Javascript (&lt;a href=&quot;http://nodejs.org/&quot;&gt;node.js&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
The tests focused on measuring the time in ms when retrieving an element from a hash with N elements 10.000 times and were based on tests that were performed on the book.&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
The tests were run on an Amazon EC2 server instance (free tier) with the following characteristics:&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Ubuntu Server 12.04 LTS&lt;/li&gt;
&lt;li&gt;Instance type micro&lt;/li&gt;
&lt;li&gt;Intel(R) Xeon(R) CPU E5430 @ 2.66GHz&lt;/li&gt;
&lt;li&gt;604.364 KB of memory&lt;/li&gt;
&lt;li&gt;64-bit platform&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;h4&gt;





&lt;/h4&gt;
&lt;h2&gt;






Test description&lt;/h2&gt;
&lt;div&gt;
Programs have been implemented for each of the languages ​​to be tested and they are similar as long as possible.The implementation passed by the creation of&amp;nbsp;hashes&amp;nbsp;with size equals to powers of 2, ranging from 1 to 20.&lt;/div&gt;
&lt;br /&gt;
For each of the hashes created, are made 10.000 gets of the value for a key (key=target_index), and measuring the time in&amp;nbsp;milliseconds.&lt;br /&gt;
&lt;br /&gt;
The ​​measured values are placed in an output file for later to be consumed by a program that will generate the graphics.&lt;br /&gt;
&lt;br /&gt;
&lt;h2&gt;






Comparing Ruby Versions&lt;/h2&gt;
&lt;div&gt;
From the graphs we can see greater improvements from ruby 1.8 to ruby 1.9 so 1.9 is the the way to go.&lt;/div&gt;
&lt;div&gt;
&lt;h2 style=&quot;text-align: center;&quot;&gt;




&lt;img src=&quot;http://chart.apis.google.com/chart?chxl=0:|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536|131072|262144|524288|1048576&amp;amp;chxt=x,y&amp;amp;chco=c3238a,e4e659,f33b2c,68cb0d&amp;amp;chf=bg,s,efefef&amp;amp;chd=s:0z110121434592543311,YXaYZXZYZYZZYaYZZZaY,vuvwvvuuwutwvvzvvwxw,YXYYZYXYZZXZYXaZXZaa&amp;amp;chdl=ruby-1.8.7-p358|ruby-1.9.3-p194|ree-1.8.7|ruby-1.9.2-p320&amp;amp;chtt=Hash+Reads+Performance&amp;amp;cht=lc&amp;amp;chs=500x300&amp;amp;chxr=1,0,4.4&quot; /&gt;
&lt;/h2&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Time taken to retrieve 10.000 values (ms)&lt;/div&gt;
&lt;h2&gt;






Comparing Perl Versions&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
Perl is a language with some years and performance has been stable at least since version 5.8, the results show it.Yet I hoped there were more commitment from the community in trying to optimize these values​​.&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;





&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot;&gt;



&lt;img src=&quot;http://chart.apis.google.com/chart?chxl=0:|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536|131072|262144|524288|1048576&amp;amp;chxt=x,y&amp;amp;chco=d01239,5d6c21,a4b210&amp;amp;chf=bg,s,efefef&amp;amp;chd=s:5tzusuvszzwzww26xw4z,250w2x43332213y49111,yzxzxzr1uyxz7srwu0rz&amp;amp;chdl=perl-5.8.9|perl-5.16.0|perl-5.14.2&amp;amp;chtt=Hash+Reads+Performance&amp;amp;cht=lc&amp;amp;chs=500x300&amp;amp;chxr=1,0,1.75&quot; /&gt;
&lt;/h2&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Time taken to retrieve 10.000 values (ms)&lt;/div&gt;
&lt;h2&gt;






Comparing Python Versions&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
The versions of python show few variations and show some stability between versions. However python 3.2.3 shows a slight degradation in performance.&lt;br /&gt;
I may also say that it&#39;s performance is quite interesting.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;img src=&quot;http://chart.apis.google.com/chart?chxl=0:|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536|131072|262144|524288|1048576&amp;amp;chxt=x,y&amp;amp;chco=b9ce4e,1fcf4f,9f9abe&amp;amp;chf=bg,s,efefef&amp;amp;chd=s:zst0wtzstss4tssr5tw,x343729356543527345,twtxu0t0twtttwvu03v&amp;amp;chdl=python-2.7.3|python-3.2.3|python-2.4.6&amp;amp;chtt=Hash+Reads+Performance&amp;amp;cht=lc&amp;amp;chs=500x300&amp;amp;chxr=1,0,1,0.89&quot; /&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Time taken to retrieve 10.000 values (ms)&lt;/div&gt;
&lt;div&gt;
&lt;h2&gt;






Comparing Languages&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
Represented in the graph below are the tests for all languages ​​and respective versions.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;http://chart.apis.google.com/chart?chxl=0:|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536|131072|262144|524288|1048576&amp;amp;chxt=x,y&amp;amp;chco=883a81,0c36d0,de7aa8,7d57e3,dffa6a,22a2ec,7b2835,67dfdc,2d732d,10a303,b18a2a&amp;amp;chf=bg,s,efefef&amp;amp;chd=s:WSUSRSSRUUTUTTVXTTWU,0z110121434592543311,KJJKJJKJJJJLJJJILJJ,YXaYZXZYZYZZYaYZZZaY,vuvwvvuuwutwvvzvvwxw,KLLLLKMLLLLLLLKLLLL,VWUTVTWWVWVVVVUWYVVV,YXYYZYXYZZXZYXaZXZaa,AAAAAAAOAAOOAAAOAOOO,UUTUTURVSUTUXRRTSURU,JJJKJKJKJJJJJJJJKLJ&amp;amp;chdl=perl-5.8.9|ruby-1.8.7-p358|python-2.7.3|ruby-1.9.3-p194|ree-1.8.7|python-3.2.3|perl-5.16.0|ruby-1.9.2-p320|node-0.6.18|perl-5.14.2|python-2.4.6&amp;amp;chtt=Hash+Reads+Performance&amp;amp;cht=lc&amp;amp;chs=500x300&amp;amp;chxr=1,0,4.4&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://chart.apis.google.com/chart?chxl=0:|2|4|8|16|32|64|128|256|512|1024|2048|4096|8192|16384|32768|65536|131072|262144|524288|1048576&amp;amp;chxt=x,y&amp;amp;chco=883a81,0c36d0,de7aa8,7d57e3,dffa6a,22a2ec,7b2835,67dfdc,2d732d,10a303,b18a2a&amp;amp;chf=bg,s,efefef&amp;amp;chd=s:WSUSRSSRUUTUTTVXTTWU,0z110121434592543311,KJJKJJKJJJJLJJJILJJ,YXaYZXZYZYZZYaYZZZaY,vuvwvvuuwutwvvzvvwxw,KLLLLKMLLLLLLLKLLLL,VWUTVTWWVWVVVVUWYVVV,YXYYZYXYZZXZYXaZXZaa,AAAAAAAOAAOOAAAOAOOO,UUTUTURVSUTUXRRTSURU,JJJKJKJKJJJJJJJJKLJ&amp;amp;chdl=perl-5.8.9|ruby-1.8.7-p358|python-2.7.3|ruby-1.9.3-p194|ree-1.8.7|python-3.2.3|perl-5.16.0|ruby-1.9.2-p320|node-0.6.18|perl-5.14.2|python-2.4.6&amp;amp;chtt=Hash+Reads+Performance&amp;amp;cht=lc&amp;amp;chs=500x300&amp;amp;chxr=1,0,4.4&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
Time taken to retrieve 10.000 values (ms)&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;span style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;text-align: -webkit-auto;&quot;&gt;Python was the winner for the interpreted languages.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;node.js has a great performance however the library used in node.js is not enough accurate to give us reliable values.&lt;/div&gt;
&lt;div&gt;
You can&amp;nbsp;easily&amp;nbsp;do the tests in your&amp;nbsp;environment&amp;nbsp;using my scripts, the source code used in this tests can be found on&amp;nbsp;&lt;a href=&quot;https://github.com/mgarcia/snippets/tree/master/hash_performance&quot;&gt;Github&lt;/a&gt;. I&#39;ve used&amp;nbsp;&lt;a href=&quot;https://rvm.io/&quot;&gt;rvm&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://search.cpan.org/~gugod/App-perlbrew-0.42/lib/App/perlbrew.pm&quot;&gt;perlbrew&lt;/a&gt;&amp;nbsp;and &lt;a href=&quot;https://github.com/utahta/pythonbrew&quot;&gt;pythonbrew &lt;/a&gt;to switch between versions, you can do the same if you want.&amp;nbsp;Nevertheless,&amp;nbsp;you can use your installed versions.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
Run the tests:&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
$ ./experiment1.rb&lt;/div&gt;
&lt;div&gt;
$ ./experiment1.pl&lt;/div&gt;
&lt;div&gt;
$ ./experiment1.py&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The execution of these scripts will create an output file in the form &quot;values.#{lang}-#{version}&quot; (ex: values.perl-5.8.8) for each script.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
To generate the graph just run the ruby script (requires gem&amp;nbsp;&lt;a href=&quot;https://github.com/mattetti/googlecharts&quot;&gt;googlecharts&lt;/a&gt;):&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
$ ./chart.rb&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
This script will output the link to the googlechart image.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
In the near future I might do the same but for hash writes and that will be more interesting.&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/5678532374236601440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/5678532374236601440' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5678532374236601440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/5678532374236601440'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2012/05/hash-read-performance.html' title='Hash read performance (perl,ruby,python,node.js)'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-2426326113352475846</id><published>2012-04-13T17:04:00.000-07:00</published><updated>2012-06-28T10:25:31.526-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="algorithm"/><category scheme="http://www.blogger.com/atom/ns#" term="perl"/><title type='text'>Count the number of 1&#39;s</title><content type='html'>I&#39;ve participated in a Quiz where i had to implement a function that counts the number of 1&#39;s required to reach a positive integer passed as a parameter.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;countOfOnes (12) = 5
1 - one 1
3
4
5
6
7
8
9
10 - two 1&#39;s
11 - four 1&#39;s
12 - five 1&#39;s&lt;/pre&gt;
&lt;br /&gt;
Since countOfOnes (1) = 1, they have requested to find the next number in which the parameter is equal to the return value of countOfOnes ( countOfOnes(n) = n ).&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
At first glance I&#39;ve implemented a perl one-liner that returns the number of 1&#39;s for an input number. Here it is:&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;$ perl -e &#39;$sum += () = /1/g for 1..shift; print &quot;NumberOfOnes=$sum\n&quot;&#39; 111
&lt;/pre&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;NumberOfOnes=36
&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
However, this solution was inefficient due to the high number of invocations needed to find the solution to the quiz.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So, analyzing the evolution of the mathematical calculation of the function numOfOnes, I outlined the following recursive algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;# NumOfOnes
sub num_of_ones{
  my $n = shift;

  return 0 if $n &amp;lt; 1;
  return 1 if $n &amp;lt;= 9;

  my @a = split(&#39;&#39;,$n);

  my $len = length($n);
  my $sum = 0;
  my $delta = 0;

  if($a[0] &amp;gt; 1){
    $delta += 10**($len-1);
  }else{
    $delta += substr($n,1) + 1;
  }

   $sum += $delta + $a[0]*num_of_ones(9x($len-1))+ num_of_ones(substr($n,1));
   return $sum;
}
&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
Since, recursive functions were used, which were invoked repeatedly with the same parameters, I used the &lt;a href=&quot;http://search.cpan.org/~mjd/Memoize-1.01/Memoize.pm&quot; target=&quot;_blank&quot;&gt;Memoize &lt;/a&gt;module, which makes caching for functions with the same parameters.&lt;br /&gt;
&lt;br /&gt;
Although the previous function is more efficient for calculating the numberOfOnes just for a single number, it is not when you want to go all the way incrementing to find the next number that satisfies the requested condition. Once we have the numOfOnes for the previous number, we only need to count the numOfOnes that exists in the current number and increment numOfOnes of the previous number.
&lt;br /&gt;
&lt;br /&gt;
The&amp;nbsp;following&amp;nbsp;perl on-liner is a better approach to achieve that&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;perl -e &#39;while(1){$sum += () = ++$i =~ /1/g; print &quot;Found:$i\n&quot; &amp;nbsp;if $i == $sum;}&#39;

Found:1
Found:199981
Found:199982
Found:199983
Found:199984
Found:199985
Found:199986
Found:199987
Found:199988
Found:199989
Found:199990
Found:200000
Found:200001
&lt;/pre&gt;
&lt;br /&gt;
The number after the 1 that satisfies the condition countOfOnes(n) = n is &lt;b&gt;199981&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;
The source code is &lt;a href=&quot;https://github.com/mgarcia/snippets/blob/master/number_of_ones/number_of_ones.pl&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/2426326113352475846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/2426326113352475846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/2426326113352475846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/2426326113352475846'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2012/04/count-number-of-1s.html' title='Count the number of 1&#39;s'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-1260229517437349815</id><published>2011-03-10T05:23:00.000-08:00</published><updated>2011-03-10T09:04:41.279-08:00</updated><title type='text'>How to collect CPU values from WMI. #perl #win32 #wmi</title><content type='html'>This program will demonstrate how easy it is to obtain data from Windows Management Instrumentation (&lt;a href=&quot;http://en.wikipedia.org/wiki/Windows_Management_Instrumentation&quot;&gt;WMI&lt;/a&gt;), using a perl script. By analogy other information may be collected from WMI.&lt;br /&gt;&lt;br /&gt;To obtain these data, I used the WMI Performance Counter class &quot;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa394317(v=vs.85).aspx&quot;&gt;Win32_PerfRawData_PerfOS_Processor&lt;/a&gt;&quot; , which provides me the counters that measure aspects of processor(s) activity.&lt;br /&gt;&lt;br /&gt;Since the data collected via WMI are percentages. I just needed to calculate the percentage of time used for each counter, depending on the time interval between measurements.&lt;br /&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;use warnings;&lt;br /&gt;&lt;br /&gt;use Win32::OLE;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my $interval = 1;&lt;br /&gt;my $key = &#39;Name&#39;;&lt;br /&gt;my @properties = qw(PercentIdleTime PercentProcessorTime PercentPrivilegedTime PercentUserTime PercentInterruptTime TimeStamp_Sys100NS);&lt;br /&gt;&lt;br /&gt;my $hash1 = {};&lt;br /&gt;&lt;br /&gt;my $wmi = Win32::OLE-&gt;GetObject(&quot;winmgmts://./root/cimv2&quot;)&lt;br /&gt; or die &quot;Failed to get object\n&quot;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my $list = $wmi-&gt;InstancesOf(&#39;Win32_PerfRawData_PerfOS_Processor&#39;)&lt;br /&gt; or die &quot;Failed to get instance object\n&quot;;&lt;br /&gt;&lt;br /&gt;my $v; &lt;br /&gt;foreach $v (in $list) {   &lt;br /&gt;  map{$hash1-&gt;{$v-&gt;{$key}}-&gt;{$_}  = $v-&gt;{$_} }@properties;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;while(sleep 1){&lt;br /&gt;&lt;br /&gt; $list = $wmi-&gt;InstancesOf(&#39;Win32_PerfRawData_PerfOS_Processor&#39;)&lt;br /&gt;  or die &quot;Failed to get instance object\n&quot;;&lt;br /&gt; &lt;br /&gt; my $hash = {};&lt;br /&gt; foreach $v (in $list) {   &lt;br /&gt;  map{$hash-&gt;{$v-&gt;{$key}}-&gt;{$_}  = $v-&gt;{$_} }@properties;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; my $cpu_time = sprintf(&quot;%.2f&quot;, (1 - get_value($hash1-&gt;{&#39;_Total&#39;}, $hash-&gt;{&#39;_Total&#39;}, &#39;PercentProcessorTime&#39; )) * 100);&lt;br /&gt; my $cpu_idle = sprintf(&quot;%.2f&quot;, 100-$cpu_time);&lt;br /&gt; my $cpu_user = sprintf(&quot;%.2f&quot;, get_value($hash1-&gt;{&#39;_Total&#39;}, $hash-&gt;{&#39;_Total&#39;}, &#39;PercentUserTime&#39; )* 100);&lt;br /&gt; my $cpu_priv = sprintf(&quot;%.2f&quot;, get_value($hash1-&gt;{&#39;_Total&#39;}, $hash-&gt;{&#39;_Total&#39;}, &#39;PercentPrivilegedTime&#39; )* 100);&lt;br /&gt; my $cpu_int = sprintf(&quot;%.2f&quot;, get_value($hash1-&gt;{&#39;_Total&#39;}, $hash-&gt;{&#39;_Total&#39;}, &#39;PercentInterruptTime&#39; )* 100);  &lt;br /&gt; printf &quot;CPU Time %s %% , privileged %s %% , user %s %%, interrupt %s %%\n&quot;, $cpu_time,$cpu_priv,$cpu_user,$cpu_int;&lt;br /&gt;&lt;br /&gt; $hash1 = $hash;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;exit;&lt;br /&gt;&lt;br /&gt;sub get_value {&lt;br /&gt; my $h1 = shift;&lt;br /&gt; my $h2 = shift;&lt;br /&gt; my $property = shift;&lt;br /&gt; return (($h2-&gt;{$property} - $h1-&gt;{$property})/($h2-&gt;{&#39;TimeStamp_Sys100NS&#39;}-$h1-&gt;{&#39;TimeStamp_Sys100NS&#39;}));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Output sample:&lt;br /&gt;&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;CPU Time 2.03 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 1.87 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 2.16 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 1.76 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 2.19 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 1.77 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 1.98 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 1.93 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 2.08 % , privileged 1.96 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;CPU Time 2.84 % , privileged 2.94 % , user 0.00 %, interrupt 0.00 %&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/1260229517437349815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/1260229517437349815' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/1260229517437349815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/1260229517437349815'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2011/03/how-to-collect-cpu-values-from-wmi-perl.html' title='How to collect CPU values from WMI. #perl #win32 #wmi'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-3812566495379751221</id><published>2010-09-08T10:23:00.000-07:00</published><updated>2010-09-10T22:05:17.558-07:00</updated><title type='text'>Diff between two files (unordered and with different number of lines)</title><content type='html'>This program will find the differences between two files, and should be applied in the following situations:&lt;br /&gt;&lt;ul&gt; &lt;li&gt;The files have different number of lines&lt;/li&gt; &lt;li&gt;The files are unordered.&lt;/li&gt;&lt;li&gt;`diff` fails to get the differences&lt;/li&gt;&lt;li&gt;Large files (the reason to use shell `sort` function)&lt;/li&gt;&lt;li&gt;Single record per line&lt;/li&gt;&lt;/ul&gt;For example: Imagine you have two files with a list of users, and these listings were taken from a database at different time instants. These listings will be different because users have been added and removed from the database. This script will help you to find the differences when `diff` can&#39;t resolve it.&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 16px; white-space: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;#!/usr/bin/perl -w&lt;br /&gt;&lt;br /&gt;use strict;&lt;br /&gt;&lt;br /&gt;my $file1= $ARGV[0];&lt;br /&gt;my $file2= $ARGV[1];&lt;br /&gt;&lt;br /&gt;unless($file1 and $file2){&lt;br /&gt;print &quot;Usage: $0 &amp;lt;file1&amp;gt; &amp;lt;file2&amp;gt;\n\n&quot;;&lt;br /&gt;exit;&lt;br /&gt;}&lt;br /&gt;unless( -f $file1){&lt;br /&gt;print &quot;File 1 does not exist: [$file1]\n\n&quot;;&lt;br /&gt;exit;&lt;br /&gt;}&lt;br /&gt;unless( -f $file2){&lt;br /&gt;print &quot;File 2 does not exist: [$file2]\n\n&quot;;&lt;br /&gt;exit;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;my $tmp_file1 = &#39;/tmp/f1.tmp&#39;;&lt;br /&gt;my $tmp_file2 = &#39;/tmp/f2.tmp&#39;;&lt;br /&gt;&lt;br /&gt;`sort $file1 &amp;gt; $tmp_file1`;&lt;br /&gt;`sort $file2 &amp;gt; $tmp_file2`;&lt;br /&gt;&lt;br /&gt;open(F1, $tmp_file1) or die &quot;$!&quot;;&lt;br /&gt;open(F2, $tmp_file2) or die &quot;$!&quot;;&lt;br /&gt;&lt;br /&gt;my $read_f1 = 1;&lt;br /&gt;my $read_f2 = 1;&lt;br /&gt;&lt;br /&gt;my $s1;&lt;br /&gt;my $s2;&lt;br /&gt;while(1){&lt;br /&gt;&lt;br /&gt;if (eof(F1)){print &quot;&amp;gt;&amp;gt;$_&quot; while &amp;lt;F2&amp;gt;;}&lt;br /&gt;if(eof(F2)){print &quot;&amp;lt;&amp;lt;$_&quot; while &amp;lt;F1&amp;gt;;}&lt;br /&gt;&lt;br /&gt;if($read_f1){$s1 = &amp;lt;F1&amp;gt;;}&lt;br /&gt;if($read_f2){$s2 = &amp;lt;F2&amp;gt;;}&lt;br /&gt;&lt;br /&gt;last unless $s1 and $s2;&lt;br /&gt;&lt;br /&gt;$read_f1 = 1;&lt;br /&gt;$read_f2 = 1;&lt;br /&gt;&lt;br /&gt;next if ( lc($s1) eq lc($s2) );&lt;br /&gt;&lt;br /&gt;if(lc($s1) gt lc($s2)){&lt;br /&gt;print &quot;&amp;gt;$s2&quot;;&lt;br /&gt;$read_f1 = 0;&lt;br /&gt;}else{&lt;br /&gt;print &quot;&amp;lt;$s1&quot;;&lt;br /&gt;$read_f2 = 0;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;unlink $tmp_file1 or die &quot;$!&quot;;&lt;br /&gt;unlink $tmp_file2 or die &quot;$!&quot;;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/3812566495379751221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/3812566495379751221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/3812566495379751221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/3812566495379751221'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2010/09/diff-between-two-files-unordered-and.html' title='Diff between two files (unordered and with different number of lines)'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-8683310787264977210</id><published>2010-05-12T09:46:00.000-07:00</published><updated>2010-05-12T09:59:18.762-07:00</updated><title type='text'>How to kill TCP client connections</title><content type='html'>Several times we are faced with a large number of TCP connections from the same source IP.&lt;br /&gt;How to kill that connections?&lt;br /&gt;&lt;br /&gt;This is an easy way:&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;$ for i in `lsof -i tcp@client_ip_address| awk &#39;{print $2}&#39;`; do kill -9 $i; done &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;See also : &lt;i&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Tcpkill&quot;&gt;tcpkill&lt;/a&gt;&lt;/i&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/8683310787264977210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/8683310787264977210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8683310787264977210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8683310787264977210'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2010/05/how-to-kill-tcp-client-connections.html' title='How to kill TCP client connections'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-4748351648475643439</id><published>2009-11-02T06:18:00.000-08:00</published><updated>2012-06-28T10:23:57.854-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="core dump"/><category scheme="http://www.blogger.com/atom/ns#" term="solaris"/><title type='text'>Solaris: analyze a core dump file</title><content type='html'>Whenever there is a coredump, the task of uncovering the source of the problem may not be easy. In Solaris we have some tools that will give us clues in order to solve the problem.&lt;br /&gt;
&lt;br /&gt;
Coredump files on Solaris are generated in the directory:&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;
/var/core/&lt;/pre&gt;
&lt;br /&gt;
Once in that directory, find your file core. Then run the following commands:&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;
$ pstack &lt;core_filename&gt;
core &#39;core_host_progname_1001_1_1256228346_13885&#39; of 13885: /opt/coolstack/bin/perl -w /export/home/user/bin/progname
-----------------  lwp# 1 / thread# 1  --------------------
 fede5d77 lwp_yield (fed32a00) + 7
 feddfa66 mutex_unlock (fee5c5d0) + 133
 fed846ce malloc   (15, 8be8ed0, 8dcf888, 80cf342) + 3e
 080c20ac Perl_safesysmalloc () + 2c
-----------------  lwp# 2 / thread# 2  --------------------
 fede5ceb __lwp_park (87a93c8, 87a9398, 0) + b
 fede04f0 cond_wait_queue (87a93c8, 87a9398, 0) + 5e
 fede09c4 _cond_wait (87a93c8, 87a9398) + 64
 fede0a06 cond_wait (87a93c8, 87a9398) + 21
 fede0a3f pthread_cond_wait (87a93c8, 87a9398, 1, fe7a8108) + 1b
 fe7a82a8 XS_threads__shared_cond_wait (0, 0, 0, 0, 0, 0) + 1ac
 4d580000 ???????? ()
-----------------  lwp# 3 / thread# 3  --------------------
 feabf697 add_collation (fe71bc28, feaf49b7, 1a, feaf49b7) + 54b
 feac939b cs_leave (fe71bca0, fe71bd28, 1a, 0, fe71b0c0, fefd261b) + 83
 feada60d my_xml_leave (0, fe71b160, fe71b178, feada92b) + 141
 feadac9a my_xml_parse (fe71bca0, 8dee0e8, 4755, 0, 0, 0) + 662
 feac9ae7 my_parse_charset_xml (8dee0e8, 4755, feabf14c, 0, feffdd28, 4755) + 77
 feabf7d5 my_read_charset_file (fe71bf88, fe71bf00, fe71bf50, feffb818, fe71bf14, fefce6f6) + dd
 feac01f2 get_charset_by_csname (8dd0a08, 20, 10, 0) + 16a
 feadcbab mysql_init_character_set (8b00598, 8d01a8b, c, 2) + 5f
 feaddcb5 mysql_real_connect (8b00598, 8af44a8, 89ab6f8, 89b28a0, 8afa190, cea) + 6cd
 fec24031 mysql_dr_connect () + 1add
-----------------  lwp# 4 / thread# 4  --------------------
 feabf697 add_collation (fe65cc28, feaf49b7, 1a, feaf49b7) + 54b
 feac939b cs_leave (fe65cca0, fe65cd28, 1a, 0, feaaed64, feffb104) + 83
 feada60d my_xml_leave (0, fe65c160, fe65c178, feada92b) + 141
 feadac9a my_xml_parse (fe65cca0, 8df2848, 4755, 0, 0, 0) + 662
 feac9ae7 my_parse_charset_xml (8df2848, 4755, feabf14c, 0, fee5c5d0, 4755) + 77
 feabf7d5 my_read_charset_file (0, 0, 0, 0, 0, 0) + dd
 feac01f2 get_charset_by_csname (8dd0a18, 20, 10, 0) + 16a
 feadcbab mysql_init_character_set (8bfd4c0, 8d03a9b, c, 2) + 5f
 feaddcb5 mysql_real_connect (8bfd4c0, 8bf1bf8, 8bf2380, 8bf23c8, 8bf2440, cea) + 6cd
 fec24031 mysql_dr_connect () + 1add&lt;/core_filename&gt;&lt;/pre&gt;
&lt;br /&gt;
The command above shows the last state of the stack for each thread (lwp) of the program.&lt;br /&gt;
That isn&#39;t enough we need to know in each thread the problem have occurred. There is another command that lets us know that, the &quot;pflags&quot; command.&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;
$ pflags &lt;core_filename&gt;
core &#39;core_host_progname_1001_1_1256228346_13885&#39; of 13885: /opt/coolstack/bin/perl -w /export/home/user/bin/progname
        data model = _ILP32  flags = MSACCT|MSFORK
 /1:    flags = STOPPED  yield()
        why = PR_SUSPENDED
        sigmask = 0xffbff8f7,0x0000fff7
 /2:    flags = STOPPED  lwp_park(0x0,0x0,0x0)
        why = PR_SUSPENDED
 /3:    flags = STOPPED
        why = PR_SUSPENDED
        lwppend = 0x00000400,0x00000000
 /4:    flags = 0
        sigmask = 0xffffbefc,0x0000ffff  cursig = SIGSEGV&lt;/core_filename&gt;&lt;/pre&gt;
&lt;br /&gt;
Now we know know that thread 4 have received the SIGNAL &quot;SIGSEGV&quot; (Segmentation Fault).&lt;br /&gt;
So, the SIGSEGV was generated in Thread 4 when using a MySQL function &quot;add_collation&quot;.&lt;br /&gt;
&lt;br /&gt;
With that information isn&#39;t easy to know the reason of the coredump. Lets use another command, the &quot;pmap&quot;.&lt;br /&gt;
The &quot;pmap&quot; command display information about the address space of a process, in this case the program that causes the coredump.&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;
$ pmap &lt;core_filename&gt;| less
core &#39;core_host_progname_1001_1_1256228346_13885&#39; of 13885: /opt/coolstack/bin/perl -w /export/home/user/bin/progname
08042000      24K rw---    [ stack ]
08050000    1128K r-x--  /opt/coolstack/bin/perl
08179000      52K rwx--  /opt/coolstack/bin/perl
08186000   12752K rwx--    [ heap ]
FE65A000      20K rw---    [ stack tid=4 ]
FE660000      12K r-x--  /lib/nss_dns.so.1
FE673000       4K rw---  /lib/nss_dns.so.1
FE680000      24K r-x--  /lib/nss_files.so.1
FE696000       4K rw---  /lib/nss_files.so.1
FE6A0000      64K rwx--
FE6C0000      64K rwx--
FE719000      20K rw---    [ stack tid=3 ]
FE75E000       4K rw---    [ stack tid=2 ]
FE760000      64K rw---
FE780000      64K rw---
FE7A0000      44K r-x--  /opt/coolstack/lib/perl5/5.8.8/i86pc-solaris-thread-multi/auto/threads/shared/shared.so
FE7BA000       8K rwx--  /opt/coolstack/lib/perl5/5.8.8/i86pc-solaris-thread-multi/auto/threads/shared/shared.so
FE7C0000       8K r-x--  /opt/coolstack/lib/perl5/5.8.8/i86pc-solaris-thread-multi/auto/Cwd/Cwd.so
FE7D1000       4K rwx--  /opt/coolstack/lib/perl5/5.8.8/i86pc-solaris-thread-multi/auto/Cwd/Cwd.so
FE7E0000      64K rwx--
FE800000      40K r-x--  /usr/sfw/lib/libcrypto_extra.so.0.9.7
FE81A000       4K rw---  /usr/sfw/lib/libcrypto_extra.so.0.9.7
FE820000      36K r-x--  /usr/sfw/lib/libssl_extra.so.0.9.7
FE839000       4K rw---  /usr/sfw/lib/libssl_extra.so.0.9.7
FE840000      56K r-x--  /lib/libmd.so.1
FE85E000       4K rw---  /lib/libmd.so.1
FE860000      28K r-x--  /lib/libaio.so.1
FE877000       4K rw---  /lib/libaio.so.1
FE878000       4K rw---  /lib/libaio.so.1
FE880000     936K r-x--  /usr/sfw/lib/libcrypto.so.0.9.7
FE97A000      84K rw---  /usr/sfw/lib/libcrypto.so.0.9.7
FE98F000       8K rw---  /usr/sfw/lib/libcrypto.so.0.9.7
FE9A0000     200K r-x--  /usr/sfw/lib/libssl.so.0.9.7
FE9E2000      12K rw---  /usr/sfw/lib/libssl.so.0.9.7
FE9F0000      24K r-x--  /lib/libgen.so.1
FEA06000       4K rw---  /lib/libgen.so.1
FEA10000     216K r-x--  /lib/libresolv.so.2
FEA56000       8K rw---  /lib/libresolv.so.2
FEA60000      24K r-x--  /lib/librt.so.1
FEA76000       4K rw---  /lib/librt.so.1
FE878000       4K rw---  /lib/libaio.so.1
FE880000     936K r-x--  /usr/sfw/lib/libcrypto.so.0.9.7
FE97A000      84K rw---  /usr/sfw/lib/libcrypto.so.0.9.7
FE98F000       8K rw---  /usr/sfw/lib/libcrypto.so.0.9.7
FE9A0000     200K r-x--  /usr/sfw/lib/libssl.so.0.9.7
FE9E2000      12K rw---  /usr/sfw/lib/libssl.so.0.9.7
FE9F0000      24K r-x--  /lib/libgen.so.1
FEA06000       4K rw---  /lib/libgen.so.1
FEA10000     216K r-x--  /lib/libresolv.so.2
FEA56000       8K rw---  /lib/libresolv.so.2
FEA60000      24K r-x--  /lib/librt.so.1
FEA76000       4K rw---  /lib/librt.so.1
FEA80000      60K r-x--  /usr/lib/libz.so.1
FEA9E000       4K rwx--  /usr/lib/libz.so.1
FEAA0000     352K r-x--  /opt/coolstack/mysql_32bit/lib/mysql/libmysqlclient.so.16.0.0
FEB00000       4K rwx--
FEB07000    1040K rwx--  /opt/coolstack/mysql_32bit/lib/mysql/libmysqlclient.so.16.0.0
FEC0B000       4K rwx--  /opt/coolstack/mysql_32bit/lib/mysql/libmysqlclient.so.16.0.0&lt;/core_filename&gt;&lt;/pre&gt;
&lt;br /&gt;
Since the problem occurred in the invocation of a MySQL function, with the &quot;pmap&quot; command, I&#39;ve  detected that my Perl used a DBD:: mysql library which was linked with a  32-bit MySQL library. My OS is 64 bits, however that is not a problem since 32 Bits libmysqlclient_32_bits is compatible with 64 bits MySQL DB&#39;s.&lt;br /&gt;
Despite all efforts to detect the problem in the program that I was developing, it was found that the problem was in the instance of a 64 bits MySQL DB  that was using 32 bits libraries.</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/4748351648475643439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/4748351648475643439' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/4748351648475643439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/4748351648475643439'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2009/11/solaris-analyze-core-dump-file.html' title='Solaris: analyze a core dump file'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-7014442831625438552</id><published>2009-10-29T08:43:00.000-07:00</published><updated>2012-06-28T10:22:54.348-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="qmail"/><category scheme="http://www.blogger.com/atom/ns#" term="tcp"/><title type='text'>QMAIL + detect SMTP Attacks from the same IP</title><content type='html'>A simple way to detect SMTP attacks from a single source IP can be achieved using the following command:&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;$ fgrep &quot;tcpserver: pid&quot;   &quot;/var/log/qmail/smtp/current&quot; | awk {&#39;print $6&#39;}| sort | uniq -c| sort  -rn |less&lt;/pre&gt;
&lt;br /&gt;
&lt;br /&gt;
The output will be similar to:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;ruby&quot; name=&quot;code&quot;&gt;     59 72.15.222.65
     42 63.251.135.109
     38 66.211.168.231
     33 63.251.135.115
     29 63.251.135.74
     25 213.63.26.144
     25 194.65.138.99
     23 63.251.135.75
     16 194.65.5.228
     15 93.102.93.77
     15 195.23.124.22
     13 212.55.154.23
     12 213.91.163.191
     12 212.55.154.24
     11 212.55.154.21
     11 198.31.62.64
     10 208.65.131.106
     9 98.244.216.176
     9 85.243.160.139
...&lt;/pre&gt;
&lt;br /&gt;
The first column shows the number of tcp connections that have been established  and the second column the source IP. If the number of messages from those sources are high and suspicious then you need to block those sources.</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/7014442831625438552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/7014442831625438552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/7014442831625438552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/7014442831625438552'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2009/10/qmail-detect-smtp-attacks-from-same-ip.html' title='QMAIL + detect SMTP Attacks from the same IP'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-1744829985344574676</id><published>2009-09-21T03:59:00.000-07:00</published><updated>2009-09-21T04:26:02.601-07:00</updated><title type='text'>How to recover a corrupted  gzip file.</title><content type='html'>Sometimes we are faced with a corrupted &quot;.gz&quot; file, with important information and we must recover it at any cost. Fortunately there is a tool able to recover these files in an efficient manner, the &lt;a href=&quot;http://www.urbanophile.com/arenn/coding/gzrt/gzrt.html&quot;&gt;gzip Recovery Toolkit&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The installation process is very easy:&lt;br /&gt;&lt;br /&gt;$ wget http://www.urbanophile.com/arenn/coding/gzrt/gzrt-0.5.tar.gz&lt;br /&gt;$ tar -xzvf gzrt-0.5.tar.gz&lt;br /&gt;$ cd gzrt-0.5&lt;br /&gt;$ make&lt;br /&gt;&lt;br /&gt;And that&#39;s it.&lt;br /&gt;&lt;br /&gt;To start using it just do:&lt;br /&gt;&lt;br /&gt;$ ./gzrecover file_to_recover.gz&lt;br /&gt;&lt;br /&gt;then it will create a new filename called &quot;file_to_recover.recovered&quot;&lt;br /&gt;&lt;br /&gt;You must also read the &quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;Disclaimer and Warnings&lt;/span&gt;&quot;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;«This program is provided AS IS with absolutely NO WARRANTY. It is not guaranteed to recover anything from your file, nor is what it does recover guaranteed to be good data. The bigger your file, the more likely that something will be extracted from it. Also keep in mind that this program gets faked out and is likely to &quot;recover&quot; some bad data. &lt;span style=&quot;font-weight: bold;&quot;&gt;Everything should be manually verified&lt;/span&gt;. &lt;/span&gt;»</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/1744829985344574676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/1744829985344574676' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/1744829985344574676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/1744829985344574676'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2009/09/how-to-recover-corrupted-gzip-file.html' title='How to recover a corrupted  gzip file.'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-3422942708489920555</id><published>2009-06-11T05:54:00.000-07:00</published><updated>2009-06-11T06:04:27.533-07:00</updated><title type='text'>Abimago - Image Bank</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.abimago.com&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 286px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6-UGWcUix_hvMyaWkwUC8vSP-n9FlikJI-5IwHToV43M9J7O0VvRFzDw25BKbChUEMY-tpnyG9lGkDNhx9PugSazxuVBViP2Sk0D2u2kSpxJ9I2g_n5unZvCVa4l9hFXCTVjQzaEwww0/s320/Abimago.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5346053278691115554&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.abimago.com/&quot;&gt;Abimago&lt;/a&gt; is a versatile Image Bank, although especially aimed at responding to detailed and specific demands from expert professionals in areas such as advertising, marketing or press.</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/3422942708489920555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/3422942708489920555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/3422942708489920555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/3422942708489920555'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2009/06/abimago-image-bank.html' title='Abimago - Image Bank'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6-UGWcUix_hvMyaWkwUC8vSP-n9FlikJI-5IwHToV43M9J7O0VvRFzDw25BKbChUEMY-tpnyG9lGkDNhx9PugSazxuVBViP2Sk0D2u2kSpxJ9I2g_n5unZvCVa4l9hFXCTVjQzaEwww0/s72-c/Abimago.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-3809427987075370187</id><published>2009-04-09T20:42:00.000-07:00</published><updated>2009-04-09T20:54:37.095-07:00</updated><title type='text'>HOWTO : SVN over HTTPS</title><content type='html'>Create the repository&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;$ svnadmin create /home/svn/repo/svn&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Install RPM mod_dav_svn&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;$ yum install mod_dav_svn&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Config who can access the repository and their permissions (r or w) /home/svn/conf/users-access-file&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;[/]&lt;br /&gt;gulden = rw&lt;br /&gt;other = r&lt;br /&gt;[/privaterepo]&lt;br /&gt;*=&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;gulden&lt;/span&gt;&quot; user can access the the &quot;/&quot; repository with read and wright (rw) permissions&lt;/li&gt;&lt;li&gt;&quot;&lt;span style=&quot;font-weight: bold;&quot;&gt;other&lt;/span&gt;&quot; can access the the &quot;/&quot; repository with read (r) permission&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;No one&lt;/span&gt; can access the &quot;/privaterepo&quot; repository&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Create the Users password file&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;$ htpasswd /home/svn/conf/passwd gulden&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Edit Apache configuration file:  /etc/httpd/conf.d/subversion.conf&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;LoadModule dav_svn_module     modules/mod_dav_svn.so&lt;br /&gt;LoadModule authz_svn_module   modules/mod_authz_svn.so&lt;br /&gt;&lt;br /&gt;&lt;virtualhost 443=&quot;&quot;&gt;&lt;br /&gt;ServerName myhost.com&lt;br /&gt;ServerAlias svn.myhost.com&lt;br /&gt;&lt;location&gt;&lt;br /&gt; Order allow,deny&lt;br /&gt; Allow from all&lt;br /&gt; DAV svn&lt;br /&gt; SVNParentPath /home/svn/repo&lt;br /&gt; # our access control policy&lt;br /&gt; AuthzSVNAccessFile /home/svn/conf/users-access-file&lt;br /&gt; # try anonymous access first, resort to real&lt;br /&gt; # authentication if necessary.&lt;br /&gt; Satisfy Any&lt;br /&gt; Require valid-user&lt;br /&gt; #  how to authenticate a user&lt;br /&gt; AuthType Basic&lt;br /&gt; AuthName &quot;My Subversion repository&quot;&lt;br /&gt; AuthUserFile /home/svn/conf/passwd&lt;br /&gt;&lt;/location&gt;&lt;br /&gt;&lt;/virtualhost&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Checkout a project&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt; $ svn co https://svn.myhost.com/svn/foo/trunk&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/3809427987075370187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/3809427987075370187' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/3809427987075370187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/3809427987075370187'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2009/04/howto-svn-over-https.html' title='HOWTO : SVN over HTTPS'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-6909722869205253677</id><published>2009-03-09T15:52:00.000-07:00</published><updated>2009-03-09T15:59:37.371-07:00</updated><title type='text'>HOW TO syntax highlight blogger : widget</title><content type='html'>For those who need syntax highlight in their blog, to several programming languages, can use the widget &quot;&lt;a href=&quot;http://fazibear.googlepages.com/blogger.html&quot;&gt;Blogger Widget SyntaxHighlighter&lt;/a&gt;&quot; and is powered by &lt;a href=&quot;http://code.google.com/p/syntaxhighlighter/&quot;&gt;SyntaxHighlighter 1.5.1&lt;/a&gt;&lt;br /&gt;Give it a try.</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/6909722869205253677/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/6909722869205253677' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/6909722869205253677'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/6909722869205253677'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2009/03/how-to-syntax-highlight-blogger-widget.html' title='HOW TO syntax highlight blogger : widget'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-8811532623853191151</id><published>2009-03-07T19:15:00.000-08:00</published><updated>2009-03-09T15:46:13.257-07:00</updated><title type='text'>Rails: Where to put our initialization stuff</title><content type='html'>In our applications we sometimes need to initialize  global vars or rails predefined values. Whenever we want to do that, we just need to create files in the directory&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;ruby&quot;&gt;&lt;br /&gt;config/initializers/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;instead of messing with the environment.rb file.&lt;br /&gt;&lt;br /&gt;Source:&lt;a href=&quot;http://ryandaigle.com/articles/2007/2/23/what-s-new-in-edge-rails-stop-littering-your-evnrionment-rb-with-custom-initializations&quot;&gt; Ryan&#39;s Scraps: What&#39;s New in Edge Rails: Stop Littering In Your Environment File&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/8811532623853191151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/8811532623853191151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8811532623853191151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/8811532623853191151'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2009/03/rails-where-to-put-our-initialization.html' title='Rails: Where to put our initialization stuff'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5045585014779378243.post-6182070603163365902</id><published>2009-02-23T09:03:00.000-08:00</published><updated>2009-02-23T09:07:23.905-08:00</updated><title type='text'>Top 10 best and worst of MWC 2009 - vnunet.com</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://www.mobileworldcongress.com/images/mwc_logo2.gif&quot;&gt;&lt;img style=&quot;margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 98px;&quot; src=&quot;http://www.mobileworldcongress.com/images/mwc_logo2.gif&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.vnunet.com/vnunet/news/2236937/top-ten-best-worst-mwc-2009?page=5&quot;&gt;Top 10 best and worst of MWC 2009 - vnunet.com&lt;/a&gt;: &quot;Top 10 best and worst of MWC 2009&quot;</content><link rel='replies' type='application/atom+xml' href='http://gulden-pt.blogspot.com/feeds/6182070603163365902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/5045585014779378243/6182070603163365902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/6182070603163365902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5045585014779378243/posts/default/6182070603163365902'/><link rel='alternate' type='text/html' href='http://gulden-pt.blogspot.com/2009/02/top-10-best-and-worst-of-mwc-2009.html' title='Top 10 best and worst of MWC 2009 - vnunet.com'/><author><name>Gulden PT</name><uri>http://www.blogger.com/profile/18144846983097902841</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>