SaltyCrane: mercurialhttps://www.saltycrane.com/blog/2009-08-05T15:57:23-07:00Example of hg convert on Ubuntu
2009-08-05T15:57:23-07:00https://www.saltycrane.com/blog/2009/08/example-hg-convert-ubuntu/<p>Converting a Subversion repository to a Mercurial repository is very easy.
Here's an example that uses
<a href="http://mercurial.selenic.com/wiki/ConvertExtension">hg convert</a>
to convert a SVN repository
(<a href="http://code.google.com/p/django-tagging/">django-tagging</a>)
to Mecurial on Ubuntu. I'm using Mercurial 1.3 on Ubuntu 9.04.</p>
<ul>
<li>Install Subversion Python bindings. (This should solve the "Subversion python bindings could not be loaded" error)
<pre>sudo apt-get install python-subversion</pre>
</li>
<li>Enable the "convert" extension. Add the following to your <code>~/.hgrc</code> file:
<pre>[extensions]
hgext.convert =</pre>
</li>
<li>Convert:
<pre>hg convert http://django-tagging.googlecode.com/svn/trunk/ django-tagging-hg</pre>
</li>
<li>Update:
<pre>cd django-tagging-hg
hg update</pre>
</li>
</ul>
How to install Mercurial 1.0 on Cygwin
2008-04-17T14:49:00-07:00https://www.saltycrane.com/blog/2008/04/how-to-install-mercurial-10-on-cygwin/
<p>Mercurial 1.0 has been released and I just posted,
<a href="http://www.saltycrane.com/blog/2008/04/how-to-install-mercurial-10-on-ubuntu/">
How to install Mercurial 1.0 on Ubuntu Gutsy (or Hardy)</a>. Here are
instructions for installing Mercurial 1.0 on Cygwin.</p>
<b>Install Mercurial 1.0</b>
<ol>
<li>Install Python Easy Install<br />
<pre>$ cd /tmp
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ python ez_setup.py</pre>
</li>
<li>Install Mercurial 1.0<br />
<pre>$ easy_install -U mercurial</pre>
</li>
<li>Trying <code>hg version</code>, gives me a
<code>ImportError: Permission denied</code> error.
<a href="http://www.velocityreviews.com/forums/t484678-python-eggs-on-cygwin.html">
Apparently</a>, there is a Eggs/Cygwin problem. To fix it, make the
dll files executable:<br />
<pre>$ chmod +x /usr/lib/python2.5/site-packages/mercurial-1.0-py2.5-cygwin-1.5.25-i686.egg/mercurial/*.dll</pre>
</li>
</ol>
Try <code>hg version</code> again:
<pre>Mercurial Distributed SCM (version 1.0)
Copyright (C) 2005-2008 Matt Mackall <mpm> and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</mpm></pre>
<br /><b>Install hgk extension</b><br />
I'm not sure how to get <code>hg view</code> working in Cygwin. If anyone knows,
please let me know.
How to install Mercurial 1.0 on Ubuntu Hardy
2008-04-17T12:52:00-07:00https://www.saltycrane.com/blog/2008/04/how-to-install-mercurial-10-on-ubuntu/<p>Mercurial 1.0 is out!
<a href="http://www.selenic.com/mercurial">Mercurial</a> is a next generation
"fast, lightweight
source control management system" boasting conversions by notable projects
NetBeans, OpenJDK, Globulation2, Xine, Mozilla, grml, and OpenSolaris.</p>
<p>From the <a href="http://www.selenic.com/pipermail/mercurial/2008-March/018014.html">
release notes</a>, version 1.0 has improvements for copying, renaming,
removing, and merging. I want to use the most robust version possible,
so I decided to upgrade. Ubuntu Gutsy's Mercurial version is
<a href="http://packages.ubuntu.com/gutsy/devel/mercurial">0.9.4</a>, and
even Hardy will only have <a href="http://packages.ubuntu.com/hardy/mercurial">
0.9.5</a>. Luckily, Mercurial 1.0 is
<a href="http://peak.telecommunity.com/DevCenter/EasyInstall">easy-installable</a>.
That makes it easy to install:</p>
<br /><b>Install Mercurial 1.0</b>
<ol>
<li>If you don't already have Mercurial 0.9.4 installed, I'd suggest
installing it because it will setup /etc/mercurial for using Mercurial
extenstions.<br />
<pre>sudo apt-get install mercurial</pre>
</li>
<li>Install Python Easy Install, build tools, and Python header files.<br />
<pre>sudo apt-get install python-setuptools python-dev build-essential</pre>
</li>
<li>Install Mercurial 1.0<br />
<pre>sudo easy_install -U mercurial</pre>
</li>
</ol>
That was easy! Test it out by typing <code>hg version</code>.
<pre>Mercurial Distributed SCM (version 1.0)
Copyright (C) 2005-2008 Matt Mackall <mpm> and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</mpm></pre>
<br /><b>Upgrade to 1.0.1</b><br />
Update 6/2/2008: Mercurial 1.0.1 has been released as a bugfix version.
You can upgrade from 1.0 to 1.0.1 using Easy Install:
<pre>sudo easy_install -U mercurial</pre>
<br /><b>Install hgk extension</b><br />
If you try the <code>hg view</code> command, you will get a
<code>sh: hgk: not found</code> error. To fix this, I copied the hgk executable
from the contrib directory in the source package to a directory in my path:
<ol>
<li>Download and unpack the Mercurial source package.<br />
<pre>cd /tmp
wget http://www.selenic.com/mercurial/release/mercurial-1.0.tar.gz
tar zxvf mercurial-1.0.tar.gz</pre>
</li>
<li>Copy hgk somewhere on your path. E.g.:<br />
<pre>cp mercurial-1.0/contrib/hgk ~/bin</pre>
</li>
</ol>
Note, if you get a <code>/usr/bin/env: wish: No such file or directory</code>
error, it means you need to install the Tk package:
<pre>sudo apt-get install tk8.5</pre>
<br /><b>Other Notes</b><br />
<ul>
<li>hbisect warning<br />
Per the <a href="http://www.selenic.com/mercurial/wiki/index.cgi/UpgradeNotes">
Upgrade Notes</a>, bisect is now a built-in command and the hbisect extension
should not be used. If you get a
<code>extension 'hgext/hbisect' overrides commands: bisect</code>
warning, remove the <code>hbisect=</code> line from your configuration file
(located at /etc/mercurial/hgrc.d/hgext.rc or ~/.hgrc).
<br /><br />
</li>
<li>Where are the files located?<br />
The hgext and mercurial files should be located at
<code>/usr/lib/python2.5/site-packages/mercurial-1.0-py2.5-linux-*.egg</code>
<br /><br />
</li>
<li>stdio.h error during easy_install<br />
If you got the following error while trying to run easy_install,
it probably means you don't have the "build-essential"
package installed. <code>$ sudo apt-get install build-essential</code>.
<pre style="height: 50px; overflow:scroll">In file included from /usr/lib/gcc/i486-linux-gnu/4.2.3/include/syslimits.h:7,
from /usr/lib/gcc/i486-linux-gnu/4.2.3/include/limits.h:11,
from /usr/include/python2.5/Python.h:18,
from mercurial/mpatch.c:23:
/usr/lib/gcc/i486-linux-gnu/4.2.3/include/limits.h:122:61: error: limits.h: No such file or directory
In file included from mercurial/mpatch.c:23:
/usr/include/python2.5/Python.h:32:19: error: stdio.h: No such file or directory
/usr/include/python2.5/Python.h:34:5: error: #error "Python.h requires that stdio.h define NULL."
/usr/include/python2.5/Python.h:37:20: error: string.h: No such file or directory
/usr/include/python2.5/Python.h:39:19: error: errno.h: No such file or directory
/usr/include/python2.5/Python.h:41:20: error: stdlib.h: No such file or directory
/usr/include/python2.5/Python.h:43:20: error: unistd.h: No such file or directory
/usr/include/python2.5/Python.h:55:20: error: assert.h: No such file or directory
In file included from /usr/include/python2.5/Python.h:57,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pyport.h:7:20: error: stdint.h: No such file or directory
In file included from /usr/include/python2.5/Python.h:57,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pyport.h:89: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Py_uintptr_t’
/usr/include/python2.5/pyport.h:90: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Py_intptr_t’
/usr/include/python2.5/pyport.h:113: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Py_ssize_t’
/usr/include/python2.5/pyport.h:231:76: error: math.h: No such file or directory
/usr/include/python2.5/pyport.h:238:22: error: sys/time.h: No such file or directory
/usr/include/python2.5/pyport.h:239:18: error: time.h: No such file or directory
/usr/include/python2.5/pyport.h:257:24: error: sys/select.h: No such file or directory
/usr/include/python2.5/pyport.h:296:22: error: sys/stat.h: No such file or directory
In file included from /usr/include/python2.5/Python.h:76,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pymem.h:50: warning: parameter names (without types) in function declaration
/usr/include/python2.5/pymem.h:51: error: expected declaration specifiers or ‘...’ before ‘size_t’
In file included from /usr/include/python2.5/Python.h:78,
from mercurial/mpatch.c:23:
/usr/include/python2.5/object.h:104: error: expected specifier-qualifier-list before ‘Py_ssize_t’
/usr/include/python2.5/object.h:108: error: expected specifier-qualifier-list before ‘Py_ssize_t’
/usr/include/python2.5/object.h:131: error: expected declaration specifiers or ‘...’ before ‘*’ token
/usr/include/python2.5/object.h:131: warning: type defaults to ‘int’ in declaration of ‘Py_ssize_t’
/usr/include/python2.5/object.h:131: error: ‘Py_ssize_t’ declared as function returning a function
/usr/include/python2.5/object.h:131: warning: function declaration isn’t a prototype
/usr/include/python2.5/object.h:149: error: ‘readbufferproc’ declared as function returning a function
/usr/include/python2.5/object.h:150: error: ‘writebufferproc’ declared as function returning a function
/usr/include/python2.5/object.h:151: error: ‘segcountproc’ declared as function returning a function
/usr/include/python2.5/object.h:152: error: ‘charbufferproc’ declared as function returning a function
/usr/include/python2.5/object.h:215: error: expected specifier-qualifier-list before ‘lenfunc’
/usr/include/python2.5/object.h:229: error: expected specifier-qualifier-list before ‘lenfunc’
/usr/include/python2.5/object.h:244: error: expected declaration specifiers or ‘...’ before ‘FILE’
/usr/include/python2.5/object.h:258: warning: ‘struct _typeobject’ declared inside parameter list
/usr/include/python2.5/object.h:258: warning: its scope is only this definition or declaration, which is probably not what you want
/usr/include/python2.5/object.h:259: warning: ‘struct _typeobject’ declared inside parameter list
/usr/include/python2.5/object.h:262: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/object.h:262: error: field ‘ob_size’ declared as a function
/usr/include/python2.5/object.h:264: error: field ‘tp_basicsize’ declared as a function
/usr/include/python2.5/object.h:264: error: field ‘tp_itemsize’ declared as a function
/usr/include/python2.5/object.h:309: error: field ‘tp_weaklistoffset’ declared as a function
/usr/include/python2.5/object.h:324: error: field ‘tp_dictoffset’ declared as a function
/usr/include/python2.5/object.h:389: error: expected declaration specifiers or ‘...’ before ‘FILE’
In file included from /usr/include/python2.5/Python.h:79,
from mercurial/mpatch.c:23:
/usr/include/python2.5/objimpl.h:97: warning: parameter names (without types) in function declaration
/usr/include/python2.5/objimpl.h:98: error: expected declaration specifiers or ‘...’ before ‘size_t’
/usr/include/python2.5/objimpl.h:228: error: ‘PyGC_Collect’ declared as function returning a function
/usr/include/python2.5/objimpl.h:249: error: field ‘gc_refs’ declared as a function
/usr/include/python2.5/objimpl.h:288: warning: parameter names (without types) in function declaration
In file included from /usr/include/python2.5/Python.h:83,
from mercurial/mpatch.c:23:
/usr/include/python2.5/unicodeobject.h:55:19: error: ctype.h: No such file or directory
/usr/include/python2.5/unicodeobject.h:118:21: error: wchar.h: No such file or directory
In file included from /usr/include/python2.5/Python.h:83,
from mercurial/mpatch.c:23:
/usr/include/python2.5/unicodeobject.h:384: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/unicodeobject.h:385: error: field ‘length’ declared as a function
/usr/include/python2.5/unicodeobject.h:447: error: ‘PyUnicodeUCS4_GetSize’ declared as function returning a function
/usr/include/python2.5/unicodeobject.h:521: warning: type defaults to ‘int’ in declaration of ‘wchar_t’
/usr/include/python2.5/unicodeobject.h:521: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/python2.5/unicodeobject.h:539: warning: type defaults to ‘int’ in declaration of ‘wchar_t’
/usr/include/python2.5/unicodeobject.h:539: error: expected ‘;’, ‘,’ or ‘)’ before ‘*’ token
/usr/include/python2.5/unicodeobject.h:1102: error: ‘PyUnicodeUCS4_Tailmatch’ declared as function returning a function
/usr/include/python2.5/unicodeobject.h:1114: error: ‘PyUnicodeUCS4_Find’ declared as function returning a function
/usr/include/python2.5/unicodeobject.h:1123: error: ‘PyUnicodeUCS4_Count’ declared as function returning a function
In file included from /usr/include/python2.5/Python.h:84,
from mercurial/mpatch.c:23:
/usr/include/python2.5/intobject.h:24: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/intobject.h:38: warning: parameter names (without types) in function declaration
/usr/include/python2.5/intobject.h:41: error: ‘PyInt_AsSsize_t’ declared as function returning a function
In file included from /usr/include/python2.5/Python.h:86,
from mercurial/mpatch.c:23:
/usr/include/python2.5/longobject.h:25: error: ‘_PyLong_AsSsize_t’ declared as function returning a function
/usr/include/python2.5/longobject.h:26: warning: parameter names (without types) in function declaration
/usr/include/python2.5/longobject.h:69: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘_PyLong_NumBits’
/usr/include/python2.5/longobject.h:85: error: expected declaration specifiers or ‘...’ before ‘size_t’
/usr/include/python2.5/longobject.h:108: error: expected declaration specifiers or ‘...’ before ‘size_t’
In file included from /usr/include/python2.5/Python.h:87,
from mercurial/mpatch.c:23:
/usr/include/python2.5/floatobject.h:15: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:89,
from mercurial/mpatch.c:23:
/usr/include/python2.5/complexobject.h:39: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:92,
from mercurial/mpatch.c:23:
/usr/include/python2.5/stringobject.h:36: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/stringobject.h:36: error: field ‘ob_size’ declared as a function
/usr/include/python2.5/stringobject.h:67: error: ‘PyString_Size’ declared as function returning a function
In file included from /usr/include/python2.5/Python.h:94,
from mercurial/mpatch.c:23:
/usr/include/python2.5/tupleobject.h:25: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/tupleobject.h:25: error: field ‘ob_size’ declared as a function
/usr/include/python2.5/tupleobject.h:40: error: ‘PyTuple_Size’ declared as function returning a function
In file included from /usr/include/python2.5/Python.h:95,
from mercurial/mpatch.c:23:
/usr/include/python2.5/listobject.h:23: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/listobject.h:23: error: field ‘ob_size’ declared as a function
/usr/include/python2.5/listobject.h:38: error: field ‘allocated’ declared as a function
/usr/include/python2.5/listobject.h:47: error: ‘PyList_Size’ declared as function returning a function
In file included from /usr/include/python2.5/Python.h:96,
from mercurial/mpatch.c:23:
/usr/include/python2.5/dictobject.h:55: error: field ‘me_hash’ declared as a function
/usr/include/python2.5/dictobject.h:71: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/dictobject.h:72: error: field ‘ma_fill’ declared as a function
/usr/include/python2.5/dictobject.h:73: error: field ‘ma_used’ declared as a function
/usr/include/python2.5/dictobject.h:79: error: field ‘ma_mask’ declared as a function
/usr/include/python2.5/dictobject.h:108: error: ‘PyDict_Size’ declared as function returning a function
In file included from /usr/include/python2.5/Python.h:98,
from mercurial/mpatch.c:23:
/usr/include/python2.5/setobject.h:36: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/setobject.h:38: error: field ‘fill’ declared as a function
/usr/include/python2.5/setobject.h:39: error: field ‘used’ declared as a function
/usr/include/python2.5/setobject.h:45: error: field ‘mask’ declared as a function
/usr/include/python2.5/setobject.h:79: error: ‘PySet_Size’ declared as function returning a function
In file included from /usr/include/python2.5/Python.h:99,
from mercurial/mpatch.c:23:
/usr/include/python2.5/methodobject.h:82: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:101,
from mercurial/mpatch.c:23:
/usr/include/python2.5/funcobject.h:22: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:102,
from mercurial/mpatch.c:23:
/usr/include/python2.5/classobject.h:13: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/classobject.h:24: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/classobject.h:31: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:103,
from mercurial/mpatch.c:23:
/usr/include/python2.5/fileobject.h:11: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/fileobject.h:12: error: expected specifier-qualifier-list before ‘FILE’
/usr/include/python2.5/fileobject.h:38: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/fileobject.h:40: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
/usr/include/python2.5/fileobject.h:57: error: expected declaration specifiers or ‘...’ before ‘FILE’
/usr/include/python2.5/fileobject.h:58: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘Py_UniversalNewlineFread’
In file included from /usr/include/python2.5/Python.h:105,
from mercurial/mpatch.c:23:
/usr/include/python2.5/traceback.h:13: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:106,
from mercurial/mpatch.c:23:
/usr/include/python2.5/sliceobject.h:23: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:107,
from mercurial/mpatch.c:23:
/usr/include/python2.5/cellobject.h:10: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:109,
from mercurial/mpatch.c:23:
/usr/include/python2.5/genobject.h:13: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:110,
from mercurial/mpatch.c:23:
/usr/include/python2.5/descrobject.h:46: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/descrobject.h:50: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/descrobject.h:55: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/descrobject.h:60: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/descrobject.h:65: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:111,
from mercurial/mpatch.c:23:
/usr/include/python2.5/weakrefobject.h:16: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/weakrefobject.h:65: error: ‘_PyWeakref_GetWeakrefCount’ declared as function returning a function
In file included from /usr/include/python2.5/Python.h:114,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pyerrors.h:10: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/pyerrors.h:17: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/pyerrors.h:31: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/pyerrors.h:44: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/pyerrors.h:52: error: field ‘ob_refcnt’ declared as a function
/usr/include/python2.5/pyerrors.h:329: error: expected declaration specifiers or ‘...’ before ‘size_t’
/usr/include/python2.5/pyerrors.h:330: error: format string argument not a string type
/usr/include/python2.5/pyerrors.h:331: error: expected declaration specifiers or ‘...’ before ‘size_t’
In file included from /usr/include/python2.5/Python.h:118,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pyarena.h:50: error: expected declaration specifiers or ‘...’ before ‘size_t’
In file included from /usr/include/python2.5/Python.h:120,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pythonrun.h:34: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:35: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:37: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:38: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:39: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:44: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:54: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:60: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:77: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:142: error: expected ‘)’ before ‘*’ token
/usr/include/python2.5/pythonrun.h:144: error: expected ‘)’ before ‘*’ token
In file included from /usr/include/python2.5/Python.h:122,
from mercurial/mpatch.c:23:
/usr/include/python2.5/sysmodule.h:12: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘*’ token
In file included from /usr/include/python2.5/Python.h:124,
from mercurial/mpatch.c:23:
/usr/include/python2.5/import.h:33: error: expected declaration specifiers or ‘...’ before ‘size_t’
/usr/include/python2.5/import.h:33: error: expected declaration specifiers or ‘...’ before ‘FILE’
In file included from /usr/include/python2.5/Python.h:126,
from mercurial/mpatch.c:23:
/usr/include/python2.5/abstract.h:421: error: ‘PyObject_Size’ declared as function returning a function
/usr/include/python2.5/abstract.h:433: error: ‘PyObject_Length’ declared as function returning a function
/usr/include/python2.5/abstract.h:436: error: ‘_PyObject_LengthHint’ declared as function returning a function
/usr/include/python2.5/abstract.h:774: error: ‘PyNumber_AsSsize_t’ declared as function returning a function
/usr/include/python2.5/abstract.h:947: error: ‘PySequence_Size’ declared as function returning a function
/usr/include/python2.5/abstract.h:956: error: ‘PySequence_Length’ declared as function returning a function
/usr/include/python2.5/abstract.h:1078: error: ‘PySequence_Count’ declared as function returning a function
/usr/include/python2.5/abstract.h:1097: error: ‘_PySequence_IterSearch’ declared as function returning a function
/usr/include/python2.5/abstract.h:1122: error: ‘PySequence_Index’ declared as function returning a function
/usr/include/python2.5/abstract.h:1161: error: ‘PyMapping_Size’ declared as function returning a function
/usr/include/python2.5/abstract.h:1171: error: ‘PyMapping_Length’ declared as function returning a function
In file included from /usr/include/python2.5/compile.h:5,
from /usr/include/python2.5/Python.h:128,
from mercurial/mpatch.c:23:
/usr/include/python2.5/code.h:11: error: field ‘ob_refcnt’ declared as a function
In file included from /usr/include/python2.5/Python.h:131,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pystrtod.h:11: error: expected declaration specifiers or ‘...’ before ‘size_t’
In file included from /usr/include/python2.5/Python.h:151,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pyfpe.h:129:20: error: signal.h: No such file or directory
/usr/include/python2.5/pyfpe.h:130:20: error: setjmp.h: No such file or directory
In file included from /usr/include/python2.5/Python.h:151,
from mercurial/mpatch.c:23:
/usr/include/python2.5/pyfpe.h:132: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘PyFPE_jbuf’
mercurial/mpatch.c:54:24: error: sys/types.h: No such file or directory
mercurial/mpatch.c:58:25: error: arpa/inet.h: No such file or directory
mercurial/mpatch.c:60:23: error: inttypes.h: No such file or directory
mercurial/mpatch.c: In function ‘lalloc’:
mercurial/mpatch.c:77: error: ‘NULL’ undeclared (first use in this function)
mercurial/mpatch.c:77: error: (Each undeclared identifier is reported only once
mercurial/mpatch.c:77: error: for each function it appears in.)
mercurial/mpatch.c:82: warning: implicit declaration of function ‘malloc’
mercurial/mpatch.c:82: warning: incompatible implicit declaration of built-in function ‘malloc’
mercurial/mpatch.c:89: warning: implicit declaration of function ‘free’
mercurial/mpatch.c: In function ‘combine’:
mercurial/mpatch.c:197: error: ‘NULL’ undeclared (first use in this function)
mercurial/mpatch.c:224: warning: implicit declaration of function ‘memcpy’
mercurial/mpatch.c:224: warning: incompatible implicit declaration of built-in function ‘memcpy’
mercurial/mpatch.c: In function ‘decode’:
mercurial/mpatch.c:244: error: ‘NULL’ undeclared (first use in this function)
mercurial/mpatch.c:249: warning: incompatible implicit declaration of built-in function ‘memcpy’
mercurial/mpatch.c:250: warning: implicit declaration of function ‘ntohl’
mercurial/mpatch.c:250: error: ‘uint32_t’ undeclared (first use in this function)
mercurial/mpatch.c:250: error: expected expression before ‘)’ token
mercurial/mpatch.c:251: error: expected expression before ‘)’ token
mercurial/mpatch.c:252: error: expected expression before ‘)’ token
mercurial/mpatch.c: In function ‘apply’:
mercurial/mpatch.c:310: warning: incompatible implicit declaration of built-in function ‘memcpy’
mercurial/mpatch.c:317: warning: incompatible implicit declaration of built-in function ‘memcpy’
mercurial/mpatch.c: In function ‘fold’:
mercurial/mpatch.c:330: warning: passing argument 2 of ‘PyList_GetItem’ makes pointer from integer without a cast
mercurial/mpatch.c:332: error: ‘NULL’ undeclared (first use in this function)
mercurial/mpatch.c:335: warning: passing argument 2 of ‘decode’ makes integer from pointer without a cast
mercurial/mpatch.c: In function ‘patches’:
mercurial/mpatch.c:355: error: ‘NULL’ undeclared (first use in this function)
mercurial/mpatch.c:360: error: ‘PyObject’ has no member named ‘ob_refcnt’
mercurial/mpatch.c:371: warning: passing argument 1 of ‘calcsize’ makes integer from pointer without a cast
mercurial/mpatch.c:376: warning: passing argument 2 of ‘PyString_FromStringAndSize’ makes pointer from integer without a cast
mercurial/mpatch.c:382: warning: passing argument 3 of ‘apply’ makes integer from pointer without a cast
mercurial/mpatch.c:383: error: ‘PyObject’ has no member named ‘ob_refcnt’
mercurial/mpatch.c:383: error: ‘PyObject’ has no member named ‘ob_type’
mercurial/mpatch.c: In function ‘patchedsize’:
mercurial/mpatch.c:401: error: ‘NULL’ undeclared (first use in this function)
mercurial/mpatch.c:407: warning: incompatible implicit declaration of built-in function ‘memcpy’
mercurial/mpatch.c:408: error: ‘uint32_t’ undeclared (first use in this function)
mercurial/mpatch.c:408: error: expected expression before ‘)’ token
mercurial/mpatch.c:409: error: expected expression before ‘)’ token
mercurial/mpatch.c:410: error: expected expression before ‘)’ token
mercurial/mpatch.c: At top level:
mercurial/mpatch.c:435: error: ‘NULL’ undeclared here (not in a function)
mercurial/mpatch.c: In function ‘initmpatch’:
mercurial/mpatch.c:442: warning: passing argument 2 of ‘PyErr_NewException’ from incompatible pointer type
mercurial/mpatch.c:442: warning: passing argument 3 of ‘PyErr_NewException’ from incompatible pointer type
error: Setup script exited with error: command 'gcc' failed with exit status 1
</pre>
</li>
<li>Python.h error during easy_install<br />
If you got the following error while trying to run easy_install,
it probably means you don't have the "python-dev"
package installed. <code>$ sudo apt-get install python-dev</code>.
<pre style="height: 50px; overflow:scroll">Searching for mercurial
Reading http://cheeseshop.python.org/pypi/mercurial/
Couldn't find index page for 'mercurial' (maybe misspelled?)
Scanning index of all packages (this may take a while)
Reading http://cheeseshop.python.org/pypi/
Reading http://cheeseshop.python.org/pypi/Mercurial/1.0
Reading http://www.selenic.com/mercurial
Best match: mercurial 1.0
Downloading http://www.selenic.com/mercurial/release/mercurial-1.0.tar.gz
Processing mercurial-1.0.tar.gz
Running mercurial-1.0/setup.py -q bdist_egg --dist-dir /tmp/easy_install-MfmZhU/mercurial-1.0/egg-dist-tmp-JDYH6V
mercurial/mpatch.c:23:20: error: Python.h: No such file or directory
mercurial/mpatch.c:64: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
mercurial/mpatch.c: In function 'lalloc':
mercurial/mpatch.c:92: warning: implicit declaration of function 'PyErr_Occurred'
mercurial/mpatch.c:93: warning: implicit declaration of function 'PyErr_NoMemory'
mercurial/mpatch.c: In function 'decode':
mercurial/mpatch.c:265: warning: implicit declaration of function 'PyErr_SetString'
mercurial/mpatch.c:265: error: 'mpatch_Error' undeclared (first use in this function)
mercurial/mpatch.c:265: error: (Each undeclared identifier is reported only once
mercurial/mpatch.c:265: error: for each function it appears in.)
mercurial/mpatch.c: In function 'calcsize':
mercurial/mpatch.c:283: error: 'mpatch_Error' undeclared (first use in this function)
mercurial/mpatch.c: In function 'apply':
mercurial/mpatch.c:306: error: 'mpatch_Error' undeclared (first use in this function)
mercurial/mpatch.c: At top level:
mercurial/mpatch.c:322: error: expected ')' before '*' token
mercurial/mpatch.c:344: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
mercurial/mpatch.c:392: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
mercurial/mpatch.c:432: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'methods'
mercurial/mpatch.c:439: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'initmpatch'
error: Setup script exited with error: command 'gcc' failed with exit status 1</pre>
</li>
<li><em>Couldn't find a setup script</em> Error:<br />
If you get the following error when trying to run <code>sudo easy_install -U mercurial</code>,
it could mean that there is a "mercurial" directory in your current working directory. Change
to a different directory and run the command again.
<pre>Processing mercurial
error: Couldn't find a setup script in mercurial</pre>
</li>
<li><em>error: can't create or remove files in install directory</em><br>
<pre style="height:50px; overflow: auto">error: can't create or remove files in install directory
The following error occurred while trying to add or remove files in the
installation directory:
[Errno 13] Permission denied: '/usr/lib/python2.5/site-packages/test-easy-install-28328.write-test'
The installation directory you specified (via --install-dir, --prefix, or
the distutils default setting) was:
/usr/lib/python2.5/site-packages/
Perhaps your account does not have write access to this directory? If the
installation directory is a system-owned directory, you may need to sign in
as the administrator or "root" account. If you do not have administrative
access to this machine, you may wish to choose a different installation
directory, preferably one that is listed in your PYTHONPATH environment
variable.
For information on other options, you may wish to consult the
documentation at:
http://peak.telecommunity.com/EasyInstall.html
Please make the appropriate changes for your system and try again.</pre>
You will get this error if you don't use the <code>sudo</code> command. Use
<pre>$ sudo easy_install -U mercurial</pre>
</ul>
My software tools list
2007-08-10T13:32:00-07:00https://www.saltycrane.com/blog/2007/08/current-configuration/<style type="text/css">
td {
vertical-align: top;
}
</style>
<p>Inspired by Mark Pilgrim's
<a href="http://web.archive.org/web/20101214224709/http://diveintomark.org/archives/2006/06/26/essentials-2006">
2006 Essentials list</a>,
below is a list of my current software tools. If you notice a lot of
"I switched from ..." statements, keep in mind that I am a
<a href="http://undefined.com/ia/2006/10/10/the-fourteen-types-of-programmers-type-2-those-that-like-shiny-things/">
programmer who likes shiny things</a>.
</p>
<h4 id="other-lists">Other lists</h4>
<ul>
<li><a href="http://web.archive.org/web/20101214234142/http://diveintomark.org/archives/2008/10/28/essentials-2008">
Mark Pilgrim's Essentials, 2008 edition</a>
</li>
<li><a href="http://web.archive.org/web/20081226033542/http://adam.gomaa.us/blog/essentials-cop-out/">
Adam Gomaa's Essentials (2008)</a>
</li>
<li>Here is a <a href="http://mark.pilgrim.usesthis.com/">2010 update
for Mark Pilgrim</a>. After 2 and a half years, I still have several items
in common: <a href="#operating-system">Ubuntu</a> running <a href="#terminal">rxvt-unicode</a>
and <a href="#editor">Emacs 23</a>, the <a href="#keyboard">Unicomp keyboard</a>,
an <a href="#mobile-phone">Android phone</a>, <a href="#email">Gmail</a>,
Google Reader, Google Docs, and Pandora.
</li>
<li><a href="http://salvatore.sanfilippo.usesthis.com/">Salvatore Sanfilippo on usesthis.com (2011)</a></li>
<li><a href="http://aaron.boodman.usesthis.com/">Aaron Boodman on usesthis.com (2011)</a></li>
</ul>
<h4 id="contents">Contents</h4>
<table>
<tr>
<td>
<ul>
<li><a href="#operating-system">Operating System</a>: Ubuntu</li>
<li><a href="#window-manager">Window Manager</a>: Qtile</li>
<li><a href="#editor">Editor</a>: Emacs</li>
<li><a href="#terminal">Terminal</a>: urxvt + screen</li>
<li><a href="#vcs">Version Control System</a>: Git</li>
<li><a href="#high-high-level-language">"High-high-level" Language</a>: Python</li>
<li><a href="#web-framework">Web Framework</a>: Django/Flask</li>
</ul>
</td>
<td>
<ul>
<li><a href="#web-browser">Web Browser</a>: Firefox</li>
<li><a href="#email">Email</a>: Gmail</li>
<li><a href="#graphical-diff">Graphical Diff</a>: KDiff3</li>
<li><a href="#keyboard">Keyboard</a>: Leopold Tenkeyless (MX Browns)</li>
<li><a href="#office-chair">Office Chair</a>: Undecided</li>
<li><a href="#mobile-phone">Mobile Phone</a>: Motorola Droid 4</li>
</ul>
</td>
</tr>
</table>
<h4 id="my-list">My software tools list</h4>
<table style="font-size:100%">
<tr>
<td ><b>Category</b></td>
<td ><b>Currently using</b></td>
<td ><b>Comments</b></td>
</tr>
<tr>
<td id="operating-system" ><p>Operating System</p>
<a href="#operating-system" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p><a href="http://www.ubuntu.com">Ubuntu</a> 14.04 Trusty Tahr</p>
</td>
<td >
<p>My first
Ubuntu install was in 2007 (dual-boot) and I got my first Windows-free machine
in 2008. I have used Cygwin
and coLinux when on Windows. Cygwin integrates better with Windows applications,
but coLinux is super fast and allows you to run a full Linux distro on top of
Windows. Windows does have some advantages, but overall I prefer Linux.</p>
<p><em>Update 2008-09</em>: Switching jobs means I can now use Linux at work.
I'm now using Linux about 90% of the time. My wife still uses Windows Vista on our laptop.</p>
<p>I don't have enough experience
with OSX to draw any authoritative conclusions, though I think
<a href="http://en.wikipedia.org/wiki/Mark_Pilgrim">Mark Pilgrim</a>
has <a href="http://diveintomark.org/archives/2006/06/02/when-the-bough-breaks">
biased me against Apple</a>. Also, I think Linux's
<a href="http://c2.com/cgi/wiki?FreeAsInBeer">free as in beer</a> (and somewhat
related free as in speech) characteristics
vs. Mac's expensive (and somewhat related proprietary) characteristics
resonate with the cheap engineer in me.</p>
<p>Additional Linux vs. Mac commentary:</p>
<ul>
<li>
<a href="http://en.wikipedia.org/wiki/Jamie_Zawinski">JWZ</a> 2000:
<a href="http://www.jwz.org/doc/linux.html">Unix/linux sucks less, but it still sucks.</a>
</li>
<li>
JWZ <a href="http://jwz.livejournal.com/494040.html">2005</a>,
<a href="http://jwz.livejournal.com/780264.html">2007</a>: Linux sucks more.
</li>
<li>
<a href="http://en.wikipedia.org/wiki/Paul_Graham">Paul Graham</a> 2005:
<a href="http://www.paulgraham.com/mac.html">Return of the Mac.</a>
</li>
<li>
Mark Pilgrim 2006: <a href="http://diveintomark.org/archives/2006/05/30/bye-apple">
Bye, Apple</a>
</li>
<li>
<a href="http://en.wikipedia.org/wiki/Cory_Doctorow">Cory Doctorow</a> 2006:
<a href="http://www.boingboing.net/2006/06/29/mark-pilgrims-list-o.html">
Me too</a>.
</li>
<li>
<a href="http://en.wikipedia.org/wiki/Tim_Bray">Tim Bray</a> 2006:
<a href="http://www.tbray.org/ongoing/When/200x/2006/06/15/Switch-From-Mac">Me too</a>,
<a href="http://www.tbray.org/ongoing/When/200x/2006/08/16/Back-to-the-Mac">Back to the Mac</a>
</li>
<li>
Steve Yegge 2008:
<a href="http://steve-yegge.blogspot.com/2008/04/settling-osx-focus-follows-mouse-debate.html">
Switching to OSX for the fonts</a>
</li>
<li>
Of course, <a href="http://en.wikipedia.org/wiki/Linus_Torvalds">Linus Torvalds</a>
<a href="http://www.smh.com.au/news/technology/q-and-a-with-linus-torvalds/2008/02/05/1202090403120.html?page=2">
"prefers" Linux</a> (2008)
</li>
<li><a href="http://en.wikipedia.org/wiki/Donald_Knuth">Donald Knuth</a>,
author of <em>The Art of Computer Programming</em>,
<a href="http://www.informit.com/articles/printerfriendly.aspx?p=1193856">
uses Ubuntu Linux for work, and Macs for play</a> (2008).
</li>
<li>Salvatore Sanfilippo (author of <a href="http://code.google.com/p/redis/">Redis</a>)
chooses to use
a Mac so he can <em>"focus on what <he's> doing without spending hours trying to
fix unrelated desktop stuff"</em> but says Linux is
<a href="http://antirez.com/post/linux-better-for-coding.html">
<em>"still better for coding"</em></a> (2009).
</li>
<li>Ted Dziuba: <a href="http://harmful.cat-v.org/software/operating-systems/osx/osx-unsuitable-web-development">
<em>MacOS X is an Unsuitable Platform for Web Development</em>
</a> (2011)</li>
<li>Bozhidar Batsov: <a href="http://batsov.com/Linux/Windows/Rant/2011/06/11/linux-desktop-experience-killing-linux-on-the-desktop.html">
<em>The Linux desktop experience is killing Linux on the desktop</em>
</a> (2011)</li>
</ul>
<p>History: 1987: <a href="http://en.wikipedia.org/wiki/Apple_IIGS">Apple GS/OS</a>,
1994: <a href="http://en.wikipedia.org/wiki/Windows_3.1x">Windows 3.1</a>,
2000: <a href="http://en.wikipedia.org/wiki/Windows_98">Windows 98</a>,
2001: <a href="http://en.wikipedia.org/wiki/Windows_XP">Windows XP</a>,
2007: <a href="http://en.wikipedia.org/wiki/Windows_Vista">Windows Vista</a>,
2007: <a href="http://en.wikipedia.org/wiki/Ubuntu_%28operating_system%29">Ubuntu</a>
</p>
</td>
</tr>
<tr>
<td id="window-manager"><p>Window Manager</p>
<a href="#window-manager" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p><a href="http://www.qtile.org/">Qtile</a></p></td>
<td >
<p>The WM written in Python,
<a href="http://panela.blog-city.com/fun_of_tiling_window_managers.htm">
recommended by Matt Harrison</a>.
</p>
<p>Previously, wmii: dynamic, tiling, scriptable window manager that doesn't
require a mouse. It sucks less.</p>
<p>I switched from <a href="http://www.nongnu.org/ratpoison/">ratpoison</a>
at the same time I started using coLinux because running native Linux
allowed me to use any Linux window manager as well.</p>
<p>Recently, some have switched from wmii to
<a href="http://xmonad.org/">xmonad</a>, the new
<a href="http://www.haskell.org/">Haskell</a> tiling window manager.
It has some nice features over wmii, including dual head support, but after
a brief excursion, I slightly prefer wmii's way of doing things.</p>
<p>If you're a hard core Lisper,
<a href="http://www.nongnu.org/stumpwm/">stumpwm</a> is the window manager
for you. It has a <a href="http://en.wikipedia.org/wiki/REPL">REPL</a>. This one
seems a little too hard core for me, especially since I don't know Lisp.</p>
<p>History: 2007: ratpoison, 2007: wmii, 2012: Qtile</p>
</td>
</tr>
<tr>
<td id="editor"><p>Editor/IDE</p>
<a href="#editor" title="Section permalink" class="sectionlink">¶</a></td>
<td><p><a href="http://www.gnu.org/software/emacs">GNU Emacs</a> 24.3</p></td>
<td >
<p>Switched from Eclipse in 2007. It was a slow transition, but
I think Emacs is worth the investment.</p>
<p><b>On Emacs vs. Vim:</b> I really like that Vim can be used easily on remote
machines. Currently, I use TRAMP for remote file editing. It is very cool,
but it is slow, and I sometimes fall back on nano (*gasp*) for a quick
config file edit when I am logged into a remote terminal. I also suspect
that the dual modes of Vim are more efficient than Emacs-- I'm just not
smart enough to get used to it. Maybe someday I will switch to
<a href="http://www.gnu.org/software/emacs/manual/html_node/viper/index.html#Top">Viper
mode</a>. Why Emacs over Vim? I choose Emacs because it is more powerful
and closer to an IDE. Emacs Lisp allows you to do whatever you want.
</p>
<p><b>On Emacs vs. Eclipse:</b> I found Eclipse was too slow and heavy, used too
much screen real estate, and was too difficult to customize. Scripting
Eclipse required writing extensions in Java whereas Emacs can be extended
in elegant Lisp. I think Eclipse (and other IDE's) are better for code
exploration and they probably have features that I'm not aware of since
I don't use them. I figure, though, that with enough Emacs Lisp, Emacs
can do anything those IDEs can do. If you really want those features,
it's a question of if you want to spend the time achieving perfection
in Emacs or getting real work done in another IDE. I choose perfection. ;)
</p>
<p>Additional commentary:</p>
<ul>
<li><a href="http://blog.ianbicking.org/the-vs-emacs.html">
THE vs. Emacs</a>, Ian Bicking (2005)</li>
<li><a href="http://steve.yegge.googlepages.com/effective-emacs">
Effective Emacs</a>, Steve Yegge (2005)</li>
<li><a href="http://blog.ianbicking.org/other-editors.html">
Other Editors?</a>, Ian Bicking (2005)</li>
<li><a href="http://glyph.twistedmatrix.com/2008/04/structured-python-editor.html">
Structured Python Editor</a>, Glyph Lefkowitz (2008)</li>
<li><a href="http://chalain.livejournal.com/74234.html">
Editor Wars: Revenge of the... oh, whatever.</a>, Chalain (2008)</li>
<li><a href="http://metajack.im/2008/09/05/what-you-can-learn-from-emacs/">
What You Can Learn From Emacs</a>, Jack Moffitt (2008)</li>
<li><a href="http://glyph.twistedmatrix.com/2008/12/emacs-test.html">
The Emacs Test</a>, Glyph Lefkowitz (2008)</li>
<li><a href="http://www.redreddesign.com/blog/emacs-extensions-i-cant-live-without/">
emacs extensions i can’t live without</a> (2009)</li>
</ul>
<p>Screencasts:</p>
<ul>
<li><a href="http://platypope.org/yada/emacs-demo/">I need a cool European accent</a></li>
<li><a href="http://www.vimeo.com/1013263">What You Can Learn From ido.el</a></li>
<li><a href="http://www.youtube.com/watch?v=76Ygeg9miao#t=01m47s">YASnippet demo</a></li>
</ul>
<p>Install method:
<del><a href="http://www.saltycrane.com/blog/2008/10/installing-emacs-23-cvs-ubuntu-hardy/">
from source</a></del>
<code>sudo apt-get install emacs</code>
</p>
<p>Useful packages:</p>
<ul>
<li><a href="http://www.gnu.org/software/tramp/">
Tramp</a>: transparent remote file access</li>
<li><a href="http://www.emacswiki.org/emacs/InteractivelyDoThings">
ido</a>: Buffer switching and more</li>
<li><a href="http://orgmode.org/">Org-Mode</a>: note taking, task lists</li>
<li><a href="http://github.com/yoshiki/yaml-mode">yaml-mode</a>: for yaml</li>
<li><a href="http://jblevins.org/projects/markdown-mode/">markdown-mode</a>: for markdown</li>
<li><a href="http://code.google.com/p/yasnippet/">YASnippet</a>:
Textmate-inspired templating. Great for making HTML less tedious.</li>
<li><a href="https://github.com/nonsequitur/smex">smex: IDO for M-x</a></li>
<li><a href="https://github.com/magnars/multiple-cursors.el">multiple-cursors</a>: this is really fun *and* useful.</li>
<li><a href="http://web-mode.org/">web-mode</a>: for HTML/CSS/Javascript</li>
</ul>
<p>My emacs config on github: <a href="http://github.com/saltycrane/emacs">http://github.com/saltycrane/emacs</a></p>
<p>History: 2001: Emacs/NEdit/UltraEdit, 2006: Eclipse, 2007: Emacs</p>
</td>
</tr>
<tr>
<td id="terminal"><p>Terminal</p>
<a href="#terminal" title="Section permalink" class="sectionlink">¶</a></td>
<td><p><a href="http://software.schmorp.de/pkg/rxvt-unicode.html">urxvt</a></p>
9.19
+ <br><a href="http://www.gnu.org/software/screen/">screen</a></td>
<td>
<p>urxvt supports xft (anti-aliased) fonts, real transparency (not that
I actually use transparency with Qtile), and fading (which I do use with Qtile)
and it is much faster and lighter than gnome-terminal or konsole. screen allows me to switch
terminal sessions without ugly tabs, attach to remote sessions, search through
the scrollback buffer, and more. <em>Update:</em> urxvt also has embedded perl.</p>
<p>Install method:
<del><a href="/blog/2009/11/how-make-urxvt-look-gnome-terminal/">from source</a></del>
<code>sudo apt-get install rxvt-unicode</code>
</p>
</td>
</tr>
<tr>
<td id="vcs"><p>Version Control System</p>
<a href="#vcs" title="Section permalink" class="sectionlink">¶</a></td>
<td>
<p><a href="http://git-scm.com/">Git</a></p>
</td>
<td>
<p>Switched from Subversion to Mercurial in June 2007. The merging in Mercurial
is very nice and can be done without thinking. I do miss Subversion/Subclipse's
revision history viewer, file compare, and ability to isolate files apart from
changesets. <em>Update 2010-04-05:</em> See <a href="#c8633">my comment
below</a>.
</p>
<p><em>Update 2011-05:</em> Switched my personal repos to Git. Use Git almost
exclusively now.
</p>
<p>Additional commentary:</p>
<ul>
<li><a href="http://jonchu.posterous.com/16445171">
DVCS: Why I chose Mercurial over Git</a> (2010)</li>
<li><a href="http://blog.extracheese.org/2010/05/why-i-switched-to-git-from-mercurial.html">
Why I Switched to Git From Mercurial</a> (2010)</li>
</ul>
<p>Install method: <code>sudo apt-get install mercurial</code></p>
<p>History: 2001: SCCS, 2003: Other, 2007: Subversion, 2007: Mercurial,
2010: Mercurial/Git, 2011: Git</p>
</td>
</tr>
<tr>
<td id="high-level-language"><p>"High-level" Language</p>
<a href="#high-level-language" title="Section permalink" class="sectionlink">¶</a></td>
<td><p>None</p></td>
<td>
<p>Previously, I used C. Now I use don't use any statically-typed languague. Wouldn't mind learning <del>C++</del> Go. Although,
Linus <a href="http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918">
doesn't like it.</a></p>
</td>
</tr>
<tr>
<td id="high-high-level-language" ><p>"High-high-level" Language</p>
<a href="#high-high-level-language" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p><a href="http://www.python.org/">Python</a> 2.7</p></td>
<td >
<p>My love for Python is strong. I switched from Perl in 2005
and have no regrets. Object-oriented, easy to read (no more
<a href="http://en.wikipedia.org/wiki/There_is_more_than_one_way_to_do_it">
TIMTOWTDI</a>), and smart people use it. I also want to learn Javascript 2
becuase it is the
<a href="http://steve-yegge.blogspot.com/2007/02/next-big-language.html">
"Next Big Language"</a> and Lisp because it is the
<a href="http://www.paulgraham.com/avg.html">"most powerful language"</a>.</p>
<p><b>On Python vs. Ruby:</b> from what I've read, I characterize Ruby as the
more expressive language more similar to Perl (than Python is) and Python
as the more regimented language. Since I like regimented, I like Python.</p>
<p><b>On Python vs. Lisp:</b> I've concluded that I lack the intelligence to
harness enough of Lisp's power to counteract its non-practicality (e.g.
lack of libraries).</p>
<p>Additional commentary:</p>
<ul>
<li><a href="http://en.wikipedia.org/wiki/Paul_Graham">Paul Graham</a>:
<a href="http://www.paulgraham.com/icad.html">Python is
getting closer to Lisp</a> (2002)</li>
<li>Paul Prescod: <a href="http://www.prescod.net/python/IsPythonLisp.html">
no it isn't</a></li>
<li>Paraphrase of <a href="http://www.swiss.ai.mit.edu/~gjs/">
Gerald Jay Sussman</a> (one of the creators of Scheme):
<a href="http://blog.snowtide.com/2009/03/24/why-mit-now-uses-python-instead-of-scheme-for-its-undergraduate-cs-program">
Why MIT now uses python instead of scheme for its undergraduate CS program</a>
(2009)</li>
</ul>
<p>Install method: preinstalled on Ubuntu</p>
<p>History: 2001: <a href="http://www.perl.org/">Perl</a>,
2005: <a href="http://www.python.org/">Python</a>
</p>
</td>
</tr>
<tr>
<td id="web-framework" ><p>Web Framework</p>
<a href="#web-framework" title="Section permalink" class="sectionlink">¶</a></td>
<td >
<p>
<a href="http://www.djangoproject.com/">Django</a> /
<a href="http://flask.pocoo.org/">Flask</a>
</p>
</td>
<td >
<p><em>2014-10:</em>I now use Flask at work. Previously, I used Django. I think I like SQLAlchemy and Jinja2 better than Django. Django has a lot more built in and is put together better. Flask's thread locals are convenient and messy. Probably <a href="http://www.pylonsproject.org/">Pyramid</a> is the best but no one uses it.</p>
<p>Here are some links:</p>
<ul>
<li><a href="http://www.ianbicking.org/">Ian Bicking</a>:
<a href="http://blog.ianbicking.org/theres-so-much-more-than-rails.html">
There's so much more than Rails</a> (2005)</li>
<li><a href="http://blog.ianbicking.org/2008/01/12/what-php-deployment-gets-right/">
What PHP deployment gets right</a> (2008)</li>
<li><a href="http://www.feedmagnet.com/blog/django-vs-rails/">
Django vs. Rails</a> (2009)</li>
</ul>
<p>Install method: <code>pip install Django</code> / <code>pip install Flask</code></p>
</td>
</tr>
<tr>
<td id="web-browser"><p>Web Browser</p>
<a href="#web-browser" title="Section permalink" class="sectionlink">¶</a></td>
<td><p>Firefox</p></td>
<td >
<p>Not to be confused with <a href="http://www.konqueror.org">
Konqueror</a>, Conkeror is an emacs-like, keyboard driven, scriptable,
Mozilla-based web browser. I've used it almost full
time since January 2008. It is still considered alpha stage software
so there are a number of bugs. However, it is still pretty sweet. I use
Firefox as a backup (and IE Tab for Launchcast and Netflix on Windows).</p>
<p>Unfortunately, one of the annoying things in Firefox 2 is present in
Conkeror as well-- memory leaks. Based on
<a href="http://kb.mozillazine.org/Memory_Leak">this Mozilla article</a>
and some brief personal experience, Firefox 3 has made fixes in this area.
It would be nice if Conkeror could benefit from the Firefox 3 fixes.</p>
<p><em>Update 2010-05-04:</em> Conkeror is really awesome, but I had some memory/cpu issues with it
a while ago and haven't put in the work to merge my custom keybindings
with the latest Conkeror code. Also waiting to see if there will be
an Emacs version of <a href="http://vimium.github.com/">Vimium</a>
(since, after all <a href="http://vimperator.org/">vimperator</a>
followed conkeror).
</p>
<p>I'm currently using a combination of Google Chrome and Firefox.
Chrome is faster, especially for Javascript-intensive sites, but I really
<a href="http://superuser.com/questions/91334/alternative-to-arrow-keys-in-google-chrome-location-bar">
<em>hate</em> the Google Chrome Omnibar</a>. If you have a solution
or workaround, please post an answer. Firefox also has some Add-ons
that Chrome doesn't.
</td>
</tr>
<tr>
<td id="email" ><p>Email</p>
<a href="#email" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p>Gmail</p></td>
<td >
<p><em>Update 2010-05-04:</em>
Gmail. It's slow but it has a lot of features and it's in
my web browser and it's easy and it works and I don't really like using
email that much anyways. Oh, and, big plus, syncing works almost perfect
with my Android phone. (Actual full switch to Gmail was around December 2008.)
</p>
</td>
</tr>
<tr>
<td id="graphical-diff" ><p>Graphical diff/merge</p>
<a href="#graphical-diff" title="Section permalink" class="sectionlink">¶</a></td>
<td ><p><a href="http://kdiff3.sourceforge.net/">KDiff3</a></p></td>
<td >
<p>I started using KDiff a while ago on Windows and have
always liked it. I'm thinking, though, since I'm an Emacs person, I ought to
use <a href="http://www.gnu.org/software/emacs/manual/html_mono/ediff.html">
Ediff</a>.</p>
<p>Install method: <code>sudo apt-get install kdiff3</code></p>
</td>
</tr>
<tr>
<td id="keyboard"><p>Keyboard</p>
<a href="#keyboard" title="Section permalink" class="sectionlink">¶</a></td>
<td>
<p><a href="http://pckeyboards.stores.yahoo.net//en104wh.html">
Unicomp Endurapro</a> /
<a href="http://elitekeyboards.com/products.php?sub=leopold,tenkeyless&pid=fc200rtab">
Leopold Tenkeyless w/ Cherry MX Browns
</a></p>
</td>
<td>
<p>I realize a keyboard is hardware and not software, but it is
hardware that can evoke strong opinions, so I made an exception.
</p>
<p>One problem with hardware is I can't try out all the different types
and choose the one I like the best as I can with software. So
my selection is based on reviews not on actual experience. And,
after buying the Endurapro, I found I actually did not like the
integrated mouse stick, so I should have bought a Customizer 104/105
and saved $30.</p>
<p><em>Update 2011-05:</em> Got the Leopold tenkeyless for work.
Tenkeyless is a must for quicker mouse access.
And I actually like the lighter touch of the
Cherry MX Browns versus the Unicomp's buckling springs. I like it
so much I want to replace my Unicomp at home with another Leopold.
</p>
<p><em>Update:</em> Got a second Leopold for home to replace my Unicomp.</p>
<p>Additional commentary:</p>
<ul>
<li><a href="http://www.jwz.org/gruntle/wrists.html">
my wrists and welcome to them.</a>, JWZ (1999)</li>
<li><a href="http://www.dansdata.com/deck.htm">
Deck keyboard</a>, Dan (2005)</li>
<li><a href="http://bc.tech.coop/blog/060131.html">
Surviving Emacs - Part 4</a>, Bill Clementson (2006)</li>
<li><a href="http://glyf.livejournal.com/55780.html">
Keyboard Fight</a>, Glyph Lefkowitz (2006)</li>
<li><a href="http://diveintomark.org/archives/2006/05/30/bye-apple">
Bye, Apple</a>, Mark Pilgrim (2006)</li>
<li><a href="http://glyph.twistedmatrix.com/2009/01/meandering-review-of-logitech.html">
A Meandering Review of the Logitech Illuminated Keyboard</a>,
Glyph Lefkowitz (2009)</li>
</ul>
<p>History: 2009: Unicomp Endurapro, 2011: Leopold Tenkeyless (MX Browns)</p>
</td>
</tr>
<tr>
<td id="office-chair"><p>Office Chair</p>
<a href="#office-chair" title="Section permalink" class="sectionlink">¶</a></td>
<td><p>Undecided</p></td>
<td><p>Herman Miller Aeron or Steelcase Leap</p>
</td>
</tr>
<tr>
<td id="mobile-phone"><p>Mobile Phone</p>
<a href="#mobile-phone" title="Section permalink" class="sectionlink">¶</a></td>
<td><p><a href="http://www.motorola.com/Consumers/US-EN/Consumer-Product-and-Services/Mobile-Phones/Motorola-DROID-US-EN">Motorola Droid 4</a></p></td>
<td>
<p>After almost 10 years (and 3 generations) of the Palm Treo, I got the
Motorola Droid.</p>
<p>The Droid is pretty awesome, but I don't like switching
to landscape mode to use the keyboard-- especially when toolbars and headers
take up half the screen. I think Palm and Blackberry got this form factor Right.
Just as I prefer the keyboard over the mouse on my PC, I want to use the keyboard
and D-pad over the touchscreen on my phone.
<em>Update 2010-05-04:</em> The keyboard is mediocre and use of the D-pad
center button sucks. My Palm Treo 650 D-pad worked much better.
</p>
<p>My reasons for choosing an
<a href="http://en.wikipedia.org/wiki/Android_%28operating_system%29">Android</a>
phone are: I <em>need</em> a physical keyboard.
I <em>want</em> to hack on my phone. I <em>think</em> Android has more potential than Palm's
<a href="http://en.wikipedia.org/wiki/WebOS">webOS</a>
or <a href="http://en.wikipedia.org/wiki/Maemo">Maemo</a>.</p>
<p>Useful apps:</p>
<ul>
<li><a href="http://code.google.com/p/connectbot/">Connectbot</a>
Secure shell (SSH) client for the Android platform. Use this all the time. Awesome.</li>
<li><a href="http://www.android.com/market/#app=listen">Listen</a>
Listen from Google Labs brings podcast search, subscribe, download and stream to your Android-powered device.</li>
<li><a href="http://mytracks.appspot.com/">My Tracks</a>
Record GPS tracks. Monitor your performance. Share your outdoor activities with friends.
Really enjoy this one. Love tracking my romping.
</li>
</ul>
<p><em>2010-05-04 Updates:</em></p>
<ul>
<li><a href="http://www.google.com/mobile/voice/">Google Voice</a>: Free text messages
and better voicemail. Another useful app. Makes voicemail suck a lot less.</li>
<li><a href="http://levelupstudio.com/foxyring">FoxyRing</a>: automatically
control the ringer volume based on ambient noise level. I was doubtful about this one,
but it actually works well for me.</li>
<li><a href="http://www.flixster.com/mobile/apps/android">Flixter (Movies)</a>:
Useful for checking movie showtimes.
</li>
<li><a href="http://www.youversion.com/mobile/android">Bible (YouVersion)</a>:
This version is pretty good. I miss my <a href="http://www.plkr.org/">Plucker</a>
created Bible on my Palm though. I wish there was something like Plucker for
Android.
</li>
<li>DroidLight: use the LED camera flash as a flashlight. Simple and useful.
Works much better than using the screen as a flashlight.
</li>
<li><a href="http://www.google.com/mobile/navigation/">Google Navigation</a>: I
don't need my Garmin anymore. (Each has advantages and disadvantages, but I
have found it to be a capable replacement.)</li>
<li>Just want to mention that the Calendar sucks. It is great that I can sync
with my Google calendar, but I really hate the Android Calendar UI.</li>
</ul>
<p>Additional Commentary/Links:</p>
<ul>
<li><a href="http://randomfoo.net/2009/06/15/thoughts-on-the-palm-pre-g2-and-iphone-3g">
Thoughts on the Palm Pre, G2, and iPhone 3G</a> Leonard Lin (2009 June)</li>
<li><a href="http://jwz.livejournal.com/1055120.html">
JWZ gets a Palm Pre</a> (2009 June)</li>
<li><a href="http://jwz.livejournal.com/1055369.html">
Emacs on Android</a> (2009 June)</li>
<li><a href="http://daringfireball.net/2009/08/the_android_opportunity">
The Android Opportunity</a>, John Gruber (2009 August)</li>
<li><a href="http://jwz.livejournal.com/1108212.html">
Dear Palm, it's just not working out</a>, JWZ (2009 October)</li>
</ul>
<p>History: 2002: <a href="http://en.wikipedia.org/wiki/Treo_180">Handspring Treo 180</a>,
2003: <a href="http://en.wikipedia.org/wiki/Treo_600">Handspring Treo 600</a>,
2005: <a href="http://en.wikipedia.org/wiki/Treo_650">Palm Treo 650</a>,
2009: <a href="http://en.wikipedia.org/wiki/Motorola_Droid">Motorola Droid</a>
2011: <a href="http://en.wikipedia.org/wiki/Droid_4">Motorola Droid 4</a>
</p>
</td>
</tr>
</table>