~~~~
Friday, February 19, 2016
Wednesday, February 10, 2016

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License
~~~~

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License
~~~~
Sunday, February 7, 2016
Saturday, February 6, 2016
Sweetgum Fruit

This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
~~~~
Sunday, December 27, 2015
We conceive of limits to variation in animal behaviors and morphology. When we deduce something about the constraints acting on the development of an organism and on the evolution of a species we must distinguish between two kinds of observed limits. The first kind is a limit due to actual biological limitations, whether on embryological development, lack of viability (i.e., animals having the variation die before they can reproduce), or lack of fecundity. The second kind is a limit on what we as scientists can actually observe due to lack of a fossil record either for the animal as a whole or for the specific variation in question, or due to limitations in our methods or devices. The upshot of this difference is that the first kind of limit is fit for building our philosophy of nature while the second kind is misleading and has the power to render our predictive tools worthless.
There are, of course, mitigations to the perfidy of the second kind of limit. For instance, we can determine in some cases that a variation, such as a distinctive birdsong sung by an ancient bird, would not be visible to our tools. In addition, constraints determined in one area may depend on constraints in another area which confound limits of the second kind. Ultimately, these ways of thinking lead to the practice of integrating heterogeneous models of living systems into a single model. The hope is that there is a dependence between parts of the system which constrain those variations which cannot be constrained through observation. In the limit, this approach frees us entirely from the "black swans" since it produces an emulation of reality. In the real world, however, where computational limitations prevent perfect copies of reality, there may yet be independent pockets of variability that we will always fail to pick up either in observations or in our models.
~~~~
Monday, July 20, 2015
Kinds of tests
- Integration test
- A test of the boundary between components. An integration test in project A for components B confirms that the interface A expects of B matches up with the interface that B provides. Such tests make sense whenever component B is not available to A's developer at the time that she writes A.
- Unit test
- A test of the primary functionality of a component and of the edge cases and error modes of the component. The component for which a unit test is written should not have untested sub-parts -- in other words, the unit test assumes that below the level of abstraction at which the test is performed, all components perform perfectly. It may be necessary to make "perfect" sub-parts (e.g., "mock" objects) to effectively test at the desired level of abstraction.
- Acceptance test
- A test of a component against customer requirements. These are tests which must be passed for acceptance of the component by the customer.
- Formal test
- A test of the mathematical abstraction of the software component against known failure modes which can be formally proven to occur, not occur, or possibly occur under a class of inputs.
~~~~
Sunday, July 19, 2015
~~~~
Saturday, June 13, 2015
Saturday, May 9, 2015
Where terrorism is taking us
~~~~
Saturday, February 28, 2015
Kind of a cool idea: a recorder that allows you to pin back later audio onto an earlier part of a recording. You, an interviewer, are recording an interview, and you hear the interviewee say something interesting about XXX. You hit a button on your audio recorder, the interview goes on to YYY and ZZZ, and then you say, "Can you say a little more about XXX?" You hit the button again and the interviewee expands on XXX. You hit another button. On the first button press, a pin is attached at the point where the interviewee mentioned XXX, when you press the button again a thread is attached to the pin with the audio from that point attached. When you press the other button, the thread is cut. The linear track of audio as spoken is preserved the whole way, but now there's another track where you can attach a single excerpt from later parts in the track to earlier parts.
There are, of course, limitations to the method. You can't attach a thread to either YYY or ZZZ with only the two buttons. You may be able to return to XXX depending on how we set the semantics of that first button, but it makes much more sense for that button to do the same thing as before by either pinning to one of the second-track threads in a sort-of skewed tree:
-------------
`---------
`-----
`--
or to re-pin on the base track (p means pin):
--------p---- `---------Maybe it would be better to have a three-button system to set multiple pins with the first button, a second button to attach the thread to the earliest pin, and a third button to cut the current pin.
I'm focusing on a simple button system which can be managed more or less without thinking about what thread you're on since I think that, when I talk, my model of the conversation has this sort of folding linearity that matches with this system. Obviously, a full tablet computer with a display of these threads would allow for great flexibility, but wouldn't that display get in the way of engaging with the interviewee, the focus of your activity? There's also much more applicability for the simple thing than the complicated pretty thing that's all about itself and not about the thing that you're doing with the thing. I might permit a dial of sorts that allows you to move between pins more freely.
~~~~
Tuesday, February 10, 2015
Motion prediction
I'm a casual juggler and I'm wondering whether, when I juggle, I'm predicting the parabolic path of the balls as they fall through the air or I'm doing something else, like predicting a linear continuation of the balls' motion from any given point. To test this, I would have myself standing or sitting with my head in a fixed position. I would have a machine for throwing balls in a predictable arc (e.g., a batting cage ball delivery system). I would have the balls thrown with a spread of trajectories that land within the range of my arms for catching. I would have a head-mounted camera recording approximately the visuals that I could see. I would have a set of goggles that could obscure my vision after a specific time-delay from launching the balls. Each trial would consist of the throwing machine throwing a ball and myself attempting to catch. To establish a baseline, I would attempt to catch the balls without my vision being obscured at any point in the ball's arc. Then, I would have my vision obscured before the top of the arc, at the top, and after the top until the next trial. I would have an assistant record the trials on which I caught the ball and the ones on which I did not.
In order to reject the theory that I was calculating parabolic arcs, my performance when my vision was obscured would have to be close to as-good-as my performance when it was not. We would still expect that when my vision was blocked earlier, my performance would be worse than later. The camera recordings are to explore whether an alternate strategy, linear extrapolation, could be in effect. For the failed trials, we would predict the linear path of the ball from the time, maybe .1s, before my vision was obscured and see if my hand placement was closer to intersecting that path than the parabolic.
Since I thought of this experiment before consulting any of the literature, I'm going to do a little study. I'm starting with these here:
- http://www.sciencedirect.com/science/article/pii/S0042698908001946
- http://www.sciencedirect.com/science/article/pii/S0028393204002817
~~~~
Friday, February 6, 2015
Tuesday, January 20, 2015
Debugging techniques
The memory is allocated from the bottom of the stack and the top of the heap. Now, students had asked the obvious question of "what happens when they meet?" The obvious answer was that there would be an exception of some kind. I don't know if we ever probed into how that exception worked though. It's pretty clear that it couldn't be a segmentation fault. The memory on either side of that gap belongs to the process, so there's no invalid address being accessed.
Recently I read that the collision is handled by marking a memory page set between the stack and heap areas as a guard page. When the page is accessed, this signals an interrupt to the processor similar to what occurs in a page fault and thus allows the operating system to resume control and handle the overflow by, for instance, killing the process. Guard pages can also be used for debugging a process with unknown behavior that is presumed to access a certain portion of memory in a critical part of its operation, and this technique is valuable for software that subverts debugging with soft breakpoints (which temporarily modify program code) by checksumming code-in-execution.
~~~~
Wednesday, December 10, 2014
Owning a Kindle tablet
~~~~
Thursday, December 4, 2014
The API provides a way for URIs referenced from within the stylesheet instructions or within the transformation to be resolved by the calling application. This can be done by creating a class that implements the URIResolver interface, with its one method, URIResolver.resolve(java.lang.String, java.lang.String), and use this class to set the URI resolution for the transformation instructions or transformation with TransformerFactory.setURIResolver(javax.xml.transform.URIResolver) or Transformer.setURIResolver(javax.xml.transform.URIResolver). The URIResolver.resolve method takes two String arguments, the URI found in the stylesheet instructions or built as part of the transformation process, and the base URI against which the first argument will be made absolute if the absolute URI is required. The returned Source object must be usable by the transformer, as specified in its implemented features.
~~~~
Thursday, November 27, 2014
Essie Mae Washington-Williams
It's not so easy, I think, to not be acknowledged as your father's offspring for years. I'm rather impressed by Mrs. Washington-Williams take on the historical importance of her heritage and the importance for blacks to join in our nation's complex and sometimes unsavory history.Essie Mae Washington-Williams (October 12, 1925 – February 4, 2013) was an American teacher and writer. She is best known as the oldest natural child of Strom Thurmond, Governor of South Carolina and longtime United States Senator, known for his pro-racial segregation policies. Of mixed race, she was born to Carrie Butler, a 16-year-old black girl who worked as a household servant for Thurmond's parents, and Thurmond, then 22 and unmarried. Washington-Williams grew up in the family of one of her mother's sisters, not learning of her biological parents until 1938 when her mother came for a visit and informed Essie Mae she was her mother. She graduated from college, earned a master's degree, married and had a family, and had a 30-year professional career in education.
Washington-Williams did not reveal her biological father's identity until she was 78 years old, after Thurmond's death in 2003. He had paid for her college education, and took an interest in her and her family all his life. In 2004 she joined the Daughters of the American Revolution and United Daughters of the Confederacy through Thurmond's ancestral lines. She encouraged other African Americans to join such lineage societies, to enlarge the histories they represent. In 2005, she published her autobiography, which was nominated for the National Book Award and a Pulitzer Prize.
~~~~
Wednesday, November 19, 2014
Tuesday, November 18, 2014
Python3 or Bust
In the future, I might post about how the Python 2/3 issues, as well as Ubuntu release cycles and the current Haiku OS discussion on a non-alpha release, have affected my thoughts on software versions.
~~~~







