<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0MBQn44cCp7ImA9WhRRFEk.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735</id><updated>2011-11-28T11:50:53.038+11:00</updated><category term="makefile" /><title>Infinite Lifetimes</title><subtitle type="html">All of the interesting technological, artistic or just plain fun subjects I'd investigate if I had an infinite number of lifetimes. In other words, a dumping ground...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://fireflyblue.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>406</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/InfiniteLifetimes" /><feedburner:info uri="infinitelifetimes" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CkcCRn4-eCp7ImA9WhdXE04.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-8499857739208509260</id><published>2011-08-26T13:41:00.001+10:00</published><updated>2011-08-26T13:41:07.050+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-26T13:41:07.050+10:00</app:edited><title>Building Fedora</title><content type="html">&lt;h1 id="content"&gt;&lt;font style="font-weight: normal;" size="2"&gt;&lt;a href="http://magazine.redhat.com/2007/08/07/fedora-7-community-remix/"&gt;http://magazine.redhat.com/2007/08/07/fedora-7-community-remix/&lt;/a&gt;&lt;/font&gt;&lt;br&gt;&lt;/h1&gt;&lt;h1 id="content"&gt; &lt;a href="http://magazine.redhat.com/2007/08/07/fedora-7-community-remix/" rel="bookmark" title="Permanent Link: Fedora 7: Community remix" class="headline"&gt;Fedora 7: Community remix&lt;/a&gt;&lt;/h1&gt; 			 			&lt;h4 id="byline"&gt;by Mike McGrath&lt;/h4&gt;  			&lt;div class="entrytext"&gt; 				&lt;p&gt;One of the popular features of Fedora 7 is the ability to &lt;a href="http://www.redhatmagazine.com/2007/05/31/remixing-fedora-7/"&gt;remix Fedora&lt;/a&gt;  and build your own custom version. Now don't get me wrong–building a  new distribution is nice. But what about those who wish to create their  own Fedora-based project? How do you grow a complete community in an  enterprise environment or in the general public? Thanks to some of the  lesser-known features, anyone can use the exact same tools that make  Fedora, well… Fedora.&lt;span id="more-296"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Fedora development is generally US-based and, as a result, must  follow all applicable US law regarding intellectual property,  copyrights, and patents. Additionally, Fedora prides itself on being  free in every sense of the word. Not only are our developers free but we  encourage our users to be free as well. And one part of being free is  allowing our code to be used by others–even if they want to build  something less free. &lt;a href="http://revisor.fedoraunity.org/"&gt;Revisor&lt;/a&gt; and &lt;a href="https://hosted.fedoraproject.org/projects/pungi/"&gt;Pungi&lt;/a&gt; are perfect examples of Fedora allowing it's user base to customize Fedora simply and freely.&lt;/p&gt;  &lt;p&gt;With Revisor, users can easily create any spin of Fedora imaginable.  Add codecs for a media center, strip out games, or add additional  training applications to build a specific corporate version of Fedora.  This new custom version, however, isn't useful for very long without  maintainence and distribution.&lt;/p&gt; &lt;p&gt;It's not only possible to create a custom operating system based off  of Fedora's code base, but it's also possible to copy the Fedora  Project's community methods and best practices. From source to build  system to distribution and communication, everything the Fedora Project  needs is 100% open source. Users and developers can tweak the operating  system and leave everything else alone. Enterprises can create RPMs or  rolll their own custom operating system–with everyone using the exact  same methods as the Fedora Project.&lt;/p&gt; &lt;p&gt;The first thing someone needs to create their own community is a  home. Typically, this home is a simple web page. In Fedora we have a &lt;a href="http://fedoraproject.org/wiki/"&gt;MoinMoin wiki&lt;/a&gt;.  The wiki provides a central place to collect all Fedora information. It  houses packaging guidelines, download locations, and sometimes provides  work-flow. It also documents Fedora's governance, provides information  about various teams or groups, and gives developers a place to share a  bit about themselves. More than anything, though, it is Fedora's home  and gives the community a opportunity to speak up and say "we're here."&lt;/p&gt; &lt;p&gt;The next essential item is communication. Initially, straight email  is a good way to get things going. When the community grows (even to  just a few people), something more will be needed; most (like the Fedora  group) will turn to a mailing list or even a forum. When people think  about lists and open source software, they think &lt;a href="http://www.gnu.org/software/mailman/"&gt;mailman&lt;/a&gt;.  Most communities try to separate email discussion into different  relevant subjects. Two lists are typically sufficient, one for  development and one for users. The number of lists may scale quickly,  depending on the size and scope of your project. At present, Fedora has  around 70 lists.&lt;/p&gt; &lt;p&gt;The Fedora Project also uses IRC for more immediate communications.  It is not necessary to host IRC directly–in fact the Fedora community  relies on &lt;a href="http://freenode.net/"&gt;Freenode&lt;/a&gt;. Other communities  convene there and it's valuable (and convenient) to have all of these  open source people in the same place. Since telephone communication is  not always possible or desirable, IRC provides a great inexpensive  alternative for real-time communication. Again, it's appropriate to  create separate channels based on topic or need. Fedora has many  different channels, with #fedora, #fedora-devel, and #fedora-meeting  being among the most popular.&lt;/p&gt; &lt;p&gt;Once everyone has a place to go for information on the community and  can communicate openly with one another, then it's time to get down to  business. Most communities will wish to customize Fedora in some way. To  do that, they'll need to compile RPMs. Fortunately, with Fedora 7 every  part of the build process is 100% open and available for others to  duplicate.&lt;/p&gt; &lt;p&gt;Fedora is built from &lt;a href="http://en.wikipedia.org/wiki/RPM_Package_Manager"&gt;RPMs&lt;/a&gt;.  The idea behind an RPM is that a packager takes pristine source from  upstream, adds patches, creates a spec file, and builds a binary RPM to  be distributed. RPMs are aware of dependencies for both the build  process and at install time. Building RPMs is a tricky and  time-consuming process. Fedora has many package maintainers to help do  the job right. Fortunately all of Fedora's official RPMs are maintained  by Fedora so others don't have to worry about keeping them up-to-date.&lt;/p&gt; &lt;p&gt;The easiest way to determine if a developer's custom RPM is  compatible with Fedora is to actually get it accepted by Fedora.  Becoming a Fedora contributor is a &lt;a href="http://fedoraproject.org/wiki/PackageMaintainers/Join"&gt;well-documented process&lt;/a&gt;,  but most people needing to create their own community based on Fedora  probably can't get their packages into the official Fedora operating  system. This is typically because of legal reasons.  However, just  because something is illegal in the United States doesn't mean its  illegal in other areas of the world. This situation is a perfect  use-case for customizing and creating a localized version of Fedora.&lt;/p&gt; &lt;p&gt;Even if a package cannot make it into the official Fedora, it's still a good idea to follow the &lt;a href="http://fedoraproject.org/wiki/Packaging/Guidelines"&gt;Fedora Packaging Guidelines&lt;/a&gt;.  These guidelines are open and all Fedora packages are subject to it. An  interesting side effect of this is that many Red Hat® Enterprise Linux®  packages are also packaged using these guidelines. They are an  excellent guide for anyone packaging something for an operating system  in the Red Hat family. They also generally translate well for other  community projects as well as for applications in the enterprise.&lt;/p&gt; &lt;p&gt;Once a custom set of RPMs has been developed, it's time to set up a  system so they can be created the exact same way over and over again by  different people. Reproducability is an extremely important aspect of  software development and is especially true where an entire distribution  is concerned. RPM was designed so that pristine source plus added  patches and a spec file creates an RPM. The catch is that some packages  will compile differently depending on what's already on the host. To  overcome this limitation Fedora uses mock.&lt;/p&gt; &lt;p&gt;In its simplest form, &lt;a href="http://fedoraproject.org/wiki/Projects/Mock"&gt;Mock&lt;/a&gt;  takes an SRPM as an argument, builds a chroot with a set of minimal  packages, then spits out an RPM. Using RPMs 'BuildRequires' function  ensures that any SRPM passed to it will get built the same way every  time. There are some caveats to that, but it's best that beginners think  of mock in this way until they becomes more familiar with it.&lt;/p&gt; &lt;p&gt;Building RPM's can be a time-consuming process and many will find it  annoying to use their workstation for this task. This is especially true  in larger communities or in an enterprise environment. To overcome this  hurdle, the Fedora Project started using a build system called &lt;a href="https://hosted.fedoraproject.org/projects/koji/"&gt;Koji&lt;/a&gt;.  At it's core, Koji is a build queue manager for mock. At its most  complex, it is a complete build solution for all of Fedora's building  needs. Using x86_64 and ppc builders, Koji keeps track of what's  building on what builders and sends tasks to each builder based on  available load.&lt;/p&gt; &lt;p&gt;Even with only two build machine architectures, Fedora can build  i386, x86_64, and ppc RPMs. This is great for the developers since they  may not have access to these architectures and their machines never get  tied up in the build process. It is also a very secure method, since  they're pulling everything out of cvs and lookaside cache&lt;a href="http://magazine.redhat.com/2007/08/07/fedora-7-community-remix/#one"&gt;&lt;sup&gt;[1]&lt;/sup&gt;&lt;/a&gt;,  which prevents people from submitting malicious code by anonymous  means. It also allows Fedora administrators to recreate any build at any  time.&lt;/p&gt; &lt;p&gt;Because mock uses yum to build its chroot for every build, it is a  good idea to keep a local mirror of Fedora. Using Koji can alleviate  this need, but most people test new RPMs using a local mock install.  Creating a Fedora mirror is fairly easy and it's also a &lt;a href="http://fedoraproject.org/wiki/Infrastructure/Mirroring"&gt;well-documented process&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;For those with high bandwidth, Fedora is always on the lookout for  more mirrors. Fedora's new Mirror Manager makes it possible to set up  new mirrors. Administrators can even use Mirror Manager to direct those  in your organization to a local mirror using the netblock feature. This  is very handy in the enterprise, as it's possible to use a stock Fedora  install without any changes to the yum configuration and yet still  direct users to a local mirror.&lt;/p&gt; &lt;p&gt;On the ticketing and bug side of Fedora's development lies bugzilla.  Bug systems provide a mechanism to get metrics about the project and, of  course, track issues with software. It also provides a means for users  to comment and prevents developers from getting a thousand emails about  the same bug. There is no perfect bug tracking system, but those serious  about their community need to have one.&lt;/p&gt; &lt;p&gt;Now that all of those RPM's are being built and updated, it's a good  idea to use some sort of updates system to pull and manage what updates  go out and when. The Fedora Project created an updates system called &lt;a href="https://hosted.fedoraproject.org/projects/bodhi/"&gt;Bodhi&lt;/a&gt;.  The updates system is used for test cases–making sure RPMs don't break a  good repository.  It also allows some control over when a package gets  pushed, as well as providing notes related to each update. The system  itself is targeted at more mature communities and the enterprise.&lt;/p&gt; &lt;p&gt;Once the systems have been set up, it is just a matter of keeping  everything together and making sure users and developers are informed  about new events and continue to participate. By basing a custom  operating system on Fedora's already-active code base, much of the  difficult work of keeping the operating system up-to-date is complete,  leaving community leaders to focus on development and allowing the  community to grow on its own.&lt;/p&gt; &lt;p&gt;Everything about Fedora's process is now in the open and can be  customized to any organization or community's needs. Those already  running Fedora or any operating system in the Red Hat family can now  build packages and communities in the exact same way that Fedora does.&lt;/p&gt; &lt;p&gt;&lt;a name="one"&gt;&lt;/a&gt;&lt;br&gt; &lt;sup&gt;[1]&lt;/sup&gt; lookaside cache is basically the upstream tarballs that The fedora Project store's in a separate location from the CVS.&lt;/p&gt; 	 					 				&lt;p class="postmetadata"&gt; 						This entry was posted by &lt;a href="http://magazine.redhat.com/author/rheditorialteam/" title="Posts by The editorial team" rel="author"&gt;The editorial team&lt;/a&gt;  						  						on Tuesday, August 7th, 2007 at 5:46 pm						and is filed under &lt;a href="http://magazine.redhat.com/category/fedora/" title="View all posts in Fedora" rel="category tag"&gt;Fedora&lt;/a&gt;. 						You can follow any responses to this entry through the &lt;a href="http://magazine.redhat.com/2007/08/07/fedora-7-community-remix/feed/"&gt;RSS 2.0&lt;/a&gt; feed.  						 													Both comments and pings are currently closed.			 						 										&lt;/p&gt; 	 			&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-8499857739208509260?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/8499857739208509260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=8499857739208509260" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/8499857739208509260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/8499857739208509260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/u_-UbnUZ2Ig/building-fedora.html" title="Building Fedora" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/08/building-fedora.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIBSH4yeyp7ImA9WhZaFU0.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-427501305764991327</id><published>2011-07-01T16:42:00.001+10:00</published><updated>2011-07-01T16:42:39.093+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-01T16:42:39.093+10:00</app:edited><title>Go Lang JSON &amp; Topsy Twitter request</title><content type="html">I built my first Go Lang program to request some data from the &lt;a href="http://code.google.com/p/otterapi/wiki/Resources"&gt;Topsy Otter API&lt;/a&gt; that queries Twitter.&lt;br&gt;It returns &lt;a href="http://blog.golang.org/2011/01/json-and-go.html"&gt;JSON&lt;/a&gt; and requests via &lt;a href="http://raycompstuff.blogspot.com/2009/11/golang-networking.html"&gt;HTTP&lt;/a&gt;&lt;br&gt; It doesn&amp;#39;t unmarshall the JSON just yet...&lt;br&gt;&lt;br&gt;&lt;span style="font-family: courier new,monospace;"&gt;package main&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;import (&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    //&amp;quot;io&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;    &amp;quot;io/ioutil&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    //&amp;quot;strings&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;    //&amp;quot;log&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    &amp;quot;http&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;    &amp;quot;json&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    &amp;quot;fmt&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;    )&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;/*&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;{&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;   &amp;quot;request&amp;quot; : {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;parameters&amp;quot; : {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;         &amp;quot;url&amp;quot; : &amp;quot;&lt;a href="http://twitter.com/barackobama"&gt;http://twitter.com/barackobama&lt;/a&gt;&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      },&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;response_type&amp;quot; : &amp;quot;json&amp;quot;,&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;resource&amp;quot; : &amp;quot;authorinfo&amp;quot;,&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;url&amp;quot; : &amp;quot;&lt;a href="http://otter.topsy.com/authorinfo.json?url=http%3A%2F%2Ftwitter.com%2Fbarackobama"&gt;http://otter.topsy.com/authorinfo.json?url=http%3A%2F%2Ftwitter.com%2Fbarackobama&lt;/a&gt;&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;   },&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;   &amp;quot;response&amp;quot; : {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;name&amp;quot; : &amp;quot;Barack Obama&amp;quot;,&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;url&amp;quot; : &amp;quot;&lt;a href="http://twitter.com/barackobama"&gt;http://twitter.com/barackobama&lt;/a&gt;&amp;quot;,&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;type&amp;quot; : &amp;quot;twitter&amp;quot;,&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;nick&amp;quot; : &amp;quot;barackobama&amp;quot;,&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;description&amp;quot; : &amp;quot;44th President of the United States&amp;quot;,&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;topsy_author_url&amp;quot; : &amp;quot;&lt;a href="http://topsy.com/twitter/barackobama"&gt;http://topsy.com/twitter/barackobama&lt;/a&gt;&amp;quot;,&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      &amp;quot;influence_level&amp;quot; : &amp;quot;5&amp;quot;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;   }&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;*/&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;type OtterResponse struct {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      name string&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      Url string&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      Type string&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      Nick string&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      Description string&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;      Topsy_author_url string&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;      Influence_level string&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;func main() {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    r, err := http.Get(&amp;quot;&lt;a href="http://otter.topsy.com/authorinfo.json?url=http://twitter.com/barackobama"&gt;http://otter.topsy.com/authorinfo.json?url=http://twitter.com/barackobama&lt;/a&gt;&amp;quot;)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    var b []byte;&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;    if err == nil {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;        b, err = ioutil.ReadAll(r.Body);&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;        r.Body.Close();&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    }&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;    if err != nil {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;        fmt.Println(err)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;           fmt.Println(&amp;quot;Whoa we really didn&amp;#39;t make it!&amp;quot;)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;    } else {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;        fmt.Println(string(b));&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;        var m OtterResponse&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;        err := json.Unmarshal(b, &amp;amp;m)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;        if err != nil {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;           fmt.Println(&amp;quot;Whoa we didn&amp;#39;t make it!&amp;quot;)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;           fmt.Println(err)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;        } else {&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;           fmt.Println(&amp;quot;Whoa we made it!&amp;quot;)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;           fmt.Println(&lt;a href="http://m.name"&gt;m.name&lt;/a&gt;)&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;        }&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;span style="font-family: courier new,monospace;"&gt;    }&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt; &lt;span style="font-family: courier new,monospace;"&gt;}&lt;/span&gt;&lt;br style="font-family: courier new,monospace;"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;The links I used:&lt;br&gt;&lt;a href="http://blog.golang.org/2011/01/json-and-go.html"&gt;http://blog.golang.org/2011/01/json-and-go.html&lt;/a&gt;&lt;br&gt; &lt;a href="http://code.google.com/p/otterapi/wiki/Resources"&gt;http://code.google.com/p/otterapi/wiki/Resources&lt;/a&gt;&lt;br&gt;&lt;a href="http://golang.org/pkg/http/#Response"&gt;http://golang.org/pkg/http/#Response&lt;/a&gt;&lt;br&gt;&lt;a href="http://raycompstuff.blogspot.com/2009/11/golang-networking.html"&gt;http://raycompstuff.blogspot.com/2009/11/golang-networking.html&lt;/a&gt;&lt;br&gt; &lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-427501305764991327?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/427501305764991327/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=427501305764991327" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/427501305764991327?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/427501305764991327?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/yfJ3HNq3WXQ/go-lang-json-topsy-twitter-request.html" title="Go Lang JSON &amp; Topsy Twitter request" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/07/go-lang-json-topsy-twitter-request.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkECQXwzfCp7ImA9WhZWE00.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-6565089273200787071</id><published>2011-05-13T13:09:00.000+10:00</published><updated>2011-05-14T03:44:20.284+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-14T03:44:20.284+10:00</app:edited><title>A Guide to Undefined Behavior in C and C++, Part 1</title><content type="html">&lt;a href="http://blog.regehr.org/archives/213"&gt;http://blog.regehr.org/archives/213&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-6565089273200787071?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/6565089273200787071/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=6565089273200787071" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/6565089273200787071?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/6565089273200787071?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/KyWU-mQ44Gs/guide-to-undefined-behavior-in-c-and-c.html" title="A Guide to Undefined Behavior in C and C++, Part 1" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/05/guide-to-undefined-behavior-in-c-and-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYEQnc5fSp7ImA9WhZWE0w.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-5847211941267080950</id><published>2011-05-12T12:53:00.000+10:00</published><updated>2011-05-14T06:21:43.925+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-14T06:21:43.925+10:00</app:edited><title>What are important languages to learn to understand different approaches and concepts?</title><content type="html">&lt;a href="http://stackoverflow.com/questions/3958630/what-are-important-languages-to-learn-to-understand-different-approaches-and-conc"&gt;http://stackoverflow.com/questions/3958630/what-are-important-languages-to-learn-to-understand-different-approaches-and-conc&lt;/a&gt;&lt;br&gt; &lt;br&gt;&lt;div class="post-text"&gt;&lt;p&gt;Matters of practicality are highly subjective,  so I will simply say that learning different language paradigms will  only serve to make you a better programmer.  What is more practical than  that?&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Functional, Haskell&lt;/em&gt; - I know you said that you didn&amp;#39;t want  to, but you should really really reconsider.  You&amp;#39;ve gotten some  functional exposure with Clojure and even Python, but you&amp;#39;ve not  experienced it to its fullest without Haskell.  If you&amp;#39;re really against  Haskell then good compromises are either ML or OCaml.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Declarative, Datalog&lt;/em&gt; - Many people would recommend Prolog in this slot, but I think Datalog is a cleaner example of a declarative language.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Array, J&lt;/em&gt; - I&amp;#39;ve only just discovered J, but I find it to be a  stunning language.  It will twist your mind into a pretzel.  You will  thank J for that.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Stack, Factor/Forth&lt;/em&gt; - Factor is very powerful and I plan to  dig into it ASAP.  Forth is the grand-daddy of the Stack languages, and  as an added bonus it&amp;#39;s &lt;a href="http://github.com/fogus/rforth" rel="nofollow"&gt;simple to implement&lt;/a&gt; yourself.  There is something to be said about learning through implementation.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Dataflow, Oz&lt;/em&gt; - I think the influence of Oz is on the upswing and will only continue to grow in the future.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Prototype-based, Javascript/Io/Self&lt;/em&gt; - Self is the  grand-daddy and highly influential on every prototype-based language.   This is not the same as class-based OOP and shouldn&amp;#39;t be treated as  such.  Many people come to a prototype language and create an ad-hoc  class system, but if your goal is to expand your mind, then I think that  is a mistake.  Use the language to its full capacity.  Read &lt;a href="http://labs.oracle.com/self/papers/organizing-programs.html" rel="nofollow"&gt;Organizing Programs without Classes&lt;/a&gt; for ideas.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Expert System, CLIPS&lt;/em&gt; - I always recommend this.  If you know  Prolog then you will likely have the upper-hand in getting up to speed,  but it&amp;#39;s a very different language.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Frink&lt;/em&gt; - Frink is a general purpose language, but it&amp;#39;s famous  for its system of unit conversions.  I find this language to be very  inspiring in its unrelenting drive to be the best at what it does.   Plus... it&amp;#39;s really fun!&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Functional+Optional Types, Qi&lt;/em&gt; - You say you&amp;#39;ve experience  with some type systems, but do you have experience with &amp;quot;skinnable* type  systems?  No one has... but they should.  Qi is like Lisp in many ways,  but its type system will blow your mind.&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Actors+Fault-tolerance, Erlang&lt;/em&gt; - Erlang&amp;#39;s process model gets  a lot of the buzz, but its fault-tolerance and hot-code-swapping  mechanisms are game-changing.  You will not learn much about FP that you  wouldn&amp;#39;t learn with Clojure, but its FT features will make you wonder  why more languages can&amp;#39;t seem to get this right.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt; &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-5847211941267080950?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/5847211941267080950/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=5847211941267080950" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/5847211941267080950?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/5847211941267080950?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/tIebwi_WFsE/what-are-important-languages-to-learn.html" title="What are important languages to learn to understand different approaches and concepts?" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/05/what-are-important-languages-to-learn.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYAQHk-eip7ImA9WhZXE0o.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-4642149785963530950</id><published>2011-05-03T08:42:00.001+10:00</published><updated>2011-05-03T08:42:21.752+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-03T08:42:21.752+10:00</app:edited><title>Secrets of Power Negotiating</title><content type="html">&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.korokithakis.net/posts/secrets-power-negotiating/"&gt;http://www.korokithakis.net/posts/secrets-power-negotiating/&lt;/a&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Nibbling.&lt;/strong&gt; This is the principle of getting something  extra, after everything else has been agreed upon. For example, you  agree to buy a couch for a price, and then say &amp;quot;can you throw in that  pillow as well?&amp;quot;. The other person has made up their mind, so they&amp;#39;re  more receptive to adding something extra.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Higher authority.&lt;/strong&gt; Always have a &amp;quot;higher authority&amp;quot;  that you have to &amp;quot;check with&amp;quot; before you can make a decision. This  ensures both that you will have more time to think about the deal, and  that you will be able to put more pressure on the other party without  leading to confrontation (as you do not appear to be the one responsible  for the pressure).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Good guy, bad guy.&lt;/strong&gt; This is the well-known technique  of saying &amp;quot;I think this is a great offer, but X doesn&amp;#39;t think so&amp;quot;, and  can be used effectively with the higher authority technique.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Impasse.&lt;/strong&gt; If the negotiations reach an impasse, you  can try to set the specific matter aside and talk about the other points  of the negotiation, even if they are the minor ones. This establishes  momentum and makes it easier for both parties to settle the point they  were at an impasse on earlier.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Agree with people.&lt;/strong&gt; No matter what peolpe say, agree  with them and then gently nudge them to another direction. Arguing makes  them go on the defensive and impedes the negotiation.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Flinch.&lt;/strong&gt; This one is self-explanatory. Always flinch  and act indignant at the first offer, no matter how good it may be. This  leads the other party to believe that the offer is not good enough.&lt;/p&gt; &lt;strong&gt;Play dumb.&lt;/strong&gt; Don&amp;#39;t show your hand, it&amp;#39;s better to play  dumb than to flaunt your intelligence to the other party. This makes  them underestimate and sympathize with you&lt;p&gt;&lt;strong&gt;Be prepared to walk away.&lt;/strong&gt; Once you decide to close the deal at any cost, you have lost the negotiation. Always be prepared to walk away.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The power of writing.&lt;/strong&gt; Seeing something in writing is  much more powerful than just hearing about it. Always use writing (the  more official-looking the better) when possible.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Don&amp;#39;t make the first offer.&lt;/strong&gt; If you make the first  offer, you&amp;#39;re revealing the range you want to go for. Always let the  other person make the first offer, if possible.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Congratulate at the end.&lt;/strong&gt; Never gloat after a negotiation, congratulate the other person and make them feel good about the negotiation.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Be the one who writes the contract.&lt;/strong&gt; Try to be the  person who writes the contract. This allows you to add a few details  that the other party has to negotiate out of the contract afterwards.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Fait accompli.&lt;/strong&gt; This is the principle of sending the  other party a proposal with the assumption that they are going to accept  it exactly the way it&amp;#39;s written. For example, you can send a contract  and a cheque to the other party, thus putting them in the position that  they have to either decide whether to take the slightly modified offer,  or come back to the negotiation and draw it out, risking failure.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Think in real money.&lt;/strong&gt; Convert quotes to scales that  make sense. If, for example, someone quotes you a price in cents per day  for a contract that will last for years, it can add up to a significant  cost increase. Always think in terms of real money.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Red herring.&lt;/strong&gt; Add terms to the negotiation that you  don&amp;#39;t really care about, just so you can give them away later to gain  something else from the other party.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Puppy dog.&lt;/strong&gt; This is the practice of letting people  try products before buying them, at which point they will be hooked to  the product and have a much higher chance at purchasing it. Try to make  people think about the benefits of the deal in the long term, this way  they will be more likely to forgo the short-term costs.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Reluctant buyer.&lt;/strong&gt; Act like you aren&amp;#39;t very interested in the offer. This gives you leverage.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Want it all.&lt;/strong&gt; Ask for as many things as you can, even  things you don&amp;#39;t want. This way, you set the other person up to &amp;quot;win&amp;quot;  by making you relinquishing terms you didn&amp;#39;t even care for. It also  helps you get more things than you initially planned for.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Don&amp;#39;t split the difference.&lt;/strong&gt; Never split the  difference yourself, but always try to get the other person to split  their offer. This way you can split the difference over and over again  on their end without relinquishing anything of yours.&lt;/p&gt; &lt;p&gt;These are the points in the book that come to mind. I haven&amp;#39;t  explained them in nearly as much detail as the book does, and I haven&amp;#39;t  provided ways to counter each technique when other people use it on you.  So, if you felt that this list is interesting, I would urge you to &lt;a href="http://www.amazon.com/gp/product/1564144984/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=porosstuf-20&amp;amp;linkCode=as2&amp;amp;camp=217145&amp;amp;creative=399349&amp;amp;creativeASIN=1564144984"&gt;buy the book&lt;/a&gt;. I heavily recommend it.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-4642149785963530950?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/4642149785963530950/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=4642149785963530950" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/4642149785963530950?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/4642149785963530950?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/3pZAfz2OCQo/secrets-of-power-negotiating.html" title="Secrets of Power Negotiating" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/05/secrets-of-power-negotiating.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8MQ3Y8fSp7ImA9WhZXEEo.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-3425380574579181616</id><published>2011-04-29T20:28:00.001+10:00</published><updated>2011-04-29T20:28:02.875+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-29T20:28:02.875+10:00</app:edited><title>c-ares</title><content type="html">&lt;br&gt;      &lt;div class="gmail_quote"&gt;&lt;div link="blue" vlink="purple" lang="EN-AU"&gt; &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;c-ares&lt;/b&gt; is a C library that performs DNS requests and name resolves asynchronously.&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-3425380574579181616?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/3425380574579181616/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=3425380574579181616" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/3425380574579181616?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/3425380574579181616?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/Bs0B5rGJehA/c-ares.html" title="c-ares" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/04/c-ares.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUGQ3o7fip7ImA9Wx9VEUs.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-2432907148227538683</id><published>2011-01-28T09:04:00.000+11:00</published><updated>2011-01-28T09:10:22.406+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-28T09:10:22.406+11:00</app:edited><title>Google APIs preiodic table</title><content type="html">&lt;br&gt;&lt;div class="gmail_quote"&gt;      &lt;div link="blue" vlink="purple" lang="EN-AU"&gt; &lt;div&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://code.google.com/more/table/" target="_blank"&gt;http://code.google.com/more/table/&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-2432907148227538683?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/2432907148227538683/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=2432907148227538683" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/2432907148227538683?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/2432907148227538683?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/L4O0inriCOE/google-apis-preiodic-table.html" title="Google APIs preiodic table" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/01/google-apis-preiodic-table.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEYASHc_eCp7ImA9Wx9XGEU.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-6103328110700160414</id><published>2011-01-13T13:33:00.000+11:00</published><updated>2011-01-13T13:35:49.940+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-13T13:35:49.940+11:00</app:edited><title>Javascript graph library</title><content type="html">&lt;a href="http://mbostock.github.com/d3/docs/"&gt;http://mbostock.github.com/d3/docs/&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-6103328110700160414?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/6103328110700160414/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=6103328110700160414" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/6103328110700160414?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/6103328110700160414?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/dw9bPj0uYUk/javascript-graph-library.html" title="Javascript graph library" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/01/javascript-graph-library.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04AQXwzfCp7ImA9Wx9XGEU.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-7618490067538008206</id><published>2011-01-13T13:32:00.001+11:00</published><updated>2011-01-13T13:32:20.284+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-13T13:32:20.284+11:00</app:edited><title>Mirror of GeoHot's PS3 Jailbreak</title><content type="html">&lt;div class="keys"&gt; erk: C0 CE FE 84 C2 27 F7 5B D0 7A 7E B8 46 50 9F 93 B2 38 E7 70 DA CB 9F F4 A3 88 F8 12 48 2B E2 1B&lt;br&gt; riv: 47 EE 74 54 E4 77 4C C9 B8 96 0C 7B 59 F4 C1 4D&lt;br&gt; pub: C2 D4 AA F3 19 35 50 19 AF 99 D4 4E 2B 58 CA 29 25 2C 89 12 3D 11 D6 21 8F 40 B1 38 CA B2 9B 71 01 F3 AE B7 2A 97 50 19&lt;br&gt;   R: 80 6E 07 8F A1 52 97 90 CE 1A AE 02 BA DD 6F AA A6 AF 74 17&lt;br&gt;   n: E1 3A 7E BC 3A CC EB 1C B5 6C C8 60 FC AB DB 6A 04 8C 55 E1&lt;br&gt;   K: BA 90 55 91 68 61 B9 77 ED CB ED 92 00 50 92 F6 6C 7A 3D 8D&lt;br&gt;  Da: C5 B2 BF A1 A4 13 DD 16 F2 6D 31 C0 F2 ED 47 20 DC FB 06 70&lt;br&gt; &lt;/div&gt;&lt;br&gt; ~geohot&lt;br&gt;&lt;br&gt; props to fail0verflow for the asymmetric half&lt;br&gt; no donate link, just use this info wisely&lt;br&gt; i do not condone piracy&lt;br&gt; &lt;br&gt; I made a &lt;a href="http://www.youtube.com/watch?v=UkLSXsCKDkg"&gt;video&lt;/a&gt;&lt;br&gt;&lt;br&gt; &lt;em&gt;&lt;b&gt;it&amp;#39;s &lt;a href="http://www.cs.cmu.edu/%7Edst/GeoHot/mirror/jailbreak.zip"&gt;jailbreak&lt;/a&gt; time&lt;/b&gt;&lt;/em&gt;&lt;br&gt; open the zip, you know how to install&lt;br&gt; 3.55 only&lt;br&gt; would be pirates, don&amp;#39;t waste your time&lt;br&gt; do not mirror file, link to &lt;a href="http://geohot.com"&gt;geohot.com&lt;/a&gt;&lt;br&gt; no donations accepted right now, don&amp;#39;t get scammed&lt;br&gt;&lt;br&gt; homebrew signing &lt;a href="https://github.com/geohot/ps3publictools"&gt;source&lt;/a&gt; (edited by jwise: Git source tree mirrored &lt;a href="http://www.cs.cmu.edu/%7Edst/GeoHot/mirror/ps3publictools.git"&gt; here&lt;/a&gt;)&lt;br&gt; make_self_npdrm makes valid NPDRM selfs from elfs&lt;br&gt; it does not contain any info on decrypting or removing NPDRM&lt;br&gt; NPDRM is required for interoperability of our homebrew applications&lt;br&gt; package_finalize turns your debug packages into psuedoretail packages&lt;br&gt; psuedoretail packages install on a geohot jailbroken PS3&lt;br&gt;&lt;br&gt; i&amp;#39;m excited to see what you will create&lt;br&gt; open source SDK @ &lt;a href="http://psl1ght.com/"&gt;PSL1GHT&lt;/a&gt; (edited by jwise: Git source tree mirrored &lt;a href="http://www.cs.cmu.edu/%7Edst/GeoHot/mirror/PSL1GHT.git"&gt;here&lt;/a&gt;) &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-7618490067538008206?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/7618490067538008206/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=7618490067538008206" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/7618490067538008206?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/7618490067538008206?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/UX2YJ30gG58/mirror-of-geohots-ps3-jailbreak.html" title="Mirror of GeoHot's PS3 Jailbreak" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2011/01/mirror-of-geohots-ps3-jailbreak.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcEQHo4cSp7ImA9Wx9TFEo.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-878881286933731010</id><published>2010-11-23T12:49:00.000+11:00</published><updated>2010-11-23T12:50:01.439+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-23T12:50:01.439+11:00</app:edited><title>what should a developer know before building a public web site</title><content type="html">     &lt;div class="gmail_quote"&gt;&lt;div&gt; &lt;div style="direction: ltr; font-family: Tahoma; color: rgb(0, 0, 0); font-size: 10pt;"&gt;&lt;a href="http://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site" target="_blank"&gt;http://stackoverflow.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site&lt;/a&gt;&lt;br&gt;  &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-878881286933731010?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/878881286933731010/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=878881286933731010" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/878881286933731010?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/878881286933731010?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/c0hVow9iaHU/what-should-developer-know-before.html" title="what should a developer know before building a public web site" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/11/what-should-developer-know-before.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MFSHg6cCp7ImA9Wx5aFEk.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-8968497151023083780</id><published>2010-11-11T13:10:00.001+11:00</published><updated>2010-11-11T13:10:19.618+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-11T13:10:19.618+11:00</app:edited><title>Python, the colour blue, flash mobs</title><content type="html">&lt;a href="http://nfggames.com/games/ntsc/visual.shtm"&gt;http://nfggames.com/games/ntsc/visual.shtm&lt;/a&gt;&lt;br&gt;&lt;a href="http://ashitvora.info/flash-mob-gone-wrong"&gt;http://ashitvora.info/flash-mob-gone-wrong&lt;/a&gt;&lt;br&gt;&lt;a href="http://stackoverflow.com/questions/2573135/python-progression-path-from-apprentice-to-guru"&gt;http://stackoverflow.com/questions/2573135/python-progression-path-from-apprentice-to-guru&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-8968497151023083780?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/8968497151023083780/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=8968497151023083780" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/8968497151023083780?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/8968497151023083780?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/akv-X3mw_Xs/python-colour-blue-flash-mobs.html" title="Python, the colour blue, flash mobs" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/11/python-colour-blue-flash-mobs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QMQn86eSp7ImA9Wx5aE0s.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-7827182881455843989</id><published>2010-11-10T14:56:00.001+11:00</published><updated>2010-11-10T14:56:23.111+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-11-10T14:56:23.111+11:00</app:edited><title>launching-a-new-website-18-steps</title><content type="html">&lt;div class="gmail_quote"&gt;     &lt;div&gt; &lt;div style="direction: ltr; font-family: Tahoma; color: rgb(0, 0, 0); font-size: 13px;"&gt; &lt;div&gt; &lt;a href="http://www.seomoz.org/blog/launching-a-new-website-18-steps" target="_blank"&gt;http://www.seomoz.org/blog/launching-a-new-website-18-steps&lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-7827182881455843989?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/7827182881455843989/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=7827182881455843989" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/7827182881455843989?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/7827182881455843989?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/bef1aCFXwnQ/launching-new-website-18-steps.html" title="launching-a-new-website-18-steps" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/11/launching-new-website-18-steps.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ABQHYyeip7ImA9Wx5UFk8.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-3722653194698795368</id><published>2010-10-21T13:55:00.001+11:00</published><updated>2010-10-21T13:55:51.892+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-21T13:55:51.892+11:00</app:edited><title>Programming Android</title><content type="html">&lt;br&gt;         &lt;div class="gmail_quote"&gt;&lt;div link="blue" vlink="purple" lang="EN-AU"&gt;  &lt;div&gt;  &lt;p class="MsoNormal"&gt;&lt;a href="http://programming-android.labs.oreilly.com/index.html" target="_blank"&gt;http://programming-android.labs.oreilly.com/index.html&lt;/a&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt; &lt;/p&gt;&lt;br&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-3722653194698795368?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/3722653194698795368/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=3722653194698795368" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/3722653194698795368?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/3722653194698795368?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/rZ7bMsPMm_0/programming-android.html" title="Programming Android" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/10/programming-android.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UCRHw_fyp7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-1058978223412741058</id><published>2010-10-07T22:34:00.001+11:00</published><updated>2010-10-07T22:34:25.247+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T22:34:25.247+11:00</app:edited><title>Javascript and JQuery fundementals</title><content type="html">&lt;br&gt;&lt;div class="gmail_quote"&gt;&lt;br&gt;     &lt;div&gt; &lt;div style="direction:ltr;font-family:Tahoma;color:rgb(0, 0, 0);font-size:13px"&gt; &lt;div&gt; &lt;a href="http://jqfundamentals.com/book/book.html" target="_blank"&gt;http://jqfundamentals.com/book/book.html&lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-1058978223412741058?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/1058978223412741058/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=1058978223412741058" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1058978223412741058?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1058978223412741058?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/9OnprvDf0Qk/javascript-and-jquery-fundementals.html" title="Javascript and JQuery fundementals" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/10/javascript-and-jquery-fundementals.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UAQX46fyp7ImA9Wx5VFEg.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-1588303610139631439</id><published>2010-10-07T22:33:00.001+11:00</published><updated>2010-10-07T22:34:00.017+11:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-07T22:34:00.017+11:00</app:edited><title>EICAR Standard Anti-Virus Test File</title><content type="html">&lt;br&gt;&lt;div class="gmail_quote"&gt;&lt;br&gt;     &lt;div&gt; &lt;div style="direction:ltr;font-family:Tahoma;color:rgb(0, 0, 0);font-size:13px"&gt; &lt;div&gt; &lt;a href="http://en.wikipedia.org/wiki/EICAR_test_file" target="_blank"&gt;http://en.wikipedia.org/wiki/EICAR_test_file&lt;/a&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-1588303610139631439?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/1588303610139631439/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=1588303610139631439" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1588303610139631439?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1588303610139631439?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/pqy7sOt3v3w/eicar-standard-anti-virus-test-file.html" title="EICAR Standard Anti-Virus Test File" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/10/eicar-standard-anti-virus-test-file.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ECRH8ycSp7ImA9Wx5XFUk.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-7916405218571943599</id><published>2010-09-15T21:21:00.001+10:00</published><updated>2010-09-15T21:21:05.199+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-15T21:21:05.199+10:00</app:edited><title>learning clojure, stacked deck</title><content type="html">&lt;div class="gmail_quote"&gt;&lt;a href="http://www.benjoffe.com/holdem" target="_blank"&gt;http://www.benjoffe.com/holdem&lt;/a&gt;&lt;br&gt;&lt;a href="http://learnclojure.blogspot.com/2010/09/clojure-macro-tutorial-part-i-getting.html" target="_blank"&gt;http://learnclojure.blogspot.com/2010/09/clojure-macro-tutorial-part-i-getting.html&lt;/a&gt;&lt;br&gt;  &lt;/div&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-7916405218571943599?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/7916405218571943599/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=7916405218571943599" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/7916405218571943599?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/7916405218571943599?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/eGoqakuTAPc/learning-clojure-stacked-deck.html" title="learning clojure, stacked deck" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/09/learning-clojure-stacked-deck.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQCQXc6eyp7ImA9Wx5REko.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-3918429276613871506</id><published>2010-08-20T13:52:00.001+10:00</published><updated>2010-08-20T13:52:40.913+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-20T13:52:40.913+10:00</app:edited><title>lens flare</title><content type="html">&lt;a href="http://www.blackpawn.com/texts/lensflare/default.html"&gt;http://www.blackpawn.com/texts/lensflare/default.html&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-3918429276613871506?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/3918429276613871506/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=3918429276613871506" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/3918429276613871506?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/3918429276613871506?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/494ni96iD_8/lens-flare.html" title="lens flare" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/08/lens-flare.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08MRX0ycCp7ImA9Wx5SF0g.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-2551150195143397041</id><published>2010-08-14T12:11:00.001+10:00</published><updated>2010-08-14T12:11:24.398+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-14T12:11:24.398+10:00</app:edited><title>processing.js</title><content type="html">&lt;a href="http://www.monocubed.com/?p=549"&gt;http://www.monocubed.com/?p=549&lt;/a&gt;&lt;br&gt;&lt;a href="http://processingjs.org/"&gt;http://processingjs.org/&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-2551150195143397041?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/2551150195143397041/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=2551150195143397041" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/2551150195143397041?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/2551150195143397041?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/u0owpXCfNn0/processingjs.html" title="processing.js" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/08/processingjs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIFQX07fCp7ImA9Wx5SFko.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-2049034968638933158</id><published>2010-08-13T15:15:00.001+10:00</published><updated>2010-08-13T15:15:10.304+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-13T15:15:10.304+10:00</app:edited><title>Using sqlite3 - C programming example</title><content type="html">void select_stack_shuffle(const char * database, const char * blk_lbl, int blk_lbl_len)&lt;br&gt;{&lt;br&gt;    sqlite3 *db;&lt;br&gt;    char *zErrMsg = 0;&lt;br&gt;    int rc;&lt;br&gt;&lt;br&gt;    rc = sqlite3_open(database, &amp;amp;db);&lt;br&gt;    if ( rc ) {&lt;br&gt;         fprintf(stderr, &amp;quot;sqlite4: Can&amp;#39;t open database: %s\n&amp;quot;, sqlite3_errmsg(db));&lt;br&gt;        sqlite3_close(db);&lt;br&gt;        return;&lt;br&gt;    }&lt;br&gt;    const unsigned int sql_str_len = 1024;&lt;br&gt;    char sql_str[sql_str_len];&lt;br&gt;     strcpy(sql_str, &amp;quot;SELECT ctr_key, deadline FROM stack_shuffle WHERE block = ?1 AND still_there = 1;&amp;quot;);&lt;br&gt;    sqlite3_busy_timeout(db, 500);&lt;br&gt;    sqlite3_stmt * pStmt;&lt;br&gt;    const char * pzTail;&lt;br&gt;    rc = sqlite3_prepare(db, sql_str, -1, &amp;amp;pStmt, &amp;amp;pzTail);&lt;br&gt;     // rc = sqlite3_prepare_v2(db, sql_str, -1, &amp;amp;pStmt, &amp;amp;pzTail);&lt;br&gt;    if ( rc != SQLITE_OK ) {&lt;br&gt;        fprintf(stderr, &amp;quot;sqlite4: Can&amp;#39;t prepare statement: %s\n&amp;quot;, sqlite3_errmsg(db));&lt;br&gt;        sqlite3_close(db);&lt;br&gt;         return;&lt;br&gt;    }&lt;br&gt;    rc = sqlite3_bind_text(pStmt, 1, blk_lbl, blk_lbl_len, SQLITE_STATIC);&lt;br&gt;    if (rc != SQLITE_OK) {&lt;br&gt;        fprintf(stderr, &amp;quot;sqlite4: bind failed: %s\n&amp;quot;, sqlite3_errmsg(db));&lt;br&gt;         sqlite3_close(db);&lt;br&gt;        return;&lt;br&gt;    }&lt;br&gt;    do {&lt;br&gt;        rc = sqlite3_step(pStmt);&lt;br&gt;        if (rc == SQLITE_ROW) {&lt;br&gt;            int cols = sqlite3_column_count(pStmt);&lt;br&gt;            int col_1_type = sqlite3_column_type(pStmt, 0);&lt;br&gt;             int col_2_type = sqlite3_column_type(pStmt, 1);&lt;br&gt;            printf(&amp;quot;sqlite4: %s: %d columns, type col 1 %d, type col 2 %d\n&amp;quot;, __FUNCTION__, cols, col_1_type, col_2_type);&lt;br&gt;            int ctr_key = sqlite3_column_int(pStmt, 0);&lt;br&gt;             const unsigned char * deadline = sqlite3_column_text(pStmt, 1);&lt;br&gt;            printf(&amp;quot;sqlite4: %s: ctr_key %d, deadline %s\n&amp;quot;, __FUNCTION__, ctr_key, deadline);&lt;br&gt;&lt;br&gt;        } else {&lt;br&gt;            if (rc != SQLITE_DONE) {&lt;br&gt;                 printf(&amp;quot;sqlite4: %s: received a %d, %s\n&amp;quot;, __FUNCTION__, rc, sqlite3_errmsg(db));&lt;br&gt;            }&lt;br&gt;        }&lt;br&gt;    } while (rc == SQLITE_ROW);&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-2049034968638933158?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/2049034968638933158/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=2049034968638933158" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/2049034968638933158?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/2049034968638933158?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/mmao4wBeI1k/using-sqlite3-c-programming-example.html" title="Using sqlite3 - C programming example" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/08/using-sqlite3-c-programming-example.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEMSXwzeip7ImA9Wx5SFEQ.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-1047828323113763364</id><published>2010-08-11T13:18:00.001+10:00</published><updated>2010-08-11T13:18:08.282+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-08-11T13:18:08.282+10:00</app:edited><title>HTML5 boilerplate &amp; Learn python the hard way</title><content type="html">&lt;a href="http://html5boilerplate.com/"&gt;http://html5boilerplate.com/&lt;/a&gt;&lt;br&gt;&lt;a href="http://learnpythonthehardway.org/index"&gt;http://learnpythonthehardway.org/index&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-1047828323113763364?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/1047828323113763364/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=1047828323113763364" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1047828323113763364?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1047828323113763364?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/f3yLy5qZMMY/html5-boilerplate-learn-python-hard-way.html" title="HTML5 boilerplate &amp; Learn python the hard way" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/08/html5-boilerplate-learn-python-hard-way.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8GSH4zeip7ImA9WxFaFUw.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-1718523552074944252</id><published>2010-07-19T14:47:00.001+10:00</published><updated>2010-07-19T14:47:09.082+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-19T14:47:09.082+10:00</app:edited><title>Approximate profiling with gprof.</title><content type="html">A work colleague (AB) discovered a little trick with pg profiling that everyone should know about if they don&amp;#39;t already,&lt;br&gt;&lt;br&gt;Profiling is often avoided in live apps because it is expensive and slows down apps that are already running slow (why else profile?)&lt;br&gt; &lt;br&gt;But there are two things going on when profiling. If you COMPILE with a -pg, every function that gets called stores information about itself. This info is used to determine how many times particular functions are called, and which function gets called by which function. Unfortunately this is expensive for your application, especially for properly written c++ apps as functions are called lots and lots.&lt;br&gt; &lt;br&gt;When you LINK with a -pg, the program will sample your application 100 times a second and record which function is active at that point in time. This information is used to estimate what proportion of time your app spends in each function. This is often the most sought after information when profiling and is actually very cheap, computationally.&lt;br&gt; &lt;br&gt;To come to these conclusions I wrote a test application that had a handful of functions that get called a lot, one of them was a recursive function. My results with different profiling methods were as follows:&lt;br&gt;&lt;br&gt; (1) No profiling:                                         application took 13 seconds to execute.&lt;br&gt;(2) Linked with -pg:                                  application took 13 seconds to execute.&lt;br&gt;(3) Compiled and Linked with -pg:     application took 59 seconds to execute.&lt;br&gt; &lt;br&gt;When linking with -pg the call graph was absent from the profiling results, but the percentage of time spent in each function was retained with accurate results.&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-1718523552074944252?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/1718523552074944252/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=1718523552074944252" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1718523552074944252?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1718523552074944252?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/aR5RYulBukk/approximate-profiling-with-gprof.html" title="Approximate profiling with gprof." /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>8</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/07/approximate-profiling-with-gprof.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EDRXw5fip7ImA9WxFaFUw.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-3318342246974771813</id><published>2010-07-19T13:54:00.001+10:00</published><updated>2010-07-19T13:54:34.226+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-19T13:54:34.226+10:00</app:edited><title>Android CyanogenMod soon for HTC Desire</title><content type="html">&lt;a href="http://www.cyanogenmod.com/"&gt;http://www.cyanogenmod.com/&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-3318342246974771813?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/3318342246974771813/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=3318342246974771813" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/3318342246974771813?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/3318342246974771813?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/v_tmacmKk9Q/android-cyanogenmod-soon-for-htc-desire.html" title="Android CyanogenMod soon for HTC Desire" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/07/android-cyanogenmod-soon-for-htc-desire.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4AQ3wyeCp7ImA9WxFaFU0.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-6242148759829789251</id><published>2010-07-19T12:35:00.001+10:00</published><updated>2010-07-19T12:35:42.290+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-19T12:35:42.290+10:00</app:edited><title>IPv6 internode openwrt</title><content type="html">&lt;a href="http://ipv6.internode.on.net/access/adsl/"&gt;http://ipv6.internode.on.net/access/adsl/&lt;/a&gt;&lt;br&gt;&lt;a href="http://superuser.com/questions/104859/native-ipv6-on-openwrt"&gt;http://superuser.com/questions/104859/native-ipv6-on-openwrt&lt;/a&gt;&lt;br&gt; &lt;a href="http://www.andy.id.au/Home/openwrt/custom-builds"&gt;http://www.andy.id.au/Home/openwrt/custom-builds&lt;/a&gt;&lt;br&gt;&lt;a href="http://kamikaze.openwrt.org/docs/openwrt.html"&gt;http://kamikaze.openwrt.org/docs/openwrt.html&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-6242148759829789251?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/6242148759829789251/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=6242148759829789251" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/6242148759829789251?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/6242148759829789251?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/MTppuWE6qHg/ipv6-internode-openwrt.html" title="IPv6 internode openwrt" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/07/ipv6-internode-openwrt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0cCQn49cSp7ImA9WxFbGEQ.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-1262493186563546727</id><published>2010-07-12T10:37:00.001+10:00</published><updated>2010-07-12T10:37:43.069+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-12T10:37:43.069+10:00</app:edited><title>Using zlib in C programming</title><content type="html">&lt;div&gt;&lt;div&gt;g++ -Wall -Wextra comp.cpp -lz -o comp&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;iostream&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;cstring&amp;gt;&lt;/div&gt;&lt;div&gt;#include &amp;lt;zlib.h&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;using namespace std;&lt;/div&gt; &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;/*&lt;/div&gt;&lt;div&gt;ZEXTERN int ZEXPORT compress OF((Bytef *dest,   uLongf *destLen,&lt;/div&gt;&lt;div&gt;                                 const Bytef *source, uLong sourceLen));&lt;/div&gt;&lt;div&gt;     Compresses the source buffer into the destination buffer.  sourceLen is&lt;/div&gt; &lt;div&gt;   the byte length of the source buffer. Upon entry, destLen is the total&lt;/div&gt;&lt;div&gt;   size of the destination buffer, which must be at least the value returned&lt;/div&gt;&lt;div&gt;   by compressBound(sourceLen). Upon exit, destLen is the actual size of the&lt;/div&gt; &lt;div&gt;   compressed buffer.&lt;/div&gt;&lt;div&gt;     This function can be used to compress a whole file at once if the&lt;/div&gt;&lt;div&gt;   input file is mmap&amp;#39;ed.&lt;/div&gt;&lt;div&gt;     compress returns Z_OK if success, Z_MEM_ERROR if there was not&lt;/div&gt; &lt;div&gt;   enough memory, Z_BUF_ERROR if there was not enough room in the output&lt;/div&gt;&lt;div&gt;   buffer.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;ZEXTERN int ZEXPORT uncompress OF((Bytef *dest,   uLongf *destLen,&lt;/div&gt;&lt;div&gt;                                   const Bytef *source, uLong sourceLen));&lt;/div&gt; &lt;div&gt;     Decompresses the source buffer into the destination buffer.  sourceLen is&lt;/div&gt;&lt;div&gt;   the byte length of the source buffer. Upon entry, destLen is the total&lt;/div&gt;&lt;div&gt;   size of the destination buffer, which must be large enough to hold the&lt;/div&gt; &lt;div&gt;   entire uncompressed data. (The size of the uncompressed data must have&lt;/div&gt;&lt;div&gt;   been saved previously by the compressor and transmitted to the decompressor&lt;/div&gt;&lt;div&gt;   by some mechanism outside the scope of this compression library.)&lt;/div&gt; &lt;div&gt;   Upon exit, destLen is the actual size of the compressed buffer.&lt;/div&gt;&lt;div&gt;     This function can be used to decompress a whole file at once if the&lt;/div&gt;&lt;div&gt;   input file is mmap&amp;#39;ed.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;     uncompress returns Z_OK if success, Z_MEM_ERROR if there was not&lt;/div&gt; &lt;div&gt;   enough memory, Z_BUF_ERROR if there was not enough room in the output&lt;/div&gt;&lt;div&gt;   buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;*/&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;int main()&lt;/div&gt; &lt;div&gt;{&lt;/div&gt;&lt;div&gt;    char d[] =&lt;/div&gt;&lt;div&gt;    &amp;quot;QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm&amp;quot;;&lt;/div&gt;&lt;div&gt;    cout &amp;lt;&amp;lt; &amp;quot;sizeof(d): &amp;quot; &amp;lt;&amp;lt; sizeof(d) &amp;lt;&amp;lt; endl;&lt;/div&gt; &lt;div&gt;    const unsigned int DESTLEN = 256;&lt;/div&gt;&lt;div&gt;    char dest[DESTLEN];&lt;/div&gt;&lt;div&gt;    if (sizeof(d) &amp;gt; DESTLEN) {&lt;/div&gt;&lt;div&gt;        cerr &amp;lt;&amp;lt; &amp;quot;Dest size &amp;quot; &amp;lt;&amp;lt; DESTLEN &amp;lt;&amp;lt; &amp;quot; too small : &amp;quot; &amp;lt;&amp;lt; sizeof(d) &amp;lt;&amp;lt; endl;&lt;/div&gt; &lt;div&gt;        return 0;&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;    uLongf destlen = DESTLEN;&lt;/div&gt;&lt;div&gt;    unsigned int compress_bound = compressBound(sizeof(d));&lt;/div&gt;&lt;div&gt;    cout &amp;lt;&amp;lt; &amp;quot;Source len: &amp;quot; &amp;lt;&amp;lt; sizeof(d) &amp;lt;&amp;lt; &amp;quot;, size of compress bound: &amp;quot; &amp;lt;&amp;lt; compress_bound &amp;lt;&amp;lt; &amp;quot;, size of destlen: &amp;quot; &amp;lt;&amp;lt;&lt;/div&gt; &lt;div&gt;&lt;div&gt;    DESTLEN &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;    if (compress_bound &amp;gt; DESTLEN) {&lt;/div&gt;&lt;div&gt;        cerr &amp;lt;&amp;lt; &amp;quot;Dest size &amp;quot; &amp;lt;&amp;lt; DESTLEN &amp;lt;&amp;lt; &amp;quot; too small for compress_bound: &amp;quot; &amp;lt;&amp;lt; compress_bound &amp;lt;&amp;lt; endl;&lt;/div&gt; &lt;div&gt;        return 0;&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;    int rtn = compress((Bytef*)dest, &amp;amp;destlen, (Bytef*)d, sizeof(d));&lt;/div&gt;&lt;div&gt;    if (rtn != Z_OK) {&lt;/div&gt;&lt;div&gt;        cerr &amp;lt;&amp;lt; &amp;quot;Compress failed&amp;quot; &amp;lt;&amp;lt; rtn &amp;lt;&amp;lt; endl;&lt;/div&gt; &lt;div&gt;    } else {&lt;/div&gt;&lt;div&gt;        cout &amp;lt;&amp;lt; &amp;quot;Compress suceeded: destlen: &amp;quot; &amp;lt;&amp;lt; destlen &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;        //cout &amp;lt;&amp;lt; &amp;quot;Compressed: &amp;quot; &amp;lt;&amp;lt; dest &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;     }&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;    char dest2[DESTLEN] = {0};&lt;/div&gt;&lt;div&gt;    uLongf destlen2 = DESTLEN;&lt;/div&gt;&lt;div&gt;    rtn = uncompress((Bytef*)dest2, &amp;amp;destlen2, (Bytef*)dest, destlen);&lt;/div&gt;&lt;div&gt;    if (rtn != Z_OK) {&lt;/div&gt; &lt;div&gt;        cerr &amp;lt;&amp;lt; &amp;quot;Decompress failed&amp;quot; &amp;lt;&amp;lt; rtn &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;    } else {&lt;/div&gt;&lt;div&gt;        cout &amp;lt;&amp;lt; &amp;quot;Decompress suceeded: destlen: &amp;quot; &amp;lt;&amp;lt; destlen2 &amp;lt;&amp;lt; endl;&lt;/div&gt; &lt;div&gt;        cout &amp;lt;&amp;lt; &amp;quot;Decompressed: &amp;quot; &amp;lt;&amp;lt; dest2 &amp;lt;&amp;lt; endl;&lt;/div&gt;&lt;div&gt;    }&lt;/div&gt;&lt;div&gt;    rtn = memcmp(d, dest2, sizeof(d));&lt;/div&gt;&lt;div&gt;    cout &amp;lt;&amp;lt; &amp;quot;Comparison: &amp;quot; &amp;lt;&amp;lt; rtn &amp;lt;&amp;lt; endl;&lt;/div&gt; &lt;div&gt;    return 0;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-1262493186563546727?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/1262493186563546727/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=1262493186563546727" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1262493186563546727?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1262493186563546727?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/kOLMKnV0I-M/using-zlib-in-c-programming.html" title="Using zlib in C programming" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/07/using-zlib-in-c-programming.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MCSH4_fCp7ImA9WxFbFEo.&quot;"><id>tag:blogger.com,1999:blog-2928862060896537735.post-1840551051473437494</id><published>2010-07-07T15:11:00.001+10:00</published><updated>2010-07-07T15:11:09.044+10:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-07-07T15:11:09.044+10:00</app:edited><title>zero mq - fast messaging</title><content type="html">&lt;a href="http://sheddingbikes.com/posts/1278464593.html"&gt;http://sheddingbikes.com/posts/1278464593.html&lt;/a&gt;&lt;br&gt;&lt;a href="http://www.complang.org/ragel/"&gt;http://www.complang.org/ragel/&lt;/a&gt;&lt;br&gt;&lt;a href="http://en.wikipedia.org/wiki/Simple_Common_Gateway_Interface"&gt;http://en.wikipedia.org/wiki/Simple_Common_Gateway_Interface&lt;/a&gt;&lt;br&gt; &lt;a href="http://www.zeromq.org/"&gt;http://www.zeromq.org/&lt;/a&gt;&lt;br&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2928862060896537735-1840551051473437494?l=fireflyblue.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://fireflyblue.blogspot.com/feeds/1840551051473437494/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2928862060896537735&amp;postID=1840551051473437494" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1840551051473437494?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2928862060896537735/posts/default/1840551051473437494?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/InfiniteLifetimes/~3/ga9rt9Jii3E/zero-mq-fast-messaging.html" title="zero mq - fast messaging" /><author><name>fireflyblue</name><uri>http://www.blogger.com/profile/07667452169670222010</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://fireflyblue.blogspot.com/2010/07/zero-mq-fast-messaging.html</feedburner:origLink></entry></feed>

