<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17169344</id><updated>2024-09-22T06:13:28.193-07:00</updated><category term="computer"/><category term="android"/><category term="vm"/><category term="elisp"/><title type='text'>Unstable</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17169344.post-5865804283309884211</id><published>2014-11-29T07:32:00.003-08:00</published><updated>2014-11-29T17:03:47.099-08:00</updated><title type='text'>GLib: Transfer Full</title><content type='html'>&lt;p&gt;
While reading &lt;a href=&quot;https://developer.gnome.org/glib/stable/&quot;&gt;the GLib Reference Manual&lt;/a&gt;, or any other manuals for glib
based libraries such as GObject, Gtk+ or GStreamer, you might notice
that some parameters or returns are annotated as &lt;i&gt;Transfer Full&lt;/i&gt;.  The
glib reference manual explains in &lt;a href=&quot;https://developer.gnome.org/glib/stable/annotation-glossary.html&quot;&gt;the annotation glossary&lt;/a&gt; as
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
Free data after the code is done.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;
What exactly does this mean?  This means that all responsibility of
the objects that annotated variables point to will be transferred to
&lt;i&gt;the other side&lt;/i&gt; beyond the API borders.
&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx0hYfJNT9cIDjGggdVELTsQWzUwP9PmiV-nDzo9WLbPqsNxunhX-_XNtJ-AIb-FIM5Av7HmYcRgPpgNPCvAH6hyphenhyphenRQYFn9tKfbG2OtLV-iyiVVbjip8AkFp0v5lgdXYzLqQUOsIA/s1600/api-border.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx0hYfJNT9cIDjGggdVELTsQWzUwP9PmiV-nDzo9WLbPqsNxunhX-_XNtJ-AIb-FIM5Av7HmYcRgPpgNPCvAH6hyphenhyphenRQYFn9tKfbG2OtLV-iyiVVbjip8AkFp0v5lgdXYzLqQUOsIA/s320/api-border.png&quot; /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;https://developer.gnome.org/gi/stable/gi-GIArgInfo.html#GITransfer&quot;&gt;GObject Introspection Reference Manual&lt;/a&gt; or &lt;a href=&quot;https://wiki.gnome.org/Projects/GObjectIntrospection/Annotations#Memory_and_lifecycle_management&quot;&gt;GObject-Introspection Annotations Wiki&lt;/a&gt; has a much better description of the annotation, including other modes.
&lt;h2 id=&quot;returns&quot;&gt;Returns&lt;/h2&gt;

&lt;p&gt;
When a function of the return is annotated, you are the one to control
the life of the returned object.  You decide when to free() or not.
All the responsibility is fully transferred to you after the function
returned.
&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzUtnmK2IwiQhtsSeuGjkxbjncLBnQ6TKBDzEq4sxmC-QJJLEtkyoozT9MwQjID7-sX4sRxYRHwgBa7AyEt6d9Mh3pvqHyEVMIhzV1TZ8zjPn3NgSZ5ovhKGa96e6i5Qf5fQAKvA/s1600/new.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzUtnmK2IwiQhtsSeuGjkxbjncLBnQ6TKBDzEq4sxmC-QJJLEtkyoozT9MwQjID7-sX4sRxYRHwgBa7AyEt6d9Mh3pvqHyEVMIhzV1TZ8zjPn3NgSZ5ovhKGa96e6i5Qf5fQAKvA/s320/new.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;out-parameters&quot;&gt;Out Parameters&lt;/h2&gt;
&lt;p&gt;
This is similar to the returns.  Everything is transferred to you.
Free when you do need them any more.
&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvV47_9SyrDEc4_6HtCENLqW89-KeM7hS2ff9cqw_J-cNll-DKEjZV185J2CQukszJdfjaTn9lUOWHg-ZtqxFBbZojfTW4oHQdYQKqK0L85YXd-Bh74kpSjYEcH0EsAdWBnYAseQ/s1600/out.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvV47_9SyrDEc4_6HtCENLqW89-KeM7hS2ff9cqw_J-cNll-DKEjZV185J2CQukszJdfjaTn9lUOWHg-ZtqxFBbZojfTW4oHQdYQKqK0L85YXd-Bh74kpSjYEcH0EsAdWBnYAseQ/s320/out.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
/* -*- compile-command: &quot;gcc -Wall -Wextra -g $(pkg-config --cflags --libs gio-2.0) transfer-full-out.c&quot; -*- */
#include &amp;lt;gio/gio.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;

int main()
{
        GFile *file;
        char *buf;
        gsize len;

        file = g_file_new_for_path(&quot;/etc/passwd&quot;);
        g_file_load_contents(file, NULL, &amp;buf, &amp;len, NULL, NULL);

        fwrite(buf, len, 1, stdout);
        g_free(buf);

        return 0;
}&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id=&quot;in-parameters&quot;&gt;In Parameters&lt;/h2&gt;
&lt;p&gt;
You pass your data to a function with &lt;i&gt;Transfer full&lt;/i&gt; annotation, you
are no longer the owner of the object.
&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiByLfW851n4yZYzKIcc6wDGL6k6WH6g39xgQDp6s-VZ3yPsx5c2dQACIEYR1pq4J5UOXQWdC1gaWqwN9mtx9PD_U2JX1p8Gejtjj2-kp2lJGVpOskTsxlXjNjV-Vzsnm_gX2QAZA/s1600/in.png&quot; imageanchor=&quot;1&quot; &gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiByLfW851n4yZYzKIcc6wDGL6k6WH6g39xgQDp6s-VZ3yPsx5c2dQACIEYR1pq4J5UOXQWdC1gaWqwN9mtx9PD_U2JX1p8Gejtjj2-kp2lJGVpOskTsxlXjNjV-Vzsnm_gX2QAZA/s320/in.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
/* -*- compile-command: &quot;gcc -Wall -Wextra -g $(pkg-config --cflags --libs gio-2.0) transfer-full-in.c&quot; -*- */
#include &amp;lt;glib.h&amp;gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;

int main()
{
        void *buf;
        gsize len;
        GBytes *bytes;

        len = 100;
        buf = malloc(len);
        sprintf(buf, &quot;%s&quot;, &quot;hello&quot;);
        bytes = g_bytes_new_take(buf, len);

        // It might be a good idea to remove the reference
        // to the buf.  This ensures that we are no longer
        // able to free it by accident.
        buf = NULL;
        len = 0;

        fwrite(g_bytes_get_data(bytes, NULL),
               g_bytes_get_size(bytes),1, stdout);

        // buf will be freed when byts are freed
        g_bytes_unref(bytes);

        return 0;
}
&lt;/code&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/5865804283309884211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/5865804283309884211' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/5865804283309884211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/5865804283309884211'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2014/11/transfer-full_66.html' title='GLib: Transfer Full'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx0hYfJNT9cIDjGggdVELTsQWzUwP9PmiV-nDzo9WLbPqsNxunhX-_XNtJ-AIb-FIM5Av7HmYcRgPpgNPCvAH6hyphenhyphenRQYFn9tKfbG2OtLV-iyiVVbjip8AkFp0v5lgdXYzLqQUOsIA/s72-c/api-border.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-3713419400757239346</id><published>2014-10-27T07:25:00.000-07:00</published><updated>2014-10-27T20:25:54.677-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="elisp"/><title type='text'>Elisp: String Compare (Less than)</title><content type='html'>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot;
&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;en&quot; xml:lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;title&gt;&lt;/title&gt;
&lt;meta  http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot; /&gt;
&lt;meta  name=&quot;generator&quot; content=&quot;Org-mode&quot; /&gt;
&lt;style type=&quot;text/css&quot;&gt;
 &lt;!--/*--&gt;&lt;![CDATA[/*&gt;&lt;!--*/
  .title  { text-align: center; }
  .todo   { font-family: monospace; color: red; }
  .done   { color: green; }
  .tag    { background-color: #eee; font-family: monospace;
            padding: 2px; font-size: 80%; font-weight: normal; }
  .timestamp { color: #bebebe; }
  .timestamp-kwd { color: #5f9ea0; }
  .right  { margin-left: auto; margin-right: 0px;  text-align: right; }
  .left   { margin-left: 0px;  margin-right: auto; text-align: left; }
  .center { margin-left: auto; margin-right: auto; text-align: center; }
  .underline { text-decoration: underline; }
  #postamble p, #preamble p { font-size: 90%; margin: .2em; }
  p.verse { margin-left: 3%; }
  pre {
    border: 1px solid #ccc;
    box-shadow: 3px 3px 3px #eee;
    padding: 8pt;
    font-family: monospace;
    overflow: auto;
    margin: 1.2em;
  }
  pre.src {
    position: relative;
    overflow: visible;
    padding-top: 1.2em;
  }
  pre.src:before {
    display: none;
    position: absolute;
    background-color: white;
    top: -10px;
    right: 10px;
    padding: 3px;
    border: 1px solid black;
  }
  pre.src:hover:before { display: inline;}
  pre.src-sh:before    { content: &#39;sh&#39;; }
  pre.src-bash:before  { content: &#39;sh&#39;; }
  pre.src-emacs-lisp:before { content: &#39;Emacs Lisp&#39;; }
  pre.src-R:before     { content: &#39;R&#39;; }
  pre.src-perl:before  { content: &#39;Perl&#39;; }
  pre.src-java:before  { content: &#39;Java&#39;; }
  pre.src-sql:before   { content: &#39;SQL&#39;; }

  table { border-collapse:collapse; }
  caption.t-above { caption-side: top; }
  caption.t-bottom { caption-side: bottom; }
  td, th { vertical-align:top;  }
  th.right  { text-align: center;  }
  th.left   { text-align: center;   }
  th.center { text-align: center; }
  td.right  { text-align: right;  }
  td.left   { text-align: left;   }
  td.center { text-align: center; }
  dt { font-weight: bold; }
  .footpara:nth-child(2) { display: inline; }
  .footpara { display: block; }
  .footdef  { margin-bottom: 1em; }
  .figure { padding: 1em; }
  .figure p { text-align: center; }
  .inlinetask {
    padding: 10px;
    border: 2px solid gray;
    margin: 10px;
    background: #ffffcc;
  }
  #org-div-home-and-up
   { text-align: right; font-size: 70%; white-space: nowrap; }
  textarea { overflow-x: auto; }
  .linenr { font-size: smaller }
  .code-highlighted { background-color: #ffff00; }
  .org-info-js_info-navigation { border-style: none; }
  #org-info-js_console-label
    { font-size: 10px; font-weight: bold; white-space: nowrap; }
  .org-info-js_search-highlight
    { background-color: #ffff00; color: #000000; font-weight: bold; }
  /*]]&gt;*/--&gt;
&lt;/style&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
/*
@licstart  The following is the entire license notice for the
JavaScript code in this tag.

Copyright (C) 2012-2013 Free Software Foundation, Inc.

The JavaScript code in this tag is free software: you can
redistribute it and/or modify it under the terms of the GNU
General Public License (GNU GPL) as published by the Free Software
Foundation, either version 3 of the License, or (at your option)
any later version.  The code is distributed WITHOUT ANY WARRANTY;
without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE.  See the GNU GPL for more details.

As additional permission under GNU GPL version 3 section 7, you
may distribute non-source (e.g., minimized or compacted) forms of
that code without the copy of the GNU GPL normally required by
section 4, provided you include this license notice and a URL
through which recipients can access the Corresponding Source.


@licend  The above is the entire license notice
for the JavaScript code in this tag.
*/
&lt;!--/*--&gt;&lt;![CDATA[/*&gt;&lt;!--*/
 function CodeHighlightOn(elem, id)
 {
   var target = document.getElementById(id);
   if(null != target) {
     elem.cacheClassElem = elem.className;
     elem.cacheClassTarget = target.className;
     target.className = &quot;code-highlighted&quot;;
     elem.className   = &quot;code-highlighted&quot;;
   }
 }
 function CodeHighlightOff(elem, id)
 {
   var target = document.getElementById(id);
   if(elem.cacheClassElem)
     elem.className = elem.cacheClassElem;
   if(elem.cacheClassTarget)
     target.className = elem.cacheClassTarget;
 }
/*]]&gt;*///--&gt;
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div id=&quot;content&quot;&gt;
&lt;h1 class=&quot;title&quot;&gt;&lt;/h1&gt;

&lt;div id=&quot;outline-container-unnumbered-1&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;unnumbered-1&quot;&gt;Less Than&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-unnumbered-1&quot;&gt;
&lt;p&gt;
There are many elisp functions for comparisons.  The &quot;less than&quot; sign
&lt;code&gt;&amp;lt;&lt;/code&gt; is a mathematical sign to compare inequality.  Elisp has the
function &lt;code&gt;&amp;lt;&lt;/code&gt; to compare Number or Marker.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;prettyprint&quot; lang-&gt;(&amp;lt; 1 2)
t
(&amp;lt; 2 1)
nil
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
It is obvious enough that no explanation is needed.
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-unnumbered-2&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;unnumbered-2&quot;&gt;String Less Than&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-unnumbered-2&quot;&gt;
&lt;p&gt;
Elisp also has a &quot;less than&quot; function for Strings, called &lt;code&gt;string-lessp&lt;/code&gt;.
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;prettyprint&quot; lang-lisp&gt;(string-lessp &lt;span style=&quot;color: #e9b96e;&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span style=&quot;color: #e9b96e;&quot;&gt;&quot;def&quot;&lt;/span&gt;)
t
(string-lessp &lt;span style=&quot;color: #e9b96e;&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span style=&quot;color: #e9b96e;&quot;&gt;&quot;ab&quot;&lt;/span&gt;)
nil
&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;
It is a predicate function, meaning that it returns &lt;code&gt;t&lt;/code&gt; if the first
string, &quot;abc&quot; in the first example, is less than the second strings
&quot;def&quot;, or &lt;code&gt;nil&lt;/code&gt; otherwise.
&lt;/p&gt;

&lt;p&gt;
Elisp have a convention, &lt;a href=&quot;https://www.gnu.org/software/emacs/manual/html_node/elisp/Type-Predicates.html&quot;&gt;as noted in elisp info&lt;/a&gt;, to end a predicate
function with letter &quot;p&quot;.  Thus, following this convention,
&lt;code&gt;string-lessp&lt;/code&gt; ends with &quot;p&quot;.
&lt;/p&gt;

&lt;p&gt;
Elisp does have &lt;code&gt;string&amp;lt;&lt;/code&gt; as an alias for &lt;code&gt;string-lessp&lt;/code&gt;.  So that you
can write the above example:
&lt;/p&gt;

&lt;div class=&quot;org-src-container&quot;&gt;

&lt;pre class=&quot;prettyprint&quot;&gt;(string&amp;lt; &lt;span style=&quot;color: #e9b96e;&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span style=&quot;color: #e9b96e;&quot;&gt;&quot;def&quot;&lt;/span&gt;)
t
(string&amp;lt; &lt;span style=&quot;color: #e9b96e;&quot;&gt;&quot;abc&quot;&lt;/span&gt; &lt;span style=&quot;color: #e9b96e;&quot;&gt;&quot;ab&quot;&lt;/span&gt;)
nil
&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-unnumbered-3&quot; class=&quot;outline-2&quot;&gt;
&lt;h2 id=&quot;unnumbered-3&quot;&gt;&quot;&amp;lt;&quot; vs &quot;p&quot; vs &quot;-p&quot;&lt;/h2&gt;
&lt;div class=&quot;outline-text-2&quot; id=&quot;text-unnumbered-3&quot;&gt;
&lt;p&gt;
It seems like a majority of &quot;less than&quot; functions follow this &quot;lessp&quot;
convention, however, there are other functions in Emacs.  Here is an
incomplete list of &quot;less than&quot; functions I have got from my Emacs with
&lt;code&gt;M-x apropos &amp;lt;$\|lessp$\|less-p$&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
What functions do you have in your Emacs?
&lt;/p&gt;
&lt;/div&gt;

&lt;div id=&quot;outline-container-unnumbered-4&quot; class=&quot;outline-3&quot;&gt;
&lt;h3 id=&quot;unnumbered-4&quot;&gt;Incomplete List of &quot;less than&quot; functions&lt;/h3&gt;
&lt;div class=&quot;outline-text-3&quot; id=&quot;text-unnumbered-4&quot;&gt;
&lt;ul class=&quot;org-ul&quot;&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bibtex-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;byte-string&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;coding-system-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;customize-version-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;elmo-time-less-p&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;elmo-time&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;file-attributes-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gnus-pseudos&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gnus-string&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ido-file-extension-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ido-file-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mailcap-viewer-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org-entries-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org-table-formula-less-p&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;org-time&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;recentf-string-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;s-less-p&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;skk-string-lessp-in-coding-system&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;skk-string&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string-lessp&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;time-less-p&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;version-list-&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;version&amp;lt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;postamble&quot; class=&quot;status&quot;&gt;
&lt;p class=&quot;validation&quot;&gt;&lt;a href=&quot;http://validator.w3.org/check?uri=referer&quot;&gt;Validate&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/3713419400757239346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/3713419400757239346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/3713419400757239346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/3713419400757239346'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2014/10/elisp-string-compare-less-than.html' title='Elisp: String Compare (Less than)'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-8340113918843297333</id><published>2012-04-23T12:04:00.000-07:00</published><updated>2012-04-26T01:50:57.998-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><category scheme="http://www.blogger.com/atom/ns#" term="vm"/><title type='text'>mruby first impression</title><content type='html'>&lt;p&gt;Matz released mruby, a yet another ruby implementation for small systems, at &lt;a href=&quot;https://github.com/mruby/mruby&quot;&gt;GitHub&lt;/a&gt;. Mruby is a new implementation of Ruby Language based on RiteVM, which seems to be a register based VM with tri-color marking and mark-and-sweep collector GC.&lt;/p&gt;

&lt;p&gt;I&#39;ll just quick look at the following points on the VM, which is said to be the most costly part of any virtual machine&lt;sup&gt;&lt;a href=&quot;http://static.usenix.org/events/vee05/full_papers/p153-yunhe.pdf&quot;&gt;[1]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;
&lt;ul&gt;
&lt;li&gt;The Instruction Dispatcher&lt;/li&gt;
&lt;li&gt;Accessing the Operands&lt;/li&gt;
&lt;li&gt;Performing the Computation&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;h3&gt;The instruction dispatcher&lt;/h3&gt;

&lt;p&gt;The instruction dispatcher, mrb_run(), is a simple C switch dispatcher.  There seems to be a compile time condition code for a label dispatcher, too, but the default one is the C switch.
&lt;script src=&quot;https://gist.github.com/2433372.js&quot;&gt; &lt;/script&gt;&lt;/p&gt;

&lt;p&gt;The instruction dispather is compiled to 17200 bytes (0x4330 bytes) of function under GCC 4.3 for ARM (the number depends on compiler options, of course).  I haven&#39;t checked how this works in any type of ARM CPU cache.&lt;/p&gt;

&lt;pre&gt;
$ objdump -t vm.o |grep mrb_run
000001d8 g     F .text  00004330 mrb_run
&lt;/pre&gt;

&lt;h3&gt;Accessing the Operands&lt;/h3&gt;

&lt;p&gt;The VM instructions are encoded in 32 bit fixed size instruction set.  There seems to be three types of instructions.  You can find this out in src/opcode.h.
&lt;script src=&quot;https://gist.github.com/2433311.js&quot;&gt; &lt;/script&gt;&lt;/p&gt;

&lt;p&gt;The opcode is 7 bit long, which means that RiteVM can support 127 opcodes.  There already are 75 opcodes and five reserved opcodes defined in &lt;a href=&quot;https://github.com/mruby/mruby/blob/master/src/opcode.h&quot;&gt;src/opcode.h&lt;/a&gt;. So, 6 bit (64 opcodes) is too short RiteVM.&lt;/p&gt;

&lt;p&gt;If you look at the comment above, it seems to be that the opcode is at MSB, but it is actually at the LSB side.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/2472646.js&quot;&gt; &lt;/script&gt;
&lt;p&gt;So, it&#39;s more like A:B:C:OP instead of OP:A:B:C.&lt;/p&gt;

&lt;p&gt;A:B:C:OP takes three operands, the first two are 9 bits each and the last one is 7 bits. So, to retrieve the operand A from this vm instruction, you need to shift 23(9+7+7) bits to the right. You can do that in one instruction on ARM CPU.&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/2473066.js&quot;&gt; &lt;/script&gt;
&lt;script src=&quot;https://gist.github.com/2473109.js&quot;&gt; &lt;/script&gt;

&lt;p&gt;A:Bx:OP takes two operands, the first one is 9 bits and the second one is 16 bits.&lt;/p&gt;

&lt;p&gt;Ax:OP takes one 25 bits operand.&lt;/p&gt;

&lt;h3&gt;Performing the Computation&lt;/h3&gt;

&lt;p&gt;I&#39;m still not sure how much computation is required for each instructions. This is fun to try but takes some time.&lt;/p&gt;

&lt;h3&gt;Register files&lt;/h3&gt;
&lt;p&gt;I also checked mruby registers. They are an array of mrb_values, which is a union of C variables and a byte for type indicator, as you can see below.

&lt;script src=&quot;https://gist.github.com/2433602.js&quot;&gt; &lt;/script&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/8340113918843297333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/8340113918843297333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/8340113918843297333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/8340113918843297333'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2012/04/mruby-first-impression.html' title='mruby first impression'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-8002026132420389571</id><published>2012-03-02T20:04:00.000-08:00</published><updated>2012-03-02T20:09:30.495-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><category scheme="http://www.blogger.com/atom/ns#" term="vm"/><title type='text'>Virtual Machines and Bytecode Architecture</title><content type='html'>&lt;p&gt;I was curious about types of popular VMs / bytecodes. So here is a result of quick survey I did:&lt;/p&gt;

&lt;h3&gt;Register based&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Dalvik&lt;/li&gt;
&lt;li&gt;Parrot&lt;/li&gt;
&lt;li&gt;Lua&lt;/li&gt;
&lt;li&gt;LLVM&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://sqlite.org/changes.html#version_3_5_5&quot;&gt;Sqlite 3.5.5 and later&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Stack based&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Java VM&lt;/li&gt;
&lt;li&gt;CPython&lt;/li&gt;
&lt;li&gt;CIL&lt;/li&gt;
&lt;li&gt;Sqlite 3.4.4 and earlier
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Abstract Syntax Tree based&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Perl&lt;/li&gt;
&lt;li&gt;Ruby&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dartlang.org/articles/why-not-bytecode/&quot;&gt;Dart&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/8002026132420389571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/8002026132420389571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/8002026132420389571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/8002026132420389571'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2012/03/virtual-machines-and-bytecode.html' title='Virtual Machines and Bytecode Architecture'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-4921799461388597216</id><published>2008-11-10T03:51:00.000-08:00</published><updated>2008-11-10T04:11:15.919-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><title type='text'>Android loves small LCD, too</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiad7QpOtthn0obNUMqYdJVrVpOScgxFmUw3lqVU1x4shbVwxSIyEBIHbx42tbR7WmmiwORWTtMw8UT5p4CrI9UCKU-UfNZFS6Apd2on-ujo20mpWtDvrjQMHVKYWkjVqy8HXQbhg/s1600-h/fx-with-small-lcd.jpg&quot;&gt;&lt;img style=&quot;float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 243px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiad7QpOtthn0obNUMqYdJVrVpOScgxFmUw3lqVU1x4shbVwxSIyEBIHbx42tbR7WmmiwORWTtMw8UT5p4CrI9UCKU-UfNZFS6Apd2on-ujo20mpWtDvrjQMHVKYWkjVqy8HXQbhg/s320/fx-with-small-lcd.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5266995374044093426&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;One of my colleague just finished hooking up a small LCD to Armadillo-500 FX! Android seems to be happy at this lovely new home.  I just can stop thinking about what I can do with this tiny, cell phone sized, combo dev toy.&lt;br /&gt;&lt;br /&gt;This hack was to show that FX works just fine with other LCD, or any LCD per se, than the default 5.7 inch one.  Hope everyone gets the idea.&lt;br /&gt;&lt;br /&gt;This will be showed off at &lt;a href=&quot;http://www.jasa.or.jp/et/&quot;&gt;ET2008&lt;/a&gt;(link is to japanese page...).  Hope to see you guys there.</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/4921799461388597216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/4921799461388597216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/4921799461388597216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/4921799461388597216'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2008/11/android-loves-small-lcd-too.html' title='Android loves small LCD, too'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiad7QpOtthn0obNUMqYdJVrVpOScgxFmUw3lqVU1x4shbVwxSIyEBIHbx42tbR7WmmiwORWTtMw8UT5p4CrI9UCKU-UfNZFS6Apd2on-ujo20mpWtDvrjQMHVKYWkjVqy8HXQbhg/s72-c/fx-with-small-lcd.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-7234289244540794141</id><published>2008-05-08T21:13:00.000-07:00</published><updated>2008-05-08T21:31:01.067-07:00</updated><title type='text'>Armadillo Panel Computer</title><content type='html'>Hmm.. It seems like shaping up quite nicely.&lt;br /&gt;&lt;br /&gt;&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/eFxnCaEwL_U&amp;hl=ja&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/eFxnCaEwL_U&amp;hl=ja&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/7234289244540794141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/7234289244540794141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/7234289244540794141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/7234289244540794141'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2008/05/armadillo-panel-computer.html' title='Armadillo Panel Computer'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-7730221093181009331</id><published>2007-11-22T06:52:00.000-08:00</published><updated>2007-11-22T09:38:20.598-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><title type='text'>Android - Runs on a real hardware</title><content type='html'>Here is a clip to show you Android running on a real hardware, &lt;a href=&quot;http://www.atmark-techno.com/en/products/armadillo/a500&quot;&gt;Armadillo-500&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;object width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/stgA7gB7quY&amp;rel=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/stgA7gB7quY&amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;425&quot; height=&quot;355&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;All credit is due to &lt;a href=&quot;http://benno.id.au/&quot;&gt;Ben &quot;Benno&quot; Leslie&lt;/a&gt; for his incredible work.  All I&#39;ve done is put them together.&lt;br /&gt;&lt;br /&gt;By the way, the kernel is compiled as OABI with two additional feature enabled.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;EABI support&lt;br /&gt;&lt;li&gt;OpenBinder&lt;/ul&gt;&lt;br /&gt;The kernel itself doesn&#39;t have to be EABI to run EABI binaries.</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/7730221093181009331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/7730221093181009331' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/7730221093181009331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/7730221093181009331'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2007/11/android-runs-on-real-hardware.html' title='Android - Runs on a real hardware'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-2678210050480405032</id><published>2007-11-22T04:54:00.000-08:00</published><updated>2007-11-22T05:45:09.997-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><title type='text'>Android - OpenBind: protocol doesn&#39;t match!</title><content type='html'>It seems like some people are trying to get as much OpenBinder information on the &lt;a href=&quot;http://android-internals.org/index.php?title=OpenBinder&quot;&gt;Android Internals&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I&#39;ve downloaded &lt;a href=&quot;http://www.angryredplanet.com/~hackbod/openbinder/openbinder-12-28-2005.tar.gz&quot;&gt;OpenBinder source code archive&lt;/a&gt; from &lt;a href=&quot;http://www.angryredplanet.com/~hackbod/&quot;&gt;Dianne Hackborn&#39;s site&lt;/a&gt;, fixed a few places to meet the current API, compiled, put it on my board and still can&#39;t make Home App to run.&lt;br /&gt;&lt;br /&gt;So, I&#39;ve downloaded &lt;a href=&quot;http://benno.id.au/android/strace&quot;&gt;strace binary&lt;/a&gt; from Benno&#39;s page and run system_server under it.  Now, I&#39;ve got:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;open(&quot;/dev/binder&quot;, O_RDWR|O_LARGEFILE) = 7&lt;br /&gt;fcntl64(7, F_SETFD, FD_CLOEXEC)         = 0&lt;br /&gt;ioctl(7, 0xc0046209, 0xbecdac9c)        = 0&lt;br /&gt;writev(4, [{&quot;\6&quot;, 1}, {&quot;ProcessState\0&quot;, 13}, {&quot;Binder driver protocol does not &quot;..., 59}], 3) = 73&lt;br /&gt;close(7)&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;Binder driver protocol does not match user space protocol!&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Ouch.... I can go disassemble ioctl() to see how the application is checking binder version. However, if Android components are using new feature, there is no way I can re-implement that feature.  I guess I have to wait for code to be open. Sigh...</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/2678210050480405032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/2678210050480405032' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/2678210050480405032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/2678210050480405032'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2007/11/android-openbind-protocol-doesnt-match.html' title='Android - OpenBind: protocol doesn&#39;t match!'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-3389416293341007377</id><published>2007-11-20T03:35:00.000-08:00</published><updated>2007-11-20T04:29:51.895-08:00</updated><title type='text'>Android - Binder</title><content type='html'>I haven&#39;t been able to run android on my arm platform.  I have been too lazy to compile strace to see what&#39;s going on.  Fortunately, &lt;a href=&quot;http://benno.id.au/&quot;&gt;Benno&lt;/a&gt; have been working on it and it seems like he&#39;s successfully got a &lt;a href=&quot;http://benno.id.au/blog/2007/11/18/android-runtime-strace&quot;&gt;strace log&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;He&#39;s log reveal that the android depends on /dev/binder which is not a standard feature on my kernel.  Here is the snippet from his log.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;This bit here is pretty important. /dev/binder is the character device for OpenBinder, which is something that you see in the kernel source. This appears to be an IPC sub-system for the Linux kernel. It was at some stage donated by Palm, and there was an OpenBinder.org website for sometime, although that site is now dead. Finding more information on this will be essential.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;05:30:51.733954 open(&quot;/dev/binder&quot;, O_RDWR|O_LARGEFILE) = 7&lt;br /&gt;05:30:51.735488 fcntl64(7, F_SETFD, FD_CLOEXEC) = 0&lt;br /&gt;05:30:51.736483 ioctl(7, 0xc0046209, 0xbef86cbc) = 0&lt;br /&gt;05:30:51.737443 ioctl(7, 0x40046205, 0xbef86cb8) = 0&lt;br /&gt;05:30:51.738385 mmap2(NULL, 8388608, PROT_READ, MAP_PRIVATE|MAP_NORESERVE, 7, 0) = 0x40008000&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;As he said, &lt;a href=&quot;http://openbinder.org/&quot;&gt;OpenBinder.org&lt;/a&gt; is already down.  But, I&#39;ve found a link to &lt;a href=&quot;http://www.angryredplanet.com/~hackbod/openbinder/&quot;&gt;OpenBinder Documentation&lt;/a&gt; on #android.&lt;br /&gt;&lt;br /&gt;I haven&#39;t read the doc yet but it seems like this is required to run android on my system.</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/3389416293341007377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/3389416293341007377' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/3389416293341007377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/3389416293341007377'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2007/11/android-binder.html' title='Android - Binder'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-1861668948444969184</id><published>2007-11-19T20:47:00.000-08:00</published><updated>2007-11-21T00:57:21.810-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><title type='text'>bsdiff - binary diff</title><content type='html'>So I&#39;ve tested the bsdiff. In conclusion, it does patch up the binary file as advertised.  But, doesn&#39;t have any check for original file like GNU Patch has.  So, here is how it works:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;$ cat hello.c&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;        printf(&quot;hello world!\n&quot;);&lt;br /&gt;        return 0;&lt;br /&gt;}&lt;br /&gt;$ cat hello-bsdiff.c&lt;br /&gt;#include &lt;stdio.h&gt;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;        printf(&quot;hello bsfile!\n&quot;);&lt;br /&gt;        return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Prepare two source code as above. The difference is bellow.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;$ diff -u hello.c hello-bsdiff.c&lt;br /&gt;--- hello.c     2007-11-20 13:44:39.000000000 +0900&lt;br /&gt;+++ hello-bsdiff.c      2007-11-20 14:11:09.000000000 +0900&lt;br /&gt;@@ -2,6 +2,6 @@&lt;br /&gt; &lt;br /&gt; int main()&lt;br /&gt; {&lt;br /&gt;-       printf(&quot;hello world!\n&quot;);&lt;br /&gt;+       printf(&quot;hello bsdiff!\n&quot;);&lt;br /&gt;        return 0;&lt;br /&gt; }&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;As you can see the code differ only in text section. Now compile both code to create binaries &quot;hello.out&quot; and &quot;hello-bsdiff.out&quot;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;$ gcc -Wall hello.c -o hello&lt;br /&gt;$ gcc -Wall hello-bsdiff.c -o hello-bsdiff&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Generate binary diff with bsdiff.&lt;br /&gt;&lt;br /&gt;The synopsis for bsdiff is:&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;bsdiff &amp;lt;&lt;u&gt;oldfile&lt;/u&gt;&amp;gt; &amp;lt;&lt;u&gt;newfile&lt;/u&gt;&amp;gt; &amp;lt;&lt;u&gt;patchfile&lt;/u&gt;&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;$ bsdiff hello hello-bsdiff hello-hello-bsdiff.bsdiff&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Let&#39;s see how well bsdiff did, in size.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;$ ls -l *.out *.bsdiff&lt;br /&gt;-rwxr-xr-x 1 user user 8963 2007-11-20 14:12 hello-bsdiff.out&lt;br /&gt;-rw-r--r-- 1 user user  199 2007-11-20 14:12 hello-hello-bsdiff.bsdiff&lt;br /&gt;-rwxr-xr-x 1 user user 8956 2007-11-20 14:11 hello.out&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Patch up the hello.out to create hello-new.out, which should be identical to hello-bsdiff.out.  &lt;br /&gt;&lt;br /&gt;The synopsis for bspatch is similer to bsdiff:&lt;br /&gt;bspatch &amp;lt;&lt;u&gt;oldfile&lt;/u&gt;&amp;gt; &amp;lt;&lt;u&gt;newfile&lt;/u&gt;&amp;gt; &amp;lt;&lt;u&gt;patchfile&lt;/u&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;$ bspatch hello.out hello-new.out hello-hello-bsdiff.bsdiff&lt;br /&gt;$ md5sum hello-bsdiff.out hello-new.out&lt;br /&gt;3564457345c42a2e0cce1c0a2191bece  hello-bsdiff.out&lt;br /&gt;3564457345c42a2e0cce1c0a2191bece  hello-new.out&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;See that hello-bsdiff.out and hello-new.out has same hash value, 356445....&lt;br /&gt;&lt;br /&gt;Let&#39;s also apply the binary patch to the /dev/null to see how does the bspatch works.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;&lt;br /&gt;$ bspatch /dev/null hello-new-bad.out hello-hello-bsdiff.bsdiff&lt;br /&gt;$ md5sum hello-bsdiff.out hello-new-bad.out&lt;br /&gt;3564457345c42a2e0cce1c0a2191bece  hello-bsdiff.out&lt;br /&gt;5f52d2ca0b2c01a1d05865ef2af102f4  hello-new-bad.out&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;bspatch doesn&#39;t even complain at all and, of cause, the generated file, hello-new-bad.out, is completely different from hello-bsdiff.out.</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/1861668948444969184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/1861668948444969184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/1861668948444969184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/1861668948444969184'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2007/11/bsdiff-binary-diff.html' title='bsdiff - binary diff'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-8863729541749664124</id><published>2007-11-19T20:18:00.000-08:00</published><updated>2007-11-19T21:46:34.528-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><title type='text'>New eBook - Amazon Kindle</title><content type='html'>It seems like &lt;a href=&quot;http://www.google.com/search?q=amazon+kindle&quot;&gt;Amazon Kindle&lt;/a&gt; is out. As a linux kernel book author, Robert Love, &lt;a href=&quot;http://blog.rlove.org/2007/11/kindle-powered-by-linux.html&quot;&gt;reported&lt;/a&gt; that the device is based on Linux 2.6.10.&lt;br /&gt;&lt;br /&gt;Amazon has already &lt;a href=&quot;http://www.amazon.com/gp/help/customer/display.html?ie=UTF8&amp;nodeId=200203720&quot;&gt;released&lt;/a&gt; Linux kernel and other components source code, which includes, except usual uclibc, busybox, and other library and utils, &lt;a href=&quot;http://www.daemonology.net/bsdiff/&quot;&gt;bsdiff&lt;/a&gt;: binary diff and patch utility, and &lt;a href=&quot;http://developer.kde.org/~wheeler/taglib.html&quot;&gt;taglib&lt;/a&gt;: Audio Meta-Data Library.&lt;br /&gt;&lt;br /&gt;It would be interesting to test bsdiff and report how well the utility reduce the size of update images.</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/8863729541749664124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/8863729541749664124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/8863729541749664124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/8863729541749664124'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2007/11/new-ebook-amazon-kindle.html' title='New eBook - Amazon Kindle'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-3962398594723182944</id><published>2007-11-18T23:23:00.001-08:00</published><updated>2007-11-19T21:47:07.992-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><title type='text'>Android - Dex</title><content type='html'>So, it&#39;s been a week since Android SDK is out.  Unfortunately, I haven&#39;t been able to poke around as much as I want last a few days. but there are many people interested in &lt;a href=&quot;http://groups.google.com/group/android-internals&quot;&gt;the internal of Android&lt;/a&gt; instead of Java wrapper; which is good thing.&lt;br /&gt;&lt;br /&gt;My main focus is everything below the Dalvik.  because once the underneath layer is done, we can just run Dalvik on any platform.  That&#39;s gonna be fun.&lt;br /&gt;&lt;br /&gt;But some people are interested in DEX format.  so here is a list of links.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.jroller.com/random7/entry/android_s_dex_class_structure&quot;&gt;Android&#39;s Dex Class Structure&lt;/a&gt;&lt;br /&gt;&lt;li&gt;&lt;a href=&quot;http://www.retrodev.com/android/dexformat.html&quot;&gt;Dex File Format&lt;/a&gt;&lt;br /&gt;&lt;/ul&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/3962398594723182944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/3962398594723182944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/3962398594723182944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/3962398594723182944'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2007/11/android-dex.html' title='Android - Dex'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-498620023191331290</id><published>2007-11-13T00:52:00.000-08:00</published><updated>2007-11-19T21:47:16.549-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="android"/><category scheme="http://www.blogger.com/atom/ns#" term="computer"/><title type='text'>Android - Videos</title><content type='html'>It&#39;s been an interesting day for me. many people are checking, talking, asking, playing with Android. I&#39;ll post a few entry to summarize what I&#39;ve been reading so far.&lt;br /&gt;&lt;br /&gt;The first post is a list of video clips released by google. These helped me to grasp what Android is all about.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Androidology - Part 1 of 3 - Architecture Overview&lt;br /&gt;&lt;object height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/QBGfUs9mQYY&amp;amp;rel=1&quot;&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/QBGfUs9mQYY&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Androidology - Part 2 of 3 - Application Lifecycle&lt;br /&gt;&lt;object height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/fL6gSd4ugSI&amp;amp;rel=1&quot;&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/fL6gSd4ugSI&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Androidology - Part 3 of 3 - APIs&lt;br /&gt;&lt;object height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/MPukbH6D-lY&amp;amp;rel=1&quot;&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/MPukbH6D-lY&amp;amp;rel=1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; height=&quot;355&quot; width=&quot;425&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/498620023191331290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/498620023191331290' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/498620023191331290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/498620023191331290'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2007/11/android-videos.html' title='Android - Videos'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-113764788118639131</id><published>2006-01-18T21:18:00.000-08:00</published><updated>2006-01-18T21:18:01.190-08:00</updated><title type='text'>Convert video/audio for my new cell phone</title><content type='html'>I just got a new cell phone, which can play MPEG4 AAC audio and video.&lt;br /&gt;&lt;br /&gt;To convert arbitrary video, such as &lt;a href=&quot;http://video.google.com/&quot;&gt;Google Video&lt;/a&gt;, for my new N902i:&lt;br /&gt;&lt;br /&gt;ffmpeg -y -i downloaded.mp4 -bitexact -fixaspect -s 176x144 -r 14.985 -b 400 -acodec aac -ac 2 -ar 16000 -ab 32 -f 3gp MOL001.3GP&lt;br /&gt;&lt;br /&gt;to convert audio:&lt;br /&gt;&lt;br /&gt;ffmpeg -i my.ogg -acodec aac -ac 2 -ab 128 test.m4a</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/113764788118639131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/113764788118639131' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/113764788118639131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/113764788118639131'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2006/01/convert-videoaudio-for-my-new-cell.html' title='Convert video/audio for my new cell phone'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-113764615320110180</id><published>2006-01-18T20:49:00.001-08:00</published><updated>2006-01-18T20:49:13.206-08:00</updated><title type='text'></title><content type='html'>how about gnome-blog&lt;br /&gt;&lt;p&gt;does it work?&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/113764615320110180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/113764615320110180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/113764615320110180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/113764615320110180'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2006/01/how-about-gnome-blog-does-it-work.html' title=''/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-112875811854425334</id><published>2005-10-08T00:55:00.000-07:00</published><updated>2005-10-08T00:55:55.133-07:00</updated><title type='text'>No more RSS Reader</title><content type='html'>Google&#39;s new toy is &lt;a href=&quot;http://reader.google.com/&quot;&gt;Google Reader&lt;/a&gt;. It has vi-like key-binding too.  Is there a count-down timer for Google&#39;s Desktop Domination? :-P</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/112875811854425334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/112875811854425334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/112875811854425334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/112875811854425334'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2005/10/no-more-rss-reader.html' title='No more RSS Reader'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-112800458266042830</id><published>2005-09-29T07:36:00.000-07:00</published><updated>2005-09-29T18:34:10.906-07:00</updated><title type='text'>kernel hacker&#39;s guide to git</title><content type='html'>&lt;p&gt;&lt;a href=&quot;http://linux.yyz.us/git-howto.html&quot;&gt;It&lt;/a&gt;&#39;s still kinda old. here is some replacements.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;br /&gt;Update local kernel tree to latest 2.6.x upstream (&quot;fast-forward merge&quot;)&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;$ git pull&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Undo all local modifications:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;$ git reset --hard&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;List all branches&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;$ git branch&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Examine which branch is current&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;ditto, or&lt;/p&gt;&lt;p&gt;&lt;br /&gt;$ git show-branch --list&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/112800458266042830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/112800458266042830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/112800458266042830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/112800458266042830'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2005/09/kernel-hackers-guide-to-git.html' title='kernel hacker&#39;s guide to git'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-112779995316976863</id><published>2005-09-26T22:45:00.000-07:00</published><updated>2005-09-29T18:34:58.303-07:00</updated><title type='text'>/usr/bin/X11 is not in PATH</title><content type='html'>&lt;p&gt;Since apt-get upgrade this morning, /usr/bin/X11 isn&#39;t in my zsh&#39;s PATH env var.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;I don&#39;t remember which package was upgraded this morning... sigh.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/112779995316976863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/112779995316976863' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/112779995316976863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/112779995316976863'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2005/09/usrbinx11-is-not-in-path.html' title='/usr/bin/X11 is not in PATH'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17169344.post-112779978152409568</id><published>2005-09-26T22:43:00.000-07:00</published><updated>2005-09-29T18:35:30.600-07:00</updated><title type='text'>Testing Blogger</title><content type='html'>I&#39;m just trying to see how well blogger does.  This entry is posted with gnome-blog 0.8.</content><link rel='replies' type='application/atom+xml' href='http://thats-the-way-it-is.blogspot.com/feeds/112779978152409568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/17169344/112779978152409568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/112779978152409568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17169344/posts/default/112779978152409568'/><link rel='alternate' type='text/html' href='http://thats-the-way-it-is.blogspot.com/2005/09/testing-blogger.html' title='Testing Blogger'/><author><name>yashi</name><uri>http://www.blogger.com/profile/01750991940524874285</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>