<?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: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-37665376</id><updated>2011-07-07T15:27:48.932-07:00</updated><title type='text'>See Greg learn.</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-37665376.post-7025748796614690096</id><published>2010-04-01T07:23:00.000-07:00</published><updated>2010-04-01T07:26:15.911-07:00</updated><title type='text'>Gaussian FAQ</title><content type='html'>I found this on my computer and can't seem to find it on the web, so I'm putting it here in case other's would benefit.  Note:  I didn't write this.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;====================John D'Errico, 24 Mar 1995=======ssm&lt;br /&gt;From: John D'Errico &lt;derrico@pixel.kodak.com&gt;&lt;br /&gt;Subject: Gaussian FAQ&lt;br /&gt;Message-ID: &lt;3kv7m3$61f@thetimes.pixel.kodak.com&gt;&lt;br /&gt; &lt;br /&gt;This is a FAQ which attempts to cover questions about the normal&lt;br /&gt;(Gaussian) distribution. I will attempt to add or enhance topics&lt;br /&gt;as I have the time and people make suggestions.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Questions to be answered in this FAQ are:&lt;br /&gt; &lt;br /&gt;1. What is the normal (Gaussian) density function?&lt;br /&gt; &lt;br /&gt;2. What is the cumulative normal distribution function?&lt;br /&gt; &lt;br /&gt;3. How is ERF related to the cumulative normal distribution function?&lt;br /&gt; &lt;br /&gt;4. What is a good approximation to the cumulative normal function?&lt;br /&gt; &lt;br /&gt;5. What is a good approximation to the inverse of the cumulative&lt;br /&gt;distribution normal function?&lt;br /&gt; &lt;br /&gt;6. How do you generate a normally distributed random variable?&lt;br /&gt; &lt;br /&gt;7. If X is a normally distributed random variable with mean = 0&lt;br /&gt;standard deviation = 1, how do you convert it into one with mean = mu&lt;br /&gt;and standard deviation = sigma?&lt;br /&gt; &lt;br /&gt;8. How do you generate bivariate or multivariate random normal&lt;br /&gt;variates with a specified correlation matrix? Covariance matrix?&lt;br /&gt; &lt;br /&gt;9. If X is a normally distributed random variable, what is the&lt;br /&gt;distribution of f(X)?&lt;br /&gt; &lt;br /&gt;10. What are some good references on these topics?&lt;br /&gt; &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;======================================================================&lt;br /&gt; &lt;br /&gt;Answers to questions 1-10:&lt;br /&gt; &lt;br /&gt;1. What is the normal (Gaussian) density function?&lt;br /&gt; &lt;br /&gt;The standard (mean=0 and variance=1) normal density function is&lt;br /&gt; &lt;br /&gt;             1       -(1/2)*x^2&lt;br /&gt; Z(x) = ----------  e&lt;br /&gt;        sqrt(2*pi)&lt;br /&gt; &lt;br /&gt;For mean=mu and variance=sigma^2&lt;br /&gt; [ correction, inserted (1/2) below; 17-aug-00/rfu ] &lt;br /&gt;&lt;br /&gt;                1          -(1/2)((x-mu)/sigma)^2&lt;br /&gt; Z(x) = ----------------  e&lt;br /&gt;        sqrt(2*pi*sigma)&lt;br /&gt; &lt;br /&gt;The normal distribution with mean=mu and variance=sigma^2 is&lt;br /&gt;customarily referred to as N(mu,sigma^2). The standard normal&lt;br /&gt;is N(0,1).&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;2. What is the cumulative normal distribution function?&lt;br /&gt; &lt;br /&gt;The cumulative normal, referred to here by P(X), is simply the&lt;br /&gt;integral of Z(x) dx from minus infinity to X.&lt;br /&gt; &lt;br /&gt;We will use Q(X) to refer to the integral of Z(x) dx from X to&lt;br /&gt;plus infinity.&lt;br /&gt; &lt;br /&gt;P(X) + Q(X) = 1&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;3. How is ERF related to the cumulative normal distribution function?&lt;br /&gt; &lt;br /&gt;Since some systems do not provide a cumulative normal function but do&lt;br /&gt;provide ERF, this can be useful if you know the transformation between&lt;br /&gt;them.&lt;br /&gt; &lt;br /&gt;ERF(X) = integral [2/sqrt(pi)]*exp(-x^2) dx from 0 to X.&lt;br /&gt; &lt;br /&gt;P(X) = [ERF(X/sqrt(2)) + 1]/2&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;4. What is a good approximation to the cumulative normal function?&lt;br /&gt; &lt;br /&gt;While it is not possible to write a solution to this in a simple,&lt;br /&gt;closed form expression not involving infinite sums, there are many&lt;br /&gt;good approximations available. It is not necessary to resort to&lt;br /&gt;numerical integration techniques such as trapezoidal or Simpson's&lt;br /&gt;rule. In fact, far more accuracy can be achieved through one of the&lt;br /&gt;approximations which can be found in the references listed below.&lt;br /&gt; &lt;br /&gt;One simple approximation to P(X), the cumulative normal, is:&lt;br /&gt;(from Abramowitz and Stegun)&lt;br /&gt; &lt;br /&gt;Let t = 1/(1+pX)&lt;br /&gt; &lt;br /&gt;where p=.33267&lt;br /&gt; &lt;br /&gt;then&lt;br /&gt; &lt;br /&gt;P(x) = 1-Z(x)*[a_1*t + a_2*t^2 + a_3*t^3]&lt;br /&gt; &lt;br /&gt;where&lt;br /&gt; &lt;br /&gt;a_1 =  0.4361836&lt;br /&gt;a_2 = -0.1201676&lt;br /&gt;a_3 =  0.9372980&lt;br /&gt; &lt;br /&gt;The error in this approximation is less than 0.00001 for all X.&lt;br /&gt; &lt;br /&gt;Other approximations can be found in Abramowitz &amp; Stegun; Press, et al;&lt;br /&gt;and in Hart, et al. In particular, Hart has a very extensive set of&lt;br /&gt;approximations, some with accuracy over 20 significant digits within&lt;br /&gt;a given region.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;5. What is a good approximation to the inverse of the cumulative&lt;br /&gt;normal distribution function?&lt;br /&gt; &lt;br /&gt;Mathematically we can write this as:  Find X such that Q(X) = p for&lt;br /&gt;any 0 &lt; p &lt; 1. (Note: this computes an upper tail probability.)&lt;br /&gt; &lt;br /&gt;Again, it is not possible to write this as a closed form expression,&lt;br /&gt;so we resort to approximations. Because of the symmetry of the normal&lt;br /&gt;distribution, we need only consider 0 &lt; p &lt; 0.5. If you have p &gt; 0.5,&lt;br /&gt;then apply the algorithm below to q = 1-p, and then negate the value&lt;br /&gt;for X obtained. (This approximation is also from Abramowitz and&lt;br /&gt;Stegun.)&lt;br /&gt; &lt;br /&gt;t = sqrt[ ln(1/p^2) ]&lt;br /&gt; &lt;br /&gt;             c_0 + c_1*t + c_2*t^2&lt;br /&gt;X = t -  ------------------------------&lt;br /&gt;         1 + d_1*t + d_2*t^2 + d_3*t^3&lt;br /&gt; &lt;br /&gt;c_0 = 2.515517&lt;br /&gt;c_1 = 0.802853&lt;br /&gt;c_2 = 0.010328&lt;br /&gt; &lt;br /&gt;d_1 = 1.432788&lt;br /&gt;d_2 = 0.189269&lt;br /&gt;d_3 = 0.001308&lt;br /&gt; &lt;br /&gt;See Abramowitz and Stegun; Press, et al.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;6. How do you generate a normally distributed random variable?&lt;br /&gt; &lt;br /&gt;There are several good ways to do this, some better than others.&lt;br /&gt;It is assumed that the user has available a good uniform pseudo-&lt;br /&gt;random deviate generator available. This is the starting point&lt;br /&gt;for all such approaches.&lt;br /&gt; &lt;br /&gt;The first algorithm is to make use of the central limit theorem.&lt;br /&gt;This says that the sum of a set of independent, identically&lt;br /&gt;distributed (commonly abbreviated as iid) random numbers will&lt;br /&gt;approach normality as enough of them are added together.&lt;br /&gt; &lt;br /&gt;So, simply generate n uniform [0,1] random numbers, and sum them&lt;br /&gt;up. Then shift and scale this sum to have the appropriate mean&lt;br /&gt;and variance to give us a roughly N(0,1) random variable. Thus,&lt;br /&gt; &lt;br /&gt;    sum(X_i) - n/2&lt;br /&gt;Z = --------------&lt;br /&gt;      sqrt(n/12)&lt;br /&gt; &lt;br /&gt;Note that if we choose n = 12, we need not even do a divide,&lt;br /&gt; &lt;br /&gt;Z = sum(X_i) - 6&lt;br /&gt; &lt;br /&gt;While the method described above is quite simple to program, it&lt;br /&gt;does a poor job of generating random deviates in the tails of the&lt;br /&gt;distribution. There are far better ways to do accomplish this&lt;br /&gt;task. A logical way to generate a normal random deviate is to&lt;br /&gt;look back to the answer to question (5).&lt;br /&gt; &lt;br /&gt;Simply generate a single uniform [0,1] random deviate X, and then&lt;br /&gt;invert the cumulative normal at that point. If the inverse is an&lt;br /&gt;accurate one, then that number will be a pseudo-random normal deviate.&lt;br /&gt;This method will be as fast and as good as is the approximation&lt;br /&gt;you choose for the inverse of the cumulative normal.&lt;br /&gt; &lt;br /&gt;The other common method, which generates pairs of normal deviates&lt;br /&gt;at a time (or if you want, bivariate normal deviates) is the Box-&lt;br /&gt;Muller transformation. See Numerical Recipes (Press, et. al.) for&lt;br /&gt;an explanation of this method.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;7. If X is a N(0,1) distributed random variable, how do you convert&lt;br /&gt;it into N(mu,sigma^2)?&lt;br /&gt; &lt;br /&gt;Referring back to (1), we see that a simple transformation will&lt;br /&gt;accomplish this.&lt;br /&gt; &lt;br /&gt;Z = mu + sigma*X&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;8. How do you generate multivariate random normal variates with&lt;br /&gt;a specified correlation matrix and set of variances?&lt;br /&gt; &lt;br /&gt;Lets start with a simple case, just a bivariate normal. We will&lt;br /&gt;assume s1 and s2 are the standard deviations, c is the desired&lt;br /&gt;correlation between them (-1 &lt;= c &lt;= 1) and mu1 and mu2 are the&lt;br /&gt;desired means.&lt;br /&gt; &lt;br /&gt;First generate two unit normal random deviates, N1 and N2.&lt;br /&gt; &lt;br /&gt;  X = mu1 + s1*N1&lt;br /&gt; &lt;br /&gt;  Y = mu2 + c*s2*N1 + sqrt(1-c^2)*s2*N2&lt;br /&gt; &lt;br /&gt;X and Y will be bivariate random normal deviates with the desired&lt;br /&gt;distribution parameters.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;Now for the more general case of a multivariate normal where "multi"&lt;br /&gt;means larger than two.&lt;br /&gt; &lt;br /&gt;Suppose we have a correlation matrix C. We need to convert this to a&lt;br /&gt;covariance matrix, S, first.&lt;br /&gt; &lt;br /&gt;Let D be a diagonal matrix with the desired variable standard&lt;br /&gt;deviations on its diagonal. Then&lt;br /&gt; &lt;br /&gt;S = D C D&lt;br /&gt; &lt;br /&gt;Form the Cholesky factorization of S (actually any matrix "square&lt;br /&gt;root" of s will do.) This is a factorization of S in terms of a lower&lt;br /&gt;triangular matrix L such that&lt;br /&gt; &lt;br /&gt;S = L' L&lt;br /&gt; &lt;br /&gt;This factorization always exists whenever S is positive definite&lt;br /&gt;(non-singular in this case, since we started from a supposedly&lt;br /&gt;valid correlation matrix.)&lt;br /&gt; &lt;br /&gt;Generate an n by p array, A, of N(0,1) random deviates, where p is&lt;br /&gt;the number of variables and n is the number of multivariate sample&lt;br /&gt;you wish to end up with. Then&lt;br /&gt; &lt;br /&gt;B = A L'&lt;br /&gt; &lt;br /&gt;is an array of normally distributed random deviates where each row&lt;br /&gt;is an event with roughly the correlation/covariance matrix you wanted.&lt;br /&gt;(It won't be exactly that because of pseudo-random variability.)&lt;br /&gt; &lt;br /&gt;Once you have generated a set of random deviates with the desired&lt;br /&gt;correlation matrix and mean vector zero, simply add a vector offset&lt;br /&gt;to obtain any desired mean.&lt;br /&gt; &lt;br /&gt;If the correlation/covariance matrix supplied is singular, a similar&lt;br /&gt;approach can still be used, but now we must define L using a different&lt;br /&gt;type of matrix square root. This can be achieved using an eigenvalue&lt;br /&gt;decomposition of the matrix S.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;9. If X is a normally distributed random variable, what is the&lt;br /&gt;distribution of f(X)?&lt;br /&gt; &lt;br /&gt;There are several simple cases we can cover. If X and Y are N(0,1)&lt;br /&gt;independent R.V.s, then&lt;br /&gt; &lt;br /&gt;aX + bY is a normal random variable for constants a and b.&lt;br /&gt; &lt;br /&gt;X/Y is a Cauchy random variable (and its moments are undefined.)&lt;br /&gt; &lt;br /&gt;e^X is a lognormal random variable.&lt;br /&gt; &lt;br /&gt;X^2 + Y^2 is a Chi-squared random variable with two degrees of&lt;br /&gt;freedom.&lt;br /&gt; &lt;br /&gt;sqrt(x^2 + y^2) is a Rayleigh random variable.&lt;br /&gt; &lt;br /&gt;These distributions along with many others can all be found in&lt;br /&gt;Johnson, et al.&lt;br /&gt; &lt;br /&gt;The general problem of determining the distribution of a function of&lt;br /&gt;one or more random variables is known as statistical tolerancing.&lt;br /&gt;This can be done by several techniques, Monte Carlo methods, first&lt;br /&gt;or second order Taylor series approximations, and Taguchi style&lt;br /&gt;methods (actually related to Gaussian quadrature) to name a few.&lt;br /&gt;A common approach it to estimate the first few (generally either&lt;br /&gt;2 or 4) moments of the transformation in question and then find a&lt;br /&gt;distribution which has those same moments. A family of distributions&lt;br /&gt;which can be used to match the first 4 moments is the Pearson system&lt;br /&gt;(see Johnson, et al.)&lt;br /&gt; &lt;br /&gt;See D'Errico &amp; Zaino for a discussion of statistical tolerancing.&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt; &lt;br /&gt;10. What are some good references on these topics?&lt;br /&gt; &lt;br /&gt;The references listed here are not necessarily the best possible ones&lt;br /&gt;for this subject.&lt;br /&gt; &lt;br /&gt;  1. Abramowitz and Stegun, "Handbook of Mathematical Functions",&lt;br /&gt;     Dover Publications, 1965 (originally published by the National&lt;br /&gt;     Bureau of Standards, 1964)&lt;br /&gt; &lt;br /&gt;  2. Press, Flannery, Teukolsky, Vetterling, "Numerical Recipes",&lt;br /&gt;     Cambridge University Press, 1986&lt;br /&gt; &lt;br /&gt;  3. Hart, et al, "Computer Approximations", Wiley, 1968&lt;br /&gt; &lt;br /&gt;  4. Johnson, Kotz, &amp; Balakrishnan, "Continuous Univariate&lt;br /&gt;      Distributions", Volume 1, Wiley, 1994&lt;br /&gt; &lt;br /&gt;  5. Kalos &amp; Whitlock, "Monte Carlo Methods", Wiley, 1986&lt;br /&gt; &lt;br /&gt;  6. Knuth, "The Art of Computer Programming, Volume 2, Seminumerical&lt;br /&gt;      Algorithms", Addison-Wesley, 1969&lt;br /&gt; &lt;br /&gt;  7. D'Errico &amp; Zaino, "Statistical Tolerancing Using a Modification&lt;br /&gt;      of Taguchi's Method", Technometrics, Vol 30, no. 4&lt;br /&gt; &lt;br /&gt;======================================================================&lt;br /&gt; &lt;br /&gt;John D'Errico,  derrico@pixel.kodak.com&lt;br /&gt; &lt;br /&gt;Any errors or omissions are my fault and mine alone.&lt;br /&gt; &lt;br /&gt;======================================================================&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7025748796614690096?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7025748796614690096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7025748796614690096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7025748796614690096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7025748796614690096'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2010/04/gaussian-faq.html' title='Gaussian FAQ'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7142538361331414557</id><published>2009-01-31T14:01:00.000-08:00</published><updated>2009-01-31T15:19:06.272-08:00</updated><title type='text'>Where's my $HOME?</title><content type='html'>Once upon a time, life was simple.  My progress could be measure by the state of my home directory.  My work lived in folders that represented input or output data, program source code, and latex source code.  Beyond that there were some odds and ends like gnuplot script files and the resulting postscript files, either to analyze or include in whatever paper I was writing.  I also had a Mail directory that my email client (elm at first and then pine) access, but I didn't really use email that much.  I would use emacs (or vi if it was a quick edit) to edit a file or run my programs to generate output data.  That was pretty much it.  I lived in the shell.  I could telnet from wherever and have the same environment from wherever I was.  As time went on, I found myself using emacs more and more as my shell, but the idea was basically the same.&lt;br /&gt;&lt;br /&gt;Now...  I usually have email, a web browser, and some office app or adobe open, usually to read, and sometimes to write.  I'll be editing code sometimes (less often then I like) and have used pythonwin, but recently I've rediscovered emacs (now on windows).  Instead of constantly having an awareness of my directory structure, because I'm cd'ing around it in the shell, it's mostly a place to store some program's files or downloads from my web browser.  It ends up getting messy because I'm not as cognizant of where everything belongs.  The file system is just a dumping ground.&lt;br /&gt;&lt;br /&gt;To make matters worse, I have stuff on multiple computers (home, work, and laptop) and I have stuff that just lives on the web (delicious, twine, google docs, evernote, whatever I'm intrigued by this week).  I'm homeless.   Where's $HOME?&lt;br /&gt;&lt;br /&gt;Holy cow.  Where am I?  How's my progress?  What's my operating system doing for me?  I used to live in the shell.  Todo management?  "grep -R 'TODO' ."  I'd make up scripts to handle common tasks and throw them in ~/bin.  A lot of that was made possible by the miracle of plain text.  Unfortunately, I deal in binary files (.doc, .ppt, .pdf, .xls, etc.) these days and I have to open some separate window to look at them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7142538361331414557?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7142538361331414557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7142538361331414557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7142538361331414557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7142538361331414557'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2009/01/wheres-my-home.html' title='Where&apos;s my $HOME?'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7515231189148626129</id><published>2009-01-03T17:02:00.000-08:00</published><updated>2009-01-03T18:05:14.982-08:00</updated><title type='text'>50th time is the charm with GTD?</title><content type='html'>Well, it's a new year and I, like many, and making an effort to organize.  I've read David Allen's &lt;span style="font-style: italic;"&gt;Getting Things Don&lt;/span&gt;e and been inspired, but have never quite got a system I'm terrifically happy with.  Usually, I try something new, move all my lists, get a temporary boost (more from inspiration than efficiency) and then things end up about the same.&lt;br /&gt;&lt;br /&gt;Well, this is another one of those times!  &lt;a href="http://seegreglearn.blogspot.com/2008/03/my-nascent-gtd-system.html"&gt;This post&lt;/a&gt; from March sounds startling like this one, but I will press ahead.  The idea of using google notebook didn't last long.  I'm not sure why.  I think part of it is the interface.  It just has all these borders and stuff that get in the way of the lists.  I fell in love again with emacs and after using org-mode for outlining, put my lists in there and used svn for versioning.  I found myself reordering branches, indenting, and generally messing with my giant .org files (work and home).  Worse, I found I was generally doing things that never made it on the list and not looking at the list to see what to do.&lt;br /&gt;&lt;br /&gt;Next (yes, there's a next), I tried taskodone, which based on taskpaper.  I was inspired by this review of taskpaper&lt;br /&gt;&lt;p style="font-style: italic;"&gt;&lt;span class="quote"&gt;"TaskPaper’s strength is that it lets you focus on crossing out those tasks instead of building a self-referential web of unfinished business which separates you from the cold, harsh reality of all the work you need to do."&lt;/span&gt; — &lt;a href="http://www.tuaw.com/2007/10/25/taskpaper-1-0-a-review/"&gt;Scott McNulty, Tuaw.com&lt;/a&gt;&lt;/p&gt;Hey, that's me!  OK, so I tried taskodone and I like it, and I really think it might be OK.  It has a lot of charm in that it's pretty fiddle proof with only one level of indendation.  It didn't quite stick with me though.  I still wanted to reorganize my unfinished business.  I also didn't like looking at it all all the time.  I suppose some discipline, like just looking at the @na lines would work, but still when I opened it to delete a finished line or add a next task, I'm still looking at everything.&lt;br /&gt;&lt;br /&gt;All of the above with tags and outlines actually has little to do with what's in David Allen's book.  His lists are just lists.  Many of us have this need to keep actions tied (electronically, preferably) to their projects.  His project list though, is just a list of projects!  You only consult it at the weekly review or when adding a new one.  The other lists or lists contain your next actions.&lt;br /&gt;&lt;br /&gt;Where does the planning happen?  In the project plans, of course.  These project plans are culled for actions in the weekly review.  They go in folders in the book, I believe.  You get out these manilla things, look and alter them, and then update your plain old flat GTD lists.  I had never quite figured this out (and am still not sure I have).&lt;br /&gt;&lt;br /&gt;Where are the project plans in my org-mode giant list?  Well, they are *all* right in there.  Yes you can collapse and expand and only look at what you need with some fancy emacs keystrokes, but still, they are *all* right there.  Too much for me.&lt;br /&gt;&lt;br /&gt;Where are the project plans with taskpaper?  Well, umm, umm...  There's a flat list of tasks under the project headings, but that's just not enough for a project of any complexity.  You can break a project into separate project (which I did) and have something like "Build a house:", "Build a house - hire an architect," " Build a house - hire a contractor," etc.  That's just cheating though, and your forced to look at all the sub-projects.&lt;br /&gt;&lt;br /&gt;OK, so my projects don't really live in manilla folders too often.  What could I use?  Well, gee, how about those things on the filesystem we call "folders?"  Wait, it's all coming back to me now.  Back in grad school, I had a small set of folders that my life depended on.  One folder would hold the .tex, .ps, and gnuplot script files that represent the paper (or my thesis) that I was working on.  The other folder(s) would hold code and the output of that code.  The state of those folder represented my progress in pretty absolute terms.  When the paper was done, refereed, and published, I was pretty much done.  I would put "TODO" or "FIXME" into code or tex files and have TODO files with lists of task.  grep was my friend for finding where work was needed.&lt;br /&gt;&lt;br /&gt;Much of that simplicity came from what I was doing and it was just natural.  Now I'm more connected with other people and there's a lot of quick turnaround exchanges via email that can be confused with advancing the ball.  Often there's not a product I'm actively working on that would naturally go in a folder.  I might have one due in the distant future, but haven't actually got to the point of creating a folder and opening a word processor.&lt;br /&gt;&lt;br /&gt;So here's the idea -- use project folders.  Have a project?  Make a folder.  Put some stuff in there that represents what's been done and what has to be done.  The state of these folders represent progress (or lack thereof).  I'm thinking org-mode can help here with a TODO.org with the tasks.  Keep TODOs separate from notes, and references.  Flag the next action with TODO and use org agenda to pull the master action list together.  The project list is just "ls ~/projects."&lt;br /&gt;&lt;br /&gt;Really the only revelation (to me) is that having all your project plans in one file can be terribly distracting.  OK.  I've wasted enough time not actually doing things while writing this, so back to work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7515231189148626129?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7515231189148626129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7515231189148626129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7515231189148626129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7515231189148626129'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2009/01/50th-time-is-charm-with-gtd.html' title='50th time is the charm with GTD?'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-137650960184460529</id><published>2008-10-30T13:11:00.000-07:00</published><updated>2008-10-30T13:15:59.572-07:00</updated><title type='text'>proud papa</title><content type='html'>I installed python on my 10-year-old's computer a while ago and showed him a few things.  He's really into football now and for some reason he wanted to calculate NFL passer ratings for some QBs.  I helped him write a program in python that prompts the user for completions, attempts, etc. and then prints out the passer rating.  This morning I found him on nfl.com looking up stats and punching them into his new calculator.  I think it's the first time he's created a tool.  It feels a bit like watching him discover fire.  I'm a proud papa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-137650960184460529?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/137650960184460529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=137650960184460529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/137650960184460529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/137650960184460529'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/10/proud-papa.html' title='proud papa'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-5406354256641362123</id><published>2008-09-25T15:38:00.000-07:00</published><updated>2008-09-25T15:55:48.015-07:00</updated><title type='text'>good old SQL</title><content type='html'>It's been a little while since I've done this, but somewhere along the way while I was building a dictionary of dictionaries, that what I was doing was creating a little database and that there was this language extracting data from such things.  Plus, the data was already in an MS Access database, which I could query using odbc.&lt;br /&gt;&lt;br /&gt;I think I can get about 90% of what I want with a well-crafted query.  I could do the rest in python, but I think I could simplify things with a user-defined aggregate function.  I think I could do that with Access but I don't know how, so I'll probably move the data to sqlite and then use that to define my functions.  Knowing that sqlite trick is also probably a more reusable skill (for me at least).&lt;br /&gt;&lt;br /&gt;The database came with lots of nearly impenetrable VB code that creates temporary tables and  aggregates  in VB instead of in SQL (using GROUP BY).  To make sure I understand what they're doing (and the data) before I start generating my own reports, I'd like to be able to reproduce their results.  It'd be a neat trick to turn thousands of lines of VB into a tenth that in SQL and python.  Ulimately, it would be more transparent and maintainable as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-5406354256641362123?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/5406354256641362123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=5406354256641362123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/5406354256641362123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/5406354256641362123'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/09/good-old-sql.html' title='good old SQL'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-3963707608822947144</id><published>2008-09-24T15:23:00.000-07:00</published><updated>2008-09-24T15:37:57.053-07:00</updated><title type='text'>defaultdict and R</title><content type='html'>In answering a question on the python-tutor list, someone used collections.defaultdict.  I didn't know about this.  I guess it looks a little cleaner to say a = defaultdict(list) rather than use a.setdefault(key,[]).&lt;br /&gt;&lt;br /&gt;Well, that isn't much learning for the day, but it's something.&lt;br /&gt;&lt;br /&gt;I'm also trying to learn and use R, but fell back to python for my task today when I couldn't quickly figure out how to do what I wanted to in R.  R is frustrating right now because it seems so insanely powerful, but at the same time foreign to how my python-oriented brain thinks.&lt;br /&gt;&lt;br /&gt;I have "Modern Applied Statistics with S-PLUS" and learned to parrot the examples in order to do some cool stuff, but when I have to deviate much from the examples, I find myself a bit lost.  I figure I don't understand the basics of the language well enough and now have "Programming with Data."  Hopefully this will get me up to speed, so I can be one of those guys on the R-help list who can answer a question with six different one-liners to accomplish the same thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-3963707608822947144?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/3963707608822947144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=3963707608822947144' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/3963707608822947144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/3963707608822947144'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/09/defaultdict-and-r.html' title='defaultdict and R'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7437411065570650706</id><published>2008-09-24T06:54:00.000-07:00</published><updated>2008-09-24T07:00:07.245-07:00</updated><title type='text'>emacs org-mode</title><content type='html'>I tried org-mode a while ago, loved it, and then inexplicably stopped using it.  I think I was trying to figure out how to integrate my entire workflow (calendar, task, notes, etc.) in emacs and it was too much at once.  This time I was just using it for notes/outlining and it is quite amazing.  The keys are very intuitive also.  You use the Meta and Shift keys combined with the arrow keys to move sections up and down, indent, etc.&lt;br /&gt;&lt;br /&gt;I also used the table mode to actually make a table I needed and it is, quite simply, incredible.  It's amazingly intuitive to fill a table, move rows and columns, insert, and delete.  The thing can even be used as a spreadsheet, but I haven't tried that yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7437411065570650706?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7437411065570650706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7437411065570650706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7437411065570650706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7437411065570650706'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/09/emacs-org-mode.html' title='emacs org-mode'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-8064131599517452218</id><published>2008-09-16T16:00:00.000-07:00</published><updated>2008-09-16T16:04:25.766-07:00</updated><title type='text'>my fingers remember emacs</title><content type='html'>Long ago, I used to live in emacs.  ctrl-x-`, etc.  I've been playing with pydev and eclipse recently and got frustrated with trying to figure out how to add modules to the python path that are "egg-link"s.  So, I fired up emacs to start editing my text and I can't believe how much my fingers remember.  I did a ctrl-5 2 to open a new window without blinking an eye.  Where did that come from?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-8064131599517452218?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/8064131599517452218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=8064131599517452218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/8064131599517452218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/8064131599517452218'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/09/my-fingers-remember-emacs.html' title='my fingers remember emacs'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-1009090761385254243</id><published>2008-08-05T06:21:00.000-07:00</published><updated>2008-08-05T07:03:58.895-07:00</updated><title type='text'>pytables - more meandering</title><content type='html'>I've been playing with pytables the last couple of days.  I like it a lot for its great efficiency.  I was pretty disturbed when my sqlite file was 60+MB.  It forces me into a hierarchical format though and I'm not sure how I feel about that.  This is a situation where it really might be OK.  Laps and tracks really below to a particular run.  On the other hand, I could probably easily solve the sqlite inefficiency by storing the sample data as (possibly compressed) blobs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-1009090761385254243?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/1009090761385254243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=1009090761385254243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/1009090761385254243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/1009090761385254243'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/08/pytables-more-meandering.html' title='pytables - more meandering'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7889203989428889990</id><published>2008-07-20T16:17:00.000-07:00</published><updated>2008-07-20T16:23:07.501-07:00</updated><title type='text'>javascript libraries - there are a lot of them</title><content type='html'>And I thought the multitude of python web frameworks was bad.  I was playing with google app engine and wondered if it had some library for making your app all AJAXy and cool.  It doesn't.&lt;br /&gt;&lt;br /&gt;Django doesn't have some preferred library.  Turbogears 1 did (MochiKit), but I'm sure that (like everything else) has changed in Turbogears 2.&lt;br /&gt;&lt;br /&gt;OK.  I'll see what's out there.  Holy cow.  There are (off the top of my head) -- Mochikit, prototype, script.aculo.us, jQuery, dojo, mootools, ...&lt;br /&gt;&lt;br /&gt;The breadth-first search continues...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7889203989428889990?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7889203989428889990/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7889203989428889990' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7889203989428889990'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7889203989428889990'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/07/javascript-libraries-there-are-lot-of.html' title='javascript libraries - there are a lot of them'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7014194450866983451</id><published>2008-07-18T16:53:00.000-07:00</published><updated>2008-07-18T17:29:04.308-07:00</updated><title type='text'>meandering</title><content type='html'>I posted on my running blog with the same title, so I thought I'd do it here also since it seems applicable.  I picked up my program again and decided to work on importing my data from SportTracks.  I thought it would be simple since the format is XML.  It turns out the track data and heart rate data are in elements that contain blobs of base64 text.  I asked on the SportTracks forum and was just told the schema was "changing."  OK.  I figured out the current format, but what if it changes?&lt;br /&gt;&lt;br /&gt;SportTracks has a plugin architecture, so I thought maybe I'd look into that.  It's in .NET and I like python, so I got sidetracked looking at IronPython and looking for books on .NET.  What am I doing?  Meandering.&lt;br /&gt;&lt;br /&gt;For some reason, I got to looking at enthought tools again, specifically envisage.  This got me to look at Eclipse, which is a java framework Envisage is based on.  More meandering.&lt;br /&gt;&lt;br /&gt;Then of course, I got back to wondering if a web app wasn't the best way to go, which brought me to revisiting the pylons, turbogears, or django question.  In the midst of that, I discovered google app engine, which includes django templates.  What was I doing again?  Oh right, meandering.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7014194450866983451?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7014194450866983451/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7014194450866983451' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7014194450866983451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7014194450866983451'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/07/meandering.html' title='meandering'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-4515749933559748886</id><published>2008-03-19T17:11:00.000-07:00</published><updated>2008-03-19T17:16:50.486-07:00</updated><title type='text'>on to pylons...</title><content type='html'>I caught up a little bit with respect to turbogears happenings by perusing &lt;a href="http://planet.turbogears.org/"&gt;planet turbogears&lt;/a&gt;.  Version 2 is going to be built on pylons, SQLAlchemy, genshi, and ToscaWidgets.  Does that mean this book I have is basically worthless?  OK, now I'm looking at pylons.  I notice freebase.com is using pylons.  That's a pretty good endorsement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-4515749933559748886?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/4515749933559748886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=4515749933559748886' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/4515749933559748886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/4515749933559748886'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/03/on-to-pylons.html' title='on to pylons...'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7692623582544584249</id><published>2008-03-14T20:01:00.000-07:00</published><updated>2008-03-15T16:32:16.818-07:00</updated><title type='text'>Multitude of python web frameworks are making my head hurt</title><content type='html'>Django, Turbogears, Pylons, ...  Oy vey.  I already have a nice hard copy of the turbogears book I can read in bed.  I think I'll just read that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7692623582544584249?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7692623582544584249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7692623582544584249' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7692623582544584249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7692623582544584249'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/03/multitude-of-python-web-frameworks-are.html' title='Multitude of python web frameworks are making my head hurt'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7010562134800923221</id><published>2008-03-08T07:42:00.000-08:00</published><updated>2008-03-08T07:47:04.485-08:00</updated><title type='text'>Turbogears dying?</title><content type='html'>Well, with my ever-shifting focus, I decided to learn a little something about web development.  I had this though before a couple of years ago and played with Turbogears, which at the time was the hot new thing.  It was python's answer to Ruby on Rails.&lt;br /&gt;&lt;br /&gt;I picked up the book, which I bought quite a while ago, yesterday and started working though the examples.  I was a little frustrated they didn't work out of the box and in my googling for answers, I got the distinct impression that enthusiasm for Turbogears isn't what it used to be.  What happened?&lt;br /&gt;&lt;br /&gt;I guess I'll check out Django now.  It seems to have more activity these days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7010562134800923221?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7010562134800923221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7010562134800923221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7010562134800923221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7010562134800923221'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/03/turbogears-dying.html' title='Turbogears dying?'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7499878929103599088</id><published>2008-03-07T04:02:00.000-08:00</published><updated>2008-03-08T04:01:31.699-08:00</updated><title type='text'>My nascent GTD system</title><content type='html'>Getting Things Done is everywhere on the net.  I read the book a few years ago and it's really very inspiring.  Who wouldn't want "mind like water," but how making it actually happen is going to take some effort.&lt;br /&gt;&lt;br /&gt;I've emptied my brain and put it all in lists many times and tried a ridiculous number of software programs, but haven't ever really got the hang of it, shifting from one system to the next.  My latest incarnation feels right, but I've said that before.  I always experience a temporary boost in productivity, but I really think that's just because I've spent time reviewing and prioritizing all my "stuff."  Still, I'm only cautiously optimistic about my new system.&lt;br /&gt;&lt;br /&gt;So, what am I using now?  Google notebook.  I'm basically following &lt;a href="http://lifehacker.com/software/geek-to-live/getting-things-done-with-google-notebook-256844.php"&gt;these instructions&lt;/a&gt;, except that I'm not using a Next Actions notebook with a section for each context (@computer, etc.).  Those instructions were written before notebook had tags, so I'm leaving the actions with the projects and tagging (labeling in google-speak) them with contexts.  This avoids the problem of losing the tie between projects and next actions that lots of people (like myself) find troublesome.&lt;br /&gt;&lt;br /&gt;I can also now keep a link to mail.  I've always lamented the fact that gmail didn't have a single URL per message.  Well, now apparently it does!  Those guys must have updated the software.  Now I can use the notebook firefox extension to select the text in an email and create a new note, which automatically creates a link to the email.  Unfortunately, outlook web access doesn't have a unique URL for each message.  You can open as a web page and that kind of does it, but then you don't see all the messages meta-data and if you move it to a new folder, the link breaks.  A long time ago, I tried notebook-like application called evernote, which could link to outlook mail, but it was a desktop app with a local file that wasn't portable unless I carried a thumb drive around.  (Of course now evernote is working on a web version.)&lt;br /&gt;&lt;br /&gt;In violation of GTD principles, I've added @today and @thisweek tags.  This way if I lose focus on just what I *need* to be doing right now, I click on those labels.  In the week I've been using this, I've found this very convenient.  "Today" and "this week" covers my most common short term horizons.  When I do a weekly review (probably Friday afternoon or Monday morning), I can label things with "@thisweek" as I come across them.  (Maybe I should add a @thisFY -- fiscal year?)&lt;br /&gt;&lt;br /&gt;What do I do when I finish a task?  At first, I just deleted them, which didn't really bother me too much, but then I had a better idea.  I created a new "Journal" notebook.  I make a new section for each day, 2008.03.06, 2008.03.07, etc.  Then, when I complete a task, I select "Move" and select "Journal" and section "2008.03.07."  That way I know what I did today.  Pretty neat, huh?&lt;br /&gt;&lt;br /&gt;So far my annoyances with this system are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Keyboard shortcuts.  Geez, are there any?  I can't find any documentation although I accidentally figured out that hitting the right arrow twice at the end of a note begins a new one.&lt;/li&gt;&lt;li&gt;Not being able to create links with my work email quickly.  I usually just annotate "from:Fred sent:3/06/2008" which I can cut and paste into windows desktop search and find it in a jiffy, but it's not ideal.  I could forward to gmail, but that has its own issues, and it takes several minutes for the forwarded mail to arrive.&lt;/li&gt;&lt;li&gt;Google notebook's mobile version doesn't support labels.  One workaround here is to put my mobile contexts (like @errand) into a next actions notebook like &lt;a href="http://lifehacker.com/software/geek-to-live/getting-things-done-with-google-notebook-256844.php"&gt;he does&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7499878929103599088?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7499878929103599088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7499878929103599088' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7499878929103599088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7499878929103599088'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/03/my-nascent-gtd-system.html' title='My nascent GTD system'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-2810841941319394410</id><published>2008-03-01T07:18:00.001-08:00</published><updated>2008-03-01T07:27:29.751-08:00</updated><title type='text'>It's been a while since I've posted here</title><content type='html'>I should probably start doing more learning and less &lt;a href="http://seegregrun.blogspot.com"&gt;running&lt;/a&gt;.  It's been over a year since I've put anything hear.&lt;br /&gt;&lt;br /&gt;My running log project has been languishing.  When last I left it, I had decided I would use pygtk, libglade, matplotlib, numpy, and sqlobject.  This is a nice solid, pretty mature base for such a project.  Then, of course, I'm tempted to use the enthought tools, but it seems to be a moving target and documentation can be tough to come by.  I'm tempted though because it looks like "cool stuff" and coming up with a project to force myself to learn it might be worthwhile.  Finally, my unfocused brain is thinking about implementing it as a web application using turbogears in order to learn a different set of "cool stuff."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-2810841941319394410?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/2810841941319394410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=2810841941319394410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/2810841941319394410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/2810841941319394410'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2008/03/its-been-while-since-ive-posted-here.html' title='It&apos;s been a while since I&apos;ve posted here'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-6314775635160793611</id><published>2007-03-11T14:10:00.000-07:00</published><updated>2007-03-11T14:23:01.282-07:00</updated><title type='text'>What's new?</title><content type='html'>Picked up Zen and the Art of Motorcyle Maintenance off my shelf and started reading the first chapter.  I found one of my favorite quotes:  "What's new?" is an interesting and broadening eternal question, but one which, if pursued exclusively, results only in an endless parade of trivia and fashion, the silt of tomorrow.&lt;br /&gt;&lt;br /&gt;I started playing with the HRM program again yesterday and made a little progress on displaying the log summary data.  I also changed the user interface arrangement to match more of an email look and feel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-6314775635160793611?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/6314775635160793611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=6314775635160793611' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/6314775635160793611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/6314775635160793611'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/03/whats-new.html' title='What&apos;s new?'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-6489403226600909816</id><published>2007-01-26T22:39:00.000-08:00</published><updated>2007-01-26T22:43:43.305-08:00</updated><title type='text'>kiwi</title><content type='html'>After playing around with kiwi today, I decided to put it aside for awhile.  It looks promising, but I started to get the feeling I was off on a tangent.  One thing I liked was that it didn't seem as insistent as traits was on what I use for a data model.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-6489403226600909816?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/6489403226600909816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=6489403226600909816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/6489403226600909816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/6489403226600909816'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/kiwi.html' title='kiwi'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-5830892977505204666</id><published>2007-01-24T07:06:00.000-08:00</published><updated>2007-01-24T07:10:27.352-08:00</updated><title type='text'>form validation</title><content type='html'>One of the nice things about Traits UI was that once you described the data, the validation of user input took care of itself.  In my new Traits UI-less world, I'll have to find another way to do that.  Being lazy, I googled around for existing libraries.  &lt;a href="http://formencode.org"&gt;Formencode&lt;/a&gt; does this for html and isn't tied to html, but I haven't found examples using pygtk.  It's also supposed to be used by sqlobject?  Maybe I can rely on sqlobject exceptions to do the work for me?  Another possibility is &lt;a href="http://www.async.com.br/kiwi/"&gt;kiwi&lt;/a&gt;, which actually serves as an MVC framework of sorts for pygtk.  I will say I'm loathe to include more dependencies, but kiwi doesn't scare me that much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-5830892977505204666?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/5830892977505204666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=5830892977505204666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/5830892977505204666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/5830892977505204666'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/form-validation.html' title='form validation'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-2405798529290045842</id><published>2007-01-23T20:06:00.000-08:00</published><updated>2007-01-23T20:20:56.305-08:00</updated><title type='text'>splits -- some progress</title><content type='html'>I'm writing splits from python, pygtk/libglade, matplotlib, and sqlobject/pysqlite2.  I've written the code to pull the data from STraM, which uses an access database and a set of files (for storing the R-R interval data), using odbc from the pywin32 extensions.  The data is then stored in an sqlite3 database, which has the very nice property of being binary compatible across platforms.  The would-be linux user (like myself) can install the windows app, import the data, and see how he likes it on windows.  Then, if he's so inclined, he can start using the program on linux.&lt;br /&gt;&lt;br /&gt;He can do all of this if I finish writing it that is :-)  Here's something at least.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_jRibHCoRTc0/RbbeBcSxI4I/AAAAAAAAAA0/SGKm6Di4I-g/s1600-h/screenshot.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_jRibHCoRTc0/RbbeBcSxI4I/AAAAAAAAAA0/SGKm6Di4I-g/s320/screenshot.JPG" alt="" id="BLOGGER_PHOTO_ID_5023446550734513026" border="0" /&gt;&lt;/a&gt;OK, it's not much, but I figured out how to do listviews in gtk and embed a matplotlib graph.  On the backend, I've got the persistence piece figured out, which was a stumbling block before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-2405798529290045842?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/2405798529290045842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=2405798529290045842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/2405798529290045842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/2405798529290045842'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/splits-some-progress.html' title='splits -- some progress'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_jRibHCoRTc0/RbbeBcSxI4I/AAAAAAAAAA0/SGKm6Di4I-g/s72-c/screenshot.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7017822053370715216</id><published>2007-01-23T19:22:00.000-08:00</published><updated>2007-01-23T19:30:35.051-08:00</updated><title type='text'>version control and plain text is good</title><content type='html'>I started using subversion for a few coding projects, keeping the repository on my web host, so I can "svn update" and "svn checkout" from wherever.  Very nice.  Why can't life be this nice for projects other than software?  How about that report your working on?  Well, the problem is binary formats.  How do you handle conflict resolution?  I'm sure if you're working on a word document there's some method for conflict resoluton, but I'm pretty sure it involves some big, complicated tool.  Maybe I'm just living in the past, but it seems like things were easier when I wrote papers in LaTeX and they looked great.  Can life still be lived in plain text?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7017822053370715216?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7017822053370715216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7017822053370715216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7017822053370715216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7017822053370715216'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/version-control-and-plain-text-is-good.html' title='version control and plain text is good'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7074532574240911100</id><published>2007-01-03T15:19:00.000-08:00</published><updated>2007-01-03T15:21:27.928-08:00</updated><title type='text'>more implementation, less invention</title><content type='html'>Ironically enough, an email to the enthought list with a link to &lt;a href="http://www.zedshaw.com/essays/c2i2_hypothesis.html"&gt;this article &lt;/a&gt;convinced me to just use python-glade, matplotlib, and sqlite.  These are all known quantities and I can easily see a straight line from here to the finish with them.  It might be less elegant, require more code, and be less easy to change in the future, but at least I can see the path!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7074532574240911100?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7074532574240911100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7074532574240911100' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7074532574240911100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7074532574240911100'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/more-implementation-less-invention.html' title='more implementation, less invention'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7653564454997526126</id><published>2007-01-02T12:45:00.000-08:00</published><updated>2007-01-02T14:00:32.596-08:00</updated><title type='text'>glade pygtk matplotlib tutorial</title><content type='html'>I read &lt;a href="http://www.serpia.org/pygtk"&gt;a tutorial&lt;/a&gt;  for embedding matplotlib in a pygtk application!  Cool, now I can expand my "hello, world" python-glade playing with "hello graph!"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7653564454997526126?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7653564454997526126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7653564454997526126' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7653564454997526126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7653564454997526126'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/glade-pygtk-matplotlib-tutorial.html' title='glade pygtk matplotlib tutorial'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-7762947092270675434</id><published>2007-01-02T12:02:00.000-08:00</published><updated>2007-01-02T12:18:50.453-08:00</updated><title type='text'>A project has a plan</title><content type='html'>I don't know why this thought struck me as I was re-reading http://www.emacswiki.org/cgi-bin/wiki/PlannerModeCommentary, but it did.&lt;br /&gt;&lt;br /&gt;Right now, I have project pages on my wiki with sections entitled "Next Actions," "Projects," "Someday/Maybe," and "Notes."  Projects and sub-projects are where sub-projects go.  The planning sort of goes on in the "Projects" section although it isn't explicit.&lt;br /&gt;&lt;br /&gt;Maybe each project needs a plan with required sections (could be a just bullet instead of a section).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"First, create the idea, what you want to achieve."  A section called "idea" or maybe "Desired outcome" could spell this out.&lt;/li&gt;&lt;li&gt;"...step by step, identify every barrier to the realization of your idea, and devise a countermeasure to overcome it."  This is similar to the "obstacles" section of David Pollard's GTD system.  Makes sense.&lt;/li&gt;&lt;li&gt;"Third is to break the stages of the plan into parts that are not overwhelming in their complexity. It is at during this phase that a plan is turned into task items, each to be accomplished within the span of one day’s time. If a task requires several days, break it up further. The smaller it is, the less your mind will recoil from attempting it."  It seems I have this in "Next Actions" but should each sub-project have its own page with its own next actions?  I don't think so, but that just might be recoiling because it wouldn't be easy with my current tool.&lt;/li&gt;&lt;li&gt;"Fourth is to monitor your progress, identifying problems and correcting for them as you go. Some plans start out unachievable, and remain that way indefinitely, due to a simple lack of observation. If nothing is working for you, change it. Otherwise, your plan is merely a well-crafted wish."  In GTD-land, this is the weekly review.  Doing this regularly is on my todo list!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-7762947092270675434?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/7762947092270675434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=7762947092270675434' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7762947092270675434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/7762947092270675434'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/project-has-plan.html' title='A project has a plan'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-659341018157185725</id><published>2007-01-02T09:49:00.000-08:00</published><updated>2007-01-02T09:59:33.775-08:00</updated><title type='text'>use traits/traits UI only from enthought tool suite?</title><content type='html'>I played with python-glade today thinking maybe I'd just try things the old-fashioned way.  I started to think about it though and while getting a data viewer up and running wouldn't be hard, I'd have to write code to validate the inputs when somebody wanted to add a log entry (enter distance, etc.).  That sounds painful, so maybe I'll give traits a shot.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-659341018157185725?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/659341018157185725/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=659341018157185725' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/659341018157185725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/659341018157185725'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/use-traitstraits-ui-only-from-enthought.html' title='use traits/traits UI only from enthought tool suite?'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-5260285841305986023</id><published>2007-01-01T16:36:00.000-08:00</published><updated>2007-01-01T18:57:07.412-08:00</updated><title type='text'>Splits -- should I build it with the enthought tools?</title><content type='html'>I tentatively named my little STraM replacement "Splits."  (Suunto Training Manager -- aka STraM is the software the T6 uses.)  Now what should I build it from?  I decided use python because that's what I'm familiar with and I think it's quite nice.  I figured I'd need a UI, a graphing library, and a database that have python bindings.&lt;br /&gt;&lt;br /&gt;My initial inclination was to use wxpython, matplotlib, and pysqlite2, but the enthought tool suite was kind of intriguing and without much work I created some model classes and views and then did the magic "splits.configure_traits()" and got a nice gui I could use to browse logs like so&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jRibHCoRTc0/RZm53SD8mwI/AAAAAAAAAAM/N1SGwDgjWRk/s1600-h/splits_screenshot1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_jRibHCoRTc0/RZm53SD8mwI/AAAAAAAAAAM/N1SGwDgjWRk/s320/splits_screenshot1.jpg" alt="" id="BLOGGER_PHOTO_ID_5015244019446094594" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_jRibHCoRTc0/RZnDDSD8mxI/AAAAAAAAAAU/YZW-6VECjwQ/s1600-h/splits_screenshot2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_jRibHCoRTc0/RZnDDSD8mxI/AAAAAAAAAAU/YZW-6VECjwQ/s320/splits_screenshot2.jpg" alt="" id="BLOGGER_PHOTO_ID_5015254121209174802" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;So far I've just used traits and don't know quite where to go from there.  There's a lot of tantalizing "stuff" in the enthought tool suite but not much in the way of documentation (or an indication of whether it works).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I need some method for storing the data -- "persistence" for those with computer science degrees.  I see   enthought.&lt;span id="st" name="st" class="st"&gt;persistence&lt;/span&gt;.state_pickler.py, enthought.persistance.versioned_unpickler.py, enthought.sweet_pickle.  Is one of these good enough for me to entrust someones sacred running logs with?  I'm pretty confident in sqlite, but I don't know about pickling.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I made the simple graphs in the screenshot just using Plot from enthought.model.numeric_ui which I happened upon somehow.  How configurable is this?  Should I use chaco?  chaco2?  pyface with matplotlib?&lt;/li&gt;&lt;li&gt;What other tools are in the enthought tool suite I can use?  I see enthought.units.  Maybe this will help me not reinvent the wheel in handling mph, minutes/mile, km/h, etc.&lt;/li&gt;&lt;li&gt;Should I be using this envisage framework?  What is this?  What would it buy me?  Is there any documentation?  As far as I can tell the best way to understand it is for me to look at &lt;a href="http://www.eclipse.org/"&gt;eclipse&lt;/a&gt;, a java framework on which envisage is based.&lt;/li&gt;&lt;/ul&gt;Lots of questions.  Figuring out the way I'm going to store data is really the next step.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-5260285841305986023?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/5260285841305986023/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=5260285841305986023' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/5260285841305986023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/5260285841305986023'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2007/01/splits-should-i-build-it-with-enthought.html' title='Splits -- should I build it with the enthought tools?'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_jRibHCoRTc0/RZm53SD8mwI/AAAAAAAAAAM/N1SGwDgjWRk/s72-c/splits_screenshot1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-37665376.post-6281307058891968530</id><published>2006-12-31T09:49:00.000-08:00</published><updated>2006-12-31T19:07:10.923-08:00</updated><title type='text'>Getting back to linux</title><content type='html'>I'm trying to make the move back to linux.  I used linux as my home desktop from October 1993 to January of 2006 before the accumulation of windows-only software and gadgets (running watch, digital video camera, etc.) had me giving in.  Since then, I've been trying to figure out how to get back to linux one program at a time.  To that end I've been toying with the idea of writing a cross-platform replacement for the software my Suunto T6 uses.  I've been playing with the enthought tool suite on windows and have made some progress.  Now I'm to get what I have working on windows working on linux.&lt;br /&gt;&lt;br /&gt;About a month ago, I bought a cast off computer from work and a KVM switch so I could have a linux box sitting next to my windows box.  With the holidays, I finally got a chance to mess with it.  Trying to install Ubuntu 6.10 and get it set up, I hit a few bumps.  The basic Ubuntu installs beautifully.  The first headache came when I tried to get flash, etc. installed to "desktopify" my new box.  There seemed to be "more than one way to do it" but I ended up using something called automatix2 and was on my way.&lt;br /&gt;&lt;br /&gt;Next on the list was installing the packages that I need to do an in-place build of the enthought tool suite.  Scipy was a problem.  I installed python-scipy and the myriad of stuff it wanted to install, but the build died right away because it couldn't import scipy_distutils.  So I tried to install scipy-core which provides scipy_distutils.  Unfortunately python-scipy-core conflicts with python-scipy even though it recommends python-scipy.  Hmm.  Well, python-scipy includes numpy.distutils instead of scipy_distutils so I built with numpy and it seemed to compile OK (some warning, but nothing alarming).   Running the testing/marathon.py though had lots of failed tests.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/37665376-6281307058891968530?l=seegreglearn.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://seegreglearn.blogspot.com/feeds/6281307058891968530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=37665376&amp;postID=6281307058891968530' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/6281307058891968530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/37665376/posts/default/6281307058891968530'/><link rel='alternate' type='text/html' href='http://seegreglearn.blogspot.com/2006/12/getting-back-to-linux.html' title='Getting back to linux'/><author><name>Greg</name><uri>http://www.blogger.com/profile/02906887432976179964</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_jRibHCoRTc0/SVzbyK0b1jI/AAAAAAAADSI/btE4dbL4XQA/S220/greg_run.jpg'/></author><thr:total>0</thr:total></entry></feed>
