Knowing.NEThttps://knowing.net/2024-03-18T12:00:00-10:00Sly Flourish's "Luck Replacing Inspiration" in D&D is +3 to players2024-03-18T12:00:00-10:002024-03-18T12:00:00-10:00larrytag:knowing.net,2024-03-18:/posts/2024/03/sly-flourishs-luck-replacing-inspiration-in-dd-is-3-to-players/<p>We used Sly Flourish's <a href="https://slyflourish.com/luck.html?rss=1">Replacing 5E Luck With Inspiration</a> in our last 2 sessions and everyone loved it after a few reminders to "you miss, but turn your luck die" (everyone has a D6 in front of them with 6 indicating 0 luck).</p>
<p>But this mechanic, unlike inspiration, happens <em>a …</em></p><p>We used Sly Flourish's <a href="https://slyflourish.com/luck.html?rss=1">Replacing 5E Luck With Inspiration</a> in our last 2 sessions and everyone loved it after a few reminders to "you miss, but turn your luck die" (everyone has a D6 in front of them with 6 indicating 0 luck).</p>
<p>But this mechanic, unlike inspiration, happens <em>a lot</em>. So I wrote a quick computer program to calculate how often luck could be used to make a roll. The answer is a little over 15% of the time, which is the equivalent of +3. So, as a DM you probably want to add +3AC to all your monsters and relevant DCs to maintain the same difficulty: there will be more initial misses, but the players will be able to use this mechanic to balance things out again. </p>
<p>Since the DM can award luck just as they can award inspiration, you aren't nerfing the mechanic by upping the AC/DC: the players just have a new mechanism that (in my short experience) helps with the save-or-suck moments. </p>Thoughts on Hawkins’ “A Thousand Brains”2024-03-06T12:00:00-10:002024-03-06T12:00:00-10:00larrytag:knowing.net,2024-03-06:/posts/2024/03/thoughts-on-hawkins-a-thousand-brains/<p>Jeffrey Hawkins is the CEO of Numenta, a company that has been pursuing machine intelligence since the early 2000s. Prior to that he was the founder of Palm Pilot, the most successful Personal Digital Assistant, the sale of which presumably has funded Numenta this part quarter-century.</p>
<p>Hawkins’ approach is iconoclastic …</p><p>Jeffrey Hawkins is the CEO of Numenta, a company that has been pursuing machine intelligence since the early 2000s. Prior to that he was the founder of Palm Pilot, the most successful Personal Digital Assistant, the sale of which presumably has funded Numenta this part quarter-century.</p>
<p>Hawkins’ approach is iconoclastic. He has no interest in the “biologically inspired” artificial neural networks (ANNs) that the rest of the industry had largely abandoned by the early 2000s and returned to in the teens. Hawkins does not want to be “inspired” by the brain’s components, he wants to <em>understand</em> the brain’s processes and, presumably, recreate them. </p>
<p>Hawkins’ focus is the neocortex, the wrinkly folded surface of the brain, which is only about the size of a dinner napkin and a mere 2.5mm thick. I know nothing about brain structure, so I’ll just take every factual thing offered by Hawkins as true:</p>
<blockquote>
<p>Under one square millimeter of neocortex (about 2.5 cubic millimeters), there are roughly one hundred thousand neurons, five hundred million connections between neurons (called synapses), and several kilometers of axons and dendrites…. here are roughly 150,000 cortical columns stacked side by side in a human neocortex.</p>
</blockquote>
<p>The wild thing about those numbers is that, by the standards of today’s Machine Learning (ML) models, those are quite manageable sizes! It wouldn’t be trivial to gather enough computers to simulate <em>150,000</em> cortical columns, but simulating a few would seem do-able just from a back-of-the-envelope “How much RAM would the computer need?” perspective.<sup><a href="#fn1">1</a></sup></p>
<p>Hawkins has wrote 2 general audience books on his work. In his 2006 book, <em>On Intelligence</em>, which <a href="https://knowing.net/posts/2006/05/on-on-intelligence/">I wrote about back in the day</a>, he focused on the ability of neocortical columns to recognize patterns. In 2021’s <em>A Thousand Brains</em>, he claims to have cracked the nut of how the neocortex works. The first element is:</p>
<ol>
<li>
<blockquote>
<p>The big insight I had was that dendrite spikes are predictions. A dendrite spike occurs when a set of synapses close to each other on a distal dendrite get input at the same time, and it means that the neuron has recognized a pattern of activity in some other neurons. When the pattern of activity is detected, it creates a dendrite spike, which raises the voltage at the cell body, putting the cell into what we call a predictive state. The neuron is then primed to spike.</p>
</blockquote>
</li>
</ol>
<p>Which neurons are spiking determine the predictions that neocortical column. Our memory state is stored in the synapses between neurons. </p>
<ol>
<li>
<blockquote>
<p>If any input doesn’t match the brain’s prediction—perhaps my spouse fixed the igniter—then my attention is drawn to the area of mis-prediction. This alerts the neocortex that its model of that part of the world needs to be updated.</p>
</blockquote>
</li>
</ol>
<p>This is not that different, it seems to me, from the gradient descent used to train ANNs, which modify weights based on the “steepness” of their distance from a desired result. Hawkins introduces the subjective experience of “attention” which is intriguing, but seems to me speculative.<sup><a href="#fn2">2</a></sup></p>
<p>And then comes the doozy:</p>
<ol>
<li>
<blockquote>
<p>Reference frames were the missing ingredient, the key to unraveling the mystery of the neocortex and to understanding intelligence…. The hypothesis I explore in this chapter is that the brain arranges all knowledge using reference frames, and that thinking is a form of moving.</p>
</blockquote>
</li>
</ol>
<p>When Hawkins speaks of reference frames, he’s talking about no more and no less than the construct used in 3D programming: </p>
<p><img alt="reference frame" src="https://knowing.net/images/3dreferenceframe.jpeg"></p>
<p>Well, maybe a <em>little</em> more, as he allows that “…it is possible that the reference frames that are most useful for certain concepts have more than three dimensions.” This is a <em>big</em> caveat that I’ll return to in a bit.</p>
<p>There are two things that jump out to me about Hawkins’ model:</p>
<ol>
<li>Generating reference frames is far from an easy problem, and</li>
<li>If thinking is movement, then that should be testable. <img alt="chess board" src="https://knowing.net/images/hawkins-chess.png">
“Is move e3-c3 a good move?” should take more time to answer than “Is move e3-e8 a good move?” because there’s more movement involved. Right? (Yes, I know there're no kings so it's not a real situation.)</li>
</ol>
<p>Well, maybe not, if there are extra dimensions involved. If you add a new dimension, you can get from <em>here</em> to <em>there</em> without going through the intermediate locales in the old dimensions. (Refer to any science fiction movie where they try to explain “hyperjumps” and they fold up a piece of paper and stick a pin through it.)</p>
<p>So maybe when you know a lot about chess you don’t use a 2D or 3D reference frame, but one with a bunch of dimensions that allow you to quickly “hyperjump” between thoughts. </p>
<p>But if so, that raises several questions: </p>
<ul>
<li>Is it easy to add dimensions to reference frames? Does it happen all the time or is it rare?</li>
<li>How many dimensions do we have for abstract concepts like “democracy,” or “politeness”? Do they have the same number of dimensions? </li>
<li>Are conceptual reference frames Euclidean, with orthogonal axes? What defines orthogonality in the reference frame for "democracy"? How are these geometries built?</li>
<li>Would it be accurate to say that word embeddings are also using “reference frames”? Are the referents of the high-dimensional reference frames we use for “democracy” and the like more accessible than those of Word2Vec? Are they polysemantic? </li>
</ul>
<p>And most importantly:</p>
<ul>
<li>When you’re talking about arbitrary-dimensional reference frames, does the claim “thinking is a form of moving” clarify things? Because movement in arbitrary-dimensional space is not very constrained: it is harder to create the types of “you can’t get there from here,” or “to get to there you have to pass through this intermediate area,” things that intuitively crop up when the claim is made about 2D or 3D reference frames. </li>
</ul>
<p>I’m just a dumb programmer and while I know it’s too much to hope for a general-audience book to provide example code, or even a mathematical equation or two, the lack of any explanatory diagrams beyond a cutaway schematic of the cells in a neocortical column feels unsatisfying. The chasm between “this is definitely how the neocortex is structured,” and “this is how thinking works,” seems unbridged, at least for me. </p>
<p>Outside of his books, there doesn’t seem to be much code-based exploration of Hawkins’ ideas. There’s exactly one Github repository and paper that tries to convert his concepts into code and it seems pretty interesting, although hardly a breakthrough. What goes on inside Numenta seems a mystery: I’ve asked a few times over the past twenty years in various discussion groups to little response. Numenta was in the news last year for <a href="https://www.numenta.com/blog/2023/04/06/intel-hbm-inference/">accelerating inference in Large Language Models</a>, which seem like the perfect exemplar of the “biologically inspired but not really” approaches that Hawkins disdains. </p>
<p><a name="fn1">1</a>: Well, maybe not. It depends on the complexity of the operations done within the cortical columns. For the “biologically inspired” “deep learning” systems we have grown used to, these operations tend to actually be fairly simple and massively parallel. Perhaps that won’t hold true for the types of systems Hawkins envisions.</p>
<p><a name="fn2">2</a>:Hawkins’ “attention” is the common-sense meaning of the term, not the “the degree to which another thing should modify this” meaning that is how "attention" is used in modern ML.</p>Breakfast in Liliha2024-02-26T12:00:00-10:002024-02-26T12:00:00-10:00larrytag:knowing.net,2024-02-26:/posts/2024/02/breakfast-in-liliha/<p>The other day we were eating breakfast at the counter of the wonderful Liliha Bakery in Oahu and were chatting with a local guy who told us he was 84. Really nice conversation until the pancakes were almost gone when he said "Not to get into politics but..." <em>pregnant pause …</em></p><p>The other day we were eating breakfast at the counter of the wonderful Liliha Bakery in Oahu and were chatting with a local guy who told us he was 84. Really nice conversation until the pancakes were almost gone when he said "Not to get into politics but..." <em>pregnant pause</em> "We really need Trump." </p>
<p>This guy was of Japanese descent, maybe mixed, and he was born in Hawaii in, apparently, 1939 or 1940. So... he <em>probably</em> spent the first several years of his life in an internment camp. And yet, for the next few minutes, while Tina was muttering to me "Don't even try," I heard... well, you know... How THEY are invading OUR nation and driving it to bankruptcy and, etc. etc. Thirty million illegal immigrants, he told me, in the past 4 years (that's 3x the <em>total</em> number of illegal immigrants).</p>
<p>It's not <em>just</em> white evangelicals. To this guy, THEY were Chinese people. Or, at least, Hawaii's threat came from the Chinese, but he quickly informed me that "all the blue states" were going bankrupt, so I imagine he had a few others in the THEY column. </p>
<p>Tribalism, of course, is part of human nature. And Hawaii, for all its diversity, has plenty of racism. But I would <em>think</em> a Japanese-American of a certain age would have alarm bells about anyone calling to "round up" millions. </p>
<p>So, what is it? Is Fox News so good at insinuating itself into the lives of older folk that this guy is just parroting what he's hearing day-in and day-out?</p>
<p>We wished him a good day and took an Uber back to the airport. Our driver, who I thought was in his mid-20s, turned out to be a 50-year-old Vietnamese immigrant who escaped to Malaysia in 1989 with his brothers in an open boat. His father, who had been a teacher, was "re-educated" and stayed in Viet Nam. Our driver became a US citizen in 94 and still sends his parents money and visits them when he can. </p>
<p>When we got to the airport, I remarked on the contrast between our two acquaintances. Tina said, "Immigrants: they get the job done."</p>Solution to "Can't open application 'xRC Simulator'" on Mac for FRC2024-01-28T12:00:00-10:002024-01-28T12:00:00-10:00larrytag:knowing.net,2024-01-28:/posts/2024/01/solution-to-cant-open-application-xrc-simulator-on-mac-for-frc/<p>The <a href="https://xrcsimulator.org">xRC Simulator</a> or Autodesk's <a href="https://synthesis.autodesk.com">Synthesis</a> allow First Robotic Competition teams to drive simulated robots around the season's field, allowing early practice with driving, viewlines, and team strategy. </p>
<p>While Synthesis seems to provide higher fidelity, xRC seems a little more user-friendly to me. </p>
<p>Installing on Windows is straightforward, but if …</p><p>The <a href="https://xrcsimulator.org">xRC Simulator</a> or Autodesk's <a href="https://synthesis.autodesk.com">Synthesis</a> allow First Robotic Competition teams to drive simulated robots around the season's field, allowing early practice with driving, viewlines, and team strategy. </p>
<p>While Synthesis seems to provide higher fidelity, xRC seems a little more user-friendly to me. </p>
<p>Installing on Windows is straightforward, but if you install on the Mac, you are likely to get a "Can't open application 'xRC Simulator'" that is different than the normal "Unknown developer" security warning. To fix it, open a terminal, switch to the directory in which you've unpacked the xRC Simulator and run:</p>
<div class="highlight"><pre><span></span><code>chmod +x xRC\ Simulator.app/Contents/MacOS/xRC\ Simulator
</code></pre></div>
<p>This means "Change the mode to 'Executable' of the file at {path}". After running this, you can close the terminal and run the xRC application. You will probably get the normal "Can't open this application because it's from an unknown developer," error. Open <code>Settings</code> | <code>Security</code> and find the checkbox that allows you to run the package.</p>Noodling about with a Neural Network Markup Language2024-01-09T12:00:00-10:002024-01-09T12:00:00-10:00larrytag:knowing.net,2024-01-09:/posts/2024/01/noodling-about-with-a-neural-network-markup-language/<p>Felt potentially communicative, might delete later.</p>
<p><img alt="Some sketches of neural net layer annotations" src="https://knowing.net/images/nnml_sketch.png"></p>Interested in ML?: The math can wait2024-01-05T12:00:00-10:002024-01-05T12:00:00-10:00larrytag:knowing.net,2024-01-05:/posts/2024/01/interested-in-ml-the-math-can-wait/<p>Focus on data transformation and scenarios, not math, if you want to get into real-world Machine Learning. Yes, you’ll eventually have to learn some math, but the abstraction level within ML engineering has already moved on. </p>
<p>Learning the theory and math at the foundations of Machine Learning is like …</p><p>Focus on data transformation and scenarios, not math, if you want to get into real-world Machine Learning. Yes, you’ll eventually have to learn some math, but the abstraction level within ML engineering has already moved on. </p>
<p>Learning the theory and math at the foundations of Machine Learning is like learning the architecture and instructions of CPUs. Yes, it helps A LOT. Eventually. But it’s not the wisest first step. </p>
<p>You’ll become much more fluent, much faster, by <em>doing</em> Machine Learning. And <em>doing</em> ML in the real world is more like remodeling a room than it’s like building a building from scratch. Or more like trying on outfits rather than sewing them. </p>
<p>Real world ML is generally about evolving your own data into being compatible with an <em>existing</em> ML solution and then further evolving things. And that’s a <em>faster</em> and <em>more fun</em> way to learn. </p>“Bright Young Women” review2023-12-19T12:00:00-10:002023-12-19T12:00:00-10:00larrytag:knowing.net,2023-12-19:/posts/2023/12/bright-young-women-review/<h1>Jessica Knoll’s “Bright Young Women”</h1>
<p>Jessica Knoll's "Bright Young Women" has such strong beginning and ending chapters, with stakes that are truly life-and-death, that the middle chapters are a bit of a let-down. The central thematic premise of the book is that, for perverse reasons, serial killers become celebrities …</p><h1>Jessica Knoll’s “Bright Young Women”</h1>
<p>Jessica Knoll's "Bright Young Women" has such strong beginning and ending chapters, with stakes that are truly life-and-death, that the middle chapters are a bit of a let-down. The central thematic premise of the book is that, for perverse reasons, serial killers become celebrities and, as part of that mythmaking, the become in the popular mind handsomer, more cunning, and more intelligent than they are in reality. Meanwhile, the people who we <em>should</em> be paying attention to-- the victims, survivors, and families -- are trivialized. </p>
<p>Knoll is steadfast in keeping the focus on her two protagonists: Pamela, the only eye-witness of The Defendant (as Knoll coldly allows the killer) at a murder scene, and Ruth, a woman who has been missing since encountering The Defendant almost 50 years ago. Pamela's narrative comes as flashbacks to the night of the attack in the late 1970s, the pursuit, rest, and trial of The Defendant, and a pandemic-era quest to resurface and resolve the ambiguities surrounding Ruth's disappearance. </p>
<p>Ruth's narrative moves forward from 1974 towards her disappearance. This is the central drama of the book. As readers we quickly know there are only two outcomes for Ruth: either she is murdered or there is some deus ex machina plot twist in which she changes identities and walks away from her life. Knoll substitutes the mystery of what happened to Ruth for the typical beats of a murder thriller. Knoll still gives us familiar tropes: the hasty and condescending detective seizing on a red herring, The Defendant evading the law, a trial with a precarious outcome, and so forth. But Knoll is adament in defanging The Defendant's grip on our imagination and we know very soon that at some point he's caught, at some point he's convicted, and at some point he's executed. </p>
<p>Unfortunately, Knoll's commendable focus on two characters whose outcomes we pretty-much know makes the middle part of the novel a little less compelling. Here, we learn much more about the Pamela and Ruth, their inner strengths and weaknesses, their successful and damaged relationships, and their personal challenges and growth. This is well-constructed and written, but sags in comparison to the high-wire tension that begins and ends the book.</p>My next project is melonheaded whales2023-11-26T12:00:00-10:002023-11-26T12:00:00-10:00larrytag:knowing.net,2023-11-26:/posts/2023/11/my-next-project-is-melonheaded-whales/<h1>Mantas Deployed, Time for Whales</h1>
<p>Since last Fall, I’ve been working on reidentifying reef manta rays with “low k-shot” (few labeled examples). That project is now deployed to the scientists and, until they start giving me feedback (and hopefully, more labeled data) pretty much at the finish line. </p>
<p>My …</p><h1>Mantas Deployed, Time for Whales</h1>
<p>Since last Fall, I’ve been working on reidentifying reef manta rays with “low k-shot” (few labeled examples). That project is now deployed to the scientists and, until they start giving me feedback (and hopefully, more labeled data) pretty much at the finish line. </p>
<p>My ultimate goal is to build a “bring your own species” reidentification pipeline. The technique(s) I use are well-trodden at the research level and are unlikely to get much more attention in the near-term: everyone’s agog about Large Language Models and Generative AI, which this is not. There might be a breakthrough in zero-shot reidentification, the situation where you’re going through your photos and not only say “I haven’t seen <em>this</em> individual before,” but a while later you say “Hey, that’s the new individual I saw 100 photos ago.” My manta model works very well with a dozen photos of an individual and works helpfully-well with as few as five, but doesn’t generalize helpfully below that (it’s better than random, but not likely going to put it in the first screen or two of results. </p>
<p>I chose mantas for two reasons: </p>
<p>1) There was already a very good paper and dataset <a href="tk">moskuyak link here</a>that I could use to validate my code.
2) I see boats heading to the manta ray feeding sites every night</p>
<p>Re-identifying cetaceans is also a well-trodden field from a research perspective. An organization called <a href="tk">happywhale</a> has a very large dataset of labeled photos and, for at least many species, some good reidentification models. I’m working with some proprietary data from a research organization and I don’t want to say any more than that the project involves melon-headed whales (P. electra). I’ve already done some Initial Data Analysis and a throwaway model that looks encouraging. The scientific goals go beyond re-identification and involve some pretty fun mathematics. From my perspective, a new species and dataset should allow me to help generalize my code towards the ultimate “bring your own species” goal. </p>
<p>I don’t know how long this project will last, as I might be able to contribute above-and-beyond the reidentification aspect. </p>On Animals and On GPT-42023-06-03T12:00:00-10:002023-06-03T12:00:00-10:00larrytag:knowing.net,2023-06-03:/posts/2023/06/on-animals-and-on-gpt-4/<p>Reading Susan Orleans' <a href="http://www.amazon.com/">On Animals</a> I'm struck by how <em>essentially</em> different from LLM-generated text her essays are. Now, of course, Orleans is at the highest tier of talent so it may not be saying much that "Well, <em>that</em> kind of writing isn't going to be usurped by LLMs soon." But …</p><p>Reading Susan Orleans' <a href="http://www.amazon.com/">On Animals</a> I'm struck by how <em>essentially</em> different from LLM-generated text her essays are. Now, of course, Orleans is at the highest tier of talent so it may not be saying much that "Well, <em>that</em> kind of writing isn't going to be usurped by LLMs soon." But it is instructive to read masterful text such as Orleans after spending time with the plausible-but-bland text of LLMs: her talent at shifting between whimsy and deep observation and her ability to move <em>the story</em> forward while doing so is more breath-taking if you read one of her essays after after spending some time with the surprisingly competent, stolid prose of ChatGPT-4. </p>Machine Learning for Non-Coders: A Half-Day of Reading2023-03-07T12:00:00-10:002023-03-07T12:00:00-10:00larrytag:knowing.net,2023-03-07:/posts/2023/03/machine-learning-for-non-coders-a-half-day-of-reading/<h1>Reading Recommendations: Machine Learning for Non-Coders</h1>
<p>The best orientation to machine learning (ML) I could find is <a href="https://mitsloan.mit.edu/ideas-made-to-matter/machine-learning-explained">Machine Learning Explained</a> from MIT Sloan. That gives a good overall orientation, even if it, like all texts, suffers from underestimating the speed at which ML capabilities are evolving. I don’t think …</p><h1>Reading Recommendations: Machine Learning for Non-Coders</h1>
<p>The best orientation to machine learning (ML) I could find is <a href="https://mitsloan.mit.edu/ideas-made-to-matter/machine-learning-explained">Machine Learning Explained</a> from MIT Sloan. That gives a good overall orientation, even if it, like all texts, suffers from underestimating the speed at which ML capabilities are evolving. I don’t think any of the texts I suggest give a good sense of how, in 2022, the popular use of the field shifted dramatically towards “generative ML”: first, the “diffusion models” that have been so successful generating imagery from prompts (DALL-E, Stable Diffusion, Midjourney, etc.) and then, towards the end of the year and into this, how ChatGPT re-attracted the public eye towards “Large Language Models” (LLMs) and, having passed some threshold of competence, the sudden rush to integrate them into search engines. </p>
<p>It’s actually a striking feature of this search for texts: it is basically impossible for anyone to write something accurately about “popular/important” uses of ML because the integration of these technologies into existing domains (search) and their application in essentially new domains (competent art generated from text prompts) defies prediction. Similarly, I could find no texts that introduce the mechanics of what’s going on inside the computer (“neural nets start with the ‘perceptron,’ which sums it’s inputs and outputs a 1 if it’s greater than a threshold and a 0 otherwise”) that end up with these powerful systems that are capturing the public imagination (this year: diffusion models and LLMs. Next year: ???). (The video tutorial by Jay Alammar discussed below being the closest I could find.)</p>
<p>After the Sloan orientation piece, the next piece I suggest is <a href="https://towardsdatascience.com/gradient-boosted-decision-trees-explained-9259bd8205af">Gradient Boosted Decision Trees-Explained</a>. Decision trees are actually more common than deep learning in regimes with high regulatory oversight (caveat the speed with which things change.) Modern decision trees are generated statistically from the data inputs, but the outputs (binary questions that do the best statistical job of subdividing the problem) are more amenable to interpretation. (Although they’ll still be generated from statistical correlations, not concepts or first principles! For instance, “Does the day of the week start with an ‘S’?,” not “Is it the weekend?” This can interfere with explainability.) </p>
<p>The Yildirim decision trees article discusses gradients in the paragraphs following the sentence “The loss function is used to detect the residuals….” Gradients are really the secret sauce of statistical machine learning: </p>
<ol>
<li>
<p>If you know which scenarios your current model gets wrong; and </p>
</li>
<li>
<p>You can tell “if I tweak one component of my model by such-and-such an amount, this scenario would have been correct or at least less wrong;” and</p>
</li>
<li>
<p>You have a computer that can do that for all your scenarios and all your components, over and over again; then</p>
</li>
<li>
<p>You have a good chance of your model “learning” how to make good predictions across a wide variety of scenarios</p>
</li>
</ol>
<p>Once statistical machine learning has been introduced with boosted decision trees, it’s time to move on to artificial neural networks and deep learning. I can’t bring myself to recommend any introductory text that doesn’t emphasize “biologically inspired,” rather than “…like the human brain does it.” I can’t emphasize enough that artificial neural networks are bags of numbers and multiplications and sums and blah-blah-blah. That’s it. They embody logic and construction and pattern-recognition in purely implicit statistically-generated data flows. </p>
<p>I think the article <a href="https://wiki.pathmind.com/neural-network">A Beginner’s Guide to Neural Networks and Deep Learning</a> is good. Again it suffers from being a little left behind by the speed with which technologies are being employed, but I think it walks through the fundamentals of artificial neural networks well. It correctly says that “Deep Learning” just means any neural network with more than 3 layers: when I was doing this stuff in the late 80s, a guy named Hinton proved that 3 layers were sufficient to solve any function that was calculable by neural networks. They might not be efficient, but the calculations could be made with the existing computers. So 3-layer neural networks absolutely dominated until about 2010. </p>
<p>The Pathmind article explains the important characteristic that in “deep” neural networks, the layers near the inputs detect low-level patterns (edges, spots, etc.), layers further from the input use those low-level detections to add more abstraction (textures, color gradients, etc.), and layers near the output are detecting quite abstract features (“Ford hubcaps vs Chevrolet hubcaps,” etc.). </p>
<p>That brings us to the Alammar video <a href="https://www.youtube.com/watch?v=-QH8fRhqFHM">The Narrated Transformer Language Model</a> I mentioned before, which does a very good job of breaking down the “transformer” architecture which underlies essentially all of today’s Large Language Models. There’s a big gap between the introductory article and this, but aside from some “I covered this in a previous video,” I think Alammar is very clear. I think it’s very important for motivated learners to get to this level. It’s important to appreciate the architecture is still statistical and very mechanical, with no explicit symbolic or higher-level reasoning. </p>
<p>With this technical orientation in hand, I think it’s easier to wrestle with the existence of “capability overhang,” as nodded to in <a href="https://www.theverge.com/2022/12/8/23499728/ai-capability-accessibility-chatgpt-stable-diffusion-commercialization">ChatGPT proves AI is finally mainstream — and things are only going to get weirder</a> but whose degree is still surprising, as you can see in the (partial!) enumeration of <a href="https://www.jasonwei.net/blog/emergence">137 emergent abilities of large language models</a>.</p>
<p>Tangent: Once you get to this level of reading, it’s natural to start questioning whether there’s a ghost in the machine, whether these machines are beginning to flirt with human-like reasoning and consciousness. I’ve read a lot of theory of mind stuff over the decades and I’ve never read any cognitive scientist or philosopher suggesting a transformer-like architecture prior to the computer architecture being defined in a breakout 2017 paper ((Attention is all you need)[https://arxiv.org/abs/1706.03762], included here for completion but not recommended for generalist reading). Even if there is a pattern-based language-generating aspect to the stream of consciousness (I’m sympathetic to this view), it’s based on something other than statistically grinding through the corpus of the Internet. And if the way we develop cognition is fundamentally different, how likely is it that we just happen to have converged upon the same final process? And even if it is the case that LLMs can be said to have knowledge of the world, aren’t they exemplars of <a href="https://courses.physics.illinois.edu/phys419/sp2021/Jackson1986_WhatMaryDidntKnow.pdf">What Mary Didn’t Know</a>? I’ll force myself to stop this tangent now. </p>
<p>Just as strange women lying in ponds is no basis for a system of governments, statistical correlations in Internet-scraped datasets are no basis for ethical reasoning. The field is rife with examples of systems that exhibit racial and gender bias as discussed in <a href="https://www.frontiersin.org/articles/10.3389/frai.2022.976838/full">Exploring gender biases in ML and AI academic research through systematic literature review</a>. The important paper <a href="https://dl.acm.org/doi/pdf/10.1145/3442188.3445922">On The Danger of Stochastic Parrots</a> presents a number of risks associated with Large Language Models in particular. Joseph Rodman, who developed a leading framework for detecting objects in images, “stopped doing [computer vision] research because I saw the impact my work was having. I loved the work but the military applications and privacy concerns eventually became impossible to ignore.”</p>
<p>As a final note: I wrote this in a word processor (http://lex.page) where I could actually use GPT-3 to generate completions. As happenstance would have it, apparently I had enough opinions to do without LLM help. </p>ResNet-style CNNs To Predict Freshwater Algae Blooms in Satellite Imagery: Mediocre Results2023-01-23T12:00:00-10:002023-01-23T12:00:00-10:00larrytag:knowing.net,2023-01-23:/posts/2023/01/resnet-style-cnns-to-predict-freshwater-algae-blooms-in-satellite-imagery-mediocre-results/<h1>ResNet-style CNNs To Predict Freshwater Algae Blooms in Satellite Imagery: Mediocre Results</h1>
<p>Although I have no domain experience with satellite imagery, I've used convolutional neural nets with aerial photography to recognize marine debris. So when I saw the <a href="https://www.drivendata.org/competitions/143/tick-tick-bloom/">DataDriven challenge 'Tick Tick Bloom'</a> I took a glance at the dataset …</p><h1>ResNet-style CNNs To Predict Freshwater Algae Blooms in Satellite Imagery: Mediocre Results</h1>
<p>Although I have no domain experience with satellite imagery, I've used convolutional neural nets with aerial photography to recognize marine debris. So when I saw the <a href="https://www.drivendata.org/competitions/143/tick-tick-bloom/">DataDriven challenge 'Tick Tick Bloom'</a> I took a glance at the dataset and decided to put a few days of effort into it.
One thing I liked about the challenge was that the dataset was very straightforward: you can use satellite visual data, date, latitude & longitude, and a specific feed of weather data. The target variable is equally straightforward: a classification, on a scale of 1-5, of cyanobacteria density. Rather than a classifier, though, I predicted a floating point value and rounded to the nearest integer.
The challenge comes with a <a href="https://drivendata.co/blog/tick-tick-bloom-benchmark">baseline solution based on LightGBM</a> that produces a mean error of about 1.5 (which is pretty poor, considering that "5" is a rare result, so <em>mostly</em> you're in the business of guessing 1-4!).
The baseline uses visible spectrum bands, and my first iteration used the same RGB data in a ResNet-style CNN. Depending on the platform and spectral band, the Landsat and Sentinel satellite data come in 5-, 10, and 20- meter resolutions. Intuitively, I grabbed small areas around the sample point, which made the images tiny, batch sizes big, and training very fast. If I recall correctly, I used a straight ResNet backbone and transfer learning on this first iteration, figuring that the textures and shapes known by the early layers were probably helpful. This initial model did a little bit better than the LightGBM model.
Preliminary data evaluation showed the non-surprising result that seasonal imagery varied widely, so in my next iteration, I took the day of the year of the imagery, calculated the <code>sin</code> and <code>cos</code> of that as a percentage of the year, expecting that this might create a reasonable "positional" encoding of an annual cycle. I also normalized the latitude and longitude and passed that to the head as well.<br>
So now I had a model with a ResNet backbone, "time of year," and "location" to pass to the head, which was just a few fully-connected layers outputting the single floating-point "severity" prediction. This model did quite well, putting me in 4th place in the early running and right in the middle of the 2nd-tier competitors (there's 1 competitor who's a good 15% better than any of the others. I expect them to win!).
It seemed a no-brainer to add additional spectral bands to the model, as well as the available "quality" masks that alert users to missing data or cloud cover (which is a very common issue when looking at a small spatial area). Downloading all that data was itself a chore that consumed two days of my time budget.
I expected to be able to use <a href="https://www.fast.ai">FastAI</a>'s CNN support, basically passing in a <code>[batchsize, channel_count,width,height]</code> tensor with a <code>channel_count</code> of around 8. But it seems like FastAI has a hard-wired expectation for 3 channels (or 1 channel) when it comes to CNNs. So I ended up writing a custom PyTorch module to convolve over the bands. This had the downside that I couldn't get a jumpstart by transfer-loading weights (well, I <em>could</em>, but not easily), but the upside that I ended up with weights "dedicated" to each band and resolution.
Since the bands are a little different between Landsat and Sentinel platforms, I ended up creating channels for both and added a <code>band_available</code> mask Tensor.
With January flying by and other commitments piling up, I trained up the model with a strict admonition to myself that if it didn't train well enough to re-establish myself in the top tier of the competition, I would have to walk away. Well, it didn't. Much to my surprise, the addition of all those additional bands hardly budged the final error levels. With more competitors developing competitive models, I dropped out of the top dozen scores.
Meanwhile, the naive way that I had just stored the band data as Numpy arrays in separate files led to my training being bottlenecked by IO. So even though there is some fairly low-hanging fruit in terms of data augmentation, pre-judging image quality, and architecture search, the first thing I'd have to do is a performance iteration.
But... well, it's the season for both <a href="https://www.firstinspires.org/robotics/frc">FIRST Robotics</a> and the annual humpback whale migration, so it's time to move on! </p>Sentiment Analysis of Mastodon Toots is Very Easy2022-11-06T00:00:00-10:002022-11-06T00:00:00-10:00larrytag:knowing.net,2022-11-06:/posts/2022/11/mastodon-nlp/<p>The Mastodon API is very straightforward, as is the OpenAI API for its NLP models. I wrote a quick <a href="https://github.com/lobrien/mastodon_nlp/">proof-of-concept program to do sentiment analysis of "toots."</a>. </p>Re-Identifying Manta Rays2022-11-05T00:00:00-10:002022-11-05T00:00:00-10:00larrytag:knowing.net,2022-11-05:/posts/2022/11/manta-ray-project/<p>My current project is re-identifying individual manta rays (<em>Mobula alfredi</em> and <em>Mobula birostris</em>) by their distinct belly patterns … er… ventral markings. </p>
<p><img alt="Photo of manta ray 'Queenie' showing distinctive markings" src="/images/queenie.jpg"></p>
<p>Every night at two spots on the Big Island of Hawai’i where I live, dive boats shine bright lights that attract plankton. Most nights, the plankton in turn …</p><p>My current project is re-identifying individual manta rays (<em>Mobula alfredi</em> and <em>Mobula birostris</em>) by their distinct belly patterns … er… ventral markings. </p>
<p><img alt="Photo of manta ray 'Queenie' showing distinctive markings" src="/images/queenie.jpg"></p>
<p>Every night at two spots on the Big Island of Hawai’i where I live, dive boats shine bright lights that attract plankton. Most nights, the plankton in turn attract multiple manta rays to feed. The mantas, most of which are between 3 and 4 meters in wingspan, form feeding trains, barrel-roll in the plankton columns, and come within inches of the divers and snorkelers. I’ve dived all over the world, and I think the Kona manta dive is among the very best large-animal dives in all the world. </p>
<p>The dives have a huge economic impact: every year, more than 100,000 people snorkel or dive with the mantas in Kailua Kona and generate well over $10M in revenue. (Those numbers are from 2016 and obviously the pandemic slowed things down. More recently, the growth in manta snorkeling has triggered some much-needed regulatory review.) </p>
<p>Re-identifying animals is a common problem among field and population biologists. Generally, new photos are matched against a photo catalog by a freakishly-accurate grad student or longtime researcher (every species has their own freakishly-accurate identifier!). The work is tedious and often backlogged. </p>
<p>For animals with prominent markings (like mantas), there are a number of good pattern-recognition algorithms that are implemented in <a href="https://opencv.org">OpenCV</a>, the broadly-used computer vision library: <a href="https://arxiv.org/pdf/1710.02726.pdf">SIFT, SURF, and ORB</a>. Mantas are almost laughably amenable to geometry-based algorithms: it’s only one side that has distinctive markings, the body of the manta is about as flat a surface as you’ll find in the animal kingdom, and the markings are generally high-contrast black-and-white. The <a href="https://www.mantapacific.org">Manta Pacific Research Foundation</a>, with whom I’m working, currently uses SIFT for re-identification.</p>
<p>In recent years, deep-learning techniques for individual re-identification have been successfully applied to a number of species: <a href="https://www.happywhale.com">happywhale</a> in particular, has catalogs of more than two dozen cetacean species. <a href="https://arxiv.org/abs/1902.10847">Deep learning has been successfully applied to mantas</a>, too, so there’s every reason to believe that I should be able to replicate their success. </p>
<p>While mantas are a happy subject for me, since I literally see the dive boats heading out to the manta ray spots every night, I am more generally interested in working towards a “bring your own species” re-identification system. The techniques used for re-identification using deep learning are now well-established in the ML world. Computer Science grad students are unlikely to devote themselves to fine-tuning known algorithms and creating an efficient end-to-end pipeline and Biology grad students may tend to write overly-specific code. Me, on the other hand? I’ve always been a “technology transfer” coder, not a researcher, and have no problem working downstream of the latest-and-greatest. Meanwhile, I have a lot of experience operationalizing and scaling software systems. </p>
<p>So, I hope, this project will be a good combination of my interests and talents, in service to environmental causes. </p>What We Talk About When We Talk About Attention2022-11-03T00:00:00-10:002022-11-03T00:00:00-10:00larrytag:knowing.net,2022-11-03:/posts/2022/11/Attention-as-in-attend/<p>The "attention" in ML is "what you should attend to," not "alertness." In the sentence "They crossed the <???> to get to the other bank." you need to "attend to" the <???> word to disambiguate "bank". If <???> is "street" then it's "bank" as in "financial institution" (most likely). If <???> is "river" then …</p><p>The "attention" in ML is "what you should attend to," not "alertness." In the sentence "They crossed the <???> to get to the other bank." you need to "attend to" the <???> word to disambiguate "bank". If <???> is "street" then it's "bank" as in "financial institution" (most likely). If <???> is "river" then it's (most likely) "bank" as in "muddy banks of the Mississippi.</p>
<p>It's perfectly fair to replace "attend to" with "pay attention to," so it's not a fundamentally different definition of the word. But I think a logical first reaction to the phrase "Attention is all you need," could be to think that what's being advocated has something with "alertness" or "arousal" being a single value that's being turned up or down, which would be confusing and lead to wrong intuitions. </p>How to train/test on a subset of your FastAI data2022-05-17T12:00:00-10:002022-05-17T12:00:00-10:00larrytag:knowing.net,2022-05-17:/posts/2022/05/fastai-dataloaders/<p>If you have a large FastAI (v2) <code>DataLoaders</code> and you're trying to debug something at epoch-scale (such as a custom metric), an easy way to train on a small subset of your data is:</p>
<div class="highlight"><pre><span></span><code><span class="n">subset_size</span> <span class="o">=</span> <span class="mi">100</span> <span class="c1"># Or whatever</span>
<span class="n">selected_items</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">dls</span><span class="o">.</span><span class="n">train_ds</span><span class="o">.</span><span class="n">items</span><span class="p">,</span> <span class="n">subset_size …</span></code></pre></div><p>If you have a large FastAI (v2) <code>DataLoaders</code> and you're trying to debug something at epoch-scale (such as a custom metric), an easy way to train on a small subset of your data is:</p>
<div class="highlight"><pre><span></span><code><span class="n">subset_size</span> <span class="o">=</span> <span class="mi">100</span> <span class="c1"># Or whatever</span>
<span class="n">selected_items</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">dls</span><span class="o">.</span><span class="n">train_ds</span><span class="o">.</span><span class="n">items</span><span class="p">,</span> <span class="n">subset_size</span><span class="p">,</span> <span class="n">replace</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="c1"># Swap in the subset for the whole thing (Note: this mutates dls, so re-initialize before full training!)</span>
<span class="n">dls</span><span class="o">.</span><span class="n">train</span> <span class="o">=</span> <span class="n">dls</span><span class="o">.</span><span class="n">test_dl</span><span class="p">(</span><span class="n">selected_items</span><span class="p">,</span> <span class="n">with_labels</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">learn</span><span class="o">.</span><span class="n">fit_one_cycle</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
</code></pre></div>Large Language Models and the Chinese Room2022-05-02T12:00:00-10:002022-05-02T12:00:00-10:00larrytag:knowing.net,2022-05-02:/posts/2022/05/llm-searles/<p>The <a href="https://en.wikipedia.org/wiki/Chinese_room">Chinese Room</a> is a 1980 thought experiment from the philosopher John Searle. The Wikipedia summarizes the setup:</p>
<blockquote>
<blockquote>
<p>[S]uppose that artificial intelligence research has succeeded in constructing a computer that behaves as if it understands Chinese. It takes Chinese characters as input and, by following the instructions of a …</p></blockquote></blockquote><p>The <a href="https://en.wikipedia.org/wiki/Chinese_room">Chinese Room</a> is a 1980 thought experiment from the philosopher John Searle. The Wikipedia summarizes the setup:</p>
<blockquote>
<blockquote>
<p>[S]uppose that artificial intelligence research has succeeded in constructing a computer that behaves as if it understands Chinese. It takes Chinese characters as input and, by following the instructions of a computer program, produces other Chinese characters, which it presents as output. Suppose, says Searle, that this computer performs its task so convincingly that it comfortably passes the Turing test: it convinces a human Chinese speaker that the program is itself a live Chinese speaker. To all of the questions that the person asks, it makes appropriate responses, such that any Chinese speaker would be convinced that they are talking to another Chinese-speaking human being.</p>
</blockquote>
</blockquote>
<p>Swell! But what if this was the means by which the computer operated: </p>
<ul>
<li>
<p>The Chinese input (let’s call it “the prompt”) is written on paper and slipped under the door to a sealed room;</p>
</li>
<li>
<p>In the room, John Searle has a notebook in which every Chinese character is given an index number. He converts the sequence of characters in the prompt into a sequence of their corresponding numbers.</p>
</li>
<li>
<p>He has a large book, on each of whose pages is written a matrix of floating point numbers. He multiplies the numbers encoding the prompt by the matrix of the first page. He takes the resulting matrix and multiplies it by the matrix in the second page.</p>
</li>
<li>
<p>... etc ...</p>
</li>
<li>
<p>When he comes to the last page, he has a sequence of numbers. He uses his “character-index” correspondence book to translate the result into Chinese characters, which he slips back out of the room.</p>
</li>
</ul>
<p>Searle doesn’t understand Chinese. The books contain matrices of numbers and the operations on them are just mathematical operations. And while the realistic set of instructions is <em>somewhat</em> more complicated than “just keep doing matrix multiplications on the last result,” it’s really not <em>that</em> much more complicated. </p>
<h2>Does the room have any understanding of Chinese?</h2>
<p>The question then is: Where in the room can “understanding of Chinese” be said to exist? Searle just mechanically performed a bunch of math. The math operations work with any numbers. The numbers that specify the exact transformation are just ink marks on paper. </p>
<p>Searle didn’t specify that the actions inside the Chinese room were largely matrix multiplies. That, though, is how Large Language Models (LLMs) such as GPT-3 work. There is no comforting complexity of processing, no clear symbolic processing, no recursion or looping. The numbers <em>embody</em> a lot of processing, but even that processing is bereft of significant reasoning: it starts with statistics about co-occurrence of symbols and then is statistics about those statistics, statistics of <em>those</em> statistics and so on. There is no parsing of nouns and verbs, no subjects and objects, none of that grammar stuff. Presumably there’s kinda’ sorta’ <em>something</em> to do with that stuff implicit in weights that get multiplied together on their way to producing an output, but, boy, is it abstract. </p>
<p>I’ve never found the Chinese Room to be a particularly challenging experiment: I’ve always been on the side of what Wikipedia labels “the system reply” — it’s not important that Searle, the operator of the room, doesn’t understand, because the system <em>as a whole</em> does. The understanding / consciousness of the room resides, according to this argument, in the complexity of the processing instructions and intermediate results.</p>
<p>But I always thought that systems that began to approach believable conversations would have large amounts of symbolic processing and feedback. And while I can see past the lack of explicit symbolic processing, I find it impossible to ignore the lack of feedback — what Daniel Hofstadter called [Strange Loops]. In recent years I’ve become pretty sympathetic to [Integrated Information Theory]as a plausible account of consciousness, but the “atom” of IIT is feedback (the ability for integration of information to causally modify the output of the system). </p>
<p>By this model, the quality of the output generated by LLMs is just linguistic pareidolia — a projection of our imagination onto something close to random</p>
<div class="highlight"><pre><span></span><code>> Sometime we see a cloud that’s dragonish,
> A vapour sometime like a bear or lion
> A towered citadel, a pendant rock,
> A forked mountain, or blue promontory
> With trees upon it that nod unto the world
> And mocks our eyes with air…
> That which is now a horse, even with a thought
> The rack dislimns, and makes it indistinct
> As water is in water
</code></pre></div>PyScript page2022-05-02T12:00:00-10:002022-05-02T12:00:00-10:00Larry O'Brientag:knowing.net,2022-05-02:/posts/2022/05/pyscript-page/Short version for index and feeds
<py-env>
- numpy
- matplotlib
</py-env>
<py-script>print(f'<em>the</em> value of 2 + 2 is {2+2}')</py-script>
<h1>Let's plot random numbers</h1>
<div id="plot"></div>
<py-script output="plot">
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(1000)
y = np.random.randn(1000)
fig, ax = plt.subplots()
ax.scatter(x, y)
fig
</py-script>
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
How I Failed At Kaggle Happywhale2022-04-10T12:00:00-10:002022-04-10T12:00:00-10:00larrytag:knowing.net,2022-04-10:/posts/2022/04/kaggle-happywhale/<p>I just deleted my intermediate data and models for Kaggle’s <a href="https://www.kaggle.com/competitions/happy-whale-and-dolphin">Happywhale</a> competition. I did <em>terrible</em>, never getting much above pure random guessing. Which was frustrating, because it’s a problem in Machine Learning that I’m very interested in (and want to do more work in). </p>
<h2>Happywhale, Sad Human …</h2><p>I just deleted my intermediate data and models for Kaggle’s <a href="https://www.kaggle.com/competitions/happy-whale-and-dolphin">Happywhale</a> competition. I did <em>terrible</em>, never getting much above pure random guessing. Which was frustrating, because it’s a problem in Machine Learning that I’m very interested in (and want to do more work in). </p>
<h2>Happywhale, Sad Human</h2>
<p>The problem is animal re-identification. Given a photographic catalog of individual Bottlenose Dolphins (say) and a target photograph of a bottlenose dolphin, identify the particular dolphin in the target photograph or, if it’s a new individual, say that. </p>
<p>In the case of Bottlenose Dolphins, the characteristics you hang a re-identification on are the nicks and scars on the dorsal fin. In the case of Humpback Whales, it’s the markings on the underside of the flukes. In the case of Great White Sharks, it’s the zig-zag of the line between the gray back and the white belly. In the case of leopards, it’s spots. And so forth.</p>
<p><img src="https://www.knowing.net/images/flukecompare.jpeg" alt="Two humpback whale flukes" width="400"/></p>
<p>Modern Machine Learning techniques are a good match for this problem. A deep neural net can map from a picture to a point in a high-dimensional space (say, 30 dimensions). Well, if you can make it such that two photographs of the same individual are near each other in 30-dimensional space, while photographs of different dolphins are further away, there you have it! Just calculate the 30-dimensional location of your target photo, find the nearest photo in your catalog and, if that distance is below some threshold say “Why it’s good ol’ Flipper!” </p>
<h2>How hard could this embedding be?</h2>
<p>When an <code>n</code>-dimensional <em>feature vector</em> has this characteristic that “related inputs are near each other,” it’s called an <em>embedding</em>. The problem of Happywhale (and related challenges) is to generate embeddings that successfully re-identify individuals. </p>
<p>With ample data for each category/individual, effective embeddings are easy to generate. With a dataset like [Fashion-MNIST][2] you have 6,000 training examples for each of the 10 classes. To recognize any one input, you might use and train an architecture such as this:</p>
<p><img src="https://www.knowing.net/images/extract.png" alt="MNIST architecture" width="600"/></p>
<p>(Image from <a href="https://www.kaggle.com/code/cdeotte/how-to-choose-cnn-architecture-mnist/notebook">https://www.kaggle.com/code/cdeotte/how-to-choose-cnn-architecture-mnist/notebook</a>)</p>
<p>In a case like this, you just use the second-to-last layer as an embedding! It works (trust me)!</p>
<p>But in general, if you take a classifier model and just grab the penultimate layer, the embedding isn’t <em>great</em>. Objects of the same category are near each other, but they’re not <em>super</em> localized:</p>
<p><img src="https://www.knowing.net/images/mnist_vgg8_3d.png" alt="unclustered" width="600"/></p>
<p>(Image from <a href="https://www.kaggle.com/competitions/shopee-product-matching/discussion/226279">https://www.kaggle.com/competitions/shopee-product-matching/discussion/226279</a>)</p>
<p>Instead, you use a loss function that is specifically tailored to generate tight clusters in high-dimensional space: </p>
<p><img src="https://www.knowing.net/images/mnist_vgg8_arcface_3d.png" alt="Arcface clusters" width="600"/></p>
<p>There are several loss functions that make good embeddings. A popular one is <a href="https://arxiv.org/abs/1801.07698">ArcFace</a>. </p>
<h2>Low k-shot in the dark</h2>
<p>Having good locality with your embeddings is especially important when you don’t have a lot of photographs of the same individual. When you just have a few photographs you face the problem of <code>low k-shot</code> classification. </p>
<p>(Tangent: image <em>classification</em> is the problem of putting an image into a known set of categories. For instance, “this is a photo of a whale” vs “this is a photo of a cat.” Or, “this is a photo of a humpback whale” vs “this is a photo of a blue whale.” Individual re-identification is just image classification with a huge number of categories (individual names) and, generally, low k-shot.) </p>
<h2>But whales! I ❤️ whales!</h2>
<p>But now, the Happywhale Competition this year had images from 28 different species, with over 15K individuals! Some photos are distant images of the backs of humpback whales and some are closeups of spinner dolphin dorsal fins. </p>
<p>For a baseline model, I just threw <em>all</em> the training data into the pot, trained it overnight, and tried that. Well, I wasn’t surprised that I had terrible results: generating the transform that accurately locates photos in one of 15K compartments is slow work! </p>
<p>I was confused that, even in the early days of the contest, the leaderboard was filling up with people getting 60-70% accuracy. My first baseline had about 12% accuracy! </p>
<h2>Simple! Let’s try complexity!</h2>
<p>I quickly (maybe hastily) concluded that the way forward was <em>many models</em>. Instead of throwing all the data into one model and trying to generate 15K tight clusters, I’d use multiple layers: </p>
<ul>
<li>I trained a model to find, in the photo, a Region Of Interest aka tried to crop the image tightly around the whale</li>
<li>I trained a model to classify the camera viewpoint (I had 6 categories: anterior, posterior, port full, starboard full, port dorsal fin, starboard dorsal fin)</li>
<li>I trained a model to identify the species or species-type in the photo (by species-type I mean I had categories such as “blackfish” that included several species of small toothed whales) </li>
</ul>
<p>How complex was my multimodel approach? </p>
<p><img src="https://www.knowing.net/images/happywhale_multimodels.png" alt="multimodel architecture" width="800"/></p>
<p><em>sigh</em></p>
<p>Realize that this architecture requires <code>number of viewpoints * number of species</code> separate embedding models! </p>
<p>Which might have been tractable had I developed the ability to pretty-rapidly generate good embeddings for a particular viewpoint and species! It would have been too much for me to do locally, but I was planning on building an Azure ML Pipeline, spending some money to spin up a half dozen training machines, and basking in glory. All I had to do was develop some kick-ass embedding code.</p>
<p>And that. Just. Didn’t. Work. </p>
<h2>Am I getting close? Who knows?</h2>
<p>The big problem with embeddings and the idea that “every individual has an area in high-dimensional space” is that when you generate a point in that high-dimensional space, it’s hard to say if it’s near or far from where you ultimately want it. </p>
<p>For one thing, “distance” can mean two common things when working with embeddings: </p>
<ul>
<li>Euclidean distance, which is the distance in space between the two points</li>
<li>Cosine distance, which is the difference in the angles to the points, as measured from the origin</li>
</ul>
<p>Since this is a story of failure, I’m not going to try to justify why I was biased towards Cosine distance. But in the end, I tried almost everything with <em>both</em>. (And got crappy results.)</p>
<p>No matter which distance measure you choose, at the moment you generate an embedding for your target photo, what do you compare it to? <em>Eventually</em> you want it to be “near other photos of the same individual” but in the <em>moment</em>, what do you know? </p>
<h2>Overwhelmed by triplets</h2>
<p>What you can do is: instead of just the target photo, you have a <em>triplet</em> of photos: </p>
<ul>
<li>the target photo, </li>
<li>another photo of the same individual (a positive match), and </li>
<li>a photo you know is <em>not</em> the same individual (a negative match)</li>
</ul>
<p>Generate embeddings for each image in the triplet. Now, early in the training process these will presumably spread out all over your n-dimensional space. <em>But</em> you know that you’d <em>rather</em> have the positive match close and the negative match far. So you can change the weights to further that goal. </p>
<p>And that, dear friends, is called <em>triplet loss</em> and it’s been my world for the past month. </p>
<p>Again, since this is a story of failure, I shouldn’t lecture on “tips and tricks,” but I’ll just point out one obvious challenge with triplet loss: <em>most</em> negative matches are going to be pretty obvious. Similarly, since cetacean photography often has images taken 1/10th of a second after the previous and some individuals have obvious features (mutilated fin edges, often), <em>some</em> positive matches are also obvious. What you <em>want</em> to train on are “the positive match that looks the least like this photo” and “the negative match that looks the most like this photo.” Trying to find <em>those</em> photos is called <em>triplet mining</em> and, yeesh, lemme’ tell ya’. Or, rather, what can I tell you? It didn’t work for me. </p>
<p>tl;dr: I spent a month trying to apply an embeddings-based approach to cetacean reidentification and never had good results. I tried many standard things -- Siamese networks, Euclidean distance, Cosine distance, soft and hard triplet mining, etc. In all cases, I would get good results with simplified datasets (MNIST-Fashion, a hand-picked set of individual cetaceans) but when I applied it to the Happywhale training data, I had very poor results. </p>Biggest mistake on Kaggle2022-02-14T12:00:00-10:002022-02-14T12:00:00-10:00larrytag:knowing.net,2022-02-14:/posts/2022/02/kaggle-teams-dont-rush/<p>Don’t join a team too quickly. Once you’re on a Kaggle team:</p>
<ul>
<li>You cannot choose to leave</li>
<li>The team leader cannot choose to remove you</li>
</ul>
<p>Unless you have a <em>very</em> good sense of what exactly your teammates are bringing to the competition, including their: </p>
<ul>
<li>Knowledge level </li>
<li>Time commitment …</li></ul><p>Don’t join a team too quickly. Once you’re on a Kaggle team:</p>
<ul>
<li>You cannot choose to leave</li>
<li>The team leader cannot choose to remove you</li>
</ul>
<p>Unless you have a <em>very</em> good sense of what exactly your teammates are bringing to the competition, including their: </p>
<ul>
<li>Knowledge level </li>
<li>Time commitment</li>
<li>Competition strategy</li>
</ul>
<p>You should <em>not</em> jump in on the inevitable “Looking for a team megathread!” which is always one of the first and busiest threads of a competition. </p>
<p>You cannot collaborate with individuals without them being on your team but the benefit you will gain by <em>publicly</em> collaborating with discussion and code are greater than the benefits you are likely to reap from an ad hoc team. </p>Installing Detectron2 on a Mac in CPU mode2021-11-25T16:00:00-10:002021-11-25T16:00:00-10:00larrytag:knowing.net,2021-11-25:/posts/2021/11/install-detectron2-draft/<p>At the risk of saying, “Yeah, it’s in the docs,” this is what I did. I think the crucial thing is installed things in the proper order, so I would advise going step-by-step:</p>
<ol>
<li>Have <code>conda</code> installed (<code>brew install conda</code> if not, I suppose)</li>
<li>Create a conda environment with <code>conda …</code></li></ol><p>At the risk of saying, “Yeah, it’s in the docs,” this is what I did. I think the crucial thing is installed things in the proper order, so I would advise going step-by-step:</p>
<ol>
<li>Have <code>conda</code> installed (<code>brew install conda</code> if not, I suppose)</li>
<li>Create a conda environment with <code>conda create -n detectron2 python=3.8</code></li>
<li><code>conda activate detectron2</code></li>
<li>Install PyTorch and Torchvision via [this page] choosing “Stable” / “Mac” / “Conda” / “Python” / “CPU”: <code>conda install pytorch torchvision torchaudio -c pytorch</code></li>
<li>Install OpenCV with <code>conda install -c conda-forge opencv</code></li>
<li>Install Detectron2 via [this page] <code>python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'</code> (Oddly, this didn’t appear to actually compile anything on my M1-based Mac Mini. I <em>did not</em> prepend <code>ARCHFLAGS</code> and <code>CC</code> and <code>CXX</code> as described at the Detectron2 install page. )</li>
</ol>
<p>Then, you should be able to locally run, e.g., the code from [the tutorial]. But! YOU MUST add <code>cfg.MODEL.DEVICE = 'cpu'</code> to your configuration. </p>
<p>It <em>may</em> be possible to fine-tune Detectron2 using CPU-mode, although it will certainly be <em>much</em> slower than doing so in GPU mode. But for inferencing, CPU-mode seems to work fine. </p>A Simple 3-Step AzureML Pipeline2020-08-29T16:00:00-10:002020-08-29T16:00:00-10:00larrytag:knowing.net,2020-08-29:/posts/2020/08/simple-azureml-pipeline/<p><a href="https://github.com/lobrien/AzureMachineLearning_Pipeline_Simple">Get the source code and data on Github</a></p>
<p><img alt="Illustration of pipeline graph" src="/images/pipeline_graph.png"></p>
<p>This demonstrates how you create a multistep AzureML pipeline using a series of <code>PythonScriptStep</code> objects. </p>
<p>In this case, the calculation is extremely trivial: predicting Iris species using scikit-learn's Gaussian Naive Bayes. This pipeline could be solved (very quickly) using this code: </p>
<div class="highlight"><pre><span></span><code><span class="kn">import …</span></code></pre></div><p><a href="https://github.com/lobrien/AzureMachineLearning_Pipeline_Simple">Get the source code and data on Github</a></p>
<p><img alt="Illustration of pipeline graph" src="/images/pipeline_graph.png"></p>
<p>This demonstrates how you create a multistep AzureML pipeline using a series of <code>PythonScriptStep</code> objects. </p>
<p>In this case, the calculation is extremely trivial: predicting Iris species using scikit-learn's Gaussian Naive Bayes. This pipeline could be solved (very quickly) using this code: </p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
<span class="kn">from</span> <span class="nn">sklearn.naive_bayes</span> <span class="kn">import</span> <span class="n">GaussianNB</span>
<span class="kn">from</span> <span class="nn">sklearn.model_selection</span> <span class="kn">import</span> <span class="n">train_test_split</span>
<span class="kn">from</span> <span class="nn">sklearn.metrics</span> <span class="kn">import</span> <span class="n">accuracy_score</span>
<span class="c1"># These two lines become the data ingestion and dataprep steps </span>
<span class="n">df</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">read_csv</span><span class="p">(</span><span class="s2">"iris.csv"</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
<span class="n">X_train</span><span class="p">,</span> <span class="n">X_test</span><span class="p">,</span> <span class="n">y_train</span><span class="p">,</span> <span class="n">y_test</span> <span class="o">=</span> <span class="n">train_test_split</span><span class="p">(</span><span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span><span class="mi">1</span><span class="p">:</span><span class="mi">4</span><span class="p">],</span> <span class="n">df</span><span class="o">.</span><span class="n">iloc</span><span class="p">[:,</span><span class="mi">4</span><span class="p">:</span><span class="mi">5</span><span class="p">],</span> <span class="n">test_size</span><span class="o">=</span><span class="mf">0.2</span><span class="p">,</span> <span class="n">random_state</span><span class="o">=</span><span class="mi">42</span><span class="p">)</span>
<span class="c1"># These two lines become the training step</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">GaussianNB</span><span class="p">()</span>
<span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">X_train</span><span class="p">,</span> <span class="n">y_train</span><span class="o">.</span><span class="n">values</span><span class="o">.</span><span class="n">ravel</span><span class="p">())</span>
<span class="c1"># These two lines become the evaluation step</span>
<span class="n">prediction</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">X_test</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">'Accuracy: </span><span class="si">{</span><span class="n">accuracy_score</span><span class="p">(</span><span class="n">prediction</span><span class="p">,</span><span class="w"> </span><span class="n">y_test</span><span class="p">)</span><span class="si">:</span><span class="s1">3f</span><span class="si">}</span><span class="s1">'</span><span class="p">)</span>
</code></pre></div>
<p>The point of this notebook is to show the construction of the AzureML pipeline, not demonstrate any kind of complex machine learning. </p>
<h2>Preliminary setup</h2>
<p>Import types used:</p>
<div class="highlight"><pre><span></span><code><span class="kn">from</span> <span class="nn">azureml.core</span> <span class="kn">import</span> <span class="n">Environment</span><span class="p">,</span> <span class="n">Experiment</span><span class="p">,</span> <span class="n">Workspace</span><span class="p">,</span> <span class="n">Datastore</span><span class="p">,</span> <span class="n">Dataset</span>
<span class="kn">from</span> <span class="nn">azureml.core.compute</span> <span class="kn">import</span> <span class="n">ComputeTarget</span><span class="p">,</span> <span class="n">AmlCompute</span>
<span class="kn">from</span> <span class="nn">azureml.core.runconfig</span> <span class="kn">import</span> <span class="n">RunConfiguration</span>
<span class="kn">from</span> <span class="nn">azureml.data</span> <span class="kn">import</span> <span class="n">OutputFileDatasetConfig</span>
<span class="kn">from</span> <span class="nn">azureml.data.datapath</span> <span class="kn">import</span> <span class="n">DataPath</span>
<span class="kn">from</span> <span class="nn">azureml.pipeline.core</span> <span class="kn">import</span> <span class="n">Pipeline</span>
<span class="kn">from</span> <span class="nn">azureml.pipeline.steps</span> <span class="kn">import</span> <span class="n">PythonScriptStep</span>
<span class="kn">from</span> <span class="nn">sklearn.metrics</span> <span class="kn">import</span> <span class="n">accuracy_score</span>
<span class="kn">from</span> <span class="nn">sklearn.model_selection</span> <span class="kn">import</span> <span class="n">train_test_split</span>
<span class="kn">from</span> <span class="nn">sklearn.naive_bayes</span> <span class="kn">import</span> <span class="n">GaussianNB</span>
<span class="kn">from</span> <span class="nn">sklearn.preprocessing</span> <span class="kn">import</span> <span class="n">LabelEncoder</span>
<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span>
</code></pre></div>
<p>This notebook requires <code>azureml.core.VERSION >= 1.12.0</code></p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">azureml.core</span>
<span class="n">azureml</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">VERSION</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code>'1.12.0'
</code></pre></div>
<ul>
<li>
<p>Access the AzureML workspace (relies on <code>config.json</code> downloaded from workspace in same dir as notebook). </p>
</li>
<li>
<p>Retrieve the default datastore for the workspace. This is where the <code>Dataset</code> (permanent data) and temporary data will be stored.</p>
</li>
</ul>
<div class="highlight"><pre><span></span><code><span class="n">ws</span> <span class="o">=</span> <span class="n">Workspace</span><span class="o">.</span><span class="n">from_config</span><span class="p">()</span>
<span class="n">ds</span> <span class="o">=</span> <span class="n">ws</span><span class="o">.</span><span class="n">get_default_datastore</span><span class="p">()</span>
</code></pre></div>
<h1>Data Ingestion</h1>
<p>Register the data as a <code>Dataset</code> within the ML workspace, if necessary. Relies, initially, on the presence of the iris dataset in the local <code>./data</code> dir.</p>
<div class="highlight"><pre><span></span><code><span class="n">baseline_dataset_name</span> <span class="o">=</span> <span class="s1">'iris_baseline'</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">baseline_dataset_name</span> <span class="ow">in</span> <span class="n">Dataset</span><span class="o">.</span><span class="n">get_all</span><span class="p">(</span><span class="n">ws</span><span class="p">)</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> <span class="p">:</span>
<span class="n">ds</span><span class="o">.</span><span class="n">upload</span><span class="p">(</span><span class="n">src_dir</span><span class="o">=</span><span class="s2">"./data/"</span><span class="p">,</span> <span class="n">target_path</span><span class="o">=</span><span class="s1">'iris_data_baseline'</span><span class="p">)</span>
<span class="n">iris_dataset</span> <span class="o">=</span> <span class="n">Dataset</span><span class="o">.</span><span class="n">Tabular</span><span class="o">.</span><span class="n">from_delimited_files</span><span class="p">(</span><span class="n">DataPath</span><span class="p">(</span><span class="n">ds</span><span class="p">,</span> <span class="s1">'iris_data_baseline/iris.csv'</span><span class="p">))</span>
<span class="n">iris_dataset</span><span class="o">.</span><span class="n">register</span><span class="p">(</span><span class="n">ws</span><span class="p">,</span> <span class="s1">'iris_baseline'</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="s1">'Iris baseline data (w. header)'</span><span class="p">)</span>
</code></pre></div>
<h2>Compute Resource & Python Environment</h2>
<p>For this super-easy problem, just use a CPU-based cluster and share the environment between pipeline steps. The curated environment <code>AzureML-Tutorial</code> happens to have <code>sklearn</code>, so that's why I chose it. </p>
<div class="highlight"><pre><span></span><code><span class="n">compute_name</span> <span class="o">=</span> <span class="s2">"cpu-cluster2"</span>
<span class="n">vm_size</span> <span class="o">=</span> <span class="s2">"STANDARD_D2_V2"</span>
<span class="k">if</span> <span class="n">compute_name</span> <span class="ow">in</span> <span class="n">ws</span><span class="o">.</span><span class="n">compute_targets</span><span class="p">:</span>
<span class="n">compute_target</span> <span class="o">=</span> <span class="n">ws</span><span class="o">.</span><span class="n">compute_targets</span><span class="p">[</span><span class="n">compute_name</span><span class="p">]</span>
<span class="k">if</span> <span class="n">compute_target</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">compute_target</span><span class="p">)</span> <span class="ow">is</span> <span class="n">AmlCompute</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Found compute target: '</span> <span class="o">+</span> <span class="n">compute_name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s1">'Creating a new compute target...'</span><span class="p">)</span>
<span class="n">provisioning_config</span> <span class="o">=</span> <span class="n">AmlCompute</span><span class="o">.</span><span class="n">provisioning_configuration</span><span class="p">(</span><span class="n">vm_size</span><span class="o">=</span><span class="n">vm_size</span><span class="p">,</span> <span class="c1"># STANDARD_NC6 is GPU-enabled</span>
<span class="n">min_nodes</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">max_nodes</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
<span class="c1"># create the compute target</span>
<span class="n">compute_target</span> <span class="o">=</span> <span class="n">ComputeTarget</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
<span class="n">ws</span><span class="p">,</span> <span class="n">compute_name</span><span class="p">,</span> <span class="n">provisioning_config</span><span class="p">)</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code>Found compute target: cpu-cluster2
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="n">env</span> <span class="o">=</span> <span class="n">Environment</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ws</span><span class="p">,</span> <span class="s2">"AzureML-Tutorial"</span><span class="p">)</span>
<span class="n">runconfig</span> <span class="o">=</span> <span class="n">RunConfiguration</span><span class="p">()</span>
<span class="n">runconfig</span><span class="o">.</span><span class="n">target</span> <span class="o">=</span> <span class="n">compute_target</span>
<span class="n">runconfig</span><span class="o">.</span><span class="n">environment</span> <span class="o">=</span> <span class="n">env</span>
</code></pre></div>
<h2>Data preparation and augmentation step</h2>
<p>Now that the <code>Dataset</code> is registered, it's available for use.</p>
<div class="highlight"><pre><span></span><code><span class="n">iris_dataset</span> <span class="o">=</span> <span class="n">Dataset</span><span class="o">.</span><span class="n">get_by_name</span><span class="p">(</span><span class="n">ws</span><span class="p">,</span> <span class="s1">'iris_baseline'</span><span class="p">)</span>
<span class="n">iris_dataset</span><span class="o">.</span><span class="n">take</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span><span class="o">.</span><span class="n">to_pandas_dataframe</span><span class="p">()</span>
</code></pre></div>
<div>
<style scoped>
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
</style>
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th></th>
<th>sepal_length</th>
<th>sepal_width</th>
<th>petal_length</th>
<th>petal_width</th>
<th>species</th>
</tr>
</thead>
<tbody>
<tr>
<th>0</th>
<td>5.1</td>
<td>3.5</td>
<td>1.4</td>
<td>0.2</td>
<td>Iris-setosa</td>
</tr>
<tr>
<th>1</th>
<td>4.9</td>
<td>3.0</td>
<td>1.4</td>
<td>0.2</td>
<td>Iris-setosa</td>
</tr>
<tr>
<th>2</th>
<td>4.7</td>
<td>3.2</td>
<td>1.3</td>
<td>0.2</td>
<td>Iris-setosa</td>
</tr>
</tbody>
</table>
</div>
<div class="highlight"><pre><span></span><code><span class="n">ds_input</span> <span class="o">=</span> <span class="n">iris_dataset</span><span class="o">.</span><span class="n">as_named_input</span><span class="p">(</span><span class="s2">"iris_baseline"</span><span class="p">)</span>
</code></pre></div>
<ul>
<li>Use <code>Dataset</code>s for initial input to a Pipeline.</li>
<li>Use <code>OutputFileDatasetConfig</code> for temporary data that flows between pipeline steps.</li>
</ul>
<div class="highlight"><pre><span></span><code><span class="n">X_train_dir</span> <span class="o">=</span> <span class="n">OutputFileDatasetConfig</span><span class="p">(</span><span class="s2">"X_train_dir"</span><span class="p">)</span>
<span class="n">X_test_dir</span> <span class="o">=</span> <span class="n">OutputFileDatasetConfig</span><span class="p">(</span><span class="s2">"X_test_dir"</span><span class="p">)</span>
<span class="n">y_train_dir</span> <span class="o">=</span> <span class="n">OutputFileDatasetConfig</span><span class="p">(</span><span class="s2">"y_train_dir"</span><span class="p">)</span>
<span class="n">y_test_dir</span> <span class="o">=</span> <span class="n">OutputFileDatasetConfig</span><span class="p">(</span><span class="s2">"y_test_dir"</span><span class="p">)</span>
</code></pre></div>
<p>Create the dataprep step:</p>
<p><img alt="image of dataprep step in graph" src="/images/dataprep.png"></p>
<p>Note how the <code>Dataset</code> input and <code>OutputFileDatasetConfig</code> outputs are shown.</p>
<div class="highlight"><pre><span></span><code><span class="c1"># I set reuse to `False`, since part of this step is random selection of sets. ('Cept, of course, RANDOM_SEED is the same)</span>
<span class="n">dataprep_step</span> <span class="o">=</span> <span class="n">PythonScriptStep</span><span class="p">(</span>
<span class="n">script_name</span> <span class="o">=</span> <span class="s2">"dataprep.py"</span><span class="p">,</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span>
<span class="s2">"--X_train_dir"</span><span class="p">,</span> <span class="n">X_train_dir</span><span class="p">,</span>
<span class="s2">"--y_train_dir"</span><span class="p">,</span> <span class="n">y_train_dir</span><span class="p">,</span>
<span class="s2">"--X_test_dir"</span><span class="p">,</span> <span class="n">X_test_dir</span><span class="p">,</span>
<span class="s2">"--y_test_dir"</span><span class="p">,</span> <span class="n">y_test_dir</span><span class="p">],</span>
<span class="n">inputs</span> <span class="o">=</span> <span class="p">[</span><span class="n">ds_input</span><span class="p">],</span>
<span class="n">compute_target</span> <span class="o">=</span> <span class="n">compute_target</span><span class="p">,</span>
<span class="n">source_directory</span><span class="o">=</span><span class="s2">"./src/dataprep"</span><span class="p">,</span>
<span class="n">allow_reuse</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span>
<span class="n">runconfig</span> <span class="o">=</span> <span class="n">runconfig</span>
<span class="p">)</span>
</code></pre></div>
<h2>Training</h2>
<p>The next step takes two outputs from the first step and writes the model to the <code>model_path</code> output.</p>
<div class="highlight"><pre><span></span><code><span class="n">model_dir</span> <span class="o">=</span> <span class="n">OutputFileDatasetConfig</span><span class="p">(</span><span class="s2">"model_path"</span><span class="p">)</span>
<span class="n">training_step</span> <span class="o">=</span> <span class="n">PythonScriptStep</span><span class="p">(</span>
<span class="n">script_name</span> <span class="o">=</span> <span class="s2">"train.py"</span><span class="p">,</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span>
<span class="s2">"--X_train_dir"</span><span class="p">,</span> <span class="n">X_train_dir</span><span class="o">.</span><span class="n">as_input</span><span class="p">(</span><span class="s2">"X_train_dir"</span><span class="p">),</span>
<span class="s2">"--y_train_dir"</span><span class="p">,</span> <span class="n">y_train_dir</span><span class="o">.</span><span class="n">as_input</span><span class="p">(</span><span class="s2">"y_train_dir"</span><span class="p">),</span>
<span class="s2">"--model_dir"</span><span class="p">,</span> <span class="n">model_dir</span><span class="p">],</span>
<span class="n">compute_target</span> <span class="o">=</span> <span class="n">compute_target</span><span class="p">,</span>
<span class="n">source_directory</span><span class="o">=</span><span class="s2">"./src/train/"</span><span class="p">,</span>
<span class="n">allow_reuse</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<span class="n">runconfig</span><span class="o">=</span><span class="n">runconfig</span>
<span class="p">)</span>
</code></pre></div>
<h2>Evaluation</h2>
<p>Takes the <code>model_path</code> from the training step and the test data from the dataprep step. Internally, it reconstitutes the model, runs it against the test data, and writes something to the log (the child run's <code>70_driver_log.txt</code> file). </p>
<div class="highlight"><pre><span></span><code><span class="n">eval_step</span> <span class="o">=</span> <span class="n">PythonScriptStep</span><span class="p">(</span>
<span class="n">script_name</span> <span class="o">=</span> <span class="s2">"evaluate.py"</span><span class="p">,</span>
<span class="n">arguments</span><span class="o">=</span><span class="p">[</span>
<span class="s2">"--model_dir"</span><span class="p">,</span> <span class="n">model_dir</span><span class="o">.</span><span class="n">as_input</span><span class="p">(</span><span class="s2">"model_dir"</span><span class="p">),</span>
<span class="s2">"--X_test_dir"</span><span class="p">,</span> <span class="n">X_test_dir</span><span class="o">.</span><span class="n">as_input</span><span class="p">(</span><span class="s2">"X_test_dir"</span><span class="p">),</span>
<span class="s2">"--y_test_dir"</span><span class="p">,</span> <span class="n">y_test_dir</span><span class="o">.</span><span class="n">as_input</span><span class="p">(</span><span class="s2">"y_test_dir"</span><span class="p">)],</span>
<span class="n">compute_target</span> <span class="o">=</span> <span class="n">compute_target</span><span class="p">,</span>
<span class="n">source_directory</span><span class="o">=</span><span class="s2">"./src/evaluate/"</span><span class="p">,</span>
<span class="n">allow_reuse</span> <span class="o">=</span> <span class="kc">True</span><span class="p">,</span>
<span class="n">runconfig</span><span class="o">=</span><span class="n">runconfig</span>
<span class="p">)</span>
</code></pre></div>
<h2>Create pipeline</h2>
<ul>
<li>The source code associated with the individual steps is zipped up, uploaded. </li>
<li>The compute resource is allocated</li>
<li>A Docker image is built for it w. the necessary environment</li>
<li>The dependency graph for the pipeline is calculated</li>
<li>The steps execute, as necessary</li>
</ul>
<p>In this case, since I set <code>allow_reuse</code> to <code>False</code> in the first step, every run will cause a total rerun. The thing is that my very first step is where I do not just datapreparation, but the shuffling for the test/train split. That could be split into multiple steps if dataprep were an expensive operation. Or, if datapreparation manipulated both testing and training data, then you could have dataprep be one step and do the test/training split either at the beginning of the train step or as a separate step. </p>
<p>I could imagine for instance, after the test/train split, you put the same data into two different training steps, which you directly compare in the evaluation split...</p>
<p>But all of that goes beyond this simple example...</p>
<div class="highlight"><pre><span></span><code><span class="c1"># Build the pipeline</span>
<span class="n">pipeline1</span> <span class="o">=</span> <span class="n">Pipeline</span><span class="p">(</span><span class="n">workspace</span><span class="o">=</span><span class="n">ws</span><span class="p">,</span> <span class="n">steps</span><span class="o">=</span><span class="p">[</span><span class="n">dataprep_step</span><span class="p">,</span> <span class="n">training_step</span><span class="p">,</span> <span class="n">eval_step</span><span class="p">])</span>
<span class="c1"># Submit the pipeline to be run</span>
<span class="n">pipeline_run1</span> <span class="o">=</span> <span class="n">Experiment</span><span class="p">(</span><span class="n">ws</span><span class="p">,</span> <span class="s1">'Iris_SKLearn_Pipeline'</span><span class="p">)</span><span class="o">.</span><span class="n">submit</span><span class="p">(</span><span class="n">pipeline1</span><span class="p">)</span>
<span class="n">pipeline_run1</span><span class="o">.</span><span class="n">wait_for_completion</span><span class="p">()</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code>Created step dataprep.py [1c75fd38][e8dd26b8-a147-4934-9a4f-42bbe563a84d], (This step will run and generate new outputs)
</code></pre></div>
<p>...etc...</p>Longer Orange 30 SLA Printer Assembly & Initial Impressions2019-10-07T16:00:00-10:002019-10-07T16:00:00-10:00larrytag:knowing.net,2019-10-07:/posts/2019/10/longer-orange-first-print/<p>I received my Orange 30 in a well-packed box via DHL. My box did not contain a manual, which I think might be an indication that it was among the first few hundred printers shipped. (It did, however, have a USB with what would apparently have been the printed manual …</p><p>I received my Orange 30 in a well-packed box via DHL. My box did not contain a manual, which I think might be an indication that it was among the first few hundred printers shipped. (It did, however, have a USB with what would apparently have been the printed manual, so no real harm.) </p>
<p>The assembly went okay. The first step is the assembly of the cover, which I did wrong the first time. The key is to realize that each of the panels not only has a top and bottom (obvious enough) but a front and back: only by aligning them properly do the slots and tabs line up to make a sealed box. The use of two rubber bands (supplied in the box, along with a backup) is a little wonky, but in the end I don’t think it’s a big deal. </p>
<p>Otherwise, the assembly was quite easy. There were quite a few knick-knacks and extras in the box, like playing cards (for scraping wet resin) and two pairs of nitrile gloves (which were too small for my decidedly-average-sized hands and tore). </p>
<h2>You get a support! And you get a support! Everyone gets a support!</h2>
<p>This is my first SLA printer, but I do have an FDM printer (a Tevo Tornado) and so I decided that my first print would be Benchy, that standby of filament calibration. I imported the STL into Orange’s software and went through the easy-enough steps of checking the model, generating supports, and slicing it. </p>
<p>To be fair, I do not understand how supports work in SLA. The default level of supports generates <em>tons</em> of supports. (See image.) Because I wanted my first print to just be a test and not particularly stressful, I kept the suggested supports. Is that a good idea? What are the odds of Benchy being printed by an SLA printer with no supports (as is the typical stress-test for filament machines)? </p>
<p>The software defaults to a different Longer model, but I luckily caught that and switched it to the Longer 30 before saving the file to the USB drive. </p>
<p>While loading the file I noticed that the touchscreen was pretty non-responsive. It worked, but I often had to touch several times. I have a bad feeling about it's longevity. </p>
<p>Leveling the print surface was extremely easy compared to on my filament printer: just lower the build plate onto a piece of paper and lock down the screws. Very easy and it seemed to have worked well enough.</p>
<h2>Fume acceptance factor</h2>
<p>I began printing about an hour after beginning assembly of the printer. I had set up the printer in a workshop space under our living area. After 1/2-hour of printing, my wife called down from upstairs and declared that the fumes / smell were unacceptable. </p>
<p>She's pretty sensitive, but I mean, sensitive or not she was 30 feet away and bam! Give the fumes serious consideration. Luckily, I have a garage and after canceling the current print, scraping off a dozen layers or so (very easy), and gingerly moving the printer (including tank of resin) into the garage, I got started again. The fumes are still evident even with the cover on. I think I’ll probably start wearing a respirator when printing with this device. Perhaps that’s overly cautious, but my point is that this isn’t a magical cure for resin fumes. </p>
<p>Noise is often a big issue with filament printers, but that is definitely not a concern with this printer. It’s very quiet. It has a small fan but otherwise the only noise is the faint sound of the Z-axis screw moving. </p>
<p>My total print time was 4 or 4 1/2 hours. It was very exciting to see the print slowly emerging from the goo. </p>
<h2>Goo cleanup</h2>
<p>So now came the really intimidating part: detaching the model and cleaning up the print and printer. I can see that this is going to be a learning curve. At the end of the printing process you have to:</p>
<ul>
<li>
<p>Remove the print plate from the printer and clean it of any excess resin, scraping the resin such that if falls back into the reservoir. But the print plate is just about the same size as the tank, so keeping it centered, while also avoiding the gantry, is difficult. I dripped some onto the edge of the tank and top of the printer.</p>
</li>
<li>
<p>Clean excess resin off the print. Ideally, I guess this would be into an alcohol bath, but I didn’t have any containers that were both big enough for the print and small enough that I could stand spoiling that much denatured alcohol. So instead I spritzed the model with alcohol. </p>
</li>
<li>
<p>Getting the model off the build plate was easy compared to getting a filament print off a glass surface. I used the scraper provided in the Orange 30 box and got the print off in a matter of a few seconds. After I did that, I cleaned the build plate with alcohol. </p>
</li>
<li>
<p>Finally, the real drama: I had dramatically overfilled the reservoir and wanted to reuse the resin. The box contains two 3M filter-funnels (it’s not clear to me that they’re reusable, so I expect I’ll be ordering more of those right away). While not quite a total disaster, I spilled a few CCs of resin down the side of the bottle and onto my worktable. I see myself figuring out some kind of stand for holding the filter and resin bottle in place while decanting from the reservoir but, until then, I will <em>definitely</em> enlist someone to help me with this part of the process. </p>
</li>
</ul>
<p>Denatured alcohol seems to do a great job breaking down the viscosity of the resin and cleanup <em>wasn’t hard</em> but the nature of the printer is that there will be drips and spills. I was extremely glad to be wearing (my own) protective gloves and really see managing the resin as the biggest challenge to using this printer. </p>
<h2>Print quality</h2>
<p>How’d the print come out? Well… okay. I was not sure whether to remove the supports before the print cured or after, but I figured that it would be easier before, so I did that. They were easy to snip with a pair of cutoff snips I have for soldering, but the result left a stippling of “pimples” on the hull of the boat. The details are excellent: you can’t see it in the photos, but the stern of Benchy has writing on it and it is crisp as anything in the SLA print. Likewise, the “boards” that make up the top of the cabin are really nice. </p>
<p>I forgot that SLA prints <em>solid</em> and my Benchy weighs in at 22grams. Plus, I would guess, another few grams from supports and spillage. </p>
<p>I revisited the software afterwards to see if I could control the supports and solidity. Not really. You can adjust the total number of supports (expressed as a percentage of the default number), the width of the pillars, and the radius (diameter?) of the attachment ‘pimple’ but not, AFAICT, eliminate individual supports. Also, I could not find a way to hollow out the model. Does this mean that I have more Meshmixer in my future? Who knows? </p>From Whalesharks To Leopard Spheres2019-03-30T12:23:00-10:002019-03-30T12:23:00-10:00larrytag:knowing.net,2019-03-30:/posts/2019/03/from-whalesharks-to-leopard-spheres/<p>One of my big weekend projects (for longer than I care to think) has been trying to create a pipeline for identifying individual whalesharks from photos. The project had kind of grown moribund as I repeatedly failed to get any decent level of recognition despite using what I thought was …</p><p>One of my big weekend projects (for longer than I care to think) has been trying to create a pipeline for identifying individual whalesharks from photos. The project had kind of grown moribund as I repeatedly failed to get any decent level of recognition despite using what I thought was a good technique: An algorithm lifted from astrophotography that uses the angles between stars. Individual whalesharks have a unique constellation of spots and whaleshark researchers have used that algorithm (with a lot of manual work) to successfully ID whalesharks in their catalogs.</p>
<p>But when I tried to build an ML system that went from photos to meshes to histograms-of-angles I just couldn't get any traction. I'd back-burnered the project until, on Christmas Day of this year, I actually saw my first whaleshark in the wild. (For some reason, it's been an incredible year for whalesharks in Hawaii. Climate change? Fluke?)</p>
<p><img alt="Whaleshark swimming under Boaty McBoatface" class="wp-image-10862" src="/uploads/2019/03/DSC03944.jpg"></p>
<p>With fresh eyes on the problem, I decided to create a synthetic dataset that would allow easier experimentation. The result is what I call 'Leopard Spheres' -- basically, randomly spotted spheres from which I could generate the histogram of angles that are the input to the algorithm.</p>
<p><img alt="" class="wp-image-10864" src="/uploads/2019/03/Screenshot-2019-03-30-12.17.01-1024x209.png"></p>
<p><img alt="" class="wp-image-10866" src="/uploads/2019/03/Screenshot-2019-03-30-12.22.07-1024x147.png"></p>
<p>With the leopard spheres in hand, I quickly became disillusioned with the astrophotography algorithm. While it's robust against rotation in the XY plane and small rotations in the Z plane, the data really jump around with the larger rotations that are typical when photographing an animal (even binning the photographs into sectors).</p>
<p>So I've more or less decided to abandon the "bag of angles" algorithm and use a convolutional neural network over the Delaunay mesh that I generate from the spots and use that in a twin network for identification. The big question is whether even that amount of preprocessing is over-thinking the problem. I'll let you know.</p>Humpback Whale Identification By Deep Learning2019-03-24T12:37:00-10:002019-03-24T12:37:00-10:00larrytag:knowing.net,2019-03-24:/posts/2019/03/humpback-whale-identification-by-deep-learning/<p>OMG I can't believe I missed this competition. It's exactly in line with my <a href="http://www.knowing.net/index.php/2018/05/24/deep-whalesharks/">whaleshark identification</a> project.</p>
<p><a href="https://www.kaggle.com/c/humpback-whale-identification">https://www.kaggle.com/c/humpback-whale-identification</a></p>
<p>Here's a baby humpback whale that swam up to the boat a few weeks ago. In the second photo you can see it popped it's head up …</p><p>OMG I can't believe I missed this competition. It's exactly in line with my <a href="http://www.knowing.net/index.php/2018/05/24/deep-whalesharks/">whaleshark identification</a> project.</p>
<p><a href="https://www.kaggle.com/c/humpback-whale-identification">https://www.kaggle.com/c/humpback-whale-identification</a></p>
<p>Here's a baby humpback whale that swam up to the boat a few weeks ago. In the second photo you can see it popped it's head up and gave Tina a look:</p>
<p><a href="/uploads/2019/03/GPTempDownload-3.jpg"><img alt="" class="alignnone size-large wp-image-6285" height="329" src="/uploads/2019/03/GPTempDownload-3-1024x576.jpg" width="584"></a></p>
<p><a href="/uploads/2019/03/GPTempDownload-4.jpg"><img alt="" class="alignnone size-large wp-image-6286" height="692" src="/uploads/2019/03/GPTempDownload-4-864x1024.jpg" width="584"></a></p>Please: Say "Twin" Networks, Not "Siamese" Networks2018-12-12T12:17:00-10:002018-12-12T12:17:00-10:00larrytag:knowing.net,2018-12-12:/posts/2018/12/please-say-twin-networks-not-siamese-networks/<p>I'm a big fan of using a pair of identical networks to create output vectors that are then fed into a network that is trained to judge whether it's two input vectors are the same or different.</p>
<p>This is a powerful technique for "low k-shot" comparisons. Most ML techniques that …</p><p>I'm a big fan of using a pair of identical networks to create output vectors that are then fed into a network that is trained to judge whether it's two input vectors are the same or different.</p>
<p>This is a powerful technique for "low k-shot" comparisons. Most ML techniques that are trying to identify, say, "photos of <em>_my_</em> cat," require lots of examples of both the general category and perhaps dozens or hundreds of photos of <em>my</em> specific cat. But with twin networks, you train the discriminator portion to tell whether one input is from the same source as the other. Those two inputs are generated from two sub-networks that share the same weights.</p>
<p>[caption id="attachment_6265" align="alignnone" width="584"]<a href="/uploads/2019/03/IMG_0783.jpg"><img alt="Schematic of twin network" class="size-large wp-image-6265" height="788" src="/uploads/2019/03/IMG_0783-759x1024.jpg" width="584"></a> A twin network for low k-shot identification[/caption]</p>
<p>Since training propagates backwards, for the discriminator to succeed, it needs "features that distinguish a particular cat." And since the weights that generate those inputs are <em>shared</em>, training (if it's successful) creates a "Features" sub-network that essentially extracts a "fingerprint useful for discriminating."</p>
<p>To inference with a twin network, then, you hold your target data constant in one network and iterate over your exemplar dataset. For each example in examples, you get a "similarity to target" rating that you can use for final processing (perhaps with a "That looks like a new cat!" threshold or perhaps with a user-reviewed "Compare the target with these three similar cats" UX, etc.).</p>
<p>As I said, I'm a big fan of this technique and it's what I've been using in my <a href="http://www.knowing.net/index.php/2018/05/24/deep-whalesharks/">whaleshark identification</a> project.</p>
<p>However, there's one unfortunate thing about this technique, which is that it was labeled as a "Siamese network" <a href="https://papers.nips.cc/paper/769-signature-verification-using-a-siamese-time-delay-neural-network.pdf">back in the day</a>. This is a reference to the term "Siamese twins," which is an archaic and potentially offensive way to refer to conjoined twins.</p>
<p>It would be a shame if this powerful technique grew in popularity and carried with it an unfortunate label. "Twin networks" is just as descriptive and not problematic.</p>Ricky Jay R.I.P2018-11-25T09:00:00-10:002018-11-25T09:00:00-10:00larrytag:knowing.net,2018-11-25:/posts/2018/11/ricky-jay-r-i-p/<p>Ricky Jay was one of my heroes. I first became aware of him in the pages of the remarkable “Cards as Weapons,” an oversized paperback that I bought at age 13 because it had a few pictures of topless women in it (you really can’t appreciate how much the …</p><p>Ricky Jay was one of my heroes. I first became aware of him in the pages of the remarkable “Cards as Weapons,” an oversized paperback that I bought at age 13 because it had a few pictures of topless women in it (you really can’t appreciate how much the Internet has changed the adolescent male experience). But “Cards as Weapons” additionally laid out a path:</p>
<ul>
<li>some straightforward guidance on technique (although unlike Jay, I gripped the cards along the short side, trading accuracy for spin)</li>
<li>
<p>tales of increasingly difficult and improbable tasks (splitting string cheese, penetrating a newspaper, sticking in to a watermelon)</p>
</li>
<li>
<p>and then, catnip to an adolescent in the 1970s, a Guinness World Record distance</p>
</li>
</ul>
<p>It’s an axiom that all magicians are nerds: enthusiastic about a subject to a degree that overwhelms social decorum. One of Teller’s rules of magic is “make the secret more trouble than it seems worth.” Jay, who was one of the best close-up magicians in the world, was crystal clear about the obsession with which you had to practice the simplest of passes: thousands of hours, a lifetime of practice, a set of folding mirrors that you carried in your valise.</p>
<p>I could never drive myself to master palming a card or (to my great regret) walking a coin over the backs of my fingers, but Jay did give me permission to throw pack after pack of cards into trashcans, through the sports pages, and, while I never managed to stick a card into a watermelon skin, I eventually went wall-to-wall in our school field house (a distance, I am compelled to mention all these decades longer, 30’ greater than Jay’s Guinness World Record).</p>
<p>My obsession with throwing things shifted to Frisbee discs, and a complete accounting of that will have to wait for Volume III of my memoirs.</p>
<p>But Jay also modeled a different set of virtues, less spectacular but perhaps more useful to a young nerd. The magicians of the time came in two flavors: waist-coated or unicorn t-shirted. Either way they were flamboyant: the spectacle of magic called for dramatic gestures, plummy line readings, and a transparently pathetic demand to be the center of attention. Jay went a different route: a matter of fact affect bordering on subdued, a patter that took as its foundation true scholarship, and an invitation to look as closely as you wanted at the trick. If you admire the craft of David Blaine, you should watch some Ricky Jay routines to see some true polish.</p>
<p>I see Jay’s influence in another obsession that began around that time and which, unlike throwing cards or Frisbee’s, I still pursue: programming computers. Like close-up magic, software development is a task of unrelenting precision. A trick fails if the palmed card is even glimpsed, a program fails if a semicolon is misplaced or a count to a million is off by one. For professional programmers, the precision is a given. The scholarship is not. The self-effacement is not. There are many blowhards of software development who are missing only a cape and a tophat to complement their boasts of their tours of the courts of Europe and their mastery of hidden secrets.</p>
<p>A magician’s magician, he was apparently well-employed as a consultant in Hollywood and, to the extent that people would recognize him, I suppose they’d recognize his basset-faced visage as the craps dealer in “Deadwood” or from the movies of David Mamet, where Jay would deliver Mamet-like lines such as “Everything in life, the money’s in the rematch.” Jay played a craps dealer; he was the world’s foremost expert in dice.</p>
<p>Obsessive practice, scholarship, and a sardonic sense of humor : those were the elements to Jay’s success. Ricky Jay was not well known, but he was well admired.</p>The Simplest Deep Learning Program That Could Possibly Work2018-10-15T05:53:00-10:002018-10-15T05:53:00-10:00larrytag:knowing.net,2018-10-15:/posts/2018/10/the-simplest-deep-learning-program-that-could-possibly-work/<p>Once upon a time, when I, a C programmer, first learned Smalltalk, I remember lamenting to J.D. Hildebrand "I just don't get it: where's the <code>main()</code>?" Eventually I figured it out, but the lesson remained: Sometimes when learning a new paradigm, what you need isn't a huge tutorial, it's …</p><p>Once upon a time, when I, a C programmer, first learned Smalltalk, I remember lamenting to J.D. Hildebrand "I just don't get it: where's the <code>main()</code>?" Eventually I figured it out, but the lesson remained: Sometimes when learning a new paradigm, what you need isn't a huge tutorial, it's the simplest thing possible.</p>
<p>With that in mind, here is the simplest Keras neural net that does something "hard" (learning and solving XOR) :</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span>
<span class="kn">from</span> <span class="nn">keras.models</span> <span class="kn">import</span> <span class="n">Sequential</span>
<span class="kn">from</span> <span class="nn">keras.layers.core</span> <span class="kn">import</span> <span class="n">Activation</span><span class="p">,</span> <span class="n">Dense</span>
<span class="kn">from</span> <span class="nn">keras.optimizers</span> <span class="kn">import</span> <span class="n">SGD</span>
<span class="c1"># Allocate the input and output arrays</span>
<span class="n">X</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">zeros</span><span class="p">((</span><span class="mi">4</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span> <span class="kp">dtype</span><span class="o">=</span><span class="s1">'uint8'</span><span class="p">)</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="kp">zeros</span><span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="kp">dtype</span><span class="o">=</span><span class="s1">'uint8'</span><span class="p">)</span>
<span class="c1"># Training data X[i] -> Y[i]</span>
<span class="n">X</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
<span class="n">y</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">X</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">y</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">X</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span>
<span class="n">y</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">X</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">y</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mi">0</span>
<span class="c1"># Create a 2 (inputs) : 2 (middle) : 1 (output) model, with sigmoid activation</span>
<span class="n">model</span> <span class="o">=</span> <span class="n">Sequential</span><span class="p">()</span>
<span class="n">model</span><span class="o">.</span><span class="kp">add</span><span class="p">(</span><span class="n">Dense</span><span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="n">input_dim</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span>
<span class="n">model</span><span class="o">.</span><span class="kp">add</span><span class="p">(</span><span class="n">Activation</span><span class="p">(</span><span class="s1">'sigmoid'</span><span class="p">))</span>
<span class="n">model</span><span class="o">.</span><span class="kp">add</span><span class="p">(</span><span class="n">Dense</span><span class="p">(</span><span class="mi">1</span><span class="p">))</span>
<span class="n">model</span><span class="o">.</span><span class="kp">add</span><span class="p">(</span><span class="n">Activation</span><span class="p">(</span><span class="s1">'sigmoid'</span><span class="p">))</span>
<span class="c1"># Train using stochastic gradient descent</span>
<span class="n">sgd</span> <span class="o">=</span> <span class="n">SGD</span><span class="p">(</span><span class="n">lr</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">decay</span><span class="o">=</span><span class="mf">1e-6</span><span class="p">,</span> <span class="n">momentum</span><span class="o">=</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">nesterov</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">model</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">loss</span><span class="o">=</span><span class="s1">'mean_squared_error'</span><span class="p">,</span> <span class="n">optimizer</span><span class="o">=</span><span class="n">sgd</span><span class="p">)</span>
<span class="c1"># Run through the data `epochs` times</span>
<span class="n">history</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">fit</span><span class="p">(</span><span class="n">X</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">epochs</span><span class="o">=</span><span class="mi">10000</span><span class="p">,</span> <span class="n">batch_size</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">verbose</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># Test the result (uses same X as used for training)</span>
<span class="nb">print</span> <span class="p">(</span><span class="n">model</span><span class="o">.</span><span class="n">predict</span><span class="p">(</span><span class="n">X</span><span class="p">))</span>
</code></pre></div>
<p>If you run this, there will be a startup time of several seconds while the libraries load and the model is built, and then you will start to see output from the call to <code>fit</code>. After the data has been run through 10,000 times, the model will then try to predict the output. As you'll see, the neural network has learned the proper set of weights to solve the XOR logic gate.</p>
<p>Now draw the rest of the owl.<br>
<a href="/uploads/2018/10/EFE0CB36-D19A-4B32-81D9-C1480F56085C.jpeg"><img alt="" class="alignnone size-full wp-image-6253" height="407" src="/uploads/2018/10/EFE0CB36-D19A-4B32-81D9-C1480F56085C.jpeg" width="500"></a></p>"The Deuce" Stinks. A Rant.2018-10-01T17:03:00-10:002018-10-01T17:03:00-10:00larrytag:knowing.net,2018-10-01:/posts/2018/10/the-deuce-stinks-a-rant/<p>I’m a hair’s-breadth away from declaring that “The Deuce,” HBO’s Sunday night “prestige drama” about flesh-peddling and pornos in Times Square and 42nd Street in the mid-70s, is an exercise in trolling, some kind of meta-level commentary on the lack of drama, characterization, or stakes in, y …</p><p>I’m a hair’s-breadth away from declaring that “The Deuce,” HBO’s Sunday night “prestige drama” about flesh-peddling and pornos in Times Square and 42nd Street in the mid-70s, is an exercise in trolling, some kind of meta-level commentary on the lack of drama, characterization, or stakes in, y’know, pornos. It’s almost easier to believe that David Simon — the creator of “The Wire” FFS! — is engaged in some kind of multimillion-dollar performance art than that he’s presiding over a writing room as sloppy and listless (dare I say, “flaccid”?) as that churning out the scripts for this season.</p>
<p>The over-arching problem is that there’s no goddamn conflict: the characters just appear, smoke, have breakfast or a Dewar’s on the rocks, smoke, engage in the boring routine of their flesh-peddling, smoke, pour themselves another drink, and then we cut away to another character. I mean, my God, what was going on with James Franco and the dry-cleaning store he owned for two episodes? Why did we spend five minutes jazzing around in the JFK parking lot to establish “she’s going to LA alone because he’s scared of flying”?</p>
<p>Maggie Gyllenhaal says in one scene that her Little Red Riding Hood porno (are we supposed to gasp in wonder at the visionary genius?) will cost hundreds of thousands. Then the next time we see here she’s being offered \$10K for 10% and a blowjob, which she gives, and what are we supposed to feel? “Boohoo, despite her ambitions she can’t escape the expectation that she’s a whore?” “Hooray, she’s doing what she has to do to realize her dream?” I dunno’. I don’t care. I mean, I <em>could care</em> if the writer’s decided to engage in character development rather than just moving on to the next damn thing.</p>
<p>I’ve watched something like <em>14 hours</em> of this show on the strength of the writing talent of Simon and Pellecanos. That’s enough time to bring a lot of strands together, to get a lot of plots up to a rolling boil. But instead we’re halfway through the second season and goddam Lawrence Gilliard is walking in to a situation, taking it in, walking out, and then having the same damn conversation about how things never change. Yeah, you’re telling me, D’Angelo.</p>
<p>The first season was set in 1972, the “Walk On The Wild Side” pre-punk era, but the second jumped forward five years, to a 1977 that, contra reality, has Talking Heads, Elvis Costello, and The Damned as the soundtrack. (There <em>were</em> parts of NYC where that might have been the sound track, but they sure as hell weren’t mid-town discos.) One episode had a thirty-something musician quoting Rilke and Rimbaud and handing the plotless female bartender an album, which a sharp-eyed viewer can see was Jim Carroll’s “Catholic Boy,” released in 1980. Carroll you may remember from the song “Those Are People Who Died” but in 1977 the real Jim Carroll was not a musician but a poet struggling with heroin addiction. He didn’t start singing until he moved to California in 1978. All of which is trivial, but <em>they’re the ones</em> who decided to have this scene and we viewers are supposed to make sense of it and even if you know all about Jim Carroll, the scene is pointless. (And, by the way, Jim Carroll would have been a freakish red-haired beanpole friendly with everyone from Patti Smith to Keith Richards and would be an <em>excellent</em> character in a series about the bizarre confluence of high- and low- culture in mid-70s NYC which is a setting ripe for drama despite the evidence of “The Deuce.”)</p>
<p>Finally, and I understand that no one will ever get this far in this post, and it really neither supports nor refutes my thesis, but every time “The Deuce” opening credits end, and there is a shot of a building facade reflected in a puddle through which a foot walks, I get pissed off, because that’s a total rip-off of the closing shot in the opening credits for “Deadwood” and if there’s one thing that’s clear about “The Deuce” it’s that they don’t have David Milch writing for them.</p>Writing to Azure Storage With F#2018-09-28T06:15:00-10:002018-09-28T06:15:00-10:00larrytag:knowing.net,2018-09-28:/posts/2018/09/writing-to-azure-storage-with-f/<p>This last weekend I participated in the "Hack for the Sea" hackathon. As part of that, I needed to store images and structured data to Azure Storage. The process is very straightforward using F#'s <code>async</code> capabilities.</p>
<p>First, you'll need the connection string for your Azure Storage:</p>
<p><a href="/uploads/2018/09/imageData.png"><img alt="" class="alignnone size-large wp-image-6235" height="445" src="/uploads/2018/09/imageData-1024x780.png" width="584"></a></p>
<p>Use that to …</p><p>This last weekend I participated in the "Hack for the Sea" hackathon. As part of that, I needed to store images and structured data to Azure Storage. The process is very straightforward using F#'s <code>async</code> capabilities.</p>
<p>First, you'll need the connection string for your Azure Storage:</p>
<p><a href="/uploads/2018/09/imageData.png"><img alt="" class="alignnone size-large wp-image-6235" height="445" src="/uploads/2018/09/imageData-1024x780.png" width="584"></a></p>
<p>Use that to instantiate a <code>CloudStorageAccount</code> object:</p>
<div class="highlight"><pre><span></span><code>let csa = CloudStorageAccount.Parse connectionString
</code></pre></div>
<p>Then, write method(s) to store the data in either Blob storage or Table storage:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Put</span><span class="w"> </span><span class="n">directly</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">Azure</span><span class="w"> </span><span class="n">blob</span><span class="w"> </span><span class="n">storage</span><span class="w"> </span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">photoSubmissionAsync</span><span class="w"> </span><span class="p">(</span><span class="n">cloudStorageAccount</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">CloudStorageAccount</span><span class="p">)</span><span class="w"> </span><span class="n">imageType</span><span class="w"> </span><span class="p">(</span><span class="n">maybePhoto</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">IO</span><span class="o">.</span><span class="n">Stream</span><span class="w"> </span><span class="n">option</span><span class="p">)</span><span class="w"> </span><span class="n">imageName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>
<span class="w"> </span><span class="n">async</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">match</span><span class="w"> </span><span class="n">maybePhoto</span><span class="w"> </span><span class="n">with</span><span class="w"> </span>
<span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Some</span><span class="w"> </span><span class="n">byteStream</span><span class="w"> </span><span class="o">-></span><span class="w"> </span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">containerName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"marinedebrispix"</span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">ctb</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cloudStorageAccount</span><span class="o">.</span><span class="n">CreateCloudBlobClient</span><span class="p">()</span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">container</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ctb</span><span class="o">.</span><span class="n">GetContainerReference</span><span class="w"> </span><span class="n">containerName</span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">blob</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">container</span><span class="o">.</span><span class="n">GetBlockBlobReference</span><span class="p">(</span><span class="n">imageName</span><span class="p">)</span><span class="w"> </span><span class="o">//|></span><span class="w"> </span><span class="n">Async</span><span class="o">.</span><span class="n">AwaitTask</span>
<span class="w"> </span><span class="n">blob</span><span class="o">.</span><span class="n">Properties</span><span class="o">.</span><span class="n">ContentType</span><span class="w"> </span><span class="o"><-</span><span class="w"> </span><span class="n">imageType</span>
<span class="w"> </span><span class="n">do</span><span class="o">!</span><span class="w"> </span><span class="n">blob</span><span class="o">.</span><span class="n">UploadFromStreamAsync</span><span class="p">(</span><span class="n">byteStream</span><span class="p">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="n">Async</span><span class="o">.</span><span class="n">AwaitTask</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="bp">true</span>
<span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">None</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="bp">false</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Put</span><span class="w"> </span><span class="n">directly</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">Azure</span><span class="w"> </span><span class="n">table</span><span class="w"> </span><span class="n">storage</span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">reportSubmissionAsync</span><span class="w"> </span><span class="p">(</span><span class="n">cloudStorageAccount</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">CloudStorageAccount</span><span class="p">)</span><span class="w"> </span><span class="n">report</span><span class="w"> </span><span class="n">photoName</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>
<span class="w"> </span><span class="n">async</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">ctc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">cloudStorageAccount</span><span class="o">.</span><span class="n">CreateCloudTableClient</span><span class="p">()</span><span class="w"> </span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">table</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ctc</span><span class="o">.</span><span class="n">GetTableReference</span><span class="p">(</span><span class="s2">"MarineDebris"</span><span class="p">)</span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">record</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">ReportStorage</span><span class="p">(</span><span class="n">report</span><span class="p">)</span>
<span class="w"> </span><span class="n">let</span><span class="w"> </span><span class="n">insertOperation</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">record</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="n">TableOperation</span><span class="o">.</span><span class="n">Insert</span>
<span class="w"> </span><span class="n">let</span><span class="o">!</span><span class="w"> </span><span class="n">tr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">table</span><span class="o">.</span><span class="n">ExecuteAsync</span><span class="p">(</span><span class="n">insertOperation</span><span class="p">)</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="n">Async</span><span class="o">.</span><span class="n">AwaitTask</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">tr</span><span class="o">.</span><span class="n">Etag</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="n">Some</span>
<span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>The object passed to <code>TableOperation.Insert</code> must be a subclass of <code>TableEntity</code>:</p>
<div class="highlight"><pre><span></span><code><span class="k">type</span><span class="w"> </span><span class="nx">ReportStorage</span><span class="p">(</span><span class="nx">report</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="nx">Report</span><span class="p">)</span><span class="w"> </span><span class="p">=</span>
<span class="w"> </span><span class="nx">inherit</span><span class="w"> </span><span class="nx">TableEntity</span><span class="p">(</span><span class="w"> </span><span class="s">"MainPartition"</span><span class="p">,</span><span class="w"> </span><span class="nx">report</span><span class="p">.</span><span class="nx">Timestamp</span><span class="p">.</span><span class="nx">ToString</span><span class="p">(</span><span class="s">"o"</span><span class="p">))</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">val</span><span class="w"> </span><span class="nx">public</span><span class="w"> </span><span class="nx">Report</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">report</span><span class="w"> </span><span class="o">|</span><span class="p">></span><span class="w"> </span><span class="nx">toJson</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span><span class="nx">get</span><span class="p">,</span><span class="w"> </span><span class="nx">set</span>
</code></pre></div>Xamarin: You must explicitly unsubscribe from NSNotifications if IDisposable2018-07-26T11:25:00-10:002018-07-26T11:25:00-10:00larrytag:knowing.net,2018-07-26:/posts/2018/07/xamarin-you-must-explicitly-unsubscribe-from-nsnotifications-if-idisposable/<p>In Xamarin, if you observe / subscribe to a particularly-named <code>NSNotification</code> in an object that is <code>IDisposable</code> (this includes any class descended from <code>NSObject</code>!), you MUST explicitly unsubscribe from it in your <code>Dispose</code> handler, or you will get a segfault (the system will attempt to call a method at a memory …</p><p>In Xamarin, if you observe / subscribe to a particularly-named <code>NSNotification</code> in an object that is <code>IDisposable</code> (this includes any class descended from <code>NSObject</code>!), you MUST explicitly unsubscribe from it in your <code>Dispose</code> handler, or you will get a segfault (the system will attempt to call a method at a memory location that is no longer valid). The pattern looks like this:</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="n">MyClass</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">NSObject</span>
<span class="p">{</span>
<span class="o">//</span><span class="w"> </span><span class="n">instance</span><span class="w"> </span><span class="n">variable</span>
<span class="n">private</span><span class="w"> </span><span class="n">NSObject</span><span class="w"> </span><span class="n">notificationObservationHandle</span><span class="p">;</span>
<span class="w"> </span><span class="n">MyClass</span><span class="p">()</span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="n">notificationObservationHandle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">NSNotificationCenter</span><span class="o">.</span><span class="n">DefaultCenter</span><span class="o">.</span><span class="n">AddObserver</span><span class="p">(</span><span class="n">notificationName</span><span class="p">,</span><span class="w"> </span><span class="n">NotificationHandler</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">NotificationHandler</span><span class="p">(</span><span class="n">NSNotification</span><span class="w"> </span><span class="n">notification</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="o">...</span><span class="w"> </span><span class="n">etc</span><span class="w"> </span><span class="o">...</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">private</span><span class="w"> </span><span class="nb nb-Type">bool</span><span class="w"> </span><span class="n">disposed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">false</span><span class="p">;</span>
<span class="w"> </span><span class="n">override</span><span class="w"> </span><span class="n">protected</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">Dispose</span><span class="p">(</span><span class="nb nb-Type">bool</span><span class="w"> </span><span class="n">disposing</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">disposed</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">disposing</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">NSNotificationCenter</span><span class="o">.</span><span class="n">DefaultCenter</span><span class="o">.</span><span class="n">RemoveObserver</span><span class="p">(</span><span class="n">notificationObserverHandle</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">disposed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">true</span><span class="p">;</span>
<span class="w"> </span><span class="n">base</span><span class="o">.</span><span class="n">Dispose</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>Deep Whalesharks2018-05-24T11:54:00-10:002018-05-24T11:54:00-10:00larrytag:knowing.net,2018-05-24:/posts/2018/05/deep-whalesharks/<p>Whalesharks are the largest fish in the ocean, but very little is known about their movements (where they breed, for instance, has been a huge mystery, although there's now pretty good evidence that some, at least, breed in the Galapagos).</p>
<p>Whalesharks have a "fingerprint" in the form of distinct spots …</p><p>Whalesharks are the largest fish in the ocean, but very little is known about their movements (where they breed, for instance, has been a huge mystery, although there's now pretty good evidence that some, at least, breed in the Galapagos).</p>
<p>Whalesharks have a "fingerprint" in the form of distinct spots on their front half. The current state-of-the-art technique for ID'ing whalesharks from photos is a pretty brilliant appropriation of an algorithm for locating astrophotographs in the sky:</p>
<ol>
<li>Extract Points Of Interest (POIs) from your target image</li>
<li>Draw the mesh of triangles created from those points</li>
<li>Create a histogram of the interior angles of those triangles</li>
<li>Use that histogram as a "fingerprint"</li>
</ol>
<p><a href="/uploads/2019/03/Artboard-1.png"><img alt="Visualization of steps in astrophotography fingerprinting" class="alignnone size-full wp-image-6273" height="842" src="/uploads/2019/03/Artboard-1.png" width="596"></a></p>
<p>The basic insight is that it's not the absolute <em>location</em> of the points-of-interest but their <em>internal relationships</em> that you can rely on. You can rotate the source image by any amount and the internal angles of the mesh stay constant. And because you're binning, this algorithm is at least somewhat robust against noise (either false POIs or, more likely, missing faint POIs).</p>
<p>This is a great algorithm that is amazingly good with astrophotography. But the geometry of the night sky is constant -- our constellations appear very much as they did to people thousands of years ago. Whether taken last night or last century, a photograph of Orion is going to Betelgeuse in one corner, Rigel in another, and a belt between them.</p>
<p>Two photos of the same whaleshark, though, will almost certainly be from different angles and distances. Another challenge is that the dappling of sunlight and shadowing from surface waves causes a <em>lot</em> of signal noise. So, today, whaleshark researchers have to do a lot of manual processing to identify an animal from a photograph.</p>
<p>My thought is to apply modern data-science and machine-learning approaches to identifying individual whalesharks. The main goal is really to create an efficient <em>pipeline</em> and not, so much, creating a better identification algorithm. (To be honest, I've already tried several "simple things that could possibly work" ML techniques and not gotten any traction, but I'm not giving up.)</p>I Didn't Like "Enlightenment Now"2018-03-17T10:06:00-10:002018-03-17T10:06:00-10:00larrytag:knowing.net,2018-03-17:/posts/2018/03/i-didnt-like-enlightenment-now/<p>They say to never write a negative review of a book until it has received too many positive ones. Which brings us to “Enlightenment Now: The Case For Reason, Science, Humanism, and Progress,” by Steven Pinker.</p>
<p>The tl;dr is that he doesn’t actually argue this case, he just …</p><p>They say to never write a negative review of a book until it has received too many positive ones. Which brings us to “Enlightenment Now: The Case For Reason, Science, Humanism, and Progress,” by Steven Pinker.</p>
<p>The tl;dr is that he doesn’t actually argue this case, he just presents a bunch of under-reported optimistic curves and, in the face of problems that cannot be swept under the rug, assures us that if only we treat them as problems to be solved and not get depressed about them, all will be well. Hoo-rah!</p>
<p>If you say “Gee, that sounds like Pinker’s book ‘The Better Angels of Our Nature’, which was a good book!” I’d agree with you. If this book had been called “Even Better Angels of Our Nature” I’d have no problem with it. But Pinker’s “Case for Reason, etc.” is essentially “these curves happened, they correlate (kind of) with periods when ‘Enlightenment ideals’ were popular, therefore, Enlightenment ideals caused the curves!” That’s bad logic.</p>
<p>The only reason I’m criticizing this book is because I would love to engage a book that actually <em>made</em> the case for these ideals and wrestled with the question of why, while still broadly paid lip service to (the climate deniers don’t say “Science is wrong!” they claim that science is on their side), they seem to have lost traction in terms of driving societal action. Or, perhaps more in the vein of things Pinker likes to do, to discover that “no, history is always an ebb and flow and the tide of Enlightenment continues to roll in.” (I’d be happy to have that case made.)</p>
<p>Pinker wants us to believe that the curves of the book — global poverty, lifespan, wealth, etc. — are strongly predictive of future improvement and, over and over, frames the thought ‘But will that continue?’ as one of pessimism versus optimism. I am temperamentally an optimist, and can rationalize that (“Optimism gives you agency! Pessimism is demotivating!”). But <a href="https://en.wikipedia.org/wiki/Optimism_bias">Optimism bias</a> is a cognitive mistake. The Enlightenment Ideal is to put aside optimism and pessimism and engage with the facts. Yes, it’s true that the Malthusians have been wrongly predicting “we’re just about to run out of capacity!” for 200 years, and “doom is unlikely” <em>should</em> be your starting point. But maybe humanity’s time on Earth is like that of an individual — ups and downs, and heartbreakingly limited, potentially with a long period of decline before the end. Hypochondriacs are consistently wrong, but in the end all of them can put “I told you so.” on their gravestone.</p>
<p>Beyond the problems of what the book <em>engages in</em> is what it just plain ignores. “The case for Enlightenment” is essentially a philosophical task and the proper balance of reason and passion have been discussed since (at least) the days of Plato and Aristotle. The word “Romanticism” only occurs twice in the book, in brief dismissals, and which is a worse reason to ignore it: not engaging with its explicitly anti-Enlightenment philosophy or deliberately ignoring it, knowing that many people happily identify themselves as romantics and might be less receptive of your position if it were posed as a choice?</p>
<p>“Enlightenment Now” isn’t a <em>bad</em> book. As “Even Better Angels of Our Nature” it’s fine. But ultimately it’s as shallow as a “pull yourselves up by your bootstraps!” self-help book.</p>fun-ny Faces : Face-based Augmented Reality with F# and the iPhone X2017-12-28T01:00:00-10:002017-12-28T01:00:00-10:00larrytag:knowing.net,2017-12-28:/posts/2017/12/fun-ny-faces-face-based-augmented-reality-with-f-and-the-iphone-x/<h1>fun-ny Faces : Face-based Augmented Reality with F# and the iPhone X</h1>
<p>Each year, the F# programming community creates an advent calendar of blog posts, coordinated by Sergey Tihon on his <a href="https://sergeytihon.com/2017/10/22/f-advent-calendar-in-english-2017/">blog</a>. This is my attempt to battle Impostor Syndrome and share something that might be of interest to the community …</p><h1>fun-ny Faces : Face-based Augmented Reality with F# and the iPhone X</h1>
<p>Each year, the F# programming community creates an advent calendar of blog posts, coordinated by Sergey Tihon on his <a href="https://sergeytihon.com/2017/10/22/f-advent-calendar-in-english-2017/">blog</a>. This is my attempt to battle Impostor Syndrome and share something that might be of interest to the community, or at least amusing...</p>
<p>I was an Augmented Reality (AR) skeptic until I began experimenting with iOS 11’s ARKit framework. There’s something very compelling about seeing computer-generated imagery mapped into your physical space.</p>
<p>A feature of the iPhone X is the face-tracking sensors on the front side of the phone. While the primary use-case for these sensors is unlocking the phone, they additionally expose the facial geometry (2,304 triangles) to developers. This geometry can be used to create AR apps that place computer-generated geometry on top of the facial geometry at up to 60FPS.</p>
<h2>Getting Started</h2>
<p>In Visual Studio for Mac, choose "New solution..." and "Single-View App" for F#:</p>
<p><a href="/uploads/2017/12/advent_1.png"><img alt="" class="alignnone size-full wp-image-6180" height="581" src="/uploads/2017/12/advent_1.png" width="800"></a></p>
<p>The resulting solution is a minimal iOS app, with an entry point defined in Main.fs, a <code>UIApplicationDelegate</code> in AppDelegate.fs, and a <code>UIViewController</code> in ViewController.fs. The iOS programming model is not only object-oriented but essentially a Smalltalk-style architecture, with a classic Model-View-Controller approach (complete with frustratingly little emphasis on the "Model" part) and a delegate-object pattern for customizing object life-cycles.</p>
<p>Although ARKit supports low-level access, by far the easiest way to program AR is to use an <code>ARSCNView</code>, which automatically handles the combination of camera and computer-generated imagery. The following code creates an <code>ARSCNView</code>, makes it full-screen (<code>arsceneview.Frame ← this.View.Frame</code>) and assigns it's <code>Delegate</code> property to an instance of type <code>ARDelegate</code> (discussed later). When the view is about to appear, we specify that AR session should use an <code>ARFaceTrackingConfiguration</code> and that it should <code>Run</code>:</p>
<div class="highlight"><pre><span></span><code><span class="k">[<register ("ViewController")>]</span>
<span class="na">type ViewController (handle</span><span class="o">:</span><span class="s">IntPtr) =</span>
<span class="w"> </span><span class="na">inherit UIViewController (handle)</span>
<span class="w"> </span><span class="na">let mutable arsceneview</span><span class="w"> </span><span class="o">:</span><span class="w"> </span><span class="s">ARSCNView = new ARSCNView()</span>
<span class="w"> </span><span class="na">let ConfigureAR()</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>
<span class="w"> </span><span class="na">let cfg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">new ARFaceTrackingConfiguration()</span>
<span class="w"> </span><span class="na">cfg.LightEstimationEnabled < - true</span>
<span class="w"> </span><span class="na">cfg</span>
<span class="w"> </span><span class="na">override this.DidReceiveMemoryWarning ()</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="na">base.DidReceiveMemoryWarning ()</span>
<span class="w"> </span><span class="na">override this.ViewDidLoad ()</span><span class="w"> </span><span class="o">=</span>
<span class="w"> </span><span class="na">base.ViewDidLoad ()</span>
<span class="w"> </span><span class="na">match ARFaceTrackingConfiguration.IsSupported with</span>
<span class="w"> </span><span class="na">| false -> raise < | new NotImplementedException() </span>
<span class="w"> </span><span class="na">| true -> </span>
<span class="w"> </span><span class="na">arsceneview.Frame < - this.View.Frame</span>
<span class="w"> </span><span class="na">arsceneview.Delegate <- new ARDelegate (ARSCNFaceGeometry.CreateFaceGeometry(arsceneview.Device, false))</span>
<span class="w"> </span><span class="na">//arsceneview.DebugOptions <- ARSCNDebugOptions.ShowFeaturePoints + ARSCNDebugOptions.ShowWorldOrigin</span>
<span class="w"> </span><span class="na">this.View.AddSubview arsceneview</span>
<span class="w"> </span><span class="na">override this.ViewWillAppear willAnimate</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>
<span class="w"> </span><span class="na">base.ViewWillAppear willAnimate</span>
<span class="w"> </span><span class="na">// Configure ARKit </span>
<span class="w"> </span><span class="na">let configuration</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">new ARFaceTrackingConfiguration()</span>
<span class="w"> </span><span class="na">// This method is called subsequent to `ViewDidLoad` so we know arsceneview is instantiated</span>
<span class="w"> </span><span class="na">arsceneview.Session.Run (configuration , ARSessionRunOptions.ResetTracking ||| ARSessionRunOptions.RemoveExistingAnchors)</span>
</code></pre></div>
<p>Once the AR session is running, it adds, removes, and modifies <code>ARSCNNode</code> objects that bridge the 3D scene-graph architecture of iOS's SceneKit with real-world imagery. As it does so, it calls various methods of the <code>ARSCNViewDelegate</code> class, which we subclass in the previously-mentioned <code>ARDelegate</code> class:</p>
<div class="highlight"><pre><span></span><code><span class="c1">// Delegate object for AR: called on adding and updating nodes</span>
<span class="k">type</span><span class="w"> </span><span class="nx">ARDelegate</span><span class="p">(</span><span class="nx">faceGeometry</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="nx">ARSCNFaceGeometry</span><span class="p">)</span><span class="w"> </span><span class="p">=</span>
<span class="w"> </span><span class="nx">inherit</span><span class="w"> </span><span class="nx">ARSCNViewDelegate</span><span class="p">()</span>
<span class="w"> </span><span class="c1">// The geometry to overlay on top of the ARFaceAnchor (recognized face)</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">faceNode</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">new</span><span class="w"> </span><span class="nx">Mask</span><span class="p">(</span><span class="nx">faceGeometry</span><span class="p">)</span>
<span class="w"> </span><span class="k">override</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">DidAddNode</span><span class="w"> </span><span class="p">(</span><span class="nx">renderer</span><span class="p">,</span><span class="w"> </span><span class="nx">node</span><span class="p">,</span><span class="w"> </span><span class="nx">anchor</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span>
<span class="w"> </span><span class="k">match</span><span class="w"> </span><span class="nx">anchor</span><span class="w"> </span><span class="p"><></span><span class="w"> </span><span class="nx">null</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">anchor</span><span class="w"> </span><span class="p">:?</span><span class="w"> </span><span class="nx">ARFaceAnchor</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span>
<span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="nx">node</span><span class="p">.</span><span class="nx">AddChildNode</span><span class="w"> </span><span class="nx">faceNode</span>
<span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="nx">ignore</span><span class="p">()</span>
<span class="w"> </span><span class="k">override</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">DidUpdateNode</span><span class="w"> </span><span class="p">(</span><span class="nx">renderer</span><span class="p">,</span><span class="w"> </span><span class="nx">node</span><span class="p">,</span><span class="w"> </span><span class="nx">anchor</span><span class="p">)</span><span class="w"> </span><span class="p">=</span>
<span class="w"> </span><span class="k">match</span><span class="w"> </span><span class="nx">anchor</span><span class="w"> </span><span class="p"><></span><span class="w"> </span><span class="nx">null</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">anchor</span><span class="w"> </span><span class="p">:?</span><span class="w"> </span><span class="nx">ARFaceAnchor</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span>
<span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="nx">faceNode</span><span class="p">.</span><span class="nx">Update</span><span class="w"> </span><span class="p">(</span><span class="nx">anchor</span><span class="w"> </span><span class="p">:?></span><span class="w"> </span><span class="nx">ARFaceAnchor</span><span class="p">)</span>
<span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="nx">ignore</span><span class="p">()</span>
</code></pre></div>
<p>As you can see in <code>DidAddNode</code> and <code>DidUpdateNode</code>, we're only interested when an <code>ARFaceAnchor</code> is added or updated. (This would be a good place for an active pattern if things got more complex.) As it's name implies, an <code>ARFaceAnchor</code> relates the AR subsystems' belief of a face's real-world location and geometry with SceneKit values.</p>
<p>The <code>Mask</code> class is the last piece of the puzzle. We define it as a subtype of <code>SCNNode</code>, which means that it can hold geometry, textures, have animations, and so forth. It's passed an <code>ARSCNFaceGeometry</code> which was ultimately instantiated back in the <code>ViewController</code> (<code>new ARDelegate (ARSCNFaceGeometry.CreateFaceGeometry(arsceneview.Device, false))</code>. As the AR subsystem recognizes face movement and changes (blinking eyes, the mouth opening and closing, etc.), calls to <code>ARDelegate.DidUpdateNode</code> are passed to <code>Mask.Update</code>, which updates the geometry with the latest values from the camera and AR subsystem:</p>
<div class="highlight"><pre><span></span><code>member this.Update(anchor : ARFaceAnchor) =
let faceGeometry = this.Geometry :?> ARSCNFaceGeometry
faceGeometry.Update anchor.Geometry
</code></pre></div>
<p>While SceneKit geometries can have multiple <code>SCNMaterial</code> objects and every <code>SCNMaterial</code> multiple <code>SCNMaterialProperty</code> values, we can make a simple red mask with :</p>
<div class="highlight"><pre><span></span><code><span class="n">let</span><span class="w"> </span><span class="n">mat</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">geometry.FirstMaterial</span>
<span class="n">mat.Diffuse.ContentColor</span><span class="w"> </span><span class="o"><-</span><span class="w"> </span><span class="n">UIColor.Red</span><span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Basic</span><span class="o">:</span><span class="w"> </span><span class="n">single</span><span class="o">-</span><span class="n">color</span><span class="w"> </span><span class="n">mask</span>
</code></pre></div>
<p>Or we can engage in virtual soccer-hooligan face painting with <code>mat.Diffuse.ContentImage ← UIImage.FromFile "fsharp512.png"</code> :</p>
<p><img alt="facepaint" src="/uploads/2017/12/facepaint.png"></p>
<p>The real opportunity here is undoubtedly for makeup, “face-swap,” and plastic surgery apps, but everyone also loves a superhero. The best mask in comics, I think, is that of <em>Watchmen</em>’s Rorschach, which presented ambiguous patterns matching the black-and-white morality of its wearer, Walter Kovacs.</p>
<p>We can set our face geometry's material to an arbitrary <code>SKScene</code> SpriteKit animation with <code>mat.Diffuse.ContentScene ← faceFun // Arbitrary SpriteKit scene</code>.</p>
<p>I’ll admit that so far I have been stymied in my attempt to procedurally-generate a proper Rorschach mask. The closest I have gotten is a function that uses 3D <a href="https://en.wikipedia.org/wiki/Perlin_noise#Algorithm_detail">Improved Perlin Noise</a> that draws black if the texture is negative and white if positive. That looks like this:</p>
<p>[video src="/uploads/2017/12/perlin_face.mp4"]</p>
<p>Which is admittedly more <a href="https://memory-alpha.fandom.com/wiki/Let_That_Be_Your_Last_Battlefield_(episode)">Let That Be Your Last Battlefield</a> than <em>Watchmen</em>.</p>
<p>Other things I've considered for face functions are: cellular automata, scrolling green code (you know, like the hackers in movies!), and the video feed from the back-facing camera. Ultimately though, all of that is just warm-up for the big challenge: deformation of the facial geometry mesh. If you get that working, I'd love to see the code!</p>
<p>All of my code is available on <a href="https://github.com/lobrien/FSharp_Face_AR">Github</a>.</p>Programmatic AutoLayout Constraints Basics for Xamarin2017-12-08T10:53:00-10:002017-12-08T10:53:00-10:00larrytag:knowing.net,2017-12-08:/posts/2017/12/programmatic-autolayout-constraints-basics-for-xamarin/<ol>
<li>Create element without an explicit <code>Frame</code>.</li>
<li>Set <code>TranslatesAutoresizingMaskIntroConstraints = false</code></li>
<li>Create an array of <code>NSLayoutConstraints</code></li>
<li>Work top-to-bottom, left-to-right, or vice versa. Do this consistently throughout program</li>
<li>Use Layout Anchors</li>
<li>Use the top-level <code>UIView</code>s <code>SafeAreaLayoutGuide</code> to position relative to the Window / screen</li>
<li>For each dimension, set its location (<code>LeadingAnchor</code> / <code>TopAnchor</code> or …</li></ol><ol>
<li>Create element without an explicit <code>Frame</code>.</li>
<li>Set <code>TranslatesAutoresizingMaskIntroConstraints = false</code></li>
<li>Create an array of <code>NSLayoutConstraints</code></li>
<li>Work top-to-bottom, left-to-right, or vice versa. Do this consistently throughout program</li>
<li>Use Layout Anchors</li>
<li>Use the top-level <code>UIView</code>s <code>SafeAreaLayoutGuide</code> to position relative to the Window / screen</li>
<li>For each dimension, set its location (<code>LeadingAnchor</code> / <code>TopAnchor</code> or <code>TrailingAnchor</code> / <code>BottomAnchor</code>)</li>
<li><em>Either</em> set the other location anchor <em>or</em> set the internal dimension (<code>WidthAnchor</code> / <code>HeightAnchor</code>)</li>
<li>Call <code>NSLayoutConstraint.ActivateConstraints</code> <em>after</em> the <code>UIView</code> and any referenced <code>UIView</code> objects have been added to the View Hierarchy (compiles OK, but runtime exception)</li>
</ol>
<!-- -->
<div class="highlight"><pre><span></span><code><span class="n">toolbar</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">UIToolbar</span><span class="p">();</span>
<span class="n">toolbar</span><span class="o">.</span><span class="n">TranslatesAutoresizingMaskIntoConstraints</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">false</span><span class="p">;</span>
<span class="k">var</span><span class="w"> </span><span class="n">tbConstraints</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="p">[]</span>
<span class="p">{</span>
<span class="n">toolbar</span><span class="o">.</span><span class="n">LeadingAnchor</span><span class="o">.</span><span class="n">ConstraintEqualTo</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">View</span><span class="o">.</span><span class="n">SafeAreaLayoutGuide</span><span class="o">.</span><span class="n">LeadingAnchor</span><span class="p">),</span>
<span class="n">toolbar</span><span class="o">.</span><span class="n">TrailingAnchor</span><span class="o">.</span><span class="n">ConstraintEqualTo</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">View</span><span class="o">.</span><span class="n">SafeAreaLayoutGuide</span><span class="o">.</span><span class="n">TrailingAnchor</span><span class="p">),</span>
<span class="n">toolbar</span><span class="o">.</span><span class="n">TopAnchor</span><span class="o">.</span><span class="n">ConstraintEqualTo</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">View</span><span class="o">.</span><span class="n">SafeAreaLayoutGuide</span><span class="o">.</span><span class="n">TopAnchor</span><span class="p">),</span>
<span class="n">toolbar</span><span class="o">.</span><span class="n">HeightAnchor</span><span class="o">.</span><span class="n">ConstraintEqualTo</span><span class="p">(</span><span class="n">toolbar</span><span class="o">.</span><span class="n">IntrinsicContentSize</span><span class="o">.</span><span class="n">Height</span><span class="p">)</span>
<span class="p">};</span>
<span class="n">View</span><span class="o">.</span><span class="n">AddSubview</span><span class="p">(</span><span class="n">toolbar</span><span class="p">);</span>
<span class="n">NSLayoutConstraint</span><span class="o">.</span><span class="n">ActivateConstraints</span><span class="p">(</span><span class="n">tbConstraints</span><span class="p">);</span>
<span class="n">label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">UILabel</span><span class="p">();</span>
<span class="n">label</span><span class="o">.</span><span class="n">Text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"This is the detail view"</span><span class="p">;</span>
<span class="n">label</span><span class="o">.</span><span class="n">TranslatesAutoresizingMaskIntoConstraints</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">false</span><span class="p">;</span>
<span class="k">var</span><span class="w"> </span><span class="n">lblConstraints</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="p">[]</span>
<span class="p">{</span>
<span class="n">label</span><span class="o">.</span><span class="n">LeadingAnchor</span><span class="o">.</span><span class="n">ConstraintEqualTo</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">View</span><span class="o">.</span><span class="n">SafeAreaLayoutGuide</span><span class="o">.</span><span class="n">LeadingAnchor</span><span class="p">,</span><span class="w"> </span><span class="mf">20.0</span><span class="n">f</span><span class="p">),</span>
<span class="n">label</span><span class="o">.</span><span class="n">WidthAnchor</span><span class="o">.</span><span class="n">ConstraintEqualTo</span><span class="p">(</span><span class="n">label</span><span class="o">.</span><span class="n">IntrinsicContentSize</span><span class="o">.</span><span class="n">Width</span><span class="p">),</span>
<span class="n">label</span><span class="o">.</span><span class="n">TopAnchor</span><span class="o">.</span><span class="n">ConstraintEqualTo</span><span class="p">(</span><span class="n">this</span><span class="o">.</span><span class="n">toolbar</span><span class="o">.</span><span class="n">BottomAnchor</span><span class="p">,</span><span class="w"> </span><span class="mf">20.0</span><span class="n">f</span><span class="p">),</span>
<span class="n">label</span><span class="o">.</span><span class="n">HeightAnchor</span><span class="o">.</span><span class="n">ConstraintEqualTo</span><span class="p">(</span><span class="n">label</span><span class="o">.</span><span class="n">IntrinsicContentSize</span><span class="o">.</span><span class="n">Height</span><span class="p">)</span>
<span class="p">};</span>
<span class="n">View</span><span class="o">.</span><span class="n">AddSubview</span><span class="p">(</span><span class="n">label</span><span class="p">);</span>
<span class="n">NSLayoutConstraint</span><span class="o">.</span><span class="n">ActivateConstraints</span><span class="p">(</span><span class="n">lblConstraints</span><span class="p">);</span>
</code></pre></div>Notes on installing TensorFlow with GPU Support2017-08-10T06:50:00-10:002017-08-10T06:50:00-10:00larrytag:knowing.net,2017-08-10:/posts/2017/08/notes-on-installing-tensorflow-with-gpu-support/<p>The best Tensorflow is the one you have on your machine.</p>
<p>In my opinion, the bottleneck on a DNN solution is not training, but data preparation and iterating your model to the point where it's reasonable to start investing kilowatt-hours of electricity to the training. So I have Tensorflow on …</p><p>The best Tensorflow is the one you have on your machine.</p>
<p>In my opinion, the bottleneck on a DNN solution is not training, but data preparation and iterating your model to the point where it's reasonable to start investing kilowatt-hours of electricity to the training. So I have Tensorflow on all my machines, including my Macs, even though as of Tensorflow 1.2 GPU support is simply <em>not available</em> for Tensorflow on the Mac. (I'm not sure what's going on, but suspect it may have something to do with licensing NVidia's CuDNN library.)</p>
<p>Having said that, GPU support for TensorFlow is much faster than CPU-only Tensorflow (in some quick tests on my Windows laptops, \~8x). With GPU-supported Tensorflow, it's that much easier to iterate your model until your training and validation curves start to look encouraging. At that point, in my opinion it makes sense to move your training to the cloud. There's a little more friction in terms of moving data and starting and stopping runs and you're paying for processing, but hopefully you've gotten to the point where training time is the bottleneck.</p>
<p>Anyway...</p>
<p>Mac Tensorflow GPU: I'd like to think this will change in the future, but as of August 2017: Nope.</p>
<p>There are a very few people who seem to have figured out how to build Tensorflow with GPU support on the Mac from sources, but the hoop-jumping and yak shaving that seems necessary seems <em>very</em> high to me.</p>
<p>Windows Tensorflow GPU: Yes, but it's a little finicky. Here are some install notes:</p>
<ul>
<li>Install NVidia Cuda 8 (not the Cuda 9 RC)</li>
<li>Install NVidia CuDNN 5.1 (not the CuDNN 7!)</li>
<li>Copy the CuDNN .dll to your Cuda /bin directory (probably /Program Files/NVidia GPU Computing Toolkit/Cuda/v8.0/bin/)</li>
<li>Create an Anaconda environment from an administrative shell. Important: use --python=3.5</li>
<li>Install tensorflow using:</li>
</ul>
<!-- -->
<div class="highlight"><pre><span></span><code>pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/gpu/tensorflow_gpu-1.2.1-cp35-cp35m-win_amd64.whl
</code></pre></div>
<p>I <em>think</em> the "cp35" is the hint that you have to use Python 3.5, so if the page at <a href="https://www.tensorflow.org/install">https://www.tensorflow.org/install/install_windows</a> changes to show a different .whl file, you'd have to set the python in your Anaconda environment differently.<br>
- Validate that you've got GPU capability:</p>
<div class="highlight"><pre><span></span><code><span class="kn">import</span> <span class="nn">tensorflow</span> <span class="k">as</span> <span class="nn">tf</span>
<span class="n">tf</span><span class="o">.</span><span class="n">Session</span><span class="p">()</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">tf</span><span class="o">.</span><span class="n">constant</span><span class="p">(</span><span class="s1">'hello'</span><span class="p">))</span>
</code></pre></div>
<p>This should result in a cascade of messages, many of which say that Tensorflow wasn't compiled with various CPU instructions, but most importantly, towards the end you should see a message that begins:</p>
<div class="highlight"><pre><span></span><code>Creating Tensorflow device (/gpu:0)
</code></pre></div>
<p>which indicates that, sure enough, Tensorflow is going to run on your GPU.</p>
<p>Hope this helps!</p>Dell Infuriates Me2017-03-12T08:45:00-10:002017-03-12T08:45:00-10:00larrytag:knowing.net,2017-03-12:/posts/2017/03/dell-infuriates-me/<p>Sunday rant: I have a 2016 Dell XPS (high-end) laptop. I bought a Dell 25" 4K monitor. And on Friday received a Dell Thunderbolt dock for the monitor. I plug it all together and although the monitor displays wonderfully, the dock is not passing USB through. So I start fiddling …</p><p>Sunday rant: I have a 2016 Dell XPS (high-end) laptop. I bought a Dell 25" 4K monitor. And on Friday received a Dell Thunderbolt dock for the monitor. I plug it all together and although the monitor displays wonderfully, the dock is not passing USB through. So I start fiddling around with "unplug from dock, plug into laptop, confirm the peripheral is working," stuff. And then the laptop BSODs. Machine boots, connects to dock, everything's fine for 30 seconds, BSOD. Start to Google. "Update your laptop BIOS." (For a fucking <em>docking station</em>!). It takes a goddamn hour to <em>find</em> the BIOS update on the Dell Website for their goddamn flagship laptop, but whatever.</p>
<p>Still BSODs. Now it's telling me that I have to update the firmware on the <em>dock</em>. But I <em>cannot</em> update the firmware because if I attach the dock to the laptop to update it, it BSODs. So, there's this few-second window before the BSOD where I see that I have to update my Thunderbolt Driver on the laptop.</p>
<p>So I download the driver and run the installer for the Thunderbolt Driver. The installer doesn't give any option other than "Uninstall." So I say "OK, I'll uninstall and reinstall." I uninstall. Fine. I go to reinstall. I'm told I don't have sufficient permission. So I run as administrator. I <em>still</em> don't have sufficient permission. So I end up editing the registery to turn off user protection. (Remember, this is all for a <em>docking station</em>).</p>
<p>I now can run the "install" option, but it refuses to continue because it sees some pre-existing value in the registry. (Which I take to mean it's "Uninstall" function didn't actually, you know, uninstall.) It then rolls back the Thunderbolt install and leaves me with my current situation:</p>
<p>A half-upgraded machine with user access protection turned off, <em>less functionality</em> than it had before, and it still BSODs whenever I turn on the dock. All with a respected company's flagship hardware.</p>
<p>God.</p>Programmed my first Alexa skill: I was shocked by what I found!2016-11-19T07:07:00-10:002016-11-19T07:07:00-10:00larrytag:knowing.net,2016-11-19:/posts/2016/11/programmed-my-first-alexa-skill-i-was-shocked-by-what-i-found/<p>Although I am pretty deeply entrenched in the Apple ecosystem, the recently-announced \$50 Dot was so inexpensive I could not resist checking it out. (Before I go further: I work for Microsoft, so take that into account as you see fit.)</p>
<p>Out of the box, the Echo is very easy …</p><p>Although I am pretty deeply entrenched in the Apple ecosystem, the recently-announced \$50 Dot was so inexpensive I could not resist checking it out. (Before I go further: I work for Microsoft, so take that into account as you see fit.)</p>
<p>Out of the box, the Echo is very easy to setup for basic queries "Alexa, what's my latitude and longitude?" and so forth. The Echo has a relatively lo-fi speaker and the integration with Sonos (what Amazon calls an "Alexa Skill") is not yet available, so I haven't used it all that much.</p>
<p>But there's an API so you know I had to program something. My preferred solution for "computations in the cloud" is definitely <a href="https://docs.microsoft.com/en-us/dotnet/fsharp/using-fsharp-on-azure/">Azure Functions written in F#</a>, but for my first Alexa Skill I used Amazon Lambda running Python.</p>
<p>The first thing to focus on is that Alexa Skills are a separate service that can be programmed many ways, so there's always going to be a certain amount of integration overhead in the form of multiple tabs open, jumping back and forth between the Alexa Skills and the Web server/service where you are handling the computation.</p>
<p>The Alexa Skills documentation is good, but there's a good number of parts and I think it's wise to write your first skill using Amazon Lambda, as I did. Amazon Lambda is often the default service in the documentation and there are often hyperlinks to the Lambda-specific page to do "X."</p>
<hr>
<h2>A Skill for Gravity</h2>
<p>A friend was talking to me about riflery and astonishing me with the flight times he was talking about. Alexa failed to answer some basic questions about ballistics (Alexa seems to me less capable than Google Assistant, Cortana, or Siri at answering freeform questions), offering me the perfect simple use-case for my first skill.</p>
<p>Minimum viable query: <code>"What is the speed of an object that has fallen for 1.5 seconds?"</code></p>
<p>SWAG achievable: <code>"How long would it take for an object dropped from the height of the Empire State Building to fall to the ground on Mars?"</code></p>
<p>The nice thing about my minimal query is that it's both stateless and easy to answer with some math: all you need to answer is the <code>duration</code> of the drop and use a gravitational constant of -9.81. (Conversions from meters/second can come later.)</p>
<p>I followed the documentation <a href="https://developer.amazon.com/docs/custom-skills/host-a-custom-skill-as-an-aws-lambda-function.html">on building an Alexa skill with a Lambda function</a> to create an Alexa Skill named called "Gravity." After naming, the next page of the Skill development site is "Interaction Model." This is where I was shocked to discover:</p>
<p>Alexa doesn't do natural language processing!</p>
<p>I ASS-U-ME'd that I would be receiving some programmatic structure that told me the "nominal subject" of the sentence was the noun <code>speed</code> and would allow me to search for a "prepositional modifier" whose "object" was the noun <code>seconds</code> and extract its modifier. That would allow me to recognize either of these sentences:</p>
<ul>
<li><code>What is the speed of an object that has fallen for 1.5 seconds?</code>; or</li>
<li><code>What's the velocity of an apple after after 1.5 seconds?</code></li>
</ul>
<p>Or any of a large number of other sentences. <a href="https://foxtype.com/">Foxtype will show you such parsing in action at this (fascinating) page</a>.</p>
<p>But no! As you can see in the screenshot below, the mapping of a recognized sentence to a programmatic "intent" is nothing but a string template! You <em>either</em> have to anticipate every single supported structure <em>or</em> you have to use wildcards and roll your own. (Honestly, I imagine that it's not a long road before the wisest interaction model is <code>Parse {utterance}</code>.)</p>
<p><a href="/uploads/2016/11/Intents1.jpg"><img alt="intents1" class="alignnone size-large wp-image-6143" height="238" src="/uploads/2016/11/Intents1-1024x418.jpg" width="584"></a></p>
<p>To be clear: 'just' voice recognition is extraordinarily hard and doing it in ambient environmental noise is insane. It's only because Alexa already does this very, very hard task that it's surprising to me that they don't provide for some amount of the (also hard) task of parsing. The upside, of course, is that <code>sound-&gt;utterance</code> is decoupled from <code>utterance-&gt;sentence</code>. As far as I know, no one today provides "NLP as a Service" but it's easy to imagine. (Although latency... Nope, nope, staying on topic...)</p>
<p>Returning to the screenshot above, you can see that it contains the bracketed template <code>{duration}</code>. The matching value will be associated with the key <code>duration</code> in calls to the Lambda function. And, to be honest, it's a place where Alexa Kit <em>does</em> do some NLP.</p>
<p>You can help Alexa by specifying the type of the variables in your template text. For instance, I specified the <code>duration</code> variable as a <code>NUMBER</code>. Alexa <em>does use</em> NLP to transform the utterances meaningfully -- so "one and a half" becomes "1.5" and so forth. I haven't really explored the extent of this -- does it turn "the Tuesday after New Year's Day" into a well-formed <code>date</code> and so forth?</p>
<p>Alexa packages <code>session</code> data relating to an ongoing conversation and <code>intent</code> data and performs an RPC-like call (I actually don't know the details) to the endpoint of your choice. In the case of Amazon Lambda, that's the Amazon Resource Name (ARN) of your function.</p>
<p>The data structures it passes look like this:</p>
<p>[code lang="javascript"]<br>
{<br>
"session": {<br>
"sessionId": "SessionId.07dc1151-eb4e-4e12-98fa-64af3f59d82a",<br>
"application": {<br>
"applicationId": "amzn1.ask.skill.443f7cb5-ETC-dbecb288ff2d"<br>
},<br>
"attributes": {},<br>
"user": {<br>
"userId": "amzn1.ask.account.ETC"<br>
},<br>
"new": true<br>
},<br>
"request": {<br>
"type": "IntentRequest",<br>
"requestId": "EdwRequestId.13cf7a2b-0789-4244-879f-f4fae08f315f",<br>
"locale": "en-US",<br>
"timestamp": "2016-11-18T17:24:09Z",<br>
"intent": {<br>
"name": "FallingSpeedIntent",<br>
"slots": {<br>
"duration": {<br>
"name": "duration",<br>
"value": "1.5"<br>
}<br>
}<br>
}<br>
},<br>
"version": "1.0"<br>
}<br>
[/code]</p>
<p>The values in the <code>session</code> object relate to a conversation and the values in the <code>request</code> object belong to a specific intent -- in this case the <code>FallingSpeedIntent</code> with the <code>duration</code> argument set to "1.5".</p>
<h2>On the Lambda side of things</h2>
<p>Amazon Lambda has a template function called <code>ColorIs</code> that provides an easy starting point. It supports session data, which my Gravity skill doesn't require, so I actually ended up mostly deleting code (always my favorite thing). Given the JSON above, here's how I route the request to a specific function:</p>
<p>[code lang="python"]<br>
def on_intent(intent_request, session):<br>
""" Called when the user specifies an intent for this skill """</p>
<p>print("on_intent requestId=" + intent_request['requestId'] +<br>
", sessionId=" + session['sessionId'])</p>
<p>intent = intent_request['intent']<br>
intent_name = intent_request['intent']['name']</p>
<h1>Dispatch to your skill's intent handlers</h1>
<p>if intent_name == "FallingSpeedIntent" :<br>
return get_falling_speed(intent, session)</p>
<p>def get_falling_speed(intent, session):<br>
session_attributes = {}<br>
reprompt_text = None<br>
should_end_session = True</p>
<p>g = -9.82 #meters per second squared</p>
<p>if "duration" in intent['slots']:<br>
duration = float(intent['slots']['duration']['value'])<br>
velocity = g * duration**2</p>
<p>speech_output = "At the end of " + str(duration) + " seconds, an object will be falling at " + ('%.1f' % velocity) + " meters per second. " + \<br>
"Goodbye."<br>
else:<br>
speech_output = "Pretty fast I guess."</p>
<p>return build_response(session_attributes, build_speechlet_response(<br>
intent['name'], speech_output, reprompt_text, should_end_session))</p>
<p>[/code]</p>
<p>(Boilerplate not shown)</p>My Westworld prediction2016-10-20T09:38:00-10:002016-10-20T09:38:00-10:00larrytag:knowing.net,2016-10-20:/posts/2016/10/my-westworld-prediction/<p>[code lang="csharp"]<br>
var k = Convert.FromBase64String("vlqnRQo8YYXdqt3c7CahDninF6MgvRnqNEU+/tcbWdM=");<br>
var iv = Convert.FromBase64String("gaXwv734Tu3+Jw1hgtNrzw==");<br>
DecryptStringFromBytes(Convert.FromBase64String("Yr2XWzCxceStAF1BaUgaqmWcqFjzWskDDN4foaxfGEO5JHc/oKvgukkMHZuOiw+dK0JxnOhzC1ZA3QLqZZsQxFtjX+qvu0VRM0p6VEfcv18="), k, iv);[/code]</p>Keras is the Deep Learning Toolkit You Have Been Waiting For2016-10-16T15:39:00-10:002016-10-16T15:39:00-10:00larrytag:knowing.net,2016-10-16:/posts/2016/10/keras-is-the-deep-learning-toolkit-you-have-been-waiting-for/<p>I remember a time when "learning about computers" invariably started with the phrase "computers only operate on 0s and 1s…" Things could vary a little for a few minutes, but then you'd get to the meat of things: Boolean logic. "All computer programs are formed from these 'logic gates'…"</p>
<p>I …</p><p>I remember a time when "learning about computers" invariably started with the phrase "computers only operate on 0s and 1s…" Things could vary a little for a few minutes, but then you'd get to the meat of things: Boolean logic. "All computer programs are formed from these 'logic gates'…"</p>
<p>I remember a poster that illustrated Boolean logic in terms of punching. A circuit consisted of a bunch of mechanical fists, an "AND" gate propagated the punch when both its input were punched, an "OR" required only one input punch, etc. At the bottom were some complex circuits and the ominous question: "Are you going to be punched?" Because Boston. (The answer was "Yes. You are going to be punched.")</p>
<p>Anyway, the point is that while there was a fundamental truth to what I was being told, it was not overwhelmingly relevant to the opportunities that were blossoming, back then at the dawn of the personal computer revolution. Yes, it's important to <em>eventually</em> understand gates and circuits and transistors and yes, there's a truth that "this is all computers do," but that understanding was not immediately necessary to get cool results, such as endlessly printing "Help, I am caught in a program loop!" or playing Nim or Hammurabi. <em>Those</em> things required simply typing in a page or two of BASIC code.</p>
<p>Transcription being what it is, you'd make mistakes and curiosity being what it is, you'd mess around to see what you could alter to customize the game, and then your ambition would slowly grow and only <em>then</em> would you start to benefit from understanding the foundations on which you were building.</p>
<p>Which brings us to deep learning.</p>
<p>You have undoubtedly noticed the rising tide of AI-related news involving "deep neural nets." <a href="https://www.geek.com/tech/googles-deepmind-develops-creepy-ultra-realistic-human-speech-synthesis-1670362/">Speech synthesis</a>, <a href="https://en.wikipedia.org/wiki/DeepDream">Deep Dream's hallucinogenic dog-slugs</a>, and perhaps most impressively <a href="https://deepmind.com/research/alphago/">AlphaGo's success against the 9-dan Lee Sedol</a>. Unlike robotics and autonomous vehicles and the like, this is purely software-based: this is <em>our</em> territory.</p>
<p>But "learning about deep learning" invariably starts with phrases involving the phrases "regression," "linearly inseparable," and "gradient descent." It gets math-y pretty quickly.</p>
<p>Now, just as "it's all just 0s and 1s" is both true but not immediately necessary, "it's all just weights and transfer functions," is something for which_eventually_ you will want to have an intuition. But the breakthroughs in recent years have not come about so much because of advances at this foundational level, but rather from a dramatic increase in sophistication about how neural networks are "shaped."</p>
<p>Not long ago, the most common structure for an artificial neural network was an input layer with a number of neural "nodes" equal to the number of inputs, an output layer with a node per output value, and a single intermediate layer. The "deep" in "deep learning" is nothing more than networks that have more than a single intermediate layer!</p>
<p>Another major area of advancement is approaches that are more complex than "an input node equal to the number of inputs." Recurrence, convolution, attention… all of these terms relate to this idea of the "shape" of the neural net and the manner in which inputs and intermediate terms are handled.</p>
<p>… snip descent into rabbit-hole …</p>
<p>The <a href="https://keras.io/">Keras</a> library allows you to work at this higher level of abstraction, while running on top of either Theano or TensorFlow, lower-level libraries that provide high-performance implementations of the math-y stuff. This is a Keras description of a neural network that can solve the XOR logic gate. ("You will get punched if one, but not both of the input faces gets punched.")</p>
<p>[code lang="python"]<br>
import numpy as np<br>
from keras.models import Sequential<br>
from keras.layers.core import Activation, Dense<br>
from keras.optimizers import SGD</p>
<p>X = np.zeros((4, 2), dtype='uint8')<br>
y = np.zeros(4, dtype='uint8')</p>
<p>X[0] = [0, 0]<br>
y[0] = 0<br>
X[1] = [0, 1]<br>
y[1] = 1<br>
X[2] = [1, 0]<br>
y[2] = 1<br>
X[3] = [1, 1]<br>
y[3] = 0</p>
<p>model = Sequential()<br>
model.add(Dense(2, input_dim=2))<br>
model.add(Activation('sigmoid'))<br>
model.add(Dense(1))<br>
model.add(Activation('sigmoid'))</p>
<p>sgd = SGD(lr=0.1, decay=1e-6, momentum=0.9, nesterov=True)<br>
model.compile(loss='mean_squared_error', optimizer=sgd, class_mode="binary")</p>
<p>history = model.fit(X, y, nb_epoch=10000, batch_size=4, show_accuracy=True, verbose=0)</p>
<p>print (model.predict(X))<br>
[/code]</p>
<p>I'm not claiming that this should be crystal clear to a newcomer, but I do contend that it's pretty dang approachable. If you wanted to produce a different logic gate, you could certainly figure out what lines to change. If someone told you "The ReLu activation function is used more often than sigmoid nowadays," your most likely 'let me see if this works' would, in fact, work (as long as you guessed you should stick with lowercase).</p>
<p>For historical reasons, solving XOR is pretty much the "Hello, World!" of neural nets. It can be done with relatively little code in <em>any</em> neural network library and can be done in a few dozen lines of mainstream programming languages (my first published article was a neural network in about 100 lines of C++. That was… a <em>long</em> time ago…).</p>
<p>But Keras is not at all restricted to toy problems. <em>Not at all</em>. Check <a href="http://benjaminbolte.com/blog/2016/keras-language-modeling.html">this</a> out. Or <a href="https://yanpanlau.github.io/2016/10/11/Torcs-Keras.html">this</a>. Keras provides the <em>appropriate</em> abstraction level for everything from introductory to research-level explorations.</p>
<p>Now, is it <em>necessary</em> for workaday developers to become familiar with deep learning? I think the honest answer to that is "not yet." There's still a very large gap between "what neural nets do well" and "what use-cases are the average developer being asked to addressed?"</p>
<p>But I think that may change in a surprisingly short amount of time. In broad terms, what artificial neural nets do is recognize patterns in noisy signals. If you have a super-clean signal, traditional programming with those binary gates works. More importantly, lots of problems don't seem easily cast into "recognizing a pattern in a signal." But part of what's happening in the field of deep learning is very rapid development of techniques and patterns for re-casting problems in just this way. So-called "sequence-to-sequence" problems such as <a href="https://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf">language translation</a> are beginning to rapidly fall to the surprisingly effective techniques of deep learning.</p>
<p>… snip descent into rabbit-hole …</p>
<p><em>Lots</em> of problems and sub-problems can be described in terms of "sequence-to-sequence." The synergy between memory, attention, and sequence-to-sequence -- all areas of rapid advancement -- is tipping-point stuff. This is the stuff of which symbolic processing is made. When that happens, we're talking about real "artificial intelligence." Artifical <em>intelligence</em>, yes, but not, I think, human-level cognition. I strongly suspect that human-level, general-purpose AI will have a trajectory similar to medicine based on genetics: more complex and messy and tangled to be cracked with a single breakthrough.</p>Debugging provisioning profiles on the command line2016-09-22T10:19:00-10:002016-09-22T10:19:00-10:00larrytag:knowing.net,2016-09-22:/posts/2016/09/debugging-provisioning-profiles-on-the-command-line/<p>Raise your hand if you've ever struggled with getting your app's bundle identifier, info.plist, and entitlements.plist to match up with your provisioning profile.</p>
<p>I tried to explain <a href="http://www.knowing.net/index.php/2015/12/21/hair-tearing-out-thing-explainer-provisioning-profiles/">provisioning profiles using the ten-hundred most common words</a>, but in slightly-less-common words, a development prov-pro associates: A team, a developer, an …</p><p>Raise your hand if you've ever struggled with getting your app's bundle identifier, info.plist, and entitlements.plist to match up with your provisioning profile.</p>
<p>I tried to explain <a href="http://www.knowing.net/index.php/2015/12/21/hair-tearing-out-thing-explainer-provisioning-profiles/">provisioning profiles using the ten-hundred most common words</a>, but in slightly-less-common words, a development prov-pro associates: A team, a developer, an application identifier, privacy and security entitlements, and development devices.</p>
<p>While there's no silver bullet, there <em>is</em> a way to dump the contents of a provisioning profile into a readable plist format. From the command-line, run:</p>
<div class="highlight"><pre><span></span><code>security cms -D -i some.mobileprovision
</code></pre></div>
<p>Here, for instance, is the output of a provisioning profile for an app that uses SiriKit to trigger a workout:</p>
<p><a href="/uploads/2016/09/Napkin-1.png"><img alt="napkin" class="alignnone size-large wp-image-6115" height="480" src="/uploads/2016/09/Napkin-1-1024x842.png" width="584"></a></p>
<p>As you can see, this is a convenient way to confirm the associations in the prov-pro, particularly entitlements, the app ID, and provisioned devices.</p>Mysterious crashes in your iOS 10 program? Check your info.plist2016-09-13T10:36:00-10:002016-09-13T10:36:00-10:00larrytag:knowing.net,2016-09-13:/posts/2016/09/mysterious-crashes-in-your-ios-10-program-check-your-info-plist/<p>If you're developing for iOS 10 and your app "silently" crashes (especially if it's an older app), the culprit could well be the increased privacy requirements in iOS 10. Namepaces such as HomeKit now require specific privacy-related keys to be in your info.plist (for instance, <code>NSHomeKitUsageDescription</code>). If you don't …</p><p>If you're developing for iOS 10 and your app "silently" crashes (especially if it's an older app), the culprit could well be the increased privacy requirements in iOS 10. Namepaces such as HomeKit now require specific privacy-related keys to be in your info.plist (for instance, <code>NSHomeKitUsageDescription</code>). If you don't have them, the system automatically closes your application <em>without an exception or Console.log message</em> (if you run in the simulator, you <em>may</em> see a PRIVACY_VIOLATION notice in the stack trace).</p>Streaming a Web video to AppleTV with Xamarin2016-07-07T09:43:00-10:002016-07-07T09:43:00-10:00larrytag:knowing.net,2016-07-07:/posts/2016/07/streaming-a-web-video-to-appletv-with-xamarin/<p>If you have the URL of a streaming video, it's easy to display on an AppleTV, even though tvOS does not have a <code>UIWebView</code> (which would make it <em>really</em> easy). You have to use some <code>AVFoundation</code> code, such as:</p>
<p>[code lang="csharp"]<br>
var src = NSUrl.FromString("https://somevideo");<br>
var asset …</p><p>If you have the URL of a streaming video, it's easy to display on an AppleTV, even though tvOS does not have a <code>UIWebView</code> (which would make it <em>really</em> easy). You have to use some <code>AVFoundation</code> code, such as:</p>
<p>[code lang="csharp"]<br>
var src = NSUrl.FromString("https://somevideo");<br>
var asset = AVAsset.FromUrl(src);<br>
var playerItem = new AVPlayerItem(asset);<br>
var player = new AVPlayer (playerItem);<br>
var playerLayer = AVPlayerLayer.FromPlayer (player);<br>
//Might want to modify this so that it's the same size as the source video<br>
var frame = new CGRect (0, 0, this.View.Frame.Width, this.View.Frame.Height);<br>
playerLayer.Frame = frame;<br>
this.View.Layer.AddSublayer (playerLayer);<br>
player.Play ();<br>
[/code]</p>
<p>Note: This <em>won't</em> work with normal YouTube page URLs since the YouTube stream URLs are not directly accessible.</p>The Half-Baked Neural Net APIs of iOS 102016-07-01T08:18:00-10:002016-07-01T08:18:00-10:00larrytag:knowing.net,2016-07-01:/posts/2016/07/the-half-baked-neural-net-apis-of-ios-10/<p>iOS 10 contains 2 sets of APIs relating to Artificial Neural Nets and Deep Learning, aka The New New Thing. Unfortunately, both APIs are bizarrely incomplete: they allow you to specify the topology of the neural net, but have no facility for training.</p>
<p>I say this is "bizarre" for two …</p><p>iOS 10 contains 2 sets of APIs relating to Artificial Neural Nets and Deep Learning, aka The New New Thing. Unfortunately, both APIs are bizarrely incomplete: they allow you to specify the topology of the neural net, but have no facility for training.</p>
<p>I say this is "bizarre" for two reasons:</p>
<ul>
<li>Topology and the results of training are inextricably linked; and</li>
<li>Topology is static</li>
</ul>
<p>The training of a neural net is, ultimately, just setting the weighting factors for the elements in the network topology: for every connection in the network, you have some weighting factor. A network topology without weights is useless. A training process results in weights for that <em>specific</em> topology.</p>
<p>Topologies are static: neural nets do <em>not</em> modify their topologies at runtime. (Topologies are not generally modified even during training: instead, generally the experimenter uses their intuition to create a topology that they then train.) The topology of a neural net ought to be declarative and probably ought to be loaded from a configuration file, along with the weights that result from training.</p>
<p>When I first saw the iOS 10 APIs, I thought it was possible that Apple was going to reveal a high-level tool for defining and training ANNs: something like Quartz Composer, but for Neural Networks. Or, perhaps, some kind of iCloud-based service for doing the training. But instead, at the sessions at WWDC they said that the model was to develop and train your networks in something like Theanos and then use the APIs.</p>
<p>This is how it works:</p>
<ul>
<li>Do all of your development using some set of tools not from Apple, but make sure that your results are restricted to the runtime capabilities of the Apple neural APIs.</li>
<li>When you're done, you'll have two things: a network graph and weights for each connection in that graph</li>
<li>In your <em>code</em>, use the Apple neural APIs to recreate the network graph.</li>
<li>As a <em>resource</em> (download or load from file) the weights.</li>
<li>Back in your code, <em>stitch together</em> the weights and the graph. One mistake and you're toast. If you discover a new, more efficient, topology, you'll have to change your binary.</li>
</ul>
<p>This is my prediction: <em>Anyone</em> who uses these APIs is going to instantly write a higher-level API that combines the definition of the topology with the setting of the weights. I mean: Duh.</p>
<p>Now, to be fair, you <em>could</em> implement your own training algorithm on the device and modify the weights of a pre-existing neural network based on device-specific results. Which makes sense if you're Apple and want to do as much of the Siri / Image recognition / Voice recognition heavy lifting on the device as possible but allow for a certain amount of runtime flexibility. That is, you do the vast majority of the training during development, download the very complex topology and weight resources, but allow the device to modify the weights by a few percent. But even in that case, <em>either</em> your topology stays static <em>or</em> you build it based on a declarative configuration file, which means that whichever route you choose, you're still talking about a half-baked API.</p>
<p>Bizarre.</p>Review: 11-Day Diving on the Galapagos Master2016-06-11T12:53:00-10:002016-06-11T12:53:00-10:00larrytag:knowing.net,2016-06-11:/posts/2016/06/review-11-day-diving-on-the-galapagos-master/<h1>Trip Review: Galapagos Master, 11-Night Liveaboard Diving</h1>
<p>My wife and I recently returned from 11 days on <em>The Galapagos Master</em>, a 16-passenger liveaboard vessel whose itinerary includes Wolf and Darwin Islands.</p>
<p>The first thing to say about Galapagos diving is… Well, okay, the <em>first</em> thing to say about Galapagos diving …</p><h1>Trip Review: Galapagos Master, 11-Night Liveaboard Diving</h1>
<p>My wife and I recently returned from 11 days on <em>The Galapagos Master</em>, a 16-passenger liveaboard vessel whose itinerary includes Wolf and Darwin Islands.</p>
<p>The first thing to say about Galapagos diving is… Well, okay, the <em>first</em> thing to say about Galapagos diving is how incredible the fish life is. More on that in a minute…</p>
<p>The <em>second</em> thing to say about Galapagos diving is to talk about the temperature: temperature descriptions generally say something like “60-76F” and you might think “Well, I’ll plan for the middle of that estimate: 68F.” But that’s not right: the diving here is 60F <em>or</em> 76F, depending on where you dive. And even though almost exactly half the dives are in water that was in the mid-70s, the “feel” of the water temperature was determined by those in the 60F area. So 7mm hooded wetsuits and I envied the one person on our boat who dove in a drysuit. (My wife says her 5mm with a 3mm hooded steamer and a LavaCore was also okay, and she had more flexibility on the warmer dives.)</p>
<p>The other thing, for me, is gloves. I never wear gloves since in general I have no need to touch the reef. But in the Galapagos the large majority of dives involve tucking in to rocks and holding on in strong currents. Additionally, at Darwin, Wolf, and Cabo Douglas (Fernandina) there was surge.</p>
<p>And the rocks are covered in barnacles. I didn’t wear gloves for the first several dives and my hands got sliced up.</p>
<p>Dives are limited to 50 minutes. We were all diving nitrox and spending the majority of our dives at 60-80’, so I thought that duration was good: long enough to linger when the sights were good, short enough so that air consumption wasn’t a limiting factor, and brief enough that no-deco was very manageable (I had a few 4th dives where I was deco-limited.) In the cold water at Cape Douglas (marine iguanas) and Punta Vicente Roca (molas and penguins) the dives were shorter — 40 minutes. (The water <em>was</em> cold, but with the marine iguanas my max depth was 19’! I would have happily spent more time with them.)</p>
<p>Each buddy-team was given a DiveRite audible alarm powered by their low-pressure BCD inflator and a Nautilus Lifeline GPS/VHS radio. We never had any cause to use either, but the Nautilus, in particular, struck me as a showing a good concern for safety.</p>
<h2>Itinerary and Diving</h2>
<p>Our 11-day itinerary was: board the boat in Puerto Baquerizo Moreno on San Cristobal. Same day we had a 20-minute check-out dive in the harbor: cold, poor vis, just a chance to get your weight correct. (Some sea lions came in and played with us, which was fun.)</p>
<p>2nd day was a dive apiece at Mosquera and North Seymour Island. I thought these would be more “check out” style, but actually the dive at Mosquera was excellent! First hammerhead of the trip, a big school of mobula, schools of barracuda, steel pompano, big blue-spotted trevally, “some kind of bonito.” Our 2nd dive, at North Seymour, was apparently more-commonly a highlight, but we got somewhat skunked.</p>
<p>We did a brief land excursion on North Seymour and, for me, it was one of the highlights of the trip — our only chance to see nesting blue-footed boobies and frigate birds. We saw several males displaying, a few pairs “dancing,” and even one sitting on an egg. (I’m kicking myself at missing a post-dive-trip day-trip to Isla Lobos from San Cristobal to see more breeding birds.)</p>
<p>Then we steamed for Darwin Island. We apparently got a late start for this, leaving North Seymour at 4:30PM when we were “expected” to get out of there at 1:30PM. (But that’s a little confusing to me, as we may have dawdled an extra 30 minutes or whatever on the land expedition, but the overall schedule was set by the boat.)</p>
<p>The upshot was that we didn’t arrive at Darwin until 8:30AM and dove immediately. The next 4 days (2 at Darwin, 2 at Wolf, 4 dives per day) were amazing. Warm, with occasional hints of a thermocline, moderate-strong currents (I think once we had a spot with something like 2 knots), <em>insane</em> density of fish. Jacks, hammerheads, Galapagos sharks, yellowfin tuna, smaller tuna… just amazing.</p>
<p>Visibility was not “murky” but it was definitely “hazy.” Maybe 25-35’-ish total, but things at the limits of visibility were definitely more silhouette-y than defined. So even though there was <em>tons</em> of wildlife, you would really only very-clearly see maybe 3-4 close passes per dive.</p>
<p>Our panga (“Jaguar Sharks!”) was quite experienced (professional divemasters, marine biologist, etc.: with just over a thousand dives, I was by far the least experienced). I think on a difficulty scale of 1-10 for recreational diving, this was 7-8 stuff: cold, currents and surge, limited viz. This would not be a place for divers uncomfortable with their gear.</p>
<p>Additionally, particularly at the south side of Darwin’s Arch, if you drifted away from the group and were not in the panga right around that 50-minute mark, you could get close to some extremely dangerous wave breaks. The dive guides knew the topography and drifts very well and if you paid attention to the rules and stuck with them, it was all fine. But again, it was the type of place where a mistake that separated you from the group could get very serious, very quickly.</p>
<p>I could go on for thousands of words detailing the diving, but suffice it to say that it was great. There were endless schools of predators such as jacks and bonito as well as reef fish such as creole fish. The sharks varied depending on the specific dive location and time of day, but typically you’d settle in at 3 or 4 stops along the reefs and <em>usually</em> when you settled in, some amount of hammerheads and Galapagos would come by. Sometimes, when the current was strong, you’d be in a perfect situation where the hammerheads were slowly making their way up-current and it was just an unending conveyor belt.</p>
<p>Another fun thing to do at Darwin was to drift past the boat on its mooring: there must have been 20 silky sharks swimming along in its eddy and if you could hold on to a panga line or get into the eddy at the stern of the ship, you would just be surrounded by silkies. The islands and birdlife of Darwin and Wolf were fascinating to observe with binoculars from the stern of the ship.</p>
<p>After Darwin & Wolf, the diving was one location per day, usually with a single dive site dived only 3 times per day. In our case, we often dove, 7:45AM, 9:45AM, 11:45AM. Generally diving did seem to deteriorate as the morning progressed, so the only way I’d change that schedule would be a dive <em>before</em> breakfast, but that was never presented as an option to us. I think there was one more day when we had an after-lunch dive.</p>
<p>Fernandina had a beautiful deep-dive to see horn sharks and red-lipped batfish (coldest dive, with 58F on my computer and 95’ of neoprene compression). After that, we did 2 dives in 5 meters to see marine iguanas feeding. Absolutely amazing. I do want to say that when we first got in, I experienced the most powerful surge of the trip: the surge was so strong that it caused my octopus to freeflow and then, even with a good grip, I got peeled off a rock and pushed a solid 10 yards. Again, this is a situation where a less experienced person could make a serious mistake and try to re-grip rather than accept spending the next few waves being washed back and forth.</p>
<p>Another highlight of the trip then occurred: while crossing from Fernandina to Isabella I spotted a pod of orcas in the distance. They approached the boat and checked us out for ten minutes or more, swimming right alongside the boat, tilting on their sides to look up at us, etc.</p>
<p>As with the iguanas at Fernandina, the next two days were destination dives as well: one day to see molas (ocean sunfish) and penguins (snorkeled with one) and the next to see pelagic manta rays. These were fine and again the walls were beautiful, with abundant black coral and bushy brown gorgonians teeming with long-nose hawkfish.</p>
<p>Then a long cruise to Cousin’s Rock near Santiago and the final 2 dives of the trip. I feel silly downplaying any diving that involves a cave filled with white-tipped reef sharks and sea lions but compared to the other diving on the trip, this was anti-climactic.</p>
<p>The final half-day of the trip involved a bus ride to a farm in the Santa Cruz highlands to see giant tortoises. This was quite good: they were free-ranging and it seemed more natural than seeing them in pens. As a reminder of the threat of introduced species, I was bitten by a fire ant as I watched a giant tortoise.</p>
<p>Then we went down to Puerto Ayora and spent several hours, having a couple drinks and lazily shopping for souvenirs. The bus picked us up at 6:30PM and got us back to the boat near 8PM, where we had a final cocktail reception where the “tipping” occurred (more on that below) and then dinner. (Again, this was a case where the schedule was set by the boat, so the fact that we were all starving by the time we were fed near 9PM seems like something they could adjust.)</p>
<p>The next day we were back in Puerto Baquerizo Moreno and taken off the boat at 830AM.</p>
<p>The [official itinerary] describes the cadence as an early dive, breakfast, morning dive, lunch, and two afternoon dives. That’s not at all how ours worked: first, we never had an opportunity to dive before breakfast and on 3-day dives (most days not on Darwin and Wolf) we often did all 3 dives before lunch with only 45-minute breaks. That was fine, since diving was generally better in the morning and getting in and out of a cold wetsuit is a pain.</p>
<h2>Accommodations</h2>
<p>The <em>Galapagos Master</em> is the former <em>Deep Blue</em> (so you might search for other reviews under that name). There are 4 below- and 4 above-deck cabins. We had an above-deck cabin but I do not think they were worth extra: the windows did not open and being that far above the center-of-gravity of the ship may have made the motion a little more obvious. Other than the standard shipboard reaction of “Oh my god, where are we going to put all our stuff?” the two things that stand out are the beds, which were very uncomfortable (pads over wood, with two single beds pushed together so that the rails created a “chastity bump”), and the electric toilet, which was absolutely incapable of clearing solids (if you know what I mean) with anything less than 4-5 flushes. Toilet paper goes into a container at the side.</p>
<p>There is a salon where the in-door socializing happens, with a big-screen TV with HDMI inputs, so it was easy to do slideshows or watch movies from computers. The mess had one large table and a few smaller ones. It was well-configured for socializing. The sundeck was the major socializing place, and once clearly sported a bar and chairs, but only one chair was attached. Instead, you just lounged along the rails.</p>
<p>I’m not a “foodie” and I thought the food was fine, but I think there was a little eye-rolling from some more refined people. There was always a salad and some amount of vegetables, and then usually a fish and a meat dish with some starch like potatoes or rice or plantains. Often meals started with a soup and there was always a dessert. There were two vegetarians on our trip and the galley seemed to be able to accommodate them well enough. Soft drinks were complimentary, beers were \<span class="math">\(3 apiece and cocktails and spirits were \\)</span>6 apiece. Bottles of wine were \$25.</p>
<p>The dive deck was quite good, with individual stations along the rails, a wetsuit cleaning-tank and rack in the middle, 2 hot-water hoses with shower nozzles, and a large cameras-only tank. Under the tanks were cubby-holes with milk crates in which you kept your miscellaneous dive gear. Up a few steps from the dive deck was a passage with a long camera bench with 2 air blowers (well, 3, but one wasn’t working). On the other side there would be post-dive snacks and hot chocolate or ice tea. A nice thing were post-dive towels, neatly labeled with your station number, so you would be assured of getting one.</p>
<p>On the first day our nitrox was a little low, at 29+, but mostly we dove around 32% O2. Again, I thought the nitrox vs. time vs. depth balance was just right: you ended the 4-dive days close to deco-limited but I never got close to depth-limited.</p>
<h2>“Tipping”</h2>
<p>This is a pet peeve of mine. I’m from the US and I tip well because I know that, when “tipping” is a big part of how workers make their money, workers get absolutely screwed. Our trip had people from the US, England, and Germany, all of which have vastly different attitudes and expectations about tipping. And although “it’s absolutely up to you” there is a “recommended 10% tip” on your \<span class="math">\(600-a-day-per-person dive trip that is “an important part of how the crew make money.” This is total BS! If a fair wage for the crew amounts to \\)</span>60 per day per guest, charge \$660 per day and make tipping truly optional.</p>
<p>As one guest from England, who was not prepared to tip in cash (which is the only way), said “Half the trip fee goes to the cost of fuel for the ship. Why am I paying 10% of the fuel cost for ‘service’?”</p>
<p>Also, “tipping” this way creates perverse incentives. After safety, the most important role of the diveguides is to enforce the conservation rules, but that’s made more difficult when you rely on “tips” as a major part of your income for the trip. Which brings us to…</p>
<h2>“That Guy”</h2>
<p>One of the things we got ready to board the boat is that “there’s always one guy.” In our case, he was a German who fancied himself a “photo-journalist.” What that meant was that in his mind, because he made a few thousand Euros per year from stock photography fees, he was justified in breaking the rules: he didn’t stay in a line so that all divers were at an equal distance from the skittish hammerheads, he dive-bombed other photographers, he <em>pushed</em> my wife out of the way when she had the temerity to videotape a marine iguana with “just” a GoPro, and, worst of all, he would swim up to skittish animals such as hammerheads or mola and blast them with his strobes. He was <em>clearly</em> out of line time-and-time again, and the dive guides never confronted him.</p>
<p>This became a topic of every post-dive talk and we talked to our dive guide about it. He spoke at dinner about the importance of obeying the no-harassment rules and the dire consequences of breaking them. Then again, at breakfast the next day, he reiterated the importance of not chasing the animals.</p>
<p>And then, an hour later “That Guy” bombed a Mola and chased it away. Back on the panga, the other divers were saying stuff and when it became clear that the dive guide wasn’t going to say anything, I gave the guy both barrels. The upshot? Well, he didn’t dive with us anymore, but essentially he got a private dive guide and (according to reports) had a great time swimming up to and blasting pelagic mantas.</p>
<p>Such behavior will continue as long as the rest of us divers, whether photographers or not, tolerate it. We all want to see the animals as well as possible, we all paid a lot of money, we all would love a photo. But sometimes nature doesn’t accommodate our wishes. What we do in those circumstances is the test of our character and, if you label yourself a “photographer” (much less a “photo-journalist”), a test of your ethics.</p>
<p>Don’t be “that guy.”</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>WWDC Remote Viewing Protips2016-06-10T09:47:00-10:002016-06-10T09:47:00-10:00larrytag:knowing.net,2016-06-10:/posts/2016/06/wwdc-remote-viewing-protips/<p>I attended the 2015 WWDC and made these notes afterwards. Aside from the specifics re. the Apple Watch and AppleTV, they may be of value to those who are considering streaming sessions next week:</p>
<h1>WWDC: Post-show Streaming is the Key to Value</h1>
<p>From an editorial perspective, one thing that is …</p><p>I attended the 2015 WWDC and made these notes afterwards. Aside from the specifics re. the Apple Watch and AppleTV, they may be of value to those who are considering streaming sessions next week:</p>
<h1>WWDC: Post-show Streaming is the Key to Value</h1>
<p>From an editorial perspective, one thing that is clear about WWDC is that the main audience for the sessions is not the developers in attendance, but the much more diverse, more diffuse, and more transient on-line audience that will view the videos over the next months and even years.</p>
<h2>WWDC Session Videos are great as overviews, poor as references</h2>
<p>What I’ve come to realize is that WWDC sessions are great as overviews, but poor for depth. They are very much worth watching when you’re new to a framework, they’re somewhat worth watching if you haven’t programmed in the framework lately (you might see some class you hadn’t appreciated), but they are not the place to discover a way out of some corner-case or programming limitation.</p>
<p>Microsoft explicitly labels the depth of their conference talks as being 100-, 200-, or 300-level, and 300-level content at WWDC was vanishingly rare. (As I write this, I can only speak to the talks I physically attended, but several talks definitely promised more depth than they delivered.)</p>
<p>I wonder if this is an artifact of The Dog That Didn’t Bark aka Apple TV. It must have been pulled very late. Both Xcode and Apple’s Developer Site, which <em>had</em> to be updated to support the new OS betas, are littered with Apple TV references. <em>Perhaps</em> it was the case that some of these talks were put together quickly. (Although you wouldn’t guess it from the universally well-practiced speakers.)</p>
<h2>The real keynote was the Platform State of the Union</h2>
<p>Monday’s keynote was covered by news vans and live blogs and all that crap. There was, perhaps, 5 minutes of developer content in this 2.5-hour stemwinder. From the audience, anyway, the music stuff was awkward to the point of embarrassment.</p>
<p>Skip it and watch [Platform State of the Union] instead. This was the true developer’s keynote and contains an excellent overview of El Capitan, iOS 9, and watchOS. (By the way, the witty kids pronounce “watchOS” so that it rhymes with “nachos.”)</p>
<h2>The Shocking Secret You Can Use to Determine Which Videos to Stream</h2>
<p>Is that a proper 21st century headline?</p>
<p>Anyway, here’s the key: many sessions followed a standard naming practice:</p>
<p>— “Introduction to…” talks are 100-level (if that) “tables of content.” They hardly have any code on screen, but contain references to <em>other</em> videos that provide the 200- or 300-level content. If you’ve ever programmed in the namespace before, you can skip these talks.</p>
<p>— “What’s New In…” talks are 100-level “Release Notes.” There may be <em>some</em> code, but what you’re really looking for here are the new classes and general new capabilities. This is the video with which you should start if you have programmed in the framework before, even if you’re pretty comfortable. Again, all of these talks are good at referencing other, more substantive, talks. <em>This</em> is my main recommended tactic for finding deep content on frameworks with which you are familiar: it’s much more effective than guessing from session titles and descriptions.</p>
<p>— Beware talks that have the words “tips”, “tricks,” or “practices.” These were the talks that disappointed me. Such words traditionally mean 300-level content. If you’re an attendee and you’re budgeting precious in-conference time to “tricks” and “practices,” that’s a strong indicator that you’re familiar with the framework and are encountering its limitations and corner cases. But at WWDC, these sessions appear to be more focused on the newcomer or relatively inexperienced framework user.</p>Tracking Apple Pencil angles and pressure with Xamarin2016-03-03T08:05:00-10:002016-03-03T08:05:00-10:00larrytag:knowing.net,2016-03-03:/posts/2016/03/tracking-apple-pencil-angles-and-pressure-with-xamarin/<p>Rumor has it that Apple will support the Apple Pencil in the forthcoming iPad. If so, more developers will want to use the new features of <code>UITouch</code> -- force, angle, and elevation -- supported by the incredibly-precise stylus.</p>
<p>Basically, it's trivial:</p>
<p>-- Force is <code>UITouch.Force</code>;<br>
-- Angle is <code>UITouch.GetAzimuthAngle(UIView)</code>; and<br>
-- Angle …</p><p>Rumor has it that Apple will support the Apple Pencil in the forthcoming iPad. If so, more developers will want to use the new features of <code>UITouch</code> -- force, angle, and elevation -- supported by the incredibly-precise stylus.</p>
<p>Basically, it's trivial:</p>
<p>-- Force is <code>UITouch.Force</code>;<br>
-- Angle is <code>UITouch.GetAzimuthAngle(UIView)</code>; and<br>
-- Angle above horizontal is <code>UITouch.AltitudeAngle</code></p>
<p>(The <code>UIView</code> objects are there, I think, to make it easier to create a custom angular transform that is more natural to the task at hand -- i.e., an artist could "rotate" the page slightly to accommodate the angle with which they like to work. I think.)</p>
<p>Anyhow, here's some code:</p>
<p>[code lang="fsharp"]</p>
<p>namespace UITouch0</p>
<p>open System<br>
open UIKit<br>
open Foundation<br>
open System.Drawing<br>
open CoreGraphics</p>
<p>type ContentView(color : UIColor) as this =<br>
inherit UIView()<br>
do this.BackgroundColor \<- color</p>
<p>let MaxRadius = 200.0<br>
let MaxStrokeWidth = nfloat 10.0</p>
<p>//Mutable!<br>
member val Circle : (CGPoint * nfloat * nfloat * nfloat ) option = None with get, set</p>
<p>member this.DrawTouch (touch : UITouch) =<br>
let radius = (1.0 - (float touch.AltitudeAngle) / (Math.PI / 2.0)) * MaxRadius |> nfloat<br>
this.Circle \<- Some (touch.LocationInView(this), radius, touch.GetAzimuthAngle(this), touch.Force)<br>
this.SetNeedsDisplay()</p>
<p>override this.Draw rect =</p>
<p>match this.Circle with<br>
| Some (location, radius, angle, force) -><br>
let rectUL = new CGPoint(location.X - radius, location.Y - radius)<br>
let rectSize = new CGSize(radius * (nfloat 2.0), radius * (nfloat 2.0))<br>
use g = UIGraphics.GetCurrentContext()<br>
let strokeWidth = force * MaxStrokeWidth<br>
g.SetLineWidth(strokeWidth)<br>
let hue = angle / nfloat (Math.PI * 2.0)<br>
let color = UIColor.FromHSB(hue, nfloat 1.0, nfloat 1.0)<br>
g.SetStrokeColor(color.CGColor)<br>
g.AddEllipseInRect \<| new CGRect(rectUL, rectSize)<br>
g.MoveTo (location.X, location.Y)<br>
let endX = location.X + nfloat (cos(float angle)) * radius<br>
let endY = location.Y + nfloat (sin(float angle)) * radius<br>
g.AddLineToPoint (endX, endY)<br>
g.StrokePath()<br>
| None -> ignore()</p>
<p>type SimpleController() =<br>
inherit UIViewController()<br>
override this.ViewDidLoad() =<br>
this.View \<- new ContentView(UIColor.Blue)</p>
<p>override this.TouchesBegan(touches, evt) =<br>
let cv = this.View :?> ContentView</p>
<p>touches |> Seq.map (fun o -> o :?> UITouch) |> Seq.iter cv.DrawTouch</p>
<p>override this.TouchesMoved(touches, evt) =<br>
let cv = this.View :?> ContentView<br>
touches |> Seq.map (fun o -> o :?> UITouch) |> Seq.iter cv.DrawTouch</p>
<p>[\<Register("AppDelegate")>]<br>
type AppDelegate() =<br>
inherit UIApplicationDelegate()<br>
let window = new UIWindow(UIScreen.MainScreen.Bounds)</p>
<p>override this.FinishedLaunching(app, options) =<br>
let viewController = new SimpleController()<br>
viewController.Title \<- "F# Rocks"<br>
let navController = new UINavigationController(viewController)<br>
window.RootViewController \<- navController<br>
window.MakeKeyAndVisible()<br>
true</p>
<p>module Main =<br>
[\<EntryPoint>]<br>
let main args =<br>
UIApplication.Main(args, null, "AppDelegate")<br>
0</p>
<p>[/code]</p>
<p>And it looks like this:</p>
<p>[video width="600" height="800" mp4="/uploads/2016/03/ScreenFlow-2.mp4"][/video]</p>Airport Time Capsule considered harmful2016-02-16T08:33:00-10:002016-02-16T08:33:00-10:00larrytag:knowing.net,2016-02-16:/posts/2016/02/airport-time-capsule-considered-harmful/<p>The premise of the Apple ecosystem is "It just works." It is a world of hardware and software in which you pay a premium for not having to worry about fiddling with configurations and command-line options and incompatibility.</p>
<p>The Airport Time Capsule is a wireless router that also contains a …</p><p>The premise of the Apple ecosystem is "It just works." It is a world of hardware and software in which you pay a premium for not having to worry about fiddling with configurations and command-line options and incompatibility.</p>
<p>The Airport Time Capsule is a wireless router that also contains a hard drive for backups and media sharing. Bizarrely, though, the hard drive it contains is not accessible to OS X's Drive Utility program, so a run-of-the-mill filesystem error can cause the disk to be inaccessible. It's the antithesis of "It Just Works." It's "It Just Will Not Work."</p>
<p>Don't buy an Airport Time Capsule.</p>Hair-Tearing-Out-Thing Explainer (Provisioning Profiles):2015-12-21T13:57:00-10:002015-12-21T13:57:00-10:00larrytag:knowing.net,2015-12-21:/posts/2015/12/hair-tearing-out-thing-explainer-provisioning-profiles/<p>There is a company called Round Red Food. They make brain-phones and brain-watches and brain-televisions. These brain-things run brain-books written by Round Red Food. But Round Red Food also allows other people to write brain-books.<br>
<br>
Round Red Food wants to control what brain-books run on their brain-things. To do this …</p><p>There is a company called Round Red Food. They make brain-phones and brain-watches and brain-televisions. These brain-things run brain-books written by Round Red Food. But Round Red Food also allows other people to write brain-books.<br>
<br>
Round Red Food wants to control what brain-books run on their brain-things. To do this, they give each brain-book it's own long name. This is called the Brain-Thing-Name.<br>
<br>
Brain-books are written by many people, who come and go all the time, but the brain-book is owned by a thing Round Red Food calls the Team. Round Red Food knows all the teams and gives each one it's own funny name. This is called the Team-Name.<br>
<br>
Every brain-book needs a name, too. This name is added to the Team-Name to make the Book-Name.<br>
<br>
Round Red Food wants to control what brain-books do so that bad Teams cannot make their brain-books do bad things like listen to you without your okay. Each brain-book has to do things. Every brain-book needs to run, but some brain-books also need to know where they are. Some need to take pictures. All sorts of stuff, but you should always be able to say okay or "No, I don't want to allow you to do that." The things that a brain-book needs to do are called its Needs-Doing-Things.<br>
<br>
The people who write brain-books for a Team are coming and going all the time. So Round Red Food wants to know who is working for what Teams. Instead of saying "Keep your Team-Name and your Book-Names all to yourself and change them every time someone comes or goes," Round Red Food lets the people who work for a team hold onto a special thing. This special thing is a Something-Everyone-Knows/Something-Only-You-Know numbers thing. As long as both the Team and the person working for the team agree, this thing makes a promise that the person works for the team. This Promise-Paper can be broken by either the Team (if they make the person go) or the person (if they don't want to work with the Team anymore).<br>
<br>
So, remember:<br>
<br>
* the brain-thing has a Brain-Thing-Name;<br>
* the brain-book has a Book-Name and a Needs-Doing-Things thing;<br>
* the person working for the Team has a Promise-Paper<br>
<br>
The people writing the brain-book send all this stuff to Round Red Food's Brain-Book Writer's Place. Round Red Food sends them back something that says "OK, this person, who works for Team, can put the brain-book named Book-Name on Brain-Thing-Name, and the person reading the brain-book will be asked whether they want to allow the brain-book to do its Needs-Doing-Things things."<br>
<br>
This is called the Tearing-Hair-Out-Thing.</p>
<hr>
<p>Brain-Thing-Name -> UDID<br>
Book-Name -> AppID<br>
Needs-Doing-Things -> Entitlements<br>
Promise-Paper -> Certificate<br>
Tearing-Hair-Out-Thing -> Provisioning Profile</p>Animating the stroke color of a CAShapeLayer with Xamarin2015-10-14T17:18:00-10:002015-10-14T17:18:00-10:00larrytag:knowing.net,2015-10-14:/posts/2015/10/animating-the-stroke-color-of-a-cashapelayer-with-xamarin/<p>I wanted to indicate the most recent move in an AI-on-AI game of TicTacToe, so I wanted to have the most recent move be highlighted. The Xs and Os are <code>CAShapeLayer</code> objects.</p>
<p>Here's the code to do it, ~~featuring a very ugly hack to cast an <code>IntPtr</code> to an <code>NSObject …</code></p><p>I wanted to indicate the most recent move in an AI-on-AI game of TicTacToe, so I wanted to have the most recent move be highlighted. The Xs and Os are <code>CAShapeLayer</code> objects.</p>
<p>Here's the code to do it, ~~featuring a very ugly hack to cast an <code>IntPtr</code> to an <code>NSObject</code>~~ Including the use of <code>SetTo</code> and <code>SetFrom</code> to use a type that is not an <code>NSObject</code> in <code>CABasicAnimation</code> (thanks Sebastien!):</p>
<p>[code lang="csharp"]<br>
var layer = mark == 'X' ? ShapeLayer.XLayer (endFrame) : ShapeLayer.OLayer (endFrame);<br>
layer.Position = origin;<br>
this.Layer.AddSublayer (layer);</p>
<p>var animation = CABasicAnimation.FromKeyPath ("strokeColor");<br>
animation.SetFrom(UIColor.Green.CGColor);<br>
animation.SetTo(layer.StrokeColor);<br>
animation.Duration = 0.5;</p>
<p>layer.AddAnimation (animation, "animateStrokeColor");<br>
[/code]</p>TideMonkey: Development Diary 02015-10-09T09:51:00-10:002015-10-09T09:51:00-10:00larrytag:knowing.net,2015-10-09:/posts/2015/10/tidemonkey-development-diary-0/<p>I am publicly committing to developing “TideMonkey,” a tide-prediction application that will run on (at least) iOS and watchOS.</p>
<p>TideMonkey will be based on <a href="https://flaterco.com/xtide/">Xtide</a>, an excellent piece of software developed by David Flater. At the moment, my hope is that it will be a very loose port, or what …</p><p>I am publicly committing to developing “TideMonkey,” a tide-prediction application that will run on (at least) iOS and watchOS.</p>
<p>TideMonkey will be based on <a href="https://flaterco.com/xtide/">Xtide</a>, an excellent piece of software developed by David Flater. At the moment, my hope is that it will be a very loose port, or what Flater refers to as a “non-port” that reuses the harmonics files of Xtide but is otherwise only loosely based on the source code. On the other hand, I know virtually nothing about the domain, so it is likely that I will have to hew pretty closely to Xtide’s algorithms, at least initially. <em>Ideally</em> I would like to be able to plugin different algorithms and compare their results with the canonical Xtide. Neural nets are a particular interest of mine and one would think that a harmonic series would be the type of thing that one could successfully train (if this ever happens, it won’t be for months and months and months).</p>
<p>I am battling the urge to dive right into coding. Instead, I know that I will be happy by investing in:</p>
<ul>
<li>automation, and</li>
<li>testing, and</li>
<li>continuous integration</li>
</ul>
<p>All of which argues for me to begin my journey by getting Xtide, which is written in C++, up and running in a CI server. For no particular reason (but it’s free for personal use) I’ve chosen to use <a href="https://www.jetbrains.com/teamcity/">TeamCity</a> for my CI server.</p>
<hr>
<p>Hmm…</p>
<p>There are several Xtide ports on Github to iOS or Android. The first one I tried was last updated in 2013 and doesn’t run on iOS 9 (it looks like a simple permissions issue, but it doesn’t run “straight from the cloud” and I don’t know if I want to deal with a port rather than just go with the original “straight from the horse’s mouth” Xtide source.</p>
<p>At the moment, I think I’ll work all inside the single “TideMonkey” Github repo. I’ll have to check license restrictions on that, and I don’t know how it will work out once the project structure starts to become more complicated, with testing and mobile development as part of it.</p>
<p>Still,</p>
<p><code>Creating TideMonkey Github report</code></p>
<p>MIT License</p>
<p><a href="https://github.com/lobrien/TideMonkey">TideMonkey repo</a></p>GameplayKit path-finding in iOS 9 with Xamarin.iOS2015-08-06T10:20:00-10:002015-08-06T10:20:00-10:00larrytag:knowing.net,2015-08-06:/posts/2015/08/gameplaykit-path-finding-in-ios-9-with-xamarin-ios/<p>Easy-peasy, lemon-squeazy:</p>
<p>[code lang="csharp"]<br>
var a = GKGraphNode2D.FromPoint (new Vector2 (0, 5));<br>
var b = GKGraphNode2D.FromPoint (new Vector2 (3, 0));<br>
var c = GKGraphNode2D.FromPoint (new Vector2 (2, 6));<br>
var d = GKGraphNode2D.FromPoint (new Vector2 (4, 6));<br>
var e = GKGraphNode2D.FromPoint (new Vector2 (6, 5));<br>
var f = GKGraphNode2D.FromPoint (new …</p><p>Easy-peasy, lemon-squeazy:</p>
<p>[code lang="csharp"]<br>
var a = GKGraphNode2D.FromPoint (new Vector2 (0, 5));<br>
var b = GKGraphNode2D.FromPoint (new Vector2 (3, 0));<br>
var c = GKGraphNode2D.FromPoint (new Vector2 (2, 6));<br>
var d = GKGraphNode2D.FromPoint (new Vector2 (4, 6));<br>
var e = GKGraphNode2D.FromPoint (new Vector2 (6, 5));<br>
var f = GKGraphNode2D.FromPoint (new Vector2 (6, 0));</p>
<p>a.AddConnections (new [] { b, c }, false);<br>
b.AddConnections (new [] { e, f }, false);<br>
c.AddConnections (new [] { d }, false);<br>
d.AddConnections (new [] { e, f }, false);</p>
<p>var graph = GKGraph.FromNodes(new [] { a, b, c, d, e, f });</p>
<p>var a2e = graph.FindPath (a, e); // [ a, c, d, e ]<br>
var a2f = graph.FindPath (a, f); // [ a, b, f ]<br>
[/code]</p>
<p><a href="/uploads/2015/08/GKPathFindPath.png"><img alt="GKPathFindPath" class="alignnone size-full wp-image-6060" height="600" src="/uploads/2015/08/GKPathFindPath.png" width="800"></a></p>FizzBuzz with iOS 9 GameplayKit Expert System in C# with Xam.iOS2015-08-04T13:12:00-10:002015-08-04T13:12:00-10:00larrytag:knowing.net,2015-08-04:/posts/2015/08/fizzbuzz-with-ios-9-gameplaykit-expert-system-in-c-with-xam-ios/<p>OK, so this is silly, but:</p>
<p>[code lang="csharp"]<br>
var clearRule = GKRule.FromPredicate ((rules) => reset, rules => {<br>
output = "";<br>
reset = false;<br>
});<br>
clearRule.Salience = 1;</p>
<p>var fizzRule = GKRule.FromPredicate (mod (3), rules => {<br>
output += "fizz";<br>
});<br>
fizzRule.Salience = 2;<br>
var buzzRule = GKRule.FromPredicate (mod (5), rules => {<br>
output += "buzz";<br>
});<br>
buzzRule.Salience = 2;</p>
<p>var outputRule = GKRule.FromPredicate …</p><p>OK, so this is silly, but:</p>
<p>[code lang="csharp"]<br>
var clearRule = GKRule.FromPredicate ((rules) => reset, rules => {<br>
output = "";<br>
reset = false;<br>
});<br>
clearRule.Salience = 1;</p>
<p>var fizzRule = GKRule.FromPredicate (mod (3), rules => {<br>
output += "fizz";<br>
});<br>
fizzRule.Salience = 2;<br>
var buzzRule = GKRule.FromPredicate (mod (5), rules => {<br>
output += "buzz";<br>
});<br>
buzzRule.Salience = 2;</p>
<p>var outputRule = GKRule.FromPredicate (rules => true, rules => {<br>
System.Console.WriteLine(output == "" ? input.ToString() : output);<br>
reset = true;<br>
});<br>
outputRule.Salience = 3;</p>
<p>var rs = new GKRuleSystem ();<br>
rs.AddRules (new [] {<br>
clearRule,<br>
fizzRule,<br>
buzzRule,<br>
outputRule<br>
});</p>
<p>for (input = 1; input \< 16; input++) {<br>
rs.Evaluate ();<br>
rs.Reset ();<br>
}<br>
[/code]</p>
<p>Output:</p>
<p>[code]<br>
2015-08-04 13:08:47.164 GameplayKit0[46277:18357203] 1<br>
2015-08-04 13:08:47.164 GameplayKit0[46277:18357203] 2<br>
2015-08-04 13:08:50.338 GameplayKit0[46277:18357203] fizz<br>
2015-08-04 13:08:50.338 GameplayKit0[46277:18357203] 4<br>
2015-08-04 13:08:51.089 GameplayKit0[46277:18357203] buzz<br>
2015-08-04 13:08:51.934 GameplayKit0[46277:18357203] fizz<br>
2015-08-04 13:08:51.934 GameplayKit0[46277:18357203] 7<br>
2015-08-04 13:08:51.935 GameplayKit0[46277:18357203] 8<br>
2015-08-04 13:08:52.589 GameplayKit0[46277:18357203] fizz<br>
2015-08-04 13:08:53.256 GameplayKit0[46277:18357203] buzz<br>
2015-08-04 13:08:53.256 GameplayKit0[46277:18357203] 11<br>
2015-08-04 13:08:53.872 GameplayKit0[46277:18357203] fizz<br>
2015-08-04 13:08:53.873 GameplayKit0[46277:18357203] 13<br>
2015-08-04 13:08:53.873 GameplayKit0[46277:18357203] 14<br>
2015-08-04 13:08:55.005 GameplayKit0[46277:18357203] buzzfizz<br>
[/code]</p>
<p>The important thing I learned is that you have to call <code>GKRuleSystem.Reset()</code> if you want evaluated <code>GKRule</code>s to be re-evaluated.</p>Why You Should Watch WWDC Session Streams2015-06-13T08:05:00-10:002015-06-13T08:05:00-10:00larrytag:knowing.net,2015-06-13:/posts/2015/06/why-you-should-watch-wwdc-session-streams/<p>From an editorial perspective, one thing that is clear about WWDC is that the main audience for the sessions is not the developers in attendance, but the much more diverse, more diffuse, and more transient on-line audience that will view the videos over the next months and even years.</p>
<h2>WWDC …</h2><p>From an editorial perspective, one thing that is clear about WWDC is that the main audience for the sessions is not the developers in attendance, but the much more diverse, more diffuse, and more transient on-line audience that will view the videos over the next months and even years.</p>
<h2>WWDC Session Videos are great as overviews, poor as references</h2>
<p>What I’ve come to realize is that WWDC sessions are great as overviews, but poor for depth. They are very much worth watching when you’re new to a framework, they’re somewhat worth watching if you haven’t programmed in the framework lately (you might see some class you hadn’t appreciated), but they are not the place to discover a way out of some corner-case or programming limitation.</p>
<p>Microsoft explicitly labels the depth of their conference talks as being 100-, 200-, or 300-level, and 300-level content at WWDC was vanishingly rare. (As I write this, I can only speak to the talks I physically attended, but several talks definitely promised more depth than they delivered.)</p>
<p>I wonder if this is an artifact of The Dog That Didn’t Bark aka Apple TV. It must have been pulled very late. Both Xcode and Apple’s Developer Site, which <em>had</em> to be updated to support the new OS betas, are littered with Apple TV references. <em>Perhaps</em> it was the case that some of these weaker talks were late substitutions. (Although you wouldn’t guess it from the universally well-practiced speakers.)</p>
<h2>The real keynote was the Platform State of the Union</h2>
<p>Monday’s keynote was covered by news vans and live blogs and all that crap. There was, perhaps, 5 minutes of developer content in this 2.5-hour stemwinder. From the audience, anyway, the music stuff was awkward to the point of embarrassment.</p>
<p>Skip it and watch <a href="https://developer.apple.com/videos/play/wwdc2015/102/">Platform State of the Union</a> instead. This was the true developer’s keynote and contains an excellent overview of El Capitan, iOS 9, and watchOS. (By the way, the witty kids pronounce “watchOS” so that it rhymes with “nachos.”)</p>
<h2>The Shocking Secret You Can Use to Determine Which Videos to Stream</h2>
<p>Is that a proper 21st century headline?</p>
<p>Anyway, here’s the key: many sessions followed a standard naming practice:</p>
<p>— “Introduction to…” talks are 100-level (if that) “tables of content.” They hardly have any code on screen, but contain references to <em>other</em> videos that provide the 200- or 300-level content. If you’ve ever programmed in the namespace before, you can skip these talks.</p>
<p>— “What’s New In…” talks are 100-level “Release Notes.” There may be <em>some</em> code, but what you’re really looking for here are the new classes and general new capabilities. This is the video with which you should start if you have programmed in the framework before, even if you’re pretty comfortable. Again, all of these talks are good at referencing other, more substantive, talks. <em>This</em> is my main recommended tactic for finding deep content on frameworks with which you are familiar: it’s much more effective than guessing from session titles and descriptions.</p>
<p>— Beware talks that have the words “tips”, “tricks,” or “practices.” These were the talks that disappointed me. Such words traditionally mean 300-level content. If you’re an attendee and you’re budgeting precious in-conference time to “tricks” and “practices,” that’s a strong indicator that you’re familiar with the framework and are encountering its limitations and corner cases. But at WWDC, these sessions appear to be more focused on the newcomer or relatively inexperienced framework user.</p>How to: Handoff to a Xamarin iPhone app from Apple Watch2015-05-07T06:00:00-10:002015-05-07T06:00:00-10:00larrytag:knowing.net,2015-05-07:/posts/2015/05/how-to-handoff-to-a-xamarin-iphone-app-from-apple-watch/<p># How to: Handoff to a Xamarin iPhone app from Apple Watch</p>
<p>There are two ways to activate the parent (aka container) app from an Apple Watch app. You can either directly activate the container app using <code>WKInterfaceController.OpenParentApplication</code> or you can use Handoff.</p>
<p>Using Handoff is a little more complex …</p><p># How to: Handoff to a Xamarin iPhone app from Apple Watch</p>
<p>There are two ways to activate the parent (aka container) app from an Apple Watch app. You can either directly activate the container app using <code>WKInterfaceController.OpenParentApplication</code> or you can use Handoff.</p>
<p>Using Handoff is a little more complex, so I thought I’d write a quick little how-to. There are a few different Handoff scenarios, but perhaps the most common for the Watch is: “On my watch I want to <em>begin</em> a task that I complete later on my iPhone.” So, for instance, some task that requires either more data-entry than is appropriate for the watch or some capabilities not available on the watch.</p>
<p>I want to keep the focus on the APIs, so instead of a real-world sample, I’m going to create a minimal example: a button on the Watch activates handoff and a status label on the phone app is updated when the user activity is continued on the phone.</p>
<p>As always, we have a single Solution with 3 projects: the parent App, the Watch extension, and the Watch App.</p>
<p><a href="/uploads/2015/05/Napkin-10-05-06-15-4.21.12-PM.png"><img alt="Napkin 10 05-06-15, 4.21.12 PM" class="alignnone wp-image-6034" height="444" src="/uploads/2015/05/Napkin-10-05-06-15-4.21.12-PM-300x222.png" width="600"></a></p>
<p>Every handoff activity has a unique identifier. By convention, this is a domain-reversed string such as: <code>com.xamarin.HandOffDemo.verb</code>.</p>
<p>To trigger the Handoff behavior, the watch extension calls the <code>WKInterfaceController.UpdateUserActivity</code> method, with its first argument set equal to this identifier:</p>
<p>[code lang="csharp"]<br>
partial void ActivateHandoffClicked (WatchKit.WKInterfaceButton sender)<br>
{<br>
var userInfo = NSDictionary.FromObjectAndKey(new NSString(“value”), new NSString(“key”));<br>
this.UpdateUserActivity(“com.xamarin.HandOffDemo.verb”, userInfo, null);<br>
}<br>
[/code]</p>
<p>The third argument is a <code>NSUrl</code> object that can be used for Handoff tasks that should be handled by Safari. But in our case, we’re handing the <code>userInfo</code> dictionary containing the very complex data associated with our handoff.</p>
<p>Your parent app registers its interest in this type of handoff within its <code>info.plist</code>. In the parent app <code>info.plist</code>, add a new array called <code>NSUserActivityTypes</code> and add to it a string with value <code>com.xamarin.HandOffDemo.verb</code></p>
<p><a href="/uploads/2015/05/Napkin-11-05-06-15-4.29.20-PM.png"><img alt="Napkin 11 05-06-15, 4.29.20 PM" class="alignnone size-large wp-image-6040" height="786" src="/uploads/2015/05/Napkin-11-05-06-15-4.29.20-PM-1024x786.png" width="1024"></a></p>
<p>It’s possible that an app could be interested in certain handoffs, but not always be in a position to actually handle them. That logic can be placed in an override of the <code>UIApplicationDelegate.WillContinueUserActivity</code> method:</p>
<p>[code lang="csharp"]<br>
public override bool WillContinueUserActivity (UIApplication application, string userActivityType)<br>
{<br>
//Yeah, we can handle it<br>
return true;<br>
}<br>
[/code]</p>
<p>Assuming that we return <code>true</code> from that method, the next step is to override the <code>UIApplicationDelegate.ContinueUserActivity</code> method:</p>
<p>An architectural issue that needs to be addressed is that this Handoff re-entry point is in the <code>UIApplicationDelegate</code> object, which of course does not have an associated user interface. There are several ways to handle this, but as a fan of reactive programming, I think the proper design is to create either an <code>IObservable</code> sequence or a more traditional C# event, which is what I do here:</p>
<p>[code lang="csharp"]<br>
public event EventHandler HandoffOccurred = delegate {};</p>
<p>public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)<br>
{<br>
HandoffOccurred?.Invoke (this, userActivity.UserInfo);</p>
<p>return true;<br>
}<br>
[/code]</p>
<p>The third parameter, <code>completionHandler</code> used if you have references to custom <code>UIResponder</code> objects that should handle the user activity. In the case, you put those references in a <code>NSArray</code> and pass them to <code>completionHandler</code>, which will cause each of <em>their</em> <code>ContinueUserActivity</code> methods to be called. (Update: Apple would probably prefer this technique to my event, but I am not sure if it's necessary, and it requires the <code>UIApplicationDelegate</code> to maintain a reference to the subscribing <code>UIResponder</code>, so you either have an ugly dependency or you have to implement <em>some</em> kind of Observer / Subscriber pattern. So I still would suggest an event or <code>IObservable</code> as the better solution.)</p>
<p>In the parent app’s main <code>UIViewController</code> class, I have:</p>
<p>[code lang="csharp"]<br>
public override void ViewDidLoad ()<br>
{<br>
base.ViewDidLoad ();</p>
<p>//Configure user experience for Handoff<br>
var myAppDel = (AppDelegate) UIApplication.SharedApplication.Delegate;<br>
myAppDel.HandoffOccurred += HandoffOccurred;<br>
}</p>
<p>public void HandoffOccurred(object sender, NSDictionary userInfo)<br>
{<br>
InvokeOnMainThread( () => statusLabel.Text = userInfo[“key”].ToString() );<br>
}<br>
[/code]</p>
<p>And that’s all there is to it. Obviously, a real use-case would involve building a more complex <code>NSDictionary</code> holding the context of the watch interaction and a similarly complex handler in the parent app.</p>
<p>Now, when the Handoff is activated from the Apple Watch, my iPhone lock screen shows the icon of the parent app in the lower-left corner. If I drag that up, the parent app opens, the re-entry process begins, with <code>UIApplicationDelegate.WillContinueUserActivity</code> and <code>UIApplicationDelegate.ContinueUserActivity</code>.</p>
<p>https://www.youtube.com/watch?v=XKt-7EVfEDs</p>Programming WatchKit with F#2015-01-21T04:00:00-10:002015-01-21T04:00:00-10:00larrytag:knowing.net,2015-01-21:/posts/2015/01/programming-watchkit-with-f/<p><em>Disclaimer: This is just a hack. I’m not in any position to make announcements about stuff, but Xamarin loves F# and I’m sure that better solutions than this are forthcoming. But this was fun to get running, so…</em></p>
<p>Xamarin just released it’s <a href="https://docs.microsoft.com/en-us/xamarin/ios/watchos/">Preview of Watch Kit</a> support …</p><p><em>Disclaimer: This is just a hack. I’m not in any position to make announcements about stuff, but Xamarin loves F# and I’m sure that better solutions than this are forthcoming. But this was fun to get running, so…</em></p>
<p>Xamarin just released it’s <a href="https://docs.microsoft.com/en-us/xamarin/ios/watchos/">Preview of Watch Kit</a> support and naturally, I had to see if it was possible to use F# to program the forthcoming Apple Watch. Yes, it is.</p>
<p>As always with Watch Kit Apps, the Xamarin solution consists of three projects:</p>
<ol>
<li>A Parent app that is a normal iOS app;</li>
<li>An Extension that runs on a connected iPhone and executes the program logic; and</li>
<li>A Watch App that runs on the Watch and is essentially a remote display for the Extension App</li>
</ol>
<p>You can read much more about this at <a href="https://docs.microsoft.com/en-us/xamarin/ios/watchos/">Xamarin’s Watch Kit Documentation</a> site.</p>
<p>To create an F# Watch solution, first create an F#-based Parent App. Then, add the Extension project to that app, an F#-based <em>Custom Keyboard</em> Extension. Finally, add a Watch App from the C#/iOS/Unified/Apple Watch solution template.</p>
<p>The Watch App consists only of a storyboard and resources. It doesn’t actually have any C# (or F#) code in it.</p>
<p>Follow these instructions to [<a href="https://developer.xamarin.com/guides/ios/watch/installation/index.html#Set_Project_References_and_Identifiers">set project references and identifiers</a>].</p>
<h2>Switching the Extension from Custom Keyboard to Watch Kit</h2>
<p>You will have to manually edit the <code>info.plist</code> of the Watch Extension:</p>
<ul>
<li>In <code>NSExtension</code>, switch the <code>NSExtensionPointIdentifier</code> to <code>com.apple.watchkit</code>; and</li>
<li>Under <code>NSExtensionAttributes</code>, add a <code>WKAppBundleIdentifier</code> key to the identifier of your Watch App (e.g., <code>com.xamarin.FWatch1.watchkitapp</code>)</li>
</ul>
<p><a href="/uploads/2015/01/Screenshot-2015-01-21-15.02.07.png"><img alt="Screenshot 2015-01-21 15.02.07" class="alignnone wp-image-6004 size-large" height="751" src="/uploads/2015/01/Screenshot-2015-01-21-15.02.07-1024x751.png" width="1024"></a></p>
<p>Now you can get rid of the template F# code and replace it with something like this:</p>
<p>[code lang="fsharp"]<br>
namespace WatchX</p>
<p>open System<br>
open UIKit<br>
open Foundation<br>
open WatchKit</p>
<p>type InterfaceController(ip : IntPtr) =<br>
inherit WKInterfaceController(ip)</p>
<p>override this.Awake (context) =<br>
System.Console.WriteLine("Hello F#")<br>
this.myLabel.SetText("F# |> I ♡")<br>
[/code]</p>
<p>Again, this is covered in much more detail in Xamarin’s docs, but every scene in the Watch App’s storyboard is backed by a subtype of <code>WKInterfaceController</code>. Since it’s loaded from a Storyboard, it uses the constructor that takes an <code>IntPtr</code>. The <code>Awake</code> method is called when the controller is instantiated.</p>
<h2>The Hacky Part</h2>
<p>Xamarin has not yet released designer support for Watch Kit, so for now, you need to edit your Watch App’s Storyboard in XCode Interface Builder.</p>
<p>That’s not the hacky part.</p>
<p>Once you’ve designed your UI, you have to <em>hand-edit</em> the Storyboard XML, adding <code>connections</code> elements that define your outlets (properties) and actions (event-handlers). You have to set the <code>destination</code> attribute to refer to the <code>id</code> of the associated control:</p>
<p><a href="/uploads/2015/01/Screenshot-2015-01-21-15.37.52.png"><img alt="Screenshot 2015-01-21 15.37.52" class="alignnone size-large wp-image-6011" height="361" src="/uploads/2015/01/Screenshot-2015-01-21-15.37.52-1024x361.png" width="1024"></a></p>
<p>But really, that’s the only ugly part! ;-)</p>
<p>Back in your Extension app, you now have to use attributes to link up your F# code with elements within the Storyboard. The <code>RegisterAttribute</code> on your <code>WKInterfaceController</code> links to the <code>customClass</code> attribute of the <code>controller</code> element, and the name of your <code>OutletAttribute</code> properties must correspond to the <code>property</code> attribute of the <code>outlet</code> elements. Finally, the <code>selector</code> attribute of your <code>action</code> elements must have a corresponding <code>ActionAttribute</code> :</p>
<p>[code lang="fsharp"]<br>
namespace WatchX</p>
<div class="highlight"><pre><span></span><code><span class="nx">open</span><span class="w"> </span><span class="nx">System</span>
<span class="nx">open</span><span class="w"> </span><span class="nx">UIKit</span>
<span class="nx">open</span><span class="w"> </span><span class="nx">Foundation</span>
<span class="nx">open</span><span class="w"> </span><span class="nx">WatchKit</span>
<span class="p">[</span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="nx">register</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="nx">quot</span><span class="p">;</span><span class="nx">InterfaceController</span><span class="o">&</span><span class="nx">quot</span><span class="p">;)</span><span class="o">&</span><span class="nx">gt</span><span class="p">;]</span>
<span class="k">type</span><span class="w"> </span><span class="nx">InterfaceController</span><span class="p">(</span><span class="nx">ip</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="nx">IntPtr</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span>
<span class="w"> </span><span class="nx">inherit</span><span class="w"> </span><span class="nx">WKInterfaceController</span><span class="p">(</span><span class="nx">ip</span><span class="p">)</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">mutable</span><span class="w"> </span><span class="nx">label</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="nx">WKInterfaceLabel</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">null</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">mutable</span><span class="w"> </span><span class="nx">button</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="nx">WKInterfaceButton</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">null</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">mutable</span><span class="w"> </span><span class="nx">clickCount</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">0</span>
<span class="w"> </span><span class="p">[</span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="nx">outlet</span><span class="o">&</span><span class="nx">gt</span><span class="p">;]</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">myLabel</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span><span class="nx">get</span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">label</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">myLabel</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span><span class="nx">set</span><span class="p">(</span><span class="nx">v</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">label</span><span class="w"> </span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="nx">v</span>
<span class="w"> </span><span class="p">[</span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="nx">Outlet</span><span class="o">&</span><span class="nx">gt</span><span class="p">;]</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">myButton</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span><span class="nx">get</span><span class="p">()</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">button</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">myButton</span><span class="w"> </span><span class="nx">with</span><span class="w"> </span><span class="nx">set</span><span class="p">(</span><span class="nx">v</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">button</span><span class="w"> </span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="nx">v</span>
<span class="w"> </span><span class="p">[</span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="nx">Action</span><span class="p">(</span><span class="o">&</span><span class="nx">quot</span><span class="p">;</span><span class="nx">OnButtonPress</span><span class="o">&</span><span class="nx">quot</span><span class="p">;)</span><span class="o">&</span><span class="nx">gt</span><span class="p">;]</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">OnButtonPush</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=</span>
<span class="w"> </span><span class="nx">clickCount</span><span class="w"> </span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="nx">clickCount</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span>
<span class="w"> </span><span class="nx">sprintf</span><span class="w"> </span><span class="o">&</span><span class="nx">quot</span><span class="p">;</span><span class="nx">Pressed</span><span class="w"> </span><span class="o">%</span><span class="nx">d</span><span class="w"> </span><span class="nx">times</span><span class="o">&</span><span class="nx">quot</span><span class="p">;</span><span class="w"> </span><span class="nx">clickCount</span><span class="w"> </span>
<span class="w"> </span><span class="o">|&</span><span class="nx">gt</span><span class="p">;</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">myLabel</span><span class="p">.</span><span class="nx">SetText</span>
<span class="w"> </span><span class="k">override</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">Awake</span><span class="w"> </span><span class="p">(</span><span class="nx">context</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span>
<span class="w"> </span><span class="nx">System</span><span class="p">.</span><span class="nx">Console</span><span class="p">.</span><span class="nx">WriteLine</span><span class="p">(</span><span class="o">&</span><span class="nx">quot</span><span class="p">;</span><span class="nx">Hello</span><span class="w"> </span><span class="nx">F</span><span class="err">#</span><span class="o">&</span><span class="nx">quot</span><span class="p">;)</span>
<span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">myLabel</span><span class="p">.</span><span class="nx">SetText</span><span class="p">(</span><span class="o">&</span><span class="nx">quot</span><span class="p">;</span><span class="nx">F</span><span class="err">#</span><span class="w"> </span><span class="o">|&</span><span class="nx">gt</span><span class="p">;</span><span class="w"> </span><span class="nx">I</span><span class="w"> </span><span class="err">♡</span><span class="o">&</span><span class="nx">quot</span><span class="p">;)</span>
</code></pre></div>
<p>[/code]</p>
<p>And that’s really all there is to putting F# on your wrist!</p>
<p>[video width="1644" height="1172" mp4="/uploads/2015/01/WatchKitF.mp4"][/video]</p>
<p><a href="https://github.com/lobrien/WatchKitFsharp">Github project</a></p>Experiment in Auto-Generated UML as a Documentation Tool2014-12-20T08:46:00-10:002014-12-20T08:46:00-10:00larrytag:knowing.net,2014-12-20:/posts/2014/12/experiment-in-auto-generated-uml-as-a-documentation-tool/<p>I wrote a program to automatically generate class diagrams, filtered by coupling. Here is the result for CoreBluetooth in iOS:</p>
<p><a href="/uploads/2014/12/Screenshot-2014-12-20-08.33.14.png"><img alt="Screenshot 2014-12-20 08.33.14" class="alignnone wp-image-5994 size-large" height="868" src="/uploads/2014/12/Screenshot-2014-12-20-08.33.14-1024x868.png" width="1024"></a></p>
<p>You can see there are clusters around <code>CBPeer</code>, <code>CBPeripheral</code>, and <code>CBCentral</code> and that <code>CBCharacteristic</code> is another class with lots of references.</p>
<p>Obviously, huge class diagrams are more noise than signal …</p><p>I wrote a program to automatically generate class diagrams, filtered by coupling. Here is the result for CoreBluetooth in iOS:</p>
<p><a href="/uploads/2014/12/Screenshot-2014-12-20-08.33.14.png"><img alt="Screenshot 2014-12-20 08.33.14" class="alignnone wp-image-5994 size-large" height="868" src="/uploads/2014/12/Screenshot-2014-12-20-08.33.14-1024x868.png" width="1024"></a></p>
<p>You can see there are clusters around <code>CBPeer</code>, <code>CBPeripheral</code>, and <code>CBCentral</code> and that <code>CBCharacteristic</code> is another class with lots of references.</p>
<p>Obviously, huge class diagrams are more noise than signal, but if I further filtered this down to specific topics...?</p>
<p>I dunno'.</p>
<p>P.S. Yeah, yeah, they should be open diamonds, not filled diamonds.</p>Good Bye, Dr. Dobb's2014-12-16T11:21:00-10:002014-12-16T11:21:00-10:00larrytag:knowing.net,2014-12-16:/posts/2014/12/good-bye-dr-dobbs/<p>Today comes the shitty <a href="http://www.drdobbs.com/architecture-and-design/farewell-dr-dobbs/240169421?_mc=SM_DRD&wc=4">news that <em>Dr. Dobb's</em> (...<em>Journal of Computer Calisthenics and Orthodontia</em>) is shutting down</a>.</p>
<p>I would not have had the career I have had without DDJ: first as an inspiration, then as a competitor, and then as the last torch of technically rigorous, personally-voiced but professionally edited …</p><p>Today comes the shitty <a href="http://www.drdobbs.com/architecture-and-design/farewell-dr-dobbs/240169421?_mc=SM_DRD&wc=4">news that <em>Dr. Dobb's</em> (...<em>Journal of Computer Calisthenics and Orthodontia</em>) is shutting down</a>.</p>
<p>I would not have had the career I have had without DDJ: first as an inspiration, then as a competitor, and then as the last torch of technically rigorous, personally-voiced but professionally edited high-quality programming articles.</p>
<p>DDJ was the last of the great programming magazines and was, probably, the greatest. Only Byte could, perhaps, have an equal claim to the crown. All the rest of ours, an entire industry, envied their columnists, technical editors, and authors. Even the standouts (Microcornucopia, Programmer's Journal, C/C++ Programmer's Journal, Unix Review, PC Techniques, WinTech Journal, and, ... hell, it's my feed... Computer Language, Software Development, and Game Developer) could only occasionally match their quality.</p>
<p>Perhaps what I admired most about Dobb's was that it never wavered from being a <em>programming</em> magazine. In the early 90s, I decreed that Computer Language would never again refer to our profession as "programming," it would only be referred to as "software development." We published articles about management, about architecture and design, we boasted (<em>boasted</em>) of how <em>little</em> source code we published (because we talked about "the real issues"). And while I think there was a valid point to be made, the truth is that programming -- the infinitely challenging alchemy of turning sparks traveling through blocks of sand into computation and information -- is what drew me to the profession, why I will code when I retire, and why I would have a computer under the floorboards if programming were illegal. Dr. Dobb's understood, and celebrated, that mysterious joy. Perhaps that is why it out-lasted all the rest.</p>
<p>Now, it seems like, if our industry has a face, it's the face of an arrogant Silicon Valley douchebag who knows everything about monetization, socialization, and micro-localization and nothing about algorithms, memory models, and programming languages. Dr. Dobb's wasn't a magazine for venture capitalists or "Digital Prophet"s or "<a href="http://siliconvalleyjobtitlegenerator.tumblr.com/">Brand-Story Architect</a>"s. It was a magazine for hard-core coders, people who could appreciate the trade-offs in the design of a macro preprocessor, get an "ah-hah!" moment from reading an assembly language listing for a chip they didn't know, or grasp the theme of an implementation discussed over a year of columns.</p>
<p>It will be missed.</p>My talk "let awesome = App |> Seq.map F#" available...2014-10-25T10:32:00-10:002014-10-25T10:32:00-10:00larrytag:knowing.net,2014-10-25:/posts/2014/10/my-talk-let-awesome-app-seq-map-f-available/<p>[embed]https://www.youtube.com/watch?v=2-v4jdQJ5Wo&feature=youtu.be&a[/embed]</p>
<p>Video from my <a href="https://channel9.msdn.com/events/Xamarin-Evolve/2016">Xamarin Evolve</a> talk on using F# for programming mobile apps, in which I argue that functional and object-oriented programming are two great paradigms that pair great together.</p>Xamarin.Forms Programming in F#2014-08-27T16:02:00-10:002014-08-27T16:02:00-10:00larrytag:knowing.net,2014-08-27:/posts/2014/08/xamarin-forms-programming-in-f/<p>Things are kind of busy what with <a href="https://channel9.msdn.com/events/Xamarin-Evolve/2016">Evolve</a> being only 40 days away and iOS 8 coming down the pipe, but I thought I'd share the easy hack that allows you to program Xamarin.Forms with F#.</p>
<p>(Of course, Xamarin <em>loves </em>F# and official support and templates and documentation and …</p><p>Things are kind of busy what with <a href="https://channel9.msdn.com/events/Xamarin-Evolve/2016">Evolve</a> being only 40 days away and iOS 8 coming down the pipe, but I thought I'd share the easy hack that allows you to program Xamarin.Forms with F#.</p>
<p>(Of course, Xamarin <em>loves </em>F# and official support and templates and documentation and all that sort of stuff is forthcoming. This is just something you can do for the moment to begin exploring Xamarin.Forms with F#.)</p>
<p>tl;dr: Use the beta PCL 78 F# Core and link to the facade assemblies for monotouch</p>
<p>OK, so assuming that was a bit <em>too</em> brief...</p>
<p>In Xamarin.Studio create a "New solution..." of type F#/iOS/iPhone/Empty Project...</p>
<p>Open the "References" folder and <em>delete</em> the existing reference to Fsharp.core.dll.</p>
<p>Right-click the solution and select "Add Packages..."</p>
<p><a href="/uploads/2014/08/Screenshot-2014-08-27-15.42.39.png"><img alt="Screenshot 2014-08-27 15.42.39" class="alignnone wp-image-5966 size-medium" height="201" src="/uploads/2014/08/Screenshot-2014-08-27-15.42.39-300x201.png" width="300"></a></p>
<p>In the NuGet dialog, select "Show pre-release packages" and type FSharp.Core into the search box. This should allow you to add the "FSharp.Core Mono delay signed" package.</p>
<p><a href="/uploads/2014/08/Screenshot-2014-08-27-15.25.05.png"><img alt="Screenshot 2014-08-27 15.25.05" class="alignnone wp-image-5967 size-large" height="592" src="/uploads/2014/08/Screenshot-2014-08-27-15.25.05-1024x592.png" width="1024"></a>Also, add the Xamarin.Forms package:</p>
<p><a href="/uploads/2014/08/Screenshot-2014-08-27-15.46.26.png"><img alt="Screenshot 2014-08-27 15.46.26" class="alignnone wp-image-5968 size-large" height="592" src="/uploads/2014/08/Screenshot-2014-08-27-15.46.26-1024x592.png" width="1024"></a></p>
<p>And now the tricky part! You have to add references to the System.ObjectModel.dll and System.Runtime.dlls from the monotouch facade assemblies by hand.</p>
<p>Right-click on the References folder, Select "Edit...", and select ".NET Assembly". Add references to System.ObjectModel.dll and System.Runtime.dll from, in my case:</p>
<div class="highlight"><pre><span></span><code>/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/4.5/Facades/
</code></pre></div>
<p>Your path may be a little different.</p>
<p>Write a Xamarin.Forms app in 36 lines of code :</p>
<p>[code lang="csharp"]</p>
<p>namespace FSXF1</p>
<p>open System<br>
open MonoTouch.UIKit<br>
open MonoTouch.Foundation<br>
open Xamarin.Forms</p>
<p>type App = class<br>
static member GetMainPage =<br>
let lbl = new Label()<br>
lbl.Text \<- "Hello, F# Xam.Forms!"<br>
lbl.VerticalOptions \<- LayoutOptions.CenterAndExpand<br>
lbl.HorizontalOptions \<- LayoutOptions.CenterAndExpand</p>
<p>let cp = new ContentPage()<br>
cp.Content \<- lbl<br>
cp<br>
end</p>
<p>[\<Register("AppDelegate")>]<br>
type AppDelegate() =<br>
inherit UIApplicationDelegate()</p>
<p>member val Window = null with get, set</p>
<p>// This method is invoked when the application is ready to run.<br>
override this.FinishedLaunching(app, options) =<br>
this.Window \<- new UIWindow(UIScreen.MainScreen.Bounds)<br>
Forms.Init()<br>
this.Window.RootViewController \<- App.GetMainPage.CreateViewController()<br>
this.Window.MakeKeyAndVisible()<br>
true</p>
<p>module Main =<br>
[\<EntryPoint>]<br>
let main args =<br>
UIApplication.Main(args, null, "AppDelegate")<br>
0<br>
[/code]</p>
<p>And you're good to go!</p>
<p><a href="/uploads/2014/08/Screenshot-2014-08-25-10.16.14.png"><img alt="Screenshot 2014-08-25 10.16.14" class="alignnone wp-image-5972 size-large" height="615" src="/uploads/2014/08/Screenshot-2014-08-25-10.16.14-1024x615.png" width="1024"></a></p>
<p>P.S. If it helps: <a href="https://github.com/lobrien/HelloXamarinFormsFSharp">https://github.com/lobrien/HelloXamarinFormsFSharp</a></p>Exploring HealthKit With Xamarin: Provisioning and Permissions Illustrated Walkthrough2014-07-11T09:45:00-10:002014-07-11T09:45:00-10:00larrytag:knowing.net,2014-07-11:/posts/2014/07/exploring-healthkit-with-xamarin-provisioning-and-permissions-illustrated-walkthrough/<p>One of the more interesting frameworks in iOS 8 is Health Kit, system-wide persistent storage for health-related information. I'm just beginning to explore the namespace myself, but thought I'd walk through the steps you need to manipulate Health Kit with Xamarin.</p>
<p>Because health-related information is so sensitive, developing for Health …</p><p>One of the more interesting frameworks in iOS 8 is Health Kit, system-wide persistent storage for health-related information. I'm just beginning to explore the namespace myself, but thought I'd walk through the steps you need to manipulate Health Kit with Xamarin.</p>
<p>Because health-related information is so sensitive, developing for Health Kit requires:</p>
<ol>
<li>The app be developed using an "Explicit App ID" with Health Kit Services explicitly enabled (see below);</li>
<li>The <code>Entitlements.plist</code> must have a <code>com.apple.developer.healthkit</code> key set to <code>true</code>; and</li>
<li>At initial runtime, the user must grant access via a detailed permissions dialog</li>
</ol>
<p>Additionally, it's worth emphasizing the importance of checking error codes in Health Kit API function calls. If a user does not grant permission or if for any other reason the app makes a call to a non-permitted API, this does not raise an exception. Rather, a <code>null</code> or otherwise empty result will be returned and typically an <code>out NSError</code> or closure-parameter will be set.</p>
<h2>Provisioning and Permissions</h2>
<p>Xamarin has a <a href="https://docs.microsoft.com/en-us/xamarin/ios/get-started/installation/device-provisioning/">great article on device provisioning</a>, but just to hit the highlights for Health Kit:</p>
<p>You need to set an "Explicit App ID" and explicitly enable "Health Kit" as an app service. Here, I'm created an ID for an app whose ID is "{PREFIX}.com.xamarin.HKWork":</p>
<p><a href="/uploads/2014/07/Screen-Shot-2014-07-11-at-7.49.46-AM.png"><img alt="Screen-Shot-2014-07-11-at-7.49.46-AM" class="alignnone size-full wp-image-5940" height="882" src="/uploads/2014/07/Screen-Shot-2014-07-11-at-7.49.46-AM.png" width="1093"></a></p>
<p><a href="/uploads/2014/07/Screen-Shot-2014-07-11-at-7.51.14-AM.png"><img alt="Screen Shot 2014-07-11 at 7.51.14 AM" class="alignnone size-full wp-image-5941" height="909" src="/uploads/2014/07/Screen-Shot-2014-07-11-at-7.51.14-AM.png" width="739"></a></p>
<p>After you do that, you'll have to create a new provisioning profile for this App ID:</p>
<p><a href="/uploads/2014/07/Screen-Shot-2014-07-11-at-7.59.17-AM.png"><img alt="Screen Shot 2014-07-11 at 7.59.17 AM" class="alignnone size-full wp-image-5942" height="773" src="/uploads/2014/07/Screen-Shot-2014-07-11-at-7.59.17-AM.png" width="1210"></a></p>
<p>Once you've <code>await</code>ed the generation of the profile, download it and double-click to install it on your development system:</p>
<p><a href="/uploads/2014/07/Screen-Shot-2014-07-11-at-8.05.17-AM.png"><img alt="Screen Shot 2014-07-11 at 8.05.17 AM" class="alignnone size-full wp-image-5944" height="920" src="/uploads/2014/07/Screen-Shot-2014-07-11-at-8.05.17-AM.png" width="1125"></a></p>
<p>Now, in your Xamarin Studio project, open your <code>Info.plist</code> and set the Bundle Identifier to your explicit App ID (<strong>without</strong> the team prefix):</p>
<p><a href="/uploads/2014/07/Screen-Shot-2014-07-11-at-8.56.35-AM.png"><img alt="Screen Shot 2014-07-11 at 8.56.35 AM" class="alignnone size-full wp-image-5946" height="231" src="/uploads/2014/07/Screen-Shot-2014-07-11-at-8.56.35-AM.png" width="1023"></a></p>
<p>And set your project's Bundle Signing options so that you are using your new provisioning profile:</p>
<p><a href="/uploads/2014/07/Screen-Shot-2014-07-11-at-8.14.07-AM.png"><img alt="Screen Shot 2014-07-11 at 8.14.07 AM" class="alignnone size-full wp-image-5947" height="560" src="/uploads/2014/07/Screen-Shot-2014-07-11-at-8.14.07-AM.png" width="761"></a></p>
<p>(Now that I've written that, I suspect that you can probably leave it as "Automatic", since the App ID is explicitly the same as that in the custom provisioning profile: that's how the two are matched by the system. But still, I'm going to leave the step just to be clear what's happening. And I don't think there's any <strong>harm</strong> in setting the provisioning profile explicitly.)</p>
<p>You've taken care of <code>Info.plist</code>, so now open <code>Entitlements.plist</code>. (Some project templates don't automatically generate an <code>Entitlements.plist</code> file. If your project doesn't have one, use File/New File.../iOS and choose <code>Entitlements.plist</code>.) Click on "Source" and add a new key <code>com.apple.developer.HealthKit</code> of type <code>Boolean</code> with a value of <code>Yes</code> (== <code>true</code>):</p>
<p><a href="/uploads/2014/07/Screen-Shot-2014-07-11-at-9.14.53-AM.png"><img alt="Screen Shot 2014-07-11 at 9.14.53 AM" class="alignnone size-full wp-image-5951" height="208" src="/uploads/2014/07/Screen-Shot-2014-07-11-at-9.14.53-AM.png" width="387"></a></p>
<h2>Write code to request permission from the app user</h2>
<p>To use Health Kit, the user must grant your app access. This involves these API calls:</p>
<p>[code lang="csharp"]<br>
var temperatureKey = HKQuantityTypeIdentifierKey.BodyTemperature;<br>
var tempQuantityType = HKObjectType.GetQuantityType (temperatureKey);</p>
<p>var hks = new HKHealthStore ();<br>
hks.RequestAuthorizationToShare (new NSSet (new [] { tempQuantityType }), new NSSet (), (success, error) => {<br>
Console.WriteLine ("Authorized:" + success);<br>
if (error != null) {<br>
Console.WriteLine ("Authorization error: " + error);<br>
}<br>
});<br>
[/code]</p>
<p>Here, we are requesting authorization to share body temperature data (i.e., "share data generated by my app with the HealthStore database"). When this app is run, the user will be presented with the Health Kit permissions dialog, which will give the user fine-grained control over the requested types of data you'll share. In this case, for instance, the dialog inside the Health app looks like this:</p>
<p><a href="/uploads/2014/07/IMG_1314.png"><img alt="IMG_1314" class="alignnone size-full wp-image-5954" height="1136" src="/uploads/2014/07/IMG_1314.png" width="640"></a></p>
<h2>Write a brilliant app</h2>
<p>I have no insight into how to do that.</p>
<h3>... that has some health-related information</h3>
<p>Oh good, I can help with that.</p>
<p>Creating and storing data in the shared HealthKit store involves these API calls:</p>
<p>[code lang="csharp"]<br>
var temperatureKey = HKQuantityTypeIdentifierKey.BodyTemperature;<br>
var tempQuantityType = HKObjectType.GetQuantityType (temperatureKey);<br>
var myCurrentTemp = HKQuantity.FromQuantity (HKUnit.DegreeFahrenheit, 98.6);<br>
var meta = NSDictionary.FromObjectAndKey (new NSNumber (4), HKMetadataKey.BodyTemperatureSensorLocation);<br>
var tempSample = HKQuantitySample.FromType (tempQuantityType, myCurrentTemp, new NSDate (), new NSDate (), meta);</p>
<p>hks.SaveObject(tempSample, (success, error) => {<br>
Console.WriteLine("Write succeeded: " + success);<br>
if(error != null)<br>
{<br>
Console.WriteLine(error);<br>
}<br>
});<br>
[/code]</p>
<p>I trust it's obvious that the types of data you attempt to store must match those you've requested permission from the end-user and that your error-handling should be considerably more sophisticated (since it's <strong>incredibly</strong> possible that app users are going to be very cautious about allowing access to their medical data, even if it's clearly central to the app's value).</p>
<p>The resulting shared data (assuming that permissions are granted) looks like this in the Health app:</p>
<p><a href="/uploads/2014/07/image1.png"><img alt="image1" class="alignnone size-full wp-image-5956" height="1136" src="/uploads/2014/07/image1.png" width="640"></a></p>
<p>Notice that although I <strong>created</strong> the data using Fahrenheit, in this case it's being displayed as Celsius (which I imagine is the opposite of the likely use-case!). Units of measure and conversions are built in to Health Kit, which I'll cover in a later post. For now, though: Happy Healthing!</p>The Protocol Pattern2014-07-10T06:32:00-10:002014-07-10T06:32:00-10:00larrytag:knowing.net,2014-07-10:/posts/2014/07/the-protocol-pattern/<p>In C# (and F#), one can define extension methods on interfaces. These extension methods can have implementations, which can be used as default implementations for implementors of the extension. I haven't heard a name for this technique.</p>
<p>Example:</p>
<p>[code lang="csharp"]<br>
interface IFoo<br>
{</p>
<p>}</p>
<p>static class IFoo_Extensions<br>
{<br>
public static void …</p><p>In C# (and F#), one can define extension methods on interfaces. These extension methods can have implementations, which can be used as default implementations for implementors of the extension. I haven't heard a name for this technique.</p>
<p>Example:</p>
<p>[code lang="csharp"]<br>
interface IFoo<br>
{</p>
<p>}</p>
<p>static class IFoo_Extensions<br>
{<br>
public static void Foo(this IFoo self) { Console.WriteLine("Foo"); }<br>
}</p>
<p>class ImplementingClass : IFoo<br>
{</p>
<p>}</p>
<p>class MainClass<br>
{<br>
public static void Main (string[] args)<br>
{<br>
var aFoo = new ImplementingClass ();<br>
aFoo.Foo (); //Prints "Foo" from extension default implementation</p>
<p>}<br>
}<br>
[/code]</p>
<p>Xamarin uses this pattern extensively when binding Objective-C Protocols, which are essentially interfaces with optional methods. For instance, if you have an interface where some methods <strong>must</strong> be implemented by the library user but some aren't, you can do this:</p>
<p>[code lang="csharp"]<br>
interface IFoo<br>
{<br>
//Methods defined here, as always, must be implemented<br>
void Necessary ();<br>
}</p>
<p>static class IFoo_Extensions<br>
{<br>
//"Optional" methods defined here with default implementations<br>
public static void Optional (this IFoo self)<br>
{<br>
}<br>
}</p>
<p>class ImplementingClass : IFoo<br>
{<br>
public void Necessary ()<br>
{<br>
Console.WriteLine ("Necessary");<br>
}</p>
<p>// public void Optional()<br>
// {<br>
// Console.WriteLine("Overridden");<br>
// }</p>
<p>}<br>
[/code]</p>
<p>Obviously, it's not <strong>exactly</strong> the same to have a default implementation defined in an extension method as it is to have an optional method that simply does not exist. But <strong>conceptually</strong> it's close enough that I've started referring to this technique as the "Protocol Pattern."</p>
<p>Thoughts?</p>Local Notifications in iOS 8 With Xamarin2014-07-03T08:19:00-10:002014-07-03T08:19:00-10:00larrytag:knowing.net,2014-07-03:/posts/2014/07/local-notifications-in-ios-8-with-xamarin/<p>As of iOS 8, the user has to provide explicit permission for apps to respond to local notifications. This means that now, the first time the program is run, you need to run code such as:</p>
<p>[code lang="fsharp"]<br>
//F#<br>
UIUserNotificationSettings.GetSettingsForTypes(<br>
UIUserNotificationType.Alert<br>
||| UIUserNotificationType.Badge<br>
||| UIUserNotificationType.Sound,<br>
new NSSet …</p><p>As of iOS 8, the user has to provide explicit permission for apps to respond to local notifications. This means that now, the first time the program is run, you need to run code such as:</p>
<p>[code lang="fsharp"]<br>
//F#<br>
UIUserNotificationSettings.GetSettingsForTypes(<br>
UIUserNotificationType.Alert<br>
||| UIUserNotificationType.Badge<br>
||| UIUserNotificationType.Sound,<br>
new NSSet())<br>
|> UIApplication.SharedApplication.RegisterUserNotificationSettings<br>
[/code]</p>
<p>or</p>
<p>[code lang="csharp"]<br>
//C#<br>
var settings = UIUserNotificationSettings.GetSettingsForTypes(<br>
UIUserNotificationType.Alert<br>
| UIUserNotificationType.Badge<br>
| UIUserNotificationType.Sound,<br>
new NSSet());<br>
UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);<br>
[/code]</p>
<p>Which will present a user dialog. When they complete that dialog, the system will call the <code>UIAppDelegate.DidRegisterUserNotificationSettings</code> method. You can check the status using <code>UIApplication.CurrentUserNotificationSettings</code>.</p>
<p>If you try to send a notification without these settings being allowed, you will get a runtime error of the form:</p>
<div class="highlight"><pre><span></span><code>Attempting to schedule a local notification {...} with an alert but haven't received permission from the user to display alerts
Attempting to schedule a local notification {...} with a sound but haven't received permission from the user to play sounds
Attempting to schedule a local notification {...} with a badge number but haven't received permission from the user to badge the application
</code></pre></div>F# For Scripting2014-07-02T12:59:00-10:002014-07-02T12:59:00-10:00larrytag:knowing.net,2014-07-02:/posts/2014/07/f-for-scripting/<p>It's F# Week at Xamarin. Also, in the US, it's only a 4-day work-week. F# saves 20% of your time. QED.</p>
<p>Anyway, I don't have any actually interesting F# to share, but I recommend:</p>
<ul>
<li>Mike Bluestein's <a href="https://gist.github.com/mikebluestein/f6a56e758fe307c25068">Scene Kit in F# demo</a>, and</li>
<li>Frank Kreuger's awesome <a href="http://www.screencast.com/users/praeclarum/folders/Default/media/d257a92b-ec14-41e4-abb4-fb5b85ff22c4">demo of using F# interactively …</a></li></ul><p>It's F# Week at Xamarin. Also, in the US, it's only a 4-day work-week. F# saves 20% of your time. QED.</p>
<p>Anyway, I don't have any actually interesting F# to share, but I recommend:</p>
<ul>
<li>Mike Bluestein's <a href="https://gist.github.com/mikebluestein/f6a56e758fe307c25068">Scene Kit in F# demo</a>, and</li>
<li>Frank Kreuger's awesome <a href="http://www.screencast.com/users/praeclarum/folders/Default/media/d257a92b-ec14-41e4-abb4-fb5b85ff22c4">demo of using F# interactively while programming OS X</a></li>
</ul>
<p>But what I thought I could quickly contribute is that:</p>
<ul>
<li>F# is an awesome scripting language; and</li>
<li>Scripting may be the best way to learn F#</li>
</ul>
<p>Scripting tasks often involve transforming a stream of text by repeatedly Filtering, Assigning, Reducing, Transforming, and Slicing it ("<a href="http://sdt.bz/content/article.aspx?ArticleID=66385&page=1">a sequence of FARTS</a>") and this is an area where the functional approach is pretty clearly easier to work with than the OOP approach of a network of cooperating objects.</p>
<p>And since scripting tasks are often private or semi-private low-complexity chores, they're an excellent domain for regularly exercising your knowledge of a new language. It's all well and good to carve out a couple weekends and work through a book but nothing beats regular exposure.</p>
<p>(While I'm on the subject, these are currently my favorite F# books. Initial exploration:</p>
<ul>
<li>Chris Smith's <a href="https://www.amazon.com/exec/obidos/ASIN/B009O0JGMA/thinkinginnet-20">Programming F# 3.0</a>; or</li>
<li>Dave Fancher's <a href="https://www.amazon.com/exec/obidos/ASIN/B00IZNQULW/thinkinginnet-20">Book of F#</a></li>
</ul>
<p>Deeper dives:</p>
<ul>
<li>Don Syme's <a href="https://www.amazon.com/exec/obidos/ASIN/B00A6VKOK4/thinkinginnet-20">Expert F#</a></li>
<li>Petricek and Trelford's <a href="https://www.manning.com/books/f-sharp-deep-dives">F# Deep Dives</a></li>
</ul>
<p>)</p>
<p>F# scripts are F# files with the .fsx extension. On OS X with mono, they can be run with <code>fsharpi script.fsx</code> or:</p>
<p>[code lang="fsharp"]<br>
#if run_with_bin_sh<br>
exec fsharpi --exec \<span class="math">\(0 \\)</span>*<br>
#endif<br>
printfn "%A" fsi.CommandLineArgs<br>
[/code]</p>
<p>To add references, use #r:</p>
<p>[code lang="fsharp"]<br>
#if run_with_bin_sh<br>
exec fsharpi --exec \<span class="math">\(0 \\)</span>*<br>
#endif</p>
<p>#r "System.Core.dll"<br>
#r "System.Xml"</p>
<p>open System<br>
open System.Xml.Linq<br>
open System.IO</p>
<p>//...etc...<br>
[/code]</p>
<p>I've been using F# for scripting for more than a year now and I can honestly say that it's displaced Ruby as my scripting language of choice.</p>
<p>Give it a shot!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>iOS 8, Scene Kit @ 60FPS, programmed in F#, using Xamarin.iOS2014-06-20T09:33:00-10:002014-06-20T09:33:00-10:00larrytag:knowing.net,2014-06-20:/posts/2014/06/ios-8-scene-kit-60fps-programmed-in-f-using-xamarin-ios/<p>I have the best job in the world:</p>
<p>[code lang="fsharp"]<br>
namespace SceneKitFSharp</p>
<p>open System<br>
open MonoTouch.UIKit<br>
open MonoTouch.Foundation<br>
open MonoTouch.SceneKit<br>
open MonoTouch.CoreAnimation</p>
<p>type MySceneKitController () =<br>
inherit UIViewController()</p>
<p>override this.ViewDidLoad () =<br>
let scene = new SCNScene ()</p>
<p>//Positions everyone!<br>
let boxNode = new SCNNode ()<br>
boxNode.Geometry \<- new SCNBox(<br>
Width = 1 …</p><p>I have the best job in the world:</p>
<p>[code lang="fsharp"]<br>
namespace SceneKitFSharp</p>
<p>open System<br>
open MonoTouch.UIKit<br>
open MonoTouch.Foundation<br>
open MonoTouch.SceneKit<br>
open MonoTouch.CoreAnimation</p>
<p>type MySceneKitController () =<br>
inherit UIViewController()</p>
<p>override this.ViewDidLoad () =<br>
let scene = new SCNScene ()</p>
<p>//Positions everyone!<br>
let boxNode = new SCNNode ()<br>
boxNode.Geometry \<- new SCNBox(<br>
Width = 1.0F,<br>
Height = 1.0F,<br>
Length = 1.0F,<br>
ChamferRadius = 0.02f<br>
)<br>
scene.RootNode.AddChildNode (boxNode)</p>
<p>let material = new SCNMaterial ()<br>
material.Diffuse.Contents \<- UIImage.FromFile ("textureX.png")<br>
material.Specular.Contents \<- UIColor.Gray<br>
material.LocksAmbientWithDiffuse \<- true<br>
boxNode.Geometry.FirstMaterial \<- material</p>
<p>//Lights!<br>
let lightNode = new SCNNode()<br>
lightNode.Light \<- new SCNLight ()<br>
lightNode.Light.LightType \<- SCNLightType.Omni<br>
lightNode.Position \<- new SCNVector3 (0.0F, 10.0F, 10.0F)<br>
scene.RootNode.AddChildNode (lightNode)</p>
<p>let ambientLightNode = new SCNNode ()<br>
ambientLightNode.Light \<- new SCNLight ()<br>
ambientLightNode.Light.LightType \<- SCNLightType.Ambient<br>
ambientLightNode.Light.Color \<- UIColor.DarkGray<br>
scene.RootNode.AddChildNode (ambientLightNode)</p>
<p>//Camera!<br>
let cameraNode = new SCNNode ()<br>
cameraNode.Camera \<- new SCNCamera ()<br>
scene.RootNode.AddChildNode (cameraNode)<br>
cameraNode.Position \<- new SCNVector3 (0.0F, 0.0F, 3.0F)</p>
<p>// Action!<br>
let animation = new CABasicAnimation(<br>
KeyPath = "rotation"<br>
)<br>
let t = new SCNVector4 (1.0F, 1.0F, 0.0F, float32 (Math.PI * 2.0))<br>
animation.To \<- NSValue.FromVector (t)</p>
<p>animation.Duration \<- float 5.0F<br>
animation.RepeatCount \<- float32 Double.MaxValue //repeat forever<br>
boxNode.AddAnimation(animation,new NSString("rotation"))</p>
<p>let scnView = new SCNView(UIScreen.MainScreen.Bounds)<br>
scnView.Scene \<- scene<br>
scnView.AllowsCameraControl \<- true<br>
scnView.ShowsStatistics \<- true<br>
scnView.BackgroundColor \<- UIColor.Black</p>
<p>this.View \<- scnView</p>
<p>[\<Register ("AppDelegate")>]<br>
type AppDelegate () =<br>
inherit UIApplicationDelegate ()</p>
<p>// This method is invoked when the application is ready to run.<br>
override this.FinishedLaunching (app, options) =<br>
let window = new UIWindow (UIScreen.MainScreen.Bounds)<br>
window.RootViewController \<- new MySceneKitController()<br>
window.MakeKeyAndVisible ()<br>
true</p>
<p>module Main =<br>
[\<EntryPoint>]<br>
let main args =<br>
UIApplication.Main (args, null, "AppDelegate")<br>
0</p>
<p>[/code]</p>
<p><a href="/uploads/2014/06/IMG_0272.mov">IMG_0272</a></p>
<p><a href="/uploads/2014/06/photo.jpg"><img alt="photo" class="alignnone size-full wp-image-5911" height="464" src="/uploads/2014/06/photo.jpg" width="558"></a></p>Using Xamarin.Forms.Maps: You have to Init() first!2014-05-30T13:52:00-10:002014-05-30T13:52:00-10:00larrytag:knowing.net,2014-05-30:/posts/2014/05/using-xamarin-forms-maps-you-have-to-init-first/<p>The first time I wrote a Xamarin.Forms.Maps program, I couldn't figure out why my map wasn't appearing. And then I put a call to <code>Xamarin.FormsMaps.Init()</code> into the <code>AppDelegate</code> (iOS) and <code>MainActivity</code> (Android):</p>
<p>Shared:</p>
<p>[code lang="csharp"]<br>
public class App<br>
{<br>
public static Page GetMainPage ()<br>
{<br>
return new ContentPage …</p><p>The first time I wrote a Xamarin.Forms.Maps program, I couldn't figure out why my map wasn't appearing. And then I put a call to <code>Xamarin.FormsMaps.Init()</code> into the <code>AppDelegate</code> (iOS) and <code>MainActivity</code> (Android):</p>
<p>Shared:</p>
<p>[code lang="csharp"]<br>
public class App<br>
{<br>
public static Page GetMainPage ()<br>
{<br>
return new ContentPage {<br>
Content = new StackLayout {<br>
Children = {<br>
new BoxView { BackgroundColor = Color.Green },<br>
new Map(MapSpan.FromCenterAndRadius(new Position(37,-122), Distance.FromMiles(10))){<br>
VerticalOptions = LayoutOptions.FillAndExpand,<br>
HeightRequest = 100,<br>
WidthRequest = 960,<br>
BackgroundColor = Color.Blue<br>
},<br>
new BoxView { BackgroundColor = Color.Red }<br>
}<br>
}<br>
};<br>
}<br>
}<br>
[/code]</p>
<p>iOS:<br>
[code lang="csharp"]<br>
namespace HelloMap.iOS<br>
{<br>
[Register ("AppDelegate")]<br>
public partial class AppDelegate : UIApplicationDelegate<br>
{<br>
UIWindow window;</p>
<p>public override bool FinishedLaunching (UIApplication app, NSDictionary options)<br>
{<br>
Forms.Init ();<br>
FormsMaps.Init ();</p>
<p>window = new UIWindow (UIScreen.MainScreen.Bounds);</p>
<p>window.RootViewController = App.GetMainPage ().CreateViewController ();<br>
window.MakeKeyAndVisible ();</p>
<p>return true;<br>
}<br>
}<br>
}<br>
[/code]</p>
<p>Android:<br>
[code lang="csharp"]<br>
namespace HelloMap.Android<br>
{<br>
[Activity (Label = "HelloMap.Android.Android", MainLauncher = true)]<br>
public class MainActivity : AndroidActivity<br>
{<br>
protected override void OnCreate (Bundle bundle)<br>
{<br>
base.OnCreate (bundle);</p>
<p>Xamarin.Forms.Forms.Init (this, bundle);<br>
FormsMaps.Init(this, bundle);</p>
<p>SetPage (App.GetMainPage ());<br>
}<br>
}<br>
}<br>
[/code]</p>
<p>Happy Cross-Platform Coding!</p>
<p><a href="/uploads/2014/05/Screen-Shot-2014-05-30-at-1.52.09-PM.png"><img alt="Screen Shot 2014-05-30 at 1.52.09 PM" class="alignnone size-full wp-image-5902" height="1136" src="/uploads/2014/05/Screen-Shot-2014-05-30-at-1.52.09-PM.png" width="880"></a></p>50 PRINT "HAPPY BIRTHDAY"2014-05-01T12:00:00-10:002014-05-01T12:00:00-10:00larrytag:knowing.net,2014-05-01:/posts/2014/05/50-print-happy-birthday/<p>I think BASIC's greatest strength may be that it was something that many people -- not just those with a particular background -- could learn. There was no gatekeeper, either literally or figuratively: you didn't have to push punchcards under a bank-teller window nor did you have to learn recursion before learning …</p><p>I think BASIC's greatest strength may be that it was something that many people -- not just those with a particular background -- could learn. There was no gatekeeper, either literally or figuratively: you didn't have to push punchcards under a bank-teller window nor did you have to learn recursion before learning recursion. In the 80s, virtually every machine ran BASIC and learning how to login and start the interpreter was generally the hardest part of beginning to "program an <em>X</em> machine."</p>
<p>People <em>get</em> drop-through imperative programming: either the line-by-line flexibility of BASIC or the blocks of FORTRAN and Flash (I didn't understand Flash until I realized that it's just FORTRAN with worse numerics and better graphics). You don't have to be a born programmer to understand:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="mi">10</span><span class="w"> </span><span class="nv">PRINT</span><span class="w"> </span><span class="s2">"HELP! I AM CAUGHT IN A PROGRAM LOOP!"</span>
<span class="w"> </span><span class="mi">20</span><span class="w"> </span><span class="k">GOTO</span><span class="w"> </span><span class="nl">10</span>
</code></pre></div>
<p>I imagine that 95% of the people who got a passing grade in their BASIC programming class or typed in a few games from the back of COMPUTE! magazine never wrote themselves another program. But the 5% who did found that personal computers could help them in their job. And the 1-in-100 or 1-in-1000 who went beyond that found themselves in a community where only drive and talent mattered and credentials meant nothing.</p>
<p>I'm a college dropout and never took a CS course in my life. At 25 I was hired as Technical Editor for a magazine that specialized in Artificial Intelligence and for <em>Computer Language</em>, the best programming magazine of all time (as far as size or circulation goes, we were the "We Try Harder" Avis to <a href="http://www.drdobbs.com">Dr. Dobb's Journal</a>'s Hertz).</p>
<p>Today, the design of programming languages is discussed at sites like <a href="http://lambda-the-ultimate.org/">Lambda the Ultimate</a> and while I can muddle through even some of the more arcane papers, and while I understand the value of a dense, high signal-to-noise ratio on certain topics, it seems to me that there's <em>not nearly</em> enough reflection on the market triumphs of popular languages. I'm not advocating a return to the line-numbered BASIC interpreters (single-threaded, as if that had to be mentioned!) of my youth, but I <em>am</em> saying that <a href="https://www.dartmouth.edu/basicfifty/">50 years ago, Kemeny, Kurtz, and colleagues captured lightning in a bottle</a>. So did <a href="https://en.wikipedia.org/wiki/VisiCalc">Dan Bricklin, inventor of the computerized spreadsheet</a>, another tool for manipulating data and calculations that empowered an audience <em>vastly</em> larger than that emerging from the bottleneck of "Computer Science courses at good universities."</p>
<p>I'm not suggesting that marketshare is the only, or even dominant, factor in assessing a language's quality. In the case of JavaScript, for instance, I see an example of the contingent nature of history, as discussed in Steven Jay Gould's classic <a href="https://www.amazon.com/Wonderful-Life-Burgess-Nature-History/dp/039330700X"><em>Wonderful Life</em></a>. JavaScript is a market triumph, it behooves all professional programmers to master it, but I think it's fair to say that it has some flaws as a programming language.</p>
<p>Nor am I saying that there's not a <em>lot</em> of discussion of "beginner's languages." I volunteer at a local school and am tremendously impressed by <a href="https://scratch.mit.edu/">Scratch</a>, for instance. Because Scratch is accessible at such a young age, it <em>may</em> generate the same kind of nostalgia that some of us share for BASIC. But I don't suspect that it will have the truly broad, industry-expanding impact of BASIC or Flash.</p>
<p>Today, there's some talk of functional programming sweeping over the industry in the same way that object-orientation did in the early 1990s. I am not a functional programming True Believer, but I truly believe that functional programming has advantages. And it seems to me that languages such as F# on the CLR and Scala on the JVM have a "you can have it all" aspect (no-hassle availability of libraries, the ability to integrate with legacy code, object-functional hybrid type-systems) that at the very least make them appealing to <em>some</em> teams.</p>
<p>But, although perhaps not as broadly accessible as line numbers and GOTO, OOP has something of BASIC's "learnability." We can teach OOP to a lot of people, without a lot of preliminaries. And some will struggle through, and some will have a comfortable understanding, and some will have taken a step towards design and architecting large systems. With Functional Programming, it's not as clear to me that there's that same "muddle through" path. It's hard for me to imagine a better introduction to functional ideas than the early chapters of Structure and Interpretation of Computer Programs, but I think of that as a text that weeds out, not one that expands the base. If you're a natural-born programmer with a semester in front of you <em>SICP</em> is a great book. But if you "just" have potential or are a working developer with a "where does this help my day-to-day problems?" pragmatism, I don't know what you should read.</p>
<h2>Goto 10</h2>
<p>BASIC was the first programming language for most of those in my generation. We sat in front of green- and amber-texted monitors or machines that spooled seemingly infinite reams of paper. We typed on chiclet keys and teletypes, punched papertape and cards and threaded magnetic reels. Compared to today's machines we had indistinguishable-from-0 working memory or horsepower.</p>
<p>You have no idea how fun it was.</p>Reviewing Values for iOS UIViewContentMode with Xamarin and F#2014-04-22T15:27:00-10:002014-04-22T15:27:00-10:00larrytag:knowing.net,2014-04-22:/posts/2014/04/reviewing-values-for-ios-uiviewmode-with-xamarin-and-f/<p>Who can remember the scaling behavior of <code>UIView.ContentMode</code>? Not me!</p>
<p>So I wrote this quick little F# program to review them:</p>
<p>[code lang="fsharp"]<br>
namespace Simple</p>
<p>open System<br>
open MonoTouch.UIKit<br>
open MonoTouch.Foundation<br>
open System.Drawing</p>
<p>type ContentView ( color : UIColor ) as self =<br>
inherit UIView ()<br>
do<br>
self.BackgroundColor \< - color …</p><p>Who can remember the scaling behavior of <code>UIView.ContentMode</code>? Not me!</p>
<p>So I wrote this quick little F# program to review them:</p>
<p>[code lang="fsharp"]<br>
namespace Simple</p>
<p>open System<br>
open MonoTouch.UIKit<br>
open MonoTouch.Foundation<br>
open System.Drawing</p>
<p>type ContentView ( color : UIColor ) as self =<br>
inherit UIView ()<br>
do<br>
self.BackgroundColor \< - color</p>
<p>type ContentModeModel () =<br>
inherit UIPickerViewModel ()</p>
<p>let T = typedefof\<UIViewContentMode></p>
<p>let selectionChanged = Event\<_>()</p>
<p>member this.SelectionChanged = selectionChanged.Publish</p>
<p>override this.GetRowsInComponent(_, _) = Enum.GetNames(T).Length</p>
<p>override this.GetTitle(_, row : int, _) = Enum.GetName(T, row)</p>
<p>override this.GetComponentCount(_) = 1</p>
<p>override this.Selected(_, row : int, _) = selectionChanged.Trigger(enum\<UIViewContentMode>(row))</p>
<p>type SimpleController ( ) =<br>
inherit UIViewController ()</p>
<p>override this.ViewDidLoad () =<br>
this.View \< - new ContentView(UIColor.Blue)</p>
<p>let imgView = new UIImageView(new RectangleF(20.0F, 80.0F, UIScreen.MainScreen.Bounds.Width - 40.0F, 100.0F))<br>
imgView.Image \<- UIImage.FromFile("flower.png")<br>
imgView.ClipsToBounds \<- true<br>
this.View.AddSubview(imgView)</p>
<p>let picker = new UIPickerView(new RectangleF(20.0F, UIScreen.MainScreen.Bounds.Height - 180.0F, 250.0F, 140.0F))<br>
let model = new ContentModeModel()<br>
picker.Model \<- model</p>
<p>model.SelectionChanged.Add \<| fun newMode -> imgView.ContentMode \< - newMode</p>
<p>this.View.AddSubview(picker)</p>
<p>[\<Register ("AppDelegate")>]<br>
type AppDelegate () =<br>
inherit UIApplicationDelegate ()</p>
<p>let window = new UIWindow (UIScreen.MainScreen.Bounds)</p>
<p>// This method is invoked when the application is ready to run.<br>
override this.FinishedLaunching (app, options) =<br>
let viewController = new SimpleController()<br>
window.RootViewController \< - viewController<br>
window.MakeKeyAndVisible ()<br>
true</p>
<p>module Main =<br>
[\<EntryPoint>]<br>
let main args =<br>
UIApplication.Main (args, null, "AppDelegate")<br>
0<br>
[/code]</p>
<p>No real interesting techniques, but another nice quick iOS app in Xamarin using F#.</p>
<p><a href="/uploads/2014/04/contentview.gif"><img alt="contentview" class="alignnone size-full wp-image-5883" height="1208" src="/uploads/2014/04/contentview.gif" width="723"></a></p>Review of my Xamarin F# Event Code Leads To Improvements2014-02-17T08:20:00-10:002014-02-17T08:20:00-10:00larrytag:knowing.net,2014-02-17:/posts/2014/02/review-of-my-xamarin-f-event-code-leads-to-improvements/<p>Not at all surprisingly, it turns out that F# events need not be the crufty structures I showed in my <a href="http://www.knowing.net/index.php/2014/02/13/notes-on-my-first-real-f-program/">previous post</a>.</p>
<p>First, Xamarin's David Siegel suggested "Let the Event type be inferred, don't define a delegate type, and send simple typed values rather than EventArgs:"</p>
<p><code lang="fsharp">open System</code></p>
<p>type Control …</p><p>Not at all surprisingly, it turns out that F# events need not be the crufty structures I showed in my <a href="http://www.knowing.net/index.php/2014/02/13/notes-on-my-first-real-f-program/">previous post</a>.</p>
<p>First, Xamarin's David Siegel suggested "Let the Event type be inferred, don't define a delegate type, and send simple typed values rather than EventArgs:"</p>
<p><code lang="fsharp">open System</code></p>
<p>type Control() =<br>
let hello = Event\<_>()</p>
<p>member this.Hello = hello.Publish<br>
member this.Speak() = hello.Trigger "yo!"</p>
<p>let control = Control()</p>
<p>control.Hello.Add \< | fun msg -><br>
printfn "Received '%s'" msg</p>
<p>control.Speak()</p>
<p>While Ryan Riley suggested a step further down the reactive line:</p>
<blockquote>
<p>To remain consistent with your pipe forwards when using events, you can use the Observable module:<br>
<code>do myItem.FooEvent |> Observable.add (fun o args -> …)</code><br>
or even<br>
<code>let disposable = myItem.FooEvent |> Observable.subscribe (fun o args -> …)</code><br>
You can also expose an event as an IObservable rather than as an event if you like:<br>
<code>FooEvent.Publish :> IObservable</code></p>
</blockquote>
<hr>
<p>I also learned from <a href="https://twitter.com/kemnet">\@kemnet</a> that <code>List.choose id</code> is the idiomatic way to transform a <code>List<option></code> into a <code>List</code> of <code>Some</code> values.</p>Review of my first real F# program written in Xamarin2014-02-13T06:39:00-10:002014-02-13T06:39:00-10:00larrytag:knowing.net,2014-02-13:/posts/2014/02/notes-on-my-first-real-f-program/<p>tl;dr: F# has a long learning curve (it takes a long time to <em>master</em>) but productivity happens quickly.</p>
<hr>
<p>I recently wrote my first real application in F#. Although I've been using F# for many of my scripting needs for about a year and <a href="http://www.knowing.net/index.php/2013/11/13/f-ios-program-39-lines-of-code/">use F# to explore iOS APIs …</a></p><p>tl;dr: F# has a long learning curve (it takes a long time to <em>master</em>) but productivity happens quickly.</p>
<hr>
<p>I recently wrote my first real application in F#. Although I've been using F# for many of my scripting needs for about a year and <a href="http://www.knowing.net/index.php/2013/11/13/f-ios-program-39-lines-of-code/">use F# to explore iOS APIs regularly</a>, this application is the tool in which I'm going to live for the next several months. As such, I wanted to use a modicum of decent practices: separating UI from behavior and test-driven (or at least test-supported) development. On the other hand, every day I spent writing the app was a day I wasn't doing the task it was meant to aid, so I needed my programming time to be primarily about implementation, not Functional Purity or pushing the corners of the envelope of my understanding of F#.</p>
<p>The actual project is proprietary, so I can't be particularly specific nor share code, but it involves a lot of fiddly details surrounding the part that actually requires expertise. Without automation, the fiddly details end up not only taking a significant amount of time in themselves but they prevent me from achieving flow, which I think is an even greater problem for my overall productivity. (Note to self: Write blogpost titled "Work harder, not smarter," about the importance of achieving flow.)</p>
<hr>
<p>One of the major aspects of the task involves writing XML. As an example of the type of trade-off that I found easy to make, I mutate the <code>XElement</code>s rather than using a <a href="http://learnyouahaskell.com/zippers">Zipper</a> or something like that.</p>
<p>On the other hand, it's <em>amazing</em> how quickly and constantly mutability bites you in the ass. This is one aspect of functional programming that I do think is a legitimate surprise. Although I believe "prefer immutability to mutability" is just good programming and not a revelation brought down from the mountain by Haskell, when you write code in which most of your identifiers are assignment-only, it highlights how often your troubles rotate around those with a <code>mutable</code> modifier or values that depend on the order in which things are initialized.</p>
<p>On the other other hand, the stringly-typed nature of the world is not to be dismissed. My biggest bug, which lay there for 2 days being passed by my test suite, was an XPath mistake. I also have some regular expressions in the program; these happen to be pretty straightforward, but obviously regexes are another place where the advantages of strong typing are often undermined by convenience.</p>
<p>As Peter Norvig told me during a conversation about type systems and the Mars Climate Orbiter (the one lost due to using the wrong units of measure):</p>
<blockquote>
<p>I don't know of any language, no matter how type-strict, that forces you to tag the string "123.45" in a file with the units of force (newtons vs foot-pounds), nor do I know of any language, no matter how type-loose, in which you could not impose such a convention if you wanted to.</p>
</blockquote>
<hr>
<p>I very much wanted to separate the domain logic from the interface. Since I'm going to be living in this tool for months, there is a definite advantage if I can run it on my iPhone and Nexus 7 as well as my desktop Mac (did I mention that I was writing this using mono?). Since one can write an <a href="http://www.knowing.net/index.php/2013/11/13/f-ios-program-39-lines-of-code/">F# iOS app in 39 lines of code</a> and since cross-platform applications are easy to write with Xamarin, this is straightforward. On the other hand, I needed to make sure that I was correct that the, you know, <em>functionality</em> was worthwhile in the first place.</p>
<p>So I wanted my initial version to be a command-line app. It's been awhile since I've written an input loop and I don't know if I've ever done one with a Model-View-Controller architecture before!</p>
<p>Although <a href="http://sdt.bz/content/article.aspx?ArticleID=67491&page=1">I took the Coursera course on Reactive Programming</a>, staying event-driven was another example of letting pragmatics override a learning opportunity (no actors, no reactive extensions... Erik Meijer would be so ashamed of me...). This is one of the few places where F# disappointed me a little. My events look like this:</p>
<div class="highlight"><pre><span></span><code><span class="k">type</span><span class="w"> </span><span class="nx">EventType</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">Foo</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">Bar</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nx">Bat</span>
<span class="k">type</span><span class="w"> </span><span class="nx">ParamArgs</span><span class="p"><</span><span class="w"> </span><span class="err">'</span><span class="nx">T</span><span class="p">>(</span><span class="nx">value</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="err">'</span><span class="nx">T</span><span class="p">,</span><span class="w"> </span><span class="nx">change</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="nx">EventType</span><span class="p">)</span><span class="w"> </span><span class="p">=</span><span class="w"> </span>
<span class="w"> </span><span class="nx">inherit</span><span class="w"> </span><span class="nx">System</span><span class="p">.</span><span class="nx">EventArgs</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">Change</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">change</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">Value</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">value</span>
<span class="k">type</span><span class="w"> </span><span class="nx">ChangeDelegate</span><span class="p"><</span><span class="w"> </span><span class="err">'</span><span class="nx">T</span><span class="p">></span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">delegate</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">obj</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nx">ParamArgs</span><span class="p"><</span><span class="w"> </span><span class="err">'</span><span class="nx">T</span><span class="p">></span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="nx">unit</span>
<span class="k">type</span><span class="w"> </span><span class="nx">MyType</span><span class="w"> </span><span class="p">=</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">fooEvent</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">new</span><span class="w"> </span><span class="nx">Event</span><span class="p"><</span><span class="nx">changedelegate</span><span class="w"> </span><span class="p"><</span><span class="kt">string</span><span class="p">>,</span><span class="w"> </span><span class="nx">ParamArgs</span><span class="p"><</span><span class="kt">string</span><span class="o">>></span><span class="p">()</span>
<span class="w"> </span><span class="p">[<</span><span class="nx">clievent</span><span class="p">>]</span>
<span class="w"> </span><span class="nx">member</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">FooEvent</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">fooEvent</span><span class="p">.</span><span class="nx">Publish</span>
</code></pre></div>
<p>And on the receiving side:</p>
<div class="highlight"><pre><span></span><code><span class="n">do</span><span class="w"> </span><span class="n">myItem</span><span class="p">.</span><span class="n">FooEvent</span><span class="p">.</span><span class="n">AddHandler</span><span class="p">(</span>
<span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">ChangeDelegate</span><span class="o"><</span><span class="n">string</span><span class="o">></span><span class="p">(</span>
<span class="w"> </span><span class="n">fun</span><span class="w"> </span><span class="n">sender</span><span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="c1">//handle the event</span>
<span class="w"> </span><span class="p">)</span>
<span class="p">)</span>
</code></pre></div>
<p>Which, now that I type it out, doesn't look <em>all</em> that bad. But given how spoiled you get about not spending your time finger-typing in F#, it feels crufty.</p>
<p>As an example of how F# <em>generally</em> spoils you, I offer the "forward pipe operator":</p>
<div class="highlight"><pre><span></span><code><span class="k">let</span><span class="w"> </span><span class="nv">baz</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">foo</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="n">bar</span><span class="w"> </span><span class="o">|></span><span class="w"> </span><span class="n">bat</span>
</code></pre></div>
<p>Which should bring a nod from anyone familiar with the UNIX shell. It's the equivalent of, say:</p>
<div class="highlight"><pre><span></span><code>let baz = bat(bar(foo()))
//or
let fooResult = foo()
let barResult = bar(fooResult)
let baz = bat(barResult)
</code></pre></div>
<p>But it's superior to both those forms. It's just easier to read than the in-to-out, right-to-left nested function call (putting aside the parentheses, about which more later...). But it's superior to the second in a more fundamental way. Phil Karlton tells us</p>
<blockquote>
<p>There are only two hard things in Computer Science: cache invalidation and naming things. [And off-by-one errors.]</p>
</blockquote>
<p>The <em>really</em> nice thing about piping is the way it ties together the expression without intermediate names. The pipes indicate</p>
<blockquote>
<p>Here, <code>foo</code>, <code>bar</code>, and <code>bat</code> are logically connected: you can't replace <code>foo</code> and <code>bar</code> without considering the effect on <code>bat</code>, the calculation of <code>bat</code> is not only tied up with the calculation of <code>bar</code>, it's also tied up with the calculation of <code>foo</code>. <em>BUT</em> the result of <code>foo</code> and the result of <code>bar</code> aren't important outside of the calculation of <code>bat</code>! The result of <code>bat</code> is not just used immediately: it has a name and therefore has some importance.</p>
</blockquote>
<p>That's a lot of context to get from a language operator! It's not <em>just</em> a convenience or a way to avoid a keystroke or two. It's a <em>good thing</em> that you miss as soon as you work in another language.</p>
<p>Regrettably, I don't feel as positively about F#'s indentation rules. I'm not going to go into too much detail on this, because I think it's just a matter of personal preference (I take the increasing ubiquity of Python in the science community as evidence that I'm in the minority...). I can imagine that my irritation might go away with better tooling and some more-understandable compiler errors.</p>
<hr>
<p>In F#, as with several other functional languages, enclosing function arguments with parentheses is optional: one can say <code>Foo a</code> as opposed to <code>Foo(a)</code>. I'm pretty resistant to that: I don't find <code>Foo a</code> easier to read at all. But the pipe operators (there's also a backwards pipe) make the "point-free style" of programming more palatable. You don't say <code>|> fun a -> Foo (a) |> fun b -> Bar (b)</code>, you just say <code>Foo |> Bar</code> and that's that. Admittedly, this occasionally leads to code that strikes me as somewhat cryptic: <code>optionList |> List.collect Option.toList</code> converts a list of <code>Options</code> into a list of the values of the <code>Some</code>s (i.e., <code>flatMap id</code>).</p>
<hr>
<p>Another structural thing that slowed me down a bit is F#'s many kinds of types (<a href="https://www.youtube.com/watch?v=-mTUmczVdik">I would say that F# has a plethora of kinds of types</a>). I'm a believer in <a href="https://www.johndcook.com/blog/2009/03/23/functional-in-the-small-oo-in-the-large/">Functional in the Small, Object-Oriented in the Large</a>, so I like to hang both data and responsibilities on a type. But with F#, I have to decide between classes (<code>class</code>), records (<code>type</code>), and discriminated unions (<code>type |</code>) (and <a href="https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/fsharp-types#rel">14 other kinds</a>). The good news is that in my limited experience you can start with a record and then, if you need to refactor it into a class, it's trivial (I may be insanely wrong about that, having only needed a class rather than a record once).</p>
<p>This proliferation of somewhat-overlapping concepts is about ensuring compatibility the Common Language Runtime and 95% of the time, it's not something that you have to think about.</p>
<hr>
<p>With my events in place and having decided on records, programming went very well. It's trivial to use <a href="http://nunit.org/">NUnit</a> with F# and I quickly had 3 projects up and iterating: the model project, the CLI view & controller project, and my test suite.</p>
<p>I also used Xamarin Studio's F# Interactive console regularly.<br>
<img alt="screenshot" src="/uploads/2014/02/Screenshot-2014-02-11-16.34.58.png">.</p>
<p>All of which was very pleasant, but I wonder if one downside of the “small functions doing one precise thing” of the functional approach is that it becomes <em>easy</em> to just keep composing function calls on the results of previous function calls rather than trying to create a consistent and sufficient data structure / object model. The drive towards refactoring a concise, task-driven API doesn’t seem as dominant since you’re simultaneously valuing the “easy to compose” tiny functions.</p>
<p>With small, easy-to-compose functions and a lot of flexibility about scoping you immediately start circling the issues of coupling and cohesion. General-purpose functions are, by definition, not very cohesive: they <em>happen</em> to be composed together to deliver value. Hmmm....</p>
<hr>
<p>Even in a small program such as this, the lack of robust refactoring tools jumps out. When you’re learning a language, you just plough away at small programs, but as soon as you start writing even a few-module program, organizational and refactoring instantly becomes concerns.</p>
<hr>
<p>Speaking of "small programs," this program (which is focused, but not entirely trivial) is under 1KLoC including its test suite. I use craploads of higher-order functions, but with LINQ, I could structure a C# program very similarly. I also use pattern matching in several places and that would take more lines of C# code. I use the <code>Option</code> type, so that eliminates lines of C# dedicated to <code>null</code>-checking.</p>
<p>But <em>in general</em> I think I could (and would) write a very similarly-structured C# program to solve the problem. I would have written it faster, but not <em>that</em> much faster (maybe 10-15% faster). And the C# program would have, I think, about 20% or maybe even 33% more LOC; not that many more <em>expressions</em> but <em>some</em> more and then quite a few lines dedicated to closing parentheses and blocks. (Regarding my previous snarky comments about parentheses and indenting, I quote Walt Whitman:</p>
<blockquote>
<p>Do I contradict myself? Very well, then I contradict myself, I am large, I contain multitudes.</p>
</blockquote>
<p>)</p>
<hr>
<p>One thing that became clear is that I haven't come even close to mastering F#, despite having used it semi-regularly for a year. It's learning curve is longer and higher than most languages. For instance, it now seems to me that I could have used a custom computation expression (dangerously close to the M-word) in a way that would have allowed me a lot of flexibility in evolving the app. Even more, I think that type providers might be an <em>enormously</em> important facility, but it's an area where I haven't even explored.</p>
<p>But as I said, I don't think my productivity suffered all that much relative to C#, a language I've worked with since it's very first beta. In other words, while the road to F# mastery is long, productivity comes much faster. I paid some penalty relative to C# on this project, I'll pay less penalty on the next, less on the next after that... And I can see in a few smallish projects such as this, getting to the point where my productivity is in my standard range.</p>
<p>Scala was my day-to-day language for 2 years and I'd choose Scala over Java without hesitation (and no, Java 8 doesn't change my mind). Mastering Scala involves understanding a very sophisticated and complex type system and there are certainly advantages to that, but (for me) the mental effort to know that type system has limited practical benefits relative to a less-sophisticated system. <em>But</em> I see in some of these F# facilities (such as type providers) the potential for techniques that are not just O(n) relative to my C# approaches. The F# learning curve is <em>high</em>, but I think that the long road to mastery might have more of a transformative change in my approach to programming.</p>
<p>Nonetheless, programming is programming and programming is hard. As soon as I thought I was ready to go, I discovered that some important data came in a variety of shapes. So I had to spend time discovering those patterns and working with them. That type of work is much easier in a language with a good set of higher-order list processing functions and built-in pattern matching. And, I think, the smaller functions characteristic of FP made it easier to isolate the change, but nothing defeats this <em><a href="http://www.cs.nott.ac.uk/~pszcah/G51ISS/Documents/NoSilverBullet.html">essential</a></em> characteristic of programming, which is that it’s far more about exceptions and business rules and capricious “that’s just the way it is” aspects than it is about mathematical elegance.</p>
<hr>
<p>As for the application, in the first three days of this week, I averaged 5x my "doing it manually" productivity. So take that, <a href="https://xkcd.com/1319/">Randall</a>.</p>F# iOS Program: 39 lines of code2013-11-13T11:53:00-10:002013-11-13T11:53:00-10:00larrytag:knowing.net,2013-11-13:/posts/2013/11/f-ios-program-39-lines-of-code/<h1>Xamarin loves F#!</h1>
<p><a href="/uploads/2013/11/fsharp_too.png"><img alt="fsharp_too" class="alignnone size-full wp-image-5818" height="207" src="/uploads/2013/11/fsharp_too.png" width="1124"></a></p>
<p><em>Of course</em> you can use F# to program iOS and Android applications using Xamarin and Visual Studio!</p>
<p>[code lang="fsharp"]<br>
namespace Simple</p>
<p>open System<br>
open MonoTouch.UIKit<br>
open MonoTouch.Foundation<br>
open System.Drawing</p>
<p>type ContentView ( color : UIColor ) as self =<br>
inherit UIView ()<br>
do<br>
self.BackgroundColor \< - color</p>
<p>type SimpleController …</p><h1>Xamarin loves F#!</h1>
<p><a href="/uploads/2013/11/fsharp_too.png"><img alt="fsharp_too" class="alignnone size-full wp-image-5818" height="207" src="/uploads/2013/11/fsharp_too.png" width="1124"></a></p>
<p><em>Of course</em> you can use F# to program iOS and Android applications using Xamarin and Visual Studio!</p>
<p>[code lang="fsharp"]<br>
namespace Simple</p>
<p>open System<br>
open MonoTouch.UIKit<br>
open MonoTouch.Foundation<br>
open System.Drawing</p>
<p>type ContentView ( color : UIColor ) as self =<br>
inherit UIView ()<br>
do<br>
self.BackgroundColor \< - color</p>
<p>type SimpleController ( ) =<br>
inherit UIViewController ()</p>
<div class="highlight"><pre><span></span><code>override this.ViewDidLoad () =
this.View &lt;- new ContentView(UIColor.Blue)
</code></pre></div>
<p>[\<Register ("AppDelegate")>]<br>
type AppDelegate () =<br>
inherit UIApplicationDelegate ()</p>
<div class="highlight"><pre><span></span><code><span class="kd">let</span><span class="w"> </span><span class="nx">window</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">new</span><span class="w"> </span><span class="nx">UIWindow</span><span class="w"> </span><span class="p">(</span><span class="nx">UIScreen</span><span class="p">.</span><span class="nx">MainScreen</span><span class="p">.</span><span class="nx">Bounds</span><span class="p">)</span>
<span class="c1">// This method is invoked when the application is ready to run.</span>
<span class="k">override</span><span class="w"> </span><span class="nx">this</span><span class="p">.</span><span class="nx">FinishedLaunching</span><span class="w"> </span><span class="p">(</span><span class="nx">app</span><span class="p">,</span><span class="w"> </span><span class="nx">options</span><span class="p">)</span><span class="w"> </span><span class="p">=</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">viewController</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">new</span><span class="w"> </span><span class="nx">SimpleController</span><span class="p">()</span>
<span class="w"> </span><span class="nx">viewController</span><span class="p">.</span><span class="nx">Title</span><span class="w"> </span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="o">-</span><span class="w"> </span><span class="o">&</span><span class="nx">quot</span><span class="p">;</span><span class="nx">F</span><span class="err">#</span><span class="w"> </span><span class="nx">Rocks</span><span class="o">&</span><span class="nx">quot</span><span class="p">;</span>
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">navController</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">new</span><span class="w"> </span><span class="nx">UINavigationController</span><span class="p">(</span><span class="nx">viewController</span><span class="p">)</span>
<span class="w"> </span><span class="nx">window</span><span class="p">.</span><span class="nx">RootViewController</span><span class="w"> </span><span class="o">&</span><span class="nx">lt</span><span class="p">;</span><span class="o">-</span><span class="w"> </span><span class="nx">navController</span>
<span class="w"> </span><span class="nx">window</span><span class="p">.</span><span class="nx">MakeKeyAndVisible</span><span class="w"> </span><span class="p">()</span>
<span class="w"> </span><span class="kc">true</span>
</code></pre></div>
<p>module Main =<br>
[\<EntryPoint>]<br>
let main args =<br>
UIApplication.Main (args, null, "AppDelegate")<br>
0<br>
[/code]</p>
<p><a href="/uploads/2013/11/Screen-Shot-2013-11-13-at-11.46.50-AM.png"><img alt="Screen Shot 2013-11-13 at 11.46.50 AM" src="/uploads/2013/11/Screen-Shot-2013-11-13-at-11.46.50-AM-210x300.png"></a></p>Cheatsheet for iOS 7 Design Sizes2013-10-24T12:58:00-10:002013-10-24T12:58:00-10:00larrytag:knowing.net,2013-10-24:/posts/2013/10/cheatsheet-for-ios-7-design-sizes/<p>Helpful: http://ivomynttinen.com/blog/the-ios-7-design-cheat-sheet/</p>Natively Recognize Barcodes/QR Codes in iOS 7 with Xamarin.iOS2013-10-09T09:37:00-10:002013-10-09T09:37:00-10:00larrytag:knowing.net,2013-10-09:/posts/2013/10/natively-recognize-barcodesqr-codes-in-ios-7-with-xamarin-ios/<p>There have been great barcode-reading libraries available for Xamarin for some time, but iOS 7 has built-in barcode-recognition support.</p>
<p>There's only one tricky bit: you have to tell the <code>AVCaptureMetadataOutput</code> what types of barcodes you're interested in <em>after</em> you've added it to the <code>AVCaptureSession</code>. (I suppose what happens behind the …</p><p>There have been great barcode-reading libraries available for Xamarin for some time, but iOS 7 has built-in barcode-recognition support.</p>
<p>There's only one tricky bit: you have to tell the <code>AVCaptureMetadataOutput</code> what types of barcodes you're interested in <em>after</em> you've added it to the <code>AVCaptureSession</code>. (I suppose what happens behind the scene is that the <code>AVCaptureSession</code> registers with the <code>AVCaptureMetadataOutput</code> the various types of barcodes it <em>could</em> recognize.)</p>
<p>UPDATE: This also works for realtime face detection! s/<code>AVMetadataMachineReadableCodeObject</code>/<code>AVMetadataFaceObject</code>/ and set <code>AVMetadataObject.TypeFace</code>!</p>
<p>Here's a complete program in Xamarin.iOS that recognizes QR and standard Ean13 barcodes:</p>
<p>[code lang="csharp"]<br>
using System;<br>
using System.Collections.Generic;<br>
using System.Linq;<br>
using MonoTouch.Foundation;<br>
using MonoTouch.UIKit;<br>
using System.Drawing;<br>
using MonoTouch.CoreGraphics;<br>
using MonoTouch.AVFoundation;<br>
using MonoTouch.CoreFoundation;</p>
<p>namespace SingleFileSolution<br>
{<br>
public class ContentView : UIView<br>
{<br>
AVCaptureVideoPreviewLayer layer;</p>
<p>public ContentView(UIColor fillColor, AVCaptureVideoPreviewLayer layer, MyMetadataOutputDelegate metadataSource)<br>
{<br>
BackgroundColor = fillColor;</p>
<p>this.layer = layer;<br>
layer.MasksToBounds = true;<br>
layer.VideoGravity = AVCaptureVideoPreviewLayer.GravityResizeAspectFill;</p>
<p>Frame = UIScreen.MainScreen.Bounds;<br>
layer.Frame = Frame;<br>
Layer.AddSublayer(layer);</p>
<p>var label = new UILabel(new RectangleF(40, 80, UIScreen.MainScreen.Bounds.Width - 80, 80));<br>
AddSubview(label);</p>
<p>metadataSource.MetadataFound += (s, e) => label.Text = e.StringValue;</p>
<p>}</p>
<p>public override void LayoutSubviews()<br>
{<br>
base.LayoutSubviews();<br>
layer.Frame = Bounds;<br>
}<br>
}</p>
<p>public class MyMetadataOutputDelegate : AVCaptureMetadataOutputObjectsDelegate<br>
{<br>
public override void DidOutputMetadataObjects(AVCaptureMetadataOutput captureOutput, AVMetadataObject[] metadataObjects, AVCaptureConnection connection)<br>
{<br>
foreach(var m in metadataObjects)<br>
{<br>
if(m is AVMetadataMachineReadableCodeObject)<br>
{<br>
MetadataFound(this, m as AVMetadataMachineReadableCodeObject);<br>
}<br>
}<br>
}</p>
<p>public event EventHandler\<AVMetadataMachineReadableCodeObject> MetadataFound = delegate {};<br>
}</p>
<p>public class SimpleViewController : UIViewController<br>
{<br>
AVCaptureSession session;<br>
AVCaptureMetadataOutput metadataOutput;</p>
<p>public SimpleViewController() : base()<br>
{<br>
}</p>
<p>public override void DidReceiveMemoryWarning()<br>
{<br>
// Releases the view if it doesn't have a superview.<br>
base.DidReceiveMemoryWarning();<br>
}</p>
<p>public override void ViewDidLoad()<br>
{<br>
base.ViewDidLoad();</p>
<p>session = new AVCaptureSession();<br>
var camera = AVCaptureDevice.DefaultDeviceWithMediaType(AVMediaType.Video);<br>
var input = AVCaptureDeviceInput.FromDevice(camera);<br>
session.AddInput(input);</p>
<p>//Add the metadata output channel<br>
metadataOutput = new AVCaptureMetadataOutput();<br>
var metadataDelegate = new MyMetadataOutputDelegate();<br>
metadataOutput.SetDelegate(metadataDelegate, DispatchQueue.MainQueue);<br>
session.AddOutput(metadataOutput);<br>
//Confusing! *After* adding to session, tell output what to recognize...<br>
foreach(var t in metadataOutput.AvailableMetadataObjectTypes)<br>
{<br>
Console.WriteLine(t);<br>
}<br>
metadataOutput.MetadataObjectTypes = new NSString[] {<br>
AVMetadataObject.TypeQRCode,<br>
AVMetadataObject.TypeEAN13Code<br>
};</p>
<p>var previewLayer = new AVCaptureVideoPreviewLayer(session);<br>
var view = new ContentView(UIColor.Blue, previewLayer, metadataDelegate);</p>
<p>session.StartRunning();</p>
<p>this.View = view;<br>
}<br>
}</p>
<p>[Register("AppDelegate")]<br>
public class AppDelegate : UIApplicationDelegate<br>
{<br>
UIWindow window;<br>
SimpleViewController viewController;</p>
<p>public override bool FinishedLaunching(UIApplication app, NSDictionary options)<br>
{<br>
window = new UIWindow(UIScreen.MainScreen.Bounds);</p>
<p>viewController = new SimpleViewController();<br>
window.RootViewController = viewController;</p>
<p>window.MakeKeyAndVisible();</p>
<p>return true;<br>
}<br>
}</p>
<p>public class Application<br>
{<br>
static void Main(string[] args)<br>
{<br>
UIApplication.Main(args, null, "AppDelegate");<br>
}<br>
}<br>
}<br>
[/code]</p>Helpful list of Apple-supplied 3D buildings, turn-by-turn, etc.2013-10-07T16:29:00-10:002013-10-07T16:29:00-10:00larrytag:knowing.net,2013-10-07:/posts/2013/10/helpful-list-of-apple-supplied-3d-buildings-turn-by-turn-etc/<p><a href="https://www.apple.com/ios/feature-availability/#maps-3d-buildings-in-navigation" title="http://www.apple.com/ios/feature-availability/#maps-3d-buildings-in-navigation">http://www.apple.com/ios/feature-availability/#maps-3d-buildings-in-navigation</a></p>My Favorite iOS 7 APIs Part 3 : CoreMotion (iPhone 5S only)2013-10-07T11:03:00-10:002013-10-07T11:03:00-10:00larrytag:knowing.net,2013-10-07:/posts/2013/10/my-favorite-ios-7-apis-part-3-coremotion-iphone-5s-only/<p>The new M7 coprocessor in the iPhone 5S makes pedometer apps trivial:</p>
<p>[code lang="csharp"]<br>
if(CMStepCounter.IsStepCountingAvailable)<br>
{<br>
var counter = new CMStepCounter();<br>
//Last 8 hours<br>
counter.QueryStepCount(NSDate.FromTimeIntervalSinceNow(-8 * 60 * 60), NSDate.Now, NSOperationQueue.CurrentQueue, StepQueryHandler);<br>
}</p>
<p>void StepQueryHandler(int nssteps, NSError error)<br>
{<br>
Console.WriteLine(nssteps);<br>
}<br>
[/code]</p>3D Buildings Not Showing in Your iOS App?2013-10-07T08:18:00-10:002013-10-07T08:18:00-10:00larrytag:knowing.net,2013-10-07:/posts/2013/10/3d-buildings-not-showing-in-your-ios-app/<p>I <em>totally</em> forgot a frustrating detail about showing 3D buildings in iOS 7 : <em>it doesn't work in the simulator!</em> You <em>have</em> to use a hardware device!</p>My Favorite iOS 7 APIs: Multipeer Connectivity2013-09-28T09:24:00-10:002013-09-28T09:24:00-10:00larrytag:knowing.net,2013-09-28:/posts/2013/09/my-favorite-ios-7-apis-multipeer-connectivity/<p>Multipeer Connectivity allows you to discover and share data with other iOS devices within Bluetooth radio range or on the same WiFi subnet. It is much easier to use than Bonjour.</p>
<p>I wrote <a href="https://github.com/lobrien/MultipeerConnectivity/blob/master/Program.cs">a simple MPC chat program in Xamarin.iOS</a>.</p>
<p>There's necessarily a few hundred lines of code, but …</p><p>Multipeer Connectivity allows you to discover and share data with other iOS devices within Bluetooth radio range or on the same WiFi subnet. It is much easier to use than Bonjour.</p>
<p>I wrote <a href="https://github.com/lobrien/MultipeerConnectivity/blob/master/Program.cs">a simple MPC chat program in Xamarin.iOS</a>.</p>
<p>There's necessarily a few hundred lines of code, but 90% of it is just the scaffolding necessary to support a four-view application. The actual discovery and communication is done with just a handful of code.</p>
<p>There are two phases for Multipeer Connectivity: Discovery and the Session phase. During the Discovery phase, one device acts as a coordinator or browser, and many devices advertise their interest in connecting. Devices advertise their interest in sharing a protocol defined by a string.</p>
<p>I created a base class <code>DiscoveryViewController : UIViewController</code> for both the advertising and browsing:</p>
<p>[code lang="csharp"]<br>
//Base class for browser and advertiser view controllers<br>
public class DiscoveryViewController : UIViewController<br>
{<br>
public MCPeerID PeerID { get; private set; }</p>
<p>public MCSession Session { get; private set; }</p>
<p>protected const string SERVICE_STRING = "xam-chat";</p>
<p>public DiscoveryViewController(string peerID) : base()<br>
{<br>
PeerID = new MCPeerID(peerID);<br>
}</p>
<p>public override void ViewDidLoad()<br>
{<br>
base.ViewDidLoad();</p>
<p>Session = new MCSession(PeerID);<br>
Session.Delegate = new DiscoverySessionDelegate(this);<br>
}</p>
<p>public void Status(string str)<br>
{<br>
StatusChanged(this, new TArgs\<string>(str));<br>
}</p>
<p>public event EventHandler\<targs \<string>> StatusChanged;<br>
}</p>
<p>[/code]</p>
<p>This base class holds a <code>PeerID</code> (essentially, the nickname for the device in the chat), an <code>MCSession</code> (the actual connection), and a <code>SERVICE_STRING</code> that specifies what type of MPC session I support ("xam-chat"). Additionally, it exposes an event <code>StatusChanged</code> (which is subscribed to by a <code>UILabel</code> in the <code>DiscoveryView</code> class (not shown, because it's trivial).</p>
<p>Events relating to the <code>MCSession</code> are handled by <code>ChatSessionDelegate</code>, but those occur after discovery, so putting that aside for now, let's look at how simple are the <code>AdvertiserController</code> and <code>BrowserController</code> subtypes of <code>DiscoveryViewController</code>:</p>
<p>[code lang="csharp"]<br>
public class AdvertiserController : DiscoveryViewController<br>
{<br>
MCNearbyServiceAdvertiser advertiser;</p>
<p>public AdvertiserController(string peerID) : base(peerID)<br>
{<br>
}</p>
<p>public override void DidReceiveMemoryWarning()<br>
{<br>
// Releases the view if it doesn't have a superview.<br>
base.DidReceiveMemoryWarning();</p>
<p>// Release any cached data, images, etc that aren't in use.<br>
}</p>
<p>public override void ViewDidLoad()<br>
{<br>
base.ViewDidLoad();</p>
<p>View = new DiscoveryView("Advertiser", this);<br>
var emptyDict = new NSDictionary();<br>
Status("Starting advertising...");</p>
<p>advertiser = new MCNearbyServiceAdvertiser(PeerID, emptyDict, SERVICE_STRING);<br>
advertiser.Delegate = new MyNearbyAdvertiserDelegate(this);<br>
advertiser.StartAdvertisingPeer();<br>
}<br>
}</p>
<p>class MyNearbyAdvertiserDelegate : MCNearbyServiceAdvertiserDelegate<br>
{<br>
AdvertiserController parent;</p>
<p>public MyNearbyAdvertiserDelegate(AdvertiserController parent)<br>
{<br>
this.parent = parent;<br>
}</p>
<p>public override void DidReceiveInvitationFromPeer(MCNearbyServiceAdvertiser advertiser, MCPeerID peerID, NSData context, MCNearbyServiceAdvertiserInvitationHandler invitationHandler)<br>
{<br>
parent.Status("Received Invite");<br>
invitationHandler(true, parent.Session);<br>
}<br>
}</p>
<p>public class BrowserController : DiscoveryViewController<br>
{<br>
MCNearbyServiceBrowser browser;</p>
<p>public BrowserController(string peerID) : base(peerID)<br>
{<br>
}</p>
<p>public override void DidReceiveMemoryWarning()<br>
{<br>
// Releases the view if it doesn't have a superview.<br>
base.DidReceiveMemoryWarning();</p>
<p>// Release any cached data, images, etc that aren't in use.<br>
}</p>
<p>public override void ViewDidLoad()<br>
{<br>
base.ViewDidLoad();</p>
<p>View = new DiscoveryView("Browser", this);</p>
<p>browser = new MCNearbyServiceBrowser(PeerID, SERVICE_STRING);<br>
browser.Delegate = new MyBrowserDelegate(this);</p>
<p>Status("Starting browsing...");<br>
browser.StartBrowsingForPeers();<br>
}</p>
<p>class MyBrowserDelegate : MCNearbyServiceBrowserDelegate<br>
{<br>
BrowserController parent;<br>
NSData context;</p>
<p>public MyBrowserDelegate(BrowserController parent)<br>
{<br>
this.parent = parent;<br>
context = new NSData();<br>
}</p>
<p>public override void FoundPeer(MCNearbyServiceBrowser browser, MCPeerID peerID, NSDictionary info)<br>
{<br>
parent.Status("Found peer " + peerID.DisplayName);<br>
browser.InvitePeer(peerID, parent.Session, context, 60);<br>
}</p>
<p>public override void LostPeer(MCNearbyServiceBrowser browser, MCPeerID peerID)<br>
{<br>
parent.Status("Lost peer " + peerID.DisplayName);<br>
}</p>
<p>public override void DidNotStartBrowsingForPeers(MCNearbyServiceBrowser browser, NSError error)<br>
{<br>
parent.Status("DidNotStartBrowingForPeers " + error.Description);<br>
}<br>
}<br>
}</p>
<p>[/code]</p>
<p>Quite a few lines, but very straightforward: the advertiser uses the iOS class <code>MCNearbyServiceAdvertiser</code> and the browser uses the class <code>MCNearbyServiceBrowser</code>. The browser's delegate responds to discovery by calling <code>MCNearbyServiceBrowser.InvitePeer</code> and the advertiser's delegate responds to an invitation by passing <code>true</code> to the <code>invitationHandler</code>.</p>
<h3>The Chat Session</h3>
<p>When the invitation is accepted, it's time for the <code>ChatSessionDelegate</code> to take over:</p>
<p>[code lang="csharp"]<br>
public class ChatSessionDelegate : MCSessionDelegate<br>
{<br>
public DiscoveryViewController Parent{ get; protected set; }</p>
<p>public ChatViewController ChatController<br>
{<br>
get;<br>
set;<br>
}</p>
<p>public ChatSessionDelegate(DiscoveryViewController parent)<br>
{<br>
Parent = parent;<br>
}</p>
<p>public override void DidChangeState(MCSession session, MCPeerID peerID, MCSessionState state)<br>
{<br>
switch(state)<br>
{<br>
case MCSessionState.Connected:<br>
Console.WriteLine("Connected to " + peerID.DisplayName);<br>
InvokeOnMainThread(() => Parent.NavigationController.PushViewController(new ChatViewController(Parent.Session, Parent.PeerID, peerID, this), true));<br>
break;<br>
case MCSessionState.Connecting:<br>
Console.WriteLine("Connecting to " + peerID.DisplayName);<br>
break;<br>
case MCSessionState.NotConnected:<br>
Console.WriteLine("No longer connected to " + peerID.DisplayName);<br>
break;<br>
default:<br>
throw new ArgumentOutOfRangeException();<br>
}<br>
}</p>
<p>public override void DidReceiveData(MCSession session, MonoTouch.Foundation.NSData data, MCPeerID peerID)<br>
{</p>
<p>if(ChatController != null)<br>
{<br>
InvokeOnMainThread(() => ChatController.Message(String.Format("{0} : {1}", peerID.DisplayName, data.ToString())));<br>
}<br>
}</p>
<p>public override void DidStartReceivingResource(MCSession session, string resourceName, MCPeerID fromPeer, MonoTouch.Foundation.NSProgress progress)<br>
{<br>
InvokeOnMainThread(() => new UIAlertView("Msg", "DidStartReceivingResource()", null, "OK", null).Show());</p>
<p>}</p>
<p>public override void DidFinishReceivingResource(MCSession session, string resourceName, MCPeerID formPeer, MonoTouch.Foundation.NSUrl localUrl, out MonoTouch.Foundation.NSError error)<br>
{<br>
InvokeOnMainThread(() => new UIAlertView("Msg", "DidFinishReceivingResource()", null, "OK", null).Show());<br>
error = null;</p>
<p>}</p>
<p>public override void DidReceiveStream(MCSession session, MonoTouch.Foundation.NSInputStream stream, string streamName, MCPeerID peerID)<br>
{<br>
InvokeOnMainThread(() => new UIAlertView("Msg", "DidReceiveStream()", null, "OK", null).Show());</p>
<p>}<br>
}<br>
[/code]</p>
<p>Again, this is mostly scaffolding, but be sure to note that it expects to be called on a background thread and uses <code>InvokeOnMainThread</code> to manipulate the UI. It also relies on the <code>ChatViewController</code>:</p>
<p>[code lang="csharp"]<br>
public class ChatViewController : UIViewController, IMessager<br>
{<br>
protected MCSession Session { get; private set; }</p>
<p>protected MCPeerID Me { get; private set; }</p>
<p>protected MCPeerID Them { get; private set; }</p>
<p>ChatView cv;</p>
<p>public ChatViewController(MCSession session, MCPeerID me, MCPeerID them, ChatSessionDelegate delObj) : base()<br>
{<br>
this.Session = session;<br>
this.Me = me;<br>
this.Them = them;</p>
<p>delObj.ChatController = this;<br>
}</p>
<p>public override void DidReceiveMemoryWarning()<br>
{<br>
// Releases the view if it doesn't have a superview.<br>
base.DidReceiveMemoryWarning();</p>
<p>// Release any cached data, images, etc that aren't in use.<br>
}</p>
<p>public override void ViewDidLoad()<br>
{<br>
base.ViewDidLoad();</p>
<p>cv = new ChatView(this);<br>
View = cv;</p>
<p>cv.SendRequest += (s, e) => {<br>
var msg = e.Value;<br>
var peers = Session.ConnectedPeers;<br>
NSError error = null;<br>
Session.SendData(NSData.FromString(msg), peers, MCSessionSendDataMode.Reliable, out error);<br>
if(error != null)<br>
{<br>
new UIAlertView("Error", error.ToString(), null, "OK", null).Show();<br>
}<br>
};<br>
}</p>
<p>public void Message(string str)<br>
{<br>
MessageReceived(this, new TArgs\<string>(str));<br>
}</p>
<p>public event EventHandler\<targs \<string>> MessageReceived = delegate {};<br>
}<br>
[/code]</p>
<p>Again, it's the simplicity that stands out: <code>Session.SendData</code> is used to transmit a string. The <code>SendRequest</code> event is wired to a <code>UITextField</code> and the <code>MessageReceived</code> event is wired to a <code>UILabel</code>:</p>
<p>[code lang="csharp"]<br>
public class ChatView : UIView<br>
{<br>
readonly UITextField message;<br>
readonly UIButton sendButton;<br>
readonly UILabel incoming;</p>
<p>public ChatView(IMessager msgr)<br>
{<br>
BackgroundColor = UIColor.White;</p>
<p>message = new UITextField(new RectangleF(10, 54, 100, 44)) {<br>
Placeholder = "Message"<br>
};<br>
AddSubview(message);</p>
<p>sendButton = new UIButton(UIButtonType.System) {<br>
Frame = new RectangleF(220, 54, 50, 44)<br>
};<br>
sendButton.SetTitle("Send", UIControlState.Normal);<br>
AddSubview(sendButton);</p>
<p>incoming = new UILabel(new RectangleF(10, 114, 100, 44));<br>
AddSubview(incoming);</p>
<p>sendButton.TouchUpInside += (sender, e) => SendRequest(this, new TArgs\<string>(message.Text));<br>
msgr.MessageReceived += (s, e) => incoming.Text = e.Value;<br>
}</p>
<p>public event EventHandler\<targs \<string>> SendRequest = delegate {};<br>
}<br>
[/code]</p>
<p>The <code>ChatViewController.Message</code> method is called by the <code>ChatSessionDelegate.DidReceiveData</code> method.</p>
<p>And that's really all there is to it.</p>Dynamic Type in iOS 7: Not Quite as "Dynamic" as You Might Think2013-09-20T06:00:00-10:002013-09-20T06:00:00-10:00larrytag:knowing.net,2013-09-20:/posts/2013/09/dynamic-type-in-ios-7-not-quite-as-dynamic-as-you-might-think/<p>One of the nice features in iOS 7 for old fogeys such as myself is that the user can use the general Settings to increase and decrease the fonts used in apps. This is called "Dynamic Type." Judging by developer forums, I'm not the only one who thought that this …</p><p>One of the nice features in iOS 7 for old fogeys such as myself is that the user can use the general Settings to increase and decrease the fonts used in apps. This is called "Dynamic Type." Judging by developer forums, I'm not the only one who thought that this was something that was built in to the various widgets. It's not. To do this in your own app, you have to respond to the <code>ContentSizeCategoryChanged</code> notification and invalidate the layout in any widgets you want to have change size. In Xamarin.iOS, the code looks like this:</p>
<p>[code lang="csharp"]<br>
public class ContentView : UIView<br>
{<br>
public ContentView()<br>
{<br>
var txt = new UITextView(UIScreen.MainScreen.Bounds);<br>
txt.Text = "Lorem ipsum dolor ...";<br>
ResetDynamicType();<br>
//Respond to notification of change<br>
UIApplication.Notifications.ObserveContentSizeCategoryChanged((s,e) => {<br>
ResetDynamicType();<br>
});<br>
AddSubview(txt);<br>
}<br>
public void ResetDynamicType()<br>
{<br>
txt.Font = UIFont.PreferredFontForTextStyle(UIFontTextStyle.Body);<br>
}<br>
}<br>
[/code]</p>
<p>The crucial point being that you have a <code>ResetDynamicType</code> method (or whatever you want to call it) that you call both at initialization and then again every time you get notified of a request to change font size (if you want, you can read the new size from the <code>e</code> in the lambda). So "Dynamic Type" isn't really anything special in terms of display: it's still up to the application developer to have a function that's called. What <em>is</em> dynamic is the value returned by <code>UIFont.PreferredFontForTextStyle</code>, which varies based on the user's Settings.</p>
<p>[video width="362" height="522" mp4="/uploads/2013/08/screenflow_dynamic_text.mp4"][/video]</p>Xamarin Code for iBeacons2013-09-19T07:14:00-10:002013-09-19T07:14:00-10:00larrytag:knowing.net,2013-09-19:/posts/2013/09/xamarin-code-for-ibeacons/<p>Did I mention how easy it is to track an iBeacon using Xamarin?</p>
<p>[code lang="csharp"]<br>
locationManager = new CLLocationManager();<br>
var beaconId = new NSUuid("E437C1AF-36CE-4BBC-BBE2-6CE802977C46");<br>
var beaconRegion = new CLBeaconRegion(beaconId, "My Beacon");<br>
locationManager.RegionEntered += (s, e) => {<br>
if(e.Region.Identifier == "My Beacon")<br>
{<br>
Console.WriteLine("Found My Beacon");<br>
//Fire up ranging<br>
locationManager …</p><p>Did I mention how easy it is to track an iBeacon using Xamarin?</p>
<p>[code lang="csharp"]<br>
locationManager = new CLLocationManager();<br>
var beaconId = new NSUuid("E437C1AF-36CE-4BBC-BBE2-6CE802977C46");<br>
var beaconRegion = new CLBeaconRegion(beaconId, "My Beacon");<br>
locationManager.RegionEntered += (s, e) => {<br>
if(e.Region.Identifier == "My Beacon")<br>
{<br>
Console.WriteLine("Found My Beacon");<br>
//Fire up ranging<br>
locationManager.StartRangingBeacons(beaconRegion);<br>
locationManager.DidRangeBeacons += (lm, rangeEvents) => {<br>
switch(rangeEvents.Beacons[0].Proximity)<br>
{<br>
case CLProximity.Far:<br>
Console.WriteLine("You're getting colder!");<br>
break;<br>
case CLProximity.Near:<br>
Console.WriteLine("You're getting warmer!");<br>
break;<br>
case CLProximity.Immediate:<br>
Console.WriteLine("You're red hot!");<br>
break;<br>
case CLProximity.Unknown:<br>
Console.WriteLine("I can't tell");<br>
break;<br>
default:<br>
throw new ArgumentOutOfRangeException();<br>
}<br>
};<br>
}<br>
};<br>
locationManager.StartMonitoring(beaconRegion);<br>
//Create a beacon<br>
var peripheralManager = new CBPeripheralManager(new MyPeripheralDelegate(), DispatchQueue.DefaultGlobalQueue, new NSDictionary());<br>
var beaconOptions = beaconRegion.GetPeripheralData(null);<br>
peripheralManager.StartAdvertising(beaconOptions);<br>
[/code]</p>My Favorite iOS 7 APIs Part 1: iBeacons and Multipeer Connectivity2013-09-19T06:30:00-10:002013-09-19T06:30:00-10:00larrytag:knowing.net,2013-09-19:/posts/2013/09/my-favorite-ios-7-apis-part-1-ibeacons-and-multipeer-connectivity/<p>Since Xamarin provides full native capabilities, developers don't need to wait for us to exploit iOS 7's awesome new APIs, such as:</p>
<ul>
<li>
<p>iBeacon: This, to my mind, is <em>the</em> stealth API of the release. An iBeacon is a Bluetooth device (just iOS devices for now, but Apple says they'll release …</p></li></ul><p>Since Xamarin provides full native capabilities, developers don't need to wait for us to exploit iOS 7's awesome new APIs, such as:</p>
<ul>
<li>
<p>iBeacon: This, to my mind, is <em>the</em> stealth API of the release. An iBeacon is a Bluetooth device (just iOS devices for now, but Apple says they'll release a Bluetooth profile for h/w manufacturers) that broadcasts a UUID (the UUID is intended to be shared between many devices, e.g., a store-chain will have a UUID and all their stores will broadcast it: new store's geofence works instantly). The UUID travels up to Apple and apps that monitor for that UUID get alerted when they enter a geofence around the beacon. Within the beacon's region, BT, not GPS, is used to indicate proximity. Pair that with…</p>
</li>
<li>
<p>Multipeer Connectivity: Ad Hoc messaging and data with none of the hassle. Broadcast a protocol string ("com.MyCompany.MyApp") and everyone in BT range or on the same WiFi network advertising their interest in that protocol string gets an alert and, boom!, you've got Birds of a Feather. (Whoever writes the "Fetish Friend Finder" app using iBeacon and MPC is going to retire early. Of course, there are only 2\^122 GUIDs, so you couldn't track <em>every</em> kink.) (UPDATE: <a href="http://www.knowing.net/index.php/2013/09/28/my-favorite-ios-7-apis-multipeer-connectivity/">A sample chat app I wrote</a> )</p>
</li>
</ul>
<p>iBeacons can be combined to create many actionable zones within a physical location:</p>
<p><img alt="" src="/uploads/2013/09/iBeaconZones.png"></p>
<p><a href="http://www.knowing.net/index.php/2013/09/19/xamarin-code-for-ibeacons/">Here's some Xamarin code</a></p>3D Maps in iOS 7 with Xamarin2013-09-18T08:47:00-10:002013-09-18T08:47:00-10:00larrytag:knowing.net,2013-09-18:/posts/2013/09/3d-maps-in-ios-7-with-xamarin/<p>It's trivially simple to show 3D maps in iOS 7:</p>
<p>[code lang="csharp"]<br>
var target = new CLLocationCoordinate2D(37.7952, -122.4028);<br>
var viewPoint = new CLLocationCoordinate2D(37.8009, -122.4100);<br>
//Enable 3D buildings<br>
mapView.ShowsBuildings = true;<br>
mapView.PitchEnabled = true;</p>
<p>var camera = MKMapCamera.CameraLookingAtCenterCoordinate(target, viewPoint, 500);<br>
mapView.Camera = camera;<br>
[/code]</p>
<p><a href="/uploads/2013/09/MKMapCamera.png"><img alt="MKMapCamera" class="alignleft width" src="/uploads/2013/09/MKMapCamera-200x300.png"></a></p>Full Screen Content and EdgesForExtendedLayout in iOS 72013-09-18T08:34:00-10:002013-09-18T08:34:00-10:00larrytag:knowing.net,2013-09-18:/posts/2013/09/full-screen-content-and-extendededgesforlayout-in-ios-7/<p>One of the difference that jumps out dramatically to a programmer -- especially those of us who typically build our UIs in code rather than using a visual design surface -- is the new "full-screen content" concept.</p>
<p>This is particularly evident with <code>UINavigationController</code>s. This picture shows the difference between the default …</p><p>One of the difference that jumps out dramatically to a programmer -- especially those of us who typically build our UIs in code rather than using a visual design surface -- is the new "full-screen content" concept.</p>
<p>This is particularly evident with <code>UINavigationController</code>s. This picture shows the difference between the default mode (<code>UIViewController.EdgesForExtendedLayout = UIRectEdge.All</code>) and the "iOS 6"-style (<code>UIViewController.EdgesForExtendedLayout = UIRectEdge.None</code>).</p>
<p><img alt="img" src="/uploads/2013/08/EdgesForExtendLayout.png"></p>
<p>You can see that in <code>UIRectEdge.All</code> mode, the current <code>UIView</code>'s drawing rectangle covers the whole screen -- you can see the diagonals extend under the navigation bar, toolbar, and even the status bar, and you can see the blue tint coming up through those elements (they are also blurred, which you cannot see in the image).</p>Breaking Bad Ending Prediction2013-08-29T07:03:00-10:002013-08-29T07:03:00-10:00larrytag:knowing.net,2013-08-29:/posts/2013/08/breaking-bad-ending-prediction/<p>Going on record with my Breaking Bad prediction:</p>
<p>EAAAAEqhoq0ty5977EFCIguikrRVYzZsL4CiNXNK7VKcLs8Ik5lmrtsI3cJPo19bq2HBZavatk0EalFyeqQx6w2K6RxIuLoRbuddMJ4qSiZgQ8l3VjB1JGUw1ucskXUxL/ZL7HFRGY0424JY/MH4pirH4yCJ/ORGW7fSyiPQNtEDkh2s5Qs8QivN0ueJi1p/v2c4AV7vHYpSqfBf7e6AFQ1DPsMsHOJf05kIvh7BUp/LKssRFoL9jGQ2uqT1R7FnAv9icRbpUOVIDZ74N63JAhGOuye9uNv2dYAb53H53RxWN9b2Em1kXlnKoflf2rEqa6UCNvVvPy+kgMuKQuAEy+/ut70=</p>
<p>Decrypt with:</p>
<div class="highlight"><pre><span></span><code><span class="k">var</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">Rfc2898DeriveBytes</span><span class="p">(</span><span class="s2">"BreakingBadEndingPrediction"</span><span class="p">,</span><span class="w"> </span><span class="s2">"o6806642kbM7c5"</span><span class="p">);</span>
<span class="k">var</span><span class="w"> </span><span class="n">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Convert</span><span class="o">.</span><span class="n">FromBase64String</span><span class="p">(</span><span class="n">cipherText</span><span class="p">);</span>
<span class="n">using</span><span class="w"> </span><span class="p">(</span><span class="k">var</span><span class="w"> </span><span class="n">msDecrypt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">MemoryStream</span><span class="p">(</span><span class="n">bytes</span><span class="p">))</span>
<span class="p">{</span>
<span class="n">aesAlg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">RijndaelManaged</span><span class="p">();</span>
<span class="n">aesAlg</span><span class="o">.</span><span class="n">Key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">key</span><span class="o">.</span><span class="n">GetBytes</span><span class="p">(</span><span class="n">aesAlg</span><span class="o">.</span><span class="n">KeySize</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">8</span><span class="p">);</span>
<span class="n">aesAlg</span><span class="o">.</span><span class="n">IV</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ReadByteArray</span><span class="p">(</span><span class="n">msDecrypt</span><span class="p">);</span>
<span class="k">var …</span></code></pre></div><p>Going on record with my Breaking Bad prediction:</p>
<p>EAAAAEqhoq0ty5977EFCIguikrRVYzZsL4CiNXNK7VKcLs8Ik5lmrtsI3cJPo19bq2HBZavatk0EalFyeqQx6w2K6RxIuLoRbuddMJ4qSiZgQ8l3VjB1JGUw1ucskXUxL/ZL7HFRGY0424JY/MH4pirH4yCJ/ORGW7fSyiPQNtEDkh2s5Qs8QivN0ueJi1p/v2c4AV7vHYpSqfBf7e6AFQ1DPsMsHOJf05kIvh7BUp/LKssRFoL9jGQ2uqT1R7FnAv9icRbpUOVIDZ74N63JAhGOuye9uNv2dYAb53H53RxWN9b2Em1kXlnKoflf2rEqa6UCNvVvPy+kgMuKQuAEy+/ut70=</p>
<p>Decrypt with:</p>
<div class="highlight"><pre><span></span><code><span class="k">var</span><span class="w"> </span><span class="n">key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">Rfc2898DeriveBytes</span><span class="p">(</span><span class="s2">"BreakingBadEndingPrediction"</span><span class="p">,</span><span class="w"> </span><span class="s2">"o6806642kbM7c5"</span><span class="p">);</span>
<span class="k">var</span><span class="w"> </span><span class="n">bytes</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Convert</span><span class="o">.</span><span class="n">FromBase64String</span><span class="p">(</span><span class="n">cipherText</span><span class="p">);</span>
<span class="n">using</span><span class="w"> </span><span class="p">(</span><span class="k">var</span><span class="w"> </span><span class="n">msDecrypt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">MemoryStream</span><span class="p">(</span><span class="n">bytes</span><span class="p">))</span>
<span class="p">{</span>
<span class="n">aesAlg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">RijndaelManaged</span><span class="p">();</span>
<span class="n">aesAlg</span><span class="o">.</span><span class="n">Key</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">key</span><span class="o">.</span><span class="n">GetBytes</span><span class="p">(</span><span class="n">aesAlg</span><span class="o">.</span><span class="n">KeySize</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="mi">8</span><span class="p">);</span>
<span class="n">aesAlg</span><span class="o">.</span><span class="n">IV</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ReadByteArray</span><span class="p">(</span><span class="n">msDecrypt</span><span class="p">);</span>
<span class="k">var</span><span class="w"> </span><span class="n">decryptor</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">aesAlg</span><span class="o">.</span><span class="n">CreateDecryptor</span><span class="p">(</span><span class="n">aesAlg</span><span class="o">.</span><span class="n">Key</span><span class="p">,</span><span class="w"> </span><span class="n">aesAlg</span><span class="o">.</span><span class="n">IV</span><span class="p">);</span>
<span class="w"> </span><span class="n">using</span><span class="w"> </span><span class="p">(</span><span class="n">CryptoStream</span><span class="w"> </span><span class="n">csDecrypt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">CryptoStream</span><span class="p">(</span><span class="n">msDecrypt</span><span class="p">,</span><span class="w"> </span><span class="n">decryptor</span><span class="p">,</span><span class="w"> </span><span class="n">CryptoStreamMode</span><span class="o">.</span><span class="n">Read</span><span class="p">))</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">using</span><span class="w"> </span><span class="p">(</span><span class="n">StreamReader</span><span class="w"> </span><span class="n">srDecrypt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">StreamReader</span><span class="p">(</span><span class="n">csDecrypt</span><span class="p">))</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">srDecrypt</span><span class="o">.</span><span class="n">ReadToEnd</span><span class="p">();</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre></div>Kiteboarding: Four Days Since Our Last Tiger Shark Attack2013-08-20T16:02:00-10:002013-08-20T16:02:00-10:00larrytag:knowing.net,2013-08-20:/posts/2013/08/kiteboarding-four-days-since-our-last-tiger-shark-attack/<p>I am holding a bar while floating in a murky bay, slowly drifting towards a shipping channel. If I pull on the bar, 6 things can happen, only 1 of which is good. Not to mention the tiger shark. The tiger shark doesn't care whether I pull the bar or …</p><p>I am holding a bar while floating in a murky bay, slowly drifting towards a shipping channel. If I pull on the bar, 6 things can happen, only 1 of which is good. Not to mention the tiger shark. The tiger shark doesn't care whether I pull the bar or not, but still. So 7 things. I pull the bar.</p>
<p>For the past decade, I've had a cocktail-party story about learning to kiteboard -- or rather, not learning to kiteboard -- with an obscenely overpowered two-line kite and a guy behind me on a JetSki shouting encouragement as I get pulled downwind, in 20-yard increments, across a mile of San Francisco Bay. "Kiteboarding -- it's like bull-riding, but with more drowning." Subsequent to that lesson (in which I was literally pulled out of one of my wetsuit booties) I thought "Well, I guess I'm too old for it." Too out-of-shape and too brittle.</p>
<p>But dammit, they make it look so easy.</p>
<p>My friend Florian, who is an expert in getting off his ass, finally convinced me that what we needed to do was take a long weekend, fly to Maui, and take 3 days of lessons. So, here I was, floating like a nerdy dumpling off the beach in Maui, staring up at 86 square feet (8M\^2) of kite bucking in the Force 5 winds, a few degrees from the brilliant tropical sun. At the moment, the kite was flying in its most unpowered state, presenting only its thin, inflated lip to the wind. When I pulled the bar, the kite would turn, catch more wind, and accelerate, exponentially increasing in power, which would be transferred down 20M of finger-slicing line to the harness fastened around my waist. And then:</p>
<ul>
<li>The force would pull me out of line and past the board, which would act like a sea anchor and torque my knees perilously before popping off; or</li>
<li>My tentativeness would generate so little force that the kite only moved me another 40 or 50 yards closer to the shipping channel; or</li>
<li>The kite would turn too sharply and fly directly downwind, launching me into the air before crashing (this was mostly what happened to me in San Francisco); or</li>
<li>The kite would lift my butt out of the water, which would be so astonishing that I'd promptly crash; or</li>
<li>The kite would lift my butt out of the water, and then launch me into the air; or</li>
<li>The kite would lift my butt out of the water, by which time I would have re-turned the kite not-quite towards the vertical, achieving the proper balance between "launch me into the air" power and "sink back on your butt" stalling.</li>
</ul>
<p>And then there was the tiger shark. Which isn't a metaphor or one of those "You swim with sharks every time you get in the water" bravados. Florian's rental board was bitten by a tiger shark, at that very beach, earlier in the week. Marine Biologists measured the bite radius and say it was about 12'. ("Measured the bite radius": You know, just like <a href="https://www.youtube.com/watch?v=5ZJ83cPTzWs">Jaws</a> ).</p>
<p><img alt="this was no boating accident" src="/uploads/2013/08/WP_20130816_11_21_19_Pro.jpg"></p>
<p>I tried not to think about the shark too much.</p>
<p>So the only bad thing I have to say about the experience is that it's ruined my story. The 4-line kites they have today are literally 180 degrees from what I experienced in San Francisco: my disastrous time in the early 2000s was with kites that, when they crashed, automatically relaunched and tried to fly downwind. So after you crashed you had 5 or 10 seconds to get things under control and if you didn't, the kite would relaunch, jerk you another 20 yards, crash, and give you another window in which to recover. The modern kites I learned on in Maui were the opposite: they are engineered to skid upwind until they stall, still in the water, and give you all the time in the world to get your bearings.</p>
<p>Ultimately, the hardest thing about kiteboarding for me was that I wasn't aggressive enough with the kites! They were easy to fly and forgiving, but I had such bad memories about what could go wrong that I was too tentative with the power. Only once did I fly so aggressively that I fell forward rather than backward.</p>
<p>Another hard thing is that when you're learning, you spend a lot of time using the kite to drag you into position, which involves being pulled through the water by your harness. The force of the water on your chest and all your gear is exhausting and frustrating, because you're thinking "Why am I panting for breath? I haven't done anything!"</p>
<p>By the end of my second day, I was getting up and riding for a few seconds. The third day I took a step back because of equipment trouble, and frankly, I was a little worn down from the weekend's other activities, which included crossing the channel to Molokai to dive with hammerheads (I like sharks just fine when I have a mask on) and shutting down a bar in Ma'alea.</p>
<p>I don't really know what comes next. I think I have 20 more hours of instruction left before it's likely I could start doing it myself: 3 more days just getting up and riding consistently and then some time learning beach launches and landings, which are the most dangerous moments in the sport. The Big Island is a poor place to learn to kiteboard -- there are no instructors and the only reliable place to kiteboard has a beginner-hostile offshore wind. Flying to Maui for another long weekend of instruction is a possible, but expensive option, but probably not for a few more months, at least.</p>
<p>But on my longest ride, which probably lasted about 20 seconds, I felt like I was looking at an open window. With these kites, physically the sport is open to even old brittle guys like me, and it's clearly a sport where, once you know what you're doing you can keep things in balance and not expend a lot of energy. So if I could learn it, I could have a decade or more of a sport that is just perfectly tuned to my sensibilities. So, yeah, I guess I'll try again.</p>ChromeCast Xamarin Binding and Sample Source Code on GitHub2013-08-11T13:39:00-10:002013-08-11T13:39:00-10:00larrytag:knowing.net,2013-08-11:/posts/2013/08/chromecast-xamarin-binding-and-sample-source-code-on-github/<p>Due to popular demand...</p>
<p><a href="https://github.com/lobrien/ChromeCast-Xam-iOS-Binding">Here is source code for a preliminary Xamarin.iOS binding for Google's ChromeCast</a></p>
<p>and</p>
<p><a href="https://github.com/lobrien/ChromeCast-Video-URL">Here is C# source code for a simple iOS app that casts a video URL</a></p>
<p>In order for this to work, you'll need:</p>
<ul>
<li>Xamarin.iOS</li>
<li><a href="https://developers.google.com/cast/">Google ChromeCast SDK</a></li>
<li><a href="https://docs.google.com/forms/d/1E-vka5QP8LkF0nbfz-omN1DjNSX1uLGyqHdbpEFh6zg/closedform">A whitelisted ChromeCast</a></li>
</ul>
<p>This …</p><p>Due to popular demand...</p>
<p><a href="https://github.com/lobrien/ChromeCast-Xam-iOS-Binding">Here is source code for a preliminary Xamarin.iOS binding for Google's ChromeCast</a></p>
<p>and</p>
<p><a href="https://github.com/lobrien/ChromeCast-Video-URL">Here is C# source code for a simple iOS app that casts a video URL</a></p>
<p>In order for this to work, you'll need:</p>
<ul>
<li>Xamarin.iOS</li>
<li><a href="https://developers.google.com/cast/">Google ChromeCast SDK</a></li>
<li><a href="https://docs.google.com/forms/d/1E-vka5QP8LkF0nbfz-omN1DjNSX1uLGyqHdbpEFh6zg/closedform">A whitelisted ChromeCast</a></li>
</ul>
<p>This is just source code, not a step-by-step walkthrough. Everything associated with this is in beta and I don't want to invest a lot of time making things just so at this point.</p>
<p>You can read <a href="http://www.knowing.net/index.php/2013/08/10/chromecast-home-media-server-xamarin-ios-ftw/">an overview of the programming model here</a>.</p># ChromeCast Home Media Server: Xamarin.iOS FTW!2013-08-10T15:04:00-10:002013-08-10T15:04:00-10:00larrytag:knowing.net,2013-08-10:/posts/2013/08/chromecast-home-media-server-xamarin-ios-ftw/<p>As I <a href="http://www.knowing.net/index.php/2013/08/03/programming-the-chromecast-with-xamarin/">blogged about</a> last weekend, I got a ChromeCast and had a simple-enough time creating an iOS-binding library for Xamarin.iOS, allowing me to program the ChromeCast in C# (or F#, maybe next weekend…).</p>
<p>This weekend, I wrote a simple Home Media Server that allows me to stream… well …</p><p>As I <a href="http://www.knowing.net/index.php/2013/08/03/programming-the-chromecast-with-xamarin/">blogged about</a> last weekend, I got a ChromeCast and had a simple-enough time creating an iOS-binding library for Xamarin.iOS, allowing me to program the ChromeCast in C# (or F#, maybe next weekend…).</p>
<p>This weekend, I wrote a simple Home Media Server that allows me to stream… well, all my ChromeCast-compatible media, primarily mp4s. Here's how I did it…</p>
<h2>ChromeCast Programming: Intro</h2>
<p>Essentially the ChromeCast is nothing but a Chrome browser on your TV. If you want to display HTML, no problem, but what you <em>probably</em> want to display is a great big <code>video</code> div:</p>
<p><code><video id="vid" style="position:absolute;top:100;left:0;height:80%;width:100%"></code></p>
<p>But where does this HTML come from? Here's the first kind-of-bummer about ChromeCast: Every ChromeCast application is associated with a GUID that Google provides you. Google maintains a map of GUID->URLs. And, since you have to send them your ChromeCast serial to get a GUID, it's a safe bet they check the hardware, too. When you start an application with: <code>session.StartSessionWithApplication("93d43262-ffff-ffff-ffff-fff9f0766cc1")</code>, the ChromeCast <em>always</em> loads the associated URL (in my case, "http://10.0.1.35/XamCast"):</p>
<p><img alt="" src="/uploads/2013/08/cast-server-device.png"></p>
<p>So, as a prerequisite, you need:</p>
<ul>
<li>A ChromeCast that's been "whitelisted" for development by Google;</li>
<li>A Google-supplied GUID that maps to a URL on your home network (a URL you decided during the "whitelist" application to Google)</li>
<li>A WebServer at that URL</li>
</ul>
<p>It's important to realize that what's at that URL is not your <em>media</em>, but your "receiver app": which might be plain HTML but which is likely to be HTML with some JavaScript using the ChromeCast Receiver API that allows you to manipulate things like volume and playback position, etc. I basically just use this file from Google's demo, with minor tweaks.</p>
<h2>Home Media Server : Intro</h2>
<p>So if you want to stream your home media, you need a WebServer configured to serve your media. This doesn't have to be the same as your App Server (it probably will be, but <em>conceptually</em> it doesn't have to be):</p>
<p><img alt="" src="/uploads/2013/08/media-sequence.png"></p>
<p>The structure is straightforward:</p>
<ol>
<li>The mobile controller gets a list of media from the Media Server</li>
<li>The application user selects a piece of media</li>
<li>The controller sends the selected URL (and other data) to the ChromeCast</li>
<li>The ChromeCast loads the media-URL from the Media Server</li>
</ol>
<p>For me, the "App Server" and "Media Server" are the same thing: an Apache instance running on my desktop Mac.</p>
<h2>ChromeCast Media-Serving : Components and Life-Cycle</h2>
<p>This is a rough sequence diagram showing the steps in getting a piece of media playing on the ChromeCast using the Xamarin.iOS binding:</p>
<p><img alt="" src="/uploads/2013/08/total-sequence.png"></p>
<ol>
<li>Initialization<ol>
<li>Create a <code>GCKContext</code>;</li>
<li>Create a <code>GCKDeviceManager</code>, passing the <code>GCKContext</code>;</li>
<li>Create a <code>GCKDeviceManagerListener</code>; hand it to the <code>GCKDeviceManager</code>;</li>
<li>Call <code>GCKDeviceManager.StartScan</code></li>
</ol>
</li>
<li>Configuring a session<ol>
<li>When <code>GCKDeviceManagerListener.CameOnline</code> is called…</li>
<li>Create a <code>GCKApplicationSession</code>;</li>
<li>Create a <code>GCKSessionDelegate</code>, passing the <code>GCKApplicationSession</code></li>
</ol>
</li>
<li>Playing media<ol>
<li>After <code>GCKSessionDelegate.ApplicationSessionDidStart</code> is called…</li>
<li>Create a <code>GCKMediaProtocolMessageStream</code>;</li>
<li>Get the <code>Channel</code> property of the <code>GCKApplicationSession</code> (type <code>GCKApplicationChannel</code>);</li>
<li>Attach the <code>GCKMediaProtocolMessageStream</code> to the <code>GCKApplicationChannel</code></li>
<li>Create a <code>GCKContentMetadata</code> with the selected media's URL</li>
<li>Call <code>GCKMediaProtocolMessageStream.LoadMediaWithContentId</code>, passing in the <code>GCKContentMetadata</code></li>
</ol>
</li>
</ol>
<p>Here's the core code:</p>
<div class="highlight"><pre><span></span><code><span class="n">public</span><span class="w"> </span><span class="n">override</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">ApplicationSessionDidStart</span><span class="p">()</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">channel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">session</span><span class="o">.</span><span class="n">Channel</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="n">channel</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb nb-Type">null</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s2">"Channel is null"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s2">"We have a channel"</span><span class="p">);</span>
<span class="w"> </span><span class="n">mpms</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">GCKMediaProtocolMessageStream</span><span class="p">();</span>
<span class="w"> </span><span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s2">"Initiated ramp"</span><span class="p">);</span>
<span class="w"> </span><span class="n">channel</span><span class="o">.</span><span class="n">AttachMessageStream</span><span class="p">(</span><span class="n">mpms</span><span class="p">);</span>
<span class="w"> </span><span class="n">LoadMedia</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
<span class="n">private</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">LoadMedia</span><span class="p">()</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s2">"Loading media..."</span><span class="p">);</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">mediaUrl</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Media</span><span class="o">.</span><span class="n">Url</span><span class="p">;</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">mediaContentId</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mediaUrl</span><span class="o">.</span><span class="n">ToString</span><span class="p">();</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">dict</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">NSDictionary</span><span class="p">();</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">mData</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">GCKContentMetadata</span><span class="p">(</span><span class="n">Media</span><span class="o">.</span><span class="n">Title</span><span class="p">,</span><span class="w"> </span><span class="n">Media</span><span class="o">.</span><span class="n">ThumbnailUrl</span><span class="p">,</span><span class="w"> </span><span class="n">dict</span><span class="p">);</span>
<span class="w"> </span><span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="n">mData</span><span class="p">);</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">cmd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mpms</span><span class="o">.</span><span class="n">LoadMediaWithContentID</span><span class="p">(</span><span class="n">mediaContentId</span><span class="p">,</span><span class="w"> </span><span class="n">mData</span><span class="p">,</span><span class="w"> </span><span class="bp">true</span><span class="p">);</span>
<span class="w"> </span><span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s2">"Command executed? "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">cmd</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
<h2>Plans</h2>
<p>The core of a real home media server for the ChromeCast is the Web Server and the UI of the mobile application that browses it and chooses media. To turn this hack into a turnkey solution, you'd need to:</p>
<ul>
<li>Run a public Chromecast application server that<ul>
<li>Deferred the URL of the media server to the client</li>
</ul>
</li>
<li>Write the media server, with all the necessary admin</li>
<li>Write a nice client app, that stored the mapping between the public ChromeCast app server and the (strictly-local) media server</li>
<li>Make a great user interface for selecting media</li>
<li>Make a great user interface for controlling the media</li>
</ul>
<p>I have no plans on doing any of that stuff. What I plan on doing <em>once ChromeCast and iOS 7 are out of beta</em> is:</p>
<ul>
<li>Make a nicer binding of the ChromeCast API and put it up for free on the Xamarin Component Store; and</li>
<li>Play around with serving media and blogging about anything interesting that comes up</li>
</ul>
<h2>Conclusion</h2>
<p>The real thing that I wanted to do was see if Xamarin.iOS worked well with ChromeCast (resounding "Yes!") and come up with a hack for my own use.</p>
<p>Achievement Unlocked.</p>
<p><img alt="" src="/uploads/2013/08/whale_on_tv.jpg"></p>ChromeCast Home Media Server with Xamarin2013-08-10T14:31:00-10:002013-08-10T14:31:00-10:00larrytag:knowing.net,2013-08-10:/posts/2013/08/chromecast-home-media-server-with-xamarin/<p>Code to follow...</p>
<p><a href="/uploads/2013/08/whale_on_tv.jpg"><img alt="whale_on_tv" class="alignright size-full wp-image-5660" height="776" src="/uploads/2013/08/whale_on_tv.jpg" width="1024"></a></p>For Immediate Release...2013-08-09T14:47:00-10:002013-08-09T14:47:00-10:00larrytag:knowing.net,2013-08-09:/posts/2013/08/for-immediate-release/<p>FOR IMMEDIATE RELEASE:</p>
<p>NEANY Inc. to Exhibit Unmanned Solutions at AUVSI’s Unmanned Systems North America 2013</p>
<p>\~ Arrow UAV, Ground Control Station, and Unmanned Surface Vehicle will be on display\~</p>
<p>Hollywood, MD - August 07, 2013 (myPressManager.com) --</p>
<p>NEANY Inc., an industry leader in providing time-sensitive tactical solutions for a variety …</p><p>FOR IMMEDIATE RELEASE:</p>
<p>NEANY Inc. to Exhibit Unmanned Solutions at AUVSI’s Unmanned Systems North America 2013</p>
<p>\~ Arrow UAV, Ground Control Station, and Unmanned Surface Vehicle will be on display\~</p>
<p>Hollywood, MD - August 07, 2013 (myPressManager.com) --</p>
<p>NEANY Inc., an industry leader in providing time-sensitive tactical solutions for a variety of missions, is a proud supporter at this year’s AUVSI’s Unmanned Systems North America 2013 in Washington, DC August 12 – 15. Conference attendees will see firsthand NEANY’s flagship UAS, the Arrow, integrated with Raytheon’s Pyros™, a UAS weapon specially designed for tactical level missions, and the aXiom™ 9000 Series, Tachyon’s state-of the-art Beyond Line-of-Site communications system. NEANY’s display will also feature its latest autonomous surface vehicle, the DragonSpy, equipped with the ARES Inc. 7.62mm Externally Powered Gun (EPG) mounted on L-3 Communications IOS’s Advanced Remote Weapon Station (ARWS). The DragonSpy is ideal for providing rapid response capabilities in maritime/littoral environments. In addition, visitors will have the opportunity to operate one of NEANY’s signature ground control stations to further experience the capabilities of these systems.</p>
<p>NEANY Inc. is a minority-owned, SBA 8(a)-certified research, design, test and evaluation engineering firm specializing in unmanned systems with integrated payloads supporting a variety of global missions. These missions include homeland defense and security, border and port patrol, urban mapping, counter-narcotics applications, disaster preparedness, and Intelligence, Surveillance, and Reconnaissance (ISR). In addition to unmanned systems, NEANY’s expertise includes ground control stations, systems integration, rapid prototype fabrication, pilot training, and theater deployment and logistics. NEANY continues to demonstrate unprecedented in-theater expertise that includes deployment-to-extraction logistical support as nearly 50% of NEANY’s personnel are currently forward deployed. In a period where financial resources are limited, NEANY is confident in its ability to offer cost-effective unmanned solutions capable of supporting national and international defense applications.</p>
<p>NEANY will have literature and personnel on hand to demonstrate and discuss our full line of available products and systems. Please take time to visit NEANY at booth #2103.</p>
<p>For more information on the NEANY advantage, please visit www.neanyinc.com.</p>
<p>For more information on AUVSI’s Unmanned Systems North America 2013, please visit</p>Programming the ChromeCast with Xamarin2013-08-03T10:17:00-10:002013-08-03T10:17:00-10:00larrytag:knowing.net,2013-08-03:/posts/2013/08/programming-the-chromecast-with-xamarin/<h1>ChromeCast Notes</h1>
<p>I guess I got under the wire with the Netflix deal, so the net cost of the thing was \<span class="math">\(11. Even at \\)</span>35, it's a no-brainer for a developer to pick up and see if they can target.</p>
<h2>Experience</h2>
<p>Very good OOBE: plug it in to HDMI port …</p><h1>ChromeCast Notes</h1>
<p>I guess I got under the wire with the Netflix deal, so the net cost of the thing was \<span class="math">\(11. Even at \\)</span>35, it's a no-brainer for a developer to pick up and see if they can target.</p>
<h2>Experience</h2>
<p>Very good OOBE: plug it in to HDMI port, power via USB, and… yeah, that works. Setup via iOS didn't work for me (hung), so I set it up via Chrome on laptop: fine.</p>
<p>Add extension to Chrome, can "cast" any single tab. Works great with Comedians in Cars Getting Coffee. Integrated is better, though: very easy to watch Netflix and cue up next issue of "Breaking Bad, Season 5" (they've just released, dontcha' know). YouTube app was a little confusing.</p>
<h2>Local files cast from Chrome</h2>
<p>Mixed bag. Worked well with raw GoPro MP4s, but not my QuickTime output <img alt="Content On This Page Is Not Supported" src="/uploads/2013/08/Screen-Shot-2013-08-03-at-9.01.21-AM.png">. Some MKVs played fine, others didn't have sound (DTS not supported?).</p>
<p>Photos cast perfectly, but obviously would benefit from a native app.</p>
<h2>ObHacks</h2>
<p>The one that jumps out is, of course, "DLNA -> Cast." This would presumably require setting up an auto-transcode to supported formats. Would be best with an XPlat mobile controller: use iOS, Android, or Computer to select files on DLNA server. ? Is there a barebones DLNA library / app that could be hacked?</p>
<p>"It's not a slide projector, it's a time machine…" Photo browser.</p>
<p>Video logger: Watch raw footage on TV, hit "in/out", make notes, triage.</p>
<p>Imperfect information turn-based games (e.g., card games, Eurogames): TV is public, devices are private. Better than "pass-and-play" for, e.g., "Ticket to Ride". Poker.</p>
<p>Party photos: QR code on screen specifies photos taken in next N hours with device are shown / shared with others with same guid. (How to make work with different photosite / storage options?)</p>
<h2>Development</h2>
<p><a href="https://developers.google.com/cast/">Beta SDK available</a> and simple apps at <a href="https://github.com/googlecast">Github</a>.</p>
<p>I downloaded the iOS SDK and used <a href="https://docs.microsoft.com/en-us/xamarin/cross-platform/macios/binding/objective-sharpie/">Objective Sharpie</a> to create Xamarion.iOS C# bindings. Very straightforward; tool did 95% of work. Needed to massage some stuff (some things improperly changed to fields, <a href="https://forums.xamarin.com/discussion/6624/binding-what-determines-libraries-g-cs">needed to change <code>FieldAttribute</code></a>.</p>
<p><a href="https://github.com/lobrien/HelloXamIOSChromeCast/blob/master/Main.cs">"Hello world" Sender app</a> easy-peasy lemon-squeezie:</p>
<div class="highlight"><pre><span></span><code><span class="k">var</span><span class="w"> </span><span class="n">gckContext</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">GCKContext</span><span class="p">(</span><span class="s2">"net.knowing.xamcast"</span><span class="p">);</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">deviceManager</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">GCKDeviceManager</span><span class="p">(</span><span class="n">gckContext</span><span class="p">);</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">dmListener</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">DeviceManagerListener</span><span class="p">();</span>
<span class="w"> </span><span class="n">dmListener</span><span class="o">.</span><span class="n">CameOnline</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="n">CreateSession</span><span class="p">(</span><span class="n">gckContext</span><span class="p">,</span><span class="w"> </span><span class="n">e</span><span class="o">.</span><span class="n">Device</span><span class="p">);</span>
<span class="w"> </span><span class="n">deviceManager</span><span class="o">.</span><span class="n">AddListener</span><span class="p">(</span><span class="n">dmListener</span><span class="p">);</span>
<span class="w"> </span><span class="n">deviceManager</span><span class="o">.</span><span class="n">StartScan</span><span class="p">();</span>
</code></pre></div>
<p>etc.</p>
<p>BUT… No generic media-receiver app? Can't just write Sender app and send "GET endpoint to supported format"?</p>
<p>That means all dev requires going through "whitelisting" phase, which takes at least 48 hours. Just figured this out this AM, so guess limited dev this weekend.</p>
<h2>Plans…</h2>
<p>It's a beta SDK, so I'm not going to invest much effort in "C#"-ifying the bindings yet. Eventually, I'd like to make it available as a free component on the <a href="https://docs.microsoft.com/en-us/xamarin/cross-platform/troubleshooting/component-nuget?tabs=vswin">Xamarin Component Store</a>, but initially I'll probably just put it up on Github. I've already put up the silly <a href="https://github.com/lobrien/HelloXamIOSChromeCast/">Hello XamCast!</a>.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>UIWebView.SetCenterCoordinate is asynchronous2013-08-03T07:42:00-10:002013-08-03T07:42:00-10:00larrytag:knowing.net,2013-08-03:/posts/2013/08/uiwebview-setcentercoordinate-is-asynchronous/<p>You cannot rely on the value of <code>UIWebView.CenterCoordinate</code> after setting <code>UIWebView.SetCenterCoordinate</code> and I don't know of any event that is raised when it is finally set. To be more specific:</p>
<div class="highlight"><pre><span></span><code><span class="k">var</span><span class="w"> </span><span class="n">map</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">MKMapView</span><span class="p">();</span>
<span class="k">var</span><span class="w"> </span><span class="n">ctr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">CLLocationCoordinate2D</span><span class="p">(</span><span class="mf">37.8</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mf">122.4</span><span class="p">);</span>
<span class="n">map</span><span class="o">.</span><span class="n">SetCenterCoordinate</span><span class="p">(</span><span class="n">ctr</span><span class="p">,</span><span class="w"> </span><span class="bp">false</span><span class="p">);</span>
<span class="n">map</span><span class="o">.</span><span class="n">SetRegion …</span></code></pre></div><p>You cannot rely on the value of <code>UIWebView.CenterCoordinate</code> after setting <code>UIWebView.SetCenterCoordinate</code> and I don't know of any event that is raised when it is finally set. To be more specific:</p>
<div class="highlight"><pre><span></span><code><span class="k">var</span><span class="w"> </span><span class="n">map</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">MKMapView</span><span class="p">();</span>
<span class="k">var</span><span class="w"> </span><span class="n">ctr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">CLLocationCoordinate2D</span><span class="p">(</span><span class="mf">37.8</span><span class="p">,</span><span class="w"> </span><span class="o">-</span><span class="mf">122.4</span><span class="p">);</span>
<span class="n">map</span><span class="o">.</span><span class="n">SetCenterCoordinate</span><span class="p">(</span><span class="n">ctr</span><span class="p">,</span><span class="w"> </span><span class="bp">false</span><span class="p">);</span>
<span class="n">map</span><span class="o">.</span><span class="n">SetRegion</span><span class="p">(</span><span class="n">new</span><span class="w"> </span><span class="n">MKCoordinateRegion</span><span class="p">(</span><span class="n">ctr</span><span class="p">,</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">MKCoordinateSpan</span><span class="p">(</span><span class="mf">0.025</span><span class="p">,</span><span class="w"> </span><span class="mf">0.025</span><span class="p">)),</span><span class="w"> </span><span class="bp">false</span><span class="p">);</span>
<span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s2">"Center coordinate is still NaN: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">map</span><span class="o">.</span><span class="n">CenterCoordinate</span><span class="o">.</span><span class="n">Latitude</span><span class="o">.</span><span class="n">ToString</span><span class="p">());</span>
<span class="o">/*</span>
<span class="n">Error</span><span class="p">:</span><span class="w"> </span><span class="n">NaN</span><span class="w"> </span><span class="n">Lat</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="n">Long</span><span class="w"> </span><span class="k">var</span><span class="w"> </span>
<span class="n">circle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MKCircle</span><span class="o">.</span><span class="n">Circle</span><span class="p">(</span><span class="n">map</span><span class="o">.</span><span class="n">CenterCoordinate</span><span class="p">,</span><span class="w"> </span><span class="mi">100</span><span class="p">);</span>
<span class="n">Must</span><span class="w"> </span><span class="n">use</span><span class="w"> </span><span class="n">explicit</span><span class="w"> </span><span class="n">location</span><span class="w"> </span><span class="n">instead</span><span class="p">,</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">la</span><span class="p">:</span>
<span class="o">*/</span>
<span class="k">var</span><span class="w"> </span><span class="n">circle</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MKCircle</span><span class="o">.</span><span class="n">Circle</span><span class="p">(</span><span class="n">ctr</span><span class="p">,</span><span class="w"> </span><span class="mi">100</span><span class="p">);</span>
<span class="n">map</span><span class="o">.</span><span class="n">AddOverlay</span><span class="p">(</span><span class="n">circle</span><span class="p">);</span>
</code></pre></div>
<p>Lemme' get some SEO terms in here like <code>MapKit</code>, <code>MKOverlay</code>, and <code>NaN</code></p>Cross-Platform Mobile Architectural Patterns2013-07-25T02:00:00-10:002013-07-25T02:00:00-10:00larrytag:knowing.net,2013-07-25:/posts/2013/07/cross-platform-mobile-architectural-patterns/<p>This post contains links and references to subjects discussed in my MonkeySpace 2013 talk.</p>
<p>Naturally, the talk was grounded in Xamarin Studio.</p>
<p>Xamarin's Field Service App is a reference implementation for cross-platform MVVM.</p>
<p>The Xamarin DCI example source code can be <a href="https://github.com/lobrien/XamDCI">found here</a>.</p>
<p>Essential books on software-architectural patterns:</p>
<ul>
<li><a href="https://www.amazon.com/gp/product/0201633612/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0201633612&linkCode=as2&tag=knowingnet-20">Design Patterns …</a></li></ul><p>This post contains links and references to subjects discussed in my MonkeySpace 2013 talk.</p>
<p>Naturally, the talk was grounded in Xamarin Studio.</p>
<p>Xamarin's Field Service App is a reference implementation for cross-platform MVVM.</p>
<p>The Xamarin DCI example source code can be <a href="https://github.com/lobrien/XamDCI">found here</a>.</p>
<p>Essential books on software-architectural patterns:</p>
<ul>
<li><a href="https://www.amazon.com/gp/product/0201633612/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0201633612&linkCode=as2&tag=knowingnet-20">Design Patterns: Elements of Reusable Software; Gamma et al.</a></li>
<li><a href="https://www.amazon.com/gp/product/0321127420/ref=as_li_qf_sp_asin_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=0321127420&linkCode=as2&tag=knowingnet-20">Patterns of Enterprise Application Architecture; Fowler</a></li>
<li><a href="https://www.amazon.com/gp/product/B0014EME7I/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B0014EME7I&linkCode=as2&tag=knowingnet-20">Pattern-Oriented Software Architecture: Vol. 1; Buschmann et al.</a></li>
<li><a href="https://www.amazon.com/gp/product/B00CHK5SIA/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B00CHK5SIA&linkCode=as2&tag=knowingnet-20">Pattern-Oriented Software Architecture, Patterns for Concurrent and Networked Objects: Vol. 2; Schmidt et al.</a></li>
</ul>
<p>Special mention should be made of:</p>
<ul>
<li><a href="https://www.amazon.com/gp/product/B004IK8PIW/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=B004IK8PIW&linkCode=as2&tag=knowingnet-20">Lean Architecture for Agile Software Development; Coplien, Bjørnvig</a></li>
</ul>
<p>Which covers Data-Context-Interaction in detail.</p>
<hr>
<p>References:</p>
<ul>
<li><a href="http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf">"Models-Views-Controllers"; Reenskaug</a></li>
<li><a href="http://www.wildcrest.com/Potel/Portfolio/mvp.pdf">"MVP: Model-View-Presenter"; Potel</a></li>
<li><a href="https://blogs.msdn.microsoft.com/johngossman/2005/10/08/introduction-to-modelviewviewmodel-pattern-for-building-wpf-apps/">"Introduction to Model/View/ViewModel Pattern for Building WPF Apps"; Gossman</a></li>
<li><a href="https://www.artima.com/articles/dci_vision.html">"The DCI Architecture: A New Vision for Object-Oriented Programming"; Reenskaug, Coplien</a></li>
</ul>
<p>It should be noted that DCI advocates now speak of it as a "paradigm" and not simply an architectural style.</p>
<p>More DCI links:</p>
<ul>
<li><a href="http://fulloo.info/">Full.OO Homepage</a></li>
<li><a href="https://sites.google.com/a/leansoftwarearchitecture.com/www/home/dci-tutorials">DCI Tutorials - Lean Software Architecture</a></li>
<li><a href="http://folk.uio.no/trygver/2008/commonsense.pdf">The Common Sense of Object-Orientated [sic] Programming</a></li>
<li><a href="http://www.clean-ruby.com/">Clean Ruby</a></li>
<li><a href="http://codecrafter.blogspot.com/2011/06/dci-example-with-nroles.html">DCI Example with NRoles</a></li>
</ul>
<hr>
<p>The quote by Joe Armstrong:</p>
<blockquote>
<p>I think the lack of reusability comes in object-oriented languages, not functional languages. Because the problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.</p>
<p>If you have referentially transparent code, if you have pure functions — all the data comes in its input arguments and everything goes out and leave no state behind — it’s incredibly reusable.</p>
</blockquote>
<p>comes from the book <a href="https://www.amazon.com/gp/product/1430219483/ref=as_li_tf_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1430219483&linkCode=as2&tag=knowingnet-20">Coders at Work</a>.</p>
<hr>
<p>I write about software development in my monthly column for <a href="https://sdtimes.com/">SD Times</a>.</p>Using Extension Methods on a C# Interface to Enable DCI in Xamarin2013-07-17T08:28:00-10:002013-07-17T08:28:00-10:00larrytag:knowing.net,2013-07-17:/posts/2013/07/using-extension-methods-on-a-c-interface-to-enable-dci-in-xamarin/<p>Scala has several nice language features, including the elegant use of <code>val</code> for immutable variables and <code>var</code> for mutable, but the feature that I miss the most on a day-to-day basis is "<a href="http://lampwww.epfl.ch/~odersky/papers/ScalableComponent.pdf">traits</a>."</p>
<p>Traits allow you to implement one or more methods of an interface. The canonical use is to …</p><p>Scala has several nice language features, including the elegant use of <code>val</code> for immutable variables and <code>var</code> for mutable, but the feature that I miss the most on a day-to-day basis is "<a href="http://lampwww.epfl.ch/~odersky/papers/ScalableComponent.pdf">traits</a>."</p>
<p>Traits allow you to implement one or more methods of an interface. The canonical use is to "mix-in" behavior while avoiding the "<a href="https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem">diamond-problem</a>."</p>
<p><a href="https://www.artima.com/articles/dci_vision.html">DCI</a> has the idea that <code>Object</code>s (domain-meaningful entities that correspond to user conceptions) adopt <code>Role</code>s, which are context-specific. Roles interact to produce value. So, for instance, when you're transferring money at an ATM, you're dealing with two accounts that are the same type of Object (<code>Account</code>), but which are in two different roles in the context of "Transfer Money": a <code>TransferSource</code> and a <code>TransferSink</code>. And an <code>Account</code> in a <code>TransferSource</code> role has different behavior than an <code>Account</code> in a <code>TransferSink</code> role (e.g., <code>TransferSource</code> expects to <code>withdraw(Money amount)</code> while <code>TransferSink</code> expects to <code>credit(Money amount)</code>).</p>
<p>In C#, the way to specify that a class has a certain set of behaviors is to specify those behaviors in an <code>interface</code> and specify that the class implements them:</p>
<div class="highlight"><pre><span></span><code>public class Account: TransferSource, TransferSink
</code></pre></div>
<p>And then, of course, you would implement the various methods of <code>TransferSource</code> and <code>TransferSink</code> within <code>Account</code>.</p>
<p>But the very <em>essence</em> of DCI is the premise that classic OOP type-systems don't appropriately capture the relationships between Objects-in-Roles, even though "Objects-in-Roles working with each other" is the domain-users mental model ("I pick a source account, and a destination account, and specify an amount, and the amount is debited from the source and credited to the destination"). So DCI says that the <code>TransferTo</code> method that corresponds to the use-case should be elevated to a first-class object.</p>
<p>But in C# you cannot partially implement an <code>interface</code>. But you <em>can</em> create and implement an <em>extension method</em> on an interface!</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="n">public</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">TransferContextTrait</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">public</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">TransferTo</span><span class="p">(</span><span class="n">this</span><span class="w"> </span><span class="n">TransferSource</span><span class="w"> </span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">TransferSink</span><span class="w"> </span><span class="n">sink</span><span class="p">,</span><span class="w"> </span><span class="n">Decimal</span><span class="w"> </span><span class="n">amount</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">try</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Funds</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">amount</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">FailTransfer</span><span class="p">(</span><span class="n">new</span><span class="w"> </span><span class="n">TransferFailedReason</span><span class="p">(</span><span class="s2">"Insufficient Funds"</span><span class="p">));</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">else</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">Withdraw</span><span class="p">(</span><span class="n">amount</span><span class="p">);</span>
<span class="w"> </span><span class="n">sink</span><span class="o">.</span><span class="n">Deposit</span><span class="p">(</span><span class="n">amount</span><span class="p">);</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">details</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">TransferDetails</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">Name</span><span class="p">,</span><span class="w"> </span><span class="n">sink</span><span class="o">.</span><span class="n">Name</span><span class="p">,</span><span class="w"> </span><span class="n">amount</span><span class="p">);</span>
<span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">AccomplishTransfer</span><span class="p">(</span><span class="n">details</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">catch</span><span class="p">(</span><span class="n">Exception</span><span class="w"> </span><span class="n">x</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="bp">self</span><span class="o">.</span><span class="n">FailTransfer</span><span class="p">(</span><span class="n">new</span><span class="w"> </span><span class="n">TransferFailedReason</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">ToString</span><span class="p">()));</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
</code></pre></div>
<p>Note an interesting restriction, though: You cannot trigger an <code>event</code> from within an extension method! So in this case, although I would have preferred to propagate the results of the calculation by <code>self.TransferAccomplished(this, details)</code> I have to use a proxy function in <code>Account</code>:</p>
<div class="highlight"><pre><span></span><code>public void AccomplishTransfer(TransferDetails details)
{
TransferAccomplished(this, new TArgs&lt;TransferDetails>(details));
}
public event EventHandler&lt;TArgs &lt;TransferDetails>> TransferAccomplished = delegate {};
</code></pre></div>
<p>I'll be talking more about DCI and other cross-platform architectural techniques at MonkeySpace in Chicago next week. Hope to see you there!</p>How many programmers are there?2013-06-27T06:44:00-10:002013-06-27T06:44:00-10:00larrytag:knowing.net,2013-06-27:/posts/2013/06/how-many-programmers-are-there/<p>According to <a href="http://sdt.bz/61822">Evans Data</a>, the worldwide developer community will reach 29M by 2019. The largest growth is expected to come from China and, to a lesser extent, other developing economies.</p>
<p>I tend to be very skeptical about quantitative analysis of the developer community, and more-so when it comes to global …</p><p>According to <a href="http://sdt.bz/61822">Evans Data</a>, the worldwide developer community will reach 29M by 2019. The largest growth is expected to come from China and, to a lesser extent, other developing economies.</p>
<p>I tend to be very skeptical about quantitative analysis of the developer community, and more-so when it comes to global analysis and forecasting, but I have no <em>prima facie</em> reason to criticize those numbers.</p>
<p>As always, I turn my attention to questions of the distribution of developer productivity. Is the distribution of talent among these 29M more like:</p>
<p><img alt="curves" src="/uploads/2013/06/distro_2.png"></p>
<p>A normal distribution would imply that the most effective team structures would be fairly democratic.</p>
<p>The "superprogrammer" distribution, in which an elite (but not vanishingly small) population is vastly more productive than median would imply the most effective team structure as being one structured like a surgical team (the team is structure in service to the elite member).</p>
<p>The "incompetent" distribution, in which a good number of exceptionally bad programmers manage to stay employed, implies that instead of seeking out "rockstars" and "ninjas," teams should take a <a href="https://en.wikipedia.org/wiki/Satisficing">satisficing</a> approach. In this world, the median professional programmer is pretty darn good, but sees a lot of unacceptable crap.</p>
<p>A belief in the "superprogrammer" distribution is prevalent, but the "incompetent" distribution best explains the world I've seen over the past 30 years.</p>How Many Python Programmers Are There?2013-06-26T06:26:00-10:002013-06-26T06:26:00-10:00larrytag:knowing.net,2013-06-26:/posts/2013/06/how-many-python-programmers-are-there/<p>Giles Thomas makes <a href="http://www.gilesthomas.com/2013/06/how-many-python-programmers-are-there-in-the-world/">the case that the Python programming community numbers in the low millions</a>. This seems right to me: that's a large community, but it's not quite at the level of the most popular programming languages. That size is supported by this chart, which has impressed me as "feeling …</p><p>Giles Thomas makes <a href="http://www.gilesthomas.com/2013/06/how-many-python-programmers-are-there-in-the-world/">the case that the Python programming community numbers in the low millions</a>. This seems right to me: that's a large community, but it's not quite at the level of the most popular programming languages. That size is supported by this chart, which has impressed me as "feeling right" when it comes to the popularity of various languages.</p>
<p>One point, though, is that Python has made <em>very significant</em> inroads in the scientific community, which I believe is a key influencer and leading indicator: the libraries that scientists build become building blocks for future work. When you look at the history of programming languages, you see that scientists and engineers were clear driving forces behind FORTRAN and although C and C++ were broadly popular, their performance benefits made them extremely popular in labs as well.</p>
<p>I'm not sure that the popularity of Python in labs is going to be captured by metrics that focus on the professional programming community, so if anything, I suspect that the Python community might even be a moderate amount larger than Giles suggests.</p>Alaska Bear Adventures2013-05-31T18:31:00-10:002013-05-31T18:31:00-10:00larrytag:knowing.net,2013-05-31:/posts/2013/05/alaska-bear-adventures/<p>Yes, it's worth it.</p>
<p>It's a pity that the phrase "…in their natural habitat," is so boring. The difference between this:</p>
<p><img alt="" src="http://www.lonestarbarns.com/images/267_Bear_Cage.jpg"></p>
<p>and this:</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>
<p>is the difference between a pixel and the Sistine Chapel.</p>
<p>Deciding to spend the money on this trip was the hardest part of our Alaska trip. My …</p><p>Yes, it's worth it.</p>
<p>It's a pity that the phrase "…in their natural habitat," is so boring. The difference between this:</p>
<p><img alt="" src="http://www.lonestarbarns.com/images/267_Bear_Cage.jpg"></p>
<p>and this:</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>
<p>is the difference between a pixel and the Sistine Chapel.</p>
<p>Deciding to spend the money on this trip was the hardest part of our Alaska trip. My wife DALOR (Did A Lot Of Research) and there can be no guarantees about what you'll see. Our day highlighted that: we had thin ground-fog that limited visibility to a couple hundred yards. If the air was three degrees cooler, it would have been soup and we might not have seen anything; if it had been three degrees warmer and the fog burned off, we would have seen more and my photos would be twice as sharp.</p>
<p>One thing we learned was that <a href="https://alaskabearviewing.com/">Alaska Bear Adventures</a> has the best reputation for fair-dealing in the case of weather cancellations and so forth. But, on the ground, I don't think anyone can guarantee "You'll get within X yards of Y bears." As it was, I'd say we approached this bear within 40 yards:</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>
<p>And the Momma and her cubs within 60 yards:</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>
<p>We flew to Hallo Bay, the site where the Discovery Channel's "<a href="https://www.discovery.com/tv-shows/">Great Bear Stakeout</a>" was filmed. It's apparently within a few bays of where Timothy Treadwell of "<a href="https://www.imdb.com/title/tt0427312/">Grizzly Man</a>" was killed. So, as far as locations go, this is the right place.</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>
<p>We visited in late May, and were a little concerned about whether the bears would have come down yet, but as you can see, we had no problem approaching two on the ground. From the plane we spotted another bear, a large male, that we could not find in the mist and not seeing a dominant male was the only "disappointment" of the day. On our return flight we flew over another bay and spotted four bears.</p>
<p>Our pilot and guide was Jarrod, who was great. He's a young guy, but flies delivery and mail into the Alaskan interior in Winter, so extremely competent. He was very knowledgeable about the bears and their biology but it was his enthusiasm that really set him apart. Imagine flying and walking around with a happy Edward Norton and you've pretty much got the picture.</p>
<p>We had excellent flying weather (we had zero turbulence, which I have to think was unusual, given the mountains) and the flight-seeing was great. We flew over snow-covered volcanoes with lava-heated lakes at their peaks and steam coming from vents and spilling down their sides, over glaciers spotted with brilliant azure melt-ponds, and saw a lone wolf trotting along a driftwood-covered beach.</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>
<p>The plane was tight, naturally, but heated and everyone had a window (1 in the co-pilot seat, and then 2 rows of side-by-side). There's a short but thorough safety briefing as well as a briefing on the protocol for hiking with the bears. Everyone is given a pair of hip waders and almost all the time on the ground is spent walking over mudflats, which is very easy. The hardest part is that, when viewing the bears, you kneel for long periods of time. The mud's soft, but you get pretty stiff!</p>
<p>The benefit is that the bears really, <em>really</em> don't seem to worry about you. With both adult bears we saw them take notice of us, and I'd say that the mother avoided us initially (she took her cubs into some brush) but once they started feeding (the mother on clams, the other on lichen) they hardly glanced at us. We were close enough to hear the scraping of their claws and not just the squabbling of the cubs, but their growling complaints that it was time to be nursed.</p>
<p>I honestly have no idea how long we were on the ground -- a few hours anyway -- and probably 80% of the time we were viewing bears.</p>
<p>The thing that will either work for or against you is the environment: if you're going to be disappointed by anything but highlight-reel footage of bears battling on two legs, maybe you'll be disappointed. If it's enough for you to closely watch magnificent animals in a magnificent setting, it may be the highlight of your trip.</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>Can't Alert Health Insurance to Possible Fraud2013-05-24T09:43:00-10:002013-05-24T09:43:00-10:00larrytag:knowing.net,2013-05-24:/posts/2013/05/cant-alert-health-insurance-to-possible-fraud/<p>The other day I'm doing the bills and I get one of those healthcare "This is not a bill. It describes services." things. You know, the sort of things that 90% of the world throws out without reviewing. But I look at it and check with my wife if she …</p><p>The other day I'm doing the bills and I get one of those healthcare "This is not a bill. It describes services." things. You know, the sort of things that 90% of the world throws out without reviewing. But I look at it and check with my wife if she went to the dentist that day. "No! Absolutely not." I Google the doctor and they're in Florida, 6000 miles from where we live.</p>
<p>Now the worrisome thing is -- this is billed to my wife, associated with my healthcare account, etc. -- so there's the hint of identity theft or fraud.</p>
<p>So now Tina's been on the phone with the health insurance company for 45 minutes and they say "We can't take any steps." They can't take any steps about <em>the potential fraud</em> we're alerting them to. So now Tina calls the phone number I Googled up for the dentist and is talking to them, and <em>probably</em> they're fine people but if they aren't, WTF?</p>Review "The Wasp Factory"2013-05-14T20:17:00-10:002013-05-14T20:17:00-10:00larrytag:knowing.net,2013-05-14:/posts/2013/05/review-the-wasp-factory/<p><a href="https://www.goodreads.com/book/show/567678.The_Wasp_Factory"><img alt="The Wasp Factory" src="http://d.gr-assets.com/books/1303915010m/567678.jpg"></a><a href="https://www.goodreads.com/book/show/567678.The_Wasp_Factory">The Wasp Factory</a> by <a href="https://www.goodreads.com/author/show/7628.Iain_Banks">Iain Banks</a><br>
My rating: <a href="https://www.goodreads.com/review/show/613739599">4 of 5 stars</a></p>
<p>Very well written. First-person account of a psychopath or maybe a sociopath living deep inside a metaphor in Scotland. Very unsettling, with a narrator who's clearly unreliable, so one is always wondering if incidents or even entire characters …</p><p><a href="https://www.goodreads.com/book/show/567678.The_Wasp_Factory"><img alt="The Wasp Factory" src="http://d.gr-assets.com/books/1303915010m/567678.jpg"></a><a href="https://www.goodreads.com/book/show/567678.The_Wasp_Factory">The Wasp Factory</a> by <a href="https://www.goodreads.com/author/show/7628.Iain_Banks">Iain Banks</a><br>
My rating: <a href="https://www.goodreads.com/review/show/613739599">4 of 5 stars</a></p>
<p>Very well written. First-person account of a psychopath or maybe a sociopath living deep inside a metaphor in Scotland. Very unsettling, with a narrator who's clearly unreliable, so one is always wondering if incidents or even entire characters are imaginary. Although certain twists were heavily foreshadowed, the denoument was still quite tense. My only qualm is that I think the final few pages spelled out too much -- it would have been more haunting if the narrator didnt become suddenly insightful and deconstruct the metaphor.</p>
<p>Havent been so compelled to turn pages in a while.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>
<p>via <a href="https://www.goodreads.com/review/show/613739599">Goodreads | Larry Obrien Kailua Kona, HIs review of The Wasp Factory</a>.</p>Accessing the Android Barometer using Xamarin.Android2013-04-06T10:58:00-10:002013-04-06T10:58:00-10:00larrytag:knowing.net,2013-04-06:/posts/2013/04/accessing-the-android-barometer-using-monotouch-android/<p>Easily:</p>
<div class="csharp highlight"><pre><span></span><code><span class="o"><</span><span class="w"> </span><span class="o">!</span><span class="p">[</span><span class="n">CDATA</span><span class="p">[</span>
<span class="p">[</span><span class="n">Activity</span><span class="w"> </span><span class="p">(</span><span class="n">Label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"HelloBarometer"</span><span class="p">,</span><span class="w"> </span><span class="n">MainLauncher</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">true</span><span class="p">)]</span>
<span class="n">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">Activity1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Activity</span><span class="p">,</span><span class="w"> </span><span class="n">ISensorEventListener</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">TextView</span><span class="w"> </span><span class="n">mainLabel</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">protected</span><span class="w"> </span><span class="n">override</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">OnCreate</span><span class="p">(</span><span class="n">Bundle</span><span class="w"> </span><span class="n">bundle</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">base</span><span class="o">.</span><span class="n">OnCreate</span><span class="p">(</span><span class="n">bundle</span><span class="p">);</span>
<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Set</span><span class="w"> </span><span class="n">our</span><span class="w"> </span><span class="n">view</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="s2">"main"</span><span class="w"> </span><span class="n">layout</span><span class="w"> </span><span class="n">resource</span>
<span class="w"> </span><span class="n">SetContentView</span><span class="p">(</span><span class="n">Resource</span><span class="o">.</span><span class="n">Layout</span><span class="o">.</span><span class="n">Main</span><span class="p">);</span>
<span class="w"> </span><span class="o">//</span><span class="n">Detect</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">barometer</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">sm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">SensorManager</span><span class="p">)</span><span class="w"> </span><span class="n">this</span><span class="o">.</span><span class="n">GetSystemService</span><span class="p">(</span><span class="n">Context</span><span class="o">.</span><span class="n">SensorService</span><span class="p">);</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">barry</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sm</span><span class="o">.</span><span class="n">GetDefaultSensor</span><span class="p">(</span><span class="n">SensorType …</span></code></pre></div><p>Easily:</p>
<div class="csharp highlight"><pre><span></span><code><span class="o"><</span><span class="w"> </span><span class="o">!</span><span class="p">[</span><span class="n">CDATA</span><span class="p">[</span>
<span class="p">[</span><span class="n">Activity</span><span class="w"> </span><span class="p">(</span><span class="n">Label</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"HelloBarometer"</span><span class="p">,</span><span class="w"> </span><span class="n">MainLauncher</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="bp">true</span><span class="p">)]</span>
<span class="n">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">Activity1</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Activity</span><span class="p">,</span><span class="w"> </span><span class="n">ISensorEventListener</span>
<span class="p">{</span>
<span class="w"> </span><span class="n">TextView</span><span class="w"> </span><span class="n">mainLabel</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">protected</span><span class="w"> </span><span class="n">override</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">OnCreate</span><span class="p">(</span><span class="n">Bundle</span><span class="w"> </span><span class="n">bundle</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">base</span><span class="o">.</span><span class="n">OnCreate</span><span class="p">(</span><span class="n">bundle</span><span class="p">);</span>
<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Set</span><span class="w"> </span><span class="n">our</span><span class="w"> </span><span class="n">view</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="s2">"main"</span><span class="w"> </span><span class="n">layout</span><span class="w"> </span><span class="n">resource</span>
<span class="w"> </span><span class="n">SetContentView</span><span class="p">(</span><span class="n">Resource</span><span class="o">.</span><span class="n">Layout</span><span class="o">.</span><span class="n">Main</span><span class="p">);</span>
<span class="w"> </span><span class="o">//</span><span class="n">Detect</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">barometer</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">sm</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">SensorManager</span><span class="p">)</span><span class="w"> </span><span class="n">this</span><span class="o">.</span><span class="n">GetSystemService</span><span class="p">(</span><span class="n">Context</span><span class="o">.</span><span class="n">SensorService</span><span class="p">);</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">barry</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">sm</span><span class="o">.</span><span class="n">GetDefaultSensor</span><span class="p">(</span><span class="n">SensorType</span><span class="o">.</span><span class="n">Pressure</span><span class="p">);</span>
<span class="w"> </span><span class="o">//</span><span class="n">Subscribe</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">it</span>
<span class="w"> </span><span class="n">sm</span><span class="o">.</span><span class="n">RegisterListener</span><span class="p">(</span><span class="n">this</span><span class="p">,</span><span class="w"> </span><span class="n">barry</span><span class="p">,</span><span class="w"> </span><span class="n">SensorDelay</span><span class="o">.</span><span class="n">Normal</span><span class="p">);</span>
<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Get</span><span class="w"> </span><span class="n">our</span><span class="w"> </span><span class="n">button</span><span class="w"> </span><span class="n">from</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">layout</span><span class="w"> </span><span class="n">resource</span><span class="p">,</span>
<span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="n">attach</span><span class="w"> </span><span class="n">an</span><span class="w"> </span><span class="n">event</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">it</span>
<span class="w"> </span><span class="n">mainLabel</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">FindViewById</span><span class="o"><</span><span class="n">textview</span><span class="o">></span><span class="p">(</span><span class="n">Resource</span><span class="o">.</span><span class="n">Id</span><span class="o">.</span><span class="n">myText</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">public</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">OnAccuracyChanged</span><span class="p">(</span><span class="n">Sensor</span><span class="w"> </span><span class="n">sensor</span><span class="p">,</span><span class="w"> </span><span class="n">SensorStatus</span><span class="w"> </span><span class="n">accuracy</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s2">"Things have changed"</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">public</span><span class="w"> </span><span class="nb nb-Type">void</span><span class="w"> </span><span class="n">OnSensorChanged</span><span class="p">(</span><span class="n">SensorEvent</span><span class="w"> </span><span class="n">pressureEvent</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Console</span><span class="o">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="s2">"Under pressure "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">pressureEvent</span><span class="p">);</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">hPAs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">pressureEvent</span><span class="o">.</span><span class="n">Values</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">msg</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">string</span><span class="o">.</span><span class="n">Format</span><span class="p">(</span><span class="s2">"Current pressure: {0} hPA!"</span><span class="p">,</span><span class="w"> </span><span class="n">hPAs</span><span class="p">);</span>
<span class="w"> </span><span class="n">mainLabel</span><span class="o">.</span><span class="n">Text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">msg</span><span class="p">;</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">calcedAltitude</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">calculateAltitudeInFeet</span><span class="p">(</span><span class="n">hPAs</span><span class="p">);</span>
<span class="w"> </span><span class="n">FindViewById</span><span class="o"><</span><span class="n">TextView</span><span class="o">></span><span class="p">(</span><span class="n">Resource</span><span class="o">.</span><span class="n">Id</span><span class="o">.</span><span class="n">altitudeText</span><span class="p">)</span><span class="o">.</span><span class="n">Text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">string</span><span class="o">.</span><span class="n">Format</span><span class="p">(</span><span class="s2">"Calculated altitude is {0} ft"</span><span class="p">,</span><span class="w"> </span><span class="n">calcedAltitude</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">double</span><span class="w"> </span><span class="n">calculateAltitudeInFeet</span><span class="p">(</span><span class="nb nb-Type">float</span><span class="w"> </span><span class="n">hPAs</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">pstd</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">1013.25</span><span class="p">;</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">altpress</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="mi">1</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">Math</span><span class="o">.</span><span class="n">Pow</span><span class="p">((</span><span class="n">hPAs</span><span class="o">/</span><span class="n">pstd</span><span class="p">),</span><span class="w"> </span><span class="mf">0.190284</span><span class="p">))</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mf">145366.45</span><span class="p">;</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">altpress</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span>
<span class="p">}</span>
<span class="p">]]</span>
</code></pre></div>
<p>I mean, I know I work for the guys, but this is just *ridiculously* easy. An hour ago I was installing the SDK...</p>
<p><a href="/uploads/2013/04/Screenshot_2013-04-06-11-05-28.png"><img alt="" class="size-full wp-image-5565" height="1280" src="/uploads/2013/04/Screenshot_2013-04-06-11-05-28.png" title="Screenshot_2013-04-06-11-05-28" width="768"></a></p>
<p>And, yes, I live high on the side of an active volcano.</p>Tap 7 Times to Enable Developer Options in Android Jelly Bean2013-04-06T09:46:00-10:002013-04-06T09:46:00-10:00larrytag:knowing.net,2013-04-06:/posts/2013/04/tap-7-times-to-enable-developer-options-in-android-jelly-bean/<p><a href="https://www.androidcentral.com/how-enable-developer-settings-android-42">How to enable developer settings on Android 4.2 | Android Central</a>.</p>
<p>I just got myself a Nexus 4 for cross-platform development, but it didn't initially appear as a device in Xamarin Studio. Initial Googling and SO'ing indicated a non-existent "Settings->Application->Developer" route to enable debugging on the phone.</p>
<p>Instead …</p><p><a href="https://www.androidcentral.com/how-enable-developer-settings-android-42">How to enable developer settings on Android 4.2 | Android Central</a>.</p>
<p>I just got myself a Nexus 4 for cross-platform development, but it didn't initially appear as a device in Xamarin Studio. Initial Googling and SO'ing indicated a non-existent "Settings->Application->Developer" route to enable debugging on the phone.</p>
<p>Instead, the correct sequence is "Settings->About phone->{tap 7 times} Settings->Developer Options"</p>The Governor vs. Boyd Crowder2013-04-03T07:44:00-10:002013-04-03T07:44:00-10:00larrytag:knowing.net,2013-04-03:/posts/2013/04/the-governor-vs-boyd-crowder/<p>The <strong>Justified</strong> finale had a scene that summed up one of it's greatest strengths: Raylan, the putative hero, and Boyd, the putative villain, demonstrate how parallel they are to each other: Raylan points to Boyd's career and sneers at the thought that Boyd imagines himself anything other than "the bad …</p><p>The <strong>Justified</strong> finale had a scene that summed up one of it's greatest strengths: Raylan, the putative hero, and Boyd, the putative villain, demonstrate how parallel they are to each other: Raylan points to Boyd's career and sneers at the thought that Boyd imagines himself anything other than "the bad guy." Boyd points to Raylan's actions and sneers that Raylan thinks he's any different. Perfect: They <em>are</em> different, and make different choices, but both focus on different aspects, highlighting the ambiguity of the moral dilemmas that, taken one way, lead to acclaim and promotion in the US Marshall's Service and, taken another, lead to universal contempt and jail.</p>
<p>Which they'd similarly set up with the Governor and Rick in <strong>The Walking Dead</strong>. Rick crazily hung on to the voice and visions of his dead wife while making the fateful decisions necessary for survival, the Governor hung on to the physical body of his dead daughter while doing the same. While the hard truth is that both are in the business of ordering the brutal actions that are necessary to make their group survive, Rick soothes himself by wallowing in guilt based on pre-zompocalypse morality. The Governor steels himself by sitting and staring at decapitated heads in fishtanks that are still gnawing to get at him. But why do people dwell on things? To bolster their weak spots: Rick's belly-aching about morality implies that he needs to remind himself to not let it disappear, while the Governor's zombiequarium implies that he needs to remind himself to never let himself relax. A similar point was made when the Governor said that, had he acted forcefully from the beginning, his daughter would fear him, but be alive. Meanwhile, we saw that Rick's son is a little disdainful of his Dad's morality.</p>
<p>But instead of developing the theme of parallelism between Rick and the Governor, they just put the Governor on the crazy train. Oh, he wasn't just brutal, he was a <em>sadist</em>. He wasn't just committed to pre-emptive murder, he was a psychopath. And most frustratingly of all, in the finale, he wasn't a <em>competent leader</em>. And not only wasn't he a competent leader in his assault on the jail, he apparently had never been competent in training his people to have the proper level of paranoia and response to deal with sneak attacks.</p>
<p>And just at a basic dramatic level, they cheated us of a final confrontation between the Governor and one of our protagonists. Instead, he slunk off with his A-team baddies and will now be a possible occasional appearance. Very disappointing for a show whose greatest strength is its willingness to kill off established characters.</p>Hungarian Monadic Notation: Call Me Maybe2013-04-01T05:00:00-10:002013-04-01T05:00:00-10:00larrytag:knowing.net,2013-04-01:/posts/2013/04/hungarian-monadic-notation-call-me-maybe/<p><em>Update: this is an April Fool's joke. It's the most incoherent, illogical thing I could think of. It's a bad idea, it wouldn't work, and it misses the point of everything.</em></p>
<h1>Hungarian Monadic Notation: Call Me Maybe()</h1>
<p><em>Update: This was an April Fool's joke. If you are interested in monads …</em></p><p><em>Update: this is an April Fool's joke. It's the most incoherent, illogical thing I could think of. It's a bad idea, it wouldn't work, and it misses the point of everything.</em></p>
<h1>Hungarian Monadic Notation: Call Me Maybe()</h1>
<p><em>Update: This was an April Fool's joke. If you are interested in monads and are a C# or Java programmer, I strongly suggest <a href="https://ericlippert.com/2013/02/21/monads-part-one/">this series of posts by Eric Lippert</a>, which explains monads in a very pragmatic way.</em></p>
<p>If you follow the world of software development at all, you know that there has been a big uptick in discussion about "functional programming languages," a type of language that emphasizes immutability and composition of functions to achieve higher reliability and, arguably, higher productivity.</p>
<p>On the other hand, functional programming languages look like Klingon, but with math:</p>
<div class="highlight"><pre><span></span><code><span class="n">instance</span><span class="w"> </span><span class="n">Monad</span><span class="err">[]</span><span class="w"> </span><span class="k">where</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">[</span><span class="n">x</span><span class="o">]</span>
<span class="w"> </span><span class="n">xs</span><span class="w"> </span><span class="o">>>=</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nf">concat</span><span class="w"> </span><span class="p">(</span><span class="k">map</span><span class="w"> </span><span class="n">f</span><span class="w"> </span><span class="n">xs</span><span class="p">)</span>
<span class="w"> </span><span class="n">fail</span><span class="w"> </span><span class="n">_</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">[]</span>
</code></pre></div>
<p>WTF, ammiright? (And for extra points, it's not a right-shift, it's "bind." Because arcana.)</p>
<p>The most laughable claim of the functionistas is that functional code is easy to comprehend and debug. Lemme' tell ya, bud, I've been a dozen lambdas deep trying to figure out behavior and this whole "functional code is stateless," is more full of crap than an Oklahoma feedlot at slaughter time.</p>
<p>Functional programs have every flutter of state that an imperative program has, just <em>not in any convenient stackframe</em>. Or -- and this is <em>awesome</em> to debug -- it's not <em>yet</em> in the stack frame -- what's in the stack frame is a bunch of goddamn function pointers and not-yet-enough parameters to call them. Sometimes the thing you're stuck on is a dozen lambdas down and it's <em>building</em> a goddamn function pointer that will calculate the parameters (Excuse me! I mean calculate <em>exactly one parameter</em>!) to another goddamn function pointer. Thank <em>heavens</em> you don't have to struggle with the mind-numbing complexity of an <code>if</code> branch ("Oh my God! The code <em>could</em> go this way or it might go <em>that</em> way! What kind of cephalopodic mind could comprehend this tangle‽").</p>
<p>And don't get me started on compilation speed. I <em>love</em> this idea that the "compiler finds certain errors." What they don't say "And it does this in a mere several minutes. So don't worry about missing one of those show-stopping narrowing conversions! We'll take a look at it <em>every goddamn time</em> you want to fix a typo in a different source file."</p>
<p>But, nonetheless, there are a <em>few</em> things that the FP world does that actually make sense once you machete away all the obfuscatory mathematical rigor.</p>
<h2>Maybe Something Functional Does Right</h2>
<p>The biggest practical thing, on a day-to-day basis, is that functional code doesn't have to deal with <code>null</code> values. If you have some complex object that may-or-may-not initialize properly (let's say a camera which may or may not be available on your phone), you are probably used to writing code that looks more or less like this:</p>
<div class="highlight"><pre><span></span><code><span class="k">var</span><span class="w"> </span><span class="n">theCamera</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AttemptCameraInitialization</span><span class="p">();</span>
<span class="k">if</span><span class="p">(</span><span class="n">theCamera</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb nb-Type">null</span><span class="p">){</span><span class="w"> </span>
<span class="w"> </span><span class="n">DealWithNoCamera</span><span class="p">();</span><span class="w"> </span>
<span class="p">}</span><span class="k">else</span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">aPhoto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">theCamera</span><span class="o">.</span><span class="n">TakePhoto</span><span class="p">();</span>
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="n">aPhoto</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb nb-Type">null</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">DealWithNoPhoto</span><span class="p">();</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="err">…</span><span class="n">etc</span><span class="err">…</span>
<span class="p">}</span>
</code></pre></div>
<p>Or maybe:</p>
<div class="highlight"><pre><span></span><code><span class="n">try</span><span class="p">{</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">theCamera</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">AttemptCameraInitialization</span><span class="p">()</span>
<span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">aPhoto</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">theCamera</span><span class="o">.</span><span class="n">TakePhoto</span><span class="p">();</span>
<span class="p">}</span><span class="n">catch</span><span class="p">(</span><span class="n">npe</span><span class="p">){</span>
<span class="w"> </span><span class="n">DealWithNullPointerException</span><span class="p">(</span><span class="n">npe</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>
<p>And while the <code>try-catch</code> style isn't nearly as wordy as the constant-error-checking style, it's a little harder to debug and good coding style says that one ought not to rely on exceptions to deal with common alternatives. Contrast this with what one might see in the functional world (exact names and syntax differ between functional languages, so I'll use Scala, whose Klingon-y parts can be swept under the rug, and can actually be comprehended by humans):</p>
<div class="highlight"><pre><span></span><code> val theCamera = AttemptCameraInitialization();
val thePhoto = theCamera.TakePhoto();
</code></pre></div>
<p>And <em>even if</em> there was a problem during <code>AttemptCameraInitialization()</code>, no exception would be thrown. Instead, <code>theCamera</code> would be represented by a <code>None</code> object and, when a function is called on a <code>None</code> object, that <code>None</code> object simply returns another <code>None</code>.</p>
<p>So this may look like no big deal with a couple lines of code, but if you have an <code>A</code> that has a <code>B()</code> function that returns a <code>B</code> that has a <code>C()</code> function that returns a <code>C</code> that…a <code>Y</code> that has a <code>Z()</code> function that returns a <code>Z</code>, you can write code like:</p>
<div class="highlight"><pre><span></span><code><span class="k">var</span><span class="w"> </span><span class="n">myZ</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">a</span><span class="o">.</span><span class="n">B</span><span class="p">()</span><span class="o">.</span><span class="n">C</span><span class="p">()</span><span class="o">.</span><span class="n">D</span><span class="p">()</span><span class="o">.</span><span class="err">…</span><span class="o">.</span><span class="n">X</span><span class="p">()</span><span class="o">.</span><span class="n">Y</span><span class="p">()</span><span class="o">.</span><span class="n">Z</span><span class="p">();</span>
</code></pre></div>
<p>Which is much more readable than putting a bunch of checks-for-null between every method. And in this situation, you just are ploughing along nicely through your functions until one returns a <code>None</code>, in which case every function subsequent to that returns a <code>None</code>. (So how much fun is it when you've stepped your debugger up to that <em>one line</em> of code? But put that aside for now…)</p>
<p>So, talk to a functional guy about what's going on and <strong>BOOM</strong> he drops the "M" word. Of all the gatekeeper-words in the mystical arcana that guard the entrance to the D&D den where all the cool functional kids are hanging, none has the power of "Monad." It evens <em>sounds</em> like something that Gandalf would warn you about: "Beware the realm of endofunctors, for there, monoids become monads!"</p>
<p>Lemme' tell ya', I've been There and Back Again and monads are no big deal. They're just goddamned parameterized types with a handful of easy semantic rules. Seriously. That's <em>it</em>. The reason that they're confusing is that the semantics are so stupidly underwhelming that you keep thinking "Yeah, okay, but what <em>else</em>?" It's like the gate to your vast underground treasure-city being guarded by the word "friend," a fact which is conveniently documented on the transom.</p>
<h2>Anything Monads Can Do, Inheritance Can Do Better</h2>
<p>So how are we gonna' do this? Easy! Let's say we start with a couple classes that look like this:</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="n">Camera</span>
{
<span class="n">Photo</span> <span class="n">TakePhoto</span>() { … <span class="n">etc</span>…}
}
<span class="k">class</span> <span class="n">Photo</span>
{
<span class="n">Bitmap</span> <span class="n">GetImage</span>() { … <span class="n">etc</span>… }
<span class="n">Exposure</span> <span class="n">GetExposure</span>() { …<span class="n">etc</span>… }
…<span class="n">etc</span>…
}
</code></pre></div>
<p>All you have to do is define the interface to these objects, so that we can implement simple alternative "None" classes. <em>But</em> to help future maintenance programmers, we're going to use a little invention of mine called "Hungarian Monadic Notation" to indicate our intent:</p>
<div class="highlight"><pre><span></span><code>interface MMaybeCamera
{
MMaybePhoto TakePhoto();
}
interface MMaybePhoto
{
Bitmap GetImage();
MMaybeExposure GetExposure();
}
</code></pre></div>
<p>The way this works is that we indicate that a class or interface has this monadic intention by prefixing it's name with an "M". But because there are a lot of different monad patterns, you specify <em>which</em> monad in particular you're talking about as the next part of the name. So in this case we have <code>MMaybeCamera</code> indicating that we're looking at this particular pattern. Ditto for <code>MMaybePhoto</code> but you could also have, like, <code>MEitherPhoto</code> or <code>MStateCamera</code> etc. The possibilities are endless! And it's super-easy to do and doesn't introduce any of those stupid compilation errors!</p>
<p>Now that you've used HMN to name your interfaces, you just change your original implementations to implement the HMN interface:</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="n">Camera</span> : <span class="n">MMaybeCamera</span>{ … <span class="n">original</span> <span class="nb">code</span>… }
<span class="k">class</span> <span class="n">Photo</span> : <span class="n">MMaybePhoto</span> { …<span class="n">original</span>… }
</code></pre></div>
<p><em>But</em> in addition, you also implement the alternative "empty" objects:</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="n">NoneCamera</span> : <span class="n">MMaybeCamera</span>
{
<span class="n">MMaybePhoto</span> <span class="n">TakePhoto</span>()
{
<span class="k">return</span> <span class="nb">new</span> <span class="n">NonePhoto</span>();
}
}
<span class="k">class</span> <span class="n">NonePhoto</span> : <span class="n">MMaybePhoto</span>
{
<span class="n">MMaybeExposure</span>()
{
<span class="k">return</span> <span class="nb">new</span> <span class="n">NoneExposure</span>();
}
<span class="n">Bitmap</span> <span class="n">GetImage</span>()
{
<span class="nb">throw</span> <span class="nb">new</span> <span class="n">MonadException</span>(<span class="s">"This is a none,son."</span>);
}
}
</code></pre></div>
<p>Isn't that inspiringly clean code? When you call a function on a <code>None{x}</code> class, it just returns another new <code>None{y}</code> object! Or, when you need to break out a real class, you just throw a <code>MonadException</code>. (The details of <code>MonadException</code> are left as an exercise.)</p>
<p>Naturally, you kick this all off with a <code>MMaybeCameraFactory</code> to initialize your original <code>MMaybeCamera.</code></p>
<h2>Future Work</h2>
<p>Although Hungarian Monadic Notation and it's implementation patterns are agile best practices worthy of the enterprise, it's true that there's a certain amount of boilerplate code that's associated with implementing each of the functions in the base interface.</p>
<p>In a future post, we'll cover the answer:</p>
<p><strong>Reflux: The Monadic Reflection Dependency Injection Framework</strong></p>Literate Programming from HTML2013-03-17T16:19:00-10:002013-03-17T16:19:00-10:00larrytag:knowing.net,2013-03-17:/posts/2013/03/literate-programming-from-html/<p>OK, let's see if this works...</p>
<p>This is the basic structure of the "Hello, World!" program in C#:</p>
<div class="highlight"><pre><span></span><code>using System;
class Hello
{
<getchunk id="Main"/>
}
</code></pre></div>
<p>where the <code>Main</code> chunk is defined as :</p>
<div class="highlight"><pre><span></span><code>static void Main()
{
Console.WriteLine("Hello, World!");
}
</code></pre></div>
<h2>C# Command-Line Extraction</h2>
<p>And if you <a href="https://github.com/lobrien/MTangle/">clone my Github repository</a>, you …</p><p>OK, let's see if this works...</p>
<p>This is the basic structure of the "Hello, World!" program in C#:</p>
<div class="highlight"><pre><span></span><code>using System;
class Hello
{
<getchunk id="Main"/>
}
</code></pre></div>
<p>where the <code>Main</code> chunk is defined as :</p>
<div class="highlight"><pre><span></span><code>static void Main()
{
Console.WriteLine("Hello, World!");
}
</code></pre></div>
<h2>C# Command-Line Extraction</h2>
<p>And if you <a href="https://github.com/lobrien/MTangle/">clone my Github repository</a>, you can:</p>
<div class="highlight"><pre><span></span><code>$<span class="w"> </span>mono<span class="w"> </span>mtangle.exe<span class="w"> </span>MyWordPressPage.html<span class="w"> </span>HelloWorld
using<span class="w"> </span>System<span class="p">;</span>
class<span class="w"> </span>Hello
<span class="o">{</span>
static<span class="w"> </span>void<span class="w"> </span>Main<span class="o">()</span>
<span class="o">{</span>
<span class="w"> </span>Console.WriteLine<span class="o">(</span><span class="s2">"Hello, World!"</span><span class="o">)</span><span class="p">;</span>
<span class="o">}</span>
<span class="o">}</span>
You<span class="w"> </span>can<span class="w"> </span><span class="nb">read</span><span class="w"> </span>a<span class="w"> </span>poorly-written<span class="w"> </span>bootstrapping<span class="w"> </span>explanation<span class="w"> </span>here.
</code></pre></div>The Gray2012-12-26T09:09:00-10:002012-12-26T09:09:00-10:00larrytag:knowing.net,2012-12-26:/posts/2012/12/the-gray/<p>Spoiler alert.</p>
<p>Not that you care. <a href="https://kotaku.com/spoiler-alert-people-like-spoilers-5830092">Scientists at UCSD have shown</a> that people actually <em>prefer</em> stories when they have advance knowledge of the plot twists. Maybe movie companies have figured this out, because the trailer for The Gray has the final two shots of the movie in it. Not, mind …</p><p>Spoiler alert.</p>
<p>Not that you care. <a href="https://kotaku.com/spoiler-alert-people-like-spoilers-5830092">Scientists at UCSD have shown</a> that people actually <em>prefer</em> stories when they have advance knowledge of the plot twists. Maybe movie companies have figured this out, because the trailer for The Gray has the final two shots of the movie in it. Not, mind you, the final stunt, like in "Mission: Impossible" where the trailer featured (SPOILER ALERT!) Tom Cruise being flung from the exploding helicopter onto the train, which I always thought was the ultimate in bad-faith -- but the final two <em>shots</em> of the movie. So (SPOILER ALERT!) you never see Liam Neeson go mano-a-mano with the alpha wolf. You know, like <em>was promised</em> in the damn trailer when they showed Liam Neeson with the mini booze bottles strapped to his knuckles and growling. CUT TO BLACK, ROLL CREDITS. Yeah, that's the end of the damned movie.</p>
<p>No pata-a-bottelo fight between Liam Neeson and the Wolf King. Which isn't gray. It's black. Wait! The Gray isn't the wolf! It's Liam! He's morally ambiguous! Or middle-aged! Or, subsequent to standing against the wolf-king, will return as Liam the White! No, that's not it. Let's go for morally ambiguous. Yeah, that's it. "The Gray" isn't about the battle out there, or out there, it's about in here (point at head)… And the battle in here (point at heart).</p>
<p>It's also about how very, very ominous coughing is. Maybe the whole movie is a dream of a man dying in a tuberculosis ward. That would make about as much sense as the purported plot, which is that Liam is a wolf-sniper for a let's-say-oil-company on Alaska's North Field. Liam dreams of lying beside his wife, who died of let's-say-cancer, and who tells him not to be afraid. But Liam is afraid, as he tells Diaz-The-Hard-Case. Liam says "Any man who isn't afraid is a liar, or a damn fool." Actually John Wayne said that in "Sands of Iwo Jima" but Liam says something awfully similar. And then he alpha-rolls Diaz-the-Hard-Case, pisses on him, and the Wolf King realizes that there are two Wolf Kings afoot North of the Wall. And There Can Be Only One!</p>
<p>Or maybe there are, like, <em>dozens</em> of Wolf Kings. Because after Liam survives falling out a jet (soft snow) and puts together a rag-tag band of misfit survivors (a hard case, a philosopher, a couple guys in red shirts, and a token black dude) Liam explains that they can't stay at the wreck site, what with its shelter, supplies, and attraction to rescuers. No, they must "wait until sunrise, figure out which way is South, and walk to help." Which makes sense because, obviously, if you're so deep in the Alaska backcountry that the company just writes off jet crashes (they actually say that -- "What do they care? Do you know how much payroll they save by letting us die?") then <em>obviously</em> the smart thing to do is hike to Anchorage.</p>
<p>Which is smart, too, because the plane crashed within the "kill radius" of a wolf den -- the radius around a den in which wolves kill all living things…</p>
<p>OK, so at this point in the movie I told myself "OK, fine, it's not Alaska. It's Ice Planet Zebulon and they aren't wolves, they're Shark-Wolves. And, you know, I'm going to ignore the business about it being cold but no one putting their hood up or even zipping up their damn parkas. It'll be <em>fine</em>. Trust in Liam."</p>
<p>…So they walk. They walk miles and miles. They walk so far that Diaz-the-Hard-Case becomes Walt Whitman and accepts his fate as Meal #8 for… Well, apparently the Wolf King and his pack. Or maybe it's another one, because not only have they walked miles and miles and left the "kill radius," they've scaled a cliff separating them from the tundra.</p>
<p>Which brings us to the cliff scene. No, screw it. I can't even try to back-project logic, physics, and continuity onto that sequence. There's a cliff. They get down the cliff. They keep going. The wolves continue to attack. So apparently the wolves got down the cliff, too. Presumably also by jumping into trees and then climbing down them. Or maybe at the end they're battling a different pack of shark-wolves.</p>
<p>But I'm going to assume they're battling the same wolf pack and the same alpha Shark-Wolf. The movie doesn't have the courage of its faux-Existentialist convictions to present "Well, actually it's just shark-wolves all the way down." No, no, there is an alpha Shark-Wolf King and eventually, <em>eventually</em> Liam must confront it.</p>
<p>Personally, I expected Liam to bottle-punch the Wolf King to death and then stand, bloodied and alone, in a ring of wolves who approach and slowly herd him into their den where they lick the blood off him and submit to him as the new Alpha Shark-Wolf. Now <em>that</em> would have been an ending.</p>
<p>But no. Cut to black, roll credits.</p>
<p>We don't need to see the battle, apparently, because we already know all that we need to know: Liam has journeyed through the existential tundra and re-engaged with life. We know this because of the poem he recites before doing battle. "Just four lines," he says. Written by his Da. Who stole the first line from Shakespeare and ran out of ideas on the third, so he just repeats it.</p>
<blockquote>
<p>Once more into the fray.<br>
Into the last good fight I'll ever know.<br>
Live and die on this day.<br>
Live and die on this day.</p>
</blockquote>
<p>What a piece of crap.</p>
<p>Devin says that "The Gray" is a movie to be compared to "Anaconda." Slander. You want a poem? Here's just an example of the treasures in Anaconda:</p>
<blockquote>
<p>They strike, wrap around you;<br>
Hold you tighter than<br>
Your true love. And you<br>
Get the privilege;<br>
Of hearing your bones;<br>
Break 'fore the power;<br>
Of the embrace;<br>
Causes your veins to 'xplode. </p>
</blockquote>
<p>And that's <em>way</em> before the Anaconda pukes up Jon Voigt whole. And you can be damn sure they didn't show <em>that</em> in the trailer.</p>Reviewed 4 Stars: Lost at Sea, The Jon Ronson Mysteries2012-11-19T08:16:00-10:002012-11-19T08:16:00-10:00larrytag:knowing.net,2012-11-19:/posts/2012/11/reviewed-4-stars-lost-at-sea-the-jon-ronson-mysteries/<p><a href="https://www.goodreads.com/book/show/15737151-lost-at-sea"><img alt="Lost At Sea: The Jon Ronson Mysteries" src="http://d.gr-assets.com/books/1346292925m/15737151.jpg"></a><a href="https://www.goodreads.com/book/show/15737151-lost-at-sea">Lost At Sea: The Jon Ronson Mysteries</a> by <a href="https://www.goodreads.com/author/show/1218.Jon_Ronson">Jon Ronson</a><br>
My rating: <a href="https://www.goodreads.com/review/show/459278663">4 of 5 stars</a></p>
<p>Highly recommended. Ronson returns to the form of "Them," and "The Men Who Stare At Goats," in this collection of humorous journalistic essays. His last book, "The Psychopath Test," was a little one-note and …</p><p><a href="https://www.goodreads.com/book/show/15737151-lost-at-sea"><img alt="Lost At Sea: The Jon Ronson Mysteries" src="http://d.gr-assets.com/books/1346292925m/15737151.jpg"></a><a href="https://www.goodreads.com/book/show/15737151-lost-at-sea">Lost At Sea: The Jon Ronson Mysteries</a> by <a href="https://www.goodreads.com/author/show/1218.Jon_Ronson">Jon Ronson</a><br>
My rating: <a href="https://www.goodreads.com/review/show/459278663">4 of 5 stars</a></p>
<p>Highly recommended. Ronson returns to the form of "Them," and "The Men Who Stare At Goats," in this collection of humorous journalistic essays. His last book, "The Psychopath Test," was a little one-note and more judgmental, while this collection travels broadly and shows Ronson in a variety of moods. Ronson's best book remains "Them," but I enjoyed every essay in "Lost at Sea." An easy-to-read book with bite-sized essays perfect for the treadmill/exercycle.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>How does Ravelry make money?2012-11-19T06:00:00-10:002012-11-19T06:00:00-10:00larrytag:knowing.net,2012-11-19:/posts/2012/11/how-does-ravelry-make-money/<p>Ravelry is a profitable 4-person company, a "lifestyle business". This model is of little interest to venture capitalists but is, I think, very appealing to most people dreaming about their own business:</p>
<p>Unraveled » Blog Archive » How does Ravelry make money?.</p>Geek Cred Milestone: Stack Overflow Top 9%2012-11-13T09:44:00-10:002012-11-13T09:44:00-10:00larrytag:knowing.net,2012-11-13:/posts/2012/11/geek-cred-milestone-stack-overflow-top-9/<p><a href="/uploads/2012/11/Screen-Shot-2012-11-13-at-9.40.40-AM1.png"><img alt="" class="alignleft size-full wp-image-5472" height="86" src="/uploads/2012/11/Screen-Shot-2012-11-13-at-9.40.40-AM1.png" title="Screen Shot 2012-11-13 at 9.40.40 AM" width="482"></a></p>Why I've Joined Xamarin2012-11-05T10:21:00-10:002012-11-05T10:21:00-10:00larrytag:knowing.net,2012-11-05:/posts/2012/11/why-ive-joined-xamarin/<p>Today is my first day at my new employer, Xamarin, sponsors of the Mono project and developers of MonoTouch and Mono for Android. Mobile cross-platform C#: long-term readers will probably see why this is the perfect job for me. (Well… short of a gig doing AI on a robot submarine …</p><p>Today is my first day at my new employer, Xamarin, sponsors of the Mono project and developers of MonoTouch and Mono for Android. Mobile cross-platform C#: long-term readers will probably see why this is the perfect job for me. (Well… short of a gig doing AI on a robot submarine with an indoor Ultimate Frisbee field, but Larry Ellison tells me that will have to wait until he <a href="https://www.huffpost.com/entry/larry-ellison-lanai-hawaii_n_1941138">builds enough infrastructure in Lanai</a> to support both his lair and a submarine pen.)</p>
<h2>Tears in the Rain</h2>
<p>Mobile is huge: Duh. But I've seen things: CDC Cybers eating punch cards on Route 128 in 1982; B-trees rendering South of Market in 1995; <a href="https://www.youtube.com/watch?v=YOphFl88U-g">Attack ships on fire off the shoulder of Orion</a>.</p>
<p>Our industry has the wonderful characteristic of restructuring itself regularly. This is married with the not-as-wonderful characteristic of pitiless obsolescence of skills and strategies. The publishing company I worked for in the early 90s was more than 100 years old, had 90% of the market in software development ads, and was utterly incapable of adapting to the Web: they're gone (but not <a href="http://www.gamasutra.com/topic/game-developer">Game Developer!</a> ). I've known developers whose livelihoods were tied to Visual Basic, or dBase, or COBOL and who sat out a restructuring because their companies or clients "could never afford to rewrite" their codebases to accommodate the new market. Let me tell you one of the few things about the software business I've learned: the market wants software that runs on their new hardware and has the native user experience. And if your company doesn't provide that, either your competitor or some startup will.</p>
<h2>Some Tools I've Known</h2>
<p>My first multi-month programming job tracked article submissions through the peer-review process of a journal of Marine Biology. I programmed it in a database language called Paradox, which was from a company called Ansa. At the time, most people doing that kind of development were using Ashton-Tate's dBase, but Paradox was a better tool: it had a GUI drawn with ANSI characters that allowed you to look at your data and application in different ways and it had something called Query By Example that was just <em>awesome</em>. The tool was key to the win. (Ansa was eventually bought by Borland, which also ended up buying Ashton-Tate, but that's a whole other story.)</p>
<p>A little later, when I was 25, I was hired as Product Review Editor for <em>Computer Language</em> and <em>AI Expert</em> magazines. This solidified my belief that tools matter. I knew that "object-oriented programming" was The Next Big Thing. So I broke the shrink-wrap on a copy of Digitalk's Smalltalk/V 286 (as in 80286, because I had the fastest damn computer in Miller Freeman). It took me a little while (and exposure to C++) to "get" OOP, but <em>holy crap</em> was Smalltalk a tool that <em>clearly</em> was vastly more powerful than any IDE that I'd seen before (it took until the 2000s until mainstream IDEs had comparable navigation and even now, I miss the scratchpad-like capabilities).</p>
<p>Again and again I've seen it played out: moving from translator-based C++ to native-compilation gave Zortech and Borland developers an advantage, IntelliJ's IDEA IDE gave Java developers an advantage, Raima had high-performance NoSQL before the term was coined, etc. <em>Tools matter.</em></p>
<p>A few years ago, when I programmed my first commercial iPhone App, I chose to use MonoTouch. Why? First, to be honest, simple familiarity: I know C#. But the <em>reason</em> why I know C# as well as I do is due to its merits: I think it's the best-designed of the mainstream languages. I don't think it's <em>ever</em> been correct to call C# a "clone" of Java but it's certainly not correct now. While the evolution of Java languished, C# not only evolved, it advanced in a directed and strategic manner: lambdas, LINQ, type inference, and the new async semantics are tools that work together powerfully: they aren't random features but instead are pragmatic implementations of the sometimes-obscure functional programming world.</p>
<p>It turned out that C# and MonoTouch were <em>great</em> tools for programming iOS. Although MonoTouch binds Objective-C APIs so they "look right" to C# developers (<code>object.Method(arg, arg)</code> not <code>object method: arg:</code>) you still <em>use</em> the native APIs. So existing Obj-C and iOS documentation and examples make perfect sense: you can still rely on excellent resources like Erica Sadun's excellent "iPhone Developer's Cookbook" with hardly a pause.</p>
<p>And the resulting application runs at native speed and <em>looks like</em> a native application because it <em>is</em> a native application.</p>
<h2>It Takes A Village</h2>
<p>I didn't make a fortune on my Kailua Kona tour-guide application. I did have very predictable sales: 1 per day at \$2. The good thing about my sales is that they were so pitiful that it was clear that there was no business model: a tour-guide framework targeting cruise ship shoregoers is no Angry Birds.</p>
<p>But other people have had better fortune and a thing you quickly learn about the MonoTouch community is how friendly they are: the #monotouch room at irc.gnome.org is incredibly helpful and there are always very experienced developers hanging out there.</p>
<p>Even more importantly, I think that the Mono community has a special feel and it's this, more than anything else, that makes me so incredibly excited about joining. Although Mono is an implementation of a Microsoft-controlled technology stack, the Mono community is different than the Microsoft community. Microsoft has great people and some of the best minds in software, but I think that the Mono community benefits from being smaller: it's nimbler and more personal. I think it's more excited and more exciting. I think its technology is great and I think its strategy is great. A shorthand that some of you will get is that I imagine that this is what it must have felt to be at Borland in the mid-80s.</p>
<h2>More Words tk</h2>
<p>I will be working on the documentation team, particularly API docs for iOS. In other words, drinking the ocean. We want to make the MonoTouch programming experience as clear and straightforward as possible and that means not only thorough and accurate documentation, but clear and, dare I say it?, enjoyable. My inspiration is, again, the Borland documentation of the 1980s, when there was the sense that everyone -- the company, the users, and the "gurus" -- was exploring the brave new world together.</p>
<p>Hopefully my job will spin off more blogposts on this site -- probably things that aren't directly related or that are too opinionated for official docs. I've also talked to my Editors at SD Times and Dr. Dobb's and it looks like I'll continue my "Codewatch" column and be able to continue as a <a href="http://www.drdobbs.com/joltawards">Jolt Award</a> judge in certain categories.</p>
<p>I'll continue to post inane babble on Twitter at \@lobrien and possibly-helpful answers on Stack Overflow. Otherwise, you can always contact me at lobrien\@knowing.net or… larry.obrien\@xamarin.com</p>Aloha Gemini2012-10-17T11:25:00-10:002012-10-17T11:25:00-10:00larrytag:knowing.net,2012-10-17:/posts/2012/10/aloha-gemini/<p>Today, after 2 years, I am moving on from Gemini Observatory, where I worked as a Senior Software Engineer. Unlike most departures, this one comes with very little drama; it's more a case of wistful "well, that didn't work out." This is the second time in my life that I …</p><p>Today, after 2 years, I am moving on from Gemini Observatory, where I worked as a Senior Software Engineer. Unlike most departures, this one comes with very little drama; it's more a case of wistful "well, that didn't work out." This is the second time in my life that I have worked for a few years in a scientific operation and the second time that I've walked away.</p>
<p>Scientific organizations, I've come to learn, tend to be very conservative in their organizations and processes, as their funding is, at best, fixed and, more commonly, forever under a cloud of looming budget cuts. Also, they have byzantine governance structures and audits and restrictions: at Gemini there was a foo-faraw because they bought a few automated coffee machines with government funds and we had to switch to a \$5-per-month coffee club to pay for the same. Yeah, that's where the waste in government is: astronomers drinking coffee. (I'm sure the cost of the bureaucrats reviewing, chastising, and correcting this egregious waste was many multiples of the yearly coffee costs of the entire observatory.)</p>
<p>It's not that the structure is egregiously wrong or stupid: it's perfectly logical. But after spending most of my career in the world of startups and entrepreneurs, it's an irritant to see an organization that spends effort perpetuating the status quo. And it's a shame when an organization full of brilliant people spends their intellectual capital on incremental improvements and not on higher-risk, high-payoff ventures. The Big Island of Hawaii is home to 13 observatories and the amount of code shared between them is virtually zero: there's no Open Source initiative between the observatories. On "astronomy row" in Hilo, I imagine that I had three or four colleagues working on the exact same problems that I was solving. Oh well.</p>
<p>I loved the people here: my team-mates were smart and engaged and it seemed like the right group to pull off a transformation, but it didn't pan out. Meanwhile, I learned that astronomers, as a rule, like to stay up late: an after-hours bar in Hilo would probably do great business. Also, more people on the island play board games than I dreamt possible and if there's one thing I'll miss, it'll be Tuesday night Battlestar Galactica / Civilization / Pandemic, etc.</p>
<p>So now I'm returning to the West Side of the island, Kona, and sunnier and dryer days. My relationship to astronomy will return to its old mode: hauling my 4" refractor up to 9000' on Mauna Kea on dark Saturday nights and staring at the rings of Saturn. But I'll be looking wistfully at the Adaptive Optics lasers piercing the sky at the summit and wondering what they're seeing next.</p>
<p>I'm <em>insanely</em> excited about my next position (details to come) but for the next 2 weeks I'll be traveling to the mainland to visit relatives and relax.</p>Astak Security DVR on Mac How-To2012-10-07T11:50:00-10:002012-10-07T11:50:00-10:00larrytag:knowing.net,2012-10-07:/posts/2012/10/astak-security-dvr-on-mac-how-to/<p>I have a security DVR purchased from Astak. It's software is Windows-only, using some proprietary plug-in, and although the DVR can FTP the .AVI files up to a server, they don't display on the Mac.</p>
<p>So, long-story short, this line will convert the format into an Apple-friendly .MP4:</p>
<div class="highlight"><pre><span></span><code>/opt/local …</code></pre></div><p>I have a security DVR purchased from Astak. It's software is Windows-only, using some proprietary plug-in, and although the DVR can FTP the .AVI files up to a server, they don't display on the Mac.</p>
<p>So, long-story short, this line will convert the format into an Apple-friendly .MP4:</p>
<div class="highlight"><pre><span></span><code>/opt/local/bin/ffmpeg -i "$1" -acodec libfaac -vcodec mpeg4 -flags +aic+mv4 "$1".mp4
</code></pre></div>
<p>I set the DVR to FTP to my always-on Mac server. On that server, I set up <a href="https://www.noodlesoft.com/">Hazel</a> to watch that folder and run the previous conversion shell script on the incoming .AVIs. I toss the .AVIs in the trash and move the .MP4 files into Dropbox, where they will synch up with me wherever I am (and, helpfully, provide me local notifications when the movies are created).</p>Because The Programming Language News Cycle Is 24-Hours2012-10-01T17:27:00-10:002012-10-01T17:27:00-10:00larrytag:knowing.net,2012-10-01:/posts/2012/10/because-the-programming-language-news-cycle-is-24-hours/<p>Lede with MSFT's unveiling of TypeScript today. Reiterate that it targets the Web and is a superset of JavaScript. Most importantly, mention Hejlsberg early, as he and Gosling are the only programming language designers that people have actually heard of. Refer to Dart, but don't bother to mention Bak or …</p><p>Lede with MSFT's unveiling of TypeScript today. Reiterate that it targets the Web and is a superset of JavaScript. Most importantly, mention Hejlsberg early, as he and Gosling are the only programming language designers that people have actually heard of. Refer to Dart, but don't bother to mention Bak or Bracha (no one's heard of them).</p>
<p>Well, duh, write a sentence about explicit typing. Throw in a brief digression on misapprehensions about strong vs. loose typing to establish your PLT bona fides. Don't go too deep, though, lest you run afoul of LtU. What the hell, mention Dart again. And, what the hell, mention Bak and V8.</p>
<p>But more importantly, tooling. Explain IntelliSense. To be sure, dynamic languages have promised the same. Regretfully point out lack of shipped IDEs.</p>
<p>Segue into Windows 8. Profoundly state that this is all about that. Get a paragraph out of the past year and the whole JavaScript vs .NET languages vs C++ thing.</p>
<p>Which segues perfectly back to Anders. Praise for several sentences, boldly say "shoe-in for Turing Award." Reiterate C#'s evolution and focus on mainstream programming, but really this is all just a setup to get to...</p>
<p>"Embrace and extend." History lesson. Java. Consent decrees. Everyone will skip this part.</p>
<p>Bring things up with a round turn, stating that "what's old is new again." Insightfully say that MSFT no longer has the influence that it used to. But hedge your bets by praising the intelligence and experience of their language division, just in case.</p>
<p>End with the admonition that time will tell. Leave with a call to action: tell the readers to try it themselves.</p>Whispersync Works2012-09-09T08:47:00-10:002012-09-09T08:47:00-10:00larrytag:knowing.net,2012-09-09:/posts/2012/09/whispersync-works/<p>Every week I drive across the Big Island, a distance of 86 miles each way. Audiobooks, which I'd never bothered with much before, turn out to be a very enjoyable way of dealing with the ride. There are two major disadvantages: "listening while driving" is not suited for deep attention …</p><p>Every week I drive across the Big Island, a distance of 86 miles each way. Audiobooks, which I'd never bothered with much before, turn out to be a very enjoyable way of dealing with the ride. There are two major disadvantages: "listening while driving" is not suited for deep attention and "listening while sitting on the couch staring blankly" is not appealing in the evening.</p>
<p>Amazon/Audible's new "Whispersync" feature goes a long way towards addressing these. It's an "it just works" feature that means that after listening to the audiobook (perhaps only with the Audible app) in your car, when you open the book with your Kindle (I've tested it with my Kindle hardware, with Kindle for Mac, and with Kindle for iPad) you get a message saying, e.g., "The furthest read page was 92 from iPhone 4S at 9:51. Go to that location?" And vice versa: when you open the Audible app post-Kindle you have the opportunity to move forward.</p>
<p>It seems to take no more than a few minutes for the updates to move through the cloud and you don't <em>have</em> to buy the book and the audiobook at the same time. (I mention that because I happen to have one book that I started with the audiobook, decided that I was too interested in getting through it to take it in 1.5 hour stretches in the car, and started reading it on the Kindle, and all of a sudden, it's Whispersynching.)</p>
<p>The downside is cost: You have to buy <em>both</em> the Kindle book and the Audible audiobook. Audible books are ridiculously expensive if you buy them one-off: \<span class="math">\(20+. Subscription prices can drive that down to \\)</span>10 per book, but only if you commit to two books per month, which is a lot of listening. But not, for me, a lot of reading.</p>
<p>At the <em>moment</em>, <a href="https://www.amazon.com/gp/feature.html/ref=kics_hp_dp_lm?ie=UTF8&docId=1000827761">Amazon is offering Whispersync-enabled audiobooks for \$3.95 or less</a>, which is a great deal and just about the perfect amount to entice me into "Oh sure, maybe I'll listen to that in the car." on all my fiction purchases. On the other hand, it destroys the value proposition of an Audible subscription, and I'm under the impression Audible is successful enough that Amazon is unlikely to want to gut it (yet). So my guess is that the low price of audiobooks is to introduce the feature. So snap them up while you can.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Thoughts on Atlantic article on Google Mapping2012-09-08T08:08:00-10:002012-09-08T08:08:00-10:00larrytag:knowing.net,2012-09-08:/posts/2012/09/thoughts-on-atlantic-article-on-google-mapping/<p>Good article: <a href="https://www.theatlantic.com/technology/archive/2012/09/how-google-builds-its-maps-and-what-it-means-for-the-future-of-everything/261913/">How Google Builds Its Maps—and What It Means for the Future of Everything - Alexis C. Madrigal - The Atlantic</a>.</p>
<p>Perhaps the most impressive thing is not that Google allocates human effort to the mapping project but that they combine very advanced algorithmics with that human effort and, perhaps …</p><p>Good article: <a href="https://www.theatlantic.com/technology/archive/2012/09/how-google-builds-its-maps-and-what-it-means-for-the-future-of-everything/261913/">How Google Builds Its Maps—and What It Means for the Future of Everything - Alexis C. Madrigal - The Atlantic</a>.</p>
<p>Perhaps the most impressive thing is not that Google allocates human effort to the mapping project but that they combine very advanced algorithmics with that human effort and, perhaps, they know how to slide that along as technology advances.</p>
<p>I think a decent part of Microsoft's "Lost Decade" is that even though they have amazing talents at MSR, they were staffed for the 90s and the Web explosion and, with all that PC-focused staff, there were blind to or unable to shift towards the rapid emergence of a post-PC landscape.</p>
<p>If you look at things like handwriting and speech recognition, Microsoft <em>had</em> huge advantages in the early 00s (especially handwriting recognition: Dragon/Nuance has always seemed to lead in speech, but MS' handwriting recognition was (is?) miles ahead). Had MS invested in combining their technological lead with human-intensive fine-tuning in the same way that Google invests in map-making, Microsoft could be reaping the benefits today, instead of being roughly at parity.</p>Please take my 10-question survey on developer productivity2012-08-28T03:00:00-10:002012-08-28T03:00:00-10:00larrytag:knowing.net,2012-08-28:/posts/2012/08/please-take-my-10-question-survey-on-developer-productivity/<p>Please take & RT my 10-question survey about opinions of developer productivity http://www.surveymonkey.com/s/39ZSHLD</p>Force Multipliers & Boilerplate Modules2012-08-27T09:08:00-10:002012-08-27T09:08:00-10:00larrytag:knowing.net,2012-08-27:/posts/2012/08/force-multipliers-boilerplate-modules/<blockquote>
<p>Ravi Mohan (\@ravi_mohan)<br>
8/26/12 10:46 PM<br>
Advanced languages (among other things ) are force multipliers. But if you are writing the n-th CRUD app you are multiplying by zero</p>
</blockquote>
<p>This very much fits into some of my opinions that have been firming up over the past couple …</p><blockquote>
<p>Ravi Mohan (\@ravi_mohan)<br>
8/26/12 10:46 PM<br>
Advanced languages (among other things ) are force multipliers. But if you are writing the n-th CRUD app you are multiplying by zero</p>
</blockquote>
<p>This very much fits into some of my opinions that have been firming up over the past couple months. A year of quite-deep immersion into real-world functional programming (Gemini Observatory made a strategic commitment to Scala last Summer for "high-level" software) has, as always, left me somewhat dissatisfied. As Ravi says, on the one hand I'm quite happy to assert that when facing an interesting algorithmic problem there is a "force multiplier" effect of having a good type system, easy-to-use higher-ordered functions, libraries, etc.</p>
<p>But, even at an observatory, "interesting algorithmic problem"s are not the core of the software developer's workweek. Instead, what we spend <em>most</em> of our time developing are aspects that relate to the database, UI, infrastructure, devops, and administration. Here, the "force multiplier" of a powerful language is, as Ravi says, multiplied by zero: this semi-boilerplate work is so well-understood that "tools that help you reason" give you no advantage and the burden they impose (importantly: edit-compile-confirm times of minutes) is significant.</p>
<p>Meanwhile, it's painful to pay software engineering rates (especially "software engineers who can solve interesting algorithmic problems" rates) for semi-boilerplate work. ~~I've been wondering if the answer is a shift towards API/Library production (using statically-typed "advanced" languages) as the primary software engineering deliverable and UX (using dynamically-typed "high productivity" languages) as a task for a separate~~ ... but it <em>isn't</em>. The idea of stratifying development, fiefdoms, etc., surely that's a bad idea...</p>Italy 20th Anniversary Trip Notes and2012-08-19T12:09:00-10:002012-08-19T12:09:00-10:00larrytag:knowing.net,2012-08-19:/posts/2012/08/italy-20th-anniversary-trip-notes-and/<h1>New York</h1>
<p><img alt="IMG_0181" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Going in to New York is slow. Even at 5PM all the traffic is in-bound. Seems thermodynamically impossible…Flipping the bird at Yankees advertisements…Dark And Stormies at a hipster bar where a dude in a bowler and arm gaiters played ragtime on an upright…Horseradish-infused vodka:</p>
<p><img alt="IMG_0296" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="373"></p>
<p>This …</p><h1>New York</h1>
<p><img alt="IMG_0181" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Going in to New York is slow. Even at 5PM all the traffic is in-bound. Seems thermodynamically impossible…Flipping the bird at Yankees advertisements…Dark And Stormies at a hipster bar where a dude in a bowler and arm gaiters played ragtime on an upright…Horseradish-infused vodka:</p>
<p><img alt="IMG_0296" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="373"></p>
<p>This was not necessarily my favorite drink in the whole world. It was made more harsh and bitter by the scorn heaped upon me by the sure-out-of-my-league-even-when-I-was-young-but-c'mon-do-you-have-to-still-be-mean? bartendress.</p>
<p>Wandering Midtown East…flipping birds at Trump advertisements… laughably pretentious Chinese bistro: 11 on a Tuesday, techno blaring, everyone ostentatiously checking their text messages in the bar, a serving area so dark that I could have <em>totally</em> broken out my Foster Grant lighted reading glasses…Seriously, I <em>have</em> had better dumplings… Art Deco 30 Rock … a rather strange amount of excitement at seeing the Today Show set through the windows…</p>
<hr>
<p>And as we shopped, the treadle wheel spun, the only sound in the hushed shrine of textile… Stainless steel thread …</p>
<p><img alt="IMG_0202" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p>The High Line</p>
<p><img alt="IMG_0212" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Mediocre pizza…Colorful cab driver "Gotta' let the road rage go." …</p>
<p>Brooklyn Bridge</p>
<p><img alt="IMG_0233" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>TIL the Brooklyn Bridge is held together with duct tape</p>
<p><img alt="IMG_0227" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_0235" height="190" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Glimpses of new World Trade …</p>
<p><img alt="IMG_0234" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p>O'Brien's & Arnolds</p>
<p><img alt="DSC_8252 - Version 2" height="238" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Croquet was once an Olympic sport</p>
<p><img alt="DSC_8261" height="171" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_8265" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_8280" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_8267" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p>Teens are excellent at looking dubious when the camera is upon them…</p>
<p><img alt="DSC_8268" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="333"></p>
<p><img alt="DSC_8257" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_8306" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_8323" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p>Oh, Daisy!</p>
<p><img alt="DSC_8328" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>No wires</p>
<p><img alt="DSC_8298" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p>Bye Jake!</p>
<p><img alt="DSC_8297" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<h1>Rome</h1>
<p>I expected it to be hilly, but it's really quite flat. Our first glimpse of Roman building the colossal brick walls of Hadrian's Baths.</p>
<p>Hotel in Rome just down the via from the Colosseum</p>
<p><img alt="IMG_0329" height="320" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="240"></p>
<p><img alt="IMG_0335" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<h1>Vatican</h1>
<p>Absolutely brutal on the feet. Feet tingling. Massive walls.</p>
<p>The line to get in ran around the country.</p>
<p><img alt="IMG_0346" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p>Crowds, especially in the halls leading towards the Sistine Chapel (including a fantastic map room). Gilded ceilings.</p>
<p><img alt="DSC_8427" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Sistine Chapel: packed. Guards shouting out "Quiet!" The ceiling was fine, but The Last Judgment was awesome. A few patches on the unrestored/cleaned ceiling showed how dim and subdued it all was until recently.</p>
<p>St. Peter's is the most impressive building I've ever been in. 30' sculptures that seem absolutely fine in proportion to the pillars that are inlaid with every form of marble.</p>
<p><img alt="IMG_0440" height="157" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_0408" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="374"></p>
<p>St. Peter's Piazza not as impressive as I thought, perhaps because it was so large and the crowds so big.</p>
<p><img alt="DSC_8475" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>4/26</p>
<p>Colosseum: much bigger than expected. Gladiators shilling for tourists and working their digital cameras .</p>
<p><img alt="DSC_8515" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>People bring their nice cameras to the C. Worthless guided tour at C.</p>
<p><img alt="DSC_8514" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Hard to get past the "Oh yeah, it looks just like the pizza box" aspect. (Not as bad as Leaning Tower…)</p>
<hr>
<p>Forum more compact than expected, barely a neighborhood.</p>
<p><img alt="IMG_0521" height="180" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_0531" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>The Vestal Virgins had a lovely temple.</p>
<p>Saw a falcon at forum</p>
<p>Scale of building is definitely comparable to industrial age</p>
<p><img alt="IMG_0511" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>The Sabines were just on the next set of hills down the road. So the whole "Rape of the Sabines" wasn't exactly the Trojan war, it was more like a really nasty Hatfields and McCoy thing.</p>
<hr>
<p>Street vendors sweeping up their goods 20 yards in front of police. They rush away, cutting down staircases and into alleys, and then, three minutes later, creep back out. First one bold one and then all the others quickly. Kind of like fiddler crabs on the beach.</p>
<hr>
<p>Tina liked her crispy piglet. I liked my peepee cachi pehpey.</p>
<p><img alt="IMG_0575" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p>Rougher walking than Inca Trail.</p>
<p><img alt="IMG_0723" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="365"></p>
<p><img alt="DSC_8544" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Sculptures are gorgeous -- 500BC wounded amazon</p>
<p><img alt="IMG_0567" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="282"></p>
<p><img alt="IMG_0546" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p>Revealing exhibition on centrality of Vatican: document after document showing role in events: trial of Templars , excomm of Martin Luther , divvying up world for Isabella, petition to allow Henry divorce. Seals attached to letters. Birchbark letter from Algonquin. Safe passage from Khan.</p>
<hr>
<p>Throngs of tourists at major piazzas and fountains. But nightlife at our local piazza. Thursday 11pm, 100 people cocktail party.</p>
<p><img alt="DSC_8532" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_0722" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p>Everyplace feels safe. [But eventually we were targeted by pickpockets in Florence…]</p>
<hr>
<p>The disparity of time: is that door 20, 200, 1000 years old?</p>
<hr>
<p>So many architectural references -- all copied elsewhere .</p>
<hr>
<p>4/27</p>
<p>Sirens sound cool. Wish US sirens sounded like this.</p>
<hr>
<p>Borghese villa -- Bernini great, house itself, Titian. Parrots in the park</p>
<hr>
<p>Swifts through oculus and in square.</p>
<p><img alt="IMG_0725" height="139" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Pagliacci at Pantheon with Mars overhead. And a mime.</p>
<p><img alt="IMG_0715" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p>St. Peter's more "awesome" but Pantheon my favorite building. Geometrical. Apparently the dome at St. Peter's is bigger, but proximity helps at Pantheon.</p>
<hr>
<p>Few chain stores</p>
<hr>
<p>4/28</p>
<p>You think things like "ah, a lugubrious totem of death."</p>
<p><img alt="IMG_1568" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p>Rome is a midden of western civilization, the heap visible in the foundations of more modern buildings. Everywhere you see a hill, you see arches dating to some era of brick. Certainty beyond that is not available to the lay. Every architectural cliche seems to have been born here, from the facade flanked by columns to the carved coat of arms above the entrance. So when you see a bronze door flanked by columns, it could be 20 years old or 200 or even, at least in the forum, 2000.</p>
<hr>
<p>Perhaps because the Colosseum is so well preserved, it was the least interesting. Every sports stadium shares it's design and even many of its details. Yes, this is what the outer galleries are like, this is where they sold t-shirts, this was where the crowd queued on the way in, catching their first glimpse of the action below. The main difference seems to be that their stairs were steeper, their benches wider, and their seeming lack of regard for handrails.</p>
<hr>
<p>The great buildings -- the Colosseum, the Pantheon, the mall in the forum -- are as colossal as industrial-age</p>
<hr>
<p>Rome brutal on the eyes and soft tissues -- had to pull my contacts.</p>
<p><img alt="IMG_0573" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>The primacy of the Church is everywhere.</p>
<p><img alt="IMG_0672" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_0747" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p>For whatever reason, the Baroque stuff is not as off-putting as it is in other places. Doesn't seem vulgar. Maybe that's more the Rococo-era?</p>
<p><img alt="IMG_0750" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="374"></p>
<p><img alt="IMG_0810" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_0811" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="376"></p>
<p><img alt="IMG_0814" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<h2>Assisi</h2>
<p><img alt="DSC_8595" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>At least in Rome the crowds are fitting to the theme. At Assisi, the crowds are more oppressive. But the souvenir quality is appreciably higher.</p>
<p><img alt="IMG_0908" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="304"></p>
<hr>
<p>You can buy morningstars here. Real, honest-to-goodness helm-piercing spiked-steel-ball flails. Not sure if TSA approved.</p>
<hr>
<p>Assisi on a Sunday night is weirdly raucous. Kids screaming and shouting and playing soccer. Camping trip? On a Sunday?</p>
<p><img alt="IMG_0923" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>5/1</p>
<p>There is a turtle (tortoise I suppose) wandering between tracks 6 & 7. The tracks are taller than he is. Has he lived his whole life in this narrow track?</p>
<hr>
<p>Surprising (amazing ) lack of suburban sprawl. Heart of Europe yet big stretches of, say, 50 acre farms, woods, and hills with small castles on them. The castles are so iconic that when I first saw them, I thought they were recreations.</p>
<hr>
<p>Siena: not terribly well preserved, but the street plan is charmingly complex, circular and divided into the commune's neighborhoods (goose, owl, etc). The piazza where they run the palio is quite bowl-shaped, which perhaps helps the horses. The photos from the race show horses banked like fighter planes.</p>
<p><img alt="DSC_8729" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_8745" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p>The cathedral is white-and-black striped and that thrilled T, but I liked most the marble inlaid floor panels, which had a great effect, like a vast etching. The chapel had a great mosaic and there was a room of illuminated manuscripts that, later, I found out to be the basis of many calendars.</p>
<p><img alt="IMG_0940" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_0970" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>A fine meal of rabbit with truffle pasta. Eventually, I had all types of truffle; I decided that it's a little too rich for me. It's great and then you're like "Oh my god, if I have another mouthful of this I'm going to hurl." (I suppose most people don't think that.)</p>
<p><img alt="IMG_0998" height="285" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<h1>Florence</h1>
<p>For all their greatness, English pubs have those damn regulators on their alcohol bottles. You go to Italy and go into an Irish pub and order a mixed drink and you get a drink of stunning strength. In other words, I recommend going into an Irish pub in Italy.</p>
<hr>
<p>Throw a dead body in here and it will rot all the way to Pisa.</p>
<p><img alt="IMG_1021" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Just dandy.</p>
<p><img alt="IMG_1035 - Version 4" height="292" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Empirical perspective Giotto -- early. Compare to mathematical basis of computation.</p>
<hr>
<p>Tina loved walking up Brunelleschi's dome. I did not. Big time vertigo; it's like you think you're suddenly going to pitch over.</p>
<p><img alt="IMG_1157" height="480" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="320"></p>
<p><img alt="IMG_1123" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1140" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_1159" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_1162" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p>I think this was one of the highlights of the trip for T. I had to glance sideways at everything, my shoulders up around my ears. Oh well.</p>
<p><img alt="IMG_1181" height="372" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Uffizi shakes like earthquake.</p>
<hr>
<p>Tina should do a painting called "The adoration of the adoration of the Magi." It would depict a tour group gathered in total sheeplike hypnosis in front of some piece of art. There would be a guide with a headset and all would be listening in their headphones. Detached figures would circulate listening to handset audio tours. In the corner would be a guard on a chair, texting.</p>
<hr>
<p>Occasionally, stylish women ride by on rickety bicycles.</p>
<hr>
<p>Florence -- red tiled buildings, a low city, Brunelleachi's great dome, the spear-like Palazzo Vechio tower, and construction cranes redoing the Uffizi arcade. Proportions seem wrong compared to other places -- piazzas are not intimate, not as many surprising glances revealing details.</p>
<p><img alt="IMG_1153" height="374" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Uffizi is tiring -- perhaps not Vatican-tiring, but close. Several rooms of Gothic and then it seems like every decade of the renaissance. For all that, perhaps due to the crowds, not many jaw-dropping delights. Medusa's head, on a shield, by tk, perhaps, after the worst of the crowds cattle-cared their way back to the cruise ships. And then, you get to the "foreign painters rooms" -- a seeming afterthought, and it's just glorious painting after glorious painting from Northern Europe. Of course the R was the revolution, but they seem to just be piled room-after-oppressing-room.</p>
<hr>
<p>The doors of Ghiberti included a pyramid in perspective. Now wee teach the basic concepts in middle school. In yet-another museum, we saw the contest panels of Ghiberti vs Brunelleschi -- B lost but built the dome.</p>
<hr>
<p>Brothers Cryptkeeper, Lazarus, and Paul Giammatti. The weak "amens" in response to Brother Giammatti's chants, the sound of another brother upstairs, stationed there to provide the sound of choirs of Angels? They have been saying mass there for 800 years...</p>
<hr>
<p>Boobs with a view ...</p>
<p><img alt="IMG_1324" height="318" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Poppies. Mustard.</p>
<hr>
<p>Pollen blowing from the viewpoint above Florence</p>
<h2><img alt="IMG_1266" height="374" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></h2>
<p>Pisa underwhelming in all ways. You cannot see past the associative memories even though you can see that the architecture of the tower, cathedral, and baptistry is beautiful.</p>
<p><img alt="IMG_1331" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_1336" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_1515" height="232" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<h2>Cinque Terre</h2>
<p><img alt="IMG_1394" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="373"></p>
<p>5/05</p>
<p>Whole train gasps when train exits tunnel</p>
<hr>
<p>Clay colored water . Looks cold. Not Chile-cold. Drunk Americans at 330. Seagulls hawing at 7am. The ocean occasionally makes thundering noise like rearranging chairs on a slate floor.</p>
<p><img alt="DSC_8925" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Cat-in-heat moans of the seagulls outside our window.</p>
<p><img alt="DSC_9000" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p><img alt="IMG_1398" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1399" height="177" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9039" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1512" height="149" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9115" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>If I was rich and could spend half a year shut away writing a novel, this would be where I'd like to do it.</p>
<p><img alt="IMG_1421" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_1423" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p>4 o'clock is Gelato-clock. After that it's time for Americanos and appetizers. Dinner around 9.</p>
<p><img alt="DSC_9037" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1470" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_1408" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p>Obligatory romantic walk is romantic.</p>
<p><img alt="DSC_9076" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_8979" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_8985" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9074" height="315" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="471"></p>
<hr>
<p>Dante's hell updated for manufacturers of automatic cappuccino makers: Lights blink but don't effectively warn when they will be scalded with steam. And once every 34 years, they will be given a mediocre small cappuccino.</p>
<hr>
<p>The shipping channel to... Africa ? Sardinia? Ah, the rock bound Ligurian sea.</p>
<hr>
<p><img alt="DSC_8956" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p><img alt="DSC_9016" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9038" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p><img alt="DSC_9088" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1478" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1487" height="373" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9157" height="335" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1548" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Germans listening to portable speakers as they hiked.</p>
<p><img alt="DSC_9283" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9310" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="333"></p>
<p><img alt="DSC_9325" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9327" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9328" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9344" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9348" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<hr>
<p>They rake the beach and, after high tide, shovel the gravel off the wrack line. M is my least-favorite place so far -- a Riviera beach town. It's supposed to be high season, but many stores and hotels are still closed. Loud Americans getting drunk (staying). More French.</p>
<p><img alt="DSC_9362" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9261" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p><img alt="IMG_1559" height="193" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="DSC_9271" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="313"></p>
<hr>
<p><img alt="IMG_1588" height="151" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p><img alt="DSC_9370" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>This is Tina's "over it" look<br>
<img alt="DSC_9391" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Service cart in train preceded by its jingling bell</p>
<hr>
<p>Carrara mountains look like they are covered in snow but it's just the marble.</p>
<hr>
<p>It's spring, but the sun sets at 7:30 or so and there is a significantly long twilight. Makes the "eat at 9" routine easier.</p>
<h2>Venice</h2>
<p><img alt="DSC_9430" height="177" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Once you start humming "It's a small world after all," it's difficult to stop.</p>
<p><img alt="DSC_9593" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p><img alt="DSC_9441" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Tina asked "what are you exclaiming about?" "Simply the fact and contingencies of my own existence."</p>
<p><img alt="DSC_9547 - Version 2" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="333"></p>
<hr>
<p>Musashii, Larry Ellison's soul-less yacht.</p>
<p><img alt="DSC_9445" height="212" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Venice -- air pollution.</p>
<hr>
<p>Every doge has painting of Mary and baby Jesus blessing the doge. Far more secular power than Rome. A swift flying through the cavernous room depicting the triumphant Siege of Constantinople.</p>
<p><img alt="IMG_1864" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="376"></p>
<hr>
<p>So much Byzantine and Moslem influence in architecture and decoration.</p>
<p><img alt="IMG_1875" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="377"></p>
<hr>
<p>Many Wiener dogs.</p>
<hr>
<p>Street artists working on a piece. I keep remembering my HS friend who would carefully lay out his traced-from-Boris-Vallejo drawings and spend the study hall shading some small portion of one. Effective way to attract the girls, as it turned out.</p>
<hr>
<p>Obligatory Venice shots</p>
<p><img alt="DSC_9487" height="333" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1796" height="195" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1866" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_1867" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<p><img alt="IMG_1887" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="373"></p>
<hr>
<p>Pisa my ass: every building over 3 stories has a noticeable lean. The floor of St. Marks rolls like the ocean.</p>
<p><img alt="IMG_1771" height="256" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1773" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>Important street vendor items: purses, sunglasses, gooey ball that splats and then reforms, purple LED things that shoot into the air and helicopter down.</p>
<p><img alt="IMG_1829" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<hr>
<p>"Bar Tour"</p>
<p><img alt="IMG_1897" height="371" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>These people hated us.</p>
<p><img alt="IMG_1892" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1894" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p><img alt="IMG_1929" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Hey! It's Rick Steves. Or, as I called him after 4 drinks, Rick James. Damn, I wish it had been Rick James.</p>
<p><img alt="IMG_1943" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="375"></p>
<hr>
<p><img alt="IMG_1945" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p><img alt="IMG_1954" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>
<p>Last Americanos, last day.</p>
<p><img alt="IMG_1971" height="480" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="360">\ </p>
<p>I love Tina with all my heart. 20 years.</p>
<p><img alt="IMG_1972" height="320" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="240"></p>
<p>Escaping Venice in a torrential thunderstorm at 3AM. Last photo of trip.</p>
<p><img alt="IMG_1976" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="372"></p>Coding standards and type inference2012-07-29T10:28:00-10:002012-07-29T10:28:00-10:00larrytag:knowing.net,2012-07-29:/posts/2012/07/coding-standards-and-type-inference/<p>With type inference you avoid “finger-typing” on both sides of an assignment:</p>
<div class="highlight"><pre><span></span><code><span class="n">Foo</span><span class="w"> </span><span class="n">myFoo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">Foo</span><span class="p">()</span>
<span class="k">var</span><span class="w"> </span><span class="n">myFoo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">Foo</span><span class="p">()</span><span class="w"> </span><span class="o">//</span><span class="n">Type</span><span class="o">-</span><span class="n">inference</span><span class="w"> </span><span class="p">(</span><span class="n">no</span><span class="w"> </span><span class="s2">"win"</span><span class="w"> </span><span class="n">here</span><span class="p">,</span><span class="w"> </span><span class="n">but</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">parameterized</span><span class="w"> </span><span class="n">types</span><span class="o">...</span><span class="p">)</span>
</code></pre></div>
<p>Type inference also works with functions, allowing you to write:</p>
<div class="highlight"><pre><span></span><code><span class="n">def</span><span class="w"> </span><span class="n">bar</span><span class="p">()</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="o">...</span><span class="n">etc</span><span class="o">...</span><span class="w"> </span><span class="p">}</span>
<span class="n">def</span><span class="w"> </span><span class="n">bat</span><span class="p">(</span><span class="n">foo</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Foo</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="o">...</span><span class="n">etc</span><span class="o">...</span><span class="w"> </span><span class="p">}</span>
<span class="k">var</span><span class="w"> </span><span class="n">myFoo …</span></code></pre></div><p>With type inference you avoid “finger-typing” on both sides of an assignment:</p>
<div class="highlight"><pre><span></span><code><span class="n">Foo</span><span class="w"> </span><span class="n">myFoo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">Foo</span><span class="p">()</span>
<span class="k">var</span><span class="w"> </span><span class="n">myFoo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">Foo</span><span class="p">()</span><span class="w"> </span><span class="o">//</span><span class="n">Type</span><span class="o">-</span><span class="n">inference</span><span class="w"> </span><span class="p">(</span><span class="n">no</span><span class="w"> </span><span class="s2">"win"</span><span class="w"> </span><span class="n">here</span><span class="p">,</span><span class="w"> </span><span class="n">but</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">parameterized</span><span class="w"> </span><span class="n">types</span><span class="o">...</span><span class="p">)</span>
</code></pre></div>
<p>Type inference also works with functions, allowing you to write:</p>
<div class="highlight"><pre><span></span><code><span class="n">def</span><span class="w"> </span><span class="n">bar</span><span class="p">()</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Foo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="o">...</span><span class="n">etc</span><span class="o">...</span><span class="w"> </span><span class="p">}</span>
<span class="n">def</span><span class="w"> </span><span class="n">bat</span><span class="p">(</span><span class="n">foo</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Foo</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="o">...</span><span class="n">etc</span><span class="o">...</span><span class="w"> </span><span class="p">}</span>
<span class="k">var</span><span class="w"> </span><span class="n">myFoo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">bar</span><span class="p">();</span><span class="w"> </span><span class="o">//</span><span class="n">Type</span><span class="o">-</span><span class="n">inference</span><span class="w"> </span><span class="n">works</span><span class="w"> </span><span class="n">fine</span>
<span class="n">bat</span><span class="p">(</span><span class="n">myFoo</span><span class="p">);</span>
</code></pre></div>
<p>But I’m wondering if a coding standard that specified a type on the LHS of such assignments would be clearer:</p>
<div class="highlight"><pre><span></span><code>Foo myFoo = bar();
bat(myFoo);
</code></pre></div>
<p>Pro arguments:</p>
<ol>
<li>If you think type signatures are important for reasoning (which you presumably do if you’re using a type-inferred language), it follows that the explicitness is helpful; and</li>
<li>If you change <code>bar()</code>s signature, the compiler’s going to complain about the call to <code>bat</code> (“Foo expected, found SomeNewType”) and that’s a little misleading.</li>
</ol>
<p>Con arguments:</p>
<ol>
<li>Complaining about what’s passed to <code>bat()</code> is only “misleading” in the sense that people aren’t used to it; and</li>
<li>Putting types on the LHS is an insult to referential transparency, since it is making explicit a difference in assignment use-cases</li>
</ol>
<p>I am tending towards the “Con” arguments, but I think there’s merit to the “Pro” arguments. Anyone care to make the case that the “Pro” coding standard is superior?</p>Review: "A Dance with Dragons" by George R.R. Martin2012-07-28T10:23:00-10:002012-07-28T10:23:00-10:00larrytag:knowing.net,2012-07-28:/posts/2012/07/review-a-dance-with-dragons-by-george-r-r-martin/<p><a href="https://www.goodreads.com/book/show/10664113-a-dance-with-dragons"><img alt="A Dance With Dragons (A Song of Ice and Fire, #5)" src="http://photo.goodreads.com/books/1327885335m/10664113.jpg"></a><a href="https://www.goodreads.com/book/show/10664113-a-dance-with-dragons">A Dance With Dragons</a> by <a href="https://www.goodreads.com/author/show/346732.George_R_R_Martin">George R.R. Martin</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/378980270">3 of 5 stars</a></p>
<p>Definitely a step up from "A Feast for Crows" (my review: "What a slog...") in that it is primarily told from the viewpoint of major characters, but the plot is still disturbingly bogged down: after …</p><p><a href="https://www.goodreads.com/book/show/10664113-a-dance-with-dragons"><img alt="A Dance With Dragons (A Song of Ice and Fire, #5)" src="http://photo.goodreads.com/books/1327885335m/10664113.jpg"></a><a href="https://www.goodreads.com/book/show/10664113-a-dance-with-dragons">A Dance With Dragons</a> by <a href="https://www.goodreads.com/author/show/346732.George_R_R_Martin">George R.R. Martin</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/378980270">3 of 5 stars</a></p>
<p>Definitely a step up from "A Feast for Crows" (my review: "What a slog...") in that it is primarily told from the viewpoint of major characters, but the plot is still disturbingly bogged down: after five books in a seven-book series, the pieces ought to be staged for the climax, but it's very difficult to believe that's the case. My only thought is that a bold stroke would be to start the next book 5 years later, with the important viewpoint characters having walked the paths they're currently on and near the final crisis. It took the author 5 books to get us through Fall, there's no way that he can satisfactorily get through Winter and end with the first signs of Spring unless he changes something about his strategy.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>Review: Kraken by China Miéville2012-07-28T09:48:00-10:002012-07-28T09:48:00-10:00larrytag:knowing.net,2012-07-28:/posts/2012/07/review-kraken-by-china-mieville/<p><a href="https://www.goodreads.com/book/show/6931246-kraken"><img alt="Kraken" src="http://photo.goodreads.com/books/1320551670m/6931246.jpg"></a><a href="https://www.goodreads.com/book/show/6931246-kraken">Kraken</a> by <a href="https://www.goodreads.com/author/show/33918.China_Mi_ville">China Miéville</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/312618852">4 of 5 stars</a></p>
<p>Perhaps the most successful "modern gods and magic" book I've read (although actually I experienced it as an audiobook). This is the quality that I <em>thought</em> "American Gods" was going to achieve (when in fact I thought that book was …</p><p><a href="https://www.goodreads.com/book/show/6931246-kraken"><img alt="Kraken" src="http://photo.goodreads.com/books/1320551670m/6931246.jpg"></a><a href="https://www.goodreads.com/book/show/6931246-kraken">Kraken</a> by <a href="https://www.goodreads.com/author/show/33918.China_Mi_ville">China Miéville</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/312618852">4 of 5 stars</a></p>
<p>Perhaps the most successful "modern gods and magic" book I've read (although actually I experienced it as an audiobook). This is the quality that I <em>thought</em> "American Gods" was going to achieve (when in fact I thought that book was quite over-rated). Miéville does an exceptional job establishing the relative power of the various players and, although the climax involves universe-altering forces, there's the strong sense that the author got to that point in a fair way. There's a good deal of absurdity (that <em>Star Trek</em> is worshipped leads to some key capabilities) but in general the author plays it straight, with the protagonists trying to forestall the apocalypse, and appropriately dreadful antagonists menacing them. The narrator of the audiobook, John Lee, does a great job with a text that's filled with neologisms, parentheticals, and interrupted dialog.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>Half my life ago, today2012-07-03T04:00:00-10:002012-07-03T04:00:00-10:00larrytag:knowing.net,2012-07-03:/posts/2012/07/half-my-life-ago-today/<p>On July 3, 1988, I moved to San Francisco from San Diego (more specifically, I moved to Sausalito from Pacific Beach) to take a job as Product Review Editor on Computer Language and AI Expert magazines. I remember riding the Marin Airporter (for the first, but certainly not last, time …</p><p>On July 3, 1988, I moved to San Francisco from San Diego (more specifically, I moved to Sausalito from Pacific Beach) to take a job as Product Review Editor on Computer Language and AI Expert magazines. I remember riding the Marin Airporter (for the first, but certainly not last, time) over the Golden Gate Bridge and taking in the view of the Bay and thinking "Wow, I live here."</p>
<p>Tina stayed in San Diego for a couple weeks, packing up and saying good-bye to daily swims at La Jolla Cove.</p>Struggling with the benefits of the Reader monad2012-07-01T09:32:00-10:002012-07-01T09:32:00-10:00larrytag:knowing.net,2012-07-01:/posts/2012/07/struggling-with-the-benefits-of-the-reader-monad/<p>Still struggling with the benefits of the <code>Reader</code> monad… <a href="https://stackoverflow.com/questions/11253653/configuration-data-in-scala-should-i-use-the-reader-monad">In the well-liked answer on StackOverflow,</a> <strong><a href="https://stackoverflow.com/questions/11253653/configuration-data-in-scala-should-i-use-the-reader-monad">mergeconflic</a><a href="https://stackoverflow.com/questions/11253653/configuration-data-in-scala-should-i-use-the-reader-monad">t</a></strong> <a href="https://stackoverflow.com/questions/11253653/configuration-data-in-scala-should-i-use-the-reader-monad">says</a></p>
<blockquote>
<p>I can explain how Reader works easily: it’s a function, and it takes an argument.</p>
</blockquote>
<p>OK, so I think the structure of the technique seems clear: instead of being dependent on …</p><p>Still struggling with the benefits of the <code>Reader</code> monad… <a href="https://stackoverflow.com/questions/11253653/configuration-data-in-scala-should-i-use-the-reader-monad">In the well-liked answer on StackOverflow,</a> <strong><a href="https://stackoverflow.com/questions/11253653/configuration-data-in-scala-should-i-use-the-reader-monad">mergeconflic</a><a href="https://stackoverflow.com/questions/11253653/configuration-data-in-scala-should-i-use-the-reader-monad">t</a></strong> <a href="https://stackoverflow.com/questions/11253653/configuration-data-in-scala-should-i-use-the-reader-monad">says</a></p>
<blockquote>
<p>I can explain how Reader works easily: it’s a function, and it takes an argument.</p>
</blockquote>
<p>OK, so I think the structure of the technique seems clear: instead of being dependent on some configurable value, it’s preferred to return a function that takes an argument.</p>
<p>This seems to be asserting that :</p>
<div class="highlight"><pre><span></span><code>def foo : Configuration => Unit = { config : Configuration => bar(config) }
</code></pre></div>
<p>is markedly superior to :</p>
<div class="highlight"><pre><span></span><code>def foo(config : Configuration) : Unit = { bar(config) }
</code></pre></div>
<p>? I’m afraid I don’t see the benefit.</p>
<p>The Reader monad is held out as superior to, in particular, DI frameworks, but it seems that :</p>
<blockquote>
<p>In contrast, how does Spring (for example) work? …… “we still have to choose” - Sure. In either approach, you have to choose which environment you want to use. That aspect is not magic either way</p>
</blockquote>
<p>This seems like begging the question: the “magic” (or at least Reflection) in Spring is a way to deal with the “you have to choose which environment you want to use,” (choosing a type and setting values) aspect not a way to deal with <em>using</em> that environment (acting on those configured values).</p>
<p>If I understand correctly (and it’s clear that <em>something</em> isn’t clicking with me), the Reader monad doesn’t provide a solution to the “choose which environment” task. I think I’d have to write, in source code, something like</p>
<div class="highlight"><pre><span></span><code><span class="n">val</span><span class="w"> </span><span class="n">connectionString</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">System</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="err">“</span><span class="n">connection_string</span><span class="err">”</span><span class="p">)</span>
<span class="o">//</span><span class="ow">or</span>
<span class="n">val</span><span class="w"> </span><span class="n">connectionString</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="o">//</span><span class="ow">or</span>
<span class="n">val</span><span class="w"> </span><span class="n">connectionString</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">loadFromPropertiesFile</span><span class="p">(</span><span class="n">System</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="err">“</span><span class="n">properties_file</span><span class="err">”</span><span class="p">))</span>
<span class="o">/</span>
<span class="o">/*</span>
<span class="err">…</span><span class="n">etc</span><span class="w"> </span><span class="n">any</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">million</span><span class="w"> </span><span class="n">ways</span><span class="p">,</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">which</span><span class="w"> </span><span class="err">@</span><span class="n">Resource</span><span class="w"> </span><span class="n">annotations</span><span class="w"> </span><span class="n">might</span><span class="w"> </span><span class="n">well</span><span class="w"> </span><span class="n">be</span><span class="w"> </span><span class="n">considered</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">most</span><span class="w"> </span><span class="n">reasonable</span>
<span class="o">*/</span>
</code></pre></div>
<p>I'm really not willfully <em>trying</em> to drag my feet here. I've got a real problem where I have 10KLoC of pretty dense code that has hard-coded throughout it some lists that need to be configurable. I really <em>want</em> to do the technique that has the highest quality.</p>Review: "Redshirts" by John Scalzi2012-06-24T08:01:00-10:002012-06-24T08:01:00-10:00larrytag:knowing.net,2012-06-24:/posts/2012/06/review-redshirts-by-john-scalzi/<p><a href="https://www.goodreads.com/book/show/13055592-redshirts"><img alt="Redshirts" src="http://photo.goodreads.com/books/1327924060m/13055592.jpg"></a><a href="https://www.goodreads.com/book/show/13055592-redshirts">Redshirts</a> by <a href="https://www.goodreads.com/author/show/4763.John_Scalzi">John Scalzi</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/354733490">4 of 5 stars</a></p>
<p>What starts as a piss-take on "Star Trek"s disposable away-team characters gets, first, properly twisted (the characters put the pieces together) and then goes meta, or recursive, or something. Funny and breezily written, with some appropriately sentimental genre stuff …</p><p><a href="https://www.goodreads.com/book/show/13055592-redshirts"><img alt="Redshirts" src="http://photo.goodreads.com/books/1327924060m/13055592.jpg"></a><a href="https://www.goodreads.com/book/show/13055592-redshirts">Redshirts</a> by <a href="https://www.goodreads.com/author/show/4763.John_Scalzi">John Scalzi</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/354733490">4 of 5 stars</a></p>
<p>What starts as a piss-take on "Star Trek"s disposable away-team characters gets, first, properly twisted (the characters put the pieces together) and then goes meta, or recursive, or something. Funny and breezily written, with some appropriately sentimental genre stuff. This would be a perfect transcontinental airplane read.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>Feast For Crows Review: What a Slog2012-06-23T10:14:00-10:002012-06-23T10:14:00-10:00larrytag:knowing.net,2012-06-23:/posts/2012/06/feast-for-crows-review-what-a-slog/<p><a href="https://www.goodreads.com/book/show/13497.A_Feast_for_Crows"><img alt="A Feast for Crows (A Song of Ice and Fire #4)" src="http://photo.goodreads.com/books/1333561518m/13497.jpg"></a><a href="https://www.goodreads.com/book/show/13497.A_Feast_for_Crows">A Feast for Crows</a> by <a href="https://www.goodreads.com/author/show/346732.George_R_R_Martin">George R.R. Martin</a><br>
My rating: <a href="https://www.goodreads.com/review/show/312617549">2 of 5 stars</a></p>
<p>A slog through 1000 pages of genealogies and minor characters failing in their plots. Isn't THE WHOLE DAMN POINT that all this bickering about the Iron Throne is pointless while the true threats are creeping …</p><p><a href="https://www.goodreads.com/book/show/13497.A_Feast_for_Crows"><img alt="A Feast for Crows (A Song of Ice and Fire #4)" src="http://photo.goodreads.com/books/1333561518m/13497.jpg"></a><a href="https://www.goodreads.com/book/show/13497.A_Feast_for_Crows">A Feast for Crows</a> by <a href="https://www.goodreads.com/author/show/346732.George_R_R_Martin">George R.R. Martin</a><br>
My rating: <a href="https://www.goodreads.com/review/show/312617549">2 of 5 stars</a></p>
<p>A slog through 1000 pages of genealogies and minor characters failing in their plots. Isn't THE WHOLE DAMN POINT that all this bickering about the Iron Throne is pointless while the true threats are creeping down from the North? There's some good stuff -- about 100 pages worth -- but there's far, far too much of:</p>
<p>"Aye, my lady," the septon said. "The river moved. Seventy years ago, it was. Or was it eighty? It was when old Masha Heddle's grandfather kept the place. It was her who told me all this history. A kindly woman, Masha, fond of sourleaf and honey cakes. When she did not have a room for me, she would let me sleep beside the hearth, and she never send me on my way without some bread and cheese and a few stale cakes."</p>
<p>"Is she the innkeep now?" asked Podrick.</p>
<p>"No. The lions hanged her...."</p>
<p>FFS.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>Looking for Job / Contract Opportunities2012-06-06T10:19:00-10:002012-06-06T10:19:00-10:00larrytag:knowing.net,2012-06-06:/posts/2012/06/looking-for-job-contract-opportunities/<p>One of the major <em>quos</em> one gets <em>pro</em> being on a 2-year contract <em>quid</em> is that it’s not disloyal, 6-months out, to publicly seek a new opportunity.</p>
<p>Supposedly, the software development community has weathered the Great Recession well and has come roaring back. To believe my Twitter feed, everyone …</p><p>One of the major <em>quos</em> one gets <em>pro</em> being on a 2-year contract <em>quid</em> is that it’s not disloyal, 6-months out, to publicly seek a new opportunity.</p>
<p>Supposedly, the software development community has weathered the Great Recession well and has come roaring back. To believe my Twitter feed, everyone works at Teh Greatest Place Ever with Teh Most Amazing Culture on Teh Most Fascinating Problems.</p>
<p>But I was surprised to see a top-notch developer mention he was using DICE, which I remember as a dispiriting sinkhole of utterly clueless headhunters of the “10 years experience with {2-year-old technology}” ilk. Surely, I think, the world has embraced some developer-driven jobs board such as Joel Spolsky’s or Stack Overflow’s? No? What about <a href="https://jobs.github.com/">GitHub’s</a>? Please tell me to do something more encouraging than trolling Dice, Monster, and Craigslist!</p>
<p>Or, if you happen to know a non-posted position for an experienced and competent software developer with decent communication skills and a broad-to-a-fault spectrum of language and platform experience, let me know.</p>
<p>My Careers 2.0 CV</p>
<p>I’ll be available no earlier than December and may not be available at all (depending on the budgeting strategy of a 5-nation international committee). I am based in Hawai’i and it would take a heck of an offer to tempt me to someplace that had colder water and cloudier skies.</p>Tip: Turn off Autoimport from Photostream Before Traveling2012-05-19T11:37:00-10:002012-05-19T11:37:00-10:00larrytag:knowing.net,2012-05-19:/posts/2012/05/tip-turn-off-autoimport-from-photostream-before-traveling/<p>Ah.</p>
<p>It turns out that it’s a terrible mistake to leave the “Autoimport” feature of Photostream on in iPhoto or Aperture when you go on vacation. If you leave it on, and you do the logical thing of moving your daily photographs into your laptop, when you merge the …</p><p>Ah.</p>
<p>It turns out that it’s a terrible mistake to leave the “Autoimport” feature of Photostream on in iPhoto or Aperture when you go on vacation. If you leave it on, and you do the logical thing of moving your daily photographs into your laptop, when you merge the laptop libraries into your main library, you will end up with duplicates of not-quite-everything. By “not quite everything” I mean that your laptop, as soon as it connects to WiFi, probably began sending 1000 photos to PhotoStream.</p>App with an Action-Movie UX2012-01-30T10:40:00-10:002012-01-30T10:40:00-10:00larrytag:knowing.net,2012-01-30:/posts/2012/01/app-with-an-action-movie-ux/<p>I have this very mundane need: an application to fill the SD card that goes into a digital picture frame. You know, don't show photos that were on it last time, show all the photos that are new since last time, show higher-rated photos more than lower-rated ones, etc.</p>
<p>I …</p><p>I have this very mundane need: an application to fill the SD card that goes into a digital picture frame. You know, don't show photos that were on it last time, show all the photos that are new since last time, show higher-rated photos more than lower-rated ones, etc.</p>
<p>I was thinking about doing it with a command-line Ruby script and then I realized that this was my golden opportunity to "Write an app whose user-experience is as crazy as what they show in the movies." You know, a background that dramatically fills in as the progress bar slowly (and precisely) moves forward with sound playing "tink-tink-tink" as each file is copied.</p>
<p>I think I shall name the app "Enhancement Protocol"</p>
<p>Your suggestions for UX elements appreciated...</p>Review of American Gods2012-01-27T10:33:00-10:002012-01-27T10:33:00-10:00larrytag:knowing.net,2012-01-27:/posts/2012/01/goodreads-larry-obrien-kailua-kona-his-review-of-american-gods/<p><a href="https://www.goodreads.com/book/show/4407.American_Gods"><img alt="American Gods" src="http://photo.goodreads.com/books/1258417001m/4407.jpg"></a><a href="https://www.goodreads.com/book/show/4407.American_Gods">American Gods</a> by <a href="https://www.goodreads.com/author/show/1221698.Neil_Gaiman">Neil Gaiman</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/268573618">3 of 5 stars</a></p>
<p>A good page-turner, but ironically for a book that is about the fate of gods, the stakes felt extremely low. Gaiman very quickly establishes a porous boundary between life and death for mortals and then, later, establishes the same …</p><p><a href="https://www.goodreads.com/book/show/4407.American_Gods"><img alt="American Gods" src="http://photo.goodreads.com/books/1258417001m/4407.jpg"></a><a href="https://www.goodreads.com/book/show/4407.American_Gods">American Gods</a> by <a href="https://www.goodreads.com/author/show/1221698.Neil_Gaiman">Neil Gaiman</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/268573618">3 of 5 stars</a></p>
<p>A good page-turner, but ironically for a book that is about the fate of gods, the stakes felt extremely low. Gaiman very quickly establishes a porous boundary between life and death for mortals and then, later, establishes the same things with gods. So it's never at all clear if anyone is actually facing extinction.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>Comment Spam: The Voice Of Experience2011-12-21T13:34:00-10:002011-12-21T13:34:00-10:00larrytag:knowing.net,2011-12-21:/posts/2011/12/comment-spam-the-voice-of-experience/<blockquote>
<p>Author : Effortless Products For nail fungus treatment - Some Practical Guidance (IP: 118.96.251.234 , 118.96.251.234)<br>
E-mail : bhthhyh\@jflui.com<br>
URL :<br>
Whois : http://whois.arin.net/rest/ip/118.96.251.234<br>
Comment:<br>
When you are starting up a new organization you certainly want to come up …</p></blockquote><blockquote>
<p>Author : Effortless Products For nail fungus treatment - Some Practical Guidance (IP: 118.96.251.234 , 118.96.251.234)<br>
E-mail : bhthhyh\@jflui.com<br>
URL :<br>
Whois : http://whois.arin.net/rest/ip/118.96.251.234<br>
Comment:<br>
When you are starting up a new organization you certainly want to come up with a catchy business title that will be special from other folks out there. An beautiful organization identify will do far more than just make your business stand out from other people.</p>
</blockquote>
<p>Thanks for the advice "Effortless Products for nail fungus treatment"!</p>"Moneycode" not "Developernomics": My Hunch as to the Distribution of Software Excellence2011-12-13T19:00:00-10:002011-12-13T19:00:00-10:00larrytag:knowing.net,2011-12-13:/posts/2011/12/my-hunch-as-to-the-distribution-of-software-excellence/<p>Part 1: <a href="http://www.knowing.net/index.php/2011/12/09/forbes-is-wrong-about-developernomics/">Forbes is wrong about "Developernomics"</a></p>
<p>Part 2: <a href="http://www.knowing.net/index.php/2011/12/11/why-10x-ticks-me-off/">Why 10x Ticks Me Off</a></p>
<p>If this subject’s of interest to you, you might enjoy (or despise) the column on the subject I’ve been writing for SD Times for the past decade.</p>
<p>In order to understand my position on …</p><p>Part 1: <a href="http://www.knowing.net/index.php/2011/12/09/forbes-is-wrong-about-developernomics/">Forbes is wrong about "Developernomics"</a></p>
<p>Part 2: <a href="http://www.knowing.net/index.php/2011/12/11/why-10x-ticks-me-off/">Why 10x Ticks Me Off</a></p>
<p>If this subject’s of interest to you, you might enjoy (or despise) the column on the subject I’ve been writing for SD Times for the past decade.</p>
<p>In order to understand my position on why I don't believe in 10x Superprogrammers, it may help to show my <strong>hunch</strong> as to how productivity is distributed in the software development world. I think that it is sadly the case that there are bad programmers ranging from utterly incompetent to simply inept and that they form a long tail of widely variant "below median" productivity. But I think that half of all <strong>professional</strong> programmers are quite good and that a median programmer is a good bit better than average. That is, that the bad professional programmers drag down the average.</p>
<p>In schematic form, my <strong>hunch</strong> is that the distribution is something like this:</p>
<p><a href="/uploads/2011/12/Screen-shot-2011-12-13-at-1.19.06-PM.png"><img alt="" class="alignnone size-full wp-image-5361" height="318" src="/uploads/2011/12/Screen-shot-2011-12-13-at-1.19.06-PM.png" title="Screen shot 2011-12-13 at 1.19.06 PM" width="552"></a></p>
<p>Those who are highly productive face a headwind: increasing complexity, the frustrations of human communication, the limits of our tools, etc. All sorts of things, some of which are accidental, but some of which I believe are fundamental. It may be that at the tail of the distribution, there are some who combine technical genius with interpersonal genius with organizational genius and, I dunno', if they decide not to become Evil Geniuses, maybe they stay in software. But I <strong>do</strong> contend that such folk are vanishingly rare and one ought not base one's company's strategy on finding them.</p>
<p>I believe that the realistically-findable excellent programmers are perhaps 2-3x as productive as median programmers. I don't see that view as dismissive of their abilities in any way; a running back need not score 10x the touchdowns of a median NFL running back to be considered great, nor a batter to bat in 10x the median number of runners-on-base to be a star.</p>
<p>I feel that when an excellent programmer is felt to be much better than that multiple, it's almost certainly context-sensitive. It's highly likely that they are doing, in their excellent way, a task that they are familiar with: they are working with a codebase they've mastered, they are using an architectural pattern they've implemented before, etc.</p>
<p>Just as the Superprogrammer 10x distribution implies certain things for industry, so too does this distribution:</p>
<p><strong>If developer productivity is Big O(context)</strong>, <strong>then today's average programmer might be tomorrow's excellent programmer<br>
</strong></p>
<p><strong>Ditto for team productivity</strong></p>
<p><strong>If excellent productivity is a fairly small multiple of median productivity, then one's hiring should focus on "above median" not "superstar"</strong></p>
<p><strong>If excellent productivity is context-sensitive and a fairly small multiple, investing in changing near-median developers into excellent developers is much more cost-effective than seeking Superprogrammers and paying them premiums</strong></p>
<p><strong>If there's a long tail of below-median developers, the personnel strategy that one <em>must</em> embrace is ensuring that below-median developers are removed from the team</strong></p>
<p>Although a circumstantial argument, this model fits better the industry I see. I think of it as the "Moneyball" model of software development excellence.<strong><br>
</strong></p>The Passing of Pioneers2011-12-12T08:12:00-10:002011-12-12T08:12:00-10:00larrytag:knowing.net,2011-12-12:/posts/2011/12/the-passing-of-pioneers/<p><a href="http://sdt.bz/content/article.aspx?ArticleID=36181&page=1">The passing of pioneers - SD Times: Software Development News</a>.</p>
<p>SD Times has published some brief memories of some of those the industry lost this year.</p>Why 10x Ticks Me Off2011-12-11T15:28:00-10:002011-12-11T15:28:00-10:00larrytag:knowing.net,2011-12-11:/posts/2011/12/why-10x-ticks-me-off/<p>This is a follow-up to my Friday rant <a href="http://www.knowing.net/index.php/2011/12/09/forbes-is-wrong-about-developernomics/">Forbes is wrong about "Developernomics"</a></p>
<p>First: If the subject's of interest to you, you might enjoy (or despise) the column on the subject I've been writing for SD Times for the past decade. (I can't help but wonder if I wrote in …</p><p>This is a follow-up to my Friday rant <a href="http://www.knowing.net/index.php/2011/12/09/forbes-is-wrong-about-developernomics/">Forbes is wrong about "Developernomics"</a></p>
<p>First: If the subject's of interest to you, you might enjoy (or despise) the column on the subject I've been writing for SD Times for the past decade. (I can't help but wonder if I wrote in my normal, less-heated mode if I'd have had any chance of getting picked up by hackernews.)</p>
<p>Luckily, though, this is a subject that really sets me off, so I don't have to manufacture passion. I get angry because the Myth of the Superprogrammer has lots of important consequences:</p>
<p><strong>IF programming excellence is Big O(inherent talent) THEN that should guide developer careers.</strong></p>
<p><strong>IF excellent programmers are 10x median productivity</strong> <strong>THEN that should guide software team structure.</strong></p>
<p><strong>Organizations will tend to structure their software teams according to the model of development excellence held by senior management.</strong></p>
<p>So I don't think this is a harmless matter of opinion, a "my language is better than yours" bar-room perennial. The Myth of the Superprogrammer affects your career, mine, and that of all of our colleagues.</p>
<p>It's important that I reiterate that I fully understand that arbitrarily-high productivity multiples <strong>occur</strong> in any number of <strong>contexts</strong>: from the trivial "I've been working in this language / library / codebase and you haven't" to the complex "this project was rescued." (And since "the project was rescued" implies the uncommon but not rare situation of zero or negative productivity, the advantage is arbitrarily high.) The most interesting context to me, is the situation of "Tim in Colorado", a commenter on my previous post, who was the original architect and implementer of a game engine. It <em>may be</em> that in a situation like that, transferring the mental model, decisions, tweaks, etc. of the codebase is <em>so</em> difficult that he will <em>forever</em> hold that 10x advantage. (Although I'd point out that from an organizational perspective, such a situation is not necessarily wonderful: they have a bus factor of 1, they may trouble freeing up Tim to work on new projects, etc.).</p>
<p>But saying "In some contexts, Adam is 10x more productive than Charlie," is not the Myth of the Superprogrammer. The Myth of the Superprogrammer is "Adam's great advantage over Charlie is driven by an inherent advantage Adam has over Charlie. Adam is rare, Charlie is a commodity."</p>
<p>Let's be clear about what "10 times median productivity" means. It means this:</p>
<p><a href="/uploads/2011/12/house-md.jpg"><img alt="" class="alignnone size-medium wp-image-5351" height="225" src="/uploads/2011/12/house-md-300x225.jpg" title="house-md" width="300"></a></p>
<p>The claim is <em>an order of magnitude</em>: In <em>one day</em> they produce a sprint's worth of functionality. In a month, they do a <em>year's</em> work. In a year, their contributions oustrips the combined output of nine competent colleagues. They can master a new system library not in 6 months but in 3 weeks, they never walk more than, say, 15 minutes going down a wrong path, they never lose days waiting for an answer from a domain expert, they never lose the work of weeks to a changed or misconstrued requirement. They are The World's Most Interesting Programmer. Except such people not only exist, they're not vanishingly rare! There are lots of them: you should strive to hire such a paragon. Everyone else is hiring them! Why not you?</p>
<p>Whoops, there I go starting to get emotional...</p>
<p>And I'm not being unfair in my characterization of what "10x productivity" means. It <em>has</em> to mean such things, because that's what programming productivity <em>is</em>: delivering value to the customer. It's not writing code or debugging code or refactoring code: those are simply the means.</p>
<p>Sure, way out on the tail end of the distribution of the several million professional developers, there are some flat-out programming geniuses. And maybe if you squeeze down the tail far enough you can find some who combine flat-out programming genius with collaborate-with-users genius. But the Superprogrammer Myth requires a high variance: there have to be enough developers who achieve 10x median productivity so that they regularly make an appearance in industry.</p>
<p>Let's say that's correct. What does this distribution imply?</p>
<p>It implies that hiring is <em>overwhelmingly</em> important, that it is better to be short-handed for long periods of time rather than fill the spot with a person who everyone agrees is clearly better than median. God forbid you hire a person who's only <em>twice as good</em> as median.</p>
<p>It implies that experience with the tools and libraries that your company uses is <em>entirely</em> irrelevant: a 10x-er will pick them up 10x faster than median and going forward, of course, will be 10x more productive with those tools. (To be fair: I <em>do</em> actually believe that "you cannot teach tall" and that "<em>x</em> years with tool <em>y</em>" is a terrible thing in a job requirement. But I also believe that this is a significant trade-off.)</p>
<p>It implies that you should have an enormous variance in your compensation structure. If Charlie is a 10x-er and Adam is median, Adam should be compensated far less; his loss is unimportant to the productivity of the team, while Charlie's retention is utterly critical.</p>
<p>It implies that median salary should be stable or decrease over time, since the abilities of a median or "only" quite good programmer do not drive overall team productivity. Quite good developers can be replaced with a cheaper quite bad programmer, as long as the team has a Superprogrammer whose 10x contribution drowns out such small signals.</p>
<p>It implies that you should structure your team as a Chief Programmer Team: everyone serves the needs of the 10x-er. Keeping the Superprogrammer loaded is the goal of every member. The Superprogrammer ought not to be required to explain or collaborate on important decisions.</p>
<p>It implies that the comings and goings of the Superprogrammer have an enormous impact on the company's productivity: the Superprogrammers arrival coincides with a massive uptick in productivity, the Superprogrammers departure creates a massive loss of productivity until the Superprogrammer is replaced.</p>
<p>Those implications do not describe the industry that I know. <a href="https://www.imdb.com/title/tt0412142/">They describe a TV show</a>.</p>
<p>Part 3: <a href="http://www.knowing.net/index.php/2011/12/13/my-hunch-as-to-the-distribution-of-software-excellence/">Moneycode vs. Developernomics</a></p>Forbes is wrong about "Developernomics"2011-12-09T19:51:00-10:002011-12-09T19:51:00-10:00larrytag:knowing.net,2011-12-09:/posts/2011/12/forbes-is-wrong-about-developernomics/<p><a href="https://www.forbes.com/sites/venkateshrao/2011/12/05/the-rise-of-developeronomics/"></a><a href="/uploads/2011/12/1635898-flame_on_super.jpg"><img alt="" class="alignright size-medium wp-image-5337" height="173" src="/uploads/2011/12/1635898-flame_on_super-300x173.jpg" title="1635898-flame_on_super" width="300"></a><a href="https://www.forbes.com/sites/venkateshrao/2011/12/05/the-rise-of-developeronomics/">Forbes is wrong</a> when it says:</p>
<blockquote>
<p>The thing is, software talent is extraordinarily nonlinear...It’s still a kind of black magic...the 10x phenomenon, and the industry’s reliance on it, doesn’t seem to get engineered or managed away. Because the 10xers keep inventing new tools for themselves …</p></blockquote><p><a href="https://www.forbes.com/sites/venkateshrao/2011/12/05/the-rise-of-developeronomics/"></a><a href="/uploads/2011/12/1635898-flame_on_super.jpg"><img alt="" class="alignright size-medium wp-image-5337" height="173" src="/uploads/2011/12/1635898-flame_on_super-300x173.jpg" title="1635898-flame_on_super" width="300"></a><a href="https://www.forbes.com/sites/venkateshrao/2011/12/05/the-rise-of-developeronomics/">Forbes is wrong</a> when it says:</p>
<blockquote>
<p>The thing is, software talent is extraordinarily nonlinear...It’s still a kind of black magic...the 10x phenomenon, and the industry’s reliance on it, doesn’t seem to get engineered or managed away. Because the 10xers keep inventing new tools for themselves to stay 10xers...</p>
</blockquote>
<p>This is folklore, not science, and it is not the view of people who actually study the industry.</p>
<p>Professional talent does vary, but there is not a <strong>shred</strong> of evidence that the best <strong>professional</strong> developers are an order of magnitude more productive than median developers at <strong>any timescale</strong>, much less on a meaningful timescale such as that of a product release cycle. There is abundant evidence that <strong>this is not the case</strong>: the most obvious being that there are no companies, at any scale, that demonstrate order-of-magnitude better-than-median productivity in delivering software products. There are companies that deliver updates at a higher cadence and of a higher quality than their competitors, but not 10x median. The competitive benefits of such productivity would be overwhelming in any industry where software was important (i.e., any industry); there is virtually no chance that such an astonishing achievement would go unremarked and unexamined.</p>
<p><a href="/uploads/2011/12/bogged-down-8x6.jpg"><img alt="" class="size-medium wp-image-5338 alignleft" height="300" src="/uploads/2011/12/bogged-down-8x6-269x300.jpg" title="bogged down-8x6" width="269"></a>This folklore arises, in part, because it <strong>is</strong> possible to be arbitrarily more productive than the worst. The software industry is no different than any other in terms of the "Peter Principle" of people rising to their level of incompetence: developers who succeed tend to move on to work on larger, more complex projects and, regrettably, not every developer or development team understands that different techniques are required at different scales. The tools and techniques that suffice for 5,000 lines of source-code don't suffice for 50,000 and what suffices with 50,000 don't suffice with half-a-million. The totally competent at one level of complexity may totally fail at the next. One of the depressing realities of being a software development consultant is regularly walking in to these situations, with their broken morale, finger-pointing, and distrust. 10x more productive? Nonsense! You're dividing by zero!</p>
<p>Sure, there are <strong>tasks</strong> at which one programmer may well be an order of magnitude faster than his or her colleagues. Being well-practiced in a technique or the use of a component can easily lead to such gains. It's difficult for non-developers to understand how fundamentally <em>plastic</em> software is; a programmer can deliver a feature in any number of ways and even when there is broad agreement about an overall approach, there is a vast advantage in knowing "these two components turn out to be incompatible" or "that answer is easily provided by this library."</p>
<p>How do task-based advantages play out over the course of, say, a year? No one knows: I've never heard of a study that tried to quantify developer productivity over such a long timescale. The problem of even <strong>defining</strong> productivity at such a timescale is ample cause for argument. Professional software development is a team sport, and most development managers have experienced a trade-off of a developer with technical skills but less-than-desired soft skills. Conversely, time spent away from the keyboard actually working with users often leads to far more value than would be achieved by coding away and checking later.</p>
<p>None of this is to say that there are not individual differences in productivity. Based on the programmers I've met over the course of 20 years of working with software teams, I think that over long timescales, the top 5% of programmers are probably 2-3x as productive as median programmers (and I don't think <strong>anyone</strong> in industry is 10x median: industry <strong>couldn't provide sustenance</strong> for such a creature). I tend to think that this is a combination of inherent talent, the speed with which they can switch between tasks and techniques, and temperament.</p>
<p><a href="/uploads/2011/12/314house.jpg"><img alt="" class="alignright size-full wp-image-5339" height="259" src="/uploads/2011/12/314house.jpg" title="314house" width="173"></a>I get stirred up about this folklore because it has major consequences. An industry where excellence is 10x median performance ought to be structured very differently than an industry where excellence is 2-3x median.</p>
<p>Variations in productivity compound: over the course of several release cycles, even in a world without super-programmers, the excellent team can crush the less-the-average (even putting aside the uncommon, but not vanishingly rare, competition that truly has zero productivity or is even in negative making-things-worse mode).</p>
<p>But <strong>even if</strong> there are real super-programmers, Forbes <strong>still</strong> is wrong about "developernomics." The <strong>real</strong> issue in software development is which of these two charts correctly describes the cost of fixing a defect over time:</p>
<p><a href="/uploads/2011/12/TDD1.jpg"><img alt="" class="alignnone size-full wp-image-5340" height="442" src="/uploads/2011/12/TDD1.jpg" title="TDD1" width="550"></a></p>
<p><a href="/uploads/2011/12/photo.jpg"><img alt="" class="alignnone size-full wp-image-5341" height="480" src="/uploads/2011/12/photo.jpg" title="photo" width="640"></a></p>
<p>The first is the Boehm curve and the second is the Beck curve. The Boehm curve describes the view presented in "<a href="https://www.amazon.com/exec/obidos/ASIN/0138221227/thinkinginnet-20">Software Economics</a>" and holds that the cost of fixing a defect rises exponentially over time: it is cheap to correct a mistake when sitting around a table gathering requirements, more expensive to fix during initial coding, more expensive to fix late in testing before release, very expensive to fix after release. The Beck curve describes the view presented in "Extreme Programming Explained": while it's still cheapest to fix a mistake before a line of code is written, fixing a two-year-old defect in production code is not really <em>that</em> much more expensive than fixing the defect 10 minutes after it's first introduced into code.</p>
<p>There is much to be said about these curves, but the crucial point is this: <strong>individual programmer excellence, whether 10x median or 2x, does not drive organizational software productivity</strong>. Any team, no matter how talented the individuals, whose costs follow the Boehm curve will, over time, lose to any team, no matter how mediocre the individuals, whose costs follow the Beck curve. It's just a matter of where the cross-over occurs.</p>
<p><a href="/uploads/2011/12/obrien-super-cost-curve.jpg"><img alt="" class="alignnone size-full wp-image-5342" height="364" src="/uploads/2011/12/obrien-super-cost-curve.jpg" title="obrien-super-cost-curve" width="426"></a></p>
<p>Does industry have teams whose costs follow the Boehm curve? Yes, absolutely. Does industry have teams whose costs follow the Beck curve? I'm not sure that the constant-over-time flatness is realistic, but absolutely teams can bend the curve towards the ideal. Call it "process-nomics" or "team-nomics" or, hell, call it "developernomics" because it <strong>is</strong> developer-centric. The problem with the Beck curve from the management perspective is that to achieve that curve, you have to give up traditional project management controls. Gantt charts don't work with agile development. You can't do fixed-price, fixed-feature, fixed-time budgeting. You can't sign off on requirements and wait around for teh awesome to appear under the Christmas tree.</p>
<p>Management hates giving up that stuff so much that they would rather continue chasing unicorns and 10x super-programmer teams and magical complexity-free programming models. So now, because of this stupid Forbes article, you're going to have to explain to your bosses why it's <strong>stupid</strong> and off-putting to write a "we're looking for rockstars!" job ad and why you <strong>shouldn't</strong> either jump on the first "ninja" to walk in the door or spend a year filling a position and they're going to be pissed when you ask the obvious "if you believe this, then which of our developers is going to be paid \$700,000 per year?"</p>
<p>And the fact that they <strong>don't</strong> structure salary like that? It shows that, not far from the surface, they know its bullshit.<a href="/uploads/2011/12/4924736342_a16a73cb3b.jpg"><img alt="" class="alignnone size-full wp-image-5343" height="329" src="/uploads/2011/12/4924736342_a16a73cb3b.jpg" title="4924736342_a16a73cb3b" width="500"></a></p>
<p><strong>Update</strong>: If the subject’s of interest to you, you might enjoy (or despise) the column on the subject I’ve been writing for SD Times for the past decade.</p>
<p><strong>Update:</strong> A little less rant-y follow-up post <a href="http://www.knowing.net/index.php/2011/12/11/why-10x-ticks-me-off/">Why 10x Ticks Me Off</a></p>
<p><strong>Update</strong>: <a href="http://www.knowing.net/index.php/2011/12/13/my-hunch-as-to-the-distribution-of-software-excellence/">Moneycode vs. Developernomics</a></p>An Agile Thought Experiment2011-12-04T11:38:00-10:002011-12-04T11:38:00-10:00larrytag:knowing.net,2011-12-04:/posts/2011/12/a-troubling-case-study/<p>A team, unaccustomed to but enthusiastic about moving towards agile methodologies, begins an important project. The project has many facets and a number of strong developers, so it seems natural for the developers to concentrate on a single aspect: Adam is associated with the Widget feature, Barbara focuses on the …</p><p>A team, unaccustomed to but enthusiastic about moving towards agile methodologies, begins an important project. The project has many facets and a number of strong developers, so it seems natural for the developers to concentrate on a single aspect: Adam is associated with the Widget feature, Barbara focuses on the Sprocket, Charlie with the Doohickey, etc. Charlie is the most familiar with the domain, the legacy codebase upon which the project is being built, etc.</p>
<p>The project is scheduled to last 36 weeks, divided into 12 3-week sprints. At the end of Sprint 8, Peter the Product Owner is satisfied with the feature set of the Sprocket, Doohickey, and other facets, but it has turned out that the Widget feature has been more complex and is clearly going to be the focus of the remaining sprints. Further, Peter has a number of additional features that he'd like to see in the finished project, if possible.</p>
<p>Charlie says "Well, I can add these new features as requested by Peter, but not using Adam's code, which doesn't capture several important domain concepts needed to rapidly develop them." Adam says "These new features are outside the domain I've worked in. I think my code is fine, but I cannot guarantee where it will be in the few remaining sprints." Adam's code is shelved, the team realigns into a more traditional lead programmer structure with Charlie "doing the hard parts." At the end of Sprint 12, the project moves across the finish line with an acceptable level of quality.</p>
<p>Would you say that this project was a success because "It delivered customer value on time; it discovered a problem and course-corrected, the switch into a non-agile mode for a short period is fine, like a 2-minute drill in football."? Or would you say that the project was a failure because "It relied on 'superhero' efforts from Charlie at the last minute; it didn't identify that the Widget feature was not coming together properly and 24 weeks of Adam's efforts did not go into production."?</p>
<p>What improvements to methodology and team structure could be made for future projects? Should the team structure themselves <strong>more</strong> along the lines of a Lead Programmer model (Charlie is clearly the most productive developer) or <strong>less</strong> (the argument being that the feature-focused structure distributes credit and blame unfairly)?</p>Best 100% Kona Coffees: 2011 Holualoa Coffee Stroll2011-11-05T12:30:00-10:002011-11-05T12:30:00-10:00larrytag:knowing.net,2011-11-05:/posts/2011/11/best-100-kona-coffees-2011-holualoa-coffee-stroll/<p>Not counting Geek Acres, the best 100% Kona coffees were available for tasting during the annual Coffee Stroll.</p>
<p>Tina and I both agreed on the top 3:</p>
<ol>
<li>Mr. Bean: Complex, bright, great mouthfeel, clean finish -- everything you could want in a coffee.</li>
<li>Sugai: Super mellow and round with a clean …</li></ol><p>Not counting Geek Acres, the best 100% Kona coffees were available for tasting during the annual Coffee Stroll.</p>
<p>Tina and I both agreed on the top 3:</p>
<ol>
<li>Mr. Bean: Complex, bright, great mouthfeel, clean finish -- everything you could want in a coffee.</li>
<li>Sugai: Super mellow and round with a clean finish, but not quite as bright as Mr. Bean</li>
<li>Jasminum: Very bright but smooth, nice finish. Not quite as much mouthfeel as other 2.</li>
</ol>
<p>Honorable mentions to:</p>
<ul>
<li>Aikane (Chocolate-y)</li>
<li>Buddha’s Cup -- a previous favorite, seemed like the finish was a little more acid-y than previously</li>
<li>Grandmas Choice -- only available in a dark roast, which is a pity. Would have been a finalist if a little more bean taste</li>
<li>Kona Coffee & Tea Company -- very good, complex, bright. Cold-brew available: very sweet, almost like a flavored coffee</li>
</ul>OOPSLA Day 2: Explicit Use-Case Representation in Programming Languages2011-10-25T05:16:00-10:002011-10-25T05:16:00-10:00larrytag:knowing.net,2011-10-25:/posts/2011/10/oopsla-day-2-explicit-use-case-representation-in-programming-languages/<p>One of the emerging themes at this conference is the need to move “examples” (and their older siblings, scenarios and use-cases) “into the code,” so that examples/stories/scenarios/use-cases, which are tremendously meaningful to the subject-matter experts, are actually traceable directly into the code, which is tremendously meaningful to …</p><p>One of the emerging themes at this conference is the need to move “examples” (and their older siblings, scenarios and use-cases) “into the code,” so that examples/stories/scenarios/use-cases, which are tremendously meaningful to the subject-matter experts, are actually traceable directly into the code, which is tremendously meaningful to, you know, the machine.</p>
<p>I very much enjoyed a talk on “Use-case Representation in Programming Languages,” which described a system called UseCasePy that added a \@usecase annotation to Python methods. So you would have:<br>
[sourcecode]<br>
\@usecase(DrawARectangle,DrawALine)<br>
def drawLine(ptA, ptB) … etc …<br>
[/sourcecode]</p>
<p>Now, even if you go no further, you’re doing better than something in a documentation comment, since you can easily write a tool that iterates over all source-code, queries the metadata and builds a database of what classes and methods participate in every use-case: very useful.</p>
<p>Even better, if you have a runtime with a decent interception hook, you can run the program in a particular use-case (perhaps from your BDD test suite, perhaps from an interactive tool), acquire the set of methods involved, and determine, by exercising a large suite of use-cases, metrics that relate the codes “popularity” to user-meaningful use-cases, which could be very helpful in, for instance, prioritizing bug-fixes.</p>
<p>Oh, by the way, apparently we no longer call them “users” or even “domain experts,” they are now “Subject Matter Experts” or even SMEs (“Smees”).</p>OOPSLA Day 2: Explicit Use-Case Representation in Programming Languages2011-10-25T05:16:00-10:002011-10-25T05:16:00-10:00larrytag:knowing.net,2011-10-25:/posts/2011/10/oopsla-day-2-explicit-use-case-representation-in-programming-languages-2/<p>One of the emerging themes at this conference is the need to move “examples” (and their older siblings, scenarios and use-cases) “into the code,” so that examples/stories/scenarios/use-cases, which are tremendously meaningful to the subject-matter experts, are actually traceable directly into the code, which is tremendously meaningful to …</p><p>One of the emerging themes at this conference is the need to move “examples” (and their older siblings, scenarios and use-cases) “into the code,” so that examples/stories/scenarios/use-cases, which are tremendously meaningful to the subject-matter experts, are actually traceable directly into the code, which is tremendously meaningful to, you know, the machine.</p>
<p>I very much enjoyed a talk on “Use-case Representation in Programming Languages,” which described a system called UseCasePy that added a \@usecase annotation to Python methods. So you would have:<br>
[sourcecode][/sourcecode]<br>
\@usecase(DrawARectangle,DrawALine)<br>
def drawLine(ptA, ptB) … etc …</p>
<p>Now, even if you go no further, you’re doing better than something in a documentation comment, since you can easily write a tool that iterates over all source-code, queries the metadata and builds a database of what classes and methods participate in every use-case: very useful.</p>
<p>Even better, if you have a runtime with a decent interception hook, you can run the program in a particular use-case (perhaps from your BDD test suite, perhaps from an interactive tool, acquire the set of methods involved, and determine, by exercising a large suite of use-cases, metrics that relate the codes “popularity” to user-meaningful use-cases, which could be very helpful in, for instance, prioritizing bug-fixes.</p>
<p>Oh, by the way, apparently we no longer call them “users” or even “domain experts,” they are now “Subject Matter Experts” or even SMEs (“Smees”).</p>)2011-10-24T16:57:00-10:002011-10-24T16:57:00-10:00larrytag:knowing.net,2011-10-24:/posts/2011/10/5315/<p>RIP John McCarthy. Truly one of the greats in our field.</p>OOPSLA: Seriously, No Runtime Semantics2011-10-24T12:57:00-10:002011-10-24T12:57:00-10:00larrytag:knowing.net,2011-10-24:/posts/2011/10/oopsla-seriously-no-runtime-semantics/<p>This is Dart:</p>
<p>[sourcecode lang="JavaScript"]<br>
main() {<br>
try{<br>
var x = 'foo';<br>
int s = x;<br>
print('Shirley, you are joking');<br>
}catch(var e){<br>
print('Surely this will be executed.');<br>
}<br>
}<br>
[/sourcecode]</p>
<p>Note that I've declared <strong>s</strong> to be of type <strong>int</strong> and, just to make sure the point is clear, have assigned …</p><p>This is Dart:</p>
<p>[sourcecode lang="JavaScript"]<br>
main() {<br>
try{<br>
var x = 'foo';<br>
int s = x;<br>
print('Shirley, you are joking');<br>
}catch(var e){<br>
print('Surely this will be executed.');<br>
}<br>
}<br>
[/sourcecode]</p>
<p>Note that I've declared <strong>s</strong> to be of type <strong>int</strong> and, just to make sure the point is clear, have assigned this <strong>int</strong> a value <em>foo</em> which, if there were runtime type semantics, would throw an exception (and, if there were mandatory typing, wouldn't even compile). In Dart, the output of this is:</p>
<p><a href="/uploads/2011/06/Screen-Shot-2011-10-24-at-3.55.41-PM.png"><img alt="" class="size-full wp-image-5311" height="450" src="/uploads/2011/06/Screen-Shot-2011-10-24-at-3.55.41-PM.png" title="Screen Shot 2011-10-24 at 3.55.41 PM" width="418"></a></p>OOPSLA Day 2: David Ungar -- Everything You Know (About Parallel Programming) Is Wrong2011-10-24T10:54:00-10:002011-10-24T10:54:00-10:00larrytag:knowing.net,2011-10-24:/posts/2011/10/oopsla-day-2-david-ungar-everything-you-know-about-parallel-programming-is-wrong/<p>I should hope so.</p>
<p>This was the afternoon’s first major talk. David Ungar from IBM Research first demonstrated that the tragedy of Romeo & Juliet comes from a race condition (if only he had waited for news from the Friar).</p>
<p>That was excellent, but the real premise of his talk …</p><p>I should hope so.</p>
<p>This was the afternoon’s first major talk. David Ungar from IBM Research first demonstrated that the tragedy of Romeo & Juliet comes from a race condition (if only he had waited for news from the Friar).</p>
<p>That was excellent, but the real premise of his talk was that there is a fundamental tension between correctness and synchronization in manycore and the scalable solution (he asserts) is to eliminate synchronization. He proposed a few names for this type of programming model : anti-lock or “race and repair.”</p>
<p>This reminds me (and at least one questioner in the audience) of the application- or web-level concept of “eventually consistent.”</p>
<p>The bulk of the talk was a discussion of his experiments with a programming problem (a slightly-more-complicated version of hash table insert) with various techniques that trade off correctness with performance. What he showed (at least in this one experiment) was that he could get better performance from a “race and repair” technique than he could get from compare-and-swap.</p>
<p>He tentatively proposes that probabilistic data structures and algorithms, in which correctness is a spectrum that can be traded with performance, is a new field of study.</p>OOPSLA Day 2: Greatest Finding Ever2011-10-24T10:31:00-10:002011-10-24T10:31:00-10:00larrytag:knowing.net,2011-10-24:/posts/2011/10/oopsla-day-2-greatest-finding-ever/<blockquote>
<p>Perl users in our study performed notably poorly... no better than a language designed largely by chance.</p>
</blockquote>
<p>They mean this literally, having used in their study a language called “Randomo”:</p>
<blockquote>
<p>With the exception of braces, the lexical rule for variable names, and a few operators (e.g., addition, subtraction, multiplication …</p></blockquote><blockquote>
<p>Perl users in our study performed notably poorly... no better than a language designed largely by chance.</p>
</blockquote>
<p>They mean this literally, having used in their study a language called “Randomo”:</p>
<blockquote>
<p>With the exception of braces, the lexical rule for variable names, and a few operators (e.g., addition, subtraction, multiplication, division), many of the keywords and symbols were chosen randomly from the ASCII table.</p>
</blockquote>
<p>http://www.cs.siue.edu/\~astefik/papers/StefikPlateau2011.pdf</p>OOPSLA Day 2: More on Dart2011-10-24T09:39:00-10:002011-10-24T09:39:00-10:00larrytag:knowing.net,2011-10-24:/posts/2011/10/oopsla-day-2-more-on-dart/<p>I think when people saw that Dart was from Gilad Bracha and Lars Bak there was an expectation that Dart was going to be a grand synthesis: a blazingly-fast NewSpeak-with-curly-brackets. It’s very much not such a language. It doesn’t seem, academically, vastly innovative because it doesn’t add …</p><p>I think when people saw that Dart was from Gilad Bracha and Lars Bak there was an expectation that Dart was going to be a grand synthesis: a blazingly-fast NewSpeak-with-curly-brackets. It’s very much not such a language. It doesn’t seem, academically, vastly innovative because it doesn’t add much. But, in truth, optional types are a radical design decision in that they <strong>take away</strong> runtime aspects that a lot of mainstream programmers expect. (Of course, this raises the question of how to define the “mainstream”…)</p>
<p>...</p>
<p>Pros and Cons of Mandatory Typing In Descending Order of Importance (per Gilad Bracha):</p>
<p>Pros:</p>
<ul>
<li>machine-checkable documentation</li>
<li>types provide conceptual framework</li>
<li>early error detection</li>
<li>performance advantages</li>
</ul>
<p>Cons:</p>
<ul>
<li>expressiveness curtailed</li>
<li>imposes workflow</li>
<li>brittleness</li>
</ul>
<p>…</p>
<p>Having said that, I attended a lecture in which someone, perhaps from Adobe, measured the performance impact of optional typing. Their conclusion, although admittedly done on the troublesome-ly small and artificial SunSpider benchmarks, was that the performance penalty of implicit types amounts to 40% (with a very large standard of deviation). That “feels” about right to me -- definitely significant but not the overwhelming performance benefit you might get from either parallelization or an algorithmic change.</p>OOPSLA Day 2: Gilad Bracha on Dart2011-10-24T07:26:00-10:002011-10-24T07:26:00-10:00larrytag:knowing.net,2011-10-24:/posts/2011/10/oopsla-day-2-gilad-bracha-on-dart/<p>Gilad Bracha started the day’s Dynamic Languages Symposium with an invited talk on Dart, a new Web programming language (read: JavaScript replacement) in which “Sophisticated Web Applications need not be a tour de force.”</p>
<p>OOPSLA is attended by academics, who are typically less interested in the surface appearance of …</p><p>Gilad Bracha started the day’s Dynamic Languages Symposium with an invited talk on Dart, a new Web programming language (read: JavaScript replacement) in which “Sophisticated Web Applications need not be a tour de force.”</p>
<p>OOPSLA is attended by academics, who are typically less interested in the surface appearance of a program (they’ve seen just about variation) and more interested in semantic questions whose impact in the real-world might not be felt for many years. So Bracha begins his talk by disavowing the “interesting-ness” of Dart: it’s a language whose constraints are entirely mundane:</p>
<ul>
<li>Instantly familiar to mainstream prorgammer</li>
<li>Efficiently compile to JavaScript</li>
</ul>
<p>(Personally, I take it as a damnation of the audience that “Of interest to 90% of the programming world” is not of importance, but the gracious interpretation is that these are the trail-blazers who are already deep in hostile territory.)</p>
<p>The gist of Bracha’s talk was on Dart’s “optional types” semantics. The great takeaway from this, I think, is that:<br>
"Dart's optional types are best thought of as a type assertion mechanism, not a static type system"<br>
which allows for code that can make your blood run cold; what certainly <strong>looks</strong> like a statement of programmer intention (“this variable is of type Foo”) can be blithely trod over at runtime (“in fact, this variable is of type Bar”) without so much as a by-your-leave.</p>
<p>The type expression is only evaluated at compilation time and, if the developer puts the compiler in “development” mode, you get warnings and errors. <strong>But</strong> once out of development mode, there are <strong>no</strong> runtime semantics of the type expressions. They have no behavior, but on the other hand, they have no cost. And, argues Bracha, this seemingly extreme position is important to support a language that remains truly dynamic and does not “put you in a box” wherein the type system becomes a restriction on expressiveness.</p>
<p>…</p>
<p>One of the seemingly-obscure corners of language design are the semantics of generics (the building blocks of collection classes). Generics in Dart are reified and covariant, which to an academic means “the type system is unsound.” Bracha acknowledges this and says that he’s “given up” on fighting this battle.</p>
<p>…</p>
<p>Another interesting design element of Dart is its recognition that the “classic” object-oriented constructor is a failed abstraction that only allows for “I want to allocate a new instance…” instead of common scenarios such as “I want to get an object from cache,” “I want an object from a pool of a specific size (often 1),” etc. So you can declare something that looks an awfully lot like a classical constructor, but in fact is “allowed” to return whatever the heck it wants. (I put “allowed” in quotes because, remember, all this type stuff is just epiphenomenal \<-- mandatory big word every paragraph!)</p>
<p>…</p>
<p>The lack of mandatory types preclude the creation of type classes or C#-style extension methods. Those are grating, but <strong>really</strong> of concern to me is that their lack also precludes type-based initialization. This leads to the disturbing design that variables will have the value <strong>null</strong> until they are assigned to; a “disturbing design” that is standard in the mainstream but hated by all.</p>
<p>…off to lunch, more later...</p>OOPSLA Day 02011-10-22T14:38:00-10:002011-10-22T14:38:00-10:00larrytag:knowing.net,2011-10-22:/posts/2011/10/oopsla-day-0/<p>I am in Portland for <a href="http://splashcon.org">OOPSLA / SPLASH</a>, a conference that is my sentimental favorite. I think my first OOPSLA was in New Orleans circa 1990 and OOPSLA Vancouver 92 is filled with memories (mostly because Tina came and we dove Orcas Island <em>in wetsuits</em>).</p>
<p>OOPSLA is traditionally the big academic …</p><p>I am in Portland for <a href="http://splashcon.org">OOPSLA / SPLASH</a>, a conference that is my sentimental favorite. I think my first OOPSLA was in New Orleans circa 1990 and OOPSLA Vancouver 92 is filled with memories (mostly because Tina came and we dove Orcas Island <em>in wetsuits</em>).</p>
<p>OOPSLA is traditionally the big academic conference for programming language theory and implementation. When I was a magazine editor and track chair for the Software Development Conferences, OOPSLA is where I trolled for new fish -- concepts and writers that were ready for trade exposure. That’s no longer my business, and I wonder if I’ll get the same thrill from attending that I used to.</p>
<p>The program looks promising and I’ve just spent a few hours going over the papers in the proceedings DVD (no more phonebook-sized proceedings to bow the bookshelves, but I’m sure I can still steal some article ideas…).</p>
<p>I’m happy by the late addition of talks by Gilad Bracha and Lars Bak on Dart, the new programming language from Google. I’m unabashedly a fan of Bracha’s <a href="http://bracha.org/Site/Newspeak.html">NewSpeak</a> and the one time I heard Bak talk, I said he was “<a href="http://www.knowing.net/index.php/2009/04/20/langnet-dsl-devcon-highlights/">dynamite….Concrete, informed, impressive…</a>.” so I’m favorably disposed to like their language, even if it does have <strong>null</strong> (and not just have it, but</p>
<blockquote>
<p>In Dart, all uninitialized variables have the value null, regardless of type. Numeric variables in particular are therefore best explicitly initialized; such variables will not be initialized to 0 by default.</p>
</blockquote>
<p>Which strikes me as flat-out crazy, reiterating Tony Hoare’s “Billion-Dollar Mistake.”<br>
Early reaction to Dart has been pretty harsh, it will be interesting to discuss it in-person (where the tone will be 1000x more reasonable and respectful than on the Internet).</p>What Killed the C Compiler Vendors?2011-10-09T16:56:00-10:002011-10-09T16:56:00-10:00larrytag:knowing.net,2011-10-09:/posts/2011/10/what-killed-the-c-compiler-vendors/<p>I read with interest, but disagree with, <a href="http://shape-of-code.coding-guidelines.com/2011/10/08/memory-capacity-and-commercial-compiler-development/">this take on why the software tools industry dwindled in the early 90s</a>. Like most historical accounts, it tries to achieve a linear account of a historical rise and fall: there were a lot of compiler vendors because writing a commercial compiler was …</p><p>I read with interest, but disagree with, <a href="http://shape-of-code.coding-guidelines.com/2011/10/08/memory-capacity-and-commercial-compiler-development/">this take on why the software tools industry dwindled in the early 90s</a>. Like most historical accounts, it tries to achieve a linear account of a historical rise and fall: there were a lot of compiler vendors because writing a commercial compiler was relatively easy and then, as hardware advanced, remaining competitive became harder. 1-2-3.</p>
<p>I hold to a much more contingent view of history, at least in this industry. There were a lot of C compilers because the industry was expanding and people who hadn't been competitors in 1985 <strong>were</strong> competitors in 1990. And the reason that the commercial software tools industry shrank so dramatically in the early 90s had, it seems to me, little to do with the actions of the individual language vendors and much more to do with:</p>
<ul>
<li>the release of Windows 3.1;</li>
<li>the wrong-but-wideheld association of GUI programming and object-orientation</li>
<li>C++ as the winner of the "hybrid C" horse-race;</li>
<li>Microsoft's decision to become more aggressive in the field, providing "good enough" IDEs, compiler tool-chains, linkers, debugging tools, etc. at a low cost</li>
</ul>
<p>Zortech and Borland beat Microsoft to market with C++ and Watcom's 32-bit C compiler was flat-out better than anyone else's. You could argue about who had the best DOS-based IDEs, but Borland had a Windows-based C and C++ IDE on the market for a full year before Microsoft!</p>
<p>But Microsoft launched Visual Basic and then Visual C++ and MSDN (on CD-ROM!) and <strong>everyone</strong> wanted to build Windows apps -- it was a much bigger industry change than today's shift towards mobile development, because enterprise's wanted their <strong>internal</strong> systems rewritten in Windows, not just new development and not just customer-facing development.</p>
<p>Borland stumbled <strong>terribly</strong> trying to become a full-fledged competitor to Microsoft by creating office-suite applications. Whether that directly drained talent from the languages division or not, I can't say, but it certainly drained Borland's coffers and as Microsoft was having the San Jose Orchestra play to the Software Development Conference, the poor Borland crew was making their way home over rain-soaked Highway 17 because the company wouldn't put them up in Silicon Valley hotels.</p>
<p>In the UNIX market, we kept thinking that Sun was going to come along and show the PC guys what software development tools could look like, but they never marketed their tools well until Java, whose rise was also not due to the inherent merits of that language or its tool-chain. But that's a story for another day...</p>La Serena Driving: Notes from Chile2011-09-26T11:23:00-10:002011-09-26T11:23:00-10:00larrytag:knowing.net,2011-09-26:/posts/2011/09/la-serena-driving-notes-from-chile/<p>Between the high-revving manual transmission, the shave-the-door lanes, and the staccato "Turn left" instructions issuing from my iPhone GPS, driving here has a very XBox-ian feel to it. If you pretend the randomly located speed bumps are power-ups, the illusion is nearly perfect.</p>
<p>...</p>
<p><img alt="img" src="/uploads/2011/09/IMG_0371-300x224.png"> <img alt="img" src="/uploads/2011/09/IMG_0371.png">There are an astonishing number of taxis …</p><p>Between the high-revving manual transmission, the shave-the-door lanes, and the staccato "Turn left" instructions issuing from my iPhone GPS, driving here has a very XBox-ian feel to it. If you pretend the randomly located speed bumps are power-ups, the illusion is nearly perfect.</p>
<p>...</p>
<p><img alt="img" src="/uploads/2011/09/IMG_0371-300x224.png"> <img alt="img" src="/uploads/2011/09/IMG_0371.png">There are an astonishing number of taxis, small black Chevies. To leave my hotel, I have to take a right and cross a lane; I am just downhill of a crest and the taxis pronk into view, not airborne but visibly lifting over their suspensions. Since I have to wait for a gap, I dart out in front of a rain of taxi drivers racing for a lead. It's like running onto the course behind a steeple-chase gate.</p>
<p>...</p>
<p>Road racing is big here (apparently) and people have taken to wearing stilts to see over the crowd. But stilts are kind of boring, so they wear costumes. And on TV, you see the cars coming through the corners and a swath of tightly packed onlookers and, behind them, all these long-legged butterflies and jesters.</p>
<p>...</p>
<p>Jugglers busk at the intersection. A juggler works his pins a good 15' in the air, another rolls his pins over his head backwards and then blindly kicks them back over his head forward with his feet. I wish I had coins to give them.</p>
<p>...</p>
<p>A cab token costs only a few thousand pesos, so the city is overrun and cab driving is a hard living. I told my dinner companion about New York, where a taxi medallion is worth tens of thousands of dollars, so they are owned by the rich and being a share-cropping cab driver is a hard life.</p>WinRT is as much about manycore processing as it is about the UI.2011-09-25T09:51:00-10:002011-09-25T09:51:00-10:00larrytag:knowing.net,2011-09-25:/posts/2011/09/winrt-is-as-much-about-manycore-processing-as-it-is-about-the-ui/<p>The long-term success of every operating system is tied to the progress of hardware, which has taken a 90-degree turn from "faster every generation" to "more parallel every generation." For the better part of a decade, the chips in new machines have run no faster, but there have been more …</p><p>The long-term success of every operating system is tied to the progress of hardware, which has taken a 90-degree turn from "faster every generation" to "more parallel every generation." For the better part of a decade, the chips in new machines have run no faster, but there have been more processors living side-by-side. Many of us run "octocore" desktops and Santa will be delivering 16-core systems to good little programmers this year.</p>
<p>The days of single-threaded programming is over. Done. When someone complains about performance and find out out that your code uses 1/16 or 1/32 of the power available, there's going to be a lot of trouble. But nevermind *your* problems, think about the OS vendors looking at a future with dozens of cores inside a single machine. And not just dozens of cores, but the absolute certainty that the entire hardware infrastructure will be parallelized. The next decade will bring the wholesale reinvention of the PC architecture and I'll bet dollars to donuts that at least one major operating system is going to screw up and lose years of performance improvements. At this point, with Windows still recovering from the Vista debacle and still trying to get its mobile feet firmly planted, it's not at all certain that the Windows hegemony will last through 2025.</p>
<p>WinRT, the runtime used for the new "Metro-style" programs of Windows 8, gives Microsoft a new system-level interface that is designed for highly-parallelized programs. Every function that is expected to take more than 1/20th of a second to execute has been recast in an asynchronous form: developers will certainly be able to screw up and write programs that block/freeze, but they will have difficulty blaming that problem on the OS.</p>
<p>A highly asynchronous system-level API gives Microsoft the top-down leverage it needs to squirrel around at the lowest levels, reworking the OS incrementally to work with more-and-more side-by-side processing. The dramatic break in UI appearance is both a powerful aesthetic incentive and a subtle indicator of compliance -- you want the Metro UI and, if you have it, your code is built on a foundation that has firm asynchronous roots.</p>
<p>Given the development tempo and lifespan of enterprise applications, it is not a moment too soon for this change.</p>Birds: Notes From Chile2011-09-24T07:00:00-10:002011-09-24T07:00:00-10:00larrytag:knowing.net,2011-09-24:/posts/2011/09/birds-notes-from-chile/<p>As the sun falls, the seagulls, which have been the only birds I've seen, are joined by some swifts darting into the facade of nearby buildings and a trio of hawks or maybe kites: rather drab, but with that athletic sharp-banked twisting flight.</p>
<p>...</p>
<p>The wide beach has a cold-looking tumbling …</p><p>As the sun falls, the seagulls, which have been the only birds I've seen, are joined by some swifts darting into the facade of nearby buildings and a trio of hawks or maybe kites: rather drab, but with that athletic sharp-banked twisting flight.</p>
<p>...</p>
<p>The wide beach has a cold-looking tumbling surf but there are no surfers, at least tonight. Finally I see some seabirds beyond gulls -- a trio of pelicans riding the ground-effect of the waves and an ill-defined flock of diving seabirds I can't see well in the heavy glare.</p>
<p>...</p>
<p>I have beheld a Peruvian booby! I love boobies! And not just because of the name; they are elegant flyers (but mostly because of the name). I have now seen every booby but one -- the blue-footed.</p>
<p>...</p>
<p><img alt="" class="alignright" height="160" src="http://www.arthurgrosset.com/sabirds/photos/themel16402.jpg" width="240"></p>
<p>As we leave Choros, an Ibis lifts heavily out of the grass and flies alongside the bus for a hundred yards. It's head is a lovely complex of curves.</p>
<p>...</p>
<p>I saw a seagull near the supermarket that looked like it was cross-bred with an albatross. It had long thin pointed wings like an ocean cruiser. I'm pretty sure it was just a seagull, but a fine Antipodean gull cut out for scavenging dumpsters off Cape Horn.</p>
<p>...</p>
<p>Condors ride thermals, and thermals are bad for seeing, so when the condors are at the observatory, the astronomers curse.</p>
<p>...</p>
<p>It's funny how shorebirds seem to be globally distributed. I've seen phalaropes, curlews, plovers, and what looked like an oystercatcher -- whether they are local species or the same as California I don't know.</p>
<p>...</p>
<p>A bay at Isla Dama is named after a "scissor bird" which sounds like a skimmer -- a bird that flies at high speed with its beak splitting the ocean surface, trying to spear a sunning fish. I've always wanted to see a skimmer. I don't on this trip.</p>A Game of Thrones: My Review2011-09-21T20:32:00-10:002011-09-21T20:32:00-10:00larrytag:knowing.net,2011-09-21:/posts/2011/09/a-game-of-thrones-my-review/<p><a href="https://www.goodreads.com/book/show/13496.A_Game_of_Thrones"><img alt="A Game of Thrones (A Song of Ice and Fire, #1)" src="http://photo.goodreads.com/books/1312430353m/13496.jpg"></a><a href="https://www.goodreads.com/book/show/13496.A_Game_of_Thrones">A Game of Thrones</a> by <a href="https://www.goodreads.com/author/show/346732.George_R_R_Martin">George R.R. Martin</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/200204540">4 of 5 stars</a></p>
<p>Dynamite, the most compellingly complete "world" I've read in I-can't-remember. The world is brilliant, a gritty and "realistic" medieval-ish place with slowly-introduced fantastical elements -- summers and winters last for years (and even decades), there were …</p><p><a href="https://www.goodreads.com/book/show/13496.A_Game_of_Thrones"><img alt="A Game of Thrones (A Song of Ice and Fire, #1)" src="http://photo.goodreads.com/books/1312430353m/13496.jpg"></a><a href="https://www.goodreads.com/book/show/13496.A_Game_of_Thrones">A Game of Thrones</a> by <a href="https://www.goodreads.com/author/show/346732.George_R_R_Martin">George R.R. Martin</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/200204540">4 of 5 stars</a></p>
<p>Dynamite, the most compellingly complete "world" I've read in I-can't-remember. The world is brilliant, a gritty and "realistic" medieval-ish place with slowly-introduced fantastical elements -- summers and winters last for years (and even decades), there were once dragons, there are zombies (wights... same thing). Martin's tone is pitch-perfect, too, with vivid descriptions that never overstep into the sentimental.</p>
<p>The characters are the weak point, but that's only noticeable because one character (Tyrion the Imp) is fully realized, complex, and the flatness of the others is apparent in contrast. On the other hand, there's a certain amount of "people are the way they are because they're duty-bound and locked into roles," so maybe those characters will flower in later books.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>6 iPhone Apps for Traveling to Chile2011-09-20T09:55:00-10:002011-09-20T09:55:00-10:00larrytag:knowing.net,2011-09-20:/posts/2011/09/6-iphone-apps-for-traveling-to-chile/<p>On my recent trip to Chile, I used the following iPhone apps:</p>
<p>Word Lens: Realtime translation. You point the iPhone at a sign or menu and you see live video, but the Spanish words are translated into English. It not only provides a "Wow!" experience, it's actually by far the …</p><p>On my recent trip to Chile, I used the following iPhone apps:</p>
<p>Word Lens: Realtime translation. You point the iPhone at a sign or menu and you see live video, but the Spanish words are translated into English. It not only provides a "Wow!" experience, it's actually by far the most useful translator, since it can be used with relatively little fanfare on, for instance, a menu. The words sometimes swim in and out of translation and only the words, not the grammar, is translated, but you definitely get the sense of what's going on.</p>
<p>Photosynth: Panoramic photos. You click "start" and the camera takes a photo, bordered with a dash. As you move the camera around, more photos are added automatically … <em>click</em> <em>click</em> <em>click</em> and a panorama is built up in no time. When you are done, the stitching of the images is completed and you have a panoramic image. The stitching is not perfect (take a look at <a href="/uploads/2011/09/IMG_0361.png">this quite-poor job</a> of the Gemini South telescope, which I thought would be an excellent candidate, given the strong lines of the telescope's struts), but the image-capture is lightning fast and on landscapes it seems to do a better job.</p>
<p><a href="https://itunes.apple.com/us/app/id329670577?mt=8">Camera+: Photography</a>. There are a few things I like about this application over the iPhone's built-in camera app. First, it has a "stabilizer" mode which only takes a photo when your hand has steadied; obviously, you can't use this in all situations, but I prefer it when trying to take a landscape. Second, it has built-in sharing for Facebook. Third, you can crop and do basic adjustments in the app. Pretty simple to use and adds some real functionality.</p>
<p>Trip Journal: Note-taking. A limited, but useful, product that allows you to keep together your photos, notes, and locations. If you actually want to put together a travelogue, you want to organize your stuff by time, which can be difficult if you keeo your notes in one program, your photos in another, and GPS waypoints in a third. Trip Journal ties together these things, <em>but</em> cannot import notes or photos from other applications and has very limited editing capabilities. It turns out, though, that it's export format (.tjz) is just a zip file that contains an XML document and the photo JPEGs, so if you're the type of person who says "Oh! Well, that makes it easy," it's a good product.</p>
<p>Night Stand: Alarm Clock I use this as my alarm clock. Some reviews complain of the alarm not working, but I use this app every day and it work for me. What people <em>may</em> be complaining about is that if you set the alarm clock to a song that is subsequently removed from the phone, the app will not complain (e.g., I have a "smart playlist" that puts highly-rated and "not recently played" music on my phone; if I set Night Stand to wake to some song on that playlist and subsequently sync the iPhone and that song gets removed, Night Stand will silently fail). So instead, I just make sure that the song I choose to wake to is on the phone and won't get bumped (on this trip, I chose to wake to "Drunken Sailor," by the Blaggards. Hey ho and up she rises!)</p>
<p>Tom Tom Chile: Navigation A few years ago, I drove around for 45 minutes in what couldn't have been more than an 8-block area looking for my hotel. I swore that I would never rent a car without turn-by-turn navigation again. This app is probably the most expensive thing I've ever bought for my iPhone, but for me, in a foreign country, with extremely limited Spanish, and no 3G Internet (I actually didn't bring my SIM-card with me on this trip), it was worth it. The street maps seemed quite accurate <em>but</em> were very, very bad about 1-way restrictions, which were extremely common. So "Ms. Garmin" would often be commanding me to move towards an impossible route. But, at some point she'd give up and reroute me through something manageable. I used this with a vent mount that I brought with me, but I neglected to bring an in-car recharger, which would have been a mistake had I not been primarily in the city. The Garmin app <em>sucks</em> power, even when it's in the background (I think what drains the power is the real-time navigation; pressing <em>Clear Route</em> when you don't need it seems to help quite a bit).</p>The Ice Limit: My Review2011-09-19T16:58:00-10:002011-09-19T16:58:00-10:00larrytag:knowing.net,2011-09-19:/posts/2011/09/the-ice-limit-my-review/<p><a href="https://www.goodreads.com/book/show/572130.The_Ice_Limit"><img alt="The Ice Limit" src="http://photo.goodreads.com/books/1298584029m/572130.jpg"></a><a href="https://www.goodreads.com/book/show/572130.The_Ice_Limit">The Ice Limit</a> by <a href="https://www.goodreads.com/author/show/12577.Douglas_Preston">Douglas Preston</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/211402267">4 of 5 stars</a></p>
<p>A fun thriller concerned with the recovery of a meteorite on the frozen islands off Cape Horn. There's a good deal of nonsense: engineering that would take months or years is done in a matter of days (to …</p><p><a href="https://www.goodreads.com/book/show/572130.The_Ice_Limit"><img alt="The Ice Limit" src="http://photo.goodreads.com/books/1298584029m/572130.jpg"></a><a href="https://www.goodreads.com/book/show/572130.The_Ice_Limit">The Ice Limit</a> by <a href="https://www.goodreads.com/author/show/12577.Douglas_Preston">Douglas Preston</a></p>
<p>My rating: <a href="https://www.goodreads.com/review/show/211402267">4 of 5 stars</a></p>
<p>A fun thriller concerned with the recovery of a meteorite on the frozen islands off Cape Horn. There's a good deal of nonsense: engineering that would take months or years is done in a matter of days (to the point of being confusing: "What? Where did a <em>road</em> come from?"), the crazy career-ruining theory that just happens to be redeemed, and an epilogue that takes the over-the-top ending to a new level. But, y'know, not every twist is telegraphed, the character's fates are somewhat surprising, and the story plays itself out within the rules it lays out for itself. The action is paced well and builds to a series of fun and increasingly implausible climaxes, which is I think exactly what you want in this kind of book. The next time I take a 6-hour flight, I'd read another book by these authors.</p>
<p><a href="https://www.goodreads.com/review/list/6080403-larry-o-brien">View all my reviews</a></p>Shark Week: La Jolla Cove2011-08-07T10:34:00-10:002011-08-07T10:34:00-10:00larrytag:knowing.net,2011-08-07:/posts/2011/08/shark-week-la-jolla-cove/<p>My first in-water shark encounter was in San Diego, in La Jolla Cove. I was snorkeling in the cove, out near “Alligator Rock” when I saw a Gray Smoothhound, an entirely harmless shark maybe 3’ long. But, hey, it’s a shark that looks like a shark and I wanted …</p><p>My first in-water shark encounter was in San Diego, in La Jolla Cove. I was snorkeling in the cove, out near “Alligator Rock” when I saw a Gray Smoothhound, an entirely harmless shark maybe 3’ long. But, hey, it’s a shark that looks like a shark and I wanted to share the moment with my friend Dave, who was maybe a hundred yards away. So I called out to him.</p>
<p>In my head, what I called out was along the lines of “Dave! A carcharhinid! Certainly a <em>Mustelus</em>, most likely <em>californicus</em>!” (I’d convinced myself that my career in Marine Biology would be aided by memorizing scientific names) But since I was snorkeling and couldn’t quite get all that out, what I shouted was, instead, “Shark! Shark!”</p>
<p>Which, it turns out, is not the most appropriate thing to shout out in a cove crowded with casual swimmers.</p>Big Island Blogger Roughed Up, Arrested for Photographing Police2011-08-07T07:57:00-10:002011-08-07T07:57:00-10:00larrytag:knowing.net,2011-08-07:/posts/2011/08/big-island-blogger-roughed-up-arrested-for-photographing-police/<p><a href="http://damontucker.com/">Damon Tucker</a>, probably the Big Island's most prominent blogger, was given a pretty solid roughing-up by Big Island police on Friday night, while videotaping police arresting people after a concert in Pahoa. The photos on Tucker's site clearly indicate that excessive force was used against Tucker, who probably weighs 150 …</p><p><a href="http://damontucker.com/">Damon Tucker</a>, probably the Big Island's most prominent blogger, was given a pretty solid roughing-up by Big Island police on Friday night, while videotaping police arresting people after a concert in Pahoa. The photos on Tucker's site clearly indicate that excessive force was used against Tucker, who probably weighs 150 pounds soaking wet. As for Tucker's "crime," it is <em>not</em> against the law to photograph and videotape police in Hawai'i (or most states), and such records are an important check on the possibility that police will occasionally overstep their authority and, say, rough up a guy who's obeying the law and weighs 150 pounds soaking wet.</p>
<p>Of course, police have a hard job, I wasn't there, etc., but I have a hard time imagining him interfering with the police or disobeying their instructions on crowd control. What I <em>don't</em> have a hard time imagining is him standing with a good view, with his camera up, recording the scene. "Standing around taking photos" is what Damon <em>does</em> and has been doing for the past half-decade or more.</p>
<p><img alt="img" src="https://damontucker.files.wordpress.com/2011/08/2011-08-05-2011-08-05-001-148.jpg?w=468&h=704"></p>Project Daytona: Iterative MapReduce on Windows Azure - Microsoft Research2011-07-18T06:58:00-10:002011-07-18T06:58:00-10:00larrytag:knowing.net,2011-07-18:/posts/2011/07/project-daytona-iterative-mapreduce-on-windows-azure-microsoft-research/<p><a href="https://www.microsoft.com/en-us/download/details.aspx?id=52431&from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fdownloads%2Fcecba376-3d3f-4eaf-bf01-20983857c2b1%2Fdefault.aspx">Project Daytona: Iterative MapReduce on Windows Azure - Microsoft Research</a>.</p>Mars Climate Orbiter, Python, and Type Systems...2011-07-13T18:33:00-10:002011-07-13T18:33:00-10:00larrytag:knowing.net,2011-07-13:/posts/2011/07/mars-climate-orbiter-python-and-type-systems/<p>::: {style="font-size: 10pt;"}
Faithful readers know that I'm <a href="http://www.knowing.net/index.php/2011/06/04/choosing-scala-somewhat-reluctantly/">learning Scala, somewhat reluctantly</a>. A few weeks ago, I was reading <em>New Scientist</em> magazine and saw <a href="https://www.newscientist.com/article/mg21028101-600-googles-research-chief-the-power-of-big-data/">this writeup</a> of <a href="http://norvig.com/">Peter Norvig, Director of Research at Google</a>, which mentioned that he was on the review board that studied the crash of the <a href="https://en.wikipedia.org/wiki/Mars_Climate_Orbiter">Mars …</a></p><p>::: {style="font-size: 10pt;"}
Faithful readers know that I'm <a href="http://www.knowing.net/index.php/2011/06/04/choosing-scala-somewhat-reluctantly/">learning Scala, somewhat reluctantly</a>. A few weeks ago, I was reading <em>New Scientist</em> magazine and saw <a href="https://www.newscientist.com/article/mg21028101-600-googles-research-chief-the-power-of-big-data/">this writeup</a> of <a href="http://norvig.com/">Peter Norvig, Director of Research at Google</a>, which mentioned that he was on the review board that studied the crash of the <a href="https://en.wikipedia.org/wiki/Mars_Climate_Orbiter">Mars Climate Orbiter</a>. That sparked a question in me, because I'd recently watched Norvig's talk "<a href="https://archive.org/details/scipy09_day1_03-Peter_Norvig">What To Demand From A Scientific Computing Language</a>" which says "don't spend too much time fretting about language choice," but further goes on to argue that Python is a heckuva good scientific computing language. So I asked him:</p>
<blockquote>
<div>
<p>The Mars Climate Orbiter disaster would seem to be a case study for a type system with more compile-time strictness. Obviously, an SI unit system is not part of Scala's standard library, <em>but</em> I find it interesting that you have not cast all aside and picked up the banner of Haskell or what-have-you.</p>
</div>
</blockquote>
<div>
And he kindly responded with a typically pithy insight:
</div>
<div>
> I don't think the MCO incident has anything to say about language choice. The problem involved reading data from a file and a miscommunication about what the numbers in the file were. I don't know of any language, no matter how type-strict, that forces you to tag the string "123.45" in a file with the units of force (newtons vs foot-pounds), nor do I know of any language, no matter how type-loose, in which you could not impose such a convention if you wanted to.
</div>
<div>
This, for me, is the last word in the argument for and against manifest static typing: you can always get around it on the one hand, and you can always enforce preconditions on the other.
</div>
<div>
</div>
<div>
Although I have a marginal preference for explicit/manifest typing in function signatures because I think that it helps readability, it's horses for courses -- if you say you think explict typing hinders readability I can't say you're wrong (much less get worked up about it).
</div>
<div>
</div>
<div>
Regretfully, this is not to say that I don't get worked up in type-system discussions: I do. But I get worked up by the over-simplifications that say 'your way is fundamentally wrong.' We're *so* beyond the days when you could make that argument: there are large systems written in dynamic languages and type-inferred languages that minimize finger-typing in the mainstream (I'm looking at you, C\#. No one's calling you a Java clone now, are they?).
</div>
<div>
</div>
<div>
So, if the type system wasn't at fault, what were the causes? Norvig explains:
</div>
<blockquote>
<div>
<div>
<p>Beyond the initial error, the reasons why the error proved fatal were more around organizational structure than around language choice:</p>
</div>
<div>
<p>(1) An anomaly was detected early on, but was not entered into an official issue-tracking database. Better practices would force all such things to be tracked.</p>
</div>
<div>
<p>(2) The team was separated between JPL in California and Lockheed-Martin in Colorado, so there were no lunvh-time discussions about "hey, did you get that anomaly straighten out? No? Well, let's look into it more carefully..."</p>
</div>
<div>
<p>(3) The faulty code was not carefully code-reviewed, because of improper code re-use. On the previous mission, this file was just a log file, not used during flight operations, and so was not subject to careful scrutiny. In MCO, the file and surrounding code was re-used, but then at some point they promoted it to be a part of actual navigation, and unfortunately nobody went back and subjected the relevant code to careful review.</p>
</div>
<div>
<p>(4) Bad onboarding process of new engineers: The faulty code was written by a new engineer -- first week (or maybe first month or so -- on the job. This was deemed ok because originally it was "just a log file", not mission-critical.</p>
</div>
</div>
</blockquote>
<div>
There you go: It's not type-systems. It's not where you put the brackets (Allman-style, all hail!). Defect management, team dynamics, code review, and onboarding. Now *those* things are worth getting worked up about.
</div>
<p>:::</p>Getting To Know Scala: Project Euler Primes2011-07-11T06:05:00-10:002011-07-11T06:05:00-10:00larrytag:knowing.net,2011-07-11:/posts/2011/07/getting-to-know-scala-project-euler-primes/<p>Prime numbers are not my thing, but generating them is a common task in the early <a href="https://projecteuler.net/">Project Euler</a> problems. The one algorithm I know for generating primes is the Sieve of Eratosthenes, which I defined in Scala as:</p>
<p>[sourcecode lang="scala"]<br>
def successor(n : Double) : Stream[Double] = Stream.cons(n …</p><p>Prime numbers are not my thing, but generating them is a common task in the early <a href="https://projecteuler.net/">Project Euler</a> problems. The one algorithm I know for generating primes is the Sieve of Eratosthenes, which I defined in Scala as:</p>
<p>[sourcecode lang="scala"]<br>
def successor(n : Double) : Stream[Double] = Stream.cons(n, successor(n + 1))</p>
<p>def sieve(nums : Stream[Double]) : Stream[Double] = Stream.cons(nums.head, sieve ((nums tail) filter (x => x % nums.head != 0)) )</p>
<p>val prime_stream = sieve(successor(2))<br>
[/sourcecode]</p>
<p>The first function is the only function that I've ever written that I'm <em>sure</em> is properly "functional." It's stuck in my head from circa 1982 LISP. It uses Scala's <strong>Stream</strong> class, which is like a <strong>List</strong> but is "lazily evaluated," in other words, it only calculates the next value in the <strong>List</strong> when it's needed (the <strong>Stream</strong> pattern is to create a <strong>List</strong> whose <strong>head</strong> is the next value and whose <strong>tail</strong> is a recursive call that, when executed will produce the next value).</p>
<p>The 2nd function <strong>sieve</strong> is my take on the Sieve of Eratosthenes. It too returns a <strong>Stream</strong> of primes. (By the way, the reason I use <strong>Double</strong> rather than an <strong>Int</strong> or <strong>Long</strong> is that one of the early Project Euler problems involves a prime larger than <strong>LONG_MAX</strong>.)</p>
<p>In case you're not familiar with the algorithm, the Sieve is conceptually simple. Begin with a list containing all positive integers starting at 2 (the first prime) [2, 3, 4, ...] . Remove from the list every multiple of your current prime. The first number remaining is the next prime. For instance, after removing [2, 4, 6, ... ], the first number remaining is 3. Prime! So remove [3, 6 (already removed), 9, ... ]. Since 4 was removed as a multiple of 2, the next available is 5. Prime! Remove [5, 10 (already removed), 15 (already removed), ...] ...</p>
<p>The 7th Project Euler problem is "What is the 10001st prime number?" Unfortunately,</p>
<p>[sourcecode]<br>
scala> prime_stream take 10001 print<br>
2.0, 3.0, 5.0, 7.0, ...SNIP ... 29059.0, 29063.0, java.lang.OutOfMemoryError: Java heap space<br>
at scala.Stream\<span class="math">\(cons\\)</span>.apply(Stream.scala:62)<br>
at scala.Stream.filter(Stream.scala:381)<br>
at scala.Stream\<span class="math">\(\\)</span>anonfun\<span class="math">\(filter\\)</span>1.apply(Stream.scala:381)<br>
at scala.Stream\<span class="math">\(\\)</span>anonfun\<span class="math">\(filter\\)</span>1.apply(Stream.scala:381)<br>
at scala.Stream\<span class="math">\(cons\\)</span>\<span class="math">\(anon\\)</span>2.tail(Stream.scala:69)<br>
at scala.Stream\<span class="math">\(\\)</span>anonfun\<span class="math">\(filter\\)</span>1.apply(Stream.scala:381)<br>
at scala.Stream\<span class="math">\(\\)</span>anonfun\$...<br>
[/sourcecode]</p>
<p>That will never do. Obviously, I could run Scala with more heap space, but that would only be a bandage. Since a quick Google search shows that the 1000th prime number is 104,729 and I'm running out of heap space near 30K, it seems that "messing around with primes near the 10Kth mark" requires some memory optimization.</p>
<h2>Converting the Sieve</h2>
<p>If I <em>really</em> wanted to work with very large sequences of primes, I should certainly move away from the Sieve of Eratosthenes. But I'm not really interested in prime number algorithms, I'm interested in the characteristics of the Scala programming language, so I'm going to intentionally ignore better algorithms.</p>
<p>My first thought was "OK, I'll allocate a chunk of memory and every time I find a prime, I'll set every <strong>justFoundPrime</strong>-th bit to 1." But that would depend upon my allocated memory being sufficient to hold the nth prime. With my Google-powered knowledge that the 10001st prime is only 100K or so, that would be easy enough, but (a) it seemed like cheating and (b) it would require a magic number in my code.</p>
<p>My next thought was "OK, when I run out of space, I'll dynamically allocate double the space-- no, wait, I only need <strong>justFoundPrime</strong>-(2 * <strong>justFoundPrime</strong>) space, since I've already checked the numbers up to <strong>justFoundPrime</strong>."<br>
My <em>next</em> thought was "And <em>really</em> I only need half that space, since I know 2 is a prime and I can just count by 2...And, y'know, I know 3 is prime too, so I can check--" At which point, I engaged in a mental battle over what was appropriate algorithmic behavior.</p>
<p>On the one hand, I didn't want to change algorithms: if I moved from the Sieve to a slightly better algorithm, then wasn't it Shameful not to move to at least a Quite Good algorithm? On the other hand, the instant I opened the door to allocating new memory, I committed to keeping around the list of already-discovered primes, since I would have to apply that list to my newly-allocated memory. But if you <em>have</em> a list of numbers, checking if your candidate number is a multiple of any of them can be done without consuming any additional memory. But is it the same algorithm? Isn't the Sieve fundamentally <em>about</em> marking spots in a big array?</p>
<p>Finally, I decided that checking a candidate number against the list of already-discovered primes <em>was</em> the Sieve algorithm, just with a smallest possible amount of memory allocation -- one number. (By the way, did you read the article in which scientists say that rational thought is just a tool for winning arguments to which you're already emotionally committed?)</p>
<p>Here then, is what I wrote:</p>
<p>[sourcecode lang="scala"]<br>
def multiple_of = (base : Long, target : Long) => target % base == 0;</p>
<p>val twoFilter = multiple_of(2, _ : Long)<br>
val threeFilter = multiple_of(3, _ : Long)</p>
<p>println(twoFilter(4))<br>
println(twoFilter(5))<br>
println(twoFilter(6))<br>
println(threeFilter(4))<br>
println(threeFilter(5))<br>
println(threeFilter(6))<br>
[/sourcecode]</p>
<p>The first function <strong>multiple_of</strong> is a function literal (?) that returns true if the target is a multiple of the base. The next two lines, where I define <strong>twoFilter</strong> and <strong>threeFilter</strong> are an example of the functional idiom of <em>partial function application</em> (I think -- "currying" is the <em>use</em> of partial function application to accomplish a goal, right?).</p>
<p>This is an undeniably cool feature of functional languages. Without any fuss, these lines create new functions that require <em>one less</em> argument to have their needed context. Once you have a <strong>twoFilter</strong>, you don't need to keep the value "2" around to pass in. Which might not seem like a big win, since a function <em>named</em> <strong>twoFilter</strong> or <strong>threeFilter</strong> is no more compact than calling <strong>multiple_of(2, x)</strong> or <strong>multiple_of(3,x)</strong>. But...</p>
<p>[sourcecode lang="scala" firstline="12"]<br>
def filter = (x : Long) => multiple_of(x, _ : Long);</p>
<p>val fs = List(filter(2), filter(3))<br>
for(f \<- fs){<br>
println("Eight is a multiple of this filter: " + f(8))<br>
}<br>
[/sourcecode]</p>
<p>OK, now that's nice and compact! Now we have a new tk function literal? tk called <strong>filter</strong> and rather than have a bunch of variables called <strong>twoFilter</strong> and <strong>threeFilter</strong> and <strong>fiveFilter</strong>, we just have a <strong>List</strong> of filters. With such a list in hand, it's easy to figure out which numbers in a list are relatively prime:</p>
<p>[sourcecode lang="scala" firstline="18"]<br>
def relatively_prime(fs : List[(Long)=>Boolean], target : Long) : Boolean = {<br>
for(f \<- fs){<br>
if(f(target)){<br>
return false;<br>
}<br>
}<br>
return true;<br>
}</p>
<p>println("4 is prime? " + relatively_prime(fs, 4))<br>
println("5 is prime? " + relatively_prime(fs, 5))</p>
<p>val list = List[Long](2, 3, 4, 5, 6, 7, 8, 9, 10, 11)<br>
println(list.map(relatively_prime(fs, _)))</p>
<p>[/sourcecode]</p>
<p>Which leads to a simple recursive function to find the next prime:</p>
<p>[sourcecode lang="scala" firstline="32"]<br>
def next_prime(fs : List[(Long)=>Boolean], x : Long) : Long = {<br>
if (relatively_prime(fs, x)) {<br>
return x<br>
}<br>
return next_prime(fs, x + 1)<br>
}</p>
<p>println(next_prime(fs, 4))<br>
println(next_prime(fs, 8))<br>
[/sourcecode]</p>
<p>Which leads to our solution:</p>
<p>[sourcecode lang="scala" firstline="41"]<br>
def primes(fs : List[(Long)=>Boolean], ps: List[Long], x : Long, nth : Long) : List[Long] = {<br>
if(ps.size == nth){<br>
return ps;<br>
}</p>
<p>val np = next_prime(fs, x)<br>
val sieve = fs ::: List(filter(np));<br>
primes(sieve, ps ::: List(np), np + 1, nth);<br>
}</p>
<p>println("Missing 3 because its in fs" + primes(fs, ListLong, 2, 8))<br>
println((primes(List(filter(2)), List(2L), 2, 8) reverse) head)</p>
<p>def nth_prime(nth : Long) : Long = {<br>
(<br>
primes(<br>
List(filter(2)),<br>
List(2L),<br>
2,<br>
nth<br>
) reverse<br>
) head<br>
}</p>
<p>println(nth_prime(8))<br>
println("The 10001st prime is " + nth_prime(10001))<br>
[/sourcecode]</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>BodyMedia Fit vs. Heart Rate Monitor2011-07-02T09:57:00-10:002011-07-02T09:57:00-10:00larrytag:knowing.net,2011-07-02:/posts/2011/07/bodymedia-fit-vs-heart-rate-monitor/<p>According to my stationary bike, I just burned 497 calories.</p>
<p>According to my heart rate monitor, I just burned 412 calories.</p>
<p>According to my BodyMedia Fit, I just burned 199 calories.</p>
<p>Hmm...</p>Wordless Wednesday: Mahaiula's2011-06-29T06:40:00-10:002011-06-29T06:40:00-10:00larrytag:knowing.net,2011-06-29:/posts/2011/06/wordless-wednesday-mahaiulas/<p><img alt="" class="alignnone" height="685" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_l.png" title="Mahaiula's Beach" width="1024"></p>On Being Wrong 100 Times Per Day2011-06-28T06:51:00-10:002011-06-28T06:51:00-10:00larrytag:knowing.net,2011-06-28:/posts/2011/06/on-being-wrong-100-times-per-day/<p>My <a href="https://sdtimes.com/windows-net-watch-asking-the-right-questions/">latest column for SD Times</a> argues that the faster you admit you're wrong, the better a programmer you'll be.</p>Flex/AIR for iOS Development Process Explained! | Devgirls Weblog2011-06-28T06:25:00-10:002011-06-28T06:25:00-10:00larrytag:knowing.net,2011-06-28:/posts/2011/06/flexair-for-ios-development-process-explained-devgirls-weblog/<p><a href="http://devgirl.org/2011/06/20/flexair-for-ios-development-process-explained/">Flex/AIR for iOS Development Process Explained!</a></p>
<p>Although I personally use MonoTouch for iOS programming, if you happen to know Flash / Flex / AIR, it's finally possible. My advice, though, is that if you're going to be programming for iOS, you should learn Objective C and then use an alternative language …</p><p><a href="http://devgirl.org/2011/06/20/flexair-for-ios-development-process-explained/">Flex/AIR for iOS Development Process Explained!</a></p>
<p>Although I personally use MonoTouch for iOS programming, if you happen to know Flash / Flex / AIR, it's finally possible. My advice, though, is that if you're going to be programming for iOS, you should learn Objective C and then use an alternative language for the <em>productivity</em> boost.</p>Knowing Scala (Intermission)2011-06-27T06:22:00-10:002011-06-27T06:22:00-10:00larrytag:knowing.net,2011-06-27:/posts/2011/06/knowing-scala-intermission/<p>I'm getting to the point in my Scala understanding where I'm making small commits to our Very Important Project at work. I ended up wasting four hours of work the other day because I put stuff in the wrong place and then spent a lot of time reorganizing things. In …</p><p>I'm getting to the point in my Scala understanding where I'm making small commits to our Very Important Project at work. I ended up wasting four hours of work the other day because I put stuff in the wrong place and then spent a lot of time reorganizing things. In the context of FP, which puts such an emphasis on composition, "reorganizing" seems to this learner more tedious than reorganizing an OOP program.</p>
<p>"Where to put your stuff" is a big deal for a programming paradigm, and it seems to me that OOP is significantly better than FP in guiding you towards structure. The FP proponents are always talking about keeping things small, but a real system is going to be large and it seems to me that OOP class structures provide a lot of guidance.</p>
<p>Since my organization has chosen Scala as our language, I can use OOP. But when you're learning the FP mindset, there's so much emphasis on compressing functions and minimizing your working set that it's very natural to make a mistake, and write a series of functions that combine to do the operation at hand only to realize (as I did) that if only you had located the function over <em>here,</em> in this class, you could write fewer functions, with simpler combinations, to accomplish the same goal.</p>
<p>Hmm...</p>
<p>I always try to remember my experience learning OOP. I was a C programmer and had just been hired as the Product Review Editor at <em>Computer Language Magazine.</em> OOP was the hot new thing and I installed a brand new copy of Smalltalk/V 286 and diligently worked through the tutorial (which involved turtle graphics, as I recall). Everytime I had a few minutes I'd sit and try to understand "where the main() is." And I just <em>didn't</em> get it. I could type in code and it would work but I just had <em>no idea</em> how it was supposed to help my programming.</p>
<p>After about six weeks I was panicked, thinking "OMG, I don't understand this subject that's the topic of more and more of our articles." I decided to break the shrink-wrap on Zortech C++ (the first C++ compiler for DOS) and simply use C and laugh knowingly every time someone mentioned OOP. And from almost the first minute of firing up the C++ compiler, I <em>got</em> objects. What had been obscure in a <em>pure</em> environment was crystal clear in a <em>hybrid</em> environment where what had seemed like obscure topics could be applied to the everyday challenges of writing C code.</p>
<p>And even more interesting, after working in C++ for awhile, when I fired up my Smalltalk environment again (perhaps for the Smalltalk/v 386 release), I absolutely <em>loved</em> it. It took C++ for me to understand the programming value of OOP and, once that was internalized, the environmental benefits of Smalltalk were many and obvious.</p>
<p>I try to keep this in mind with Scala. Right now, I'll admit to not feeling enthusiastic about Scala. I've yet to feel "Oh, I couldn't have done that in Ruby" while it seems like I bump into type-system limits and syntactical weirdness quite often (the type-erasure of generics in the JVM seems to mean that "finger typing" is not uncommon and I've yet to internalize Scala's logic about parentheses, braces, and new-lines). But, if history is a guide, perhaps I'll return to Ruby in a few months and suddenly say "OMG, in Scala I could just..."</p>
<p>We'll see.</p>Advice From An Old Programmer2011-06-24T06:22:00-10:002011-06-24T06:22:00-10:00larrytag:knowing.net,2011-06-24:/posts/2011/06/advice-from-an-old-programmer/<p><a href="https://learnpythonthehardway.org/book/advice.html">Advice From An Old Programmer — Learn Python The Hard Way, 2nd Edition</a>.</p>
<blockquote>
<p>[ ]{style="font-family: 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; line-height: 21px; font-size: 14px;"}</p>
<p>Programming as a profession....can be a good job, but you could make about the same money and be happier running a fast food …</p></blockquote><p><a href="https://learnpythonthehardway.org/book/advice.html">Advice From An Old Programmer — Learn Python The Hard Way, 2nd Edition</a>.</p>
<blockquote>
<p>[ ]{style="font-family: 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; line-height: 21px; font-size: 14px;"}</p>
<p>Programming as a profession....can be a good job, but you could make about the same money and be happier running a fast food joint. You're much better off using code as your secret weapon in another profession.</p>
<p>People who can code in the world of technology companies are a dime a dozen and get no respect. People who can code in biology, medicine, government, sociology, physics, history, and mathematics are respected and can do amazing things to advance those disciplines.</p>
</blockquote>
<p>[ ]{style="font-family: 'Lucida Grande', 'Lucida Sans Unicode', Geneva, Verdana, sans-serif; line-height: 21px; font-size: 14px;"}</p>
<p>True that.</p>Computer Science Grads Get Most Job Offers2011-06-23T06:23:00-10:002011-06-23T06:23:00-10:00larrytag:knowing.net,2011-06-23:/posts/2011/06/computer-science-grads-get-most-job-offers/<p><a href="https://www.naceweb.org/404.aspx?aspxerrorpath=/press/releases/computer_science_overtakes_accounting_as_major_with_top_offer_rate_for_the_class_of_2011.aspx"></a>According to <a href="https://www.naceweb.org/404.aspx?aspxerrorpath=/press/releases/computer_science_overtakes_accounting_as_major_with_top_offer_rate_for_the_class_of_2011.aspx">this release</a>, Computer Science majors had the highest percentage of job offers of any major.</p>
<p>I have to admit to being somewhat surprised at this, as I thought the trend toward offshore development was still driving down the market for young developers.</p>Wordless Wednesday: Can You Guess What This Is?2011-06-22T07:58:00-10:002011-06-22T07:58:00-10:00larrytag:knowing.net,2011-06-22:/posts/2011/06/wordless-wednesday-can-you-guess-what-this-is/<p><a href="/uploads/2011/06/Wireless+remote+street+light+switch.jpg"><img alt="" class="alignnone size-full wp-image-5136" height="480" src="/uploads/2011/06/Wireless+remote+street+light+switch.jpg" title="?" width="360"></a></p>
<p>Answer: [[It's a "wireless remote streetlight switch" used by a local amateur astronomer as an amusement (but, of course, never, EVER to actually use!). Apparently, streetlights have a photosensor, and if one has a small laser, a nice spotting telescope, and sufficiently rigid mount, one could (but never, EVER actually …</p><p><a href="/uploads/2011/06/Wireless+remote+street+light+switch.jpg"><img alt="" class="alignnone size-full wp-image-5136" height="480" src="/uploads/2011/06/Wireless+remote+street+light+switch.jpg" title="?" width="360"></a></p>
<p>Answer: [[It's a "wireless remote streetlight switch" used by a local amateur astronomer as an amusement (but, of course, never, EVER to actually use!). Apparently, streetlights have a photosensor, and if one has a small laser, a nice spotting telescope, and sufficiently rigid mount, one could (but never, EVER actually would!) lase the photosensor and shut off the streetlight.]{style="color: #ffffff;"}]</p>The Web Is a Customer Service Medium (Ftrain.com)2011-06-21T06:19:00-10:002011-06-21T06:19:00-10:00larrytag:knowing.net,2011-06-21:/posts/2011/06/the-web-is-a-customer-service-medium-ftrain-com/<p>A good article holding that "Why wasn't I consulted?" is the fundamental mindset on the Web: <a href="https://www.ftrain.com/wwic">The Web Is a Customer Service Medium (Ftrain.com)</a>.</p>Is C3 the Secret Sauce for Windows 8 Programming?2011-06-20T06:17:00-10:002011-06-20T06:17:00-10:00larrytag:knowing.net,2011-06-20:/posts/2011/06/is-c3-the-secret-sauce-for-windows-8-programming/<p><a href="https://www.microsoft.com/en-us/research/publication/c3-an-experimental-extensible-reconfigurable-platform-for-html-based-applications/?from=http%3A%2F%2Fresearch.microsoft.com%2Fpubs%2F150010%2Fwebapps2011.pdf">This MSR paper</a> describes an HTML/CSS/JS platform that seems to tie in with Microsoft's recent conspicuously-not-mentioning-.NET talk of Windows 8. This paper is still in a conference proceedings, so it wouldn't seem on the verge of productization, but there are so many questions raised by Microsoft's recent …</p><p><a href="https://www.microsoft.com/en-us/research/publication/c3-an-experimental-extensible-reconfigurable-platform-for-html-based-applications/?from=http%3A%2F%2Fresearch.microsoft.com%2Fpubs%2F150010%2Fwebapps2011.pdf">This MSR paper</a> describes an HTML/CSS/JS platform that seems to tie in with Microsoft's recent conspicuously-not-mentioning-.NET talk of Windows 8. This paper is still in a conference proceedings, so it wouldn't seem on the verge of productization, but there are so many questions raised by Microsoft's recent endorsement of JS + HTML for desktop applications that it bears investigation.</p>Wordless Wednesday: Steigh Owt2011-06-15T06:28:00-10:002011-06-15T06:28:00-10:00larrytag:knowing.net,2011-06-15:/posts/2011/06/wordless-wednesday-steigh-owt/<p><a href="/uploads/2011/06/DSC_7537.png"><img alt="" class="alignnone size-full wp-image-5127" height="1024" src="/uploads/2011/06/DSC_7537.png" title="Pry Vet Rhode" width="682"></a></p>Microsoft's Intriguing Code Bubbles Projects Becomes Debugging Tool2011-06-14T06:33:00-10:002011-06-14T06:33:00-10:00larrytag:knowing.net,2011-06-14:/posts/2011/06/microsofts-intriguing-code-bubbles-projects-becomes-debugging-tool/<p>I haven't used this, but I talked briefly with the Code Bubbles developers about 18 months ago and thought that debugging would be the perfect fit. Seems like someone at MSR agreed:</p>
<p><a href="https://www.microsoft.com/en-us/research/project/debugger-canvas/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fprojects%2Fdebuggercanvas%2F">Debugger Canvas - Microsoft Research</a>.</p>Knowing Scala: Exercise 12011-06-13T06:21:00-10:002011-06-13T06:21:00-10:00larrytag:knowing.net,2011-06-13:/posts/2011/06/knowing-scala-exercise-1/<p>Taking my own <a href="http://www.knowing.net/index.php/2006/06/16/15-exercises-to-know-a-programming-language-part-1/">15 Exercises to Know A Programming Language</a> as a starting point for my exploration of Scala...</p>
<p>The first set of exercises are right up the alley of a language with pattern-matching and list-processing:</p>
<blockquote>
<p>Write a program that takes as its first argument one of the words ‘sum …</p></blockquote><p>Taking my own <a href="http://www.knowing.net/index.php/2006/06/16/15-exercises-to-know-a-programming-language-part-1/">15 Exercises to Know A Programming Language</a> as a starting point for my exploration of Scala...</p>
<p>The first set of exercises are right up the alley of a language with pattern-matching and list-processing:</p>
<blockquote>
<p>Write a program that takes as its first argument one of the words ‘sum,’ ‘product,’ ‘mean,’ or ‘sqrt’ and for further arguments a series of numbers. The program applies the appropriate function to the series.</p>
</blockquote>
<p>The first thing I did was write the functions:</p>
<p>[sourcecode lang="scala"]<br>
val args = List(1, 2, 3, 4, 5)<br>
args.foldLeft(0)(_+_) //Sum<br>
args.foldLeft(1)(_*_) //Product<br>
args.sort(_ \< _)(if(args.length % 2 == 0) args.length / 2 - 1 else args.length / 2) //Median<br>
args.map(Math.sqrt(_)) //Sqrt<br>
[/sourcecode]</p>
<p>Here the list-processing functions (highlighted in red) shine. The <strong>foldLeft()</strong> family of functions, also known as <strong>reduce,</strong> <strong>inject</strong>, or <strong>aggregate</strong>, applies a predicate to the elements of a data structure, accumulating a value. It's hard to imagine cleaner code than what we have for the 'sum' and 'product' challenges. Similarly, the <strong>map()</strong> function is similarly clean-as-a-whistle for the 'sqrt' challenge. The 'median' challenge I'm less thrilled about: Passing in a custom comparator predicate to <strong>sort()</strong> is lovely, but my fingers typed in the C-language ternary operator :? and I was sorry to find that Scala doesn't have it.</p>
<p>A big win for Scala is that I typed these in the Read-Evaluate-Print-Loop aka interactive console rather than having to deal with the overhead of a 'real' program and a edit-compile-test loop.</p>
<p>Moving on, the complete program follows:</p>
<p>[sourcecode lang="scala"]<br>
object Main<br>
{<br>
def main(args : Array[String])<br>
{<br>
val argList = List.fromArray(args)<br>
val op = opMatch(argList.head)<br>
val numList = argList.tail.map(java.lang.Double.parseDouble(_))<br>
val result = op(numList)<br>
print(result)<br>
}</p>
<p>def sum(args : List[Double]) : Double = { args.foldLeft(0.0)(_+_) }</p>
<p>def product(args : List[Double]) : Double = { args.foldLeft(1.0)(_*_) }</p>
<p>def median(args : List[Double]) : Double =<br>
{<br>
args.sort(_ \< _)(if(args.length % 2 == 0) args.length / 2 - 1 else args.length / 2)<br>
}</p>
<p>def sqrt(args : List[Double]) : List[Double] = { args.map(Math.sqrt(_)) }</p>
<p>def opMatch(arg : String) : (List[Double]) => Any =<br>
{<br>
arg match<br>
{<br>
case "sum" => return sum<br>
case "product" => return product<br>
case "median" => return median<br>
case "sqrt" => return sqrt<br>
_ => throw new java.lang.IllegalArgumentException("Unrecognized operator " + arg)<br>
}<br>
}<br>
}<br>
[/sourcecode]</p>
<p>Let's see... The translation of the REPL code into functions was very straightforward, although I have to admit to being somewhat disappointed that I could not use a type more abstract than <strong>Double</strong>. I don't know if I could define a trait and then apply it retroactively to types in the java.lang package.</p>
<p><strong>opMatch()</strong> shows some functional goodness -- it's declared as a function that takes a <strong>String and</strong> return a function that takes a <strong>List</strong> of <strong>Doubles</strong> and returns <strong>Any</strong> kind of object.<a href="/uploads/2011/06/Screen-shot-2011-06-11-at-11.29.54-AM.png"><img alt="" class="alignnone size-full wp-image-5176" height="150" src="/uploads/2011/06/Screen-shot-2011-06-11-at-11.29.54-AM.png" title="Screen shot 2011-06-11 at 11.29.54 AM" width="443"></a></p>
<p><a href="/uploads/2011/06/Screen-shot-2011-06-11-at-11.29.54-AM.png"></a> I'm not sure if I could do something more precise for my needs, like "returns a Double or List[Double]". The pattern-matching in <strong>opMatch()</strong> is nice but not advanced.</p>
<p>If you have any observations to share, please comment below...</p>Good environmental news: First Hawaiian "golden gooney" chick to fly soon2011-06-11T11:54:00-10:002011-06-11T11:54:00-10:00larrytag:knowing.net,2011-06-11:/posts/2011/06/good-environmental-news-first-hawaiian-golden-gooney-chick-to-fly-soon/<p>[caption id="" align="alignright" width="422" caption="Photo: US Fish & Wildlife Service"]<img alt="" height="500" src="http://2.bp.blogspot.com/-f-MHNP6fKBA/TfPG96sp1qI/AAAAAAAAA8w/tdKSG92CmWo/s1600/papagolden.jpg" width="422">[/caption]</p>
<p>Raising Islands--Hawai'i science and environment: First Hawaiian "golden gooney" chick to fly soon.</p>
<p>How often do you get good environmental news?</p>
<p>I'm a bird geek. Or actually more of a romantic -- I shed a tear when I …</p><p>[caption id="" align="alignright" width="422" caption="Photo: US Fish & Wildlife Service"]<img alt="" height="500" src="http://2.bp.blogspot.com/-f-MHNP6fKBA/TfPG96sp1qI/AAAAAAAAA8w/tdKSG92CmWo/s1600/papagolden.jpg" width="422">[/caption]</p>
<p>Raising Islands--Hawai'i science and environment: First Hawaiian "golden gooney" chick to fly soon.</p>
<p>How often do you get good environmental news?</p>
<p>I'm a bird geek. Or actually more of a romantic -- I shed a tear when I saw an Andean condor soaring above Machu Picchu (At that moment I was also very sore and weak with altitude sickness from hiking the Inca Trail, but still...). I also cried the first time I saw albatrosses doing their courtship ritual, which is not nearly as romantic, but was one of those things I'd first seen on some National Geographic special when I was 10.</p>Things I Learned From New Scientist This Week2011-06-11T07:24:00-10:002011-06-11T07:24:00-10:00larrytag:knowing.net,2011-06-11:/posts/2011/06/things-i-learned-from-new-scientist-this-week/<h2>Clever</h2>
<p><a href="https://www.newscientist.com/article/mg21028106-300-corkscrew-drive-propels-robot-across-tough-terrain/">Robot with corkscrew legs travels over rough terrain</a></p>
<p>Australia is considering a plan to make all cigarette packaging generic -- no branding or design on the cigarettes or packages, just the name in a generic font. The cigarette companies are freaking out, obviously.</p>
<h2>Interesting</h2>
<p>A study seems to show "we …</p><h2>Clever</h2>
<p><a href="https://www.newscientist.com/article/mg21028106-300-corkscrew-drive-propels-robot-across-tough-terrain/">Robot with corkscrew legs travels over rough terrain</a></p>
<p>Australia is considering a plan to make all cigarette packaging generic -- no branding or design on the cigarettes or packages, just the name in a generic font. The cigarette companies are freaking out, obviously.</p>
<h2>Interesting</h2>
<p>A study seems to show "we see inaction as less immoral only because we typically lack proof that it was deliberate." It makes me wonder about deliberate inaction in politics.</p>
<p>Elephants are evolving shorter or absent tusks in the face of selection pressure a.k.a. poachers.</p>
<p>Laughter may be a reward mechanism for recognizing incorrect explanations, i.e., to aid the culling of mental models that are flawed.</p>Wordless Wednesday: Snowy Hawaii2011-06-08T06:32:00-10:002011-06-08T06:32:00-10:00larrytag:knowing.net,2011-06-08:/posts/2011/06/wordless-wednesday-snowy-hawaii/<p><a href="/uploads/2011/06/pano4.png"><img alt="" class="alignnone size-full wp-image-5130" height="332" src="/uploads/2011/06/pano4.png" title="pano4" width="1024"></a></p>WW2 Sub Ballasted With Gold2011-06-06T05:40:00-10:002011-06-06T05:40:00-10:00larrytag:knowing.net,2011-06-06:/posts/2011/06/ww2-sub-ballasted-with-gold/<p><a href="http://thescuttlefish.com/2011/05/hms-friday-the-most-valuable-ballast/">HMS Friday – The Most Valuable Ballast : The Scuttlefish</a>.</p>
<p>I wonder if Neil Stephenson's Cryptonomicon was partially influenced by this true story...</p>MSR Paper on 10x Pose Recognition Alg (Kinect)2011-06-06T03:00:00-10:002011-06-06T03:00:00-10:00larrytag:knowing.net,2011-06-06:/posts/2011/06/msr-paper-on-10x-pose-recognition-alg-kinect/<p><a href="https://www.microsoft.com/en-us/research/publication/real-time-human-pose-recognition-in-parts-from-a-single-depth-image/?from=http%3A%2F%2Fresearch.microsoft.com%2Fapps%2Fpubs%2Fdefault.aspx%3Fid%3D145347">Real-Time Human Pose Recognition in Parts from a Single Depth Image - Microsoft Research</a>.</p>
<p>Whether this is <em>in</em> the Kinect software API being released imminently, it's not clear, but it will certainly become available over time, presumably giving 2012-era Kinect games higher-quality recognition</p>Configuring Google +1 Button With Word Press and Bad Behavior Plugin2011-06-05T11:40:00-10:002011-06-05T11:40:00-10:00larrytag:knowing.net,2011-06-05:/posts/2011/06/configuring-google-1-button-with-word-press-and-bad-behavior-plugin/<p>The very valuable <a href="https://bad-behavior.ioerror.us/">Bad Behavior</a> plugin for WordPress causes conflicts with Google's recently introduced +1 button. The fix is very simple.</p>
<p>Symptoms: When you attempt to "+1" on a Word Press site that is using the Bad Behavior plugin, the +1 icon appears for a few seconds and then is …</p><p>The very valuable <a href="https://bad-behavior.ioerror.us/">Bad Behavior</a> plugin for WordPress causes conflicts with Google's recently introduced +1 button. The fix is very simple.</p>
<p>Symptoms: When you attempt to "+1" on a Word Press site that is using the Bad Behavior plugin, the +1 icon appears for a few seconds and then is replaced with a red exclamation point Error Icon <a href="/uploads/2011/06/Screen-shot-2011-06-05-at-11.27.55-AM.png"><img alt="" class="alignnone size-full wp-image-5139" height="41" src="/uploads/2011/06/Screen-shot-2011-06-05-at-11.27.55-AM.png" title="Screen shot 2011-06-05 at 11.27.55 AM" width="100"></a>that links to https://www.google.com/support/profiles/bin/answer.py?hl=en&answer=1199142&p=plusone_button_error</p>
<p>Solution: Whitelist the Google-owned netblock 74.125.0.0/16 in Bad Behavior's "whitelist.inc.php" file:</p>
<ol>
<li>Confirm that I'm telling the truth about who owns that block: open a terminal and run a whois</li>
<li>In your /wp-content/plugins/bad-behavior/bad-behavior folder open the file whitelist.inc.php and add the netblock to the \$bb2_whitelist_ip_ranges array:</li>
</ol>
<p>[sourcecode language="php"]\$bb2_whitelist_ip_ranges = array(<br>
"64.191.203.34", // Digg whitelisted as of 2.0.12<br>
"208.67.217.130", // Digg whitelisted as of 2.0.12<br>
"10.0.0.0/8",<br>
"172.16.0.0/12",<br>
"192.168.0.0/16",<br>
"74.125.0.0/16",<br>
// "127.0.0.1",<br>
);[/sourcecode]<br>
Save the file to your server and you should be all set.</p>
<ol>
<li>Donate some money to the <a href="https://bad-behavior.ioerror.us/">Bad Behavior plugin</a> project...</li>
</ol>Literate Programming: Python-Style2011-06-05T08:40:00-10:002011-06-05T08:40:00-10:00larrytag:knowing.net,2011-06-05:/posts/2011/06/literate-programming-python-style/<p>I don't think literate programming is something that will ever enjoy widespread popularity, but for those who write about programming, it's something devoutly to be wished. It might be a good match for Python, which is a nice language for data exploration and demonstrating algorithms and techniques. This tool: pyreport …</p><p>I don't think literate programming is something that will ever enjoy widespread popularity, but for those who write about programming, it's something devoutly to be wished. It might be a good match for Python, which is a nice language for data exploration and demonstrating algorithms and techniques. This tool: pyreport: generate reports out of python scripts can be used for literate programming in Python.</p>Free Book: The Architecture of Open Source Applications2011-06-05T08:39:00-10:002011-06-05T08:39:00-10:00larrytag:knowing.net,2011-06-05:/posts/2011/06/free-book-the-architecture-of-open-source-applications/<p><a href="http://www.aosabook.org/en/index.html">The Architecture of Open Source Applications</a>.</p>
<p>I've just skimmed a few chapters, which you can do as well at the above link, or you can buy it in paperback or PDF.</p>Choosing Scala (Somewhat Reluctantly)2011-06-04T09:50:00-10:002011-06-04T09:50:00-10:00larrytag:knowing.net,2011-06-04:/posts/2011/06/choosing-scala-somewhat-reluctantly/<p>Scala is the implementation language of choice on the next big project I'll be working on. For me, that's a tiny bit of a disappointment, as I've been slowly building up my knowledge, not of Scala, but of Haskell. But the high-level software at the <a href="http://www.gemini.edu">observatory</a> is predominantly Java, so …</p><p>Scala is the implementation language of choice on the next big project I'll be working on. For me, that's a tiny bit of a disappointment, as I've been slowly building up my knowledge, not of Scala, but of Haskell. But the high-level software at the <a href="http://www.gemini.edu">observatory</a> is predominantly Java, so that's a trump card for Scala.</p>
<p>Like everyone, we are looking at a future of vastly larger datasets (in astronomy, we have 14 billion years of legacy data) and know that concurrency management using the Java language's threading model is essentially unworkable -- it's far more difficult than "just" the problem of memory management in non-garbage-collected languages. So we need a language that gives us at least a fighting chance for highly distributed concurrent data manipulation.</p>
<p>Scala is one such language, and there is a bias towards strong typing at the observatory (personally, I have a <em>slight</em> bias towards strong typing, but have to say that when writing Scala that interacts with Java legacy code, there's still an annoying large amount of "finger typing").</p>
<p>For me, something that's interesting about this choice is that, at the language level, Scala would not be my first choice as a functional language. Haskell has some exceptional learning resources:</p>
<ul>
<li><a href="http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1">Erik Meijer's Channel 9 series of lectures</a>: I'm an unrepentant Meijer fanboy, but even if you're not, I think these 13 lectures are an amazing free resource</li>
<li>Real-World Haskell : When I read this for the Jolt Awards a few years ago, I labeled it the best language tutorial book I'd read since Practical Common Lisp</li>
<li>Learn You A Haskell For Great Good: This is a new book, but I'm going to be talking it up during <em>this year's</em> Jolt judging, as I think it's even better than Real-World Haskell. In my opinion, if you're going to be teaching functional programming, you have to push the functional concepts from the very beginning; just as Grady Booch's classic Object-Oriented Design with Applications put OO front-and-center for a generation of structured programmers. "Learn You A Haskell..." does that, although it falls short of Booch in marrying the concepts to large practical applications or even the small but complete and useful programs that Dr. Dobb's Andrew Binstock correctly advocates in his recent column Lax Language Tutorials.</li>
</ul>
<p>Another thing I fear about Scala (and would also fear about F#), is that the two major managed runtimes (the Java Virtual Machine and .NET's Common Language Runtime) may end up being drags on the languages. The Virtual Machines of those platforms embody certain object-oriented principles and are (intentionally) not as flexible as native hardware when it comes to stack and heap manipulation. Plus, neither the JVM nor the CLR reifies a 21st-century concurrency model. In short, from a back-end compiler perspective, I think you're probably better with a blank slate than with either of those managed platforms.</p>
<p>Finally, since I guess the gist of this blog post has become my enumeration of risks, I am not sure that Scala syntax is as good for writing parsers as it could be. Admittedly, opportunities to write parsers are quite rare in mainstream programming, but it happens to be something I find wildly enjoyable (tremendously frustrating in the moment, but tremendously rewarding when you break through). Scala is clearly <em>much</em> better than mainstream languages, but if you're going to include pattern-matching in the language and parser combinators in the standard library, it seems a pity if, e.g., newline syntax, has to be worked-around.</p>
<p>Having said all that, I am pushing to develop a decent level of competence in Scala and hope to post from time-to-time experience reports and code samples. Stay tuned and please feel free to jeer from the sidelines...</p>
<p>--</p>
<p>DISCLAIMER: This blog is my personal writing and represents my own undoubtedly biased, retrospectively embarrassing, and generally ill-informed opinions and not those of <a href="http://www.gemini.edu">Gemini Observatory</a> or anyone else who works there.</p>jQuery Events: Stop (Mis)Using Return False | Fuel Your Coding2011-06-03T08:39:00-10:002011-06-03T08:39:00-10:00larrytag:knowing.net,2011-06-03:/posts/2011/06/jquery-events-stop-misusing-return-false-fuel-your-coding/<p>Guilty as charged: jQuery Events: Stop (Mis)Using Return False | Fuel Your Coding.</p>Bible-Study S/W Is...uh...Inspirational2011-06-01T12:11:00-10:002011-06-01T12:11:00-10:00larrytag:knowing.net,2011-06-01:/posts/2011/06/bible-study-sw-is-uh-inspirational/<p><a href="http://radar.oreilly.com/2011/05/ebook-design-lessons-bible.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29&utm_content=Google+Reader">What ebook designers can learn from Bible-reading software - OReilly Radar</a>.</p>
<p>This is a good article on eBook design, as informed by Bible-study software. Bible-study software is a niche that every software entrepreneur would do well to know about. It's a big market and it attracts enthusiastic and diverse developers who …</p><p><a href="http://radar.oreilly.com/2011/05/ebook-design-lessons-bible.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29&utm_content=Google+Reader">What ebook designers can learn from Bible-reading software - OReilly Radar</a>.</p>
<p>This is a good article on eBook design, as informed by Bible-study software. Bible-study software is a niche that every software entrepreneur would do well to know about. It's a big market and it attracts enthusiastic and diverse developers who produce innovative features (sometimes worthy, mostly not). But unlike, say, videogames, everyone works from the same base material and is more prone to focus on the user experience than the technology at hand.</p>
<p>It also would be a smart area to look at for platform adaptation and marketshare, since one can be assured that any new platform is going to get bible-study software early in its production and yet is unlikely to involve a statistics-distorting breakout hit on any specific platform.</p>Fun: Tachyons and Čerenkov Radiation2011-05-29T12:10:00-10:002011-05-29T12:10:00-10:00larrytag:knowing.net,2011-05-29:/posts/2011/05/fun-tachyons-and-cerenkov-radiation/<p>The Fun of Going Faster-Than-Light : Starts With A Bang.</p>
<p>To the extent I would have ever thought about it, by symmetry I would think that a tachyon entering a medium in which it moved slower than c would emit some kind of impossible-to-detect tachyon-y version of Čerenkov Radiation, but apparently …</p><p>The Fun of Going Faster-Than-Light : Starts With A Bang.</p>
<p>To the extent I would have ever thought about it, by symmetry I would think that a tachyon entering a medium in which it moved slower than c would emit some kind of impossible-to-detect tachyon-y version of Čerenkov Radiation, but apparently it would emit real radition that we could detect. Sweet!</p>
<p>Uh... But wouldn't that allow us to send signals faster than c?</p>Ramsey's Theorem2011-05-27T12:10:00-10:002011-05-27T12:10:00-10:00larrytag:knowing.net,2011-05-27:/posts/2011/05/ramseys-theorem/<p>Ramsey's Theorem.</p>Moving towards Scala2011-05-25T06:09:00-10:002011-05-25T06:09:00-10:00larrytag:knowing.net,2011-05-25:/posts/2011/05/moving-towards-scala/<p>We've just shipped our first application whose core algorithm was written in Scala. Regrettably, the project didn't lend itself to "getting our feet wet," and it basically boiled down to the Scala modules being black boxes while the rest of us worked in more pedestrian technologies such as Java and …</p><p>We've just shipped our first application whose core algorithm was written in Scala. Regrettably, the project didn't lend itself to "getting our feet wet," and it basically boiled down to the Scala modules being black boxes while the rest of us worked in more pedestrian technologies such as Java and JavaScript.</p>
<p>But the project was an overall success and Scala looks to be adopted in 2-3 other projects over the next half-year. So I've begun spending some of my copious spare time playing with Scala.</p>
<p>I'm not the world's biggest fan of the JVM, but that's the standard platform for our high-level applications and it looks like Scala is a good choice for type-safe concurrent programming on that platform.</p>Process kills developer passion2011-05-23T06:09:00-10:002011-05-23T06:09:00-10:00larrytag:knowing.net,2011-05-23:/posts/2011/05/process-kills-developer-passion/<p>I disagree with a lot in this post <a href="http://radar.oreilly.com/2011/05/process-kills-developer-passion.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29&utm_content=Google+Reader">Process kills developer passion</a></p>
<blockquote>
<p>...maybe junior (or specialized) developers should be writing the unit tests, leaving the more seasoned developers free to concentrate on the actual implementation of the application. Maybe you don't need to micro-manage them with daily updates to VersionOne …</p></blockquote><p>I disagree with a lot in this post <a href="http://radar.oreilly.com/2011/05/process-kills-developer-passion.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29&utm_content=Google+Reader">Process kills developer passion</a></p>
<blockquote>
<p>...maybe junior (or specialized) developers should be writing the unit tests, leaving the more seasoned developers free to concentrate on the actual implementation of the application. Maybe you don't need to micro-manage them with daily updates to VersionOne to make sure they're going to make their sprint commitments...</p>
</blockquote>
<p>But I <strong>do</strong> agree with the gist and especially like this quote:</p>
<blockquote>
<p>A project where you decide before you start a product cycle the features that must be in the product, the ship date, and the assigned resources is a waterfall project. Using terms like "stories" and "sprints" just adds a crunchy agile shell, and it's madness to think anything else.</p>
</blockquote>Elmer Gantry 2.02011-05-22T12:08:00-10:002011-05-22T12:08:00-10:00larrytag:knowing.net,2011-05-22:/posts/2011/05/elmer-gantry-2-0/<p>Act 1</p>
<p>A charismatic con man declares that the world is going to end on a specific date. He calls for donations, ostensibly to alert nonbelievers of the joyful and ominous news.</p>
<p>Act 2</p>
<p>The meme goes viral and all of a sudden, his normal income from donations increase 1000x …</p><p>Act 1</p>
<p>A charismatic con man declares that the world is going to end on a specific date. He calls for donations, ostensibly to alert nonbelievers of the joyful and ominous news.</p>
<p>Act 2</p>
<p>The meme goes viral and all of a sudden, his normal income from donations increase 1000x. Instead of backing off, he doubles down and declares that he is going to spend \$100,000,000 buying billboards around the world.</p>
<p>Act 3</p>
<p>The world doesn't end, but he disappears to a gated community in Costa Rica called "Rapture."</p>
<p>Coda: He is discovered, says that he's been in Heaven, and <strong>boy</strong> does he have a lot of exciting new information to share.</p>Show Your Boss: Good IBM Whitepaper on Agile Processes2011-05-21T08:59:00-10:002011-05-21T08:59:00-10:00larrytag:knowing.net,2011-05-21:/posts/2011/05/show-your-boss-good-ibm-whitepaper-on-agile-processes/<p>Although it's a little heavy on IBM-specific acronyms and trademarks ("Agility\@Scale"), this relatively brief (20-page) whitepaper from Scott Ambler does a good job showing how agile processes are not just laissez faire "let them hack" chaos. Although this diagram makes me cringe a little (what's with the I Ching …</p><p>Although it's a little heavy on IBM-specific acronyms and trademarks ("Agility\@Scale"), this relatively brief (20-page) whitepaper from Scott Ambler does a good job showing how agile processes are not just laissez faire "let them hack" chaos. Although this diagram makes me cringe a little (what's with the I Ching symbols for "work items"?), it puts "iteration" front and center, where it belongs.</p>
<p>This paper is good ammo for those who are trying to help their organizations move their software development processes beyond "classic" processes optimized for physical manufacturing.</p>
<p><a href="/uploads/2011/05/Screen-shot-2011-05-21-at-8.45.16-AM.png"><img alt="" class="alignnone size-full wp-image-5084" height="423" src="/uploads/2011/05/Screen-shot-2011-05-21-at-8.45.16-AM.png" title="Screen shot 2011-05-21 at 8.45.16 AM" width="1098"></a></p>Continuous Delivery2011-04-27T11:08:00-10:002011-04-27T11:08:00-10:00larrytag:knowing.net,2011-04-27:/posts/2011/04/continuous-delivery/<p>One of the buzzwords that has become more popular in recent years is "<a href="http://www.informit.com/articles/article.aspx?p=1641923">continuous delivery</a>." The idea is that you fully automate your deployment pipeline and put a new version of your software in front of your users at least every day. If features are partially implemented, you use the …</p><p>One of the buzzwords that has become more popular in recent years is "<a href="http://www.informit.com/articles/article.aspx?p=1641923">continuous delivery</a>." The idea is that you fully automate your deployment pipeline and put a new version of your software in front of your users at least every day. If features are partially implemented, you use the <a href="https://martinfowler.com/bliki/FeatureToggle.html">Feature Toggle</a> pattern to turn them on or off.</p>
<p>The value proposition is clear enough -- getting your software in front of users as quickly as possible is the best possible way to get their feedback and make the inevitable course corrections that are necessary.</p>
<p>A more subtle value is that it greatly decreases the distance between responsibility and accountability. Perhaps I am the only programmer who has commented out a suddenly failing test rather than seeking root causes, but perhaps I am not. If, though, I knew that "it works on my machine" was going to be the lame excuse I'd have to offer for a customer-visible problem, I would be less likely to sin.</p>
<p>Alan Zeichick argues that useful changes can be made without affecting the user experience (or, by increasing performance, affecting them in a way that is universally preferred). That certainly could be true on occasion, but surely the <em>point</em> of continuous delivery is user-perceptible change and I am not at all sure that all customers value applications whose behavior and UI are prone to frequent shifts. It seems to be fairly common in the world of retail Web sites, but for line-of-business applications, clients are very cautious about change. The behavior of a system, even if it violates some clearly-documented procedure, is generally a part of a larger process (which, in turn, often compensates for the aberrant behavior).</p>
<p>One doesn't talk about training for retail Web sites, but it is a rare business application where training is not considered an important issue. Again I am not sure how well a rapidly evolving application would be accepted (even though I am sure that, if only it <em>were</em> accepted, the users would ultimately get more value).</p>iPhone Tracking: Not Terribly Worrisome2011-04-22T11:40:00-10:002011-04-22T11:40:00-10:00larrytag:knowing.net,2011-04-22:/posts/2011/04/iphone-tracking-not-terribly-worrisome/<p>It turns out that <a href="https://www.pcmag.com/news/263511/apples-iphone-tracking-what-you-need-to-know">your iPhone keeps an unencrypted datafile containing your approximate location</a>. You can review this datafile by using <a href="http://petewarden.github.io/iPhoneTracker/">this application</a>.</p>
<p>So the first question is: "What? My iPhone is 'tracking' me?" And the answer to that is, "yes, generally, but not to '<a href="https://www.imdb.com/title/tt0120660/">Enemy of the State</a>' levels …</p><p>It turns out that <a href="https://www.pcmag.com/news/263511/apples-iphone-tracking-what-you-need-to-know">your iPhone keeps an unencrypted datafile containing your approximate location</a>. You can review this datafile by using <a href="http://petewarden.github.io/iPhoneTracker/">this application</a>.</p>
<p>So the first question is: "What? My iPhone is 'tracking' me?" And the answer to that is, "yes, generally, but not to '<a href="https://www.imdb.com/title/tt0120660/">Enemy of the State</a>' levels." Here, for instance, is what my iPhone knows about my location:<a href="/uploads/2011/04/Screen-shot-2011-04-22-at-10.37.08-AM.png"><img alt="" class="alignnone size-full wp-image-5074" height="318" src="/uploads/2011/04/Screen-shot-2011-04-22-at-10.37.08-AM.png" title="Screen shot 2011-04-22 at 10.37.08 AM" width="287"></a></p>
<p>Some things to note:</p>
<ul>
<li>That grid is pretty coarse: at least on this island, the iPhone isn't tracking within more than a few blocks</li>
<li>I've used my iPhone GPS many times in Hilo, so the coarseness of the grid is not limited by data</li>
<li>Where I work -- which has notoriously bad AT&T coverage -- is a curious "hole" in the grid.</li>
</ul>
<p>These 3 things support (but do not prove) a benign explanation: the file is a cache of locations that can be used to speed the responsiveness of your iPhone's mapping.</p>
<p>So far, there's no indication that this file is in any way sent back to Apple or other parties, but it <em>is</em> a privacy risk, since the file is not encrypted. Apple should definitely explain the file and make it more secure in future releases. But for now, no need to panic.</p>Kokua For Japan - A Hawaii Benefit Concert For Japanese Earthquake and Pacific Tsunami Disaster Relief2011-04-10T09:02:00-10:002011-04-10T09:02:00-10:00larrytag:knowing.net,2011-04-10:/posts/2011/04/kokua-for-japan-a-hawaii-benefit-concert-for-japanese-earthquake-and-pacific-tsunami-disaster-relief/<p>Kokua For Japan - A Hawaii Benefit Concert For Japanese Earthquake and Pacific Tsunami Disaster Relief.</p>Up a tree no more: A 'real' artificial leaf debuts - Technology & science - Science - DiscoveryNews.com - msnbc.com2011-03-30T20:48:00-10:002011-03-30T20:48:00-10:00larrytag:knowing.net,2011-03-30:/posts/2011/03/up-a-tree-no-more-a-real-artificial-leaf-debuts-technology-science-science-discoverynews-com-msnbc-com/<p><a href="https://www.msn.com/">Up a tree no more: A 'real' artificial leaf debuts - Technology & science - Science - DiscoveryNews.com - msnbc.com</a>.</p>
<p>Apparently, they have two low-cost catalysts that can help dissociate water into hydrogen and oxygen which apparently is an advantage because ""a lot of the cost of a solar panel is in the …</p><p><a href="https://www.msn.com/">Up a tree no more: A 'real' artificial leaf debuts - Technology & science - Science - DiscoveryNews.com - msnbc.com</a>.</p>
<p>Apparently, they have two low-cost catalysts that can help dissociate water into hydrogen and oxygen which apparently is an advantage because ""a lot of the cost of a solar panel is in the wiring, the packaging." I don't know how much H2 and O2 I'd want to have bubbling around on my roof...</p>Non-blocking Programmers and Navigation Speed2011-03-30T07:30:00-10:002011-03-30T07:30:00-10:00larrytag:knowing.net,2011-03-30:/posts/2011/03/non-blocking-programmers-and-navigation-speed/<p><a href="https://codingrelic.geekhold.com/2011/03/non-blocking-programmers.html">Coding Relic: Non-blocking Programmers</a>.</p>
<p>In which D. Gentry makes the excellent point that high programming productivity is unlikely to result from a single cause, but from a multiplicity. He lauds typing speed and criticizes excessive swearing (dammit).</p>
<p>I am skeptical about "typing speed" but I've come to think that "navigation …</p><p><a href="https://codingrelic.geekhold.com/2011/03/non-blocking-programmers.html">Coding Relic: Non-blocking Programmers</a>.</p>
<p>In which D. Gentry makes the excellent point that high programming productivity is unlikely to result from a single cause, but from a multiplicity. He lauds typing speed and criticizes excessive swearing (dammit).</p>
<p>I am skeptical about "typing speed" but I've come to think that "navigation speed" is a key talent -- I work with some guys who have mad zsh and vi skillz and I have to admit that their speed with searching and querying across multiple directories is well beyond what I can do. Since questions that span multiple modules are often the ones that are more challenging, their advantage in navigation speed multiplies their effectiveness.</p>
<p>Text, though, is not the only way to achieve high "navigation speed." There are many programmers, including myself, who have more of a visual intuition. I quite like semantically-meaningful diagrams. Perhaps one of the reasons why CASE tools move in and out of fashion is that they are only valuable to that sizeable-but-not-universal group.</p>
<p>Perhaps this is yet another aspect of the field of software development where we see pendulum swings in popularity based not, as the proponents always argue, on fundamental advantages, but on personal and sociological reasons.</p>Drinking Science from the Nozzle of a Firehose2011-03-24T06:44:00-10:002011-03-24T06:44:00-10:00larrytag:knowing.net,2011-03-24:/posts/2011/03/drinking-science-from-the-nozzle-of-a-firehose/<p>Yesterday, I heard a presentation on the <a href="https://github.com/0x7CFE/llst">Large Synoptic Survey Telescope</a>, a planned telescope that will take a wide-angle photo of the sky, read the data out, and then move on to the next patch of the sky. This is in marked contrast to the highly planned targeting and relatively …</p><p>Yesterday, I heard a presentation on the <a href="https://github.com/0x7CFE/llst">Large Synoptic Survey Telescope</a>, a planned telescope that will take a wide-angle photo of the sky, read the data out, and then move on to the next patch of the sky. This is in marked contrast to the highly planned targeting and relatively long observing time that is more traditional.</p>
<p>The LSST will generate 30 terabytes of data nightly and generate a 70 petabyte catalog (that's a spicy meatball -- 70,000,000 gigabytes). They expect to pick up 1,000,000 transient events <em>per night</em>. You could put all the astronomers and students in the world to the task, and they still couldn't manually keep up with the data flow.</p>
<p>To make things even more challenging, the game-changing science is going to come from the most unusual stuff -- the faintest stuff, the most short-lived stuff, the rarer stuff -- since if it was bright, long-lived, and common, someone might have noticed it already.</p>
<p>The solution will call for wonderfully powerful parallelized machine learning systems. Watson ain't in it, although it's interesting to think how Watson-like analysis of <em>publications</em> might create initial starting places for partitioning the data.</p>
<p>Particle physics has already faced this enormous onslaught of data and it didn't surprise me to see <a href="http://www.fnal.gov">Fermilab</a> in the LSST subscriber list. Nor, when I heard of the data volumes and the computational challenges, was it surprising that another subscriber was <a href="https://www.google.com/?gws_rd=ssl">Google</a>.</p>Is Watson Elementary?: Pt. 22011-02-17T07:16:00-10:002011-02-17T07:16:00-10:00larrytag:knowing.net,2011-02-17:/posts/2011/02/is-watson-elementary-pt-2/<p>I used to be on top of Artificial Intelligence -- I wrote a column for and ultimately went on to be the Editor-in-Chief of <em>AI Expert</em>, the leading trade magazine in the AI field at the time. I've tried to stay, not professionally competent, but familiar with the field. That has …</p><p>I used to be on top of Artificial Intelligence -- I wrote a column for and ultimately went on to be the Editor-in-Chief of <em>AI Expert</em>, the leading trade magazine in the AI field at the time. I've tried to stay, not professionally competent, but familiar with the field. That has been rather difficult because the AI field has largely put aside grand theories and adopted two pragmatic themes: statistical techniques and mixed-approaches.</p>
<p>Statistical techniques rely on large bodies of data that allow you to guess, for instance, that "push comes to"->"shove" not from any understanding of metaphor or causation but because the word "push" followed by "comes" followed by "to" is followed 87.3% of the time by the word "shove". Statistics excel at <em>extracting</em> patterns from large input sets.</p>
<p>Mixed approaches are ones which use different strategies to try to tackle different aspects or stages of a problem. Imagine a blackboard around which people raise their hands, come forward, add or erase a small bit of information, and step back into the crowd. For instance, one (relatively) simple tool might know that "X comes to Y" implies temporal ordering. Another might say that temporal ordering implies escalation. And another might say "A 'Shove' is an escalation of a 'Push'".</p>
<p>The more I read about Watson, the more it seems that while Watson used mixed approaches, <em>what</em> it's mixing are almost all statistical techniques. So while it would undoubtedly be able to answer that "shove" is what "push often comes to..." I think it would do so without any reasoning, or <em>schema</em>, about temporal ordering or escalation.</p>
<p>The problem with statistical techniques is they are not general.</p>
<p>If a child is shown how to win tic-tac-toe by always starting with a 'X' in the upper-left box, and then we asked them if they could always win by starting in another corner, we would be disappointed if they couldn't figure it out. Maybe not at first, but if tic-tac-toe was something they enjoyed, they would eventually recognize the pattern. If they <em>never</em> achieved the recognition, it would be troubling.</p>
<p>Pattern <em>recognition</em>, not pattern <em>extraction</em>, seems to be "how" we work. If pattern extraction were at the core, we wouldn't be troubled by sharks when entering the ocean and we wouldn't spend money on lottery tickets.</p>
<p>So it seems that Watson uses a fundamentally different "how" in its achievement. Yet the capability of rapidly and accurately answering questions (ones that have been intentionally obfuscated!) is clearly epochal. Clearly Watson has a role in medicine (diagnostics), law and regulatory compliance (is there precedent? is this a restricted behavior?), and intelligence (where's the next revolution likely?). The problems of "Big Data" are very much in the mind of the software development community and Watson is a stunning leap forward in combining big data, processing power, and specialized algorithms.</p>Top 10 Watson Answers2011-02-16T09:13:00-10:002011-02-16T09:13:00-10:00larrytag:knowing.net,2011-02-16:/posts/2011/02/top-10-watson-answers/<ol>
<li>What is Lady Gaga?</li>
<li>What is Batman would totally defeat Godzilla?</li>
<li>What is boxers, because the boys need to breathe?</li>
<li>What is the Butlerian Jihad?</li>
<li>What is Team Edward?</li>
<li>What is orange you glad I didn't say banana?</li>
<li>What is antikythera mechanism? ("Sorry, we were looking for 'Who is Adam …</li></ol><ol>
<li>What is Lady Gaga?</li>
<li>What is Batman would totally defeat Godzilla?</li>
<li>What is boxers, because the boys need to breathe?</li>
<li>What is the Butlerian Jihad?</li>
<li>What is Team Edward?</li>
<li>What is orange you glad I didn't say banana?</li>
<li>What is antikythera mechanism? ("Sorry, we were looking for 'Who is Adam?'")</li>
<li>What is a ring of pretty flowers that smells bad?</li>
<li>What is 42?</li>
<li>What is, there is now?</li>
</ol>Is Watson Elementary?2011-02-16T07:49:00-10:002011-02-16T07:49:00-10:00larrytag:knowing.net,2011-02-16:/posts/2011/02/is-watson-elementary/<p>We have to be very quick to ask if the astonishment we feel at Watson's performance on Jeopardy is a projection. Eliza, the computerized Rogerian psychoanalyst does little more than slightly disguise the question "why do you feel that?" -- a question that people are so delighted to answer that they …</p><p>We have to be very quick to ask if the astonishment we feel at Watson's performance on Jeopardy is a projection. Eliza, the computerized Rogerian psychoanalyst does little more than slightly disguise the question "why do you feel that?" -- a question that people are so delighted to answer that they overlook the mechanical blankness generating it.</p>
<p>Is Watson just a 21st century Eliza?</p>
<p>At a certain level we know the answer is "yes." We know that Watson is not the product of a grand theory of consciousness. We know that Watson is essentially a (very impressive) parser backed by a blackboard system that uses various known techniques working against a (very capacious) database of facts and frames.</p>
<p>We also know that the capacious database of facts that Watson refers to could not have been hand-crafted. There has simply not been time for people to type in the names of every Olympic athlete, their results, their unusual physical characteristics, etc. We know that Watson's answers in that category, whether correct or incorrect, were based on facts that it read and processed on its own (or at least largely on its own). That's astonishing.</p>
<p>We can also be certain that Watson is capable of inference. Given the facts "All men are mortal" and "Socrates is a man" we can be certain that Watson would be able to conclude correctly that "Socrates is mortal" (or, in Jeopardy form, "What is Socrates is mortal?").</p>
<p>Although we're sure that "Socrates is a man" is the type of fact that Watson can extract from unstructured input, what about "All men are mortal"? Can Watson infer that rule on its own or does that have to be hand-crafted by a programmer and spoon-fed to Watson?</p>
<p>Everything I know about the field of AI makes me think that just as there has not been enough time to hand-craft every fact fed into Watson, so too has there not been enough time to hand-craft enough higher-order associative logic to allow Watson to perform as well as it has demonstrated. (The Cyc Project has essentially been hand-crafting such logic for 20 years, with little sign of progress -- but perhaps the Cyc database plays a role in Watson?)</p>
<p>Or can Watson induce "All men are mortal" from the facts that it has absorbed? Can it draw (tentative, statistically hedged) conclusions? If that is the case, then it seems logical that Watson's learning can continue in an autonomous or semi-autonomous way. Such an inflection point in learning has long been seen as the critical moment in the generation of intelligence, whether in humans or, presumably, machines.</p>Computer Tackles Jeopardy This Week2011-02-13T20:23:00-10:002011-02-13T20:23:00-10:00larrytag:knowing.net,2011-02-13:/posts/2011/02/computer-tackles-jeopardy-this-week/<p>The TV quiz show Jeopardy this week will feature an IBM Computer ("Watson") competing against the two winningest Jeopardy champions. My prediction is that the computer is going to win. I base that on the name of the machine -- not Blue J but "Watson." That's the name of IBM's founder …</p><p>The TV quiz show Jeopardy this week will feature an IBM Computer ("Watson") competing against the two winningest Jeopardy champions. My prediction is that the computer is going to win. I base that on the name of the machine -- not Blue J but "Watson." That's the name of IBM's founder and I don't think they'd put their corporate identity on the line if they didn't have the breakthrough technology -- technologies -- to pull it off.</p>
<p>I've been reading about the technology for awhile. Apparently, it's powered by (or at least was originally powered by) the <a href="http://uima.apache.org/">UIMA framework, which is now an Apache project</a>.</p>Wordless Wednesday2011-02-02T06:02:00-10:002011-02-02T06:02:00-10:00larrytag:knowing.net,2011-02-02:/posts/2011/02/wordless-wednesday-5/<p><img alt="DSC_7194" height="428" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_z.png" width="640"></p>Wordless Wednesday2011-01-26T06:01:00-10:002011-01-26T06:01:00-10:00larrytag:knowing.net,2011-01-26:/posts/2011/01/wordless-wednesday-6/<p><img alt="img" src="/uploads/2011/01/image.jpg"></p>Kickstarter: A Crowd-Sourced Dragon's Den2011-01-25T06:04:00-10:002011-01-25T06:04:00-10:00larrytag:knowing.net,2011-01-25:/posts/2011/01/kickstarter-a-crowd-sourced-dragons-den/<p><a href="https://www.kickstarter.com/">Kickstarter is a</a> service that allows you to raise money for projects easily: write up a proposal, come up with a set of bonuses that your funders get (You've watched PBS, you know the drill: "For \<span class="math">\(50, you get a lifetime license and a tote bag! For \\)</span>100, you get …</p><p><a href="https://www.kickstarter.com/">Kickstarter is a</a> service that allows you to raise money for projects easily: write up a proposal, come up with a set of bonuses that your funders get (You've watched PBS, you know the drill: "For \<span class="math">\(50, you get a lifetime license and a tote bag! For \\)</span>100, you get all the benefits of the \$50 level, plus a golf umbrella!").</p>
<p>I am tempted to see if it works for my line of interests: for instance, a technical article or podcast on (say) neural networks or genetic algorithms or somesuch. Or, even more interestingly, to fund a project in the hit-driven world of iPhone development.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Goldilocks: A race-aware Java runtime - Microsoft Research2011-01-24T06:05:00-10:002011-01-24T06:05:00-10:00larrytag:knowing.net,2011-01-24:/posts/2011/01/goldilocks-a-race-aware-java-runtime-microsoft-research/<p><a href="https://www.microsoft.com/en-us/research/publication/goldilocks-a-race-aware-java-runtime/?from=http%3A%2F%2Fresearch.microsoft.com%2Fapps%2Fpubs%2Fdefault.aspx%3Fid%3D141927">Goldilocks: A race-aware Java runtime - Microsoft Research</a>.</p>
<p>This one's been in my backlog to post about for awhile. Not only is it interesting as a concept, I find it also interesting that it's a Java runtime and not based on the CLR. Technical reason or just researcher interest?</p>Surfing "Jaws" At Night2011-01-23T15:06:00-10:002011-01-23T15:06:00-10:00larrytag:knowing.net,2011-01-23:/posts/2011/01/surfing-jaws-at-night/<p>The Eddie did not go, but the winter storms that have kept the waves big all January gave someone an opportunity to do something truly nutsy -- surfing Maui's "Jaws" break in the middle of the night.</p>
<p>Sure, it was a stunt and, for surfing, stinks of dissipation and decadence, but …</p><p>The Eddie did not go, but the winter storms that have kept the waves big all January gave someone an opportunity to do something truly nutsy -- surfing Maui's "Jaws" break in the middle of the night.</p>
<p>Sure, it was a stunt and, for surfing, stinks of dissipation and decadence, but still... 30' waves at night?</p>
<p><a href="https://dangerousminds.net/comments/surfer_mark_visser_makes_history_by_riding_30-40_foot_waves_in_complet">Dangerous Minds | Surfer Mark Visser makes history by riding 30-40 foot waves in complete darkness</a>.</p>Sho -- A "Playground for Data" Written in IronPython2011-01-20T08:18:00-10:002011-01-20T08:18:00-10:00larrytag:knowing.net,2011-01-20:/posts/2011/01/sho-a-playground-for-data-written-in-ironpython/<p><a href="https://www.microsoft.com/en-us/research/products/?from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fdownloads%2Fbc38771b-dc48-475b-8d18-7fe87e1bc2a1%2Fdefault.aspx">Sho looks interesting</a>, a .NET set of libraries, utilities, and an interactive console for rapid prototyping, data analysis, and visualization.</p>
<p>I am not sure how or if this interacts with <a href="https://www.microsoft.com/en-us/download/details.aspx?id=52294&from=http%3A%2F%2Fresearch.microsoft.com%2Fen-us%2Fdownloads%2Fdd4a479f-92d6-496f-867d-666c87fbaada%2Fdefault.aspx">Pivot</a>, another Microsoft tool that seems to cover the same ground.</p>Wordless Wednesdays2011-01-19T09:19:00-10:002011-01-19T09:19:00-10:00larrytag:knowing.net,2011-01-19:/posts/2011/01/wordless-wednesdays-5/<p><a href="/uploads/2011/01/IMG_2396.jpg"><img alt="" class="alignnone size-full wp-image-5012" height="334" src="/uploads/2011/01/IMG_2396.jpg" title="IMG_2396" width="446"></a></p>90-second version of A Wrinkle in Time2011-01-17T09:21:00-10:002011-01-17T09:21:00-10:00larrytag:knowing.net,2011-01-17:/posts/2011/01/90-second-version-of-a-wrinkle-in-time/<p><a href="https://vimeo.com/18694727">"A Wrinkle In Time" In 90 Seconds</a> from <a href="https://vimeo.com/user3647754">James Kennedy</a> on <a href="https://vimeo.com/">Vimeo</a>.</p>
<p>This is awesome: award-winning children's books retold as 90 second films. Although my nieces and nephews are probably too old for this, <a href="http://www.ala.org/alsc/awardsgrants/bookmedia/newberymedal/newberyhonors/newberymedal">I checked the list of Newbery winners</a> and was amazed by how few I'd even heard …</p><p><a href="https://vimeo.com/18694727">"A Wrinkle In Time" In 90 Seconds</a> from <a href="https://vimeo.com/user3647754">James Kennedy</a> on <a href="https://vimeo.com/">Vimeo</a>.</p>
<p>This is awesome: award-winning children's books retold as 90 second films. Although my nieces and nephews are probably too old for this, <a href="http://www.ala.org/alsc/awardsgrants/bookmedia/newberymedal/newberyhonors/newberymedal">I checked the list of Newbery winners</a> and was amazed by how few I'd even heard of, much less read.</p>We Shall Fight Them In The Registers, We Shall Fight Them In The Heaps...2011-01-17T08:58:00-10:002011-01-17T08:58:00-10:00larrytag:knowing.net,2011-01-17:/posts/2011/01/we-shall-fight-them-in-the-registers-we-shall-fight-them-in-the-heaps/<p><a href="https://www.nytimes.com/2011/01/16/world/middleeast/16stuxnet.html?_r=1&hp">Stuxnet Worm Used Against Iran Was Tested in Israel - NYTimes.com</a>.</p>
<p>If we must have war, by all means let it be wormy.</p>808 Computers2011-01-16T08:20:00-10:002011-01-16T08:20:00-10:00larrytag:knowing.net,2011-01-16:/posts/2011/01/808-computers/<p>Big Island Nerds...</p>Shocked, shocked to discover astrology unreliable2011-01-15T08:13:00-10:002011-01-15T08:13:00-10:00larrytag:knowing.net,2011-01-15:/posts/2011/01/shocked-shocked-to-discover-astrology-unreliable/<p>I don’t know what to make of the furor that <a href="https://www.msn.com/">your astrological sign does not accord with the facts</a>.</p>Sharpie Liquid Pencils : -12011-01-04T07:19:00-10:002011-01-04T07:19:00-10:00larrytag:knowing.net,2011-01-04:/posts/2011/01/sharpie-liquid-pencils-1/<p>Being a writing-implement fanboy, I had to try out the new Sharpie Liquid Pencils, which are erasable for a few days and then become permanent. I’m not going to explain it much further, because they stink.</p>
<p>The form-factor is very much like a cheap uniball pen, except that you …</p><p>Being a writing-implement fanboy, I had to try out the new Sharpie Liquid Pencils, which are erasable for a few days and then become permanent. I’m not going to explain it much further, because they stink.</p>
<p>The form-factor is very much like a cheap uniball pen, except that you have to bear down quite noticeably in order to get a consistent line. The line created looks more like a black pen line than a pencil line, although it erases very well (I’ll give it that).</p>
<p>Much more expensive than a pencil, much less comfortable than a pen. Buy one only if you want to place it in your collection between New Coke and Crystal Pepsi.</p>Meteor Shower Movie from Atop Mauna Kea2010-12-14T11:54:00-10:002010-12-14T11:54:00-10:00larrytag:knowing.net,2010-12-14:/posts/2010/12/meteor-shower-movie-from-atop-mauna-kea/<p>Mauna Kea Geminids</p>
<p>This is a movie of last night's sky from Mauna Kea and is well worth downloading. If you're wondering "Why is the sky blue but I can see the stars?" that's because for the first half of the night, the moon was up! At around midnight, it …</p><p>Mauna Kea Geminids</p>
<p>This is a movie of last night's sky from Mauna Kea and is well worth downloading. If you're wondering "Why is the sky blue but I can see the stars?" that's because for the first half of the night, the moon was up! At around midnight, it sets, creating a second dramatic mountain-shadow. After moonset, the sky becomes dramatically darker as the meteor activity picks up.</p>
<p>The lights in the distance are Hilo.</p>Hawai'i no ka oi2010-12-11T16:23:00-10:002010-12-11T16:23:00-10:00larrytag:knowing.net,2010-12-11:/posts/2010/12/hawaii-no-ka-oi-2/<p>I was looking at Poliahu's white cloak covering the peak of Mauna Kea, and then I put my face in the water and looked down at the coral reef 40' below me and what should I see swimming below me but a manta ray with a 12'+ wingspan?</p>Programming Challenge: Deep Copy, Overriding Some...2010-12-09T10:28:00-10:002010-12-09T10:28:00-10:00larrytag:knowing.net,2010-12-09:/posts/2010/12/programming-challenge-deep-copy-overriding-some/<ul>
<li>Imagine that you have a hierarchical object graph:</li>
</ul>
<p><a href="/uploads/2010/12/hierarchy.pdf">hierarchy</a></p>
<p>And you want to merge two instances. Some elements should combine elements from both, some must take their value from the master. My example scenario is artificial, so please don't say 'well, if all you have to do is number pages …</p><ul>
<li>Imagine that you have a hierarchical object graph:</li>
</ul>
<p><a href="/uploads/2010/12/hierarchy.pdf">hierarchy</a></p>
<p>And you want to merge two instances. Some elements should combine elements from both, some must take their value from the master. My example scenario is artificial, so please don't say 'well, if all you have to do is number pages...'</p>
<p>This is my first take: </p>
<p>You can see my pattern:</p>
<ul>
<li>shallow copy</li>
<li>combine</li>
<li>override</li>
<li>recurse</li>
</ul>
<p>I have two problems with this code:</p>
<ol>
<li>It's tedious</li>
<li>The biz rules are spread out to individual classes, but they are more naturally expressed in a single place, e.g., "Merge these two, but use this one as the 'master' and use it's values for Foo.Bar, Bar.Bat, and Baz.Fizz"</li>
</ol>
<p>(Something I'm <strong>not</strong> bothered about is the explicit call to GetSomeMergeableElement().DeepCopyDeferringToMaster() -- I could use reflection to iterate over the IMergeable fields and call<br>
<code>someGetterFunction(newFoo). DeepCopyDeferringToMaster( someGetterFunction(other), someGetterFunction(master) );</code><br>
but I would have to cut-and-paste that loop into each subclass, so no real gain.)</p>
<p>[I have a strong hunch that this could be done better in a functional language, but I can't put it together. Can you?]{style="text-decoration: line-through;"}</p>
<p>Update: Here's my FP-inspired implementation -- what do you think? </p>
<p>Here's the test code: </p>RIP: Novell2010-11-23T07:10:00-10:002010-11-23T07:10:00-10:00larrytag:knowing.net,2010-11-23:/posts/2010/11/rip-novell/<p>After the 3rd or 4th "Year of the Network" everyone in business finally all got network cards in their computers, discovered email and the "Respond to all..." button and the world hasn't been the same since.</p>
<p>I understood Novell back in those days, but since, it's been harder. The idea …</p><p>After the 3rd or 4th "Year of the Network" everyone in business finally all got network cards in their computers, discovered email and the "Respond to all..." button and the world hasn't been the same since.</p>
<p>I understood Novell back in those days, but since, it's been harder. The idea of battling against Microsoft's emerging Office monopoly was a good one, but Word Perfect and their spreadsheet (was it Quattro? Bought from Borland?) were late and less-than-compelling.</p>
<p>Then they had some Unix license, which I guess can only take you so far.</p>
<p>In recent years, though, I've been very fond of the Mono project, the cross-platform .NET stack, which Novell sponsored. Recently, with Microsoft's move away from the Iron* languages, I thought things looked exceedingly bright for Mono.</p>
<p>Novell's death and the prospect of at least some assets being sold to Microsoft make me nervous about the future of Mono.</p>Making it stick.: This is not the one: On Lisp2010-11-19T15:00:00-10:002010-11-19T15:00:00-10:00larrytag:knowing.net,2010-11-19:/posts/2010/11/making-it-stick-this-is-not-the-one-on-lisp/<p><a href="http://patricklogan.blogspot.com/2010/11/this-is-not-one-on-lisp.html">Making it stick.: This is not the one: On Lisp</a>.</p>Dr Dobbs - Q&A: Martin Fowler and Rebecca Parsons on DSLs2010-11-18T06:36:00-10:002010-11-18T06:36:00-10:00larrytag:knowing.net,2010-11-18:/posts/2010/11/dr-dobbs-qa-martin-fowler-and-rebecca-parsons-on-dsls/<p><a href="http://www.drdobbs.com/architecture-and-design/qa-martin-fowler-and-rebecca-parsons-on/228200852">Dr Dobbs - Q&A: Martin Fowler and Rebecca Parsons on DSLs</a>.</p>
<p>I just received Fowler's DSL book in the mail and look forward to reading it. In the meantime, here's a brief interview at Dr. Dobb's on the subject.</p>The Price Is Always Right – MITs Real-Time Inflation Index2010-11-15T06:30:00-10:002010-11-15T06:30:00-10:00larrytag:knowing.net,2010-11-15:/posts/2010/11/the-price-is-always-right-%e2%80%93-mits-real-time-inflation-index/<p><a href="http://www.datapointed.net/2010/11/mit-billion-prices-inflation-index/">The Price Is Always Right – MITs Real-Time Inflation Index</a>.</p>
<p>There's a lot of criticism of the Consumer Price Index, including suspicion that it's intentionally gamed to further political agenda. Instead, MIT has created an index that uses Internet purchases to measure inflation.</p>Sponsored Content is not Journalism2010-11-11T10:45:00-10:002010-11-11T10:45:00-10:00larrytag:knowing.net,2010-11-11:/posts/2010/11/sponsored-content-is-not-journalism/<blockquote>
<p>...using the same reporting and writing techniques as more traditional journalists.</p>
</blockquote>
<p>via <a href="https://www.informationweek.com/Default.asp">Internet Evolution - CMO Clan Editors Blog - Why Intel Went Into the Journalism Business</a>.</p>
<p>Time to bite the hands that have fed me, but this is important: When a Marketing/PR department has editorial control over a technical article …</p><blockquote>
<p>...using the same reporting and writing techniques as more traditional journalists.</p>
</blockquote>
<p>via <a href="https://www.informationweek.com/Default.asp">Internet Evolution - CMO Clan Editors Blog - Why Intel Went Into the Journalism Business</a>.</p>
<p>Time to bite the hands that have fed me, but this is important: When a Marketing/PR department has editorial control over a technical article, it's not journalism. It's not even close to journalism. It's, at best, an overview or a tutorial. What it is most emphatically <em>not</em> is journalism.</p>
<p>Journalism is bound by the rules of scientific inquiry -- it's not the <em>reporter</em> who's supposed to be objective, it's the <em>process</em>. Conclusions are supposed to be based on valid arguments.</p>
<p><em><a href="https://arstechnica.com/tech-policy/2010/11/getting-to-qed-part-1/">Valid</a></em> <a href="https://arstechnica.com/tech-policy/2010/11/getting-to-qed-part-1/">is different from</a> <em><a href="https://arstechnica.com/tech-policy/2010/11/getting-to-qed-part-1/">true</a>.</em></p>
<p>That Ars article is well worth reading as a whole, but let me quote the relevant line:</p>
<blockquote>
<p>A good debate should first establish that all the arguments are valid, and then spend the rest of the time quibbling about the premises.</p>
</blockquote>
<p>The same is true of journalism, including "trade journalism," which is the general name for the largely thankless branch of reporting dedicated to serving a specific industry.<br>
Take the lead article at Intel's "Free Press": Why Smart TV is Not PC. It has a simple valid argument:</p>
<p><a href="/uploads/2010/11/smarttv.png"><img alt="" class="alignnone size-full wp-image-4955" height="228" src="/uploads/2010/11/smarttv.png" title="smarttv" width="504"></a></p>
<p>It ought to be easy to make this argument, as easy as the argument that "Ham is not Beef."</p>
<p>But what the heck is a "Smart TV"? It seems to have something to do with Internet connectivity and computer power. My current TV is entirely driven by either my Tivo or my Xbox, both of which are connected to the Internet; <em>many</em> people watch through cable boxes which can record shows, stream media, etc.. Are they "Smart"?</p>
<p>It's not journalistically egregious that they don't define "PC" because journalism doesn't have to be rigidly formal and we all know what... wait a second... Look at this quote:</p>
<blockquote>
<p>"Do you want to live in a world where your Tivo says, 'I'm terribly sorry that before you can see this next show I have to defrag myself?'</p>
</blockquote>
<p>What does that relate to? Is waiting for defrag a PC characteristic or a Smart TV characteristic? From the form of the argument, I take it to be a "PC Characteristic," in which case it's <strong>valid</strong> if and only if a Tivo is a "PC" (uh...)</p>
<p>But even if it's <strong>valid</strong> it's certainly not <strong>true</strong>. I've had Tivo for 6 years and have never had to wait for a defrag to watch a show. Heck, I can't remember the last time I was stopped cold by a defrag on any computer.</p>
<p>That particular article was <strong>not</strong> developed using "the same reporting and writing <strong>[and what about editing?...Ed.]</strong> techniques as more traditional journalists."</p>
<p>And although it ticks me off that Intel has the nerve to claim the title of journalism, my point isn't that their articles are <em>particularly</em> non-journalistic, it's that when a company sponsors content, they <strong>do not</strong> expect, want, or <strong>tolerate</strong> objective journalism.</p>
<p>The Soylent Corporation <strong>will not</strong> pay for an article on "Soylent Green Is People<strong>."</strong></p>
<p>Trade journalism is written in service to the readers. The upshot of that is the potential of pissing off the companies whose advertising supports the trade publication in which it appears.</p>
<p>In the trade press, a pissed-off company is a direct burden to the publisher. Trade publications, whether in print or on the Internet, rely on trade advertisement. If you're in the software development trade press and Microsoft pulls their ads, you're either dead or entirely reliant on support from one of Microsoft's chief rivals. Tick <em>them</em> off and you're dead. That's why there are no journalistically-driven programming magazines left (and, by the way, in my day Microsoft was actually less likely to bully with ads than Sun and Oracle).</p>
<p>The Web has made it much, much easier for pissed-off companies to use their advertising budget in retaliation for journalism that does not suit their agenda. It used to be the case that the ad-folk could say "Our magazine is an important trusted source in the trade. If you pull your ads, it will damage us, but you will lose your visibility with the most engaged segment of the industry."</p>
<p>Now? Google Search is the most important source in <strong>every</strong> industry. Use your ad budget as a weapon against the trade press, increase your buys on Google -- it may not be as trusted as a trade source, but quantity has a certain quality all its own (and, to be sure, trust in the press, whether mainstream or trade, isn't what it used to be).</p>
<p>I won't say that trade journalism is defeated, because there are still a few companies and many individuals who still have some fight in them. The accepted euphemism in the industry is "on the ropes," which holds out the hope that the journalists, like Ali, have untapped reserves. But we don't live in the boxing world any more, we live in the MMA world, and the best metaphor in that world is that while the trade journalists won't tap, they're being choked out.</p>
<p>I've written sponsored content for Intel, AMD, Microsoft, Sun, Oracle, etc.. I've also written for the trade press. I tell myself that I can keep the jobs separate -- that no one expects a sponsored tutorial to read "On the other hand, our rival's technology doesn't even require this step." But, on the other hand, when I write for the trade press, am I compromised by a tiny voice saying "Don't criticize them or they won't hire you to write their tutorials next time?" I like to think not, since writing is not my major source of income. But, objectively, the argument:<br>
<a href="/uploads/2010/11/coi.png"><img alt="" class="alignnone size-full wp-image-4956" height="281" src="/uploads/2010/11/coi.png" title="coi" width="418"></a></p>
<p>is certainly valid.</p>
<p>I suppose this is the reason I'm so sensitive to the degrading of the word "journalism." I <strong>know</strong> what I do when I write sponsored content is not journalism, just as I know that when I write fiction or craft an email I'm doing something different from journalism. But if readers do not know that difference, then how can they be expected to trust anything I say?</p>IronRuby and IronPython Heading For Scrap Heap?2010-10-05T14:23:00-10:002010-10-05T14:23:00-10:00larrytag:knowing.net,2010-10-05:/posts/2010/10/ironruby-and-ironpython-heading-for-scrap-heap/<p>In my most recent column for SD Times, I discuss <a href="https://sdtimes.com/microsoft/windows-net-watch-are-ironruby-and-ironpython-heading-for-the-rust-heap/">recent disappointing events in the world of the DLR and suggest that Microsoft's internal competitiveness is creating too much chaos</a>.</p>Project "Dirigible" : Python-Powered Grid Computing Spreadsheet2010-10-05T06:39:00-10:002010-10-05T06:39:00-10:00larrytag:knowing.net,2010-10-05:/posts/2010/10/project-dirigible-python-powered-grid-computing-spreadsheet/<p><a href="https://www.resolversystems.com/">Resolver Systems: News</a>.</p>
<p>I <em>love</em> Resolver One (I just wish it ran on systems under than Windows!), the Python-powered spreadsheet that allows you to combine spreadsheet-style computing with Python code.</p>
<p>Now, Resolver Systems has moved the concept up towards grid computing. If you've got some Big Data challenges, it might …</p><p><a href="https://www.resolversystems.com/">Resolver Systems: News</a>.</p>
<p>I <em>love</em> Resolver One (I just wish it ran on systems under than Windows!), the Python-powered spreadsheet that allows you to combine spreadsheet-style computing with Python code.</p>
<p>Now, Resolver Systems has moved the concept up towards grid computing. If you've got some Big Data challenges, it might behoove you to check out this tool.</p>Will People Search for a $1.99 app?2010-10-04T06:30:00-10:002010-10-04T06:30:00-10:00larrytag:knowing.net,2010-10-04:/posts/2010/10/will-people-search-for-a-1-99-app/<blockquote>
<p>Paul Graham once suggested that startups pose their mission statement as a question. Google's question might have been "Will the PageRank algorithm deliver results that are so good that they lure users away from Altavista?"</p>
<p>via <a href="https://github.com/raganwald-deprecated/homoiconic/blob/master/2010/09/concept.md#readme">2010/09/concept.md at master from raganwald's homoiconic - GitHub</a>.</p>
</blockquote>
<p>My great lesson from …</p><blockquote>
<p>Paul Graham once suggested that startups pose their mission statement as a question. Google's question might have been "Will the PageRank algorithm deliver results that are so good that they lure users away from Altavista?"</p>
<p>via <a href="https://github.com/raganwald-deprecated/homoiconic/blob/master/2010/09/concept.md#readme">2010/09/concept.md at master from raganwald's homoiconic - GitHub</a>.</p>
</blockquote>
<p>My great lesson from my travel app is that the key question was not "Can you build a decent iPhone app quickly and cost-effectively?" but "Will people look for an app to help their specific travel experience?"</p>
<p>The answer, right now, appears to be "no."</p>Got Binos and Clear Dark Skies? Look for a comet this weekend!2010-10-01T09:21:00-10:002010-10-01T09:21:00-10:00larrytag:knowing.net,2010-10-01:/posts/2010/10/got-binos-and-clear-dark-skies-look-for-a-comet-this-weekend/<p>There's a pretty good comet visible near the easy-to-find constellation Cassiopeia (the big "M" or "W" in the Northern sky). It's brightness is listed as magnitude 5.7, which ought to be visible with binoculars if you aren't too close to bright lights. (If you have <em>really</em> dark skies and …</p><p>There's a pretty good comet visible near the easy-to-find constellation Cassiopeia (the big "M" or "W" in the Northern sky). It's brightness is listed as magnitude 5.7, which ought to be visible with binoculars if you aren't too close to bright lights. (If you have <em>really</em> dark skies and sharp eyes and let them dark-adapt for half an hour or more, it might even be naked-eye visible, but I'm not betting on that even up on Mauna Kea!)</p>
<p>This chart might help: you can see that the comet is pretty much in line with the first stroke of the "M" of Cassiopeia. With binoculars you'll probably just see a smudge of light with maybe some elongation. With a scope, who knows?</p>
<p><a href="/uploads/2010/10/Screen-shot-2010-10-01-at-9.10.23-AM.png"><img alt="" class="alignnone size-full wp-image-4923" height="653" src="/uploads/2010/10/Screen-shot-2010-10-01-at-9.10.23-AM.png" title="Screen shot 2010-10-01 at 9.10.23 AM" width="821"></a></p>Yavin IV: Exploring space on the cheap with an iPhone, Droid, and Flip2010-09-28T10:52:00-10:002010-09-28T10:52:00-10:00larrytag:knowing.net,2010-09-28:/posts/2010/09/yavin-iv-exploring-space-on-the-cheap-with-an-iphone-droid-and-flip/<p><a href="https://arstechnica.com/gadgets/2010/09/yavin-iv-exploring-space-on-the-cheap-with-an-iphone-droid-and-flip/#comments-bar">Yavin IV: Exploring space on the cheap with an iPhone, Droid, and Flip</a>.</p>
<p>Apparently, even on a very windy day, you can send a weather balloon up 100,000' and when it bursts and you parachute the payload down, you've still only covered about 75 miles. Hmm....</p>WordPress 3.0 "Thelonious" Launched2010-09-27T08:26:00-10:002010-09-27T08:26:00-10:00larrytag:knowing.net,2010-09-27:/posts/2010/09/wordpress-3-0-thelonious-launched/<p><a href="https://wordpress.org/news/2010/06/thelonious/">WordPress › WordPress 3.0 "Thelonious"</a>.</p>
<p>This is a major update, but it looks like to take advantage of several of the components, you have to switch to the default "2010" theme.</p>Household Net Worth off $12.3 Trillion from Peak2010-09-24T08:28:00-10:002010-09-24T08:28:00-10:00larrytag:knowing.net,2010-09-24:/posts/2010/09/household-net-worth-off-12-3-trillion-from-peak/<p><a href="https://www.calculatedriskblog.com/2010/09/q2-flow-of-funds-household-net-worth.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+CalculatedRisk+(Calculated+Risk)">Calculated Risk: Q2 Flow of Funds: Household Net Worth off \$12.3 Trillion from Peak</a>.</p>
<p>Not that lost equity has to be paid off (although I knew too many people who used their homes as ATMs during the early 00s), but just in terms of morale, the loss of \$12 …</p><p><a href="https://www.calculatedriskblog.com/2010/09/q2-flow-of-funds-household-net-worth.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+CalculatedRisk+(Calculated+Risk)">Calculated Risk: Q2 Flow of Funds: Household Net Worth off \$12.3 Trillion from Peak</a>.</p>
<p>Not that lost equity has to be paid off (although I knew too many people who used their homes as ATMs during the early 00s), but just in terms of morale, the loss of \$12.3T goes a long way to explain the roiling discontent in the US.</p>FunLoft: Reactive Concurrent Programming Language2010-09-23T06:33:00-10:002010-09-23T06:33:00-10:00larrytag:knowing.net,2010-09-23:/posts/2010/09/funloft-reactive-concurrent-programming-language/<p>It sounds like someone designed a programming language with the express intention of intriguing me:</p>
<blockquote>
<p><a href="http://www-sop.inria.fr/mimosa/rp/FunLoft/index.html">FunLoft</a> is an experimental language for concurrent programming, designed with the following objectives:</p>
<ul>
<li>make concurrent programming simpler by providing a framework with a clear and sound semantics.</li>
<li>provide a safe language, in which, for example …</li></ul></blockquote><p>It sounds like someone designed a programming language with the express intention of intriguing me:</p>
<blockquote>
<p><a href="http://www-sop.inria.fr/mimosa/rp/FunLoft/index.html">FunLoft</a> is an experimental language for concurrent programming, designed with the following objectives:</p>
<ul>
<li>make concurrent programming simpler by providing a framework with a clear and sound semantics.</li>
<li>provide a safe language, in which, for example, data-races are impossible.</li>
<li>control the use of resources (CPU and memory); for example, memory leaks cannot occur in FunLoft programs, which always react in finite time.</li>
<li>have an efficient implementation which can deal with large numbers of concurrent components.</li>
<li>benefit from the real parallelism offered by multicore machines.</li>
</ul>
<p>... FunLoft is based on a programming model which is a variant of reactive programming</p>
</blockquote>Wordless Wednesdays: God, I Hate Nature Photography2010-09-22T06:45:00-10:002010-09-22T06:45:00-10:00larrytag:knowing.net,2010-09-22:/posts/2010/09/wordless-wednesdays-god-i-hate-nature-photography/<p><a href="/uploads/2010/09/iiwi_mag.png"><img alt="" class="alignnone size-full wp-image-4904" height="535" src="/uploads/2010/09/iiwi_mag.png" title="iiwi_mag" width="800"></a></p>Guilty as Charged: The Cult of Busy2010-09-21T06:11:00-10:002010-09-21T06:11:00-10:00larrytag:knowing.net,2010-09-21:/posts/2010/09/guilty-as-charged-the-cult-of-busy/<p><a href="https://scottberkun.com/2010/the-cult-of-busy/">The cult of busy « Scott Berkun</a>.</p>
<p>This rings absolutely true to me.</p>Machine-Translated Joke From My Spam Inbox2010-09-20T14:42:00-10:002010-09-20T14:42:00-10:00larrytag:knowing.net,2010-09-20:/posts/2010/09/from-the-spam-can/<p>::: {#_mcePaste}
A altogether inebriated people was stumbling down the passage with equal foot on the repress and an individual foot in the gutter. A cop pulled up and said, “I’ve got to take you in, pal. You’re doubtlessly drunk.”
:::</p>
<div>
</div>
<p>::: {#_mcePaste}
Our wasted friend asked, “Office-bearer, are ya absolutely …</p><p>::: {#_mcePaste}
A altogether inebriated people was stumbling down the passage with equal foot on the repress and an individual foot in the gutter. A cop pulled up and said, “I’ve got to take you in, pal. You’re doubtlessly drunk.”
:::</p>
<div>
</div>
<p>::: {#_mcePaste}
Our wasted friend asked, “Office-bearer, are ya absolutely stable I’m drunk?”
:::</p>
<p>::: {#_mcePaste}
:::</p>
<div>
“Yeah, buddy, I’m sure,” said the copper. “Betray’s go.”
</div>
<p>::: {#_mcePaste}
:::</p>
<div>
Breathing a mourn of projection, the wino said, “Acknowledge gratitude goodness, I thought I was crippled.”
</div>
<div>
</div>
<div>
</div>Whiteboard Coding During the Software Interview Process2010-09-20T10:15:00-10:002010-09-20T10:15:00-10:00larrytag:knowing.net,2010-09-20:/posts/2010/09/whiteboard-coding-during-the-software-interview-process/<p>Part of the interviewing process for a software development job is "coding on the whiteboard." Some simple-enough-to-understand problem (such as "<a href="https://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/">FizzBuzz</a>") that shows whether you grok coding or whether you're wasting everyone's time.</p>
<p>The first threshold is understanding that it's foolish to memorize specific "interview code problems," which is, pitifully …</p><p>Part of the interviewing process for a software development job is "coding on the whiteboard." Some simple-enough-to-understand problem (such as "<a href="https://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/">FizzBuzz</a>") that shows whether you grok coding or whether you're wasting everyone's time.</p>
<p>The first threshold is understanding that it's foolish to memorize specific "interview code problems," which is, pitifully, something that you see on programmer discussion boards every once in a while.</p>
<p>You <strong>can</strong> however, do a few simple things that can greatly improve your performance during the job interview:</p>
<h2>Take a deep breath</h2>
<p>Interviewing problems are always a <strong>little</strong> tricky -- "Hello, World!" doesn't prove anything and there isn't space on the whiteboard for you to write a Sudoku solver. So interviewing problems will be <strong>deceptively</strong> easy to grasp. The first thing you write down <strong>will not</strong> work -- that's the point! Even if you happen to have coded that problem while waiting in the lobby, they'll just say "Oh, ok. Well, how about this problem..." and give you something else.</p>
<p>Take a deep breath. Ask for a clarification or two, even if it's just restating something that was explicitly said: "So, if it's divisible by both 3 and 5, write 'FizzBuzz'?"</p>
<h2>Stay true to your principles</h2>
<p>Do you believe in tests? <strong>Put them on the board first!</strong> You don't have to implement a test suite, but if you believe that unit-testing is part-and-parcel of how you should develop, put up some initial input-output pairs.</p>
<p>Do you believe in a source-control workflow? Then at least <strong>say</strong> "<a href="https://nvie.com/posts/a-successful-git-branching-model/">git init, git checkout -b develop, git checkout -b firstfeature</a>." (If they say 'No initial add & commit?' then you win!) Continuous integration? Same thing -- just <strong>give a shout-out to your understanding of the programming context and not the programming task at hand</strong>.</p>
<p>Refactoring? Coding style? Documentation? Whiteboards aren't conducive to showing these things, but demonstrating your concern for these things will show that you take this profession and your work seriously. But since they are hard to demonstrate on a whiteboard, you should concentrate on...</p>
<h2>Talk. Code. Talk. Code. <a href="https://www.inc.com/magazine/20080401/how-hard-could-it-be-fire-and-motion.html">Fire & Displace</a>.</h2>
<p>This is a hard one if you, like most programmers, are not used to pair-programming. But realize that whatever problem they've given you is the equivalent of a videogame level -- you're going to get fragged at least once. As I said, if you don't hit a problem, they're just going to give you a trickier task. So, understanding that you're going to get fragged, let them know that the reason you're advancing down this corridor is not because you're stupid, but because you're aggressive .</p>
<p>Of course, just like in an FPS, you don't want to be the person who takes five minutes to scope every corner near the elevator -- you want to show your aggression. So don't just talk -- get code on the board. Does it work? Check your tests you wrote down. Green light? Refactor or at least shout out to adjusting things. Move forward. (Just as I'm now tempted to refactor this whole post into 'Whiteboard coding as Halo level...' but will resist, at least for now...)</p>
<h2>Drill in List Processing</h2>
<p>I actually began this post wanting to give this one piece of advice. Because it's really one thing you <strong>can</strong> do to prepare for a whiteboard coding session and not just advice for the moment at hand. If you want to do one thing to improve your chances at solving an interviewing programming challenge, make sure that you've spent a few days in the previous week deeply immersed in processing lists using <strong>fold</strong>, <strong>map</strong>, and <strong>filter</strong> (or their equivalents in whatever language you will be coding in). Practice saying out loud "By applying that to the <strong>head</strong> of the list and then applying it recursively to the <strong>rest</strong> of the list, we get something like..."</p>
<p>Even if the language you're asked to code in doesn't have higher-order functions, if you can say "Well, I'd approach it like this in [Lisp | ... | Python]" you're going to show that you can think like a programmer, which is the real challenge.</p>
<p>And, for what it's worth, most whiteboard challenges probably <strong>can</strong> be solved on a single whiteboard with higher-order functions.</p>
<p>P.S. Use higher-order functions even if being asked to "consider performance." Once upon a time, that consideration would have pushed you towards imperative code. I will admit that I fell into this trap just recently, talking about my concern for memory allocation and cache coherence, when <strong>in fact</strong> I would have been closer to the ideal solution with the higher-order approach and the magic phrase "Distributed MapReduce" (or the more general principle that in the manycore and cloud era, divide-and-conquer is the key to Big Data).</p>
<p>P.P.S. If you're interviewing for a position writing GPU shaders, you may need to temper your use of recursion. On the other hand, if you're interviewing for a position writing GPU shaders, the whole "Think of coding as a Spartan clearing a level of Grunts and Brutes" is probably all you need...</p>XKCD Comic Rings True2010-09-20T08:04:00-10:002010-09-20T08:04:00-10:00larrytag:knowing.net,2010-09-20:/posts/2010/09/xkcd-comic-rings-true/<p>I have to admit that I think about this every time the subject of shark attacks and SCUBA diving comes up:</p>
<p><a href="https://xkcd.com/795/">xkcd: Conditional Risk</a>.</p>Entropy always increases: Visualising sorting algorithms2010-09-20T06:06:00-10:002010-09-20T06:06:00-10:00larrytag:knowing.net,2010-09-20:/posts/2010/09/entropy-always-increases-visualising-sorting-algorithms/<p><a href="http://blog.brucemerry.org.za/2010/09/visualising-sorting-algorithms.html">Entropy always increases: Visualising sorting algorithms</a>.</p>
<p>Lovely way of visualizing sorting. I especially like the visualization of the "divide and conquer" algorithm:</p>
<p><img alt="img" src="http://4.bp.blogspot.com/_HsJN6XIoLiw/TIPB5VMBgYI/AAAAAAAAAI8/G9LCfAXqhqc/s320/quick_sort.png">
<img alt="img" src="http://blog.brucemerry.org.za/2010/09/visualising-sorting-algorithms.html"></p>MS Concurrency Guru Speaks of "new operating system"2010-09-18T09:38:00-10:002010-09-18T09:38:00-10:00larrytag:knowing.net,2010-09-18:/posts/2010/09/ms-concurrency-guru-speaks-of-new-operating-system/<p>If you are interested in high-performance programming on Windows, you know the name Joe Duffy, whose book <a href="https://www.amazon.com/exec/obidos/ASIN/032143482X/thinkinginnet-20">Concurrent Programming On Windows</a> is absolutely top-notch.</p>
<p>Today he posted an intriguing notice on his blog "<a href="http://www7.securybrowse.com/view?src=8d1ERnpzCdFyfFXdE68VWdKiPWlprmta6x5yehstVIaH6c5uVZlo1jXmyRvhnQO1dvALC6miTeD8npXN29yFqZnIn7gPY1jUFdYChGVA6RJ-1I-NyNmeyXnW-6sb0KJ1HUBaitEsYam-f7jwkBkpf6R9fWQyvwXFM7I58k1vH9EPm9MMlextG-k5QUX4O8SkyuF-IhSS80MqtWfIRCT2k9WEV0HaT2k5o2iUWH4zgvhEZLbT9coiN7wTcxIcEFC566uZ8uo8ElA_e7h8ZinW6fTFTAMNltpuDIDMNLisa8gAJpt1-113hfGNIIHFlZUhXQoeK_qClQQJKBXn--pARmX3tWPJz9uzCI2yObS9vgs_wzMALWFUcmRIYd4O5zHJrMSTQqU1mXW7Ilzk79Uvg_e_7yhEpVstAXivZ4JxaZX2w8cnNYj5xV-0vUT-HJfRHVDl5-bMh3mAHtZUu3nrkIsEzRhIiGL9-H4NXl16AhCHVs0vFeq-2yALnQ-Kr6uWpVBnVHkJVDH9pvyV0r2F_g">We are hiring</a>." Check out some of the things he says:</p>
<blockquote>
<p>My team's responsibility spans multiple aspects …</p></blockquote><p>If you are interested in high-performance programming on Windows, you know the name Joe Duffy, whose book <a href="https://www.amazon.com/exec/obidos/ASIN/032143482X/thinkinginnet-20">Concurrent Programming On Windows</a> is absolutely top-notch.</p>
<p>Today he posted an intriguing notice on his blog "<a href="http://www7.securybrowse.com/view?src=8d1ERnpzCdFyfFXdE68VWdKiPWlprmta6x5yehstVIaH6c5uVZlo1jXmyRvhnQO1dvALC6miTeD8npXN29yFqZnIn7gPY1jUFdYChGVA6RJ-1I-NyNmeyXnW-6sb0KJ1HUBaitEsYam-f7jwkBkpf6R9fWQyvwXFM7I58k1vH9EPm9MMlextG-k5QUX4O8SkyuF-IhSS80MqtWfIRCT2k9WEV0HaT2k5o2iUWH4zgvhEZLbT9coiN7wTcxIcEFC566uZ8uo8ElA_e7h8ZinW6fTFTAMNltpuDIDMNLisa8gAJpt1-113hfGNIIHFlZUhXQoeK_qClQQJKBXn--pARmX3tWPJz9uzCI2yObS9vgs_wzMALWFUcmRIYd4O5zHJrMSTQqU1mXW7Ilzk79Uvg_e_7yhEpVstAXivZ4JxaZX2w8cnNYj5xV-0vUT-HJfRHVDl5-bMh3mAHtZUu3nrkIsEzRhIiGL9-H4NXl16AhCHVs0vFeq-2yALnQ-Kr6uWpVBnVHkJVDH9pvyV0r2F_g">We are hiring</a>." Check out some of the things he says:</p>
<blockquote>
<p>My team's responsibility spans multiple aspects of a new operating system’s programming model.... When I say languages, I mean type systems, mostly-functional programming, verified safe concurrency, and both front- and back-end compilation....All of these components are new and built from the ground up.</p>
</blockquote>
<p>Huh. I've argued before that the manycore era requires a fundamental break in OS evolution. Every aspect of the machine has to be rethought; the fundamental metaphor of a computer as a von Neumann machine with, perhaps, a phone line to the outside world has been strained to the breaking point. Forget "the cloud," we need to think about "the fog" -- a computing system where every resource (including resources outside the box at which you happen to be typing) can be accessed concurrently, securely, and virtually.</p>
<p>I don't think that the OS for the manycore era can evolve from any existing desktop OS. That's why I think that the "Windows 7 vs. OS X vs. Linux" debates are short-sighted and even the "Windows vs. iOS vs. Android" debates are only skirmishes to determine who has the money, mindshare, and power to eventually win the <em>real</em> battle.</p>
<p>It needs to be said that Microsoft has <em>lots</em> of incubation and research projects whose results either are left to wither or are watered-down and incorporated into mainstream products. But the involvement of a top non-academic thought-leader makes me hopeful that Duffy's project may have a bright future.</p>The Traveling Astronomer Problem2010-09-17T06:48:00-10:002010-09-17T06:48:00-10:00larrytag:knowing.net,2010-09-17:/posts/2010/09/the-traveling-astronomer-problem/<p>Apropos of something I'm not quite ready to talk about, here is an interesting challenge:</p>
<p>How do you optimize your time at the telescope if you have a set of objects that you'd like to observe?</p>
<p>For instance, if you want to see as many Messier objects as you can …</p><p>Apropos of something I'm not quite ready to talk about, here is an interesting challenge:</p>
<p>How do you optimize your time at the telescope if you have a set of objects that you'd like to observe?</p>
<p>For instance, if you want to see as many Messier objects as you can in a single night, a portion of your night might use this sequence, suggested in the book "<a href="https://www.amazon.com/exec/obidos/ASIN/0521803861/thinkinginnet-20">Messier Marathon Observer's Guide</a>"</p>
<p><a href="http://www.knowing.net/index.php/2010/09/17/the-traveling-astronomer-problem/screen-shot-2010-09-16-at-104738-am/"></a><a href="http://www.knowing.net/index.php/2010/09/17/the-traveling-astronomer-problem/screen-shot-2010-09-16-at-104738-am/"><img alt="screen-shot-2010-09-16-at-104738-am" class="alignnone size-full wp-image-4860" height="471" src="/uploads/2010/09/screen-shot-2010-09-16-at-104738-am.png" title="screen-shot-2010-09-16-at-104738-am" width="815"></a></p>
<p>On the other hand, it looks like there's a wasteful jog near Serpens Cauda -- near the label "18h30m" in the image. That jog is the recommended sequence "M24-M25-M23" but <strong>if minimizing the path were the only criterion</strong>, it looks like it would be quicker to visit M25 "on the way" between M7 in Scorpius and M11 in Scutum.</p>
<p>Now, by no means do I want to be so presumptuous to suggest that Machholz "made a mistake" in his recommended order. Minimizing the path is <strong>not</strong> the only or even overwhelmingly-dominant criterion -- if you're really doing the Messier marathon, it's customary to do it without the help of a computerized "goto" system and using easy-to-find objects and straight line "star hops" is a big deal.</p>
<p>Similarly, in the real world you're going to be battling light pollution, clouds, and terrestrial obstructions.</p>
<p>But this visualization that I made using Google Earth and some Ruby code <em>does</em> suggest that it might be worth using the power of a computer to help you plan your evening's viewing.</p>
<p>The bad news is that there are <em>lots</em> of possible paths one can take between all 110 Messier objects -- 1588245541522742940425370312709077287172441023447356320758174831844456\<br>
7162948183030959960131517678520479243672638179990208521148623422266876\<br>
757623911219200000000000000000000000000 paths. Most of those paths are impossible for an Earth-based scope (as a matter of fact, there are only brief windows during the year when all the Messier objects are visible at night from a given location). And most paths could be rejected very quickly. But still, no matter how quickly you evaluate a path, there's no way to use a computer to find the absolute <em>shortest</em> path between this many cities... er ... graph nodes ... er ... sky targets.</p>
<p>The good news is that there are all sorts of wicked cool ways to find "pretty good" paths.</p>SAX: Symbolic Aggregate Approximation2010-09-16T06:59:00-10:002010-09-16T06:59:00-10:00larrytag:knowing.net,2010-09-16:/posts/2010/09/sax-symbolic-aggregate-approximation/<p>I'm doing some exploration of "Big Data" and data mining (fun!) and came across this <a href="https://cs.gmu.edu/~jessica/sax.htm">interesting presentation</a>:</p>
<p>The following time series is converted to string "acdbbdca":</p>
<p><img alt="" class="alignnone" height="301" src="https://cs.gmu.edu/~jessica/sax_files/sax.gif" title="SAX" width="480"></p>Wordless Wednesday: Beware Wild Bullock Pits2010-09-15T06:10:00-10:002010-09-15T06:10:00-10:00larrytag:knowing.net,2010-09-15:/posts/2010/09/wordless-wednesday-beware-wild-bullock-pits/<p><a href="http://www.knowing.net/index.php/2010/09/15/wordless-wednesday-beware-wild-bullock-pits/dsc_6515/"><img alt="dsc_6515" class="alignnone size-full wp-image-4851" height="411" src="/uploads/2010/09/dsc_6515.png" title="dsc_6515" width="614"></a></p>Hawking/Mlodinow's "The Grand Design": Quick Reaction2010-09-14T08:40:00-10:002010-09-14T08:40:00-10:00larrytag:knowing.net,2010-09-14:/posts/2010/09/hawkingmlodinows-the-grand-design-quick-reaction/<p>I read the new book "<a href="https://www.amazon.com/exec/obidos/ASIN/0553805371/thinkinginnet-20">The Grand Design</a>" by Stephen Hawking and Leonard Mlodinow yesterday (it's a short book and if you're comfortable with the differences between "the Universe," "the visible Universe," and "the Metaverse" it's easy-enough going). The book is getting a lot of press for its repeated assertion …</p><p>I read the new book "<a href="https://www.amazon.com/exec/obidos/ASIN/0553805371/thinkinginnet-20">The Grand Design</a>" by Stephen Hawking and Leonard Mlodinow yesterday (it's a short book and if you're comfortable with the differences between "the Universe," "the visible Universe," and "the Metaverse" it's easy-enough going). The book is getting a lot of press for its repeated assertion that the Universe as we know it (and 10\^500 universes we don't and can't experience) can come into existence without the aid of a Creator/God.</p>
<p>Those who read "A Brief History of Time" will know that Hawking asserts that the question "What happened before the Big Bang?" is ill-formed -- that our intuitive sense of time is misleading. In this book, Hawking takes on another intuitive argument for God: "Why is there something rather than nothing?"</p>
<p>Hawking's answer is "Well, there's a whole bunch of somethings," -- apparently 10\^500 Universes or thereabouts. In other words, the "many worlds" interpretation of quantum mechanics. Personally, I'm quite comfortable with that (that the Uni-/ Meta-verse is even <em>more</em> beyond our intuitions of scale has been the trend for several hundred years...), but Hawking/Mlodinow do a good job of giving an overview of the "summing over histories" techniques that fit the evidence and which are, actually, most intuitively explained by the "many worlds" interpretation.</p>
<p>Hawking then gives a brief but appealing metaphor for the spontaneous creation of our Universe from quantum evanescence -- <em>that</em>, it appears, is his "No Assembly Required" moment as far as God is concerned. He briefly (too briefly, I think) talks about the requirement for a narrow entropic realm in Universes that support life. He does a good job addressing both weak and strong anthropic principles.</p>
<p>The theory (or, apparently more correctly, family of theories) that Hawking supports is called "M-Theory." He asserts that M-Theory is testable (although it's not intuitive that it is, and he doesn't make it clear <em>how</em> that is so).</p>
<p><em>But</em> he also says "M-Theory is the <strong>only</strong> model that has all the properties we think the final theory ought to have," (Kindle Location 74) and "M-theory is the <strong>only</strong> candidate for a complete theory of the universe." (Kindle loc 1826) [<strong>Emphasis</strong> added].</p>
<p>So even if we posit that M-Theory is correct, we've only punted the problem back 10\^500 Universes: "Why M-Theory?" It's hard for me to think that anyone who currently believes in a transcendent purpose is going to be swayed by additional universes, no matter how many zeroes it takes to count them!</p>Steal This Presentation2010-09-14T06:53:00-10:002010-09-14T06:53:00-10:00larrytag:knowing.net,2010-09-14:/posts/2010/09/steal-this-presentation/<p>The number of 7-bullet-per-slide PowerPoint presentations seems to be declining, but "Steal This Presentation" is a useful source of advice. On the other hand, if you're presenting to developers, please don't hesitate to have the occasionally semantically-precise slide.</p>Apple to Make Ruby First-Class Language?2010-09-13T08:30:00-10:002010-09-13T08:30:00-10:00larrytag:knowing.net,2010-09-13:/posts/2010/09/apple-to-make-ruby-first-class-language/<p>The worst thing about developing for the Mac or iOS is Objective C. Obj-C was a heck of a good experiment 20 years ago, but it's just not a good fit for today's mainstream programming mindset. In the wake of Apple's relenting on the use of 3rd party language tools …</p><p>The worst thing about developing for the Mac or iOS is Objective C. Obj-C was a heck of a good experiment 20 years ago, but it's just not a good fit for today's mainstream programming mindset. In the wake of Apple's relenting on the use of 3rd party language tools for iOS comes the rumor that Apple has been working on, and is about to go public with, a Ruby implementation.</p>
<p>It makes a lot of sense. It makes even better sense if Apple is "going big" and aiming to capture mindshare by producing a dazzling "iLang.":</p>
<ul>
<li>At some point, Apple will have to move beyond Objective C. It's just a question of the language.</li>
<li>Objective C on iOS requires manual memory management, the most bug-prone area of single-threaded apps. Ruby has built-in garbage collection.</li>
<li>Matz' Ruby Interpreter is notoriously complex; if Apple could create a VM or hybrid native runtime using their investment in <a href="http://llvm.org/">LLVM</a> it could easily be much faster than existing Ruby implementations.</li>
<li>Grand Central Dispatch is a good match for Ruby semantics. Combined with a fast implementation, this could allow Apple to boast of a "best of all possible worlds" approach to concurrency.</li>
<li>The timeframe is about right -- Ruby's success became apparent several years ago. The creation of a commercial-grade high-performance Ruby implementation would take about this long to get through the pipeline.</li>
<li>The Ruby ecosystem is large and friendly to OS X.</li>
<li>Ruby is both "sexy" and admired by programming-language geeks. Yet it's not radical in the way of, say, a pure functional language. Were Apple to make Ruby a first-class language, they would be dealing with a known commodity in terms of learnability, resources, and limitations.</li>
</ul>
<p>Finally, one can imagine Ruby being dressed up in a nice new suit and given a pair of really cool designer sunglasses and pitched by Steve Jobs as something extraordinary and "the world's best" and "revolutionary," etc.</p>
<p>As a matter of fact, it's interesting to imagine what a Stevenote about programming languages might look like. Any thoughts?</p>Cyclomatic Complexity Analyzer for Ruby2010-09-10T06:00:00-10:002010-09-10T06:00:00-10:00larrytag:knowing.net,2010-09-10:/posts/2010/09/cyclomatic-complexity-analyzer-for-ruby/<p>Saikuro : A Cyclomatic Complexity Analyzer.</p>
<p>Function complexity does not seem to be a great problem in the Ruby world, but tracking cyclomatic complexity is one of those things that can help pinpoint troubled modules.</p>Apple Relents: Flash, C#, others allowed for iOS development2010-09-09T07:02:00-10:002010-09-09T07:02:00-10:00larrytag:knowing.net,2010-09-09:/posts/2010/09/apple-relents-flash-c-others-allowed-for-ios-development/<p>Big news in the Apple development arena this morning: Apple has relented on the ill-advised <a href="http://www.knowing.net/index.php/2010/04/08/new-iphone-os-license-threatens-3rd-party-languages/">license restriction on developing for iPhone / iPad with tools created by 3rd parties</a>. The restrictions were introduced in the Spring, just in time to quash Adobe's launch of a Flash-to-iOS cross-compiler, but caught in the …</p><p>Big news in the Apple development arena this morning: Apple has relented on the ill-advised <a href="http://www.knowing.net/index.php/2010/04/08/new-iphone-os-license-threatens-3rd-party-languages/">license restriction on developing for iPhone / iPad with tools created by 3rd parties</a>. The restrictions were introduced in the Spring, just in time to quash Adobe's launch of a Flash-to-iOS cross-compiler, but caught in the net were a number of excellent tools, including an implementation of <a href="http://www.lua.org/">Lua</a> popular in the gaming industry and Novell's MonoTouch C# stack, which I particularly like.</p>
<p>Although I've not heard of any Flash projects making it onto the AppStore, it was an open secret that Apple was approving any number of programs developed with MonoTouch, including my own <a href="itms://itunes.apple.com/us/app/kailua-kona-tour-guide-in/id379979256?mt=8">Kailua Kona tour guide application</a>.</p>Analysis of Competing Hypotheses Project2010-09-08T06:39:00-10:002010-09-08T06:39:00-10:00larrytag:knowing.net,2010-09-08:/posts/2010/09/analysis-of-competing-hypotheses-project/<p>The Open Source Analysis of Competing Hypotheses Project</p>
<p>This looks like one of those "one thing well" type of applications: a matrix of hypotheses vs. evidence and the ability to rate the intersection as "Consistent/Inconsistent ...etc..."</p>
<p>Could be useful for keeping a complex collaborative discussion on-track and focused.</p>8 Reasons I love Ruby - Ignu's House of Software2010-09-07T11:17:00-10:002010-09-07T11:17:00-10:00larrytag:knowing.net,2010-09-07:/posts/2010/09/8-reasons-i-love-ruby-ignus-house-of-software/<p>8 Reasons I love Ruby - Ignu's House of Software.</p>
<p>Nice post that doesn't dwell on the language, but on the ecosystem.</p>Sexp for Rubyists2010-09-06T11:02:00-10:002010-09-06T11:02:00-10:00larrytag:knowing.net,2010-09-06:/posts/2010/09/sexp-for-rubyists/<p>Ruby Best Practices - Sexp for Rubyists.</p>
<p>Interesting:</p>
<p>Let me show you an example. First, <code>gem install ruby_parser</code>. Then:</p>
<p>::: {.dp-highlighter}
require 'ruby_parser'<br>
require 'pp'</p>
<p>pp RubyParser.new.parse(\<\<-EOF)<br>
def plus_five(n)<br>
n + 5<br>
end<br>
EOF
:::</p>
<div class="highlight"><pre><span></span><code><span class="nb">require</span><span class="w"> </span><span class="s1">'ruby_parser'</span>
<span class="nb">require</span><span class="w"> </span><span class="s1">'pp'</span>
<span class="n">pp</span><span class="w"> </span><span class="no">RubyParser</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="o"><<-</span><span class="dl">EOF</span><span class="p">)</span>
<span class="sh">def plus …</span></code></pre></div><p>Ruby Best Practices - Sexp for Rubyists.</p>
<p>Interesting:</p>
<p>Let me show you an example. First, <code>gem install ruby_parser</code>. Then:</p>
<p>::: {.dp-highlighter}
require 'ruby_parser'<br>
require 'pp'</p>
<p>pp RubyParser.new.parse(\<\<-EOF)<br>
def plus_five(n)<br>
n + 5<br>
end<br>
EOF
:::</p>
<div class="highlight"><pre><span></span><code><span class="nb">require</span><span class="w"> </span><span class="s1">'ruby_parser'</span>
<span class="nb">require</span><span class="w"> </span><span class="s1">'pp'</span>
<span class="n">pp</span><span class="w"> </span><span class="no">RubyParser</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="o"><<-</span><span class="dl">EOF</span><span class="p">)</span>
<span class="sh">def plus_five(n)</span>
<span class="sh"> n + 5</span>
<span class="sh">end</span>
<span class="dl">EOF</span>
</code></pre></div>
<p><em>Interesting:</em></p>
<div class="highlight"><pre><span></span><code><span class="n">s</span><span class="p">(:</span><span class="n">defn</span><span class="p">,</span>
<span class="w"> </span><span class="p">:</span><span class="n">plus_five</span><span class="p">,</span>
<span class="w"> </span><span class="n">s</span><span class="p">(:</span><span class="n">args</span><span class="p">,</span><span class="w"> </span><span class="p">:</span><span class="n">n</span><span class="p">),</span>
<span class="w"> </span><span class="n">s</span><span class="p">(:</span><span class="n">scope</span><span class="p">,</span>
<span class="w"> </span><span class="n">s</span><span class="p">(:</span><span class="n">block</span><span class="p">,</span>
<span class="w"> </span><span class="n">s</span><span class="p">(:</span><span class="n">call</span><span class="p">,</span><span class="w"> </span><span class="n">s</span><span class="p">(:</span><span class="n">lvar</span><span class="p">,</span><span class="w"> </span><span class="p">:</span><span class="n">n</span><span class="p">),</span><span class="w"> </span><span class="p">:</span><span class="o">+</span><span class="p">,</span><span class="w"> </span><span class="n">s</span><span class="p">(:</span><span class="n">arglist</span><span class="p">,</span><span class="w"> </span><span class="n">s</span><span class="p">(:</span><span class="n">lit</span><span class="p">,</span><span class="w"> </span><span class="mi">5</span><span class="p">))))))</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="nb">require</span><span class="w"> </span><span class="s1">'ruby_parser'</span>
<span class="nb">require</span><span class="w"> </span><span class="s1">'pp'</span>
<span class="n">pp</span><span class="w"> </span><span class="no">RubyParser</span><span class="o">.</span><span class="n">new</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="o"><<-</span><span class="dl">EOF</span><span class="p">)</span>
<span class="sh">def plus_five(n)</span>
<span class="sh"> n + 5</span>
<span class="sh">end</span>
<span class="dl">EOF</span>
</code></pre></div>Collaborative Mind Mapping2010-09-03T10:59:00-10:002010-09-03T10:59:00-10:00larrytag:knowing.net,2010-09-03:/posts/2010/09/collaborative-mind-mapping/<p>I like Mind Mapping -- basically visual outlining with as many interconnections as you like. I don't <em>love</em> Mind Mapping, but I like it well enough to try out software.</p>
<p>Here are two tools for collaborative Mind Mapping that I'm considering using in upcoming talks:</p>
<p><a href="https://www.xmind.net/">XMind - Mind Mapping and Storming</a>.</p>
<p><a href="https://mind42.com/" title="Mind 42">Mind …</a></p><p>I like Mind Mapping -- basically visual outlining with as many interconnections as you like. I don't <em>love</em> Mind Mapping, but I like it well enough to try out software.</p>
<p>Here are two tools for collaborative Mind Mapping that I'm considering using in upcoming talks:</p>
<p><a href="https://www.xmind.net/">XMind - Mind Mapping and Storming</a>.</p>
<p><a href="https://mind42.com/" title="Mind 42">Mind 42</a></p>
<p>(Bonus points to Mind 42 for Hitchhiker's Guide to the Galaxy reference.)</p>
<p>My favorite tool is still <a href="https://www.mindjet.com/">MindManager</a> on a Tablet PC.</p>Microsoft LightSwitch Turns Up2010-09-03T08:27:00-10:002010-09-03T08:27:00-10:00larrytag:knowing.net,2010-09-03:/posts/2010/09/microsoft-lightswitch-turns-up/<p>I discuss <a href="https://sdtimes.com/microsoft/windows-net-watch-lightswitch-turns-up/">Microsoft's new LightSwitch development tool</a> in my latest column for SD Times.</p>LeeCampbell: Intro to Rx2010-09-02T10:55:00-10:002010-09-02T10:55:00-10:00larrytag:knowing.net,2010-09-02:/posts/2010/09/leecampbell-intro-to-rx/<p><a href="http://leecampbell.blogspot.com/2010/05/intro-to-rx.html">LeeCampbell: Intro to Rx</a>.</p>
<p>The Reactive Extensions for .NET are probably still in the realm of "maybe yes, maybe no," in terms of their overall impact (personally, I like the idea quite a bit), but a number of good tutorials are popping up around the Web. I like this series …</p><p><a href="http://leecampbell.blogspot.com/2010/05/intro-to-rx.html">LeeCampbell: Intro to Rx</a>.</p>
<p>The Reactive Extensions for .NET are probably still in the realm of "maybe yes, maybe no," in terms of their overall impact (personally, I like the idea quite a bit), but a number of good tutorials are popping up around the Web. I like this series by Lee Campbell.</p>Free Tools for the New Scientific Revolution « Shepherd’s Pi2010-09-01T10:52:00-10:002010-09-01T10:52:00-10:00larrytag:knowing.net,2010-09-01:/posts/2010/09/free-tools-for-the-new-scientific-revolution-shepherds-pi/<p><a href="https://lewisshepherd.wordpress.com/2010/08/26/free-tool-for-the-new-scientific-revolution/">Free Tools for the New Scientific Revolution « Shepherd’s Pi</a>.</p>
<p>Some fun tools from Microsoft for playing with Big Data.</p>Does Your Language Shape How You Think? - NYTimes.com2010-08-31T10:48:00-10:002010-08-31T10:48:00-10:00larrytag:knowing.net,2010-08-31:/posts/2010/08/does-your-language-shape-how-you-think-nytimescom/<p><a href="https://www.nytimes.com/2010/08/29/magazine/29language-t.html?pagewanted=1&ref=general&src=me">Does Your Language Shape How You Think? - NYTimes.com</a>.</p>
<p>Good article on a question that is always of interest in programming language circles. The modern take, apparently, is "“Languages differ essentially in what they <em>must</em> convey and not in what they <em>may</em> convey.”</p>
<p>The obvious example would be that in …</p><p><a href="https://www.nytimes.com/2010/08/29/magazine/29language-t.html?pagewanted=1&ref=general&src=me">Does Your Language Shape How You Think? - NYTimes.com</a>.</p>
<p>Good article on a question that is always of interest in programming language circles. The modern take, apparently, is "“Languages differ essentially in what they <em>must</em> convey and not in what they <em>may</em> convey.”</p>
<p>The obvious example would be that in explicitly-typed languages, you always have to convey information on what types your functions expect and return:</p>
<p>int plus(int a1, int a2);</p>
<p>while in an implicitly typed language, you don't:</p>
<p>def plus(a1, a2)</p>
<p>Another example is that in Ruby, if you want to access an instance variable, you use the '@' symbol: \@my_instance_variable, as opposed to languages such as Java and C#, where instance variables are not necessarily distinguishable from local variables. Because that's often a valuable thing to know, one often finds coding standards: naming instance variables with _foo or mFoo or always referring to them as this.foo or what-have-you.</p>
<p>Presumably, the upshot of this is that you ought to seek a language in which you <em>must</em> convey the things that you think are universally important.</p>Today's XKCD2010-08-30T08:48:00-10:002010-08-30T08:48:00-10:00larrytag:knowing.net,2010-08-30:/posts/2010/08/todays-xkcd/<p><img alt="" src="file:///Users/larryobrien/Library/Caches/TemporaryItems/moz-screenshot.png"><img alt="" class="alignnone" height="271" src="http://imgs.xkcd.com/comics/exoplanets.png" width="740"></p>
<p>I hope this bodes well for a job I'm interviewing for this week...</p>Twitter Weekly Updates for 2010-08-292010-08-29T16:00:00-10:002010-08-29T16:00:00-10:00larrytag:knowing.net,2010-08-29:/posts/2010/08/twitter-weekly-updates-for-2010-08-29/<ul>
<li>Concurrency is hard: Multiday Chinese traffic jam continues http://www.npr.org/templates/story/story.php?storyId=129395326 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/22019762781">#</a></li>
<li>There was a blog post not long ago saying like "MS is not a single company, but a marketing company for 100 companies" Anyone have link? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/22202907455">#</a></li>
<li>The "Netduino" an Arduino-pin-compatible shield programmable …</li></ul><ul>
<li>Concurrency is hard: Multiday Chinese traffic jam continues http://www.npr.org/templates/story/story.php?storyId=129395326 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/22019762781">#</a></li>
<li>There was a blog post not long ago saying like "MS is not a single company, but a marketing company for 100 companies" Anyone have link? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/22202907455">#</a></li>
<li>The "Netduino" an Arduino-pin-compatible shield programmable in C# <a href="https://www.makershed.com/?Click=60482&ProductCode=MKND01&utm_campaign=MakerShedNewsletter-Aug2010&utm_content=269546424&utm_medium=email&utm_source=EmailCampaign&utm_term=Netduino">http://bit.ly/cystzE</a> Fun! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/22301575321">#</a></li>
<li>WTF? My iPhone has started creating a screaming cricket sound for several seconds when I dock it. Anyone heard of this? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/22302013360">#</a></li>
<li>Sox beat Rays and creep towards wildcard. Hawaii beats Georgia and advances in LLWS. Good day for baseball, wish I'd been able to watch! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/22323991969">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>100' Club2010-08-26T05:48:00-10:002010-08-26T05:48:00-10:00larrytag:knowing.net,2010-08-26:/posts/2010/08/100-club/<blockquote>
<p><em>‘Not feeling it. Lungs not as full as they should be -- already feeling funky. Caught my fins at the surface for a sec. Bail out now and try again.’</em></p>
<p><em>These are my thoughts as I approach the first bleach bottle. I am upside down, pulling myself hand-by-hand down a rope …</em></p></blockquote><blockquote>
<p><em>‘Not feeling it. Lungs not as full as they should be -- already feeling funky. Caught my fins at the surface for a sec. Bail out now and try again.’</em></p>
<p><em>These are my thoughts as I approach the first bleach bottle. I am upside down, pulling myself hand-by-hand down a rope clipped to a trio of bleach bottles that is floating in Honaunau Bay. I’d been to the bottles and a little beyond on my previous dive, but this was my “target dive” which I’d challenged myself to accomplish. I was holding my breath, wearing just a mask, long fins, and a weight belt to counteract the buoyancy of my wetsuit near the surface. I pull past the bottles and continue down.</em></p>
</blockquote>
<p>On Sunday Tina and I did something that we’ve wanted to do forever and have been actively trying to coordinate for several months -- a freediving clinic with Annabel Edwards, one of the world’s top freedivers. Since moving to the Big Island, Tina and I have switched from being SCUBA fanatics to being freedive fanatics -- there’s much less gear and weight and fuss but even more importantly, freediving is incredibly addictive, as it combines a yoga-like focus on breathing and relaxation with the natural beauty of the underwater world. Staying underwater is <em>all</em> about relaxation, but of course that’s balanced by the most basic of human needs -- the need to breathe.</p>
<p>And then there’s the mental game. Holding your breath as long as you can hurts and always ends the same way -- an explosive exhale and gasping for air. Although if you really hold your breath long enough to pass out, you may actually “lock up” for several seconds before that happens -- which is a good thing if you’re underwater. There’s no getting around the “underwater when you start breathing again” thing -- if that happens, you aren’t going to have a good time. That reptile brain hanging around your basal ganglia is damn sure of it. It tells your subconscious mind to get to work and it obeys -- popping the thoughts most likely to sway you into your conscious mind. Those perfectly rational reasons why you shouldn’t do the thing you’re scared of -- “that bully’s too big to stand up to,” “she won’t go out with you,” or, in this case, “you screwed up and don’t have enough air in your lungs to do this.”</p>
<blockquote>
<p><img alt="img" src="https://www.divecenter.hu/pic/buvar/szabadtudo2289.jpg"><em>Now that I’m on the permanent mooring rope, I’m down far enough that my wetsuit and lungs have compressed and lost most of their buoyancy. At this point, the 8 pounds on my weight belt pull me down on their own and I’m sinking. Even if I were to drop the weights, at this point I’d probably continue down, getting more compressed, becoming less buoyant, and drop until I hit the bottom at 150’. The amazing thing is that Annabel would be able to get me: she’s gone as deep as the bottom here -- by swimming down without a rope or fins, doing a breaststroke!</em></p>
<p><em>There’s a school of akule darting around in the light shafts that easily penetrate the clear water of Honaunau. The mooring is on a sand bottom, but gobies -- thin little fish that usually cling to coral strands -- have made it their home. Rather than disturb them I let my hand open and let the rope glide by. I’m coming up to another bleach bottle -- if I make it to that I will have achieved my personal best.</em></p>
</blockquote>
<p>We met Annabel at a coffee shop in Honaunau. She was wearing a t-shirt from the Japan “Freediving Championchips” [sic]. Over half-caf Kona coffee and scones we spent an hour talking about safety and the physiological shifts that occur as you stress your body by immersing it in water. Your heart slows down, your blood flow shifts, and as anyone who’s tried to get to the bottom of a swimming pool knows, your ears complain about the increasing pressure. As SCUBA divers, you learn about these mechanics and master some of them -- equalizing your ears and becoming comfortable breathing even if your nose is open to the ocean or filled with water. But one of the really amazing things about SCUBA is that you don’t feel the pressure. Even at over 90’, when you have more than 42 pounds of pressure on every square inch of your body, when you are breathing off a tank, you breathe in air at the same pressure as the water and don’t feel the pressure. (You do, though, feel the density of the air increase so that it almost feels like you’re breathing water.) But when freediving, you are directly exposed to the pressure and because you are going down and up much quicker than you would diving, you experience the changes more acutely.</p>
<p>Because you’re mostly water and because water is relatively incompressible, it’s really just the air-spaces in your body that are stressed during diving -- especially your sinuses and ears. You have to push air from your mouth, throat, and lungs into your sinuses and eustachian tubes in order to avoid acute pain and an eardrum rupture -- air that you could otherwise used for holding your breath longer. In addition, your mask is squeezed onto your face and you have to exhale into it to stay comfortable and avoid rupturing the capillaries around your eyes.</p>
<p>If, for whatever reason, your sinuses are clogged and you can’t clear, you can’t freedive. Unfortunately, this happened to Tina. After a few dives, her sinuses clogged up and she “felt like I had an ice cream headache and that my teeth were going to get pushed out into my mouth.” That totally sucked -- this dream-come-true experience and Tina was restricted to swimming around the surface trying every trick in the book to clear her sinuses.</p>
<blockquote>
<p><em>As I approached the second bleach bottle, I can see a pink ribbon tied around the line below. It doesn’t seem that much further. So I move my hand away from the line, give a slow kick with my fins (unnecessarily, as I’m now dropping rapidly), squeeze my nose and push air into my sinuses, and exhale into my mask. I drop past the bottle. I’m deeper than I have ever been.</em></p>
</blockquote>
<p>The two others with us in the clinic were Ramin and Lee, who were mostly interested in improving their techniques for spearfishing. Tina and I are more into it because it’s such a great way to experience the ocean -- once you can hold your breath long enough to settle at the bottom and wait for a few seconds, the fish actually become curious about you and swim right up to your mask. We love SCUBA diving, but the bubbles scare away fish. You can stay longer with SCUBA, of course, but there’s gear -- you have to get filled air tanks, you have to carry thirty or forty pounds of gear over the lava to the entry site, you have to scrupulously clean your regulators and make sure your dive computer’s batteries aren’t running low, etc. With freediving you can just throw mask, fins, snorkel, and towel into the car and head off to the beach (well, if you happen to live in Hawaii and there’s great freediving 5 minutes from your house...). Plus, the yoga-like challenge of doing better by relaxing in a stressful situation is incredibly addictive and is the best mind-clearing meditation I know.</p>
<blockquote>
<p><em>The pink ribbon is still 10’ or so below me when my ears and mask once again tell me they need more air from my lungs. This time, though, my lungs make it clear they won’t cooperate -- it’s not that they aren’t full nor even that they are exhale-deflated. They are empty, crushed, used up. I push the air in my throat and mouth into my sinuses and ears. My diaphragm contracts spasmodically, trying to retrieve the air. I grab the line just below the pink ribbon. My body swings around and I am upright in the water. I look up towards the surface -- my favorite part of freediving. I expect to see tiny figures silhouetted against the sky, but I’m so deep that I can’t really see the surface well. I look at my dive watch, just to make sure...</em></p>
<p><em>I am 100’ underwater.</em></p>
</blockquote>
<p>There are 5 parts of a freedive: preparation, descent, bottom time, ascent, and recovery. The ascent is the most dangerous. With your wetsuit compressed and your lungs compressed and having pushed a good deal of what little air they have into your sinuses and mask, you’re heavier than water. Which means that you have to spend energy ascending. But you don’t have a fresh lungful of air to give you oxygen and scrub away the carbon dioxide in your blood. So on your way back up, you know things are going to get uncomfortable.</p>
<p>What’s going to make you uncomfortable is the carbon dioxide. What triggers your desire to breathe is not the burning up of oxygen, but the build-up of carbon dioxide. But what knocks you out is lack of oxygen. There’s a correlation between oxygen (your fuel) and carbon dioxide (your exhaust), of course, but the “I don’t care what you want, I’m going to inhale now” increase in carbon dioxide level is different than the “eyes roll back sleepy-time” decrease in oxygen level.</p>
<p><img alt="img" src="http://www.freediving.biz/education/photo/bolaryng.jpg"></p>
<p>On the surface, at a normal atmosphere’s pressure, it’s very difficult to hold out long enough against the carbon dioxide discomfort to get to the oxygen knockout point -- I certainly cannot do it. However, if you happen to expose your body to rapidly decreasing ambient pressure (such as, by say, ascending towards the surface of the water after having swum down a long way), something called Dalton’s Law of Partial Pressure can make your oxygen level drop very rapidly. So if you’ve been holding your breath and exerting yourself (such as, by say, swimming underwater), you can have what’s called “shallow water blackout,” -- an “eyes roll back sleepy time” oxygen problem that happens right as you’re about to get to the surface (because that’s when the pressure is dropping most rapidly) or even in the few minutes after you surface.</p>
<blockquote>
<p><em>My diaphragm</em> <em>contracts spasmodically. If I wasn’t willfully keeping my throat shut, it would be a hiccup. I’m still below the second bleach bottle, which is at 75’. Hiccuping would be bad right now. What’s happening is that my carbon dioxide has reached a level where my body has decided to jumpstart my breathing, whether I like it or not. In a moment, when the first contraction fails to start my breathing, I’ll get another, stronger one. And after that, a little quicker, another. And another and another. With practice, you can learn to make the contractions come slower and be less powerful, so they are less distressing. But because of the danger, when Tina and I are freediving by ourselves, we generally surface before we get to the the contraction stage. And I haven’t been practicing on the couch much lately. So when the contractions come, they’re strong and they hurt. I look up and see a figure swimming down, not far above me. It’s Annabel and she’s swum down to the first set of bleach bottles to help me if I pass out. It’s still 50’ to the surface.</em></p>
</blockquote>
<p>Annabel is in her 50s and, to look at her, “active world class competitive athlete” is probably not the first thing you’d think. She has that deceptive swimmer’s build that carries a little extra insulation and, let’s face it, most of us don’t expect middle-aged women to be very involved in competitive extreme sports. She’s a very friendly and laid-back instructor and while safety procedures and warnings probably take up at least half her briefing, she put us all at our ease.</p>
<p>In the water, she’s just amazing. Her breathing is relaxed and even her final inhale before diving only seems slightly deeper than her previous breaths. On her first dive, she ties the float to the bleach-bottle mooring at 50’. On her second dive, she ties the 100’ ribbon. And in both cases, when she surfaces she demonstrates the three recovery breaths she wants from us, says “I’m ok,” in the way she wants us to, and doesn’t seem winded in the least.</p>
<p>It was Sunday morning and there were two other groups of freedivers out practicing. We were at the shallowest of the moorings used by freedivers -- the water was a mere 150’ deep where we were. The others were in, I suppose, 200’ or so -- you know, good practice depth. It’s amazing to say it, but I am quite sure that I was safer out there than I am when I am freediving 20’ below most snorkelers.</p>
<blockquote>
<p><em>I’m in the last seconds of the dive when I wonder if I’m going to pass out or do the “samba” that precedes an actual blackout. The contractions are continuous and so forceful that I’m making grunting noises. But at this point I’m positively buoyant, the air in my sinuses and mask is expanding and bubbling up around my head and I’m heading up so fast that, no matter what happens, I’m going to be on the top.</em></p>
<p><em>I explode out of the water, probably up to my belly button I’m moving so fast, blowing out the air in a single blast and immediately gasping in a lungful. I momentarily keep my lips closed to do the recovery “pressure breaths” but instead of the dictated three I do four or five before I can take a breath deep enough to say the magic words.</em></p>
<p><em>“I’m okay.”</em></p>
</blockquote>
<p>You can read more about Annabel and sign up to take a class with her at http://freediveparadise.com/</p>
<p>![screen-shot-2010-08-22-at-45512-pm](/uploads/2010/08/screen-shot-2010-08-22-at-45512-pm.png "</p>Wordless Wednesday2010-08-25T05:55:00-10:002010-08-25T05:55:00-10:00larrytag:knowing.net,2010-08-25:/posts/2010/08/wordless-wednesday-4/<p><a href="http://www.knowing.net/index.php/2010/08/25/wordless-wednesday-4/screen-shot-2010-08-22-at-45512-pm/"><img alt="screen-shot-2010-08-22-at-45512-pm" class="alignnone size-full wp-image-4787" height="555" src="/uploads/2010/08/screen-shot-2010-08-22-at-45512-pm.png" title="screen-shot-2010-08-22-at-45512-pm" width="278"></a></p>Twitter Weekly Updates for 2010-08-222010-08-22T16:00:00-10:002010-08-22T16:00:00-10:00larrytag:knowing.net,2010-08-22:/posts/2010/08/twitter-weekly-updates-for-2010-08-22/<ul>
<li>Disk Utility cannot fix my Mac boot drive. Time to find out how good Time Machine is... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21358863224">#</a></li>
<li>Looks like my Mac crashes were due to the RAM boards having worked loose. Lost a day's work and another day fixing it, but all-in-all happy <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21509886795">#</a></li>
<li>The Sounds of Sorting <a href="https://www.youtube.com/user/andrut">http://bit.ly …</a></li></ul><ul>
<li>Disk Utility cannot fix my Mac boot drive. Time to find out how good Time Machine is... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21358863224">#</a></li>
<li>Looks like my Mac crashes were due to the RAM boards having worked loose. Lost a day's work and another day fixing it, but all-in-all happy <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21509886795">#</a></li>
<li>The Sounds of Sorting <a href="https://www.youtube.com/user/andrut">http://bit.ly/acQMT2</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21603104422">#</a></li>
<li>Jays have a 9-run lead in top of 3rd. Guess those chores around house WILL get done after all. •sigh• <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21705605258">#</a></li>
<li>Beta testers wanted: Shoredive Hawai'i iPhone / iPad app. DM or email to <a href="mailto:lobrien@knowing.net">lobrien@knowing.net</a>. Please retweet! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21786674313">#</a></li>
<li>Beta testers wanted: Eve Online Character Dashboard iPhone/ iPad app. DM or email to <a href="mailto:lobrien@knowing.net">lobrien@knowing.net</a>. Please retweet! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21797456710">#</a></li>
<li>I grant you that it's opinionated, but YAGNI <a href="https://www.motor1.com/news/23302/pagani-zonda-hh-owner-revealed/">http://www.worldcarfans.com/110081727946/pagani-zonda-hh-owner-revealed</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21846552878">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Twitter Weekly Updates for 2010-08-152010-08-15T16:00:00-10:002010-08-15T16:00:00-10:00larrytag:knowing.net,2010-08-15:/posts/2010/08/twitter-weekly-updates-for-2010-08-15/<ul>
<li>Holy crap! 2 weeks I'm on vacation and someone proves P != NP? http://www.hpl.hp.com/personal/Vinay_Deolalikar/ <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20670692733">#</a></li>
<li>Wikipedia doesn't have a page for "replica symmetry breaking." Dang. Other than that, I would TOTALLY follow the P != NP paper. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20719935736">#</a></li>
<li>P != NP AND "Rubik's Cube requires 20 moves" <a href="http://www.cube20.org/">http …</a></li></ul><ul>
<li>Holy crap! 2 weeks I'm on vacation and someone proves P != NP? http://www.hpl.hp.com/personal/Vinay_Deolalikar/ <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20670692733">#</a></li>
<li>Wikipedia doesn't have a page for "replica symmetry breaking." Dang. Other than that, I would TOTALLY follow the P != NP paper. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20719935736">#</a></li>
<li>P != NP AND "Rubik's Cube requires 20 moves" <a href="http://www.cube20.org/">http://www.cube20.org/</a> in the same month? We're in a golden age, people! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20721482219">#</a></li>
<li>For those interested in tracking the P != NP debate, I suggest <a href="https://rjlipton.wordpress.com/">http://rjlipton.wordpress.com</a> for commentary <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20809306013">#</a></li>
<li>Ruby has totally ruined me for whiteboard programming. I can't think anymore without a REPL. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20819648627">#</a></li>
<li>Bailing on going to astro club meeting tonight. Deciding that it's not just jetlag + allergies, but a real-live cold. :-( <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20853351068">#</a></li>
<li>Directed by Julie Taymor: Check. Music by Bono & The Edge: Check. On Broadway: Check. "Spiderman The Musical": Uh...what's that now? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20902394615">#</a></li>
<li>At Don the Beachcomber Mai Tai contest -- quite a zoo! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21199584871">#</a></li>
<li>Looking at Venus, mercury, mars, Saturn, moon. Having a Mai Tai with friends. No ka oi. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/21208472291">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Possible Proof of P != NP2010-08-09T11:00:00-10:002010-08-09T11:00:00-10:00larrytag:knowing.net,2010-08-09:/posts/2010/08/possible-proof-of-p-np/<p>I’m not sure that this one will break into the public consciousness, but Vinay Deolalikar of HP may have proved one of the major challenges in complexity theory, that P != NP. In addition to being a great intellectual success, this particular problem has very big practical implications. Luckily, though …</p><p>I’m not sure that this one will break into the public consciousness, but Vinay Deolalikar of HP may have proved one of the major challenges in complexity theory, that P != NP. In addition to being a great intellectual success, this particular problem has very big practical implications. Luckily, though, what may have been proved is what was widely suspected to be true, so the upshot is that, if the proof is correct, the worlds of digital commerce and cryptography will breathe a sigh of relief.</p>Twitter Weekly Updates for 2010-08-082010-08-08T16:00:00-10:002010-08-08T16:00:00-10:00larrytag:knowing.net,2010-08-08:/posts/2010/08/twitter-weekly-updates-for-2010-08-08/<ul>
<li>Microsoft LightSwitch is the classic "v3 will be awesome" app. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20315033134">#</a></li>
<li>Google Wave, we hardly knew ye <a href="https://googleblog.blogspot.com/2010/08/update-on-google-wave.html">http://googleblog.blogspot.com/2010/08/update-on-google-wave.html</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20399297928">#</a></li>
<li>Just passed a scooter / moped gang. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20519273380">#</a></li>
<li>Parked on Tarmac in DEN. At least weather looks good -- home later today. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20638864103">#</a></li>
<li>Realized those staring in airport mistook my …</li></ul><ul>
<li>Microsoft LightSwitch is the classic "v3 will be awesome" app. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20315033134">#</a></li>
<li>Google Wave, we hardly knew ye <a href="https://googleblog.blogspot.com/2010/08/update-on-google-wave.html">http://googleblog.blogspot.com/2010/08/update-on-google-wave.html</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20399297928">#</a></li>
<li>Just passed a scooter / moped gang. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20519273380">#</a></li>
<li>Parked on Tarmac in DEN. At least weather looks good -- home later today. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20638864103">#</a></li>
<li>Realized those staring in airport mistook my kite bag for a rifle case. Stand down, folks, nothing but nylon and string <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20640423497">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Twitter Weekly Updates for 2010-08-012010-08-01T16:00:00-10:002010-08-01T16:00:00-10:00larrytag:knowing.net,2010-08-01:/posts/2010/08/twitter-weekly-updates-for-2010-08-01/<ul>
<li>United airlines phone-based support for missing bags: blatant lies by policy or personal initiative? Sachim Malik and others. #ual <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/19595675281">#</a></li>
<li>RIP Loren Heiny, a familiar name in the Tablet PC community. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/19616955867">#</a></li>
<li>Just scored box seats to Neil Young tonight! \o/ <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/19950492384">#</a></li>
<li>At Muddy Buddy Chicago. Sitting in air conditioned Lincoln Town Car …</li></ul><ul>
<li>United airlines phone-based support for missing bags: blatant lies by policy or personal initiative? Sachim Malik and others. #ual <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/19595675281">#</a></li>
<li>RIP Loren Heiny, a familiar name in the Tablet PC community. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/19616955867">#</a></li>
<li>Just scored box seats to Neil Young tonight! \o/ <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/19950492384">#</a></li>
<li>At Muddy Buddy Chicago. Sitting in air conditioned Lincoln Town Car. Shaking my fist at young whippersnappers. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/20064242603">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Twitter Weekly Updates for 2010-07-252010-07-25T16:00:00-10:002010-07-25T16:00:00-10:00larrytag:knowing.net,2010-07-25:/posts/2010/07/twitter-weekly-updates-for-2010-07-25/<ul>
<li>"The Chemist" Dileep Rao excellent analysis of Inception <a href="https://www.vulture.com/2010/07/inceptions_dileep_rao_answers.html">http://bit.ly/aom1VB</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18932066563">#</a></li>
<li>Companies are astroturfing reviews of their own iPhone apps on App Store. Not surprising, but disappointing. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18932780789">#</a></li>
<li>"A new kind of grammars that can produce the empty language is designed in this book." Indeed. <a href="https://www.amazon.com/New-Kind-Grammars-generative-grammars/dp/1452828687">http://amzn.to/bQWktb</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18951419778">#</a></li>
<li>Oh …</li></ul><ul>
<li>"The Chemist" Dileep Rao excellent analysis of Inception <a href="https://www.vulture.com/2010/07/inceptions_dileep_rao_answers.html">http://bit.ly/aom1VB</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18932066563">#</a></li>
<li>Companies are astroturfing reviews of their own iPhone apps on App Store. Not surprising, but disappointing. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18932780789">#</a></li>
<li>"A new kind of grammars that can produce the empty language is designed in this book." Indeed. <a href="https://www.amazon.com/New-Kind-Grammars-generative-grammars/dp/1452828687">http://amzn.to/bQWktb</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18951419778">#</a></li>
<li>Oh. So _this_ is how a sewing machine works <a href="http://twitpic.com/27fzip">http://twitpic.com/27fzip</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/19275328706">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Twitter Weekly Updates for 2010-07-182010-07-18T16:00:00-10:002010-07-18T16:00:00-10:00larrytag:knowing.net,2010-07-18:/posts/2010/07/twitter-weekly-updates-for-2010-07-18/<ul>
<li>Manhattanhenge is today: <a href="https://en.wikipedia.org/wiki/Manhattanhenge">http://en.wikipedia.org/wiki/Manhattanhenge</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18371199394">#</a></li>
<li>I'm guessing every attendee at PDC10 gets hardware running Windows SlatePad Foundation Services. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18371298411">#</a></li>
<li>The lazy plotting of WW2: <a href="https://www.livejournal.com/login.bml?returnto=https%3A%2F%2Fsquid314.livejournal.com%2F275614.html&errmsg=notloggedin">http://squid314.livejournal.com/275614.html</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18374385317">#</a></li>
<li>I write like Dan Brown when blogging, Raymond Chandler for publication: <a href="https://iwl.me/s/fe11a92f">http://iwl.me/s/fe11a92f</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18460440208">#</a></li>
<li>Even …</li></ul><ul>
<li>Manhattanhenge is today: <a href="https://en.wikipedia.org/wiki/Manhattanhenge">http://en.wikipedia.org/wiki/Manhattanhenge</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18371199394">#</a></li>
<li>I'm guessing every attendee at PDC10 gets hardware running Windows SlatePad Foundation Services. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18371298411">#</a></li>
<li>The lazy plotting of WW2: <a href="https://www.livejournal.com/login.bml?returnto=https%3A%2F%2Fsquid314.livejournal.com%2F275614.html&errmsg=notloggedin">http://squid314.livejournal.com/275614.html</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18374385317">#</a></li>
<li>I write like Dan Brown when blogging, Raymond Chandler for publication: <a href="https://iwl.me/s/fe11a92f">http://iwl.me/s/fe11a92f</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18460440208">#</a></li>
<li>Even if it's just for the show finale and not a whole season, they should have Ricky Gervais' David Brent take Carrell's Office job... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18463748331">#</a></li>
<li>Pondering how to get order of magnitude bump in Kona tour guide app sale. Suggestions? <a href="itms://itunes.apple.com/us/app/kailua-kona-tour-guide-in/id379979256?mt=8">http://bit.ly/cHq6L2</a> #Hawaii <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18474829710">#</a></li>
<li>Just got "Pro iPhone Programming with MonoTouch" w00t! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18553697936">#</a></li>
<li>No, it ISN'T "Back to School Time." <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18574984248">#</a></li>
<li>Kailua Kona iPhone Travel App http://bit.ly/dueNmP RT on July 15 to enter lottery for 1 lb of 100% Kona Coffee <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18622110361">#</a></li>
<li>Kailua Kona iPhone Travel App http://bit.ly/dueNmP RT on July 15 to enter lottery for lb of 100% Kona Coffee <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18625277663">#</a></li>
<li>Hitler hates undisciplined C developers <a href="http://gamesfromwithin.com/the-const-nazi">http://gamesfromwithin.com/the-const-nazi</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18704943486">#</a></li>
<li>Very happy I saw Inception before reading reviews. Trailer and unavoidable buzz told me a little, but good one to see w/o preconceptions. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18817464505">#</a></li>
<li>The coqui frogs are advancing downslope. Found one _below_ us last night. I feel like Heston in "The Naked Jungle" <a href="https://www.imdb.com/title/tt0047264/">http://imdb.to/rlyPq</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18858486566">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>iPhone App-Trepreneur: Part 3 -- Cost Control2010-07-12T05:00:00-10:002010-07-12T05:00:00-10:00larrytag:knowing.net,2010-07-12:/posts/2010/07/iphone-app-trepreneur-part-3-cost-control/<p>“50 cents income, 51 cents expenses: Poor man. 50 cents income, 49 cents expenses: Rich man.” -- Mark Twain ^<a href="#1">[1]</a>^</p>
<p>Previously, we saw that the average paid iPhone app generates a little under \$6,000 and that you have a 50-50 chance of making something considerably less than that. Of course …</p><p>“50 cents income, 51 cents expenses: Poor man. 50 cents income, 49 cents expenses: Rich man.” -- Mark Twain ^<a href="#1">[1]</a>^</p>
<p>Previously, we saw that the average paid iPhone app generates a little under \$6,000 and that you have a 50-50 chance of making something considerably less than that. Of course, it’s one of the privileges of entrepreneurship to dream of shattering the averages, of writing a blockbuster, of ending up in Costa Rica eating dolphin sushi and hanging with lady singers ^<a href="#2">[2]</a>^. And, if you’re young enough, that might be enough for you. But if you’re a little older, and a little less confident that the universe will reward you just because you’re totally awesome, you have to figure that it might take you a couple of times up to the plate before you hit one over the wall. ^<a href="#3">[3]</a>^</p>
<p>So, what can you build for a few thousand dollars?</p>
<p>If you’re a professional programmer, you know that the answer to that is : “Not a heck of a lot.”</p>
<p>How many hours equals an investment of “a few thousand dollars”? That depends on your circumstances, of course, but it’s a timescale measured in weeks, not months.</p>
<p>To me, this is one of those constraints that spur creativity. It should remove from your mind all temptation to explore some new domain that you don’t know much about. Instead, you should think about... Well, to be honest... A Web site.</p>
<p>Now, you might say to yourself “A Web site? But small creative folk don’t make money on the Web! It’s a fine outlet for expression and perhaps it’s an important part of marketing, but in terms of paying for my next 6-pack of Fire Rock Pale Ale... That dog don’t hunt!”</p>
<p>Forget the device itself. The reason the iPhone is appealing to entrepreneurs can be summed up in two phrases :</p>
<ul>
<li>Micropayments</li>
<li>Walled Garden</li>
</ul>
<h2>Micropayments</h2>
<p>Back when we were young and foolish [Redundant -- Ed.] writers embraced the Web because we saw a bright future in micropayments. We’d write our articles, people would pay a dime to read them and, all-in-all, we’d make more money than we did writing for magazines. For instance, back in the early 90s, when I was a magazine editor, we used to pay around \$800 for a computer programming article. Our circulation varied over the years, but we can use 80,000 and not be too far off. So as a writer, you made about a penny per reader.</p>
<p>For whatever insanely stupid reason, the banking industry didn’t create micropayment services. (To be fair, destroying the world’s economy while creating no actual value can take up your whole workweek. And weekends in the Hamptons don’t just happen by themselves.) Instead, this Northeastern undergrad named Shawn Fanning wrote this program called Napster.</p>
<p>Digital music went from being a novelty to being a pain in the ass for every technical manager in the world. “We need another T1 line! All our bandwidth is gone!” you’d tell the accountant, only to learn that someone in BizDev had ripped the complete Abba discography.</p>
<p>In 2001, Apple released iTunes and, soon after, the original iPod. The world that we know today, where if you hear a catchy tune, you’re an impulsive click away from spending \$0.99 and getting a legal copy may not have been invented by Apple, but they made it a reality.</p>
<p>Seven years later, when Apple released the 2nd Generation iPhone, they made software programs as easy to buy (and generally as cheap) as MP3 singles.</p>
<p>The AppStore, and its Apple-mediated micropayments, created a new sales channel to a vast potential audience.</p>
<h2>Walled Garden</h2>
<p>If you’re a musician, your experience may well belie this story of a new gold rush. Recording contracts and publishers may have been scoundrels and thieves, but at least there was some money to be made selling your music. The common wisdom nowadays is that recordings are far less important than live gigs.</p>
<p>There’s something to be said for giving away your apps as marketing tools. Just as every retail company nowadays pretty much has to have a Website, every retail company will eventually have to move to having a presence on mobile devices. (Of course, the easiest way to do that is to make your Website friendly to mobile devices, but that’s another story).</p>
<p>There’s also an emerging story about ad-supported apps. Apple’s recent launch of iAds is very interesting, although no numbers are yet available on results.</p>
<p>But the main way that apps differ from the Web is that apps are difficult (not impossible) to pirate and the habit of piracy has not established itself the way it has with music and movies.</p>
<p>If you put up a Website that contains, say, a helpful collection of instructions on knot tying and invite people to contribute, you won’t make any money. If you did start making money (because your photos showed nekkid ladies tying them, or whatever), your content would be pirated and put on other Websites.</p>
<p>If, on the other hand, you put your helpful knot-tying instructions in an iPhone app, you could charge \$4.99 for them (^<a href="#4">[4]</a>^). Although it would be possible for a resourceful programmer to steal your content and put it on the Web, they would not be able to resell your content on the App Store (technically, they might be able to get away with it until someone noticed the identical content, at which point Apple would intervene.)</p>
<p>Whether the “walled garden” that Apple maintains around the App Store and retail sales is a net good (at least some assurance of functionality and safety) or a net bad (too much control, too little transparency) is a matter of debate. But the fact is that Apple’s distribution channel is established, widespread, and active.</p>
<p>So, although you can’t create complex software for few thousand dollars, if you’re a creative person, you probably can create something potentially interesting for readers / viewers / listeners.</p>
<p>Think “Web site” not “Software Program.”</p>
<p>A good example of what can be done economically is my "Kailua Kona Tour Guide: In My Opinion" app. This</p>
<p>Next: Tools for creating iPhone Applications</p>
<p>FOOTNOTES</p>
<p>[[1]]{#1} Or words to that effect. And maybe it wasn’t Mark Twain who said it.</p>
<p>[[2]]{#2} <a href="https://www.tvfanatic.com/quotes/what-about-your-trust-fund-my-parents-had-it-amended-i-dont/">Jean Ralphio -- Parks & Recreation</a></p>
<p>[[3]]{#3} Unless, of course, you’re <a href="http://www.espn.com/boston/mlb/columns/story?columnist=edes_gordon&id=5281066">Daniel Nava</a></p>
<p>[[4]]{#4} <a href="https://itunes.apple.com/us/app/animated-knots-by-grog/id376302649?mt=8">Animated Guide to Knot Tying</a></p>
<hr>
<ol>
<li><a href="http://www.knowing.net/index.php/2010/07/05/iphone-app-trepeneur-prolog-in-which-our-hero-laments-the-loss-of-his-mojo/">Prologue</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/06/iphone-app-trepreneur-part-1-desperately-seeking-ka-ching/">Part 1: Desperately Seeking Ka-Ching</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/07/opportunity-always-ring-tones-twice/">Part 2: Opportunity Always Ring-Tones Twice</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/12/iphone-app-trepreneur-part-3-cost-control/">Part 3: Cost Control</a></li>
</ol>Twitter Weekly Updates for 2010-07-112010-07-11T16:00:00-10:002010-07-11T16:00:00-10:00larrytag:knowing.net,2010-07-11:/posts/2010/07/twitter-weekly-updates-for-2010-07-11/<ul>
<li>Apparently no one came in to work on their weekend or day off in order to review my iPhone app. Someone get Steve Jobs on the phone! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17833544436">#</a></li>
<li>Alien vs. Ninja <a href="https://www.youtube.com/watch?v=7M_QC2fatXQ">http://www.youtube.com/watch?v=7M_QC2fatXQ</a> (Man, you just know they're going to ruin the book...) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17834423691">#</a></li>
<li>Happy aphelion …</li></ul><ul>
<li>Apparently no one came in to work on their weekend or day off in order to review my iPhone app. Someone get Steve Jobs on the phone! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17833544436">#</a></li>
<li>Alien vs. Ninja <a href="https://www.youtube.com/watch?v=7M_QC2fatXQ">http://www.youtube.com/watch?v=7M_QC2fatXQ</a> (Man, you just know they're going to ruin the book...) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17834423691">#</a></li>
<li>Happy aphelion! http://bit.ly/bH0Skp <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17882008116">#</a></li>
<li>iMovie sucks. That is all. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17886190876">#</a></li>
<li>Lingle vetoes same-sex civil unions. Pity she's a lame duck and we cannot fire her on election day. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17912280794">#</a></li>
<li>Why I value Editors: My iPhone app has a typo in a screenshot that's on the front page of its app store page. I suck. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17920173757">#</a></li>
<li>You would think that every beetle species would have evolved the ability to right themselves when upside down. And yet... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17970251211">#</a></li>
<li>OData browser written in MonoTouch -- http://hnsl.mn/cippdz <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17976227971">#</a></li>
<li>Power out in Kalaoa <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17999092002">#</a></li>
<li>Lingle's civil union veto spurs talk of boycotting Hawaii for vacations. Understandable, but of course many here hurt support equal rights. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18009470864">#</a></li>
<li>Inouye, now 3rd in line to Presidency, gets 24x7 security. Q: Where for lunch? Must scan. A: Zippy's. <a href="https://www.msn.com/">http://www.msnbc.msn.com/id/38143132</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18051918633">#</a></li>
<li>Discovery of multicellular life 2+Gyrs ago (50% to origin of life) is huge re search for ET. Removes fear multicel was fluke. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18053708929">#</a></li>
<li>Wish all publishers had discount for paper + eBook bundle purchase -- I'm looking at you @<a class="aktt_username" href="https://twitter.com/wrox">wrox</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18143033967">#</a></li>
<li>Holy moley! I think I drove by the police marking the unexploded ordinance on Saddle Road last night at \~1AM. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18148946514">#</a></li>
<li>1st they came for Salman Rushdie & I said nothing because I was not Salman Rushdie... Then they came for my vuvuzela... <a href="https://www.csmonitor.com/From-the-news-wires/2010/0709/Vuvuzela-fatwa-United-Arab-Emirates-bans-the-loud-plastic-horns">http://bit.ly/daPcv0</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18214362153">#</a></li>
<li>Paul the Octopus has predicted the outcome of 6 games? Wow, the odds must be like a million to one against that. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18215034452">#</a></li>
<li>Friends of mine at Easter Island Eclipse. Aug 21 2017 -- mark your calendars, North America! <a href="https://eclipse.gsfc.nasa.gov/SEplot/SEplot2001/SE2017Aug21T.GIF">http://bit.ly/3LVFz</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18216855767">#</a></li>
<li>-----\< <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18218883116">#</a></li>
<li>Vuvuzela emoticon. Use with joyful abandon. -----\< <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18218961474">#</a></li>
<li>I bet every moai on Easter Island has a little cluster of carefully aligned cameras beneath it this morning, like sacrificial offerings <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18287919370">#</a></li>
<li>My friend @<a class="aktt_username" href="https://twitter.com/ironwood">ironwood</a> is serializing his novel online at <a href="http://ironwoodwind.blogspot.com/">http://ironwoodwind.blogspot.com/</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18293412663">#</a></li>
<li>Kailua Kona iPhone Guide: My app now available for sale <a href="itms://itunes.apple.com/us/app/kailua-kona-tour-guide-in/id379979256?mt=8">http://bit.ly/cHq6L2</a> #hawaii #kona #iphone #mt <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18298318823">#</a></li>
<li>All hail Paul and his cephalopdic omniscience! -----\< <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18301489862">#</a></li>
<li>I, for one, welcome our new cephalopodic overlords <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/18305129110">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Focus is hard at night2010-07-10T12:21:00-10:002010-07-10T12:21:00-10:00larrytag:knowing.net,2010-07-10:/posts/2010/07/focus-is-hard-at-night/<p>I took this shot Thursday night up at Mauna Kea. I thought I was doing really well with the photography, but when I got home and imported the images, all of them were blurred. There wasn't any wind, and I thought the scope was polar-aligned well enough, so for the …</p><p>I took this shot Thursday night up at Mauna Kea. I thought I was doing really well with the photography, but when I got home and imported the images, all of them were blurred. There wasn't any wind, and I thought the scope was polar-aligned well enough, so for the moment I'm blaming this on manual focus.</p>
<p>The purple stuff is digital sensor noise, which I find kind of shockingly high. I took a "dark frame" (photos of similar exposure, but with the lens cap on) and can use Photoshop to subtract out the noise, but it's not worth it for a fuzzy photo like this.</p>
<p><a href="http://www.knowing.net/index.php/2010/07/10/focus-is-hard-at-night/dsc-6378jpg/"><img alt="dsc-6378.jpg" class="alignnone size-full wp-image-4753" height="401" src="/uploads/2010/07/dsc-6378.jpg" title="dsc-6378.jpg" width="600"></a></p>
<p>To give you a sense of what can be done with modern digital cameras, great lenses, Photoshop, and talent, take a look at <a href="https://apod.nasa.gov/apod/ap100625.html">this amazing photo</a></p>Ad Hoc iPhone Deployment With MonoDevelop / MonoTouch2010-07-08T13:17:00-10:002010-07-08T13:17:00-10:00larrytag:knowing.net,2010-07-08:/posts/2010/07/ad-hoc-iphone-deployment-with-monodevelop-monotouch/<p>My tutorial on the oft-confusing world of iPhone ad hoc distribution:</p>
<p><a href="http://www.knowing.net/index.php/monotouch-ad-hoc-distribution-tutorial/">http://www.knowing.net/index.php/monotouch-ad-hoc-distribution-tutorial/</a></p>iPhone App-Trepreneur: Part 2 -- Opportunity Always Ring-Tones Twice2010-07-07T05:00:00-10:002010-07-07T05:00:00-10:00larrytag:knowing.net,2010-07-07:/posts/2010/07/opportunity-always-ring-tones-twice/<p>““Sir, if you have a milkshake, and I have a milkshake, and my straw reaches across the room, I'll end up drinking your milkshake.”” ^<a href="#1">[1]</a>^</p>
<p>The biggest milkshake in the software world is Microsoft’s. For 20 years, if you wanted to make money by writing retail software, you did …</p><p>““Sir, if you have a milkshake, and I have a milkshake, and my straw reaches across the room, I'll end up drinking your milkshake.”” ^<a href="#1">[1]</a>^</p>
<p>The biggest milkshake in the software world is Microsoft’s. For 20 years, if you wanted to make money by writing retail software, you did so by targeting Microsoft operating systems: DOS and then Windows and then Vista (just kidding about that last one!).</p>
<p>In 2007, Apple introduced the iPhone. At the time, Steve Jobs said that there was no need for 3rd party developers to directly program the device, that instead they could program awesome iPhone-enabled Websites that would be just swell. No one liked that idea.</p>
<p>In July of 2008, Steve Jobs opened the iPhone SDK to general development and announced the creation of the iTunes App Store. In its first three days of availability, users downloaded more than ten million small programs from Apple’s brand-new “App Store.”</p>
<p>In April 2009, a little less than 2 years later, the number of app downloads exceeded 1 billion. Five months later: 2 billion. 3 months later: 3 billion. In June of 2010, at the introduction of the 4th generation iPhone^<a href="#2">[2]</a>^, Steve Jobs said that Apple had crossed 5 billion downloads. That’s a pretty good growth curve:<br>
<a href="http://www.knowing.net/index.php/2010/07/07/opportunity-always-ring-tones-twice/appstoresales/"><img alt="appstoresales" class="alignnone size-full wp-image-4774" height="298" src="/uploads/2010/07/appstoresales.png" title="appstoresales" width="327"></a><br>
That’s about 10 million app downloads per day. To give you a sense of proportion, there are about 3 billion books sold in the United States every year.^<a href="#3">[3]</a>^</p>
<p>Apple has been drinking Microsoft's milkshake.</p>
<p>About 25% of apps are free. Free apps are far more likely to be downloaded than paid apps (no surprise), but at the same iPhone 4 launch, Jobs said that Apple had paid out \$1 billion in royalties to iPhone developers.</p>
<p>He also said that that in June 2010 there were 225,000 apps in the App Store; implying around 170,000 paid apps. OK, so \<span class="math">\(1,000,000,000 / 170,000 apps == \\)</span>5,882.35 <strong>average</strong> revenue per app. That’s a glass half-full, glass half-empty number. Hit apps can make much, much more than that -- at least 1 app has made more than \<span class="math">\(1,000,000 (Major League Baseball’s At Bat). So that means that the **median** app revenue (50% of apps make more, 50% make less) is certainly lower than \\)</span>5.8K. On the other hand, several thousand dollars is not chicken feed -- it implies that even if you don’t score a “hit” with your app, you might be able to recoup your expenses and time investment -- <strong>as long as you keep your development costs down!</strong></p>
<p><strong>Which, not coincidentally, will be the subject of our next spine-tingling update!</strong></p>
<p>Footnotes</p>
<p>[[1]]{#1} This was originally said by Senator Albert Fall in an explanation of the Teapot Dome Scandal, but it’s unlikely he said it with the elan <a href="https://www.youtube.com/watch?v=dsQcS0zr4tM&feature=related">demonstrated by Daniel Day Lewis in “There Will Be Blood.”</a></p>
<p>[[2]]{#2} Closer to the fifth generation, given the differences between the iPhone 3G and 3GS.</p>
<p>[[3]]{#3} This is comparing global app sales to US book sales.</p>
<hr>
<ol>
<li><a href="http://www.knowing.net/index.php/2010/07/05/iphone-app-trepeneur-prolog-in-which-our-hero-laments-the-loss-of-his-mojo/">Prologue</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/06/iphone-app-trepreneur-part-1-desperately-seeking-ka-ching/">Part 1: Desperately Seeking Ka-Ching</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/07/opportunity-always-ring-tones-twice/">Part 2: Opportunity Always Ring-Tones Twice</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/12/iphone-app-trepreneur-part-3-cost-control/">Part 3: Cost Control</a></li>
</ol>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Apple Surpassing MS Market Cap: My Latest Column2010-07-06T08:06:00-10:002010-07-06T08:06:00-10:00larrytag:knowing.net,2010-07-06:/posts/2010/07/apple-surpassing-ms-market-cap-my-latest-column/<p>My most recent column for SD Times questions the <a href="https://sdtimes.com/apple/windows-net-watch-when-the-market-speaks/">rationality of Apple having a higher market capitalization that Microsoft</a>.</p>iPhone App-Trepreneur: Part 1 -- Desperately Seeking Ka-Ching2010-07-06T05:00:00-10:002010-07-06T05:00:00-10:00larrytag:knowing.net,2010-07-06:/posts/2010/07/iphone-app-trepreneur-part-1-desperately-seeking-ka-ching/<p>“You cannot get rich selling your own time.” -- Scott Adams^<a href="#1">[1]</a>^</p>
<p>You can, however, make great fortunes selling things. When I was a kid, there was a girl in school who was heir to a pencil fortune; every time you took a standardized test and filled in one of those …</p><p>“You cannot get rich selling your own time.” -- Scott Adams^<a href="#1">[1]</a>^</p>
<p>You can, however, make great fortunes selling things. When I was a kid, there was a girl in school who was heir to a pencil fortune; every time you took a standardized test and filled in one of those ovals completely, her accountant smiled. I don’t know how much more money there is left in building a better mouse trap, but an iPhone app that makes farting noises can pull in “more than 10,000 dollars per day.” ^<a href="#2">[2]</a>^ (<strong>more</strong>, mind you).</p>
<p>In 2002, I wrote a book about programming. It so happened that my book contract very explicitly gave me all electronic rights for publication; this, while unusual, was not considered a big deal back in the mid-late ‘90s when the contract boilerplate that I essentially inherited was created. This was right after the dot-com boom and developing an eCommerce Website was still somewhat esoteric. Were you to poll a group of small companies that sold specialized products online, the average cost of developing an eCommerce Website in the early 2000s would certainly be in the tens of thousands of dollars. (“Somewhat esoteric...high average cost...” <strong>This is going to be a theme.</strong>)</p>
<p>So, I wrote a simple little eCommerce Website. The coding was simple, as it was something I had done before. The harder part was aiding my bank in understanding the then-odd idea that this company run out of a cottage on Creek Road was going to be generating tiny electronic deposits throughout the day and night. and sold the electronic copy of my book at a bunch of pricepoints (If I recall correctly: \<span class="math">\(3.95, \\)</span>5.95, and \$11.95). Two important things need to be noted here:</p>
<ol>
<li>It was considered indisputable that an electronic version of a book was <strong>considerably</strong> less valuable than a print version of the book, but it was evident to everyone that <strong>some</strong> amount of revenue was possible from eBooks, and;</li>
<li>My royalty on the first several thousand copies of the print book, whose cover price was \<span class="math">\(49.95, was about \\)</span>3.75. In other words, I made as much money on the cheapest electronic version as I would on the print version.</li>
</ol>
<p>The most important thing I did was write the software so that every time I made a sale, my computer played a cash register “KA-CHING” sound.</p>
<p>I’d be sitting at the computer writing the book or working on some code and I’d be distracted by the “KA-CHING.” But that was okay -- it spurred me on and there are worse ways to be distracted. Much more importantly, I’d be eating dinner and talking with my wife and off in the distance -- “KA-CHING.” Sitting on the couch watching TV -- “KA-CHING...KA-CHING...” And I’d apologize to my wife and go over to the computer and turn it down (but I’d usually try to leave it at a just-barely-perceptible-to-me level).</p>
<p>Sales weren’t great; it was hardly like living inside a pachinko machine. But if you make your living selling your time, there’s <strong>no</strong> KA-CHING except when you are <strong>on the clock</strong>. Eating dinner? No KA-CHING. Watching TV? No KA-CHING. Sleep, checking baseball scores, walking the dog? No KA-CHING.</p>
<p>This was a profound realization for me. At the time, I had a wonderful dog who needed (and got) an hour-long walk every day. For the first time in my life, when I came back from that walk, I was (by a small amount) richer than I had been when I left. Not as much richer as I’d have been had I neglected Cheyenne and spent the hour on the clock for someone, but that wasn’t an option.</p>
<p>Being a fool, I mentioned my situation on a mailing list for authors and publishers. And, apparently, it caused quite a kerfuffle at the publishing company that was about to squeeze a bunch of ink onto a whole bunch of dead trees in order to produce something with a \$49.95 cover price. No one knew how much money an eBook was worth, but publishers sure as hell weren’t happy with the amounts <strong>I</strong> was charging. Being, as I said, a fool, when they demanded that I stop selling the book electronically, I complied immediately. I thought we could work something out (again: Fool). It all ended in tears. ^<a href="#3">[3]</a>^</p>
<p>In the end, I vowed two things:</p>
<ol>
<li>If I ever again spent 10 months writing a book again, it damned well was going to be a novel, and not 1,184 pages on C# programming.</li>
<li>One day, the KA-CHING would be mine again!</li>
</ol>
<p><strong>Stay tuned for more heart-pounding entrepreneurial advice from a self-described Fool! Tomorrow’s Episode: <em>Opportunity Always Ring-Tones Twice</em>!</strong></p>
<p>Previously:</p>
<p><a href="http://www.knowing.net/index.php/2010/07/05/iphone-app-trepeneur-prolog-in-which-our-hero-laments-the-loss-of-his-mojo/">iPhone App-Trepreneur: Prologue</a></p>
<p>Footnotes:</p>
<p>[[1]{#1}] Unless you’re a doctor or lawyer. Both of which are professions that use strict licensing to forbid (or at least highly discourage) competition from smart people who live overseas. Which is something that’s always cropping up in software development circles under the guise of assuring “professionalism.” Uh-huh. Because if there’s one thing that the past decade has proved, it’s that companies recognize, reward, and seek out professionalism and not the promises of low-bid incompetents.</p>
<p>[[2]{#2}] <a href="http://www.cc.com/shows/the-daily-show-with-trevor-noah">http://www.thedailyshow.com/watch/tue-july-21-2009/ifeud</a></p>
<p>[[3]{#3}] Lawyers got involved. Which is short-hand for “the guy in the little cottage on Creek Road got screwed and humiliated and paid for the privilege.”</p>
<hr>
<ol>
<li><a href="http://www.knowing.net/index.php/2010/07/05/iphone-app-trepeneur-prolog-in-which-our-hero-laments-the-loss-of-his-mojo/">Prologue</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/06/iphone-app-trepreneur-part-1-desperately-seeking-ka-ching/">Part 1: Desperately Seeking Ka-Ching</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/07/opportunity-always-ring-tones-twice/">Part 2: Opportunity Always Ring-Tones Twice</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/12/iphone-app-trepreneur-part-3-cost-control/">Part 3: Cost Control</a></li>
</ol>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>iPhone App-Trepreneur: Prologue -- In Which Our Hero Laments The Loss of His Mojo2010-07-05T09:11:00-10:002010-07-05T09:11:00-10:00larrytag:knowing.net,2010-07-05:/posts/2010/07/iphone-app-trepeneur-prolog-in-which-our-hero-laments-the-loss-of-his-mojo/<p>You may have noticed a dramatic shift in my online presence over the past few months. At the beginning of May, I more-or-less shut down Twitter, flushed the cache from my RSS reader, and stopped watching Red Sox games on MLB Live (well... mostly). This was in service to the …</p><p>You may have noticed a dramatic shift in my online presence over the past few months. At the beginning of May, I more-or-less shut down Twitter, flushed the cache from my RSS reader, and stopped watching Red Sox games on MLB Live (well... mostly). This was in service to the regaining of my mojo, which I had lost (or least let wilt).</p>
<p>Although I make my living by consulting, I screwed up pretty royally in the past 2 years -- allowing myself to switch from a consulting role to a contracting role^<a href="#1">[1]</a>^. While you can make better money contracting (because you end up working long hours writing code rather than jumping in and out providing answers), it’s a big mistake for US and European developers. If you want to have people pay you First-World wages for your development skills, you have to stay ahead of the mainstream. If you are contracting, you inevitably focus in on a single development stack, a single paradigm, and a single problem domain. Email queries to you about availability and recent articles slow down and that’s fine, because you’re too busy with your contract to help people for free. And your livelihood becomes overly dependent on one or two customers. If, in the face of an economic slowdown, they decide to cease investing in advancing their infrastructure, you no longer have an Inbox full of recent questions to work for leads.</p>
<p>Tempting as it is, I am going to skip further discussion of lessons learned and mistakes to avoid...</p>
<p>And move on to the <strong>thrilling tale</strong> of getting my mojo back by way of the iPhone app store.</p>
<p><strong>Stay tuned for the next thrilling chapter! <a href="http://www.knowing.net/index.php/2010/07/06/iphone-app-trepreneur-part-1-desperately-seeking-ka-ching/">Part 1: Desperately Seeking Ka-Ching</a></strong></p>
<p><strong>Footnotes<br>
</strong></p>
<p>[[1]]{#1} <a href="http://unixwiz.net/techtips/be-consultant.html">So You Want To Be A Consultant?</a></p>
<hr>
<ol>
<li><a href="http://www.knowing.net/index.php/2010/07/05/iphone-app-trepeneur-prolog-in-which-our-hero-laments-the-loss-of-his-mojo/">Prologue</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/06/iphone-app-trepreneur-part-1-desperately-seeking-ka-ching/">Part 1: Desperately Seeking Ka-Ching</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/07/opportunity-always-ring-tones-twice/">Part 2: Opportunity Always Ring-Tones Twice</a></li>
<li><a href="http://www.knowing.net/index.php/2010/07/12/iphone-app-trepreneur-part-3-cost-control/">Part 3: Cost Control</a></li>
</ol>Twitter Weekly Updates for 2010-07-042010-07-04T16:00:00-10:002010-07-04T16:00:00-10:00larrytag:knowing.net,2010-07-04:/posts/2010/07/twitter-weekly-updates-for-2010-07-04/<ul>
<li>Christopher Walken performs Poker Face: <a href="https://www.youtube.com/watch?v=A2guQYivZ6w&playnext_from=TL&videos=9PLpagjhW-Q&feature=grec_index">http://bit.ly/aLn0DU</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17220958174">#</a></li>
<li>2 hours and my app hasn't been approved yet... ARGH!!!!!! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17288904092">#</a></li>
<li>20/20 vision is ability to discriminate two lines or pixels at 1 arcminute (1/60th of 1 degree). #things_I_never_knew <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17349674735">#</a></li>
<li>Hawaiians Poised For USA Coup d'Etat: <a href="http://nymag.com/intelligencer/2010/06/slow_hawaiin_takeover_of_ameri.html?gtm=top&gtm=top">http://nymag …</a></li></ul><ul>
<li>Christopher Walken performs Poker Face: <a href="https://www.youtube.com/watch?v=A2guQYivZ6w&playnext_from=TL&videos=9PLpagjhW-Q&feature=grec_index">http://bit.ly/aLn0DU</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17220958174">#</a></li>
<li>2 hours and my app hasn't been approved yet... ARGH!!!!!! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17288904092">#</a></li>
<li>20/20 vision is ability to discriminate two lines or pixels at 1 arcminute (1/60th of 1 degree). #things_I_never_knew <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17349674735">#</a></li>
<li>Hawaiians Poised For USA Coup d'Etat: <a href="http://nymag.com/intelligencer/2010/06/slow_hawaiin_takeover_of_ameri.html?gtm=top&gtm=top">http://nymag.com/daily/intel/2010/06/slow_hawaiin_takeover_of_ameri.html</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17351445093">#</a></li>
<li>Average app review time is 7-10 days on new iPhone apps. Whoa is me! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17355945401">#</a></li>
<li>Test from Tweetstation <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17434128610">#</a></li>
<li>MSFT kills Kin phone 6 weeks after launch <a href="https://gizmodo.com/microsoft-kills-kin-5576764">http://gizmodo.com/5576764/microsoft-kills-kin</a> Ouch. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17443333177">#</a></li>
<li>They should have glued a ShamWow! to the back of the Kin. Or made the battery shake back and forth and sold it as an exercise device. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17445749230">#</a></li>
<li>Rumor is that Twilight cast member will be at Makalapua Theatre in Kona Saturday <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17631513929">#</a></li>
<li>Marlin tourney just started. Boats zooming from Honokohau http://www.flickr.com/photos/84827625\@N00/4757627195/ <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17667568687">#</a></li>
<li>Wow. That was a bad ass fight <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17697660715">#</a></li>
<li>Go Red Sox! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17734709717">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Completed Phase 12010-06-28T12:24:00-10:002010-06-28T12:24:00-10:00larrytag:knowing.net,2010-06-28:/posts/2010/06/completed-phase-1/<p><a href="http://www.knowing.net/index.php/2010/06/28/completed-phase-1/underpantsgnomes/"><img alt="underpantsgnomes" class="alignnone size-full wp-image-4702" height="439" src="/uploads/2010/06/underpantsgnomes.jpg" title="underpantsgnomes" width="640"></a></p>Twitter Weekly Updates for 2010-06-272010-06-27T16:00:00-10:002010-06-27T16:00:00-10:00larrytag:knowing.net,2010-06-27:/posts/2010/06/twitter-weekly-updates-for-2010-06-27/<ul>
<li>Upgrading my iPhone stack: phone OSs, SDK, MonoTouch, MonoDev. See you in July! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/16709797276">#</a></li>
<li>Ex-submariner sez "Conventional explosives to plug leak." But wouldn't that collapse work-to-date on relief wells? <a href="https://www.nytimes.com/2010/06/22/opinion/22Brownfield.html?src=un&feedurl=http%3A%2F%2Fjson8.nytimes.com%2Fpages%2Fopinion%2Findex.jsonp">http://nyti.ms/djdiHr</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/16803984023">#</a></li>
<li>Writing this using a bluetooth keyboard paired with my iPhone 3Gs. Finally! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/16814062220">#</a></li>
<li>Trying to remember last SF novel …</li></ul><ul>
<li>Upgrading my iPhone stack: phone OSs, SDK, MonoTouch, MonoDev. See you in July! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/16709797276">#</a></li>
<li>Ex-submariner sez "Conventional explosives to plug leak." But wouldn't that collapse work-to-date on relief wells? <a href="https://www.nytimes.com/2010/06/22/opinion/22Brownfield.html?src=un&feedurl=http%3A%2F%2Fjson8.nytimes.com%2Fpages%2Fopinion%2Findex.jsonp">http://nyti.ms/djdiHr</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/16803984023">#</a></li>
<li>Writing this using a bluetooth keyboard paired with my iPhone 3Gs. Finally! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/16814062220">#</a></li>
<li>Trying to remember last SF novel I read that was actually self-contained and had an ending. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/16946747089">#</a></li>
<li>Gorgeous astrophoto <a href="https://apod.nasa.gov/apod/image/1006/Alamut-Babak1.jpg">http://antwrp.gsfc.nasa.gov/apod/image/1006/Alamut-Babak1.jpg</a> I wish I could figure out techique to do similar <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17111478474">#</a></li>
<li>Vuvuzelas are the Flash of Soccer. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17113098994">#</a></li>
<li>BP has spent >\<span class="math">\(2B not closing 21" pipe. Oh yeah, I'm sure the other \\)</span>48B will fix the Gulf. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17186098636">#</a></li>
<li>I oppose instant replay in baseball, but world cup ref'ing is disastrous as far as "US is finally going to embrace sport." <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/17186473155">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Vuvuzela Hero2010-06-26T10:24:00-10:002010-06-26T10:24:00-10:00larrytag:knowing.net,2010-06-26:/posts/2010/06/vuvuzela-hero/<p>Capture the magic of the 2010 World Cup! Play with friends! Intuitive controls! Neverending replay value!</p>
<p><a href="http://www.knowing.net/index.php/2010/06/26/vuvuzela-hero/mockup_2/"><img alt="mockup_2" class="alignnone size-full wp-image-4696" height="510" src="/uploads/2010/06/mockup_2.png" title="mockup_2" width="608"></a></p>Twitter Weekly Updates for 2010-06-132010-06-13T16:00:00-10:002010-06-13T16:00:00-10:00larrytag:knowing.net,2010-06-13:/posts/2010/06/twitter-weekly-updates-for-2010-06-13/<ul>
<li>Me want 300DPI screens. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15645504312">#</a></li>
<li>Thank god the new iPhone has a gyroscope. FINALLY we'll have more realistic lightsaber apps. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15645758854">#</a></li>
<li>The iPhone developmnt missing manual book from ORA is must have at full price. At \$10 : steal <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15645903592">#</a></li>
<li>When aapl starts migrating those 300DPI screens to iPad and Macbooks -- watch out <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15648900299">#</a></li>
<li>How …</li></ul><ul>
<li>Me want 300DPI screens. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15645504312">#</a></li>
<li>Thank god the new iPhone has a gyroscope. FINALLY we'll have more realistic lightsaber apps. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15645758854">#</a></li>
<li>The iPhone developmnt missing manual book from ORA is must have at full price. At \$10 : steal <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15645903592">#</a></li>
<li>When aapl starts migrating those 300DPI screens to iPad and Macbooks -- watch out <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15648900299">#</a></li>
<li>How much content is "not enough" in a \$0.99 tour guide app? If you bought a "walking tour," would you expect 5 minutes of stuff? 15? 60? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15658550109">#</a></li>
<li>Evidence of intelligent life on Europa: They're advanced enough to plant false signs of life on Titan. Don't fall for it, people! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15673109821">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Twitter Weekly Updates for 2010-06-062010-06-06T16:00:00-10:002010-06-06T16:00:00-10:00larrytag:knowing.net,2010-06-06:/posts/2010/06/twitter-weekly-updates-for-2010-06-06/<ul>
<li>Freedive "base jump" <a href="https://www.youtube.com/watch?v=uQITWbAaDx0">http://www.youtube.com/watch?v=uQITWbAaDx0</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15195801023">#</a></li>
<li>Is Atlassian having trouble with their servers (specifically, my.atlassian.com -- I keep timing out)? #jira <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15200012498">#</a></li>
<li>It's amazing how fast a storage medium becomes obsolete. I'm looking at my half-gone spindle of CDs and wondering how many years old it …</li></ul><ul>
<li>Freedive "base jump" <a href="https://www.youtube.com/watch?v=uQITWbAaDx0">http://www.youtube.com/watch?v=uQITWbAaDx0</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15195801023">#</a></li>
<li>Is Atlassian having trouble with their servers (specifically, my.atlassian.com -- I keep timing out)? #jira <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15200012498">#</a></li>
<li>It's amazing how fast a storage medium becomes obsolete. I'm looking at my half-gone spindle of CDs and wondering how many years old it is. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15204552707">#</a></li>
<li>IfItWasMyHome.com - Visualizing the BP Oil Disaster: http://bit.ly/8X0HGN via @<a class="aktt_username" href="https://twitter.com/addthis">addthis</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15572353305">#</a></li>
<li>It takes guts to ship a minimal feature set. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15576478042">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Twitter Weekly Updates for 2010-05-302010-05-30T16:00:00-10:002010-05-30T16:00:00-10:00larrytag:knowing.net,2010-05-30:/posts/2010/05/twitter-weekly-updates-for-2010-05-30/<ul>
<li>In Honolulu mall. Very cosmopolitan -- people wear shoes. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14860192586">#</a></li>
<li>Resistance is irrelevant. Aggressive autonomous quadrotors: <a href="https://www.youtube.com/watch?v=MvRTALJp8DM">http://www.youtube.com/watch?v=MvRTALJp8DM</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14927481108">#</a></li>
<li>Dozens in Congress just sold us out on #NetNeutrality Sign this letter: Sellouts don't speak for me: http://freepr.es/aTpq4b <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14927872632">#</a></li>
<li>New iPhone said to have 320DPI screen; equiv …</li></ul><ul>
<li>In Honolulu mall. Very cosmopolitan -- people wear shoes. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14860192586">#</a></li>
<li>Resistance is irrelevant. Aggressive autonomous quadrotors: <a href="https://www.youtube.com/watch?v=MvRTALJp8DM">http://www.youtube.com/watch?v=MvRTALJp8DM</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14927481108">#</a></li>
<li>Dozens in Congress just sold us out on #NetNeutrality Sign this letter: Sellouts don't speak for me: http://freepr.es/aTpq4b <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14927872632">#</a></li>
<li>New iPhone said to have 320DPI screen; equiv on iPad would be 2480x1860. Now _that_ would kill the Kindle. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15014666830">#</a></li>
<li>Case dropping out of Congressional race. Day late and a dime short, even though I preferred him to Hanabusa. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/15064405474">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Lost Finale: The Manichaean Heresy2010-05-24T18:49:00-10:002010-05-24T18:49:00-10:00larrytag:knowing.net,2010-05-24:/posts/2010/05/lost-finale-the-manichaean-heresy/<p><a href="http://www.knowing.net/index.php/2010/05/24/lost-finale-the-manichaean-heresy/manichean-2/"><img alt="manichean-2" class="alignnone size-full wp-image-4686" height="808" src="/uploads/2010/05/manichean-2.png" title="manichean-2" width="758"></a></p>Parsing Just One Thing in the Lost Finale2010-05-24T18:23:00-10:002010-05-24T18:23:00-10:00larrytag:knowing.net,2010-05-24:/posts/2010/05/parsing-just-one-thing-in-the-lost-finale/<p>This took me, like 20 minutes, and was just the beginning of the consequences of "The Island is Real" and "The Chamber of the Golden Belly Button Contains A Cork That Holds In The Golden Light." It would take me a lot longer to continue, but I realized that all …</p><p>This took me, like 20 minutes, and was just the beginning of the consequences of "The Island is Real" and "The Chamber of the Golden Belly Button Contains A Cork That Holds In The Golden Light." It would take me a lot longer to continue, but I realized that all roads were leading to a single solution...</p>
<p><a href="http://www.knowing.net/index.php/2010/05/24/parsing-just-one-thing-in-the-lost-finale/lost_thread/"><img alt="lost_thread" class="alignnone size-full wp-image-4681" height="1325" src="/uploads/2010/05/lost_thread.png" title="lost_thread" width="2781"></a></p>Twitter Weekly Updates for 2010-05-232010-05-23T16:00:00-10:002010-05-23T16:00:00-10:00larrytag:knowing.net,2010-05-23:/posts/2010/05/twitter-weekly-updates-for-2010-05-23/<ul>
<li>Google's logo of the day is a working tribute to today's 30th birthday of Pacman <a href="https://www.google.com/?gws_rd=ssl">http://www.google.com</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14444208502">#</a></li>
<li>Code Incomplete #lesserbooks <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14444910423">#</a></li>
<li>Code Complete! \o/ <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14517647371">#</a></li>
<li>RIP Martin Gardner <a href="http://blogs.discovermagazine.com/badastronomy/2010/05/22/martin-gardner-1914-2010/">http://bit.ly/cIo19x</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14530686796">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Twitter Weekly Updates for 2010-05-162010-05-16T16:00:00-10:002010-05-16T16:00:00-10:00larrytag:knowing.net,2010-05-16:/posts/2010/05/twitter-weekly-updates-for-2010-05-16/<ul>
<li>Seeking iPhone beta testers for travel app -- coming to Big Island of Hawaii soon? DM me! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/13803853231">#</a></li>
<li>Happy 50th birthday, Laser! <a href="https://www.msn.com/">http://bit.ly/9bxjBP</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/14063674947">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Wordless Wednesdays2010-05-12T06:33:00-10:002010-05-12T06:33:00-10:00larrytag:knowing.net,2010-05-12:/posts/2010/05/wordless-wednesdays-4/<p><a href="http://www.knowing.net/index.php/2010/05/12/wordless-wednesdays-4/attachment/1268147/"><img alt="1268147" class="alignnone size-full wp-image-4669" height="692" src="/uploads/2010/05/1268147.jpg" title="1268147" width="922"></a></p>Code Canvas: MS Research's Zoomable UI for Visual Studio2010-05-10T03:20:00-10:002010-05-10T03:20:00-10:00larrytag:knowing.net,2010-05-10:/posts/2010/05/code-canvas-ms-researchs-zoomable-ui-for-visual-studio/<p>Moving beyond the "bento box" IDE: <a href="https://www.microsoft.com/en-us/research/publication/code-canvas-zooming-towards-better-development-environments/?from=http%3A%2F%2Fresearch.microsoft.com%2Fapps%2Fpubs%2Fdefault.aspx%3Fid%3D121031">http://research.microsoft.com/apps/pubs/default.aspx?id=121031</a></p>
<p>Similar, but not identical, to Code Bubbles.</p>Twitter Weekly Updates for 2010-05-092010-05-09T16:00:00-10:002010-05-09T16:00:00-10:00larrytag:knowing.net,2010-05-09:/posts/2010/05/twitter-weekly-updates-for-2010-05-09/<ul>
<li>Red Sox vs. Halos series pits my fantasy baseball team against itself. C'mon pitching duels or slugfests! (Won by Sox in both cases.) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/13319388907">#</a></li>
<li>Huge buzz about @<a class="aktt_username" href="https://twitter.com/zoompf">zoompf</a> talk at JSConf "JavaScript's Evil Side" -- anyone know if video or slides are available online? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/13372790037">#</a></li>
<li>Fan of SD Times? There's an app for …</li></ul><ul>
<li>Red Sox vs. Halos series pits my fantasy baseball team against itself. C'mon pitching duels or slugfests! (Won by Sox in both cases.) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/13319388907">#</a></li>
<li>Huge buzz about @<a class="aktt_username" href="https://twitter.com/zoompf">zoompf</a> talk at JSConf "JavaScript's Evil Side" -- anyone know if video or slides are available online? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/13372790037">#</a></li>
<li>Fan of SD Times? There's an app for that! http://bit.ly/cgSWf5 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/13450765892">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Wordless Wednesday2010-05-05T07:39:00-10:002010-05-05T07:39:00-10:00larrytag:knowing.net,2010-05-05:/posts/2010/05/wordless-wednesday-3/<p><img alt="IMG_1219" height="314" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_l.png" width="255"></p>Wordless Wednesday2010-04-28T07:40:00-10:002010-04-28T07:40:00-10:00larrytag:knowing.net,2010-04-28:/posts/2010/04/wordless-wednesday-2/<p><img alt="DSC_5666" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>Recently Bookmarked2010-04-26T03:00:00-10:002010-04-26T03:00:00-10:00larrytag:knowing.net,2010-04-26:/posts/2010/04/recently-bookmarked-3/<p>::: {#delicious-posts-lobrien .delicious-posts}
<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a> {#my-delicious-bookmarks .delicious-banner .sidebar-title}</p>
<hr>
<ul>
<li><a class="delicious-link" href="https://www.virtualsalt.com/rhetoric6.htm">rhetoric6</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/rhetoric">rhetoric</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/reference">reference</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/writing">writing</a></li>
<li><a class="delicious-link" href="https://www.virtualsalt.com/rhetoric.htm">A Handbook of Rhetorical Devices</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/reference">reference</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/writing">writing</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/grammar">grammar</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/rhetoric">rhetoric</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/stylistic">stylistic</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/devices">devices</a></li>
<li><a class="delicious-link" href="https://github.com/relevance/functional-koans/tree/FSharp">relevance's functional-koans at FSharp - GitHub</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/koans">koans</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/f%23">f#</a></li>
<li>Perlisisms - "Epigrams in Programming" by Alan J. Perlis / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/programming">programming</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/quotes">quotes</a></li>
<li><a class="delicious-link" href="http://geekswithblogs.net/MarkPearl/archive/2010/04/15/wf4-ndash-guess-the-number-game.aspx">WF4 – Guess the number game!</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/workflow">workflow</a></li>
<li><a class="delicious-link" href="https://www.itworld.com/article/2757038/will-wall-street-require-python-.html">Will Wall Street require …</a></li></ul><p>::: {#delicious-posts-lobrien .delicious-posts}
<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a> {#my-delicious-bookmarks .delicious-banner .sidebar-title}</p>
<hr>
<ul>
<li><a class="delicious-link" href="https://www.virtualsalt.com/rhetoric6.htm">rhetoric6</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/rhetoric">rhetoric</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/reference">reference</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/writing">writing</a></li>
<li><a class="delicious-link" href="https://www.virtualsalt.com/rhetoric.htm">A Handbook of Rhetorical Devices</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/reference">reference</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/writing">writing</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/grammar">grammar</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/rhetoric">rhetoric</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/stylistic">stylistic</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/devices">devices</a></li>
<li><a class="delicious-link" href="https://github.com/relevance/functional-koans/tree/FSharp">relevance's functional-koans at FSharp - GitHub</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/koans">koans</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/f%23">f#</a></li>
<li>Perlisisms - "Epigrams in Programming" by Alan J. Perlis / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/programming">programming</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/quotes">quotes</a></li>
<li><a class="delicious-link" href="http://geekswithblogs.net/MarkPearl/archive/2010/04/15/wf4-ndash-guess-the-number-game.aspx">WF4 – Guess the number game!</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/workflow">workflow</a></li>
<li><a class="delicious-link" href="https://www.itworld.com/article/2757038/will-wall-street-require-python-.html">Will Wall Street require Python? | ITworld</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/python">python</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/legal">legal</a></li>
<li><a class="delicious-link" href="http://blogs.nitobi.com/jesse/2010/01/14/phonegap-iphone-tutorial-a-good-place-to-start/">Jesse @ Nitobi » Blog Archive » PhoneGap iPhone Tutorial – A good place to start</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/javascript">javascript</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mobile">mobile</a></li>
<li><a class="delicious-link" href="https://www.artofmanliness.com/articles/manly-slang-from-the-19th-century/">Manly Slang from the 19th Century | The Art of Manliness</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/humor">humor</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/slang">slang</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/writing">writing</a></li>
<li><a class="delicious-link" href="https://unity.com/">UNITY: Game Development Tool</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/games">games</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mobile">mobile</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a></li>
<li>Ansca Mobile | Build Your iPhone, iPad and Android Games Faster With Corona SDK / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/games">games</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mobile">mobile</a></li>
<li><a class="delicious-link" href="http://www.alexyork.net/blog/2009/09/19/uinavigationcontroller-with-monotouch-building-a-simple-rss-reader-part-1/">Alex York .NET | UINavigationController with MonoTouch - Building a simple RSS reader - Part 1</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/monotouch">monotouch</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a></li>
<li><a class="delicious-link" href="https://www.infoq.com/articles/monotouch-custom-tables">InfoQ: Customizing Tables in MonoTouch</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/monotouch">monotouch</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a></li>
<li><a class="delicious-link" href="http://planning.hawaii.gov/gis/">Downloadable Layers</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/hawaii">hawaii</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/maps">maps</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/gis">gis</a></li>
<li><a class="delicious-link" href="https://www.heavens-above.com/main.aspx?Lat=19.7&Lng=-156&Alt=500&Loc=Kalaoa&TZ=UCT10">Heavens-Above Home Page</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/astronomy">astronomy</a></li>
</ul>
<p>[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien"></a> I am <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">lobrien</a> on <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/">Delicious</a>]{.delicious-network-username}<br>
[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien">Add me to your network</a>]{.delicious-network-add}
:::</p>Twitter Weekly Updates for 2010-04-252010-04-25T16:00:00-10:002010-04-25T16:00:00-10:00larrytag:knowing.net,2010-04-25:/posts/2010/04/twitter-weekly-updates-for-2010-04-25/<ul>
<li>The Register says that F# was "sneaked into" VS2010 in a "stealth" launch. Uh... <a href="https://www.theregister.co.uk/2010/04/19/microsoft_f_sharp/">http://www.theregister.co.uk/2010/04/19/microsoft_f_sharp/</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12468147000">#</a></li>
<li>Hey, United Airlines! You should turn off DEBUG in your ua2go ASP.Net site. (PS: You have a bug in getFileName() ) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12469522304">#</a></li>
<li>Commodore 64 and Amiga …</li></ul><ul>
<li>The Register says that F# was "sneaked into" VS2010 in a "stealth" launch. Uh... <a href="https://www.theregister.co.uk/2010/04/19/microsoft_f_sharp/">http://www.theregister.co.uk/2010/04/19/microsoft_f_sharp/</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12468147000">#</a></li>
<li>Hey, United Airlines! You should turn off DEBUG in your ua2go ASP.Net site. (PS: You have a bug in getFileName() ) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12469522304">#</a></li>
<li>Commodore 64 and Amiga emulators for the iPhone <a href="https://www.engadget.com/topics/apple/">http://bit.ly/9tfcYs</a> If these get approved w/o significant clarification... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12528690147">#</a></li>
<li>RED SOX!!!!!!! WOWWWW!!!!!! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12553734601">#</a></li>
<li>Adobe throws in towel on Flash-to-iPhone <a href="https://www.engadget.com/topics/apple/">http://bit.ly/atda09</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12593626093">#</a></li>
<li>Red Sox are beginning to look like the Red Sox! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12615621139">#</a></li>
<li>Photographers: Do 5+ megapixel phonecams make any sense? Don't tiny lenses fundamentally limit images to snapshot quality? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12649529152">#</a></li>
<li>Link for that cautionary tale about s/w entrepreneurship that ends with "he forgot that 1% wasn't the smallest marketshare"? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12726214911">#</a></li>
<li>"Find Your Sole Heir -- Billionaire Edition." #apps_I_should_write <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12729738419">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Legal Contracts Written in Code2010-04-23T09:53:00-10:002010-04-23T09:53:00-10:00larrytag:knowing.net,2010-04-23:/posts/2010/04/legal-contracts-written-in-code/<p>The SEC is <a href="https://yro.slashdot.org/story/10/04/19/2114251/SEC-Proposes-Wall-Street-Transparency-Via-Python?from=rss&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Slashdot%2Fslashdot+%28Slashdot%29">considering mandating that Python be used to express certain financial contracts</a>, allowing the potential buyer to 'programmatically input the user's own assumptions regarding the future performance and cash flows from the pool assets, including but not limited to assumptions about future interest rates, default rates, prepayment speeds …</p><p>The SEC is <a href="https://yro.slashdot.org/story/10/04/19/2114251/SEC-Proposes-Wall-Street-Transparency-Via-Python?from=rss&utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+Slashdot%2Fslashdot+%28Slashdot%29">considering mandating that Python be used to express certain financial contracts</a>, allowing the potential buyer to 'programmatically input the user's own assumptions regarding the future performance and cash flows from the pool assets, including but not limited to assumptions about future interest rates, default rates, prepayment speeds, loss-given-default rates, and any other necessary assumptions.'</p>
<p>I love this idea!</p>
<p>Contract disputes, which unfortunately crop up every once in a while when you're a consultant, are horrifically expensive to adjudicate, because both sides invariably interpret some definitions in different ways and dispute which clauses have precedence.</p>
<p>Oh how I'd love to have a contract whose appendix was the behavior-driven steps of the various <a href="https://cucumber.io/">Cucumber</a>-defined clauses!</p>
<p>[[Feature:]{style="color: #0000ff;"} ]{style="color: #3366ff;"}[Automated Resolution]{style="color: #008000;"}</p>
<p>[[In order to]{style="color: #0000ff;"} avoid expensive litigation]{style="color: #008000;"}</p>
<p>[[As a]{style="color: #0000ff;"} contract signatory]{style="color: #008000;"}</p>
<p>[[I want to ]{style="color: #0000ff;"}resolve disputes using a mechanical method]{style="color: #008000;"}</p>
<p>[[Scenario: ]{style="color: #0000ff;"}Invoice dispute over unsatisfactory work<br>
]{style="color: #008000;"}</p>
<p>[Given ]{style="color: #0000ff;"}contractor submits an invoice in the amount of \$100</p>
<p>[And]{style="color: #0000ff;"} Contractee finds that work is unsatisfactory</p>
<p>[When]{style="color: #0000ff;"} Contractee disputes invoice</p>
<p>[Then]{style="color: #0000ff;"} the dispute shall be resolved by The Contract Program</p>
<p>Not that this would magically make contract disputes go away, but I can imagine it helping. At least until someone builds a recursive clause-defining clause and makes a Turing-complete Contract Program and then defines a non-computable contract.</p>MonoTouch Navigation Controller Tutorial2010-04-19T16:07:00-10:002010-04-19T16:07:00-10:00larrytag:knowing.net,2010-04-19:/posts/2010/04/monotouch-navigation-controller-tutorial/<p>Well, optimistically assuming that everything works out between Novell and Apple I have posted <a href="http://www.knowing.net/index.php/monotouch-navigation-controller-tutorial/">a new tutorial on using a NavigationController in MonoTouch.</a> Nothing fancy: Just navigating between two TableViews. Lots of screenshots to try to make the steps as clear as possible, source on github...</p>
<p>Let me know if …</p><p>Well, optimistically assuming that everything works out between Novell and Apple I have posted <a href="http://www.knowing.net/index.php/monotouch-navigation-controller-tutorial/">a new tutorial on using a NavigationController in MonoTouch.</a> Nothing fancy: Just navigating between two TableViews. Lots of screenshots to try to make the steps as clear as possible, source on github...</p>
<p>Let me know if it's helpful!</p>Twitter Weekly Updates for 2010-04-182010-04-18T16:00:00-10:002010-04-18T16:00:00-10:00larrytag:knowing.net,2010-04-18:/posts/2010/04/twitter-weekly-updates-for-2010-04-18/<ul>
<li>Thought Experiment: All songs sold on the iTunes store must be originally composed on a piano, organ, or guitar. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12017264352">#</a></li>
<li>"Tiberius Cologne" Set odor on stunning! <a href="https://www.amazon.com/Star-Trek-Fragrance-Tiberius-Cologne/dp/B002HMQS14/ref=sr_1_4?ie=UTF8&s=toys-and-games&qid=1271128555&sr=8-4">http://amzn.to/8XNVOI</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12083274105">#</a></li>
<li>Facebook now lets you @-dress tag someone and then emails you the comments to that post. Spam countdown: 10, 9, 8 …</li></ul><ul>
<li>Thought Experiment: All songs sold on the iTunes store must be originally composed on a piano, organ, or guitar. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12017264352">#</a></li>
<li>"Tiberius Cologne" Set odor on stunning! <a href="https://www.amazon.com/Star-Trek-Fragrance-Tiberius-Cologne/dp/B002HMQS14/ref=sr_1_4?ie=UTF8&s=toys-and-games&qid=1271128555&sr=8-4">http://amzn.to/8XNVOI</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12083274105">#</a></li>
<li>Facebook now lets you @-dress tag someone and then emails you the comments to that post. Spam countdown: 10, 9, 8, 7... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12116512525">#</a></li>
<li>"I'm 21...the ‘books’ that come to define my generation will be impossible to print. This is great." <a href="https://techcrunch.com/2010/04/11/dear-authors-your-next-book-should-be-an-app-not-an-ibook/">http://tcrn.ch/bzVpBz</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12142564848">#</a></li>
<li>Short sharp EQ felt in Kalaoa <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12175239216">#</a></li>
<li>Wow. http://www.starwarsuncut.com/trailer <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12183574491">#</a></li>
<li>I was going to do the same thing with "Aguirre: The Wrath of God" http://www.starwarsuncut.com/trailer <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12183629912">#</a></li>
<li>Getting depressed listening to Red Sox game... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12239297708">#</a></li>
<li>Those with a view of the Sunset tonight should look for a beautiful crescent moon nestled above Mercury and near Venus. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12240399071">#</a></li>
<li>I love writing, but it's absolutely amazing how rebellious my mind is about settling in and getting to work. Oh! Recycling needs sorting! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12300969886">#</a></li>
<li>Moon and the Pleiades last night were absolutely GORGEOUS. Hope you had a chance to see them... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12359741069">#</a></li>
<li>STL ties game 1-1 in bottom of 19th inning! 20th inning coming up! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12375403191">#</a></li>
<li>If you live in the Midwest, go out of your way to see the Shuttle re-enter tomorrow AM. It's an astonishing sight and few chances left... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12412611561">#</a></li>
<li>My fantasy baseball team is absolutely imploding. Oh yeah, and the Red Sox, too. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/12413167463">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>eBook Annotations Should Be Optional2010-04-16T10:17:00-10:002010-04-16T10:17:00-10:00larrytag:knowing.net,2010-04-16:/posts/2010/04/ebook-annotations-should-be-optional/<p>Having just finished Cormac McCarthy's "<a href="https://www.amazon.com/exec/obidos/ASIN/0679641041/thinkinginnet-20">Blood Meridian</a>" -- a book which in two typical pages produces the words: "squailed," "vadose," "bated" (not in it's normal sense), "terra damnata," "carreta," "monocline," "sleared," "rebozos," "fusil," and "clackdish" -- I have an opinion on <a href="http://radar.oreilly.com/2010/04/ebook-annotations-links-and-no.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29">this post from O'Reilly on eBook Annotations</a></p>
<p>The only thing worse …</p><p>Having just finished Cormac McCarthy's "<a href="https://www.amazon.com/exec/obidos/ASIN/0679641041/thinkinginnet-20">Blood Meridian</a>" -- a book which in two typical pages produces the words: "squailed," "vadose," "bated" (not in it's normal sense), "terra damnata," "carreta," "monocline," "sleared," "rebozos," "fusil," and "clackdish" -- I have an opinion on <a href="http://radar.oreilly.com/2010/04/ebook-annotations-links-and-no.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29">this post from O'Reilly on eBook Annotations</a></p>
<p>The only thing worse than having no annotations in a difficult text is having annotations: I <em>hated</em> those overly-footnoted texts of Shakespeare and the classics that combined actually interesting footnotes with constant vocabulary (the meaning of "terra damnata" is obvious and if "fusil" reminds you of "fusilier"...).</p>
<p>On the other hand, I wouldn't at all mind some kind of annotation and analysis to accompany a challenging work like this. eBooks actually have the opportunity to have the finest user experience possible: allowing a spectrum of annotations (from vocabulary to book-summing essays) to be shown, or not, wholly under the user's control.</p>
<p>If you just show all the links at all times, then the reader never knows the difference between "Footnote 538: A type of flower" and "Footnote 539: This is considered the central passage of the text..."</p>Rats Are Smart Players of Prisoner's Dilemma2010-04-15T11:50:00-10:002010-04-15T11:50:00-10:00larrytag:knowing.net,2010-04-15:/posts/2010/04/rats-are-smart-players-of-prisoners-dilemma/<p>This is thought-provoking: http://blog.the-scientist.com/2010/03/25/amazing-rats/</p>
<p>Does this imply that rats form a mental model of their opponent's agency?</p>Search Stories: Mobile Programming2010-04-14T10:46:00-10:002010-04-14T10:46:00-10:00larrytag:knowing.net,2010-04-14:/posts/2010/04/search-stories-mobile-programming/Wordless Wednesdays2010-04-14T07:12:00-10:002010-04-14T07:12:00-10:00larrytag:knowing.net,2010-04-14:/posts/2010/04/wordless-wednesdays-3/<p><img alt="DSC_2856_7_8_tonemapped" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="333"></p>Impressive: C++ Lambdas via Template Metaprogramming2010-04-13T10:34:00-10:002010-04-13T10:34:00-10:00larrytag:knowing.net,2010-04-13:/posts/2010/04/impressive-c-lambdas-via-template-metaprogramming/<p>U. Utah's <a href="http://matt.might.net/articles/lambda-style-anonymous-functions-from-c++-templates/">Matt Might has implemented lambda expressions in C++</a>, so for instance:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="n">Function2</span><span class="o"><</span><span class="n">int</span><span class="p">,</span><span class="n">int</span><span class="p">,</span><span class="n">int</span><span class="o">></span><span class="w"> </span><span class="n">h</span><span class="p">(</span><span class="n">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">int</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kr">return</span><span class="w"> </span><span class="n">lambda</span><span class="o"><</span><span class="n">int</span><span class="o">></span><span class="w"> </span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="o">--></span><span class="w"> </span><span class="n">a</span><span class="o">*</span><span class="n">x</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">b</span><span class="o">*</span><span class="n">y</span><span class="w"> </span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>the value of <code>h(3,4)(1,1)</code> is 7.</p>Poll: iPhone Restrictions Effect2010-04-13T08:42:00-10:002010-04-13T08:42:00-10:00larrytag:knowing.net,2010-04-13:/posts/2010/04/poll-iphone-restrictions-effect/Is It "All About The Framework"?2010-04-12T16:42:00-10:002010-04-12T16:42:00-10:00larrytag:knowing.net,2010-04-12:/posts/2010/04/is-it-all-about-the-framework/<p>This thought-provoking post on /dev/why!?! argues that backward compatibility is the root cause of the new iPhone restrictions. The argument is summed up in this quote:</p>
<blockquote>
<p>I can think of incidents where Apple reverted OS changes, dumped new APIs, or was <strong>forced</strong> to committing massive engineering resources to something …</p></blockquote><p>This thought-provoking post on /dev/why!?! argues that backward compatibility is the root cause of the new iPhone restrictions. The argument is summed up in this quote:</p>
<blockquote>
<p>I can think of incidents where Apple reverted OS changes, dumped new APIs, or was <strong>forced</strong> to committing massive engineering resources to something it did not want to do because a Must Not Break™ app vendor told them to.</p>
</blockquote>
<p>There's no doubt that backward compatibility is often a tremendous anchor on technological evolution, especially at the platform level. The more you have "important" apps on your platform, the more pressure there is to consider them Must Not Break™. Let's say that one of these credit card payment options for the iPhone really takes off and gets adopted by thousands of businesses. And Apple goes on record saying "Gee, we love this payment option, look how easy it is for Joe Mainstreet to use iPad to run his small business out of his car." Could there be heated discussions when considering whether to release an OS update that breaks the payment-processing software for thousands of businesses or whether they could wait "just one more week until these guys iron out the last of the kinks"? Of course there could be.</p>
<p>Even worse, let's say that you've got a Must Not Break™ vendor whose product was written in, let's say, Prolog and compiled to the iPhone using PrologTouch. And they're having trouble and pointing their fingers at PrologTouch and the PrologTouch people say "Yeah, that's a known bug and we plan on addresssing it in 3 iterations. But they can workaround it by following this simple procedure..." Which is exactly how it goes (except for the part about people writing applications in Prolog). Everyone in the systems-level programming world knows that there's a lot of finger-pointing about dependencies and drama and sausage (as in, "you don't want to know what's inside") when it comes to synchronizing releases.</p>
<p>Apple certainly knows this as well as anyone and the idea that they want to try to change that dynamic in some way certainly makes sense. Limiting the number of dependencies between platform vendors and developers <em>would</em> probably diminish some of that complexity.</p>
<p>Nonetheless, it's foolish to do it with contract terms and it's absurd to do it in a way that outlaws good software practices such as code generation, Domain Specific Languages, and abstracted memory management (or at least type-safe memory management!). Forcing developers to use Objective C, C++, or C to develop applications means that you'll have more, not fewer, serious defects relating to resource consumption and security. Especially if you're a victim of your own success as a platform vendor and you have a lot of newcomers to your platform.</p>
<p>The success of the iPhone means that a lot of companies want to develop applications for it, including advertising and marketing applications and inward-facing corporate applications. A lot of those companies do not have experience with explicit memory management. As long as these new restrictive provisions stand, these companies will be forced to either stay off the iPhone platform or to develop software in a way that is unnecessarily error-prone. It's a rotten choice.</p>Twitter Weekly Updates for 2010-04-112010-04-11T16:00:00-10:002010-04-11T16:00:00-10:00larrytag:knowing.net,2010-04-11:/posts/2010/04/twitter-weekly-updates-for-2010-04-11/<ul>
<li>Remember the Milk is hiring a Scala programmer: <a href="https://stackoverflow.com/jobs?6700">http://jobs.stackoverflow.com/default.asp?6700</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11782114446">#</a></li>
<li>Worrisome new rule for iPhone / iPad causing discussion on #monotouch -- consensus seems to be that MonoTouch is fine. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11839266377">#</a></li>
<li>More scary stuff from new iPhone SDK license: ""Applications must be originally written in Objective-C, C, C …</li></ul><ul>
<li>Remember the Milk is hiring a Scala programmer: <a href="https://stackoverflow.com/jobs?6700">http://jobs.stackoverflow.com/default.asp?6700</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11782114446">#</a></li>
<li>Worrisome new rule for iPhone / iPad causing discussion on #monotouch -- consensus seems to be that MonoTouch is fine. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11839266377">#</a></li>
<li>More scary stuff from new iPhone SDK license: ""Applications must be originally written in Objective-C, C, C++, or JavaScript..." #monotouch <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11840309107">#</a></li>
<li>Restrictive clauses in new iPhone SDK agreement seem to only apply to AppStore Deployment: not enterprise deployment. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11842713798">#</a></li>
<li>Just got my first pair of rigid gas-permeable contacts. Blinking back tears like I'm watching "Brian's Song" on TV. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11847825901">#</a></li>
<li>RIP Malcolm Mclaren <a href="https://www.nytimes.com/2010/04/09/arts/music/09mclaren.html">http://www.nytimes.com/2010/04/09/arts/music/09mclaren.html</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11849618239">#</a></li>
<li>I'm quoted (more politely) in this SD Times article on the iPhone restrictions: <a href="https://sdtimes.com/apple/apple-licensing-changes-block-flash-mono/">http://www.sdtimes.com/link/34262</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11901833040">#</a></li>
<li>Power just went out in Kalaoa <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11915945559">#</a></li>
<li>Power back in Kalaoa <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11916582372">#</a></li>
<li>Heading over to Hilo and BI Pizza for tweetup. Is it rainy today? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11953906862">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>"Originally Written in..." vs. Code Generation2010-04-11T09:06:00-10:002010-04-11T09:06:00-10:00larrytag:knowing.net,2010-04-11:/posts/2010/04/originally-written-in-vs-code-generation/<p>My assertion that the iPhone license phrase "Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine" can only mean zero code generation has been questioned. Here's why I stand by that assessment (and consider the clause beyond the pale).</p>
<p>Let …</p><p>My assertion that the iPhone license phrase "Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine" can only mean zero code generation has been questioned. Here's why I stand by that assessment (and consider the clause beyond the pale).</p>
<p>Let me point out that the common-sense reading of that clause is straightforward. The word "originally" clearly implies that writing this:</p>
<p><code>UIView.BeginAnimations(""); UIView.SetAnimationTransition(UIViewAnimationTransition.FlipFromLeft, this.Superview, true); UIView.SetAnimationCurve(UIViewAnimationCurve.EaseInOut); UIView.SetAnimationDuration(1.0);</code></p>
<p>and transforming it into:</p>
<p><code>[UIView beginAnimations: nil context:context]; [UIView setAnimationTransition: UIViewAnimationTransitionFlipFromLeft forView: [self superView] cache: YES]; [UIView setAnimationCurve: UIViewAnimationCurveEaseInOut]; [UIView setAnimationDuration: 1.0]</code></p>
<p>is forbidden. To take it to the extreme, can you imagine betting your company on convincing a jury that writing the first (which is C# and MonoTouch) and generating the second means it was "originally written in Objective C"? If so, you have some hard lessons about the legal system to learn.</p>
<p>I should point out that even though this code is clearly very similar, there are some slight differences, such as C#'s enumerated values UIViewAnimationTransition.FlipFromLeft as opposed to Objective C's constant value UIViewAnimationTransitionFlipFromLeft. The . makes a difference in the parse tree and in the programmer's mind -- a small one, but a helpful one.</p>
<p>I should also point out that today MonoTouch does <em>not</em> generate the Objective C 2nd listing. It probably generates something like:<br>
<code>{ .entrypoint .maxstack 8 L_0000: nop L_0001: ldstr "" L_0006: call void Foo.UIView::BeginAnimations(string) L_000b: nop L_000c: ldc.i4.0 L_000d: ldsfld class Foo.UIView Foo.UIView::Superview L_0012: ldc.i4.1 L_0013: call void Foo.UIView::SetAnimationTransition(valuetype Foo.UIViewAnimationTransition, class Foo.UIView, bool) L_0018: nop L_0019: ldc.i4.0 L_001a: call void Foo.UIView::SetAnimationCurve(valuetype Foo.UIViewAnimationCurve) L_001f: nop L_0020: ldc.r8 1 L_0029: call void Foo.UIView::SetAnimationDuration(float64) L_002e: nop L_002f: ret }</code></p>
<p>which is "Common Intermediate Language." The .NET Virtual Machine loads CIL files directly, while MonoTouch generates <em>at compile time</em> native code, which which is an exercise left for the interested student (and, while hardly trivial, <em>is</em> a mechanical process that can be reviewed for efficiency, improved, etc.). (The "nop"s, by the way, are for breakpoints and wouldn't be generated in a release build).</p>
<p>Generating two levels of low-level code (C# -> CIL -> Native Code) may seem to be the source of inefficiencies, but generating for an intermediate assembly language is <em>very</em> common with modern compilers. Code generation <em>may</em> be a source of inefficiencies or it may be a place of optimization -- that's dependent on the skill of the compiler writers.</p>
<p>The reason why it's absurd to forbid native code compilers but allow Objective C code generation is that there is <em>no difference</em> between generating assembly language and generating C. If you can write an IL->Native Code compiler, <em>of course</em> you can write a IL->C compiler. So <em>were</em> code generation legal, a potential strategy for other alternative language vendors would be to do FooLanguage -> Foo IL -> C ("OK, lawyers, as you can see, we are simply generating C code") -> Apple Approved C Compiler -> Native. Kafka-esque absurdity, but perfectly cromulent. Indeed, I strongly suspect that all of the alternative language vendors are preparing just such a tactic as "Plan B" or "Plan C" in case Apple relents on the word "originally."</p>
<p><strong>The Double-Edged Sword</strong></p>
<p>Why <em>should</em> Apple allow alternative code generation? They fear inefficiencies, they cannot control the efficiency of code generation, therefore it is logical to forbid code generation. Why is that unreasonable?</p>
<p>The reason is that if you forbid code generation, you forbid huge swaths of good programming techniques. Rather than go on about lex and yacc and report generators and screen managers, though, we have the delightful "The Elements" iPad app to make the point. Don't take it from me that code generation is good, <a href="https://www.popsci.com/gadgets/article/2010-04/exclusive-making-elements-one-ipads-most-magical-apps">read the article</a>:</p>
<blockquote>
<p>Even the amazing animation synchronized to Tom Lehrer's iconic song "The Elements", which plays the first time you open the e-book, was generated entirely by a Mathematica program.</p>
</blockquote>
<p>QED.</p>Automatic Parallelization of Memory Management2010-04-10T08:06:00-10:002010-04-10T08:06:00-10:00larrytag:knowing.net,2010-04-10:/posts/2010/04/automatic-parallelization-of-memory-management/<p>MMT: Exploiting Fine-Grained Parallelism in Dynamic Memory Management, Tiware et al. is worth reading if you are interested in systems-level performance programming. If you work in a managed environment, the briefly described lockless protocol for request-reply queues is worth noting.</p>
<p>This paper describes the use of a "Memory Management Thread …</p><p>MMT: Exploiting Fine-Grained Parallelism in Dynamic Memory Management, Tiware et al. is worth reading if you are interested in systems-level performance programming. If you work in a managed environment, the briefly described lockless protocol for request-reply queues is worth noting.</p>
<p>This paper describes the use of a "Memory Management Thread" (MMT) to automatically parallelize memory management in C/C++ programs. In allocation-intensive domains (often domains that involve traversing or transforming big graphs -- constraint programming, parsing and translation, optimization problems, etc.), memory management overhead can be around 30% of execution time.</p>
<p>The fundamental challenge is that memory management is very fine-grained and that communication and coordination between cores and processors can easily introduce more overhead than is gained by "easy wins" like asynchronous deallocation.</p>
<p>The improvement appears to come from speculative bulk allocation and bulk de-allocation. What makes the "speculation" hard is synchronization and making sure that you avoid too much contention. Their win in this area appears to come from an elegant approach: dual request and reply queues access to which is ping-ponged between the client and server.</p>
<p><a href="http://www.knowing.net/index.php/2010/04/10/automatic-parallelization-of-memory-management/screen-shot-2010-04-07-at-112233-am/"><img alt="screen-shot-2010-04-07-at-112233-am" class="alignnone size-full wp-image-4565" height="269" src="/uploads/2010/04/screen-shot-2010-04-07-at-112233-am.png" title="screen-shot-2010-04-07-at-112233-am" width="491"></a></p>
<p>Their benchmark numbers are good.</p>The Absurdity of Apple's New iPhone Restrictions2010-04-09T10:30:00-10:002010-04-09T10:30:00-10:00larrytag:knowing.net,2010-04-09:/posts/2010/04/using-mathematica-to-generate-the-elements-appebook/<p>These are the new clauses:</p>
<ul>
<li>Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine</li>
</ul>
<p>I'm tempted to say that the clause is absurd and to talk about metaprogramming with C++ templates or JavaScript prototypes, but the fact is that it's …</p><p>These are the new clauses:</p>
<ul>
<li>Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine</li>
</ul>
<p>I'm tempted to say that the clause is absurd and to talk about metaprogramming with C++ templates or JavaScript prototypes, but the fact is that it's perfectly <a href="https://en.wiktionary.org/wiki/cromulent">cromulent</a>. The common-sense reading of this is straightforward: <strong>no code generation</strong>.</p>
<p>The constraint, however, is utterly illogical. Good programmers don't write all their code: they write code that generates the boring stuff. This is probably the type of thing that was used in "<a href="http://www.knowing.net/index.php/2010/04/09/using-mathematica-to-generate-the-elements-ipad-app/">The Elements</a>" -- automatic generation of the .xib files, asset directories and resources, and generation of Objective C animation code (the video explicitly says that animations were generated). Forbidding Domain-Specific Languages (and the parser generators that help build them) flies in the face of the very people you want to attract to your platform.</p>
<p>C, C++, and Objective-C were all developed more than 20 years ago and <strong>all, on the iPhone, require explicit memory management -- the most error-prone detail in software development</strong>. You know how you tell when an app for the iPhone was written in MonoTouch? It doesn't leak memory.</p>
<p>You can play the semantic game of "Well, since a C program is not 'originally written' until it's been compiled, if we use a higher-level language to generate C and compile <em>that</em> then we are within the letter of the clause." But try getting that past your company's lawyer when you're trying to get the go-ahead for a business-critical application.</p>
<p>Apple may feel that they are in such a strong position in the market that they can dictate that outsiders use the same techniques to write software that are used internally at Apple. But that's not how programming works: it is a continually evolving melange of abstractions, techniques, and tools. It has to be allowed to vary at the individual, team, and industry level if it is to progress. I've worked on C and C++ at the level of <a href="http://www.plumhall.com/">standards compliance suites</a>, I've done my fair share of JavaScript, and I can stumble along in Objective C. But personally, when it comes to the iPhone, my language choice is C#: it's significantly higher-level than C or C++, it's a little more terse and cleaner than Objective C, it has certain language features that are undoubtedly ahead of Objective C (LINQ), and it provides a better type system. That is just one person's opinion and Apple can certainly afford to ignore me, but if they think can ignore the last two decades of advancement in the programming marketplace, they're over-confident.</p>
<p>Those with a sense of historic irony might observe that <strong>Objective C for many years existed only as a code-generating preprocessor</strong> and that a similarly restrictive clause could easily have killed its development and prevented NeXT from creating the software development toolchain that Apple is using today.</p>
<ul>
<li>Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited</li>
</ul>
<p>This clause makes more logical sense. Mobile development is still a resource-constrained environment. While memory, storage, and processing speed are beyond the dreams of yesterday's hobbyists, processor use drains the battery and that is a very big deal indeed. Desktop developers today are generally free to live in whatever abstract model they choose: you want to live in a world where everything is an object, a mathematical function, or an S-Expression? Go for it! There's enough power under the hood to make your program "fast enough."</p>
<p>Not in mobile development. For instance, reading the color of a single pixel on the iPhone is kind of a big deal: you have to allocate a new data buffer, draw into it,and then read the raw bytes at the calculated offset. In <a href="https://www.amazon.com/exec/obidos/ASIN/0321659570/thinkinginnet-20">Erica Sadun's iPhone Developers Cookbook</a>, she dedicates about 50 lines of Objective C code to demonstrate the technique. In MonoTouch, I did it in 45 lines of C# code. Of course, once you've written the function you can call it forever-more with a single line, but you <em>probably</em> will remember that your function has implications in terms of memory and computation resources. Unless you're a very bad programmer, you probably would ensure that you don't create and destroy that buffer every time you want to read or set a pixel.</p>
<p>On the other hand, a Flash developer has the functions pre-written for them: BitmapData.getPixel() and BitmapData.setPixel(). And they <em>probably</em> don't think about those functions having significant overhead -- part of the reason people use Flash is because it's abstracted away just such things. So how can a <a href="https://www.adobe.com/products/air.html">cross-compiler for Flash</a> deal with the line myBitmapData.getPixel()? There are three choices:</p>
<ol>
<li>Treat it as a single programmatic intention -- allocate the buffer, read the data, and deallocate the buffer.</li>
<li>Treat it as two intentions -- (a) "allocate a buffer for further use" and (b) "read the pixel." Keep the buffer around for further use.</li>
<li>Divine the programmer's intent -- if they really only intend to do this once then treat it atomically, if they are going to be doing a lot of pixel manipulation, keep the buffer around</li>
</ol>
<p>All three choices have problems: if you choose 1, but the program <em>does</em> do lots of manipulation, you destroy performance. If you choose 2, you consume memory at a potentially prodigious rate (and even so, you have to write a garbage collector). If you choose 3, you're going to have to wait until researchers develop the "do what I mean" compiler switch, which is still a research project.</p>
<p>That's Apple's legitimate concern with "intermediary translation or compatibility layers": the efficiency and restrictiveness of such layers. MonoTouch is quite efficient, maybe some others won't be. One thing that MonoTouch does (garbage collection), it does well -- perhaps some other implementations won't. MonoTouch makes it very easy to "drop down" to unsafe code or to link in new CocoaTouch APIs, that clearly won't be the case with some others.</p>
<p>So what if Apple kept the clause forbidding translation and compatibility but dropped the first one? So that I write my flow-of-control using whatever language I choose, but I don't write my own "translation or compatibility layer"? That seems reasonable until you realize that there's no difference between a translation layer and a 3rd-party library call. Functions <em>are</em> translation layers: the difference is solely one of intent and extent. And even as far as "extent" goes, C++ template metaprogramming, Boost, and smart pointers have lots of consequences that absolutely reach throughout the application. What if I wanted to use a port of libgc? Legal or not?</p>
<p>In one day, Apple has damaged projects as diverse and good for the iPhone as MonoTouch, <a href="https://unity.com/">Unity3D</a>, and <a href="http://www.appcelerator.com/">Appcelerator</a>. They've sowed Fear, Uncertainty, and Doubt about projects like <a href="https://livecode.com/">RunRev</a> and <a href="https://www.adobe.com/products/air.html">Flash Packager for iPhone</a>. And they've done it with 2 lines of technical absurdity. One hopes that they can come to an understanding with 3rd parties that helps ensure the performance and consistency of applications written for CocoaTouch without draconian restrictions against fundamental programming techniques.</p>
<p>If not, one hopes they go fuck themselves.</p>Using Mathematica to Generate "The Elements" iPad App2010-04-09T09:42:00-10:002010-04-09T09:42:00-10:00larrytag:knowing.net,2010-04-09:/posts/2010/04/using-mathematica-to-generate-the-elements-ipad-app/<p>The most intriguing part of this <a href="https://www.popsci.com/gadgets/article/2010-04/exclusive-making-elements-one-ipads-most-magical-apps">Popular Science article on the creation of the iPad app "The Elements"</a> is the all-too-brief mention of the creation of a higher-level Mathematica program to generate the pages:</p>
<blockquote>
<p>In about 7 of the precious 60 available days, I was able to create from scratch …</p></blockquote><p>The most intriguing part of this <a href="https://www.popsci.com/gadgets/article/2010-04/exclusive-making-elements-one-ipads-most-magical-apps">Popular Science article on the creation of the iPad app "The Elements"</a> is the all-too-brief mention of the creation of a higher-level Mathematica program to generate the pages:</p>
<blockquote>
<p>In about 7 of the precious 60 available days, I was able to create from scratch, using Mathematica, an interactive magic object page layout tool that designer Ann Grafelman was able to use to design all 118 individual element pages in record time.</p>
<p>....</p>
<p>A complete rendering pass for the e-book requires running eight parallel Mathematica processes for a couple of days on the fastest available 8-core Macintosh. But it is a completely automated process, turning a terabyte of image archives into a finished, fully operational 1.9 gigabyte iPad app. This complete automation meant that we were able to experiment with dozens of different layouts and styles, concentrating on creativity, not the grunt work of manual file processing, yet still be able to see the finished book in action after each tweak.</p>
</blockquote>
<p>Behold the double-edged sword of <a href="http://www.knowing.net/index.php/2010/04/08/new-iphone-os-license-threatens-3rd-party-languages/">iPhone's new restrictions on code generation and translation layers</a>! While the intention is to avoid a flood of banal and bloated marketing games, your effect is to outlaw the creation of a "book that Harry Potter would check out of Hogwarts."</p>New iPhone OS License Threatens 3rd Party Languages2010-04-08T11:08:00-10:002010-04-08T11:08:00-10:00larrytag:knowing.net,2010-04-08:/posts/2010/04/new-iphone-os-license-threatens-3rd-party-languages/<p>In certain circles, whatever interesting things there were in Apple's iPhone OS 4.0 unveiling today were overshadowed by some new language in the iPhone Developer Program License Agreement:</p>
<blockquote>
<p>3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call …</p></blockquote><p>In certain circles, whatever interesting things there were in Apple's iPhone OS 4.0 unveiling today were overshadowed by some new language in the iPhone Developer Program License Agreement:</p>
<blockquote>
<p>3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. <strong>Applications must be originally written in Objective-C, C, C++, or JavaScript</strong> as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., <strong>Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited</strong>). [Emphasis added--LOB]</p>
</blockquote>
<p>This is almost certainly a reaction to Adobe's Flash-to-iPhone cross-compiler, but on the face of it, it catches a whole range of 3rd parties in the blast radius. In particular, I've been recommending <a href="https://www.mono-project.com/Main_Page/">MonoTouch</a> as a great solution for C# developers and teams. Although Mono compiles C# code to native code, Mono applications are not "originally written" in one of Apple's preferred languages, so would clearly seem to be prohibited under the new agreement.</p>
<p>The buzz on the monotouch IRC channel is that this restriction only applies to applications that are deployed the AppStore and <em>not to</em> enterprise deployment, which means that even if the restrictive clauses stay in place, MonoTouch might remain a good option for some.</p>
<p>This is a developing story and it doesn't seem to make sense that Apple gains by limiting the universe of programmers for the iPhone. Prohibiting inefficient translation layers and libraries is one thing, prohibiting code generation and higher-level languages is another. One of the showcase apps for the iPad is "The Elements" whose <a href="https://www.popsci.com/gadgets/article/2010-04/exclusive-making-elements-one-ipads-most-magical-apps">media, page layout, and transitions were largely generated in Mathematica</a>. Many games use higher-level languages such as Lua to script AI.</p>
<p>Logically, one would hope that the legal agreement would be clarified with some form of "...except for approved toolchains," and figure out how to work with Novell and Appcelerator and, yes, even Adobe.</p>Sharing a Public Git Repository over HTTP2010-04-08T09:32:00-10:002010-04-08T09:32:00-10:00larrytag:knowing.net,2010-04-08:/posts/2010/04/sharing-a-public-git-repository-over-http/<p><a href="http://www.knowing.net/index.php/2010/04/08/sharing-a-public-git-repository-over-http/config_remote_repo/"><img alt="config_remote_repo" class="alignnone size-full wp-image-4571" height="513" src="/uploads/2010/04/config_remote_repo.jpg" title="config_remote_repo" width="352"></a></p>
<p>via <a href="http://weblog.masukomi.org/2008/03/11/sharing-a-public-git-repo-over-http-flow-chart/">http://weblog.masukomi.org/2008/03/11/sharing-a-public-git-repo-over-http-flow-chart</a></p>Recently Bookmarked...2010-04-08T08:00:00-10:002010-04-08T08:00:00-10:00larrytag:knowing.net,2010-04-08:/posts/2010/04/recently-bookmarked-2/<p>::: {#delicious-posts-lobrien .delicious-posts}
<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a> {#my-delicious-bookmarks .delicious-banner .sidebar-title}</p>
<hr>
<ul>
<li>Popular ideas / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/balsamiq">balsamiq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mockups">mockups</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/design">design</a></li>
<li><a class="delicious-link" href="https://panic.com/blog/the-panic-status-board/">Panic Blog » The Panic Status Board</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/visualization">visualization</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/collaboration">collaboration</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/dashboard">dashboard</a></li>
<li><a class="delicious-link" href="https://www.webfx.com/blog/web-design/html5-iphone-app/">How to Make an HTML5 iPhone App</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/html5">html5</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/javascript">javascript</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mobile">mobile</a></li>
<li><a class="delicious-link" href="http://zeromq.org/">zeromq: Fastest. Messaging. Ever.</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/asynchronous">asynchronous</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/c%2B%2B">c++</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/framework">framework</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/networking">networking</a></li>
<li><a class="delicious-link" href="https://gephi.org/">Gephi, graph exploration and manipulation software …</a></li></ul><p>::: {#delicious-posts-lobrien .delicious-posts}
<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a> {#my-delicious-bookmarks .delicious-banner .sidebar-title}</p>
<hr>
<ul>
<li>Popular ideas / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/balsamiq">balsamiq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mockups">mockups</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/design">design</a></li>
<li><a class="delicious-link" href="https://panic.com/blog/the-panic-status-board/">Panic Blog » The Panic Status Board</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/visualization">visualization</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/collaboration">collaboration</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/dashboard">dashboard</a></li>
<li><a class="delicious-link" href="https://www.webfx.com/blog/web-design/html5-iphone-app/">How to Make an HTML5 iPhone App</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/html5">html5</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/javascript">javascript</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mobile">mobile</a></li>
<li><a class="delicious-link" href="http://zeromq.org/">zeromq: Fastest. Messaging. Ever.</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/asynchronous">asynchronous</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/c%2B%2B">c++</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/framework">framework</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/networking">networking</a></li>
<li><a class="delicious-link" href="https://gephi.org/">Gephi, graph exploration and manipulation software</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/datamining">datamining</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/visualization">visualization</a></li>
<li>Examples - IronRuby In the Browser / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/ruby">ruby</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/ironruby">ironruby</a></li>
<li><a class="delicious-link" href="https://archive.codeplex.com/?p=jsinq">JSINQ - LINQ to Objects for JavaScript</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/linq">linq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/javascript">javascript</a></li>
<li><a class="delicious-link" href="https://weblogs.asp.net/bleroy/a-c-implementation-of-the-callstream-pattern">A C# implementation of the CallStream pattern - Tales from the Evil Empire</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/C%23">C#</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/development">development</a></li>
<li><a class="delicious-link" href="https://blog.agendashift.com/positive-incline/">Kanban in a nutshell « Positive Incline</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/kanban">kanban</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/agile">agile</a></li>
<li><a class="delicious-link" href="https://jsfiddle.net/">Create a new Fiddle - jsFiddle - Online Editor for the Web (JavaScript, MooTools, jQuery, Prototype, YUI, Glow and Dojo, HTML, CSS)</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/jquery">jquery</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/repl">repl</a></li>
<li><a class="delicious-link" href="http://paulstovell.com/blog/jquerypad">jQueryPad</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/jquery">jquery</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/repl">repl</a></li>
<li><a class="delicious-link" href="https://calsky.com/">http://calsky.com/</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/astronomy">astronomy</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/weather">weather</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/almanac">almanac</a></li>
<li><a class="delicious-link" href="http://www.artfulsoftware.com/infotree/queries.php?&bw=1280">Common Queries Tree</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/sql">sql</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/cheatsheet">cheatsheet</a></li>
<li><a class="delicious-link" href="http://www.mapenvelope.com/">Map Envelope</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/creative">creative</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/envelope">envelope</a></li>
<li>
<p><a class="delicious-link" href="http://lambda-the-ultimate.org/node/3854" title="Reactions to Code Bubbles on LtU">Code Bubbles | Lambda the Ultimate</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/ide">ide</a></p>
<p>Reactions to Code Bubbles on LtU</p>
</li>
<li>
<p>Introduction to the Reactive Extensions to JavaScript - Matthew Podwysocki - CodeBetter.Com - Stuff you need to Code Better! / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/javascript">javascript</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/rx">rx</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/jquery">jquery</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/reactive">reactive</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/linq">linq</a></p>
</li>
</ul>
<p>[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien"></a> I am <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">lobrien</a> on <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/">Delicious</a>]{.delicious-network-username}<br>
[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien">Add me to your network</a>]{.delicious-network-add}
:::</p>Wordless Wednesdays: Timelapse Sunset2010-04-07T07:00:00-10:002010-04-07T07:00:00-10:00larrytag:knowing.net,2010-04-07:/posts/2010/04/wordless-wednesdays-movie/Midori Article in SD Times2010-04-06T07:55:00-10:002010-04-06T07:55:00-10:00larrytag:knowing.net,2010-04-06:/posts/2010/04/midori-article-in-sd-times/<p>"Midori" is an operating system project being incubated at Microsoft. A while ago, SD Times acquired some internal specs on Midori, and published this series of articles. Now, in a follow-up article, <a href="https://sdtimes.com/microsoft/midori-concepts-materialize-in-net/">we talk about how it appears that Midori does or does not fit with Microsoft technologies beginning to …</a></p><p>"Midori" is an operating system project being incubated at Microsoft. A while ago, SD Times acquired some internal specs on Midori, and published this series of articles. Now, in a follow-up article, <a href="https://sdtimes.com/microsoft/midori-concepts-materialize-in-net/">we talk about how it appears that Midori does or does not fit with Microsoft technologies beginning to hit the streets</a>.</p>iPad in the Office2010-04-05T09:53:00-10:002010-04-05T09:53:00-10:00larrytag:knowing.net,2010-04-05:/posts/2010/04/ipad-in-the-office/<p>Apple will be the market leader in slate form-factor computers in, oh, another day or two. There are already more applications written specifically for the iPad than have been written specifically for the Tablet PC in 8 years -- by at least one order of magnitude.</p>
<p>Although I'm <a href="http://www.knowing.net/index.php/2010/01/27/tablet-pc-programmer-responds-to-apple-ipad/">dubious</a> about the …</p><p>Apple will be the market leader in slate form-factor computers in, oh, another day or two. There are already more applications written specifically for the iPad than have been written specifically for the Tablet PC in 8 years -- by at least one order of magnitude.</p>
<p>Although I'm <a href="http://www.knowing.net/index.php/2010/01/27/tablet-pc-programmer-responds-to-apple-ipad/">dubious</a> about the first-generation iPad (the screen resolution is my big sticking point -- 768 horizontal pixels is <em>not</em> good enough), there's no doubt that it will be an important consumer device. The question (well, <em>one</em> question...) is how important it will be in the enterprise. The easy answer is that it will be a good fit for certain vertical applications: I think you can expect to see a lot of iPads anyplace the insurance industry is involved -- hospitals, claims adjustment, etc. The more that walking around with a clipboard of forms is part of the job, the more appealing the lightweight slate computer.</p>
<p>But what about in the normal office? You still have vertical internal applications (I hope to be talking at the iPhoneDevCon about enterprise development for the iPhone and iPad) but another thought I had this morning in conversation with Alan Zeichick is that, once the hype fades ever so slightly, the iPad might be a nice device for always-on wall-mounted display for dashboards and calendars:</p>
<p><a href="http://www.knowing.net/index.php/2010/04/05/ipad-in-the-office/status_board_ipad/"><img alt="status_board_ipad" class="alignnone size-full wp-image-4551" height="876" src="/uploads/2010/04/status_board_ipad.png" title="status_board_ipad" width="693"></a></p>Prefab: Modifying UIs via Extreme Screen Scraping2010-04-05T08:31:00-10:002010-04-05T08:31:00-10:00larrytag:knowing.net,2010-04-05:/posts/2010/04/prefab-modifying-uis-via-extreme-screen-scraping/<p>This video shows "Prefab": a research tool that screen scrapes applications at the pixel level, allows the UI to be enhanced (changing cursor or mouse behavior, for instance), and then routes the input to the enhanced UI back to the original. The performance is impressively snappy. It's not clear how …</p><p>This video shows "Prefab": a research tool that screen scrapes applications at the pixel level, allows the UI to be enhanced (changing cursor or mouse behavior, for instance), and then routes the input to the enhanced UI back to the original. The performance is impressively snappy. It's not clear how much programming is involved with some of the more advanced UI behaviors ("parameter spectrum visualization" seems to involve quite a bit of logic), but it's well worth viewing as food for thought.</p>Twitter Weekly Updates for 2010-04-042010-04-04T16:00:00-10:002010-04-04T16:00:00-10:00larrytag:knowing.net,2010-04-04:/posts/2010/04/twitter-weekly-updates-for-2010-04-04/<ul>
<li>The inevitable evolution of those ads seeking "ninja" developers. Are you a UI Assassin? http://ruby.jobmotel.com/jobs/11801 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11289255254">#</a></li>
<li>Lazyweb : How to get root or even just shell access on an Astak Security DVR? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11320414409">#</a></li>
<li>Fred Brooks has a new book out: <a href="http://www.informit.com/store/design-of-design-essays-from-a-computer-scientist-9780201362985">http://www.informit.com/store/product.aspx?isbn …</a></li></ul><ul>
<li>The inevitable evolution of those ads seeking "ninja" developers. Are you a UI Assassin? http://ruby.jobmotel.com/jobs/11801 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11289255254">#</a></li>
<li>Lazyweb : How to get root or even just shell access on an Astak Security DVR? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11320414409">#</a></li>
<li>Fred Brooks has a new book out: <a href="http://www.informit.com/store/design-of-design-essays-from-a-computer-scientist-9780201362985">http://www.informit.com/store/product.aspx?isbn=9780201362985</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11320973854">#</a></li>
<li>MFY Pat Venditte can switch-pitch. It'll be fun to see him go against a switch-hitter. Do rules say who has to establish side first? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11334800849">#</a></li>
<li>New kinds of fame -- my friend Carlos has made it to the front page of Spree's Github page: <a href="https://github.com/railsdog/spree">http://github.com/railsdog/spree</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11348446987">#</a></li>
<li>Test: Kona, Puna, Waimea, Pahoa <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11396263579">#</a></li>
<li>Test: Hilo <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11396400891">#</a></li>
<li>Another voggy day in Kona <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11405439328">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Profit: A Highly Concurrent Fault-Tolerant Programming Language2010-04-01T08:20:00-10:002010-04-01T08:20:00-10:00larrytag:knowing.net,2010-04-01:/posts/2010/04/profit-a-highly-concurrent-fault-tolerant-programming-language/<p>My column for the 4/1 issue of SD Times describes <a href="https://sdtimes.com/windows-net-watch-programming-for-profit/">Profit: A Highly Concurrent Programming Language.</a></p>Wordless Wednesdays - Io2010-03-31T07:26:00-10:002010-03-31T07:26:00-10:00larrytag:knowing.net,2010-03-31:/posts/2010/03/wordless-wednesdays-io/<p><img alt="DSC_5568" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>Twitter Weekly Updates for 2010-03-282010-03-28T16:00:00-10:002010-03-28T16:00:00-10:00larrytag:knowing.net,2010-03-28:/posts/2010/03/twitter-weekly-updates-for-2010-03-28/<ul>
<li>RT @<a class="aktt_username" href="https://twitter.com/rickasaurus">rickasaurus</a>: Astronomers Find Black Holes Do Not Absorb Dark Matter #space <a href="https://www.universetoday.com/60422/astronomers-find-black-holes-do-not-absorb-dark-matter/">http://bit.ly/crdACo</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10880470405">#</a></li>
<li>Conservatives reacting with same fury & dismay that liberals reacted to Iraq 7 yrs ago. My theory: "we'll muddle along." <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10881659982">#</a></li>
<li>Resolver One (Python-powered and -programmable spreadsheet) is one of my 2-3 top new apps in …</li></ul><ul>
<li>RT @<a class="aktt_username" href="https://twitter.com/rickasaurus">rickasaurus</a>: Astronomers Find Black Holes Do Not Absorb Dark Matter #space <a href="https://www.universetoday.com/60422/astronomers-find-black-holes-do-not-absorb-dark-matter/">http://bit.ly/crdACo</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10880470405">#</a></li>
<li>Conservatives reacting with same fury & dismay that liberals reacted to Iraq 7 yrs ago. My theory: "we'll muddle along." <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10881659982">#</a></li>
<li>Resolver One (Python-powered and -programmable spreadsheet) is one of my 2-3 top new apps in the past decade. Buy it on 3/31 for \$40. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10936678518">#</a></li>
<li>They just hit a sewer pipe at Hualalai Center <a href="http://twitpic.com/1aoinf">http://twitpic.com/1aoinf</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10997405498">#</a></li>
<li>Content-Aware Fill <a href="http://blogs.adobe.com/jnack/2010/03/caf_in_ps.html">http://bit.ly/bo77sq</a> looks awesome, but will it be in CS5 or is it just a demo of a future capability? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11045722400">#</a></li>
<li>My lack of graphic skill is killing me on this demo. Good code, but I just know that the reaction is going to be "Ugh! That's not pretty!" <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11056369922">#</a></li>
<li>As I look at a piece of JavaScript '));});' I think how amusing it is that people complain about LISP's parentheses <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11107707688">#</a></li>
<li>Heavy vog today in Kona... :-( <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11112599621">#</a></li>
<li>Almost pau hana... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11120258871">#</a></li>
<li>Pau hana! No work til Monday... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11124835695">#</a></li>
<li>What is the equivalent of GGeoXml in Google Maps API 3? #lazyweb #google_maps #geolocating <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11156564224">#</a></li>
<li>I love it when a plan comes together... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/11161638110">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>This Does Appear To Be The Accepted Definition....2010-03-27T14:36:00-10:002010-03-27T14:36:00-10:00larrytag:knowing.net,2010-03-27:/posts/2010/03/this-does-appear-to-be-the-accepted-definition/<p><img alt="" src="http://i192.photobucket.com/albums/z167/Great_WhiteSnark/Nerd_Dork_Geek_Venn_Diagram.jpg"></p>
<p>Original: Matthew Mason</p>But this... Is not our planet. This is ... Puna.2010-03-27T07:34:00-10:002010-03-27T07:34:00-10:00larrytag:knowing.net,2010-03-27:/posts/2010/03/this-isnt-our-planet-this-is-puna/<p>Adrian Brody and company go mauka from MacKenzie Park and get some stink-eye.</p>A Real Turing Machine2010-03-26T07:59:00-10:002010-03-26T07:59:00-10:00larrytag:knowing.net,2010-03-26:/posts/2010/03/a-real-turing-machine/<p>Amazing. This guy created <a href="http://aturingmachine.com/">a real Turing machine built around a dry-erase marker, film leader, and a Webcam</a>.</p>Wordless Wednesdays: Feral Jungle Cock2010-03-24T09:01:00-10:002010-03-24T09:01:00-10:00larrytag:knowing.net,2010-03-24:/posts/2010/03/wordless-wednesdays-feral-jungle-cock/<p><img alt="DSC_2959" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>Interview with Mark Michaelis, Author of Essential C#2010-03-23T09:53:00-10:002010-03-23T09:53:00-10:00larrytag:knowing.net,2010-03-23:/posts/2010/03/interview-with-mark-michaelis-author-of-essential-c/<p>My <a href="http://www.informit.com/articles/article.aspx?p=1575188">interview with Mark Michaelis, author of Essential C#</a>.</p>Recently Bookmarked...2010-03-22T08:28:00-10:002010-03-22T08:28:00-10:00larrytag:knowing.net,2010-03-22:/posts/2010/03/recently-bookmarked/<p>::: {#delicious-posts-lobrien .delicious-posts}
<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a> {#my-delicious-bookmarks .delicious-banner .sidebar-title}</p>
<hr>
<ul>
<li>JIT, NGen, and other Managed Code Generation Stuff : Tail Call Improvements in .NET Framework 4 / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/clr">clr</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/.net">.net</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/dsl">dsl</a></li>
<li><a class="delicious-link" href="https://www.engineyard.com/">Rails in the Cloud | Ruby Support | Engine Yard</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/rails">rails</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/cloud">cloud</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/hosting">hosting</a></li>
<li><a class="delicious-link" href="https://www.odata.org/producers/">OData Producers</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/odata">odata</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/wcf">wcf</a></li>
<li><a class="delicious-link" href="https://nodejs.org/en/">node.js</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/javascript">javascript</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/framework">framework</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a></li>
<li>
<p><a class="delicious-link" href="http://thedailywtf.com/articles/Up-or-Out-Solving-the-IT-Turnover-Crisis" title="An argument for the Cravath system">Up or Out …</a></p></li></ul><p>::: {#delicious-posts-lobrien .delicious-posts}
<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a> {#my-delicious-bookmarks .delicious-banner .sidebar-title}</p>
<hr>
<ul>
<li>JIT, NGen, and other Managed Code Generation Stuff : Tail Call Improvements in .NET Framework 4 / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/clr">clr</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/.net">.net</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/dsl">dsl</a></li>
<li><a class="delicious-link" href="https://www.engineyard.com/">Rails in the Cloud | Ruby Support | Engine Yard</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/rails">rails</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/cloud">cloud</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/hosting">hosting</a></li>
<li><a class="delicious-link" href="https://www.odata.org/producers/">OData Producers</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/odata">odata</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/wcf">wcf</a></li>
<li><a class="delicious-link" href="https://nodejs.org/en/">node.js</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/javascript">javascript</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/framework">framework</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a></li>
<li>
<p><a class="delicious-link" href="http://thedailywtf.com/articles/Up-or-Out-Solving-the-IT-Turnover-Crisis" title="An argument for the Cravath system">Up or Out: Solving the IT Turnover Crisis - The Daily WTF</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/hiring">hiring</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/productivity">productivity</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/business">business</a></p>
<p>An argument for the Cravath system</p>
</li>
</ul>
<p>[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien"></a> I am <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">lobrien</a> on <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/">Delicious</a>]{.delicious-network-username}<br>
[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien">Add me to your network</a>]{.delicious-network-add}
:::</p>Twitter Weekly Updates for 2010-03-212010-03-21T16:00:00-10:002010-03-21T16:00:00-10:00larrytag:knowing.net,2010-03-21:/posts/2010/03/twitter-weekly-updates-for-2010-03-21/<ul>
<li>Hadn't heard about the Massa scandal before SNL last night. Now: Happy that I refer to my favorite pastime as "freediving," nor "snorkeling" <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10490530263">#</a></li>
<li>LOL: http://www.google.com/search?q=recursion <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10529822659">#</a></li>
<li>I love music but \<span class="math">\(380K for HI County brass band is stupid. Defund and let 'em raise funds as …</span></li></ul><ul>
<li>Hadn't heard about the Massa scandal before SNL last night. Now: Happy that I refer to my favorite pastime as "freediving," nor "snorkeling" <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10490530263">#</a></li>
<li>LOL: http://www.google.com/search?q=recursion <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10529822659">#</a></li>
<li>I love music but \<span class="math">\(380K for HI County brass band is stupid. Defund and let 'em raise funds as nonprofit. Put \\)</span> in music educ or fix potholes <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10534088093">#</a></li>
<li>Jetski becomes Hovercraft becomes Plane. \<span class="math">\(13K. Ridiculous markup! The plans can be bought from comic books for \\)</span>10 http://bit.ly/d1QCs0 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10538688860">#</a></li>
<li>When you create a patch for FOSS while working for a client, do you credit client with patch ("This patch supported by...") or somesuch? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10544404606">#</a></li>
<li>The one day a year Tina can't veto me playing Stiff Little Fingers really, REALLY loudly. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10636434738">#</a></li>
<li>Spend 90% of your money today on women and Irish whiskey. Waste the rest. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10644805298">#</a></li>
<li>Note to self: Never get another haircut from a barber leaving town in 4 days. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10646106651">#</a></li>
<li>RIP Alex Chilton: <a href="https://www.staradvertiser.com/2011/01/16/hawaii-news/breaking-a-bag-habit-takes-time/100318004/?source=rss_twitter">http://bit.ly/awXLrk</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10680238114">#</a></li>
<li>Kindle for Mac S/W Now Available: <a href="https://www.amazon.com/gp/kindle/mac/download/ref=amb_link_151329822_1?pf_rd_m=ATVPDKIKX0DER&pf_rd_s=center-1&pf_rd_r=1B22B5NVCGRGY1G0F854&pf_rd_t=1401&pf_rd_p=1250062022&pf_rd_i=1000464931">http://bit.ly/aUFRi5</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10683420262">#</a></li>
<li>XBox has died: locks up with graphics freeze shortly after boot. eBay used console or spend 3x for new unit? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10688294933">#</a></li>
<li>"What would you do with 48 cores?" AMD contest, \$8K hardware prize. Deadline 3/24 <a href="https://community.amd.com/">http://bit.ly/bf8iyC</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10690015951">#</a></li>
<li>Is it true that film stock is transparent to IR? So can you make an IR filter for your DSLR from a med-format negative of a graycard? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10695168628">#</a></li>
<li>Alan Zeichick's dead-on take of CocoaTouch vs. Android vs. Win7 Phone: http://bit.ly/b1TZqV <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10737705293">#</a></li>
<li>Yep. <a href="http://sleepingtime.org/larry-obrien">http://www.sleepingtime.org/lobrien</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10738924544">#</a></li>
<li>Passed sign waver dressed as a mattress. In Hawaii. At 11am. #living_the_dream <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10741363484">#</a></li>
<li>Elapsed time: 14 minutes. My costco-Fu is unbeatable! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10741932698">#</a></li>
<li>"Multicore requires OS rework, Windows architect advises http://bit.ly/cFZ4Gz" via @<a class="aktt_username" href="https://twitter.com/rickasaurus">rickasaurus</a> -> MS is just realizing this NOW? Can't be. <a class="aktt_tweet_reply" href="https://twitter.com/rickasaurus/statuses/10783856992">in reply to rickasaurus</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10784494793">#</a></li>
<li>Happy Spring Equinox! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10784891158">#</a></li>
<li>4th or 5th rainshower this week in Kona. Looks like the drought's breaking... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10796062778">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>"MyPad": My Latest Column for SD Times2010-03-20T09:59:00-10:002010-03-20T09:59:00-10:00larrytag:knowing.net,2010-03-20:/posts/2010/03/mypad-my-latest-column-for-sd-times/<p>My latest column for SD Times laments the sad fact that <a href="https://sdtimes.com/tablet-computing/windows-net-watch-mypad/">the Tablet PC has never generated a fraction of the development demand of the iPad.</a></p>Kindle DX Update Improves PDF Experience2010-03-20T08:28:00-10:002010-03-20T08:28:00-10:00larrytag:knowing.net,2010-03-20:/posts/2010/03/kindle-dx-update-improves-pdf-experience/<p>A recent update to the Kindle DX answers <a href="http://www.knowing.net/index.php/2009/07/14/kindle-dx-review/">my #1 complaint about PDF reading</a> on the "big screen" Kindle. Now, the Kindle DX automatically crops the whitespace margins of a PDF file. By removing these "gutters," the reading experience of a portrait-formatted magazine or journal article has been significantly improved …</p><p>A recent update to the Kindle DX answers <a href="http://www.knowing.net/index.php/2009/07/14/kindle-dx-review/">my #1 complaint about PDF reading</a> on the "big screen" Kindle. Now, the Kindle DX automatically crops the whitespace margins of a PDF file. By removing these "gutters," the reading experience of a portrait-formatted magazine or journal article has been significantly improved.</p>
<p>However, I have to share an unexpected development: for some reason, I find myself preferring the long-duration reading experience on my first-generation Kindle to the reading experience on the DX. I don't know what it is, exactly, but it seems to be the subtle influence of three things:</p>
<ul>
<li>The paperback-size of the 1st-gen Kindle is just enough smaller to be unobtrusive on the coffee table</li>
<li>The page-turn button of the 1st-gen Kindle is right under my thumb, so page turns are totally unobtrusive (people complained about the look of the 1st gen Kindle -- I think it's wonderfully ergonomic)</li>
<li>The amount of text on the smaller screen is enough to be read at regular reading speed (say, 300-400 WPM) but with less actual eye movement. While it's not quite <a href="https://en.wikipedia.org/wiki/Rapid_Serial_Visual_Presentation">Rapid Serial Visual Presentation</a>, it's very pleasant.</li>
</ul>
<p>Of course, the DX is <em>much</em> better for technical documents, source code, and magazines, but I've found myself moving novels onto my first-gen and keeping my DX by my desk.</p>Wordless Wednesdays -- Jackson's Chameleon2010-03-17T08:00:00-10:002010-03-17T08:00:00-10:00larrytag:knowing.net,2010-03-17:/posts/2010/03/wordless-wednesdays-jacksons-chameleon/<p><img alt="Jackson's Chameleon" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>Project Manager's vs. Developer's View2010-03-16T08:00:00-10:002010-03-16T08:00:00-10:00larrytag:knowing.net,2010-03-16:/posts/2010/03/project-managers-vs-developers-view/<p><img alt="zones_of_tech" class="alignnone size-full wp-image-4515" height="665" src="/uploads/2010/03/zones_of_tech.png" title="zones_of_tech" width="650"></p>
<p>From darkgreyindustries.com</p>Zeitgeist of Programming Books2010-03-15T12:23:00-10:002010-03-15T12:23:00-10:00larrytag:knowing.net,2010-03-15:/posts/2010/03/zeitgeist-of-programming-books/<p>This press release, announcing <a href="https://get.oreilly.com/email-signup.html?utm_medium=email&utm_source=oreilly.com&utm_campaign=na&utm_content=20180518+ipost+redirect">"Learning iPhone Programming" and "Developing Large Web Applications"</a> somehow struck me as perfectly fitting the zeitgeist of the development world today.</p>Recent Articles of Interest2010-03-15T08:00:00-10:002010-03-15T08:00:00-10:00larrytag:knowing.net,2010-03-15:/posts/2010/03/recent-articles-of-interest/<p><a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a></p>
<ul>
<li><a class="delicious-link" href="https://support.office.com/en-us/article/Get-Transform-and-Power-Pivot-in-Excel-42d895c2-d1d7-41d0-88da-d1ed7ecc102d">PowerPivot | Home</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/anayltics">anayltics</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/data">data</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/datamining">datamining</a></li>
<li><a class="delicious-link" href="https://www.engadget.com/topics/apple/">iPhone devsugar: Create shiny buttons easily</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a></li>
<li><a class="delicious-link" href="http://www.lucky.com/iprocessing">Processing Language for iPhone</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/processing">processing</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/visualization">visualization</a></li>
<li><a class="delicious-link" href="https://arstechnica.com/gadgets/2010/03/how-to-real-world-dates-with-the-iphone-sdk/">How-to: real-world dates with the iPhone SDK</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone">iphone</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/programming">programming</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/nsdate">nsdate</a></li>
<li>Using Mongo With LINQ / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/linq">linq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mongodb">mongodb</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/nosql">nosql</a></li>
<li><a class="delicious-link" href="http://cwe.mitre.org/top25/#Listing">CWE - 2010 CWE/SANS Top 25 Most Dangerous Programming …</a></li></ul><p><a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a></p>
<ul>
<li><a class="delicious-link" href="https://support.office.com/en-us/article/Get-Transform-and-Power-Pivot-in-Excel-42d895c2-d1d7-41d0-88da-d1ed7ecc102d">PowerPivot | Home</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/anayltics">anayltics</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/data">data</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/datamining">datamining</a></li>
<li><a class="delicious-link" href="https://www.engadget.com/topics/apple/">iPhone devsugar: Create shiny buttons easily</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a></li>
<li><a class="delicious-link" href="http://www.lucky.com/iprocessing">Processing Language for iPhone</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/processing">processing</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/visualization">visualization</a></li>
<li><a class="delicious-link" href="https://arstechnica.com/gadgets/2010/03/how-to-real-world-dates-with-the-iphone-sdk/">How-to: real-world dates with the iPhone SDK</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone">iphone</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/programming">programming</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/nsdate">nsdate</a></li>
<li>Using Mongo With LINQ / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/linq">linq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mongodb">mongodb</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/nosql">nosql</a></li>
<li><a class="delicious-link" href="http://cwe.mitre.org/top25/#Listing">CWE - 2010 CWE/SANS Top 25 Most Dangerous Programming Errors</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/coding">coding</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/security">security</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/checklist">checklist</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/lists">lists</a></li>
<li>60+ .NET libraries every developer should know about. / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/c%23">c#</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/dotnet">dotnet</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/lists">lists</a></li>
<li>John R. Durant's WebLog : Excel Open XML & LINQ Part I / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/linq">linq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/openxml">openxml</a></li>
<li><a class="delicious-link" href="https://sdtimes.com/appcelerator/appcelerator-dev-environment-targets-android-iphone/">Appcelerator dev environment targets Android, iPhone - SD Times: Software Development News</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone_dev">iphone_dev</a></li>
<li>50+ CSS Techniques Designers Should Know / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/css">css</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdesign">webdesign</a></li>
<li><a class="delicious-link" href="http://www.geektantra.com/2010/02/jquery-sliding-menu/">jQuery Sliding Menu (AKA Lavalamp Menu) | GeekTantra</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/jquery">jquery</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/menu">menu</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/navigation">navigation</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a></li>
<li><a class="delicious-link" href="https://weblogs.asp.net/bleroy/fluentpath-a-fluent-wrapper-around-system-io">FluentPath: a fluent wrapper around System.IO - Tales from the Evil Empire</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/c%23">c#</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/fluent">fluent</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/system.io">system.io</a></li>
<li><a class="delicious-link" href="http://www.codecapers.com/">Code Capers | Goodbye Http Handler, Hello FileResult</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/aspnetmvc">aspnetmvc</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/image">image</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/httphandler">httphandler</a></li>
<li><a class="delicious-link" href="https://github.com/ayende/Example.MapReduce">ayende's Example.MapReduce at master - GitHub</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mapreduce">mapreduce</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/c%23">c#</a></li>
<li>Using Mongo With LINQ / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/linq">linq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mongodb">mongodb</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/nosql">nosql</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/database">database</a></li>
</ul>
<p>[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien"></a> I am <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">lobrien</a> on <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/">Delicious</a>]{.delicious-network-username}<br>
[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien">Add me to your network</a>]{.delicious-network-add}</p>Twitter Weekly Updates for 2010-03-142010-03-14T16:00:00-10:002010-03-14T16:00:00-10:00larrytag:knowing.net,2010-03-14:/posts/2010/03/twitter-weekly-updates-for-2010-03-14/<ul>
<li>Signing off so that I can watch the Oscars spoiler-free. Up "Hurt Locker"! Down "Avatar"! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10143968859">#</a></li>
<li>Edward Tufte takes Gov't app't to chair production of reports on recovery spending. http://bit.ly/aTiWaf <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10182422655">#</a></li>
<li>First good rain in Kona in months yesterday afternoon. Cleaned out sky for gorgeous stars and blazing mars …</li></ul><ul>
<li>Signing off so that I can watch the Oscars spoiler-free. Up "Hurt Locker"! Down "Avatar"! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10143968859">#</a></li>
<li>Edward Tufte takes Gov't app't to chair production of reports on recovery spending. http://bit.ly/aTiWaf <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10182422655">#</a></li>
<li>First good rain in Kona in months yesterday afternoon. Cleaned out sky for gorgeous stars and blazing mars. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10183908404">#</a></li>
<li>Any other #oceanic cable subscribers get a black screen on the HD Oscar feed last night? Happy I caught it quickly and switched over to SD <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10187705414">#</a></li>
<li>Was going "awww..." at new chick brood when hen of last week's brood showed up and established "pecking order." Chickens fight nasty. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10195789098">#</a></li>
<li>Felt the 4.4M EQ in Kalaoa, but it was minor shake here -- "I think that was an EQ"-level. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10206990881">#</a></li>
<li>I may have to move back to the mainland just so I can see Tron in 3D. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10229958828">#</a></li>
<li>Got a strong opinion about Ruby IDEs? DM me -- I'm writing an article... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10230056673">#</a></li>
<li>Writing Ruby program that solves problem: 1 hr. Getting ActiveRecord to work with ODBC on client's XP machine: 2 hrs and counting. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10235384623">#</a></li>
<li>Today would be the 76th birthday of Yuri Gagarin, first human in outer space. He died in 1968. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10238211413">#</a></li>
<li>I segfaulted on a client's machine and now power's out on Oahu. Damn, I'm good. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10247064756">#</a></li>
<li>Great talk by Josh Wallawender <a href="https://www.twilightlandscapes.com/">http://www.twilightlandscapes.com</a> at astro club last night. Automated observatories: new science for cheap. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10281866440">#</a></li>
<li>602SQL ODBC driver : Segfaults with Ruby and C# on any access. Anyone ever work with this thing? Should I bother to try JDBC driver? PHP? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10282696842">#</a></li>
<li>The only way to learn C++ in 21 days : <a href="https://abstrusegoose.com/249">http://abstrusegoose.com/249</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10283429084">#</a></li>
<li>Chuck Norris turns 70 today. Now he's Miyagi-Norris. Next: Zombie-Norris. More unbeatable every day. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10283605035">#</a></li>
<li>One thing I hate about initial engagements: Just identifying rather than exploring (and fixing) problems. "Maybe easy, maybe hard." :-( <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10286968933">#</a></li>
<li>RT @<a class="aktt_username" href="https://twitter.com/CTarleton">CTarleton</a>: @<a class="aktt_username" href="https://twitter.com/HonAdv">HonAdv</a> I would rather pay for tsunami safety than a special election, if you don't mind. Thanks. (via @<a class="aktt_username" href="https://twitter.com/account/suspended">Cynthia_Hoskins</a>) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10287260283">#</a></li>
<li>Nanoconchord: The time between discovering Jemaine Clement is in "Gentlemen Broncos" and moving it to the top of your Netflix queue. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10292233599">#</a></li>
<li>Told nephew we didn't have robotics competition when I was his age. "How tech has changed the world" he sez. I'll show you old, you little b <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10299009713">#</a></li>
<li>iProcessing: The Processing language ported to the iPhone. http://luckybite.com/iprocessing/ <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10333141822">#</a></li>
<li>Totally distracted by a totally non-critical email. If I could only channel the amount of work I put into being lazy... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10334909023">#</a></li>
<li>RT \@agilenature: LOL: A day in the life of a programmer [PIC] <a href="http://adjix.com/xyfk">http://adjix.com/xyfk</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10342165514">#</a></li>
<li>Is Jerry Remy (RemDawg) going to be back announcing for the Red Sox this year? My MBL.TV subscription choice depends on it... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10384083870">#</a></li>
<li>Watching nephew's robotic team compete at <a href="http://bbrobotics.org/mul_liveStream.aspx">http://bbrobotics.org/mul_liveStream.aspx</a> Kill! Crush! Destroy! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10387342060">#</a></li>
<li>Hawaii tweeps: Any truth to rumor discount meat trucks are cover for burglary ring? #bialoha <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10433726909">#</a></li>
<li>Nephew's robotic team battling leaders. SWEEP THE LEG! COBRAI KAI! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10434951339">#</a></li>
<li>Messier Marathon Star Party up at Mauna Kea VIS tonight. Sounds like >6 telescopes with 18"+ apertures will be there. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10436770563">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Worldess Wednesdays - Anchaline Pool, Honaunau2010-03-10T08:00:00-10:002010-03-10T08:00:00-10:00larrytag:knowing.net,2010-03-10:/posts/2010/03/worldess-wednesdays-anchaline-pool-honaunau/<p><img alt="DSC_0082_3_4HDR_tonemapped" height="1024" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_l.png" width="683"></p>Recently Bookmarked on Delicious...2010-03-08T09:44:00-10:002010-03-08T09:44:00-10:00larrytag:knowing.net,2010-03-08:/posts/2010/03/recently-bookmarked-on-delicious/<p>::: {#delicious-posts-lobrien .delicious-posts}
<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a> {#my-delicious-bookmarks .delicious-banner .sidebar-title}</p>
<hr>
<ul>
<li><a class="delicious-link" href="https://github.com/ayende/Example.MapReduce">ayende's Example.MapReduce at master - GitHub</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mapreduce">mapreduce</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/c%23">c#</a></li>
<li>Using Mongo With LINQ / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/linq">linq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mongodb">mongodb</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/nosql">nosql</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/database">database</a></li>
<li><a class="delicious-link" href="https://blog.directededge.com/2009/02/27/on-building-a-stupidly-fast-graph-database/">Directed Edge - Blog - On Building a Stupidly Fast Graph Database</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/algorithm">algorithm</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/concurrency">concurrency</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/database">database</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/graphs">graphs</a></li>
<li><a class="delicious-link" href="https://github.com/google/diff-match-patch">google-diff-match-patch - Project Hosting on Google Code</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/programming">programming</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/algorithm">algorithm</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/diff">diff</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/match">match …</a></li></ul><p>::: {#delicious-posts-lobrien .delicious-posts}
<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">My Delicious Bookmarks</a> {#my-delicious-bookmarks .delicious-banner .sidebar-title}</p>
<hr>
<ul>
<li><a class="delicious-link" href="https://github.com/ayende/Example.MapReduce">ayende's Example.MapReduce at master - GitHub</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mapreduce">mapreduce</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/c%23">c#</a></li>
<li>Using Mongo With LINQ / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/linq">linq</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mongodb">mongodb</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/nosql">nosql</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/database">database</a></li>
<li><a class="delicious-link" href="https://blog.directededge.com/2009/02/27/on-building-a-stupidly-fast-graph-database/">Directed Edge - Blog - On Building a Stupidly Fast Graph Database</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/algorithm">algorithm</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/concurrency">concurrency</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/database">database</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/performance">performance</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/graphs">graphs</a></li>
<li><a class="delicious-link" href="https://github.com/google/diff-match-patch">google-diff-match-patch - Project Hosting on Google Code</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/programming">programming</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/algorithm">algorithm</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/diff">diff</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/match">match</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/text">text</a></li>
<li>The Ultimate Guide to Creating a Design and Converting it to HTML and CSS | Nettuts+ / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/webdev">webdev</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/iphone">iphone</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/html">html</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/css">css</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/layout">layout</a></li>
<li><a class="delicious-link" href="https://docs.microsoft.com/en-us/previous-versions/windows/silverlight/dotnet-windows-silverlight/mt788654(v=msdn.10)">Silverlight Unit Testing, RhinoMocks, Unity and Resharper. - Justin myJustin = new Microsoft.Silverlight.Justin();</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/silverlight">silverlight</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/testing">testing</a></li>
<li>Protostack • Driving a 7 segment display with a 4511 BCD to 7 Segment Driver / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/hardware">hardware</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/electronics">electronics</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/tutorial">tutorial</a></li>
<li><a class="delicious-link" href="http://www.openscad.org/">OpenSCAD - The Programmers Solid 3D CAD Modeller</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/3d">3d</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/cad">cad</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/design">design</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/openscad">openscad</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/modeling">modeling</a></li>
<li><a class="delicious-link" href="http://www.tbray.org/ongoing/When/200x/2009/12/01/Clojure-Theses">ongoing by Tim Bray · Concur.next — Eleven Theses on Clojure</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/clojure">clojure</a></li>
<li>Eureqa | Cornell Computational Synthesis Laboratory / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/visualization">visualization</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/analysis">analysis</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/statistics">statistics</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/AI">AI</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/tools">tools</a> <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/mathematics">mathematics</a></li>
<li><a class="delicious-link" href="http://www.tbray.org/ongoing/When/200x/2009/11/03/Clojure-N00b-Advice">ongoing by Tim Bray · Clojure N00b Tips</a> / <a class="delicious-tag" href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien/clojure">clojure</a></li>
</ul>
<p>[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien"></a> I am <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/lobrien">lobrien</a> on <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/">Delicious</a>]{.delicious-network-username}<br>
[<a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien"></a> <a href="https://chrome.google.com/webstore/detail/dmail/ebmgnpkbhncfpnoeihkmkhmccbgagghc/network?add=lobrien">Add me to your network</a>]{.delicious-network-add}
:::</p>Twitter Weekly Updates for 2010-03-072010-03-07T15:00:00-10:002010-03-07T15:00:00-10:00larrytag:knowing.net,2010-03-07:/posts/2010/03/twitter-weekly-updates-for-2010-03-07/<ul>
<li>Applying for data-centric jobs. I think of myself as an algorithm / performance guy, so it's weird to write cover letters with DBA stuff... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9840487783">#</a></li>
<li>USA vs CAN hockey game was epic. Hope it helps NHL. Togue-wearing syrup-suckers: health-care AND gold? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9840625952">#</a></li>
<li>Skinput from CMU and MSR <a href="https://www.youtube.com/watch?v=RCgY_RIvDyE">http://www.youtube.com/watch?v …</a></li></ul><ul>
<li>Applying for data-centric jobs. I think of myself as an algorithm / performance guy, so it's weird to write cover letters with DBA stuff... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9840487783">#</a></li>
<li>USA vs CAN hockey game was epic. Hope it helps NHL. Togue-wearing syrup-suckers: health-care AND gold? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9840625952">#</a></li>
<li>Skinput from CMU and MSR <a href="https://www.youtube.com/watch?v=RCgY_RIvDyE">http://www.youtube.com/watch?v=RCgY_RIvDyE</a> Possible apps: "Ouch! Quit it!" and "Stop poking me!" <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9887094794">#</a></li>
<li>eWeek Labs is looking for a Senior Analyst (software/hardware reviewer). Man, if I were in SF, I'd be on that job like a roomba on a rug. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9902299248">#</a></li>
<li>#FiveMinuteEnergy should rewrite my .HOSTS file so that all IP addresses redirect to my dev server <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9932639964">#</a></li>
<li>Proved jQuery is adequate for a project thought to only be possible with Flash/Silverlight, but how much time to be lost to browser tweaks? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9934973720">#</a></li>
<li>"The Man Your Man Could Smell Like" is all sets and props. Wow. <a href="https://www.youtube.com/watch?v=VDk9jjdiXJQ">http://www.youtube.com/watch?v=VDk9jjdiXJQ</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9936451316">#</a></li>
<li>Got my first CC statement with "If you only pay the min amt, it will take you..." statement. Happy that carrying \$0 is my #1 rule... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9942796994">#</a></li>
<li>Serenity Now!!!!!!! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9950115324">#</a></li>
<li>Has Roger Ebert given you \$4.99 worth of value in your life? <a href="https://www.rogerebert.com/rogers-journal/introducing-the-ebert-club">http://bit.ly/aEfuZQ</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9950705971">#</a></li>
<li>Ballmer practically choked saying "The AppStore, where Apple did a great job..." <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9984435227">#</a></li>
<li>Bing Maps with Photosynth integration available at <a href="https://www.bing.com/maps?FORM=FLREDR">http://www.bing.com/maps/explore</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9984817470">#</a></li>
<li>Schadenfreude, my old friend <a href="https://www.cbsnews.com/news/hypocrisy-alert-calif-politician-roy-ashburn-arrested-for-allegedly-driving-drunk-it-gets-worse/">http://bit.ly/cNmQhk</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9991045859">#</a></li>
<li>LINQ to Mongo! http://blog.wekeroad.com/2010/03/04/using-mongo-with-linq <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9994694051">#</a></li>
<li>If they have this, you KNOW they're about to unveil Iron Man: <a href="https://spaceflightnow.com/atlas/av012/100225x37arrival/">http://bit.ly/cEYvlv</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10092616699">#</a></li>
<li>I just got the Mac Heist bundle. 7 fantastic apps worth \<span class="math">\(260+ for only \\)</span>20 and got 3 great bonus apps free! <a href="https://www.macheist.com/">http://bit.ly/heist-it</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10132693400">#</a></li>
<li>"CoverScout" from the MacHeist bundle fills in your missing album art. Didn't think it would be that big a deal, but it's a blast to use. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/10135418991">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Misleading Photo For New Microsoft Tablet Formfactor2010-03-05T11:28:00-10:002010-03-05T11:28:00-10:00larrytag:knowing.net,2010-03-05:/posts/2010/03/misleading-photo-for-new-microsoft-tablet-formfactor/<p>Twitter's buzzing with technolust based on an <a href="https://www.engadget.com/2010/03/05/microsofts-courier-digital-journal-exclusive-pictures-and-de/">Engadget</a> article picturing a Microsoft concept-computer.</p>
<p><a href="https://www.engadget.com/2010/03/05/microsofts-courier-digital-journal-exclusive-pictures-and-de/"><img alt="03-05-10courier" class="size-full wp-image-4492 alignnone" height="152" src="/uploads/2010/03/03-05-10courier.jpg" title="03-05-10courier" width="200"></a></p>
<p>Looks lovely, but the photo is misleading. It shows lines of cursive writing that are fraction of a size of the reader's fingernail. Take a look at this blowup:</p>
<p><img alt="screen-shot-2010-03-05-at-105756-am" class="alignnone size-medium wp-image-4493" height="167" src="/uploads/2010/03/screen-shot-2010-03-05-at-105756-am-300x167.png" title="screen-shot-2010-03-05-at-105756-am" width="300"></p>
<p>Based on my fingernail, that cursive writing is …</p><p>Twitter's buzzing with technolust based on an <a href="https://www.engadget.com/2010/03/05/microsofts-courier-digital-journal-exclusive-pictures-and-de/">Engadget</a> article picturing a Microsoft concept-computer.</p>
<p><a href="https://www.engadget.com/2010/03/05/microsofts-courier-digital-journal-exclusive-pictures-and-de/"><img alt="03-05-10courier" class="size-full wp-image-4492 alignnone" height="152" src="/uploads/2010/03/03-05-10courier.jpg" title="03-05-10courier" width="200"></a></p>
<p>Looks lovely, but the photo is misleading. It shows lines of cursive writing that are fraction of a size of the reader's fingernail. Take a look at this blowup:</p>
<p><img alt="screen-shot-2010-03-05-at-105756-am" class="alignnone size-medium wp-image-4493" height="167" src="/uploads/2010/03/screen-shot-2010-03-05-at-105756-am-300x167.png" title="screen-shot-2010-03-05-at-105756-am" width="300"></p>
<p>Based on my fingernail, that cursive writing is about 3mm tall. You <em>might</em> be able to <em>read</em> 8 point cursive handwriting on a high-resolution dispay, but there's no way under Heaven that you can write anywhere <em>near</em> that size, especially not using a stylus on a glass screen.</p>
<p>In fact, using a stylus on a Tablet PC, you write about 33-50% <em>larger</em> than you do on a piece of paper because your cursive writing is based on the muscle memory of pushing a pen or pencil over paper, which is more resistant. Personally, my experience is that on the 12" diagonal screen of my Tablet PC, it "feels" like a writing area close to a 4" x 6" index card.</p>
<p>Don't get me wrong -- the Microsoft Courier looks like a great form-factor. But the user experience implied by that photo is not realistic. It's perfectly possible to imagine that what's shown is a zoomed-out page and that when you're writing and sketching you're zoomed in to a much smaller viewport. But the user experience that everyone dreams of -- the user experience of a digital Moleskine notebook -- requires innovation in either the screen surface or the stylus tip. As far as the iPad and the idea that dragging your great big finger across a piece of glass is going to be an acceptable way to write or draw, the sooner you give up on that hope, the better.</p>Electronic Review Copies: Kudos to ORA & MS Press2010-03-05T08:31:00-10:002010-03-05T08:31:00-10:00larrytag:knowing.net,2010-03-05:/posts/2010/03/electronic-review-copies-kudos-to-ora-ms-press/<p>O'Reilly and Microsoft Press have recently switched to using eBooks as the preferred media for distributing review copies. Like all book reviewers, I receive more books than I actually review. However, since I live in Hawaii, the physical and energy waste of a book that goes unread and for which …</p><p>O'Reilly and Microsoft Press have recently switched to using eBooks as the preferred media for distributing review copies. Like all book reviewers, I receive more books than I actually review. However, since I live in Hawaii, the physical and energy waste of a book that goes unread and for which its difficult to find a home (no colleges on my side of the island) is apparent.</p>
<p>I hope other publishers follow in their footsteps and switch to eBooks (preferably not non-reflowable PDF!) as the default format for reviewers.</p>10 Most Influential Software Development Books of the Past 10 Years2010-03-04T09:00:00-10:002010-03-04T09:00:00-10:00larrytag:knowing.net,2010-03-04:/posts/2010/03/10-most-influential-software-development-books-of-the-past-10-years/<p>My article on the 10 most influential software development books of the past 10 years only appeared in the 2/15 print edition of SD Times.</p>
<p>If you're interested, here are Amazon affiliate links to the books:</p>
<ul>
<li><a href="https://www.amazon.com/gp/product/0321150783?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321150783">Lean Software Development: An Agile Toolkit</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0321150783" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/097451408X?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=097451408X">Practices of an Agile Developer: Working in …</a></li></ul><p>My article on the 10 most influential software development books of the past 10 years only appeared in the 2/15 print edition of SD Times.</p>
<p>If you're interested, here are Amazon affiliate links to the books:</p>
<ul>
<li><a href="https://www.amazon.com/gp/product/0321150783?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321150783">Lean Software Development: An Agile Toolkit</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0321150783" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/097451408X?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=097451408X">Practices of an Agile Developer: Working in the Real World (Pragmatic Programmers)</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=097451408X" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/0596008678?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0596008678">Head First Object-Oriented Analysis and Design</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0596008678" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/0596510047?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0596510047">Beautiful Code: Leading Programmers Explain How They Think (Theory in Practice (O'Reilly))</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0596510047" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/0735619670?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0735619670">Code Complete: A Practical Handbook of Software Construction</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0735619670" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/1934356085?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=1934356085">Programming Ruby 1.9: The Pragmatic Programmers' Guide (Facets of Ruby)</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=1934356085" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/0321356683?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321356683">Effective Java (2nd Edition)</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0321356683" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/032143482X?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=032143482X">Concurrent Programming on Windows</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=032143482X" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/0321349601?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321349601">Java Concurrency in Practice</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0321349601" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/0596007590?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0596007590">Producing Open Source Software: How to Run a Successful Free Software Project</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0596007590" width="1"></li>
<li><a href="https://www.amazon.com/gp/product/0321127420?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321127420">Patterns of Enterprise Application Architecture</a><img alt="" height="1" src="http://www.assoc-amazon.com/e/ir?t=thinkinginnet-20&l=as2&o=1&a=0321127420" width="1"></li>
</ul>Wordless Wednesday - Tina with Pelagic Triggerfish2010-03-03T09:00:00-10:002010-03-03T09:00:00-10:00larrytag:knowing.net,2010-03-03:/posts/2010/03/wordless-wednesday-tina-with-pelagic-triggerfish/<p><img alt="Tina With Pelagic Triggerfish" height="693" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_l.png" width="1024"><br>
Photo by <a href="http://waynelevinimages.com/">Wayne Levin</a>. All rights reserved.</p>Remote Pair Programming: Two Views (From Me and The Guy I Paired With)2010-03-02T10:30:00-10:002010-03-02T10:30:00-10:00larrytag:knowing.net,2010-03-02:/posts/2010/03/remote-pair-programming-two-views-from-me-and-the-guy-i-paired-with/<p><a href="https://sdtimes.com/extreme-programming/windows-net-watch-problematic-pair-programming/">Remote Pair Programming is the subject of my latest column for SD Times</a></p>
<p>and in the spirit of pair programming, <a href="http://priodev.blogspot.com/2010/03/solutionatic-pair-programming.html">my colleague Carlos Lima shares his perspective as well</a>.</p>
<p>(For what it's worth, I think the tone of my column may be a little more negative that I intended. I …</p><p><a href="https://sdtimes.com/extreme-programming/windows-net-watch-problematic-pair-programming/">Remote Pair Programming is the subject of my latest column for SD Times</a></p>
<p>and in the spirit of pair programming, <a href="http://priodev.blogspot.com/2010/03/solutionatic-pair-programming.html">my colleague Carlos Lima shares his perspective as well</a>.</p>
<p>(For what it's worth, I think the tone of my column may be a little more negative that I intended. I tried to be balanced pro and con, but perhaps I over-emphasized the problems.)</p>Link Clearance2010-03-01T09:00:00-10:002010-03-01T09:00:00-10:00larrytag:knowing.net,2010-03-01:/posts/2010/03/link-clearance/<p>Cleaning out my "Write blog post commenting upon..." folder...</p>
<h2>Consulting / Business Topics</h2>
<p><a href="https://prog21.dadgum.com/58.html">Flickr as a Business Simulator</a></p>
<p>Once You Announce A Date, You're Already Late</p>
<p>How Hard Should Your Startup's Technology Be?</p>
<p><a href="https://www.engadget.com/topics/apple/">AppFund Offers VC Money for iPad Apps</a></p>
<p><a href="http://www.tbray.org/ongoing/When/201x/2010/02/09/Information-Aristocracy">The Listening Engine</a></p>
<h2>Performance</h2>
<p><a href="http://blog.barrkel.com/2009/12/commonly-confused-tidbits-re-net.html">Commonly Confused Tidbits re. .NET Garbage Collector …</a></p><p>Cleaning out my "Write blog post commenting upon..." folder...</p>
<h2>Consulting / Business Topics</h2>
<p><a href="https://prog21.dadgum.com/58.html">Flickr as a Business Simulator</a></p>
<p>Once You Announce A Date, You're Already Late</p>
<p>How Hard Should Your Startup's Technology Be?</p>
<p><a href="https://www.engadget.com/topics/apple/">AppFund Offers VC Money for iPad Apps</a></p>
<p><a href="http://www.tbray.org/ongoing/When/201x/2010/02/09/Information-Aristocracy">The Listening Engine</a></p>
<h2>Performance</h2>
<p><a href="http://blog.barrkel.com/2009/12/commonly-confused-tidbits-re-net.html">Commonly Confused Tidbits re. .NET Garbage Collector</a></p>
<p><a href="https://www.sauria.com/blog/">The Cambrian Period of Concurrency</a></p>
<p><a href="http://ww7.bluebytesoftware.com/">Tasks & Asynchronous Control Flow</a></p>
<p><a href="http://ww7.bluebytesoftware.com/">Lifting T Out of Task With Dynamic Dispatch</a></p>
<p><a href="https://www.hanselman.com/blog/HanselminutesPodcast193AxumADomainspecificConcurrentProgrammingLanguageWithNiklasGustafsson.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ScottHanselman+%28Scott+Hanselman+-+ComputerZen.com%29&utm_content=Google+Reader">Axum - A Domain-Specific Concurrent Programming Language</a></p>
<p><a href="http://www.drdobbs.com/parallel/prefer-futures-to-baked-in-async-apis/222301165">Prefer Futures to Baked-In "Async APIs"</a></p>
<h2>Data</h2>
<p><a href="http://web.imt-atlantique.fr/x-info/atlanmod/index.php?title=Main_Page">"M" Language Type Definitions for 280+ Data Models</a></p>
<p>Questionnaire DSL With Microsoft "Oslo" Overview</p>
<p>Focusing on Data</p>
<p><a href="https://www.hugedomains.com/domain_profile.cfm?d=devexpertise&e=com">Implementing a LINQ version of SQL's LIKE operator</a></p>
<p><a href="https://weblogs.asp.net/gunnarpeipman/using-linq-and-reflection-to-find-matching-properties-of-objects">Using LINQ and Reflection to Find Matching Properties of Objects</a></p>
<p><a href="https://papers.ssrn.com/sol3/papers.cfm?abstract_id=905060">Why Normalization Failed To Become The Ultimate Guide For Database Designers?</a></p>
<h2>Web Dev</h2>
<p><a href="https://www.hanselman.com/blog/MultiBrowserOrCrossBrowserTestingAndDeconstructingMicrosoftExpressionWebSuperPreview.aspx?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+ScottHanselman+%28Scott+Hanselman+-+ComputerZen.com%29&utm_content=Google+Reader">Multibrowser or CrossBrowser Testing</a></p>
<p>A Brief Introduction To The Reactive Extensions for .NET, Rx</p>
<p>First Encounters with Reactive Extensions</p>
<p>LINQ to RX: Second Impressions</p>Twitter Weekly Updates for 2010-02-282010-02-28T15:00:00-10:002010-02-28T15:00:00-10:00larrytag:knowing.net,2010-02-28:/posts/2010/02/twitter-weekly-updates-for-2010-02-28/<ul>
<li>Google Earth Car spotted on Queen K at North/South Kona border... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9453134860">#</a></li>
<li>Hope new credit card law means that I get MORE incomprehensible pamphlets with important updates about my agreement. Fingers crossed. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9453381119">#</a></li>
<li>Haven't even dl'ed the demo, but suspect the next time I'm doing hard JavaScript code, I'll use JetBrains …</li></ul><ul>
<li>Google Earth Car spotted on Queen K at North/South Kona border... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9453134860">#</a></li>
<li>Hope new credit card law means that I get MORE incomprehensible pamphlets with important updates about my agreement. Fingers crossed. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9453381119">#</a></li>
<li>Haven't even dl'ed the demo, but suspect the next time I'm doing hard JavaScript code, I'll use JetBrains WebIDE <a href="http://www.jetbrains.com/products.html">http://bit.ly/hyE5q</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9486995580">#</a></li>
<li>(Assuming that d/l counter, while fake, is calibrated to Apple's expectations...) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9488546872">#</a></li>
<li>We "have to keep healthy people in the risk pool, which means requiring that people purchase insurance." Yep. <a href="https://www.nytimes.com/2010/02/19/opinion/19krugman.html">http://nyti.ms/c24iGj</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9492782946">#</a></li>
<li>Good article on Flash UI assumptions (mouseover, hover) vs. slate form-factor: http://bit.ly/bII5sk Applicable to iPad / Tablet PC <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9493339124">#</a></li>
<li>I wonder what correlation there is between readers of this article <a href="https://www.theatlantic.com/national/archive/2010/02/what-makes-cities-happy/36120/">http://bit.ly/bsJbtV</a> and "enjoys scatter graphs and regression analysis"? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9493897465">#</a></li>
<li>Photosynth to 3D Conversion: <a href="https://www.youtube.com/watch?v=TuHJUS2olyc">http://www.youtube.com/watch?v=TuHJUS2olyc</a> I'd love to do that with a reef... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9537661758">#</a></li>
<li>Silverlighttoys.com just crashed my Firefox. Oopsie! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9544192081">#</a></li>
<li>Happy Birthday SD Times <a href="https://sdtimes.com/zeichicks-take-happy-birthday/">http://www.sdtimes.com/ZEICHICK_S_TAKE_HAPPY_BIRTHDAY_/By_Alan_Zeichick/34143</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9545656357">#</a></li>
<li>Dude, Where's My Cdr? #filmsaboutsoftware <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9546944378">#</a></li>
<li>I'd love to think that Prolog is going to have another day in the sun. LINQ and RX promote central idea of "query as control structure" <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9585884361">#</a></li>
<li>Problem with Prolog is that it's depth-first search. Oz allows choice of search strategy. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9586049945">#</a></li>
<li>17-year-old killed by drunk driver in Hawaii last night. Ugh. <a href="https://www.hawaii247.com/2010/02/24/minivan-and-suv-crash-on-queen-kaahumanu-highway-kills-17-year-old-girl/">http://bit.ly/b1KwBZ</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9587639905">#</a></li>
<li>Just discovered that desired level of precision allows about 1KLoC (including multiday perf pass) to be factored away. #bittersweet <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9590620252">#</a></li>
<li>Blog about a woman in technology or science you admire on Ada Lovelace Day, 24 Mar 2010, details at <a href="https://findingada.com/">http://findingada.com</a> (\@findingada) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9591894817">#</a></li>
<li>Orca kills trainer <a href="https://www.msn.com/">http://bit.ly/cNybe5</a> No surprise this would eventually happen. (Must. Resist. Neko Case Reference...) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9592158029">#</a></li>
<li>Lingerie model runs one of world's largest drug gangs <a href="https://www.telegraph.co.uk/news/worldnews/southamerica/argentina/7304510/Lingerie-model-runs-one-of-worlds-largest-drug-gangs-according-to-police.html">http://bit.ly/cmzdP7</a> In other news, 1000000 would-be screenwriters started new scripts <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9593190455">#</a></li>
<li>HD makes such a difference for watching hockey... \<2 minutes left in US vs. SUI <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9595166131">#</a></li>
<li>USA vs SUI was good hockey game. I prefer Olympic-sized rink, though. I think hockey benefits from more room relative to player sizes... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9595519577">#</a></li>
<li>A Johnny Cash song was the 10,000,000,000th song sold on iTunes. Nice. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9635613636">#</a></li>
<li>I just coded "System.Console.WriteLine("#{t},#{pt}"); Sadly, it <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9639153654">#</a></li>
<li>Sadly, it's a C# program, not Ruby. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9639170480">#</a></li>
<li>It will be interesting to see how the news covers the health care summit. Wait. Not "Interesting." What's the word? Utterly predictable. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9646485497">#</a></li>
<li>AWWW! Baby elephant! http://bit.ly/7f7CXV <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9659716833">#</a></li>
<li>New Quicken Essentials for Mac doesn't export to Turbo Tax. #fail <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9689335657">#</a></li>
<li>3.9 ms? Thank heavens I profiled that code before optimizing... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9692134196">#</a></li>
<li>Pacific Tsunami Center has NOT issued a tsunami warning as of 9:44 AM Hawaiian (2044Z). <a href="https://www.prh.noaa.gov/ptwc/?region=0">http://www.prh.noaa.gov/ptwc/?region=0</a> #hawaii <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9696089640">#</a></li>
<li>Woke to tsunami sirens. We are very high and safe. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9739227348">#</a></li>
<li>Hawaii County Civil Defense: All in evacuation zones are ordered to evacuate no later than 10:00 AM. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9739316208">#</a></li>
<li>Spam rationing @ Safeway: <a href="https://www.hugedomains.com/domain_profile.cfm?d=ourtown808&e=com">http://t.ourtown808.com/fht0</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9739651295">#</a></li>
<li>Lots of fishing boats leaving Honokohau Harbor #histunami <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9740598272">#</a></li>
<li>Just heard KOA airport is operating normally? WTF? It's right on the shore. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9741837552">#</a></li>
<li>Marquesa tsunami smaller than initial forecast. Good news for #hitsunami <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9742310507">#</a></li>
<li>MacSpeech Scribe not scriptable, making workflow automation difficult / impossible. Bummer. Impressive product otherwise. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9742756855">#</a></li>
<li>Appreciating scientists, tsunami warning center, civil defense prep. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9743579809">#</a></li>
<li>Water receding in Hilo Bay -- Tivo clearly shows receding pulse. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9746603163">#</a></li>
<li>Surge beginning to fill in Hilo Bay. Wow. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9746954246">#</a></li>
<li>Now it's beginning to recede in Hilo again. Fuh-reaky. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9747042131">#</a></li>
<li>Honokohau Harbor (Kona Side) looks normal from a distance. Can't tell if there's small-scale disturbance yet. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9747105196">#</a></li>
<li>Tsunami scientist saying "2m at Kahului" and "may get worse in Hilo" <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9747730027">#</a></li>
<li>Tsunami scientist refers to Hilo and Kahului as "resonant harbors" that can amplify tsunami action. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9747804895">#</a></li>
<li>So far tsunami has been awe-inspiring but non-damaging. Fingers crossed for more of the same... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9748060670">#</a></li>
<li>West Hawaii Police reporting water receding 4.5ft Kona / Honokohau #hitsunami <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9748898387">#</a></li>
<li>Water now beginning to surge in Kona. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9748964890">#</a></li>
<li>That's the way all #hitsunami s should be. Thoughts turning to victims in Chile... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9749261501">#</a></li>
<li>Police scanner reports surge covered Kailua Kona pier #hitsunami <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9749824535">#</a></li>
<li>My dramatic tsunami video: http://bit.ly/bPi3gX <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9750771371">#</a></li>
<li>Tsunami watch lifted on Big Island. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9751214800">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>How Quantum Computers Work2010-02-26T09:00:00-10:002010-02-26T09:00:00-10:00larrytag:knowing.net,2010-02-26:/posts/2010/02/how-quantum-computers-work/<p>Great article -- <a href="https://arstechnica.com/science/2010/01/a-tale-of-two-qubits-how-quantum-computers-work/">the clearest explanation of quantum computing I've ever read.</a></p>Google Wave Use-Cases: Food For Thought2010-02-25T09:00:00-10:002010-02-25T09:00:00-10:00larrytag:knowing.net,2010-02-25:/posts/2010/02/google-wave-use-cases-food-for-thought/<p>Google Wave is, so far, too difficult and buggy to be relied upon (once upon a time, we called this state "beta software"). Nonetheless, the promise for new types of collaboration are there. Here are some thought-provoking use-cases for Wave</p>Current Status of P = NP?2010-02-24T14:15:00-10:002010-02-24T14:15:00-10:00larrytag:knowing.net,2010-02-24:/posts/2010/02/current-status-of-p-np/<p>From the CACM last year, <a href="https://cacm.acm.org/magazines/2009/9/38904-the-status-of-the-p-versus-np-problem/fulltext">a good introduction to and survey of the problem</a>.</p>Wordless Wednesday - Milwaukee Circus Parade2010-02-24T09:21:00-10:002010-02-24T09:21:00-10:00larrytag:knowing.net,2010-02-24:/posts/2010/02/wordless-wednesday/<p><img alt="DSC_3620" height="685" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_l.png" width="1024"></p>Twitter Weekly Updates for 2010-02-212010-02-21T15:00:00-10:002010-02-21T15:00:00-10:00larrytag:knowing.net,2010-02-21:/posts/2010/02/twitter-weekly-updates-for-2010-02-21/<ul>
<li>Sunday freedive at Two-Step (Honaunau). Not great vis, but calmer than I expected. Sick of the snow? Not too late for a Spring Hawaii trip! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9119815475">#</a></li>
<li>Doing faux tilt-shift in Photoshop of Machu Picchu. Stupid fun. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9120072004">#</a></li>
<li>New Phone OS from Microsoft (Win 7 Mobile) -- striking UI, clean break from previous OS …</li></ul><ul>
<li>Sunday freedive at Two-Step (Honaunau). Not great vis, but calmer than I expected. Sick of the snow? Not too late for a Spring Hawaii trip! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9119815475">#</a></li>
<li>Doing faux tilt-shift in Photoshop of Machu Picchu. Stupid fun. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9120072004">#</a></li>
<li>New Phone OS from Microsoft (Win 7 Mobile) -- striking UI, clean break from previous OS. Very bold, very nice. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9149800456">#</a></li>
<li>Go to minute 5 in this TED talk about Bing Maps: <a href="https://www.ted.com/talks/blaise_aguera">http://www.ted.com/talks/blaise_aguera.html</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9152350794">#</a></li>
<li>I hate \<table>. I hate CSS. I hate browsers and their incompatibilities. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9153354164">#</a></li>
<li>Bought @<a class="aktt_username" href="https://twitter.com/bach4life">bach4life</a> 's Silverlight eBook (good). Only can read it using Adobe Digital Editions, with no way to x'fer to Kindle (bad). <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9155850700">#</a></li>
<li>Sat down at computer to find emails establishing a serious frack-up. Everyone's being nice about it, but bummer of a day-start. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9245834845">#</a></li>
<li>Plunging into \<table> -> CSS refactoring. If this is the last you hear from me, do not try to recover the body. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9248070126">#</a></li>
<li>Surfacing after my \<table>->CSS refactoring project. I need a shower. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9310188758">#</a></li>
<li>Drunkest Cities and Hawaii's best is only #88 http://bit.ly/bJi8pb Obviously they've ...oh, Friday noon... pau hana maitais @ my place! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9354319405">#</a></li>
<li>Client site launched successfully -- 22 minute cutover. Nice. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9396662814">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>AIn't Happening2010-02-18T09:00:00-10:002010-02-18T09:00:00-10:00larrytag:knowing.net,2010-02-18:/posts/2010/02/aint-happening/<p><a href="https://sdtimes.com/artificial-intelligence/windows-net-watch-aint-happening/">Why I don't think artificial intelligence is likely to have a breakthrough in the coming decade</a>: My latest column for SD Times.</p>Wordless Wednesdays - Orion2010-02-17T08:41:00-10:002010-02-17T08:41:00-10:00larrytag:knowing.net,2010-02-17:/posts/2010/02/wordless-wednesdays-orion/<p><img alt="dsc_5436" class="alignleft size-large wp-image-4459" height="1024" src="/uploads/2010/02/dsc_5436-684x1024.png" title="dsc_5436" width="684"></p>Twitter Weekly Updates for 2010-02-142010-02-14T15:00:00-10:002010-02-14T15:00:00-10:00larrytag:knowing.net,2010-02-14:/posts/2010/02/twitter-weekly-updates-for-2010-02-14/<ul>
<li>Watched the SuperBowl with 2hr time-delay because I was u/w hearing whales and watching tuna destroy a baitball. Hawaii no ka 'oi! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8820605933">#</a></li>
<li>Beaker singing "Dust in the Wind" : <a href="https://www.youtube.com/watch?v=EAtBki0PsC0&feature=player_embedded">http://bit.ly/9gNEv4</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8876366976">#</a></li>
<li>Mathematica users: How apply a function n times recursively, where n = Log[2,Length[list]]? i.e …</li></ul><ul>
<li>Watched the SuperBowl with 2hr time-delay because I was u/w hearing whales and watching tuna destroy a baitball. Hawaii no ka 'oi! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8820605933">#</a></li>
<li>Beaker singing "Dust in the Wind" : <a href="https://www.youtube.com/watch?v=EAtBki0PsC0&feature=player_embedded">http://bit.ly/9gNEv4</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8876366976">#</a></li>
<li>Mathematica users: How apply a function n times recursively, where n = Log[2,Length[list]]? i.e., fn[fn[fn[{a,b,c,d,e,f,g,h}]]] ? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8885051364">#</a></li>
<li>Pattern-matching FTW! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8885459555">#</a></li>
<li>fn[x_, 1] = foo[x] fn[x_, n_] := foo[fn[x, n-1]] fn[x_] = fn[x_, Log[2,Length[x]]] <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8885578995">#</a></li>
<li>And on that bombshell, I'm off to Waimea for astro club meeting <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8885918325">#</a></li>
<li>Feeling simultaneously smart and dumb. This is why I love programming. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8915641771">#</a></li>
<li>I only get to use Mathematica once in a blue moon, but every time I do, I think "This is the way programming should be." <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8970722609">#</a></li>
<li>The Compaq II on which Anders' developed Turbo Pascal 4 is on eBay for Haiti Relief: <a href="https://www.ebay.com/itm/200438292980?ViewItem=&item=200438292980&ru=http://shop.ebay.com:80/200438292980_W0QQ_fviZ1&_rdc=1">http://bit.ly/9Gmnfp</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8976842994">#</a></li>
<li>Bad study or bad article? Control group should be straight but childless uncles (such as myself) <a href="https://www.msn.com/">http://bit.ly/bYhTY0</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8979331168">#</a></li>
<li>Mac Scribe looks like it might be the voice dictation s/w I've been waiting for... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8982395540">#</a></li>
<li>The inventor of the Frisbee has died http://bit.ly/cXWXki Smooth flights, Mr. Morrison. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8989254036">#</a></li>
<li>Roger Corman's Sharktopus gets greenlight: <a href="https://io9.gizmodo.com/here-comes-sharktopus-5470224">http://io9.com/5470224/here-comes-sharktopus</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/9019859677">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Twitter Weekly Updates for 2010-02-072010-02-07T15:00:00-10:002010-02-07T15:00:00-10:00larrytag:knowing.net,2010-02-07:/posts/2010/02/twitter-weekly-updates-for-2010-02-07/<ul>
<li>Are there any shows on the Discovery Channel that are NOT narrated by Mike Rowe? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8468894428">#</a></li>
<li>Resolved: Pair programming is NOT a good idea when learning an API. Debate? (Pair prog is BEST way to learn an API?) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8508132569">#</a></li>
<li>Colorado Springs going to cut 1/3 of streetlights to aid city budget …</li></ul><ul>
<li>Are there any shows on the Discovery Channel that are NOT narrated by Mike Rowe? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8468894428">#</a></li>
<li>Resolved: Pair programming is NOT a good idea when learning an API. Debate? (Pair prog is BEST way to learn an API?) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8508132569">#</a></li>
<li>Colorado Springs going to cut 1/3 of streetlights to aid city budget. Sounds like a good idea to me -- I hate streetlights. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8509573666">#</a></li>
<li>The @<a class="aktt_username" href="https://twitter.com/dailyshoot">dailyshoot</a> is "Show whether it's more like Spring or more like Winter." One of those "Why, yes, I _do_ live in Hawaii..." days... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8551954303">#</a></li>
<li>Did a good deed today but my car just failed it's safety check and it's \$500 to fix. #karma_fail <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8559291292">#</a></li>
<li>Finally reading DeLillo (White Noise) -- OMG can this guy write. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8730646365">#</a></li>
<li>Clear Climate Code: FOSS for climate science. Great idea, apparently making good progress: <a href="http://clearclimatecode.org/about/">http://clearclimatecode.org/about/</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8731611499">#</a></li>
<li>Kindle API spec now public -- SDK still requires application: http://bit.ly/9mD4F6 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8738176875">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>These Divergent Times2010-02-01T07:26:00-10:002010-02-01T07:26:00-10:00larrytag:knowing.net,2010-02-01:/posts/2010/02/these-divergent-times/<p>My latest column for SD Times argues that <a href="https://sdtimes.com/programming/windows-net-watch-these-divergent-programming-times/">right now, it's smarter to specialize, not generalize, in your programming career</a>.</p>Twitter Weekly Updates for 2010-01-312010-01-31T15:00:00-10:002010-01-31T15:00:00-10:00larrytag:knowing.net,2010-01-31:/posts/2010/01/twitter-weekly-updates-for-2010-01-31/<ul>
<li>Gorgeous AM -- Southern Cross, Scorpio rising -- before dropping Tina off at KOA for biz trip to HNL. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8283993279">#</a></li>
<li>Surprisingly un-blown-away by iPad. I like the keyboard dock (can I get that for my iPhone) and lower-than-expected \$, but otherwise... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8294421073">#</a></li>
<li>Vog-free days are bittersweet: Fracking gorgeous reminder of how oppressive the vog is …</li></ul><ul>
<li>Gorgeous AM -- Southern Cross, Scorpio rising -- before dropping Tina off at KOA for biz trip to HNL. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8283993279">#</a></li>
<li>Surprisingly un-blown-away by iPad. I like the keyboard dock (can I get that for my iPhone) and lower-than-expected \$, but otherwise... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8294421073">#</a></li>
<li>Vog-free days are bittersweet: Fracking gorgeous reminder of how oppressive the vog is. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8295244544">#</a></li>
<li>I've used fullscreen touchpad keyboards and fullscreen touchpad keyboards stink. Back of iPad is curved like iPhone 3GS, so RLY sux. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8295921777">#</a></li>
<li>Jobs "purchased" True Compass eBook for \<span class="math">\(14.99. Kindle price for "TC" is \\)</span>9.99. Demo SNAFU or \$5 iPad premium? (My guess: SNAFU.) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8296400129">#</a></li>
<li>Finger may be superior to stencil for user input on phone. Not as clearcut on pad. Market for capacitive "pens." <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8296516582">#</a></li>
<li>This is a link to a funny blog post: <a href="http://faultline.org/index.php/site/item/incendiary">http://faultline.org/index.php/site/item/incendiary</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8332649612">#</a></li>
<li>RT @<a class="aktt_username" href="https://twitter.com/moon">moon</a> RIP JD Salinger <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8332669346">#</a></li>
<li>Google Wave needs a way to indicate "Yes, I'm nodding as you write" or "Hmm, I'm a little doubtful." <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8333231935">#</a></li>
<li>Developer of Origami (MS slate pad) reacts to iPad: <a href="https://ottoberkes.wordpress.com/2010/01/27/ipad/">http://ottoberkes.wordpress.com/2010/01/27/ipad/</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8334011579">#</a></li>
<li>Pondering: since Apple didn't do innovative s/w for iPad, is there opp for developing, eg, pie menus? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8336219328">#</a></li>
<li>Downloading new iPhone SDK, which means that I'm going to have to shut up discussing APIs for slate... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8337908744">#</a></li>
<li>DANG! Bing Twitter Maps just stole my demo! http://www.bing.com/twitter/maps <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8377497011">#</a></li>
<li>I've been using git for two months now but I don't "get" why people are passionate about DVCS. Any links for "zen" (not mechanics) of DVCS? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8460270285">#</a></li>
<li>Staring at an RFP to create an RIA that integrates with ... Excel 97. Shoebox full of MSDN CDs FTW! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8461847474">#</a></li>
<li>Confused: Aren't Flash and Flex open source now and doesn't Flash have a compiler? Can 3rd party/OSS create iPhone Flash native ala Mono? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/8464188557">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Tablet PC Programmer Responds to Apple iPad2010-01-27T17:55:00-10:002010-01-27T17:55:00-10:00larrytag:knowing.net,2010-01-27:/posts/2010/01/tablet-pc-programmer-responds-to-apple-ipad/<p>The Apple iPad is primarily a device for consuming, not creating, media.</p>
<p><img alt="8dc34a183575a2bf28da2c404d6324fa" class="alignright size-full wp-image-4438" height="495" src="/uploads/2010/01/8dc34a183575a2bf28da2c404d6324fa.jpeg" title="8dc34a183575a2bf28da2c404d6324fa" width="450">I spent several years developing software for Microsoft's Tablet PC, only to be dismayed that the market for such software didn't evolve quickly. As a person who's switched from Windows to OS X for much of my day-to-day …</p><p>The Apple iPad is primarily a device for consuming, not creating, media.</p>
<p><img alt="8dc34a183575a2bf28da2c404d6324fa" class="alignright size-full wp-image-4438" height="495" src="/uploads/2010/01/8dc34a183575a2bf28da2c404d6324fa.jpeg" title="8dc34a183575a2bf28da2c404d6324fa" width="450">I spent several years developing software for Microsoft's Tablet PC, only to be dismayed that the market for such software didn't evolve quickly. As a person who's switched from Windows to OS X for much of my day-to-day work and as a very happy owner of an iPhone, I had high expectations for the iPad, announced today.</p>
<p>Given the speculation that swirls around Apple products prior to their launch, and the thesis that Apple had been delaying the release of a Tablet form-factor for years in order to get things just-so, disappointment in any actual device was probably inevitable. No resolution, battery life, or input technique could keep up with the dream of a reinvention of the computer.</p>
<p>So what is the iPad? A slate-style Tablet PC with a 1024 x 768 resolution that runs a single app at a time. It's closer to being an iPhone than it is to being a Macbook.</p>
<p>Consuming media:</p>
<p>The iPad has some nice enhancements for iTunes. Big deal. The iPad can watch movies and TV. But it isn't widescreen. You can watch video for 10 hours on your flight from San Francisco to Tokyo. Or, I suppose, I could pack an extra battery for my laptop and do the same.</p>
<p>Much is being made of the iPad as a threat to the Kindle. But I've read books and magazines on 1024 x 768 slates and I'll flat-out say that it's not as nice as the Kindle experience. Multicolumn layouts <em>do not</em> work at that resolution. You either have unreadably narrow text in portrait mode or you switch the computer to landscape mode and have to zig-zag up and down to get the whole page. Admittedly, the iPad has 132 pixels per inch, so it's going to look great, but when you only <em>have</em> 768 pixels in which to fit multiple columns, individual letters just don't have the necessary resolution for long-duration reading.</p>
<p>Creating media:</p>
<p>Like all Americans, I consume a ridiculous amount of media. I have a lot of music, I watch a lot of TV, I read a lot of books, and I read a ridiculous number of magazines. Oh, and blogs, Twitter, and the occasional Website.</p>
<p>But I <em>think of</em> myself as a person who creates media. I write, I program, I take photos, I make videos. If my tin ear wasn't obvious even to myself, I'd undoubtedly make music. In this way, I am Apple's classic target market (well, the computer programming is not part of Apple's classic market, but they've figured that out in the past couple years with the iPhone).</p>
<p>So what does the iPad provide for media creation? Nothing.</p>
<p>There's no camera, either still or video. We didn't see any new ideas for iPhoto or iMovie. While Jobs showed Pages on the iPad, the tablet form-factor calls for all-new concepts for note-taking and writing. Microsoft's OneNote shows the way for note-taking, no one has ever written a decent word processor for the Tablet form factor.</p>
<p>To me, the lack of innovation in media creation is an <em>enormous</em> hole in the iPad story.</p>
<p>You interact with your iPad using a finger. Fingers are fine things, but they aren't pens and brushes. On the keys of a keyboard, they can fly, but not on a flat touchscreen. I've used flat touchscreen keyboards -- they suck. And the iPad has a curved back, which means that it rocks if you lie it flat and type. But lying a slate flat and typing on it is a bad user experience anyway. And holding up a slate and hunting-and-pecking is frustrating. Trust me: I've been there and done that.</p>
<p>The use of a finger rather than a stylus means that the iPad may not suffer from another problem, which is the parallax shift that occurs when you attempt to point precisely on a slate held at an angle. In other words, when you try to interact with a screen in the same way you interact with a clipboard, it doesn't quite work and the "doesn't quite" of it is really annoying.</p>
<p>The iPad has bluetooth connectivity and a stand with keyboard integration. I want that stand more than I want the iPad; it's just that I want it for my iPhone.</p>
<p>I assume that the 2nd or 3rd generation of iPad will move towards 1920 x 1080 resolution. Once you get to 1000 pixels, multiple-column portrait-mode reading becomes feasible. But that's obviously going to be at least a year or two away. In the meantime, I'll stick with my Motion Computing slate and dream about someone getting the tablet form-factor right.</p>Wordless Wednesday - Whalesong (Video)2010-01-27T09:00:00-10:002010-01-27T09:00:00-10:00larrytag:knowing.net,2010-01-27:/posts/2010/01/wordless-wednesday-whalesong-video/Preordering the Apple Tablet2010-01-25T09:52:00-10:002010-01-25T09:52:00-10:00larrytag:knowing.net,2010-01-25:/posts/2010/01/preordering-the-apple-tablet/<p><img alt="1001251141tabfseyl" class="size-full wp-image-4427" height="176" src="/uploads/2010/01/1001251141tabfseyl.png" title="1001251141tabfseyl" width="791"></p>
<p>Original: http://tirania.org/blog/archive/2010/Jan-25.html</p>Amazon to Release Kindle SDK to Battle / Forestall Apple iSlate2010-01-22T09:16:00-10:002010-01-22T09:16:00-10:00larrytag:knowing.net,2010-01-22:/posts/2010/01/amazon-to-release-kindle-sdk-to-battle-forestall-apple-islate/<p>Amazon has announced a software development kit for the Kindle. This is clearly an attempt to shore themselves up against the tidal wave of interest that Apple's forthcoming tablet computer is going to generate.</p>
<p>The Kindle is an excellent piece of hardware with absolutely dynamite battery life. It's definitely an …</p><p>Amazon has announced a software development kit for the Kindle. This is clearly an attempt to shore themselves up against the tidal wave of interest that Apple's forthcoming tablet computer is going to generate.</p>
<p>The Kindle is an excellent piece of hardware with absolutely dynamite battery life. It's definitely an adjunct to a "main computer" (or even a main laptop), but I would <em>love</em> to have, for instance, a Kindle-based blog reader.</p>
<p>I've had several ideas for Kindle apps and look forward to receiving the SDK. The Kindle's internal software is programmed in Java, so I expect the SDK to be Java-based.</p>
<p>On the other hand, I fully expect to swoon at the Apple Tablet. I spent years developing Tablet PC software for Windows and was tremendously frustrated by the lack of uptake. The Tablet form-factor has lots of challenges, but with the iPod and iPhone Apple has proved their ability to "think differently" and create winning hardware/software solutions.</p>Wordless Wednesday: Vog From Hualalai2010-01-20T09:00:00-10:002010-01-20T09:00:00-10:00larrytag:knowing.net,2010-01-20:/posts/2010/01/wordless-wednesday-vog-from-hualalai/<p><img alt="DSC_5373" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>Twitter Weekly Updates for 2010-01-172010-01-17T15:00:00-10:002010-01-17T15:00:00-10:00larrytag:knowing.net,2010-01-17:/posts/2010/01/twitter-weekly-updates-for-2010-01-17/<ul>
<li>JetBrains looking for a Java developer http://tr.im/K5wM <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7639727316">#</a></li>
<li>Happy binary palindrome day! 01-11-10 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7639813361">#</a></li>
<li>Fearing that the Haiti EQ is going to have big casualties -- a 7.0 just outside a city with poor and ignored building codes? Bad news. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7690381741">#</a></li>
<li>Flash runtime in JavaScript (http://tr.im/Kipa) is …</li></ul><ul>
<li>JetBrains looking for a Java developer http://tr.im/K5wM <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7639727316">#</a></li>
<li>Happy binary palindrome day! 01-11-10 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7639813361">#</a></li>
<li>Fearing that the Haiti EQ is going to have big casualties -- a 7.0 just outside a city with poor and ignored building codes? Bad news. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7690381741">#</a></li>
<li>Flash runtime in JavaScript (http://tr.im/Kipa) is impressive, but not answer for the iPhone. Abstraction eats power. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7716262157">#</a></li>
<li>They're rebooting Spiderman already http://tr.im/KisM <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7716629990">#</a></li>
<li>My favorite read of last year was "The Lost City of Z" <a href="https://www.amazon.com/exec/obidos/ASIN/0385513534/thinkinginnet-20">http://bit.ly/78xrOS</a> So this find is interesting: <a href="https://www.thetimes.co.uk/">http://bit.ly/7HgAPi</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7718996827">#</a></li>
<li>grand central <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7719052393">#</a></li>
<li>Rumor of Grand Central Station in NYC SWAT action. Bing Twitter search here: http://bit.ly/4tWklL <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7719230535">#</a></li>
<li>Now rumor is that Grand Central SWAT action was twitter hoax. Some say "I'm there, no prob," others say "Lots of activity." CNN silent. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7719862282">#</a></li>
<li>Nothing on NY1, nothing on CNN re Grand Central Activity. No photos. Absence of evidence is not evidence of absence, but skepticism rising. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7720019392">#</a></li>
<li>My hearing's been over-sensitive for the past several days. Not ringing, but like the gain's turned up too much. Allergy thing? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7723584653">#</a></li>
<li>Neil Young "Pants on the Ground" <a href="https://www.huffpost.com/entry/pants-on-the-ground-neil_n_424468?just_reloaded=1">http://bit.ly/6wtfjj</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7797606702">#</a></li>
<li>Pretty close to abandoning Saros in favor of VNC for remote pair programming. Anyone want to dissuade me? Saros crashes on file synch. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7798499386">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>5 Predictions For The Next Decade of Software Development2010-01-16T08:19:00-10:002010-01-16T08:19:00-10:00larrytag:knowing.net,2010-01-16:/posts/2010/01/5-predictions-for-the-next-decade-of-software-developmen/<p>My most recent column for SD Times lists <a href="https://sdtimes.com/javascript/windows-net-watch-five-predictions-for-the-next-decade/">5 predictions for the next decade of software development</a>.</p>Wordless Wednesdays - Kapoho2010-01-13T07:09:00-10:002010-01-13T07:09:00-10:00larrytag:knowing.net,2010-01-13:/posts/2010/01/wordless-wednesdays-kapoho/<p><img alt="DSC_5115" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>Recursing To The Depths of Madness2010-01-12T11:03:00-10:002010-01-12T11:03:00-10:00larrytag:knowing.net,2010-01-12:/posts/2010/01/recursing-to-the-depths-of-madness/<p><a href="http://www.bobhobbs.com/files/kr_lovecraft.html">The C Programming Language: 4.10 as told by H.P. Lovecraft</a></p>Complexity Theory is ... Complex2010-01-12T09:34:00-10:002010-01-12T09:34:00-10:00larrytag:knowing.net,2010-01-12:/posts/2010/01/complexity-theory-is-complex/<p>Holy crud, you're supposed to know this stuff going <em>in</em> to a course on complexity theory?</p>
<p><a href="https://rjlipton.wordpress.com/2010/01/12/a-course-on-complexity-theorem/">A Course on Complexity Theory « Gödel’s Lost Letter and P=NP</a>.</p>
<p>[Update:]{style="color: #ff0000;"} Ah, I read it wrong -- when he said "What they should know," he meant at the <em>end</em> of …</p><p>Holy crud, you're supposed to know this stuff going <em>in</em> to a course on complexity theory?</p>
<p><a href="https://rjlipton.wordpress.com/2010/01/12/a-course-on-complexity-theorem/">A Course on Complexity Theory « Gödel’s Lost Letter and P=NP</a>.</p>
<p>[Update:]{style="color: #ff0000;"} Ah, I read it wrong -- when he said "What they should know," he meant at the <em>end</em> of the course, not coming in. Too bad in a way, because I was thinking "If these are the prerequisites, the coursework must be fracking research-grade."</p>Twitter Weekly Updates for 2010-01-102010-01-10T15:00:00-10:002010-01-10T15:00:00-10:00larrytag:knowing.net,2010-01-10:/posts/2010/01/twitter-weekly-updates-for-2010-01-10/<ul>
<li>Star Trek uniform wetsuits. Give your least favorite "buddy" the red one: http://bit.ly/8k1bfy <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7374114283">#</a></li>
<li>Microsoft Research Paper describes algorithm for maximizing viral marketing: <a href="https://www.microsoft.com/en-us/research/publication/scalable-influence-maximization-for-prevalent-viral-marketing-in-large-scale-social-networks/?from=http%3A%2F%2Fresearch.microsoft.com%2Fapps%2Fpubs%2Fdefault.aspx%3Fid%3D117862">http://bit.ly/4JMjls</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7374823186">#</a></li>
<li>Microsoft released the Tablet PC in 2003 and everyone is going gah-gah over _prospect_ of Apple Tablet. #squandered_opportunity <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7377019119">#</a></li>
<li>♫ I am …</li></ul><ul>
<li>Star Trek uniform wetsuits. Give your least favorite "buddy" the red one: http://bit.ly/8k1bfy <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7374114283">#</a></li>
<li>Microsoft Research Paper describes algorithm for maximizing viral marketing: <a href="https://www.microsoft.com/en-us/research/publication/scalable-influence-maximization-for-prevalent-viral-marketing-in-large-scale-social-networks/?from=http%3A%2F%2Fresearch.microsoft.com%2Fapps%2Fpubs%2Fdefault.aspx%3Fid%3D117862">http://bit.ly/4JMjls</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7374823186">#</a></li>
<li>Microsoft released the Tablet PC in 2003 and everyone is going gah-gah over _prospect_ of Apple Tablet. #squandered_opportunity <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7377019119">#</a></li>
<li>♫ I am going to make it through this year if it kills me. ♫ <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7378233188">#</a></li>
<li>BZ Media launching iPhoneDevCon Sep 2010 : <a href="http://www.iphonedevcon.com/">http://www.iphonedevcon.com/</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7379413847">#</a></li>
<li>+1 @<a class="aktt_username" href="https://twitter.com/Zeichick">Zeichick</a> on Apple iTable/iSlate <a href="https://sdtimes.com/apple/zeichicks-take-the-apple-itablet-cures-cancer/">http://www.sdtimes.com/link/34034</a> Developers! Developers! Developers! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7413893305">#</a></li>
<li>Whalers 1, Batboat 0 : <a href="https://www.theawl.com/2010/01/japanese-whaling-ship-crushes-super-action-activist-boat/">http://bit.ly/5OlXAP</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7447504804">#</a></li>
<li>I have a friend at Apple who swears he knows NOTHING about a tablet. I'm like "Dude, just make up something." "It has 8 cores." FTW! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7449701526">#</a></li>
<li>Ima let you finish, Amanda Palmer, but Johnny Cash did the best "Hurt" cover ever... <a href="https://www.youtube.com/watch?v=o22eIJDtKho">http://www.youtube.com/watch?v=o22eIJDtKho</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7487791455">#</a></li>
<li>I'm going to guess that the new UI that involves a learning curve on the iSlate/iTablet involves pie-shaped menus. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7492112382">#</a></li>
<li>Having one of those "can't settle down into productivity" days. Half gone and Friday...Tempted to give up... #</li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Silverlight Programming Column Available2010-01-07T09:12:00-10:002010-01-07T09:12:00-10:00larrytag:knowing.net,2010-01-07:/posts/2010/01/silverlight-programming-column-available/<p>My latest column for SD Times discusses my experience <a href="https://sdtimes.com/silverlight/windows-net-watch-fun-with-wpf-applications/">programming an astronomy application in Silverlight 4</a>.</p>Wordless Wednesdays2010-01-06T08:19:00-10:002010-01-06T08:19:00-10:00larrytag:knowing.net,2010-01-06:/posts/2010/01/wordless-wednesdays-2/<p><img alt="DSC_5163" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>Twitter Weekly Updates for 2010-01-032010-01-03T15:00:00-10:002010-01-03T15:00:00-10:00larrytag:knowing.net,2010-01-03:/posts/2010/01/twitter-weekly-updates-for-2010-01-03-3/<ul>
<li>Using RAMDisk to Speed Build Times (And it's not an article written in 1988!): http://bit.ly/4nClj0 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7133789478">#</a></li>
<li>Writing a geotag-reading Twitter Silverlight app <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7141573249">#</a></li>
<li>Can everyone who follows me DM @<a class="aktt_username" href="https://twitter.com/mlbtraderumors">mlbtraderumors</a> and tell them that I should develop their iPhone app? I'm totally serious. I WANT THAT JOB. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7167313488">#</a></li>
<li>Full moon …</li></ul><ul>
<li>Using RAMDisk to Speed Build Times (And it's not an article written in 1988!): http://bit.ly/4nClj0 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7133789478">#</a></li>
<li>Writing a geotag-reading Twitter Silverlight app <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7141573249">#</a></li>
<li>Can everyone who follows me DM @<a class="aktt_username" href="https://twitter.com/mlbtraderumors">mlbtraderumors</a> and tell them that I should develop their iPhone app? I'm totally serious. I WANT THAT JOB. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7167313488">#</a></li>
<li>Full moon 12/31 will be directly overhead at midnight, all across the world. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7168793112">#</a></li>
<li>Swype appears to be same as SHARK / ShapeWriter -- fastest text entry method on tablet I ever found -- but I thought SHARK was patented? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7178595783">#</a></li>
<li>So now the TSA is going to ban white powders and syringes? First, my Gatorade. Now, my coke and heroin. The terrorists have won. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7199951556">#</a></li>
<li>Vanishing employment interactive map. Depressing <a href="https://slate.com/business/2009/04/when-did-your-county-s-jobs-disappear.html">http://www.slate.com/id/2216238/</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7205216425">#</a></li>
<li>Pro tip: When releasing a new library / framework, say it was 'rapidly embraced and became a de facto standard' <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7206189749">#</a></li>
<li>2 cruise ships in Kailua Kona Bay today. It's been awhile. I know it'll slow down again next week, but at least local biz gets a bump. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7208815129">#</a></li>
<li>Trying to use Kinesis ergonomic keyboard. Very difficult to adjust; the shape is radical. Picture's don't do it justice. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7209363410">#</a></li>
<li>Remembering 12/31/99: the Millennium Bug, my dot-com share-vesting schedule ("in 6 mos, you will have a sheaf of TP"), Dreamcast, parties... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7215781591">#</a></li>
<li>#code2009 Ruby, C#, ActionScript, PHP, JavaScript <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7218405502">#</a></li>
<li>#10yearsago I was VP of a dot-com, paper millionaire, filing patents, expensing 25YO Macallan. Were it not for my friends, a total asshole. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7244405101">#</a></li>
<li>Looking back at 09, the thing that jumps out is that I spent a LOT of time on things that I KNEW wouldn't reward. I need to change that. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7245486594">#</a></li>
<li>Tasmanian Devil species-threatening disease found to be "infectious cancer" <a href="https://www.nytimes.com/2010/01/01/science/01devil.html">http://www.nytimes.com/2010/01/01/science/01devil.html</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7245651433">#</a></li>
<li>Just saw a Hawaiian hoary bat in the last of the twilight. See you in 2010, Batty! <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7259189098">#</a></li>
<li>RT \@secretGeek: There are 2 hard problems in computer science: cache invalidation, naming things, and off-by-1 errors. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7275793296">#</a></li>
<li>Swam with dolphins, saw some spectacular whale breaches yesterday. Great recovery from crappy dog-barking wakeup @ 5:30am (thx neighbors!) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7305195486">#</a></li>
<li>Shark upright vacuum cleaner broke 3rd time I used it. Piece o' crap. Hope Target will give me my money back. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7311063187">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>Hau'oli Mahahiki Hou!2010-01-01T09:16:00-10:002010-01-01T09:16:00-10:00larrytag:knowing.net,2010-01-01:/posts/2010/01/hauoli-mahahiki-hou/<p>2009 was definitely a mixed bag for us, as was, I suppose, the "aughts."In other words, life.</p>
<p>Out with the old:</p>
<p><img alt="img_0191" class="size-medium wp-image-4391 alignnone" height="300" src="/uploads/2010/01/img_0191-225x300.jpg" title="img_0191" width="225"></p>
<p>in with the new!</p>
<p><img alt="img_1219" class="size-medium wp-image-4393 alignnone" height="300" src="/uploads/2010/01/img_1219-243x300.jpg" title="img_1219" width="243"></p>Twitter Weekly Updates for 2009-12-272009-12-27T15:00:00-10:002009-12-27T15:00:00-10:00larrytag:knowing.net,2009-12-27:/posts/2009/12/twitter-weekly-updates-for-2009-12-27/<ul>
<li>Disassembled Webcam, removed lens, Dremeled film canister and enclosure, and voila! Planetary astrophotography cam! Feeling like Macgyver. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6880368414">#</a></li>
<li>Hubble just flew between Moon and Jupiter!!!!! Wow!!!! (right place, right time) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6882992940">#</a></li>
<li>Photo of Hubble passing between Jupiter and Moon (bad exposure, blurry, but what can you do?) http://bit.ly/5ds9G9 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6883707954">#</a></li>
<li>Just …</li></ul><ul>
<li>Disassembled Webcam, removed lens, Dremeled film canister and enclosure, and voila! Planetary astrophotography cam! Feeling like Macgyver. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6880368414">#</a></li>
<li>Hubble just flew between Moon and Jupiter!!!!! Wow!!!! (right place, right time) <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6882992940">#</a></li>
<li>Photo of Hubble passing between Jupiter and Moon (bad exposure, blurry, but what can you do?) http://bit.ly/5ds9G9 <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6883707954">#</a></li>
<li>Just saw Avatar in 2D. Really wish I'd seen it with the magic glasses that added depth to the plot and characters. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6917764203">#</a></li>
<li>Having difficulty concentrating on writing today. Surf is up, sun is out... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6975806198">#</a></li>
<li>Interesting article on experience developing a crowdsourced Website: <a href="https://simonwillison.net/2009/Dec/20/crowdsourcing/">http://simonwillison.net/2009/Dec/20/crowdsourcing/</a> <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/6975849417">#</a></li>
<li>Great last minute gift: <a href="http://www.youvebeenleftbehind.com">http://www.youvebeenleftbehind.com</a> Not sure how I'd code "Rapture-triggered email" -- library function or new code? <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7007263006">#</a></li>
<li>Finished final column of the year. I think I'll begin celebrating the passing of 2009 RIGHT NOW... <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7012967572">#</a></li>
<li>"The Hurt Locker" was easily the best movie I saw this year. #fwiw <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7013178587">#</a></li>
<li>If "Avatar" stole from "War of the Worlds," instead of "Dances With Wolves" and killed all humans with virii... meh... still woulda sucked <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7013272855">#</a></li>
<li>I wish someone would give Werner Herzog \$300M to tell a story about cultures and conquest. <a class="aktt_tweet_time" href="https://twitter.com/lobrien/statuses/7013293347">#</a></li>
</ul>
<p>Powered by <a href="http://alexking.org/projects/wordpress">Twitter Tools</a></p>AI Systems in Left 4 Dead2009-12-24T09:49:00-10:002009-12-24T09:49:00-10:00larrytag:knowing.net,2009-12-24:/posts/2009/12/ai-systems-in-left-4-dead/<p>Cool presentation.</p>Wordless Wednesdays: Mele Kelikimaka2009-12-23T07:33:00-10:002009-12-23T07:33:00-10:00larrytag:knowing.net,2009-12-23:/posts/2009/12/wordless-wednesdays-mele-kelikimaka/<p><img alt="IMG_0038.JPG" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="312"></p>Happy Solstice!2009-12-21T07:57:00-10:002009-12-21T07:57:00-10:00larrytag:knowing.net,2009-12-21:/posts/2009/12/happy-solstice-2/<p>It's a tooth-chattering 62 degrees in Hawaii this morning as the Sun reaches its lowest latitude of the year.</p>
<p>Yesterday was a wild one, beginning with a waterspout:<br>
<img alt="DSC_5261" height="240" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_m.png" width="161"></p>
<p>and ending with a beautiful crescent moon near Jupiter.<br>
<img alt="DSC_5285" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p>As I was looking at Jupiter and the Moon in the twilight, I …</p><p>It's a tooth-chattering 62 degrees in Hawaii this morning as the Sun reaches its lowest latitude of the year.</p>
<p>Yesterday was a wild one, beginning with a waterspout:<br>
<img alt="DSC_5261" height="240" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_m.png" width="161"></p>
<p>and ending with a beautiful crescent moon near Jupiter.<br>
<img alt="DSC_5285" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>
<p>As I was looking at Jupiter and the Moon in the twilight, I noticed a satellite creeping between them, which was pretty impressive because it was still quite light out. As the satellite got higher in the sky, it brightened dramatically, probably as bright as Jupiter itself. It was stunning and I thought "Wow, an Iridium flare!" But when I got in and checked with <a href="http://www.spaceweather.com/flybys/index.php">Spaceweather's satellite tracker</a>, I found out I was even more lucky. It was the Hubble! Geektastic!</p>.Net Managed Interface for GPGPU and x64 Multicore Programming with Accelerator from F#2009-12-17T09:00:00-10:002009-12-17T09:00:00-10:00larrytag:knowing.net,2009-12-17:/posts/2009/12/net-managed-interface-for-gpgpu-and-x64-multicore-programming-with-accelerator-from-f/<p>I wish I had time to investigate Accelerator v2, a managed interface for General-Purpose GPU and x64 multicore data-parallel programming. Fun!</p>
<p>Satnam Singh's MSDN Blog : GPGPU and x64 Multicore Programming with Accelerator from F#.</p>Wordless Wednesday: Feral Jungle Cock2009-12-16T08:08:00-10:002009-12-16T08:08:00-10:00larrytag:knowing.net,2009-12-16:/posts/2009/12/wordless-wednesday-feral-jungle-cock/<p><img alt="DSC_2959" height="500" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="334"></p>Pursuit of Low-Bid, Not Communication, The Real Risk in Offshoring?2009-12-15T10:48:00-10:002009-12-15T10:48:00-10:00larrytag:knowing.net,2009-12-15:/posts/2009/12/pursuit-of-low-bid-not-communication-the-real-risk-in-offshoring/<p>Robert Dempsey's post <a href="http://blog.adsdevshop.com/2009/12/15/does-offshoring-really-save-money/">Does Offshoring Really Save Money?</a> says the #1 risk of offshoring is communication overhead.</p>
<p>In <a href="http://www.knowing.net/index.php/2008/08/29/risk-factors-for-offshore-outsourced-development-projects/">this post</a> I argue that the larger risks for offshore development include lack of offshore management know-how, inadequate user involvement, poor change controls, and lack of required technical know-how. As an "offshore …</p><p>Robert Dempsey's post <a href="http://blog.adsdevshop.com/2009/12/15/does-offshoring-really-save-money/">Does Offshoring Really Save Money?</a> says the #1 risk of offshoring is communication overhead.</p>
<p>In <a href="http://www.knowing.net/index.php/2008/08/29/risk-factors-for-offshore-outsourced-development-projects/">this post</a> I argue that the larger risks for offshore development include lack of offshore management know-how, inadequate user involvement, poor change controls, and lack of required technical know-how. As an "offshore" consultant myself (I'm available for work, by the way: lobrien -at- knowing.net ), my experience is that it's the "out of sight, out of mind" aspect, more than "communication overhead" per se, that can cause the problem.</p>
<p>Offshore teams can go dark more easily, the team members are less visible to stakeholders, and the competition to be the low-cost provider leads to less experienced, less competent, less involved development teams.</p>
<p>That's why I don't try to compete with low-cost bidders. In my experience, the majority of clients will trade some amount of cost-saving for a large increase in productivity and control. The development teams that I put together generally have developers from developing economies (<a href="https://en.wikipedia.org/wiki/BRIC">BRIC</a>), but everyone I hire passes a programming test customized for the position and technology they'll be using and has to meet my high standards. In return, I make sure that they get paid enough to strive to keep the gig. If they don't write tests, if they go dark, or if they just can't cut it, they're gone and I don't use them again. (I'm always seeking excellent developers, by the way: ibid.)</p>
<p>It's a system that creates teams of highly productive developers writing high-quality code -- a situation that saves a <em>lot</em> of money for the majority of teams seeking help. There are definitely risks in offshoring, but it definitely <em>can</em> save you money.</p>Bucket Brigade Algorithm Strategy Used To Win Darpa Balloons Challenge2009-12-14T10:54:00-10:002009-12-14T10:54:00-10:00larrytag:knowing.net,2009-12-14:/posts/2009/12/bucket-brigade-algorithm-wins-darpa-balloons-challenge/<p><img alt="red-balloon-for-contest-3421" class="alignright size-medium wp-image-4363" height="270" src="/uploads/2009/12/red-balloon-for-contest-3421-300x270.jpg" title="red-balloon-for-contest-3421" width="300">The "MIT Red Ballon Challenge" won a contest sponsored by DARPA to spot 10 red balloons placed somewhere in the continental United States. The MIT group spotted all 10 balloons within just a few hours of the balloons being launched. Other teams submitted within a few minutes of the MIT …</p><p><img alt="red-balloon-for-contest-3421" class="alignright size-medium wp-image-4363" height="270" src="/uploads/2009/12/red-balloon-for-contest-3421-300x270.jpg" title="red-balloon-for-contest-3421" width="300">The "MIT Red Ballon Challenge" won a contest sponsored by DARPA to spot 10 red balloons placed somewhere in the continental United States. The MIT group spotted all 10 balloons within just a few hours of the balloons being launched. Other teams submitted within a few minutes of the MIT group, but the MIT group was the first with all the balloons located properly.</p>
<p>The group used what is called a "bucket brigade" algorithm to entice people to join their effort. You got \<span class="math">\(2000 being the first to send in a balloon's coordinate. The person who signed you up as a potential spotter got \\)</span>1,000. The person who signed them up got \<span class="math">\(500 and the person who signed *them* up got \\)</span>250. The final \$250 went to charity. http://balloon.mit.edu/mit/payoff/</p>
<p>Bucket brigade algorithms are very helpful in a number of AI / machine learning scenarios, in which you are seeking not just a correct answer, but efficiency. For instance, a "classifier system" uses genetic techniques to generate a large number of rules for a <a href="https://en.wikipedia.org/wiki/Blackboard_system">blackboard-like solution generator</a>. However, you're typically not seeking just a rulebase that works, but an efficient rulebase.</p>
<p>By incorporating a bucket brigade algorithm, individual rules gain strength / credit /money by contributing to a solution. They participate in a solution by "bidding" their previously-acquired (or inherited) strength. In other words, if a rule solves an important preliminary step, it might not ever get the \<span class="math">\(2000 for "spotting the balloon" but it might get multiple payoffs of \\)</span>250 for being used in a large number of other solutions. Needless to say, the amount of strength/credit/money acquired by a rule is used to determine its fitness for breeding: the more strength/credit/money you've "earned," the more likely you are to reproduce.</p>
<p>Classifier systems are not quite as sexy as pure genetic programming (in which you breed actual programs to solve problems) nor as easy to program as a genetic algorithm (in which data is bred in an attempt to find a solution), but can produce useful results for hard problems.</p>
<p>The last classifier-blackboard system I wrote was in C++. It would certainly be a lot easier to do in today's dynamic languages!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Important statistical test made easy...2009-12-14T08:20:00-10:002009-12-14T08:20:00-10:00larrytag:knowing.net,2009-12-14:/posts/2009/12/important-statistical-test-made-easy/<p>I wish all statistical tests could be reduced to something this easy to follow and understand: <a href="https://blog.asmartbear.com/easy-statistics-for-adwords-ab-testing-and-hamsters.html">Easy statistics for AdWords A/B testing, and hamsters</a>.</p>Hawai'i No Ka Oi2009-12-13T08:47:00-10:002009-12-13T08:47:00-10:00larrytag:knowing.net,2009-12-13:/posts/2009/12/hawaii-no-ka-oi/<p>Went to Kua Bay yesterday. Beautiful azure surf and amazing 100'+ visibility. As soon as I got in the water, I saw 3 teenage ulua (jacks). Found an octopus in around 20' of water, broke an urchin and fed it to him. Went out to 50' and did some easy …</p><p>Went to Kua Bay yesterday. Beautiful azure surf and amazing 100'+ visibility. As soon as I got in the water, I saw 3 teenage ulua (jacks). Found an octopus in around 20' of water, broke an urchin and fed it to him. Went out to 50' and did some easy drops, spotted another group of ulua. Went back in towards the shore and swam along the rocks, watching the surf hit the shore from underneath the water. Tina grabbed me and said there was a shark -- a big fat white-tip circling through some caves about 25' down. She was totally mellow and we dove with her for several minutes before leaving her alone. On the way back in, yet another group of jacks.<br>
<img alt="kua-bay" class="alignnone size-full wp-image-4358" height="315" src="/uploads/2009/12/kua-bay.jpg" title="kua-bay" width="1158"></p>
<p>Then, last night went up to a star party in Waimea. It was totally socked in for a couple of hours, but eventually cleared up enough for me to take a couple photos. Here's the best, which a 1 minute exposure of the belt and sword of Orion, including the Great Nebula of Orion.</p>
<p>[caption id="attachment_4356" align="alignnone" width="428" caption="Belt and Sword of Orion"]<img alt="Belt and Sword of Orion" class="size-full wp-image-4356" height="640" src="/uploads/2009/12/dsc_52511.jpg" title="dsc_52511" width="428">[/caption]</p>Angry Red Really Small Planet2009-12-11T09:01:00-10:002009-12-11T09:01:00-10:00larrytag:knowing.net,2009-12-11:/posts/2009/12/angry-red-really-small-planet/<p>I got up this morning at 4AM to look at Mars, whose apparent size is growing and will peak in January. There are 60 arc-minutes in a degree and 60 arc-seconds in an arc-minute. Mars right now is about 10 arc-seconds in diameter. Even at 200x with my highest-quality eyepiece …</p><p>I got up this morning at 4AM to look at Mars, whose apparent size is growing and will peak in January. There are 60 arc-minutes in a degree and 60 arc-seconds in an arc-minute. Mars right now is about 10 arc-seconds in diameter. Even at 200x with my highest-quality eyepiece, it was tiny. I kind-of, sort-of, maybe saw a white polar cap and even more speculatively told myself that I was glimpsing a shadow on the disk that possibly could be a surface feature.</p>
<p>But probably not.</p>Wordless Wednesdays2009-12-09T09:00:00-10:002009-12-09T09:00:00-10:00larrytag:knowing.net,2009-12-09:/posts/2009/12/wordless-wednesdays/<p><img alt="IMG_3571" height="332" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>Sun Sets A Minute Later Today in Hawaii...2009-12-04T10:15:00-10:002009-12-04T10:15:00-10:00larrytag:knowing.net,2009-12-04:/posts/2009/12/sun-sets-a-minute-later-today-in-hawaii/<p>The sun sets today at 5:45PM, a minute later than it's been setting since November 16. While sunrise continues to come later until the solstice, I always think of today as when the day "starts getting longer."</p>
<p><img alt="dsc_5142_3_4_5_tonemapped" class="alignnone size-medium wp-image-4328" height="197" src="/uploads/2009/11/dsc_5142_3_4_5_tonemapped-300x197.jpg" title="dsc_5142_3_4_5_tonemapped" width="300"></p>Article on Windows 7 boot animation2009-12-02T09:04:00-10:002009-12-02T09:04:00-10:00larrytag:knowing.net,2009-12-02:/posts/2009/12/article-on-windows-7-boot-animation/<p>Just yesterday I was wondering whether the animation was static or procedurally generated. Since the article says it's "105 frames" I guess it's static.</p>
<p><a href="https://arstechnica.com/information-technology/2009/12/one-man-designed-the-windows-7-boot-animation/">How one man designed the Windows 7 boot animation</a>.</p>Wordless Wednesdays: Monster2009-12-02T08:59:00-10:002009-12-02T08:59:00-10:00larrytag:knowing.net,2009-12-02:/posts/2009/12/wordless-wednesdays-monster/<p><img alt="DSCN2183" height="375" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>Wordless Wednesdays: Kohanaiki Tidepools2009-11-25T12:18:00-10:002009-11-25T12:18:00-10:00larrytag:knowing.net,2009-11-25:/posts/2009/11/wordless-wednesdays-kohanaiki-sunset/<p><img alt="DSC_5158" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="500"></p>C# and VB Compilers Being Rewritten in Themselves; "Immutable" attribute coming?2009-11-24T09:25:00-10:002009-11-24T09:25:00-10:00larrytag:knowing.net,2009-11-24:/posts/2009/11/c-and-vb-compilers-being-rewritten-in-themselves-immutable-attribute-coming/<p><a href="https://www.eweek.com/development/microsoft-plans-to-open-c-visual-basic-compilers?kc=EWKNLITA11242009STR2">Darryl Taft interviews Luca Bolognese,</a> Group Program Manager for languages at MS, and comes up with some interesting hints.</p>
<p>The lede revolves around MS' plans to make the compilers more "open" (as in an open can of beer) by providing a "compiler-as-a-service" facility. On face value, "compiler-as-a-service" doesn't make much …</p><p><a href="https://www.eweek.com/development/microsoft-plans-to-open-c-visual-basic-compilers?kc=EWKNLITA11242009STR2">Darryl Taft interviews Luca Bolognese,</a> Group Program Manager for languages at MS, and comes up with some interesting hints.</p>
<p>The lede revolves around MS' plans to make the compilers more "open" (as in an open can of beer) by providing a "compiler-as-a-service" facility. On face value, "compiler-as-a-service" doesn't make much sense -- compilers aren't large and I don't perceive parallel make of C# programs being a grave problem. It'd be lovely to have Visual Studio in the cloud, though...</p>
<p>Apparently they're rewriting the C# and VB compilers in themselves, which is interesting, if for no other reason than the performance characteristics coming out of the managed side of things.</p>
<p>The buried lede revolves around concurrency and code words like "declarative" and "immutability." The hint is that Microsoft sees some big wins coming from the low-hanging fruit of declaring that a variable is single-assignment. (If you know that a variable doesn't change its value over time, you can use it's value in different threads without worry.)</p>
<p>What's interesting about this is not that single-assignment has <em>some</em> advantage (we knew that), it's the hint that Microsoft sees <em>enough</em> advantage to mention it as a specific optimization. It's not obvious (to me) that such an attribute would have profound effects in the real world, in that a real application would have a mix of mutable and immutable variables with complex dependencies. So to get a meaningful speedup presumably requires some far-from-trivial reasoning at compile and/or runtime.</p>Five Years Ago In Language-Oriented Programming2009-11-22T06:56:00-10:002009-11-22T06:56:00-10:00larrytag:knowing.net,2009-11-22:/posts/2009/11/five-years-ago-in-language-oriented-programming/<p>Five years ago I called attention to Language-Oriented Programming, which is now coming to fruition in the form of products such as JetBrains' MPS and Intentional Software's Intentional Workbench: <a href="http://www.knowing.net/index.php/2004/11/22/language-oriented-programming/">http://www.knowing.net/index.php/2004/11/22/language-oriented-programming/</a></p>Pirating Reputation in the Consulting Market2009-11-20T06:52:00-10:002009-11-20T06:52:00-10:00larrytag:knowing.net,2009-11-20:/posts/2009/11/pirating-reputation-in-the-consulting-market/<p>A <a href="https://arstechnica.com/gadgets/2009/11/developers-stealing-from-developers-an-app-store-tale/">cautionary tale from the iPhone market</a> in which a successful app developer discovered that an unscrupulous development house included his product in their portfolio.</p>
<p>I can attest that this happens. I have had direct experience with a component that, in retrospect, was almost certainly stolen and reverse-engineered. When confronted …</p><p>A <a href="https://arstechnica.com/gadgets/2009/11/developers-stealing-from-developers-an-app-store-tale/">cautionary tale from the iPhone market</a> in which a successful app developer discovered that an unscrupulous development house included his product in their portfolio.</p>
<p>I can attest that this happens. I have had direct experience with a component that, in retrospect, was almost certainly stolen and reverse-engineered. When confronted with irrefutable proof that an identical component was in the hands of a competitor, the Indian subcontracting company said "Wow! They must have stolen our component!" (There's no proof they were lying, but the circumstantial evidence was substantial.)</p>Astrophotography: Registax and Vado HD2009-11-19T10:11:00-10:002009-11-19T10:11:00-10:00larrytag:knowing.net,2009-11-19:/posts/2009/11/astrophotography-registax-and-vado-hd/<p>Registax needs a VFW H264 compressor in order to process video from the Vado HD camera. After installing <a href="http://www.free-codecs.com/dts_x264_vfw_download.htm">DTS x264 Vfw 01.22.2007</a> things seem to work.</p>Mortgage Meltdown Financial Instrument is NP-Complete2009-11-18T06:11:00-10:002009-11-18T06:11:00-10:00larrytag:knowing.net,2009-11-18:/posts/2009/11/mortgage-meltdown-financial-instrument-is-np-complete/<p><a href="https://boingboing.net/2009/10/15/complex-derivatives.html">Complex derivatives are "intractable" -- you can't tell if they're being tampered with - Boing Boing</a>.</p>
<p>Determining if a "Collateralized Debt Obligation" was tampered with is a "densest subgraph" problem, which is NP-Complete. Which is a fine thing to depend a global economy on.</p>Stellarvue Refractor Telescopes: Stellar Service (See What I Did There?)2009-11-17T09:00:00-10:002009-11-17T09:00:00-10:00larrytag:knowing.net,2009-11-17:/posts/2009/11/stellarvue-refractor-telescopes-stellar-service-see-what-i-did-there/<p>I had put off buying a telescope my entire adult life because I knew that you had to spend a good amount of money for quality and that, when it comes to a hobby that revolves around fleeting glimpses of faint and fuzzy objects, you must have confidence in your …</p><p>I had put off buying a telescope my entire adult life because I knew that you had to spend a good amount of money for quality and that, when it comes to a hobby that revolves around fleeting glimpses of faint and fuzzy objects, you must have confidence in your equipment.</p>
<p>But, I couldn't forever ignore my easy access to one of the <a href="http://www.ifa.hawaii.edu/info/vis/">premier dark sky sites in the world</a>. Once you're resigned to spending enough money for a quality scope, there's another tension: aperture versus convenience. On the one hand, Dobsonian-mount reflectors are inexpensive per inch of aperture. On the other hand, they're bulky. I knew that I didn't want to fall down the rabbit hole of aperture fever, so I decided to get a high-quality refractor.</p>
<p>Considerable research led me to a 102mm Stellarvue ED. I have been <a href="http://www.knowing.net/index.php/2009/01/25/">absolutely blown away</a> by this scope. But <strong>something happened</strong> in mid-October -- the scope must have been jarred during the ride back from Mauna Kea -- and an element in the focuser fell off.</p>
<p>After posting a plaintive "Can I fix this myself?" post on the Stellarvue Yahoo group, Vic Maris of Stellarvue directly contacted me, said "Call me up to talk about this," walked me through a quick check of the problem on the phone, and then said "Send it in and we'll take care of it."</p>
<p>Two weeks later I received a package back from Stellarvue containing an <em>entirely new focuser</em>. Invoice: \$0.</p>
<p>I don't know how long it will be before I buy another refractor, but when I do, it will be from <a href="https://www.stellarvue.com/">Stellarvue</a>.</p>Posting Ink to My Blog2009-11-16T09:39:00-10:002009-11-16T09:39:00-10:00larrytag:knowing.net,2009-11-16:/posts/2009/11/posting-ink-to-my-blog/<p>::: {#scid:31C7882A-CF45-4fcc-A614-7A5A52E598FF:4c46b732-6efe-4c73-b747-0824d3a14bd3 .wlWriterEditableSmartContent style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px"}
<img alt="" src="/uploads/2009/11/ink611596596032.png" title="Ink Generated with Ink Blog Plugin - http://www.edholloway.com">
:::</p>Coding style in tag-based languages2009-11-16T06:00:00-10:002009-11-16T06:00:00-10:00larrytag:knowing.net,2009-11-16:/posts/2009/11/coding-style-in-tag-based-languages/<p>HTML is typically formatted to show structural containment:</p>
<div class="highlight"><pre><span></span><code><span class="nt"><h1></span>Topic<span class="nt"></h1></span>
<span class="w"> </span><span class="nt"><p></span>Some<span class="w"> </span>paragraph.<span class="nt"></p></span>
<span class="w"> </span><span class="nt"><p></span>Next<span class="w"> </span>para.<span class="nt"></p></span>
<span class="w"> </span><span class="nt"><ul></span>
<span class="w"> </span><span class="nt"><li></span>item<span class="w"> </span>1<span class="nt"></li></span>
<span class="w"> </span><span class="nt"><li></span>item<span class="w"> </span>2<span class="nt"></li></span>
<span class="w"> </span><span class="nt"></ul></span>
</code></pre></div>
<p>Code is typically formatted to show flow-of-control:</p>
<div class="highlight"><pre><span></span><code><span class="nv">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">tree</span>.<span class="nv">append</span><span class="w"> </span><span class="s2">"Topic 1"</span>
<span class="nv">node</span>.<span class="nv">append</span><span class="w"> </span><span class="s2">"Some paragraph."</span>
<span class="nv">node</span>.<span class="nv">append</span><span class="w"> </span><span class="s2">"Next para."</span>
<span class="nv">list …</span></code></pre></div><p>HTML is typically formatted to show structural containment:</p>
<div class="highlight"><pre><span></span><code><span class="nt"><h1></span>Topic<span class="nt"></h1></span>
<span class="w"> </span><span class="nt"><p></span>Some<span class="w"> </span>paragraph.<span class="nt"></p></span>
<span class="w"> </span><span class="nt"><p></span>Next<span class="w"> </span>para.<span class="nt"></p></span>
<span class="w"> </span><span class="nt"><ul></span>
<span class="w"> </span><span class="nt"><li></span>item<span class="w"> </span>1<span class="nt"></li></span>
<span class="w"> </span><span class="nt"><li></span>item<span class="w"> </span>2<span class="nt"></li></span>
<span class="w"> </span><span class="nt"></ul></span>
</code></pre></div>
<p>Code is typically formatted to show flow-of-control:</p>
<div class="highlight"><pre><span></span><code><span class="nv">node</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">tree</span>.<span class="nv">append</span><span class="w"> </span><span class="s2">"Topic 1"</span>
<span class="nv">node</span>.<span class="nv">append</span><span class="w"> </span><span class="s2">"Some paragraph."</span>
<span class="nv">node</span>.<span class="nv">append</span><span class="w"> </span><span class="s2">"Next para."</span>
<span class="nv">list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">tree</span>.<span class="nv">append</span><span class="w"> </span><span class="s2">"Unordered"</span>
<span class="nv">items</span>.<span class="nv">each</span><span class="w"> </span>{<span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nv">i</span><span class="w"> </span><span class="o">|</span>
<span class="w"> </span><span class="nv">list</span>.<span class="nv">append</span><span class="w"> </span><span class="nv">i</span>
}
</code></pre></div>
<p>One reason that tag-based languages can lead to such confusing pages is that they are often formatted <strong>both</strong> ways:</p>
<div class="highlight"><pre><span></span><code><span class="nt"><h1></span>Topic<span class="nt"></h1></span>
<span class="w"> </span><span class="nt"><p></span>Some<span class="w"> </span>paragraph.<span class="nt"></p></span>
<span class="w"> </span><span class="nt"><p></span>Next<span class="w"> </span>para.<span class="nt"></p></span>
<span class="w"> </span><span class="nt"><ul></span>
<span class="w"> </span><span class="cp"><%</span><span class="w"> </span><span class="n">items</span><span class="o">.</span><span class="n">each</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="cp">%></span>
<span class="w"> </span><span class="nt"><li></span><span class="cp"><%=</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=><</span><span class="sr">/li></span>
<span class="sr"> </span><span class="err"><</span>%<span class="w"> </span>}<span class="w"> </span><span class="err">%></span>
<span class="w"> </span><span class="nt"></ul></span>
</code></pre></div>
<p>The purpose of formatting is to make structure <strong>apparent</strong>, not to slavishly increase the amount of whitespace in the world. Since the page is primarily the UI designer's domain, I think that flow-of-control ought <strong>not</strong> to be indented in tag-based pages:</p>
<div class="highlight"><pre><span></span><code><span class="nt"><h1></span>Topic<span class="nt"></h1></span>
<span class="w"> </span><span class="nt"><p></span>Some<span class="w"> </span>paragraph.<span class="nt"></p></span>
<span class="w"> </span><span class="nt"><p></span>Next<span class="w"> </span>para.<span class="nt"></p></span>
<span class="w"> </span><span class="nt"><ul></span>
<span class="w"> </span><span class="cp"><%</span><span class="w"> </span><span class="n">items</span><span class="o">.</span><span class="n">each</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="cp">%></span>
<span class="w"> </span><span class="nt"><li></span><span class="cp"><%=</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=><</span><span class="sr">/li></span>
<span class="sr"> </span><span class="err"><</span>%<span class="w"> </span>}<span class="w"> </span><span class="err">%></span>
<span class="w"> </span><span class="nt"></ul></span>
</code></pre></div>
<p>I've tried to make the difference more explicit in this image. Note how the 2nd sample, which combines indenting styles, has control-flow indenting (in blue) which I recommend eliminating:<br>
<img alt="indent" class="alignnone size-full wp-image-4319" height="392" src="/uploads/2009/11/indent.png" title="indent" width="263"></p>
<p>[Update:]{style="color: #ff0000;"} A more programmer-like thought is something alone the lines of "Control-flow on a page ought to be encapsulated," but I don't think the design tools of designers are capable of rendering componentized snippets, which I think is why designers are so darned resistant to them.</p>Looking for an excellent developer who believes that quality is the best route to productivity?2009-11-11T11:02:00-10:002009-11-11T11:02:00-10:00larrytag:knowing.net,2009-11-11:/posts/2009/11/looking-for-an-excellent-developer-who-believes-that-quality-is-the-best-route-to-productivity/<p>I have recently finished an engagement with a client and am footloose and fancy free.</p>
<p>If anyone is looking for an excellent developer with an object-oriented bias and a deep belief that to improve productivity teams should concentrate on quality, please drop me a line at lobrien "at" knowing "dot …</p><p>I have recently finished an engagement with a client and am footloose and fancy free.</p>
<p>If anyone is looking for an excellent developer with an object-oriented bias and a deep belief that to improve productivity teams should concentrate on quality, please drop me a line at lobrien "at" knowing "dot" net. The technologies I most prefer right now are: Ruby, Rails, iPhone using MonoTouch, or C# with ASP.NET MVC. However, I'm very comfortable and have experience ranging from "some to extensive" with most major technologies.</p>
<p>Additionally, I am hoping to continue working with some colleagues with whom I have been collaborating on recent projects. These are developers who are highly productive, committed to quality, and responsible.</p>
<p>Here's my CV on Stack Overflow Careers: http://careers.stackoverflow.com/lobrien</p>Google Releases Their "Closure" JavaScript Library2009-11-06T07:24:00-10:002009-11-06T07:24:00-10:00larrytag:knowing.net,2009-11-06:/posts/2009/11/google-releases-their-closure-javascript-library/<p><a href="http://googlecode.blogspot.com/2009/11/introducing-closure-tools.html">Google Code Blog: Introducing Closure Tools</a>.</p>
<p>Given Google's resources, goals, and products, this automatically becomes a leading candidate as a "standard library" for developers doing JavaScript work (i.e., anyone working with the Web). Not sure of its overlap / incompatibility with other major libraries, but this will definitely reward study …</p><p><a href="http://googlecode.blogspot.com/2009/11/introducing-closure-tools.html">Google Code Blog: Introducing Closure Tools</a>.</p>
<p>Given Google's resources, goals, and products, this automatically becomes a leading candidate as a "standard library" for developers doing JavaScript work (i.e., anyone working with the Web). Not sure of its overlap / incompatibility with other major libraries, but this will definitely reward study.</p>MonoTouch / MonoDevelop Gets Debugging Support2009-11-05T11:55:00-10:002009-11-05T11:55:00-10:00larrytag:knowing.net,2009-11-05:/posts/2009/11/monotouch-monodevelop-gets-debugging-support/<p><a href="https://tirania.org/blog/archive/2009/Nov-04.html">Introducing Debugging for MonoTouch - Miguel de Icaza</a>.</p>
<p>I've been very impressed by MonoTouch and MonoDevelop for iPhone programming: it's a great combination of the CocoaTouch APIs (which are very nice) and the C# programming language (which is my favorite mainstream language if you don't think that Ruby has crossed the …</p><p><a href="https://tirania.org/blog/archive/2009/Nov-04.html">Introducing Debugging for MonoTouch - Miguel de Icaza</a>.</p>
<p>I've been very impressed by MonoTouch and MonoDevelop for iPhone programming: it's a great combination of the CocoaTouch APIs (which are very nice) and the C# programming language (which is my favorite mainstream language if you don't think that Ruby has crossed the chasm). The major challenge has been a lack of debugging. Well, it's a challenge no more.</p>
<p>In my SD Times column, I said that (even without debugging) "[MonoTouch is the best entry point for C# developers interested in seeing what all the hubbub is about."<br>
]{#ctl00_content_Placeholder_articleBody_Label .arial_12_14 .normalLink}</p>My Interviews of Gamma et al. and Grady Booch2009-11-03T09:00:00-10:002009-11-03T09:00:00-10:00larrytag:knowing.net,2009-11-03:/posts/2009/11/my-interviews-of-gamma-et-al-and-grady-booch/<p>The 15th anniversary of the release of <a href="https://www.amazon.com/exec/obidos/ASIN/0201633612/thinkinginnet-20">Design Patterns</a> led to the following interviews:<br>
<a href="http://www.informit.com/articles/article.aspx?p=1404056">Design Patterns 15 Years Later: An Interview with Erich Gamma, Richard Helm, and Ralph Johnson</a><br>
<a href="http://www.informit.com/articles/article.aspx?p=1405569">Grady Booch on Design Patterns, OOP, and Coffee</a></p>Restoring From the Archives2009-11-02T12:52:00-10:002009-11-02T12:52:00-10:00larrytag:knowing.net,2009-11-02:/posts/2009/11/restoring-from-the-archives/<p>I posted two old articles that were perennial Google link-bait:</p>
<p><a href="http://www.knowing.net/index.php/genetic-algorithms-in-c/">Genetic Algorithms in C#</a></p>
<p><a href="http://www.knowing.net/index.php/programming-sabre-with-java-c-and-xml/">Programming Sabre in C#, Java, and XML</a></p>
<p>I'd lost the articles as part of switching from DasBlog to WordPress.</p>Dictated Using MacSpeech Dictate2009-11-01T10:21:00-10:002009-11-01T10:21:00-10:00larrytag:knowing.net,2009-11-01:/posts/2009/11/dictated-using-macspeech-dictate/<p>[/hosts is defeated]{style="color: #ff0000;"} using MacSpeech Dictate. Well, that was not very successful first sentence, was it?</p>
<p>This blog post is being dictated using MacSpeech Dictate. That's more like it.</p>
<p>I am using the jawbone Bluetooth headset, connected to my Mac. Actually, the word was "A." not "the …</p><p>[/hosts is defeated]{style="color: #ff0000;"} using MacSpeech Dictate. Well, that was not very successful first sentence, was it?</p>
<p>This blog post is being dictated using MacSpeech Dictate. That's more like it.</p>
<p>I am using the jawbone Bluetooth headset, connected to my Mac. Actually, the word was "A." not "the" in the previous sentence.</p>
<p>In general, I am not a great fan of voice dictation software, which often has both gross mistakes where nonsensical words are returned and fine mistakes, where short connecting words are lost or transposed. This is all [okay,]{style="color: #ff0000;"}. Sigh. This is all a pity, because it certainly seems like composition by dictation would be an enormous productivity boost for a writer.</p>
<p>I've been using voice dictation software [f]{style="color: #ff0000;"}or, let's see, something in excess of 15 years. [I]{style="color: #ff0000;"} first review[ed]{style="color: #ff0000;"} voice dictation software when I was working for the magazines, and[ I]{style="color: #ff0000;"} left in 1996. I think I first reviewed Dragon [f]{style="color: #ff0000;"}or AI expert [Navy from (? -- I have no idea what I actually said)]{style="color: #ff0000;"} 1992.</p>
<p>[It's ]{style="color: #ff0000;"}Almost always been just like it is now, where as soon as you think "okay that's an acceptable level of performance," you get results like the last paragraph. You really can't turn away from the screen, lest you risk some catastrophic recognition problem.</p>
<p>The other thing that is really frustrating is that you don't realize how much composition is not stream-based. When the voice recognition software makes a mistake, navigating back to it th[e]{style="color: #ff0000;"}n jumping to the end of the document has always been, in my experience, a frustrating experience. Given that there's probably some amount of correction going into [80]{style="color: #ff0000;"} percent of the sentences you write, whether because of transcription error or simply because you want to rephrase, any problems with navigation are a big deal.</p>
<p>I think that is as far as I will go with this blog post. Your mileage may vary.</p>
<p>[Manual corrections for legibility in red.]{style="color: #ff0000;"}</p>Jawbone Bluetooth Headset Works As Mac Audio Input/Output2009-11-01T09:59:00-10:002009-11-01T09:59:00-10:00larrytag:knowing.net,2009-11-01:/posts/2009/11/jawbone-bluetooth-headset-works-as-mac-audio-inputoutput/<p>I don't know if this is new to Snow Leopard, but I just paired my Jawbone Bluetooth headset with my Mac Pro desktop as the input/output audio device and it works! Sound quality for playback is not great (I don't think I'll be listening to much music this way …</p><p>I don't know if this is new to Snow Leopard, but I just paired my Jawbone Bluetooth headset with my Mac Pro desktop as the input/output audio device and it works! Sound quality for playback is not great (I don't think I'll be listening to much music this way), but it sure beats a USB headset for video conferencing and voice dictation. I'll be setting up my MacDictate speech profile now.</p>
<p>Instructions: Basically nothing to it. Turn on Bluetooth on your Mac. Press and hold both buttons on the Jawbone to make it discoverable.</p>Snow Leopard, Windows 7 Upgrade Problems2009-10-29T15:11:00-10:002009-10-29T15:11:00-10:00larrytag:knowing.net,2009-10-29:/posts/2009/10/snow-leopard-windows-7-upgrade-problems/<p>Quicken 2006 doesn't run under Windows 7 and there will not be a Mac version until 2010.</p>
<p>I can't get Hugs or Mercurial running under Snow Leopard due to architecture incompatibilities (32- vs 64-bit) in various support libraries. It's frustrating wasting so much time downloading, building, tracking dependencies, etc. Especially …</p><p>Quicken 2006 doesn't run under Windows 7 and there will not be a Mac version until 2010.</p>
<p>I can't get Hugs or Mercurial running under Snow Leopard due to architecture incompatibilities (32- vs 64-bit) in various support libraries. It's frustrating wasting so much time downloading, building, tracking dependencies, etc. Especially since these are both essentially optional tools, and not directly related to the bottom line.</p>
<p>[Update]{style="color: Red;"}: According to <a href="https://trac.macports.org/wiki/Migration">Ports wiki</a> :</p>
<blockquote>
<p>An installation of MacPorts and the ports installed by it are only designed to work on a single OS release and a single CPU architecture. If you upgrade to a new OS version (e.g. from Leopard to Snow Leopard) or migrate to a new machine with a different type of CPU (e.g. PowerPC to Intel), you may get lucky and have your ports keep working, but in general, things will break.</p>
</blockquote>
<p>And the solution is "reinstall all your ports". Argh.</p>Tutorial: MonoTouch Custom ViewController, Port of Sadun's Recipe 2-12009-10-20T13:21:00-10:002009-10-20T13:21:00-10:00larrytag:knowing.net,2009-10-20:/posts/2009/10/tutorial-monotouch-custom-viewcontroller-port-of-saduns-recipe-2-1/<p>I just uploaded a <a href="http://www.knowing.net/index.php/monotouch-custom-viewcontroller-adding-stepwise-subviews/">MonoTouch tutorial porting Sadun's Recipe 2-1 (Stepwise Subviews) to MonoTouch</a>. Let me know if you find it useful.</p>Review Disclosure: Separate Treatment for Bloggers and Traditional Media2009-10-17T09:27:00-10:002009-10-17T09:27:00-10:00larrytag:knowing.net,2009-10-17:/posts/2009/10/review-disclosure-separate-treatment-for-bloggers-and-traditional-media/<p>The FTC recently produced new rules governing disclosure for bloggers and other "word-of-mouth-advertisers." Basically, the take-away is that a blog, Tweet, Facebook, Amazon review, etc. is now viewed as a paid endorsement if you receive the product from the manufacturer for free. Okay, fair enough. But the FTC “does not …</p><p>The FTC recently produced new rules governing disclosure for bloggers and other "word-of-mouth-advertisers." Basically, the take-away is that a blog, Tweet, Facebook, Amazon review, etc. is now viewed as a paid endorsement if you receive the product from the manufacturer for free. Okay, fair enough. But the FTC “does not consider reviews published in traditional media…to be sponsored advertising messages.” The Commission believes that “knowing whether the [traditional] media entity that published the review paid for the item in question would not affect the weight the consumers give to the reviewer’s statements.”</p>
<p>As a guy who makes maybe a grand a year reviewing stuff for traditional media, this strikes me as wrong (and unfair). There is an enormous disparity in the review policies of traditional media. At one extreme you have <em>Consumer Reports</em>, with a famously rigorous policy of avoiding vendor influence, at the other you have, say, dive travel magazines where you can find "reviews" written by advertising representatives! Such policies are <em>not</em> obvious to readers and are relevant to their judgment. On the matter of fairness, what's sauce for the goose is sauce for the gander: drawing lines between "old" and "new" media is a sucker's game.</p>
<p>It doesn't make sense to me that in a review published in this blog, I am legally obligated to add a line that reads, say, "I received a free copy of this book" but that very same line doesn't have to appear if I write the review for my column in <em><a href="https://sdtimes.com/">SD Times</a></em>. It's not the obligation to "clearly and conspicuously" disclose in the blog that I object to, it's that traditional media are exempt from disclosing the exact same "material relationship" between the manufacturer and the reviewer.</p>
<p>I plan on writing a little "standard disclosure" page that reveals the (I hope not surprising) fact that I receive a lot of books, software, and conference registrations for free. I'll link to that when I write reviews in my blog. I don't see why a similar disclosure of review policies is a burden for traditional media.</p>
<p>But you tell me: when you read or view a review in traditional media, does the knowledge of whether the product was paid for affect the weight you give the review?</p>Meijer Giving Functional Programming Intro Course Online2009-10-15T09:47:00-10:002009-10-15T09:47:00-10:00larrytag:knowing.net,2009-10-15:/posts/2009/10/meijer-giving-functional-programming-intro-course-online/<p>Erik Meijer, an <strong>excellent lecturer</strong> and one of the smartest people at Microsoft, is giving a 13-part lecture series on "Functional Programming Fundamentals." <a href="http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1">It begins here</a>.</p>
<p>I am absolutely positive this will be worth the time invested. I just listened to the first lecture, ordered the textbook, and fired up …</p><p>Erik Meijer, an <strong>excellent lecturer</strong> and one of the smartest people at Microsoft, is giving a 13-part lecture series on "Functional Programming Fundamentals." <a href="http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals/Lecture-Series-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-1">It begins here</a>.</p>
<p>I am absolutely positive this will be worth the time invested. I just listened to the first lecture, ordered the textbook, and fired up MonoDevelop to do the homework from the first lecture...</p>
<p>[Update:]{style="color:red;"} That was fun. It highlighted that I don't know LINQ as well as I ought: I spent more time trying to deal with flattening lists than with the quicksort algorithm...</p>"You Put In Other Details"2009-10-14T10:04:00-10:002009-10-14T10:04:00-10:00larrytag:knowing.net,2009-10-14:/posts/2009/10/you-put-in-other-details/<p><a href="http://www.lettersofnote.com/2009/09/to-top-scientist.html">Young Denis</a> grew up to be every client you'll ever develop software for:</p>
<p><img alt="3936544529_02f007a1fe_o" class="alignnone size-full wp-image-4187" height="1229" src="/uploads/2009/10/3936544529_02f007a1fe_o.jpg" title="3936544529_02f007a1fe_o" width="520"></p>Rails And PHP Are The Access(es) Of The Web2009-10-14T08:58:00-10:002009-10-14T08:58:00-10:00larrytag:knowing.net,2009-10-14:/posts/2009/10/why-rails-is-the-access-of-the-web/<p>Ted Neward wonders "Where is this decade's Access?" From 2007: <a href="http://www.knowing.net/index.php/2007/05/03/auto-database-browser-with-fks-as-hyperlinks/">same question</a>, <a href="http://www.knowing.net/index.php/2007/05/03/rails-forms-with-auto-hyperlink-on-fks/">For me, Rails was the answer</a>.</p>
<p>There are two issues: one is the ease with which a person <em>with some knowledge</em> can solve some (relatively simple) task (the classic "build a doghouse" project). If I want to build …</p><p>Ted Neward wonders "Where is this decade's Access?" From 2007: <a href="http://www.knowing.net/index.php/2007/05/03/auto-database-browser-with-fks-as-hyperlinks/">same question</a>, <a href="http://www.knowing.net/index.php/2007/05/03/rails-forms-with-auto-hyperlink-on-fks/">For me, Rails was the answer</a>.</p>
<p>There are two issues: one is the ease with which a person <em>with some knowledge</em> can solve some (relatively simple) task (the classic "build a doghouse" project). If I want to build a doghouse on the Web, I'll do it in Ruby on Rails (in part because I always want the option of evolving it into a more sophisticated structure).</p>
<p>The other issue is the bridge between power-users and programmers. Although I suspect that most people with an interest in computers would "get" Python or Ruby and might be intrigued enough to learn how to build doghouses, I think that the reality is that PHP has become the dominant bridge -- it's the Basic, dBase, VB, Access, etc. of the Web. Almost every resume from young programmers I've seen in the past few years includes some reference to PHP.</p>
<p>For almost 50 years we've seen programming languages succeed and fail. But no one talks about the lessons to be learned from that. Everyone just wants to walk through the carnival, gaping at the pretty lights and giving up their money to the hucksters.</p>Xanadu Trackbacks2009-10-13T15:37:00-10:002009-10-13T15:37:00-10:00larrytag:knowing.net,2009-10-13:/posts/2009/10/xanadu-trackbacks/<p>Jeff Atwood's brief post on Ted Nelson's <a href="https://blog.codinghorror.com/">Xanadu</a> ~~failed to~~ mention[ed briefly]{style="color:red"} the aspect of Xanadu that I expected to be worked out by now, which is that links were bidirectional in Xanadu. The closest thing the Web has are trackbacks / pingbacks, which are problematic to …</p><p>Jeff Atwood's brief post on Ted Nelson's <a href="https://blog.codinghorror.com/">Xanadu</a> ~~failed to~~ mention[ed briefly]{style="color:red"} the aspect of Xanadu that I expected to be worked out by now, which is that links were bidirectional in Xanadu. The closest thing the Web has are trackbacks / pingbacks, which are problematic to spam. I gave some thought to trackback techniques and anticipated blogspam in <a href="http://www.knowing.net/index.php/2002/09/24/after-reading-this-post-and-being-exposed-to-a-hrefhttpxml/">2002</a>, but I think with <a href="http://www.knowing.net/index.php/2007/02/13/foaf-openid-and-trackback/">OpenID and FOAF, these issues can be overcome</a>. (More <a href="http://www.knowing.net/index.php/2007/02/13/more-on-openid-foaf-and-trackback/">here</a>)</p>Big Island Internet Professionals2009-10-10T17:27:00-10:002009-10-10T17:27:00-10:00larrytag:knowing.net,2009-10-10:/posts/2009/10/big-island-internet-profeasionals/<p>One of the great delights about Hawaii is the diversity you get at events where one might expect a niche crowd. At today's Big Island Internet meet-up, there were entrepreneurs, people commending the "global consciousness" enabled by the Internet, and a surprising number of martial artists.<br>
The speaker, Tom Callos …</p><p>One of the great delights about Hawaii is the diversity you get at events where one might expect a niche crowd. At today's Big Island Internet meet-up, there were entrepreneurs, people commending the "global consciousness" enabled by the Internet, and a surprising number of martial artists.<br>
The speaker, Tom Callos, is a serial entrepreneur. He told a fascinating story about developing and maintaining a premium- priced Web business for owners of martial arts studios, a group not known for their free- spending ways.</p>
<p>Many thanks to <a href="http://damontucker.com/">Damon Tucker</a> and <a href="http://www.buzztone.com/larry%20czerwonka/">Larry Czerwonka</a> for organizing the meeting and to <a href="https://www.bigislandpizza.com/">Big Island Pizza</a> for hosting (and providing some excellent pizza!). Meetups are scheduled for the 2nd Saturday of the month; there was some talk about trying to do one on the Kona side but for now they are centered in Hilo.</p>
<p>[Composed with ShapeWriter -- www.shapewriter.com]</p>
<p>Sent from my iPhone</p>Enterprise Development for the iPhone2009-10-09T09:21:00-10:002009-10-09T09:21:00-10:00larrytag:knowing.net,2009-10-09:/posts/2009/10/enterprise-development-for-the-iphone/<p>Novell's MonoTouch makes iPhone development much more appealing for enterprise developers, but enterprise development on the iPhone requires solid database solutions (Want to understand enterprise development? <strong>Follow the data</strong>).</p>
<p>I have begun investigating DB solutions for the iPhone, by which I mean solutions whereby the iPhone can access the big …</p><p>Novell's MonoTouch makes iPhone development much more appealing for enterprise developers, but enterprise development on the iPhone requires solid database solutions (Want to understand enterprise development? <strong>Follow the data</strong>).</p>
<p>I have begun investigating DB solutions for the iPhone, by which I mean solutions whereby the iPhone can access the big 3 server-side databases: Oracle, SQL Server, and MySQL.</p>
<p>The big question is whether there can be a single strategy for iPhone development that mitigates DB risk: is there one solution that "just works" no matter which of the major DB vendors happens to be in use?</p>
<p>Stay tuned...</p>Roadside Geology? There's an App for That2009-09-28T13:34:00-10:002009-09-28T13:34:00-10:00larrytag:knowing.net,2009-09-28:/posts/2009/09/roadside-geology-theres-an-app-for-that/<p>If I lived in AZ, CQ, FL, NY, TX, or WA, I'd have this on my iPhone in two seconds.</p>
<p>Integrity Logic - Geology AZ .</p>Wheel won't turn on car left 3 months: Rust or Brake Issue?2009-09-24T10:02:00-10:002009-09-24T10:02:00-10:00larrytag:knowing.net,2009-09-24:/posts/2009/09/wheel-wont-turn-on-car-left-3-months-rust-or-brake-issue/<p>Apparently the person who we told to move the car every week didn't. The left rear wheel of my (front-wheel drive) car will not turn; the right turns fine. I jacked up the car and applied considerable leverage to the wheel, but it still won't turn. I took off the …</p><p>Apparently the person who we told to move the car every week didn't. The left rear wheel of my (front-wheel drive) car will not turn; the right turns fine. I jacked up the car and applied considerable leverage to the wheel, but it still won't turn. I took off the wheel itself and WD-40'd the heck out of everything in sight.</p>
<p>While I wait for that to soak in, it occurred to me that the problem might be brake-related. Does that make sense?</p>
<p>If the WD-40 doesn't miraculously break the corrosion, what else should I try?</p>
<p>[Update:]{style="color: #ff0000;"} I waited for the WD-40 to soak in,removed the tire again, tap-tapped with a hammer for a few minutes, and the wheel broke free. Leading speculation seems to be that the emergency brake cable may have been stuck...</p>Collection Agencies for Deadbeat Clients?2009-09-23T08:28:00-10:002009-09-23T08:28:00-10:00larrytag:knowing.net,2009-09-23:/posts/2009/09/collection-agencies-for-deadbeat-clients/<p>What do you do if a client stiffs you?</p>
<p>Twice in my career, clients have decided not to pay my invoices. Once, after delivering a component, a client seems to have made the simple decision that the amount of my final invoice was less than what it would cost me …</p><p>What do you do if a client stiffs you?</p>
<p>Twice in my career, clients have decided not to pay my invoices. Once, after delivering a component, a client seems to have made the simple decision that the amount of my final invoice was less than what it would cost me to retrieve it (they miscalculated -- the amount was so little I took them to small claims court. Sure, the opportunity cost was excessive, but it was such a bush-league maneuver I couldn't let them get away with it.).</p>
<p>Currently, I've got a much more serious situation. I wish I had faith in the legal system, but I don't. I feel that no matter how much the facts are on your side, the person with the deeper pockets can delay and delay, costing you not just money, but the only thing you have as a consultant, which is your time. As a software developer, you train yourself to manage risk, and the risk and opportunity cost of suing someone is clearly very high.</p>
<p><a href="https://theruntime.com/">Jacob Profitt</a> says that a collection agency is the logical choice: that they buy the debt discounted for the risk and I move on with my life. Has anyone used a collection agency to go after a contract debt? What kind of experiences have you had?</p>Back in Hawai'i2009-09-22T19:25:00-10:002009-09-22T19:25:00-10:00larrytag:knowing.net,2009-09-22:/posts/2009/09/back-in-hawaii/<p>The only thing nicer than vacationing in Hawai'i is getting on a plane and realizing that you're going back home... to Hawai'i.</p>
<p>Tina and I spent the Summer in Milwaukee, where her parents live. Unfortunately, the Summer for me was dominated by rotten work developments.</p>
<p>I had planned on doing …</p><p>The only thing nicer than vacationing in Hawai'i is getting on a plane and realizing that you're going back home... to Hawai'i.</p>
<p>Tina and I spent the Summer in Milwaukee, where her parents live. Unfortunately, the Summer for me was dominated by rotten work developments.</p>
<p>I had planned on doing little income-generating work this Summer, instead investing in some longer-term goals. Unfortunately, my client wanted to add new spangles and gew-gaws to their project and I wanted to keep them happy.</p>
<p>The manager in charge of the project died in a terrible accident. The owner of the company suddenly got involved, flipped out, and decided to cancel the whole project. Which is his right, of course, but he also decided not to pay my company for the work that had been done in the previous 8 weeks. So that meant that I had to pay my developers out of my own pocket. So not only did I end up working for free for the Summer, my obligations to my developers erased my (relatively good) Spring profits.</p>
<p>What sucks about it is that, even though I'm confident that I would ultimately prevail in a legal battle, I am also sure that I would have to spend money out of pocket to a lawyer and I wouldn't win for at least a year. So I'm very seriously considering sucking up this really brutal loss and just moving on to new projects.</p>More photos from Machu Picchu2009-09-17T08:06:00-10:002009-09-17T08:06:00-10:00larrytag:knowing.net,2009-09-17:/posts/2009/09/more-photos-from-machu-picchu/<p>[caption id="" align="alignnone" width="500" caption="More images from Machu Picchu"]<img alt="More images from Machu Picchu" height="334" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" title="More images from Machu Picchu" width="500">[/caption]</p>
<p>http://www.flickr.com/photos/84827625\@N00/sets/72157622397361314/</p>Back from Machu Picchu2009-09-14T15:06:00-10:002009-09-14T15:06:00-10:00larrytag:knowing.net,2009-09-14:/posts/2009/09/back-from-machu-picchu/<p><img alt="" class="alignnone" height="446" src="https://s.yimg.com/pw/images/en-us/photo_unavailable_l.png" title="Machu Picchu Panorama" width="1024"><br>
Machu Picchu Selects (31 Photos)</p>"Fritzing" Software Bridges Schematics, Prototypes, PCBs2009-09-06T05:13:00-10:002009-09-06T05:13:00-10:00larrytag:knowing.net,2009-09-06:/posts/2009/09/fritzing-software-bridges-schematics-prototypes-pcbs/<p>One of the many things that I haven't had time to pursue this year is a determination to do some hardware hacking. One aspect that's been a challenge is moving between the joy of "stick a wire in a breadboard and see what happens" and schematics (I'm sure for the …</p><p>One of the many things that I haven't had time to pursue this year is a determination to do some hardware hacking. One aspect that's been a challenge is moving between the joy of "stick a wire in a breadboard and see what happens" and schematics (I'm sure for the more experience this "challenge" is long forgotten). <a href="http://fritzing.org/home/">Fritzing</a> is a piece of software on which you can drag-and-drop wires and components and it will show you the schematic (and vice versa). Kewl.</p>I'll Meetchoo In Pichu2009-08-29T04:24:00-10:002009-08-29T04:24:00-10:00larrytag:knowing.net,2009-08-29:/posts/2009/08/ill-meetchoo-in-pichu/<p>Well, the day has finally arrived. We're off to hike the Inca Trail and visit Machu Picchu. Extended forecast for Cuzco: rain, rain, thunderstorms, rain, rain, rain.</p>Inglorious Basterds: The Celluloid Is Mightier Than The Wehrmacht2009-08-27T05:41:00-10:002009-08-27T05:41:00-10:00larrytag:knowing.net,2009-08-27:/posts/2009/08/inglorious-basterds-the-celluloid-is-mightier-than-the-wehrmacht/<p>Saw <a href="https://www.imdb.com/title/tt0361748/">the latest Quentin Tarentino</a> movie last night. I actually quite liked "<a href="https://www.imdb.com/title/tt1028528/">Death Proof</a>" so I didn't see this as any kind of "comeback," as the critics seem to be labeling it.</p>
<p>For 7/8ths of the movie, I was queasy about the trivialization of the Holocaust: a movie about …</p><p>Saw <a href="https://www.imdb.com/title/tt0361748/">the latest Quentin Tarentino</a> movie last night. I actually quite liked "<a href="https://www.imdb.com/title/tt1028528/">Death Proof</a>" so I didn't see this as any kind of "comeback," as the critics seem to be labeling it.</p>
<p>For 7/8ths of the movie, I was queasy about the trivialization of the Holocaust: a movie about a squad of bad-ass Jews and femmes fatale battling an impossibly calculating SS officer (forget Brad Pitt's top billing, Christoph Waltz is the real star). But then the curveball comes in right over home plate -- rather than dodging the "revenge fantasy" elements, Tarentino puts it up on screen in slow motion. And in the midst of this B-movie sequence, the entire theme of the movie, about the power of stories (and movies, in particular) crystallizes. The movies literally kill the bad guys (even as the Nazi's screen their own triumphant movie).</p>
<p>There are things that Tarentino does as a director that I don't like (the "Putting Out Fire With Gasoline" sequence, the comic-book character cards), but as a story-teller, he's fantastic.</p>Brilliance From Siggraph: Bokeh-Based Tiny Barcodes2009-08-25T05:18:00-10:002009-08-25T05:18:00-10:00larrytag:knowing.net,2009-08-25:/posts/2009/08/brilliance-from-siggraph-bokeh-based-tiny-barcodes/<p>"<a href="https://en.wikipedia.org/wiki/Bokeh">Bokeh</a>" is a term used by photographers to praise the out-of-focus areas of a photograph.</p>
<p>Researchers at MIT have figured out how to exploit bokeh so that they can read 3mm barcodes with 2.5 <em>micron</em> elements at a distance of 4 <em>meters</em> with an off-the-shelf camera!</p>
<p>The "bokode" dot …</p><p>"<a href="https://en.wikipedia.org/wiki/Bokeh">Bokeh</a>" is a term used by photographers to praise the out-of-focus areas of a photograph.</p>
<p>Researchers at MIT have figured out how to exploit bokeh so that they can read 3mm barcodes with 2.5 <em>micron</em> elements at a distance of 4 <em>meters</em> with an off-the-shelf camera!</p>
<p>The "bokode" dot uses a lenslet to create lightrays which, when captured by a large aperture lens focused at infinity, reconstruct a pattern. The orientation of the bokode to the lens is highly recoverable. As a guy who just spent some time prototyping an augmented reality application and being foiled by the challenge of capturing exactly this information, I'm blown away.</p>
<p>More generally, I'm blown away by the transformation of "optics" into information processing. In my newfound hobby of astronomy, guys with 4" telescopes are creating images better than observatories could produce a few decades ago.</p>Inca Trail T-72009-08-24T07:06:00-10:002009-08-24T07:06:00-10:00larrytag:knowing.net,2009-08-24:/posts/2009/08/peru-t-7/<p>Did a final training hike around Lake Geneva the other day. Five hours in the rain with full packs, 14 miles or so. Felt fairly good about it until realizing: "So instead of around a lake, it's 4000' of vertical. Take a break, put your pack on and do it …</p><p>Did a final training hike around Lake Geneva the other day. Five hours in the rain with full packs, 14 miles or so. Felt fairly good about it until realizing: "So instead of around a lake, it's 4000' of vertical. Take a break, put your pack on and do it again in the afternoon, racing against dark when the temperatures plunge towards freezing. Sleep in a tent, wake up at 5AM to do it all over again. For 4 days. Oh yeah, at 10,000'."</p>Can you be tone-deaf, but love music?2009-08-19T04:02:00-10:002009-08-19T04:02:00-10:00larrytag:knowing.net,2009-08-19:/posts/2009/08/can-you-be-tone-deaf-but-love-music/<p>Researchers <a href="https://www.msn.com/">say</a> that tone-deafness has a physiological basis: few neural connections between ... uh ... the frammitz and whatzitz lobes.</p>
<p>I <em>think</em> I may be tone-deaf. On the other hand, I may just have been lazy in music classes (I was lazy in all my other classes). I absolutely love music but …</p><p>Researchers <a href="https://www.msn.com/">say</a> that tone-deafness has a physiological basis: few neural connections between ... uh ... the frammitz and whatzitz lobes.</p>
<p>I <em>think</em> I may be tone-deaf. On the other hand, I may just have been lazy in music classes (I was lazy in all my other classes). I absolutely love music but I cannot play any musical instruments (laziness again being the likely factor). I'm pretty good at Guitar Hero, but if I anticipate the upcoming buttons I'm just as likely to guess wrong about whether a riff is high-to-low as low-to-high.</p>
<p>I can definitely tell "high and low," at least with pure tones. But if you were to play a "C" and a "D" on a guitar or a piano, I could probably <em>not</em> say with certainty which was higher, much less say "that was a 'C.'"I certainly cannot match up a note played on a piano and a note played on a guitar.</p>
<p>But again, I absolutely <em>love</em> music. Am I tone-deaf, or just lazy?</p>
<p>[Update: [Consensus is "tone deaf but don't fret." (See what I did there?) ]{style="color: #000000;"}]{style="color: #ff0000;"}</p>
<p>[[I'm fascinated by new-found limitation! I've often wondered what being color blind "would be like" (I can hear Daniel Dennett say "It would be exactly like the experience of being color-blind"). But now I'm on the opposite side: here's this sensory experience I love and I find that others have a richer (Necessarily? Well, if it's like blue and green, yeah, that's a big deal.) experience. How romantic! O Cruelle Neurons!<br>
]{style="color: #000000;"}]{style="color: #ff0000;"}</p>220 Billion Lines of COBOL? BS2009-08-10T03:26:00-10:002009-08-10T03:26:00-10:00larrytag:knowing.net,2009-08-10:/posts/2009/08/220-billion-lines-of-cobol-bs/<p>[Update: The first time I read the post, my take was that Jeff Atwood <a href="https://blog.codinghorror.com/">took at face value</a>]{style="color: #ff0000;"} the claim that COBOL is by far the most common programming language in the world. [Subsequently, comments have pointed out he <em>was</em> skeptical. But I still read the post …</p><p>[Update: The first time I read the post, my take was that Jeff Atwood <a href="https://blog.codinghorror.com/">took at face value</a>]{style="color: #ff0000;"} the claim that COBOL is by far the most common programming language in the world. [Subsequently, comments have pointed out he <em>was</em> skeptical. But I still read the post as ambivalent to the claim.]{style="color: #ff0000;"} [(FWIW: I've known Jeff for the better part of a decade and he and I are both judges for the Jolt Awards. I'm hardly 'hating on him.') ]{style="color: #ff0000;"}The "statistics" say that there are 220 billion (b for bill-yun) lines of COBOL in production out there.</p>
<p>Bull.</p>
<p>The COBOL vendors have been pumping that number up for two decades (at least). It was "30 billion lines of COBOL can't be wrong," when I was a magazine editor and, for all its verbosity, COBOL is <em>not</em> a language that is prone to cut-and-paste expansion of its codebase. (The only conceivable way that 200BLoC of COBOL have been written in the past two decades.)</p>
<p>Jeff "digs in" and finds a "big" COBOL application: "Read says Columbia Insurance's policy management and claims processing software is 20 years old and has 1 million lines of COBOL code with some 3,000 modifications layered on over the years." That's supposed to be impressive? An <em>insurance</em> company (the classic mainframe industry) has a significant codebase in COBOL? Wow. Well, just 219,999 to go! (And by the way, the specifics of the codebase are curious: not a lot of COBOL codebases started in 1989.)</p>
<p>The great reality check on the prevalence of COBOL was January 1, 2000. A day utterly hyped (never mind the crazy end-of-the-world nuts, the "statistic" was that Y2K software disasters were going to cost more than half a billion dollars in catastrophic damages) and utterly uneventful (the "reality" was ... what was it? <a href="https://en.wikipedia.org/wiki/Year_2000_problem#On_1_January_2000">Some bus ticket vending machines didn't work</a>).</p>
<p>Is there a lot of COBOL in the world? Sure, but not nearly as much as you probably think. Many legacy systems have been ported to (primarily) Java and run on modern hardware; it's kind of shocking to encounter a "green screen" mainframe system running on blades, but such systems are probably every bit as common as COBOL on Big Iron.</p>
<p>You know what programming language is much, <em>much</em> more popular than visible?</p>
<p>C</p>You can embed LaTeX in WordPress?2009-08-09T05:31:00-10:002009-08-09T05:31:00-10:00larrytag:knowing.net,2009-08-09:/posts/2009/08/you-can-embed-latex-in-wordpress/<p>\<span class="math">\(latex \\pi r\^2\\)</span></p>
<p>~~Huh. Must be only on WordPress.com~~<br>
[Update]{style="color: #ff0000;"}: Requires the \<span class="math">\(latex \\LaTeX\\)</span> plugin</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768 …</script><p>\<span class="math">\(latex \\pi r\^2\\)</span></p>
<p>~~Huh. Must be only on WordPress.com~~<br>
[Update]{style="color: #ff0000;"}: Requires the \<span class="math">\(latex \\LaTeX\\)</span> plugin</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Bob Amen: RIP2009-08-08T04:02:00-10:002009-08-08T04:02:00-10:00larrytag:knowing.net,2009-08-08:/posts/2009/08/bob-amen-rip/<p>My coworker Bob Amen was killed in a motorcycle accident on Thursday night, leaving behind a wife and child. He was the IT Director at one of my client's and I spoke with him daily. We'd never met in person, so the only way I really knew him was as …</p><p>My coworker Bob Amen was killed in a motorcycle accident on Thursday night, leaving behind a wife and child. He was the IT Director at one of my client's and I spoke with him daily. We'd never met in person, so the only way I really knew him was as a voice on the phone, or a presence on IM and email.</p>
<p>Preliminary investigation appears to be that the driver of a refrigerator van drifted into the oncoming lane at a curve. I can't help but think that had he been in a car, he would have walked away from the accident. I know that Bob loved riding his motorcycle and I'll hold on to the thought that he was happy in the minutes leading up to his death.</p>
<p>Life's short.</p>Popfly, Microsoft's Innovative Mashup Programmer, Cancelled2009-07-27T05:17:00-10:002009-07-27T05:17:00-10:00larrytag:knowing.net,2009-07-27:/posts/2009/07/popfly-microsofts-innovative-mashup-programmer-cancelled/<p>From John Montgomery comes word that Microsoft's Popfly project has been cancelled. I was bullish on Popfly, <a href="http://www.knowing.net/index.php/2007/05/18/microsofts-popfly-getting-their-ducks-in-a-row/">predicting that it would become the power-user's entrance to Silverlight</a>.</p>
<p>I have had a history of wishful thinking about "restoring the bridge between power users and programmers." I think Microsoft's Powershell is incredible …</p><p>From John Montgomery comes word that Microsoft's Popfly project has been cancelled. I was bullish on Popfly, <a href="http://www.knowing.net/index.php/2007/05/18/microsofts-popfly-getting-their-ducks-in-a-row/">predicting that it would become the power-user's entrance to Silverlight</a>.</p>
<p>I have had a history of wishful thinking about "restoring the bridge between power users and programmers." I think Microsoft's Powershell is incredible and it absolutely boggles me that it's not gotten more traction.</p>
<p>Is it possible that I'm just clinging to an outmoded value? That these potential bridges don't get traveled because people aren't interested in the destination?</p>Kindle DX Review2009-07-14T05:10:00-10:002009-07-14T05:10:00-10:00larrytag:knowing.net,2009-07-14:/posts/2009/07/kindle-dx-review/<p>I love my <a href="http://www.knowing.net/index.php/2007/11/27/a-long-weekend-with-the-kindle-programmers-take-note/">original Kindle</a>. But the Achilles Heel of the Kindle has always been technical publications. The original Kindle does not have the screen real estate and formatting engine to properly deal with equations, graphs, and, most importantly for programmers, source code. Although it is possible to view some …</p><p>I love my <a href="http://www.knowing.net/index.php/2007/11/27/a-long-weekend-with-the-kindle-programmers-take-note/">original Kindle</a>. But the Achilles Heel of the Kindle has always been technical publications. The original Kindle does not have the screen real estate and formatting engine to properly deal with equations, graphs, and, most importantly for programmers, source code. Although it is possible to view some PDF files on the original Kindle, there are likely to be major formatting goofs.</p>
<p>Enter the <a href="https://www.amazon.com/exec/obidos/ASIN/B0015TCML0/thinkinginnet-20">Kindle DX</a>, which might as well be called "Kindle: Textbook Edition." The DX features a 9.7-inch diagonal screen (compared to 6-inch on the original and Kindle 2) and can display PDF files natively. It is not <em>nearly</em> as casually portable as the trade-paperback sized Kindles, but it is <em>vastly</em> more totable than a 500-page text.</p>
<p>The eInk display is better for reading than any screen you've ever dealt with before. It's not even in the same league as a laptop display or an iPhone display. My plane-flying routine is to lose myself in reading and I've consumed entire novels on the Kindle during East Coast to Hawaii trips. You can't do that with any other display (even if you had the battery power in your laptop/iPhone etc.).</p>
<p>PDF display is a huge deal because so much technical content comes in PDF form. The Kindle DX displays an entire 8.5" x 11" PDF page on a single screen. Note the lack of a qualifier in that sentence. If you have an 8.5 x 11 PDF page to read, the Kindle DX will display the entire page on a single screen. <strong>There is no zoom feature for PDF pages</strong>.</p>
<p>I hope these photos make the problem apparent:</p>
<p><img alt="CACM: Print vs. PDF on Kindle DX" class="alignnone size-medium wp-image-4076" height="200" src="/uploads/2009/07/dsc_33551-300x200.jpg" title="CACM: Print vs. PDF on Kindle DX" width="300"><img alt="Font: Print vs. PDF on Kindle DX" class="alignnone size-medium wp-image-4077" height="200" src="/uploads/2009/07/dsc_3356-300x200.jpg" title="Font: Print vs. PDF on Kindle DX" width="300"></p>
<p>This is a fair comparison: the print version of the Communications of the ACM versus its PDF version (unfortunately not the same page, since I haven't yet received the print version in the mail!). The print font is about 40% larger than the display font. It's still readable (for me), but not easily and not for hours on end. Citations, which use an even smaller font, are too small for me to read at arms length.</p>
<p>Now, it's wonderful that the Kindle DX can display a page layout in its intended form and navigating a multi-column PDF in zoom mode is frustrating[, but the option should be there]{style="text-decoration: line-through;"} [Update:]{style="color: #ff0000;"} The excellent comment below led me to enable the 'auto-rotate' ability of the DX (behind the font button). I had locked my DX in portrait mode; in landscape mode, an 8.5 x 11 PDF is much more readable. One could hope that the Kindle could update this with a firmware update, but Amazon seems in no rush to add features to the Kindle (I think it was 14 months between firmware updates for the original).</p>
<p>Other PDF flaws: you cannot attach notes and highlights to specific ranges within a PDF. Although you can add bookmarks, you cannot title them helpfully. So, for instance, in a technical book, it's counterproductive to bookmark <em>within</em> the index; I just drop a bookmark on "M" in the index and page from there.</p>
<p>The DX keyboard has another flaw worth mentioning. For space reasons, they have combined the numeric keys with the top row of letters. Which makes sense but for the fact that jumping to a numeric location is the #1 use of the keyboard! In order to enter a numeric location, you have to hold down an 'alt' key. Interpreting 'QPPP' as location 1,000 is another seemingly-simple feature that one can wish for in an update.</p>
<p><strong>Conclusion:</strong></p>
<p>For reading, I prefer the DX to the original. I read quite quickly and although one eventually tunes out the page turns, it's nicer to have more text on the screen. Also, the DX is significantly better for reading at the gym; on non-PDF files you can zoom the text to a size you can read while on a machine. For portability of technical books, it's hard to express how much better the DX is. For general portability, the original's small size makes it essentially invisible, very easy to tuck into a carry-on, etc.</p>
<p>For a technical professional or student, the ability to view PDFs is a great feature, but is obviously already available on a laptop or desktop. Is the Kindle DX a perfect machine for working with PDFs? No. The lack of zoom and annotations are significant flaws.</p>
<p>Personally, I am happy with my purchase, but I am a huge outlier on the "print consumption" graph -- shipping costs to Hawaii are very significant, I review a lot of technical books, and I subscribe to a dozen magazines. Unless you're in the same odd position, I suggest that you stick with a <a href="https://www.amazon.com/exec/obidos/ASIN/B00154JDAI/thinkinginnet-20">Kindle 2</a> for now.</p>Petition to Apple to Create/Improve APIs to Allow Augmented Reality Apps on the iPhone2009-07-10T04:16:00-10:002009-07-10T04:16:00-10:00larrytag:knowing.net,2009-07-10:/posts/2009/07/petition-to-apple-to-createimprove-apis-to-allow-augmented-reality-apps-on-the-iphone/<p>Apropos my recent discovery of <a href="http://www.knowing.net/index.php/2009/07/09/iphone-3gs-embeds-bearing-not-orientation-in-exif-metadata/">camera heading in iPhone metadata</a> comes word of a petition for Apple to create functions that would allow Augmented Reality development on the iPhone:</p>
<p><a href="https://gamesalfresco.com/2009/07/02/open-letter-to-apple-let-us-augment-reality-with-the-iphone/">http://gamesalfresco.com/2009/07/02/open-letter-to-apple-let-us-augment-reality-with-the-iphone/</a></p>
<p>Augmented Reality are applications that combine computer-generated imagery (or text) with imagery generated from …</p><p>Apropos my recent discovery of <a href="http://www.knowing.net/index.php/2009/07/09/iphone-3gs-embeds-bearing-not-orientation-in-exif-metadata/">camera heading in iPhone metadata</a> comes word of a petition for Apple to create functions that would allow Augmented Reality development on the iPhone:</p>
<p><a href="https://gamesalfresco.com/2009/07/02/open-letter-to-apple-let-us-augment-reality-with-the-iphone/">http://gamesalfresco.com/2009/07/02/open-letter-to-apple-let-us-augment-reality-with-the-iphone/</a></p>
<p>Augmented Reality are applications that combine computer-generated imagery (or text) with imagery generated from a camera. Examples include applications that show historic photographs from your current vantage point, identify significant features in the landscape (buildings, mountains, constellations), and games.</p>iPhone 3Gs Embeds Heading (Not Orientation) in EXIF Metadata2009-07-09T03:38:00-10:002009-07-09T03:38:00-10:00larrytag:knowing.net,2009-07-09:/posts/2009/07/iphone-3gs-embeds-bearing-not-orientation-in-exif-metadata/<p>Further to <a href="http://www.knowing.net/index.php/2009/07/08/iphone-3gs-encodes-camera-orientation-in-exif/">last night's post</a> and based on some carefully aligned photos, I am a little disappointed to conclude that the EXIF value GPSDirectionRef that the iPhone 3Gs inserts is (only) the camera's magnetic heading expressed as a rational number and not (as I'd hoped) the camera's 3D orientation in …</p><p>Further to <a href="http://www.knowing.net/index.php/2009/07/08/iphone-3gs-encodes-camera-orientation-in-exif/">last night's post</a> and based on some carefully aligned photos, I am a little disappointed to conclude that the EXIF value GPSDirectionRef that the iPhone 3Gs inserts is (only) the camera's magnetic heading expressed as a rational number and not (as I'd hoped) the camera's 3D orientation in space.</p>
<p>No sure conclusion on why it's expressed as a rational and why the denominator varies, but my guess remains that it's precision.</p>
<p>A review of other EXIF data doesn't show any other data indicating orientation of the camera (i.e., no tilt or raw accelerometer numbers).</p>
<p>Implications for hackers: You can <em>probably</em> guess what the camera was aimed at by simply casting a cone out from the geocode and the heading (update: Hah! And the orientation! If the camera is in landscape mode, the heading is still the short-side of the rectangle. But note that the iPhone seems to set tiff:orientation EXIF value to '1' regardless of mode.). But I don't see any way to put Godzilla's feet on the ground. (Of course, additional EXIF metadata is a simple thing for Apple to add in a firmware update, so as the augmented reality wave rolls in, look for it in updates.)</p>
<p>Pedantic trivia: The 'heading' of an object is the direction in which it is pointed. The 'bearing' is the position of an object relative to your location. GPSImageDirection clearly <em>ought</em> to be the bearing of the photograph, but is, with the iPhone, the heading (the direction in which the top of the iPhone is pointed).</p>iPhone 3Gs Encodes Camera Orientation in EXIF (?)2009-07-08T07:38:00-10:002009-07-08T07:38:00-10:00larrytag:knowing.net,2009-07-08:/posts/2009/07/iphone-3gs-encodes-camera-orientation-in-exif/<p>On a hunch I checked the EXIF data attached to my first photos from my new iPhone. The intriguing news is that it has values such as:</p>
<p>GPSImageDirection : 2535/383<br>
GPSImageDirectionRef: T</p>
<p>The GpsImageDirectionRef = "T" appears to be a constant.(Update: <a href="https://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsimgdirectionref.html">signifies True and not Magnetic north</a>.)</p>
<p>Pointing the camera …</p><p>On a hunch I checked the EXIF data attached to my first photos from my new iPhone. The intriguing news is that it has values such as:</p>
<p>GPSImageDirection : 2535/383<br>
GPSImageDirectionRef: T</p>
<p>The GpsImageDirectionRef = "T" appears to be a constant.(Update: <a href="https://www.awaresystems.be/imaging/tiff/tifftags/privateifd/gps/gpsimgdirectionref.html">signifies True and not Magnetic north</a>.)</p>
<p>Pointing the camera roughly N,E,S,W resulted in:</p>
<p>N : 2535/383 (and then, pointed 'up': 19845/113)<br>
E : 27081/81<br>
S : 20749/113<br>
W: 28546/113</p>
<p>My guess is that this is a fraction representing degrees from N. The use of a denominator may indicate accuracy (?). When I first saw it, I thought it could encode tilt, but that doesn't seem to fit the data (at least to my eye). No other obvious EXIF source of tilt info.</p>
<p>More experimenting in order.</p>
<p>Ob-hack: Augmented reality. Place Godzilla / Cloverfield properly in all photos of Tokyo / New York.</p>
<p>[Update]{style="color: #ff0000;"}: It's just <a href="http://www.knowing.net/index.php/2009/07/09/iphone-3gs-embeds-bearing-not-orientation-in-exif-metadata/">heading</a>. Cue <a href="https://sadtrombone.com/">sad trombone</a>.</p>DasBlog Links Finally Rewritten2009-07-08T03:40:00-10:002009-07-08T03:40:00-10:00larrytag:knowing.net,2009-07-08:/posts/2009/07/dasblog-links-finally-rewritten/<p>Driven by the mocking of a colleague for never having done the stupid gruntwork of rewriting my old DasBlog-based permalinks, I stole Jon Udell's <a href="http://jonudell.net/examples/metaweblog-search-replace.py">python code</a> and ran it over the 8+ year history of Knowing.net. I think it mostly worked, although internal links between posts remain broken, since …</p><p>Driven by the mocking of a colleague for never having done the stupid gruntwork of rewriting my old DasBlog-based permalinks, I stole Jon Udell's <a href="http://jonudell.net/examples/metaweblog-search-replace.py">python code</a> and ran it over the 8+ year history of Knowing.net. I think it mostly worked, although internal links between posts remain broken, since the DasBlog GUID-based identifiers have been lost.</p>
<p>I suppose I should now write a program to monitor the 404s and do manual fixups as traffic calls for, but I'm not even going to pretend that "I'll get to that in a couple days."</p>
<p>I apologize if this caused any spurious "There are 2100 new posts" messages from your newsreader.</p>[76702,706], signing off...2009-07-02T07:35:00-10:002009-07-02T07:35:00-10:00larrytag:knowing.net,2009-07-02:/posts/2009/07/76702706-signing-off/<p><a href="http://paperpc.blogspot.com/2009/06/compuserve-classic-so-long-old-friend.html">CompuServe Classic is shutting down</a>. I had no idea they were still extant. I wonder if the CLMFORUM and AIEXPERT message boards are archived...</p>
<p>Coincidentally, tomorrow is the 20th anniversary of my moving to the San Francisco Bay Area to become Product Review Editor at Computer Language and AI Expert …</p><p><a href="http://paperpc.blogspot.com/2009/06/compuserve-classic-so-long-old-friend.html">CompuServe Classic is shutting down</a>. I had no idea they were still extant. I wonder if the CLMFORUM and AIEXPERT message boards are archived...</p>
<p>Coincidentally, tomorrow is the 20th anniversary of my moving to the San Francisco Bay Area to become Product Review Editor at Computer Language and AI Expert magazines (and to get a whizzy "767" administrative CompuServe account).</p>Now On Kindle: Programming Category Highlights2009-06-29T08:34:00-10:002009-06-29T08:34:00-10:00larrytag:knowing.net,2009-06-29:/posts/2009/06/now-on-kindle-programming-category-highlights/<p>David Beazley's <a href="https://www.amazon.com/exec/obidos/ASIN/B002EF2AQ6/thinkinginnet-20">Python Essential Reference, 4e</a></p>
<p>Jason Venner's Pro Hadoop</p>Very High-Res Moon Image2009-06-25T11:32:00-10:002009-06-25T11:32:00-10:00larrytag:knowing.net,2009-06-25:/posts/2009/06/very-high-res-moon-image/<p>Amateur astrophotographers recorded more than 1TB of data in the creation of this high-res image of the surface of the moon. Pretty.</p>Let He Who Has Never Compiled Untested Cast The First Stone2009-06-24T13:07:00-10:002009-06-24T13:07:00-10:00larrytag:knowing.net,2009-06-24:/posts/2009/06/let-he-who-has-never-compiled-untested-cast-the-first-stone/<p>Tim Bray has a good post about "<a href="http://www.tbray.org/ongoing/When/200x/2009/06/23/TDD-Heresy">Test-Driven Heresy</a>," in which he admits failing to live up to the ideal of writing tests firsts and only writing enough code to pass a test.</p>
<p>I'm Catholic in my test-driven beliefs, which is to say that I am a terrible sinner, but …</p><p>Tim Bray has a good post about "<a href="http://www.tbray.org/ongoing/When/200x/2009/06/23/TDD-Heresy">Test-Driven Heresy</a>," in which he admits failing to live up to the ideal of writing tests firsts and only writing enough code to pass a test.</p>
<p>I'm Catholic in my test-driven beliefs, which is to say that I am a terrible sinner, but I like to think that I can be forgiven if I just confess my lapses. They are many and varied and far out-strip my actual adherence to test-driven development. The spirit is strong, though.</p>
<p>Why is it so hard, even for believers, to keep things test-driven (or even test-in-the-passenger-seat-but-navigating)? Bray points out that when you're writing prototype / spike code, it's difficult to write tests because (a) part of prototyping is being wildly wrong in your expectations and (b) when the codebase is very small, the effort of separating concerns is relatively high.</p>
<p>I agree. To make sinning easier still, it is also the case that refactoring towards test-driven is difficult with large, "ball of mud" codebases (exactly the ones that would most benefit).</p>
<p>So there's a "window" in which initiating test-driven development is relatively easy. Unfortunately, that window is not a very large part of a software code-base's lifetime.</p>
<p><img alt="tdd_window" class="alignnone size-full wp-image-2076" height="416" src="/uploads/2009/06/tdd_window.png" title="tdd_window" width="570"></p>ASP.NET MVC: The Way to Move Forward on the Microsoft Stack2009-06-22T12:35:00-10:002009-06-22T12:35:00-10:00larrytag:knowing.net,2009-06-22:/posts/2009/06/aspnet-mvc-the-way-to-move-forward-on-the-microsoft-stack/<p>My column on ASP.NET MVC is finally available. Note that since this column was written, <a href="https://archive.codeplex.com/?p=aspnet">ASP.NET MVC integration with Visual Studio 2010 Beta has become available</a>.</p>My first-gen iPhone seems to be falling apart...2009-06-22T10:22:00-10:002009-06-22T10:22:00-10:00larrytag:knowing.net,2009-06-22:/posts/2009/06/my-first-gen-iphone-seems-to-be-falling-apart/<p>In the past week, my first-gen iPhone seems to have decided that the time has come for me to move on to a new 3GS. First my Wi-Fi stopped working. Then I upgraded to 3.0. When I try to activate "Find my iPhone" it doesn't work (but maybe that's …</p><p>In the past week, my first-gen iPhone seems to have decided that the time has come for me to move on to a new 3GS. First my Wi-Fi stopped working. Then I upgraded to 3.0. When I try to activate "Find my iPhone" it doesn't work (but maybe that's because I don't have a built-in GPS). But now, it seems not to ring when I'm called (yes, I checked to make sure my ringer is turned on).</p>Big Island, Bad Politics2009-06-17T05:11:00-10:002009-06-17T05:11:00-10:00larrytag:knowing.net,2009-06-17:/posts/2009/06/big-island-bad-politics/<p>The Big Island of Hawaii is a single county whose spending is controlled by a 9-person county council. The problem is that our local government is ridiculously petty, with an "East side vs. West side" dynamic that flies in the face of the needs and sentiment of the people who …</p><p>The Big Island of Hawaii is a single county whose spending is controlled by a 9-person county council. The problem is that our local government is ridiculously petty, with an "East side vs. West side" dynamic that flies in the face of the needs and sentiment of the people who live here. Additionally, our young state is still very much dominated by "machine" politics, with patronage, old boy networking, and back-room deal-making.</p>
<p>Yesterday, the worst of local politics played out, with a series of committee re-structuring resolutions that stripped power from the West-side council members. The follow-up to such a blatant power grab will undoubtedly be a return to the worst of us vs. them council decisions that favor the in-power districts over the other districts.</p>
<p>The winner-take-all mentality makes me reluctantly agree with those who think the only solution is to divide the island into two counties.</p>Intentional Software's Chrome (If Not Silver) Bullet2009-06-15T12:34:00-10:002009-06-15T12:34:00-10:00larrytag:knowing.net,2009-06-15:/posts/2009/06/intentional-softwares-chrome-if-not-silver-bullet/<p>Intentional Software will change the way business software is developed.</p>
<p>Update: For those having trouble following the link, it's http://www.sdtimes.com/WINDOWS__NET_WATCH_INTENTIONAL_S_CHROME_IF_NOT_SILVER_BULLET/By_Larry_O_Brien/About_DOMAINSPECIFICLANGUAGES_and_MICROSOFT/33526</p>Coffee2009-06-09T14:18:00-10:002009-06-09T14:18:00-10:00larrytag:knowing.net,2009-06-09:/posts/2009/06/coffee/<p>I promised Jon Galloway that I would send him some "geek acres" coffee. I thought I'd write a post about growing and processing coffee as a hobby...</p>
<p>Step 1: Live on the Big Island of Hawaii<br>
<img alt="200906091313.jpg" height="360" src="/uploads/2009/06/200906091313.jpg" width="480"></p>
<p>Step 2: Have some coffee trees</p>
<p><img alt="200906091314.jpg" height="480" src="/uploads/2009/06/200906091314.jpg" width="320"></p>
<p>Step 3: Pick the cherry by hand (better …</p><p>I promised Jon Galloway that I would send him some "geek acres" coffee. I thought I'd write a post about growing and processing coffee as a hobby...</p>
<p>Step 1: Live on the Big Island of Hawaii<br>
<img alt="200906091313.jpg" height="360" src="/uploads/2009/06/200906091313.jpg" width="480"></p>
<p>Step 2: Have some coffee trees</p>
<p><img alt="200906091314.jpg" height="480" src="/uploads/2009/06/200906091314.jpg" width="320"></p>
<p>Step 3: Pick the cherry by hand (better yet, have your wife do the picking):</p>
<p><img alt="200906091316.jpg" height="320" src="/uploads/2009/06/200906091316.jpg" width="480"></p>
<p>Kona coffee has to be hand-picked, as our trees are a little more delicate than some and because the cherry comes ripe at different times. So you might visit the same tree three or four times over the course of a season.</p>
<p><img alt="200906091317.jpg" height="480" src="/uploads/2009/06/200906091317.jpg" width="360"></p>
<p>Sadly-no-longer-possible-step: Transport the cherry from the trees to the house using a pack animal</p>
<p><img alt="200906091325.jpg" height="360" src="/uploads/2009/06/200906091325.jpg" width="480"></p>
<p>(Oh what a beautiful dog she was...)</p>
<p>Step 3: Depulp the cherry</p>
<p><img alt="200906091323.jpg" height="360" src="/uploads/2009/06/200906091323.jpg" width="480"></p>
<p>Step 4: Ferment the inner shell for 24 hours in order to remove the sticky mucilage</p>
<p><img alt="200906091324.jpg" height="480" src="/uploads/2009/06/200906091324.jpg" width="320"></p>
<p>Step 5: Dry the seeds on window screens for several weeks until they become "parchment"</p>
<p><img alt="200906091328.jpg" height="480" src="/uploads/2009/06/200906091328.jpg" width="360"></p>
<p>Step 6: Remove the parchment</p>
<p><img alt="200906091330.jpg" height="360" src="/uploads/2009/06/200906091330.jpg" width="480"></p>
<p>6a -- separate the chaff from the green by using a hair blower and a colander</p>
<p>Step 7: Program your coffee roaster using custom roasting curves perfected over the years</p>
<p><img alt="200906091413.jpg" height="480" src="/uploads/2009/06/200906091413.jpg" width="360"> <img alt="200906091414.jpg" height="480" src="/uploads/2009/06/2009060914141.jpg" width="360"></p>
<p>Step 8: Take a whiff...</p>
<p><img alt="200906091414.jpg" height="360" src="/uploads/2009/06/200906091414.jpg" width="480"></p>
<p>And that's how you can avoid paying \$2 for a cup of coffee at Charbucks!</p>Kindle Gets A Slew of $0.99 Programming Titles2009-06-06T14:44:00-10:002009-06-06T14:44:00-10:00larrytag:knowing.net,2009-06-06:/posts/2009/06/kindle-gets-a-slew-of-099-programming-titles/<p>Amazon has made a bunch of Internet <a href="https://www.amazon.com/s/qid=1244335142/ref=sr_nr_n_0?ie=UTF8&rs=156144011&sort=daterank&bbn=156144011&rnid=156144011&rh=n%3A133140011%2Cn%3A!133141011%2Cn%3A154606011%2Cn%3A156116011%2Cn%3A156140011%2Cn%3A156144011%2Cn%3A156145011" title="programming resources available in Kindle format for $0.99">programming resources available in Kindle format for \$0.99</a></p>Junk Mail: 15 Years Later2009-05-02T13:18:00-10:002009-05-02T13:18:00-10:00larrytag:knowing.net,2009-05-02:/posts/2009/05/junk-mail-15-years-later/<p>Back in the mid-90s, when I worked for a publishing company and and (snail-)mailing lists were important to me, I would iterate my middle initial any time I signed up for a magazine or registered at a conference.</p>
<p>To this day I regularly receive come-ons addressed to Larry E …</p><p>Back in the mid-90s, when I worked for a publishing company and and (snail-)mailing lists were important to me, I would iterate my middle initial any time I signed up for a magazine or registered at a conference.</p>
<p>To this day I regularly receive come-ons addressed to Larry E O'Brien (today: Smithsonian Magazine). The amazing thing is not even that someone's selling a 15-year-old name on their mailing list, it's that someone's been maintaining the list to reflect my move to Hawaii! Additionally, I'm quite certain that I've never <em>bought</em> anything after 1995 where I sent in "E" as my middle initial.</p>
<p>So if you ever buy a mailing list and see Larry E O'Brien, Kailua Kona, in there? Not worth your money.</p>Wordle Tag Cloud For My Frontpage2009-04-30T17:33:00-10:002009-04-30T17:33:00-10:00larrytag:knowing.net,2009-04-30:/posts/2009/04/wordle-tag-cloud-for-my-frontpage/<p><img alt="wordle_tag_cloud" class="alignnone size-full wp-image-2041" height="544" src="/uploads/2009/04/picture-3.png" title="wordle_tag_cloud" width="832"></p>
<p>Dang. That's kind of cool. Get your own <a href="http://www.wordle.net/">here</a>.</p>Herding Code Podcast on DSLs2009-04-30T07:17:00-10:002009-04-30T07:17:00-10:00larrytag:knowing.net,2009-04-30:/posts/2009/04/herding-code-podcast-on-dsls/<p>I had a conversation with the <a href="http://herdingcode.com/herding-code-45-larry-obrien-on-domain-specific-languages/">Herding Code guys regarding DSLs, DSL DevCon</a>, and some of my skepticism regarding Oslo and the DSL hype.</p>Lang.NET, DSL DevCon Highlights2009-04-20T12:07:00-10:002009-04-20T12:07:00-10:00larrytag:knowing.net,2009-04-20:/posts/2009/04/langnet-dsl-devcon-highlights/<p>Intentional Software has forged a silver bullet. It's terribly difficult not to go into that in great depth (I will shortly), but for now, I simply don't want to bury the lede.</p>
<p>OK, so other than <em>that</em> what was interesting?</p>
<p>There are several categories that need to be talked about …</p><p>Intentional Software has forged a silver bullet. It's terribly difficult not to go into that in great depth (I will shortly), but for now, I simply don't want to bury the lede.</p>
<p>OK, so other than <em>that</em> what was interesting?</p>
<p>There are several categories that need to be talked about:</p>
<ul>
<li>Platforms (how do we support languages in VMs?)</li>
<li>Tools (how we make the creation of languages easier / faster?)</li>
<li>Techniques</li>
<li>Experiences & Patterns</li>
</ul>
<p>I had the intuition that <a href="http://langnetsymposium.com/">Lang.NET</a> would be about the first two topics and DSL DevCon would focus on the latter, but it turned out fuzzier than that. Lang.NET was a smaller group and probably a little more academic but the real difference between the conferences was structural. Lang.NET had 30-minute talks and 15-minute lightning talks. DSL DevCon had 45-minute talks. I think the Lang.NET structure was widely perceived as better.</p>
<p>"Domain-Specific Languages" has been a term of art for 30 years and if you're reading this blog, you presumably have an interest in higher-level discussions of productivity and industry direction, so I'll take it as read that "language issues are important, interesting, and have an impact on productivity."</p>
<p>If you've been reading this blog or my column for any amount of time, you know that I've been predicting DSLs as the next big buzzword / buzzphrase for quite some time. Eventually I had to be right. So I quite expected a full-court press articulating a model covering all four of the above categories; I <em>expected</em> to hear something like this:</p>
<p><img alt="sf_layers2" class="alignnone size-full wp-image-2031" height="246" src="/uploads/2009/04/sf_layers2.png" title="sf_layers2" width="287"></p>
<p>But I didn't hear that or <strong>any alternative</strong> development process model (other than from Intentional Software), and that's my number one takeaway:</p>
<p><strong>The DSL marketing wave is dangerously ahead of the pedagogical wave.</strong></p>
<h2>Highlights in the various categories</h2>
<h3>Platform</h3>
<p>Lars Bak on implementation of the V8 JavaScript engine was dynamite. Concrete, informed, impressive. (Not incidentally, I think <a href="http://devhawk.net/">Harry Pierson</a>, Chris Sells, and Microsoft should be given <em>great</em> credit for bringing in people from Google, Sun, and the Linux community and encouraging a collegial atmosphere.)</p>
<p>Paul Vick gave two talks on Oslo, but I think his first had more on the "platform-y" aspects of Oslo. The vocabulary of Oslo was covered and questions from the audience (I hope they're in the video) pressed on the question of "runtime projection onto the DLR" (which, it turns out, is "what we're talking about when we're talking about DSLs").</p>
<h3>Tools</h3>
<p>There were many talks about tools. I think everyone wished that Jeffrey Snover talked longer than 15 minutes about Powershell. The videos for DSL DevCon a[ren't up]{style="text-decoration: line-through;"}[ yet but when they are,]{style="text-decoration: line-through;"} [[Update]{style="color: #ff0000;"}:]{style="color: #ff0000;"} <a href="https://docs.microsoft.com/en-us/sql/connect/sql-data-developer?view=sql-server-2017#dsl">Here they are</a>, don't miss Gilad Bracha on <a href="https://gbracha.blogspot.com/">NewSpeak</a>. Among the many excellent talks, Guillaume Laforge on Groovy had a few particularly memorable points.</p>
<h3>Techniques</h3>
<p>The technique talks almost all had the same theme: functional programming. Pattern-matching this, parser combinator that. This was usually not separated from a specific tool (not surprisingly, we heard much of F#), and I think that lack of distinction was unfortunate.</p>
<p>The standout "technique" talk was Erik Meijer on reactive programming. For all the functional love in the room, only Meijer and Philip Wadler gave talks structured around proofs. Wadler's talk was very good, but Meijer sketched a proof while throwing coins and calling out above the rolling laughter of the audience. We walk in the garden of his turpulence.</p>
<h3>Experience & Patterns</h3>
<p>There were several talks that sounded like they might be about techniques or experience ("the implementation of X"), but they turned out to be about the tool or the domain itself ("X does this and that"). Matthew Wilson on Bootstrapping Perl 6 onto .NET didn't make that mistake, nor did Paul Cowan when discussing the Horn Package Manager implemented in Boo (it took him a few minutes to get to the good stuff).</p>
<p>Amanda Laucher's experience optimizing an insurance application was actually the <strong>only</strong> talk that I felt was centered on process issues! (And there, it seemed the main issue was object-functional mindsets, not the "language-y" issue of deferring the specification of intent.)</p>
<p>For the first several slides of the Brad Cross / Ted Neward "Functional vs. Dynamic DSL Smackdown" I thought we had <em>finally</em> gotten to the core process issues: defining terms, contrasting approaches, and then asking not "in which is it possible?" (Both. But everyone who's been paying attention knew that before last week.) but "which has a chance of succeeding in the real world?" Unfortunately, the talk got bogged down in technical specifics.</p>
<h2>Final thoughts</h2>
<p>Lang.NET is my favorite conference of the year. I pay for it out of my own pocket. If this stuff is interesting to you and you have the time to watch every video, by all means do so.</p>
<p>This year I thought my deep interest in programming language issues was going to be joined with my deep interest in process issues. It was not to be. This worries me greatly, because I submit that <strong>the amount of DSLs written is determined not by technical issues but by people issues</strong>.</p>
<p>One implicit premise very clearly on-hand was "the [functional|dynamic] mindset facilitates the meta-level reasoning that's a necessary precondition to recognizing a language-based opportunity." OK, two valid premises. But where's the evidence? And even if there's a correlation between a particular mindset (whether it be functional or dynamic) and language-based approaches, does the mindset <strong>cause (or at least facilitate)</strong> that, or is it the case that those prone to meta-level reasoning gravitate towards a particular mindset? And are these mindsets teachable to those whose minds have been corrupted by exposure to the real-world or is our only hope a new generation that doesn't make any of the same mistakes we did? (Because that hope <em>always</em> pans out.)</p>
<p>I find those questions fascinating and I don't pretend to know the answers (beyond insisting that the answer has to acknowledge the historically small percentage of people who have exploited these techniques to date). I'm only sad I'll have to wait a year to hear what the smartest people in the business have to say on the matter.</p>DSL Writers: Put Turing Completeness Out Of Your Mind2009-04-19T12:26:00-10:002009-04-19T12:26:00-10:00larrytag:knowing.net,2009-04-19:/posts/2009/04/dsl-writers-put-turing-completeness-out-of-your-mind/<p>At the recent DSL DevCon, <a href="https://www.martinfowler.com/bliki/DomainSpecificLanguage.html">Martin Fowler</a> gave an excellent keynote speech discussing domain-specific languages, an important subject that seems certain to be the buzzword of the next year or two.</p>
<p>However, one slide of his got my goat, leading me to foam at the mouth, beat the table with …</p><p>At the recent DSL DevCon, <a href="https://www.martinfowler.com/bliki/DomainSpecificLanguage.html">Martin Fowler</a> gave an excellent keynote speech discussing domain-specific languages, an important subject that seems certain to be the buzzword of the next year or two.</p>
<p>However, one slide of his got my goat, leading me to foam at the mouth, beat the table with my shoe, wag my finger angrily, and otherwise mix my metaphors. In that slide, he said something along the lines of "a DSL probably ought not to be Turing complete."</p>
<p>I think this is terrible advice. First, I think it's a pedagogical mistake. Second, I think it's incorrect.</p>
<h2>Proof</h2>
<p><img alt="shell ? sql | (minesweeper && life)" class="size-full wp-image-2016" src="/uploads/2009/04/what_is_tp.png" title="what_is_tc" width="600"></p>
<p>Q.E.D.</p>
<h2>Discussion</h2>
<p><em>Is SQL a less powerful programming language than the game of minesweeper?</em></p>
<p>To the extent that we want to broaden the number of people writing domain-specific languages, we can't put that question on the entrance test.</p>
<p>Even if the percentage of people who <strong>know</strong> the answer can be made large, the percentage who <strong>comprehend</strong> it is quite a bit smaller, and the number who can <strong>apply</strong> it is a very small number. In a DSL, it's smaller still, because you have to <strong>analyze</strong> your language in the context you've embedded it. You've climbed right up <a href="http://krummefamily.org/guides/bloom.html">Bloom's taxonomy!</a> That's why I think it's a mistake pedagogically.</p>
<p>Why I think the advice is flat-out wrong is that DSLs are necessarily embedded in the context of a general-purpose language. Say I want a DSL that converted the numbers 1 through 256 into a set of CA rules following the obvious structure implied in:</p>
<p><img alt="elementarycarule110_1000" class="alignnone size-full wp-image-2017" height="375" src="/uploads/2009/04/elementarycarule110_1000.gif" title="elementarycarule110_1000" width="554"></p>
<p>A DSL with exactly one production ({byte} -> {CA rules}) is not Turing complete (duh). But the context in which this DSL is <em>expressed</em> is one that leads to a (<a href="https://www.wolframscience.com/nks/">possibly profound</a>) discovery of Turing completeness. (In case it's not obvious from the context -- the illustrated 'Rule 110' CA is Turing complete.)</p>
<p>Fowler referred to this when he advised DSL writers to avoid "accidental" Turing completeness. That <em>really</em> set the hook deep in my mouth, because it has a whiff of <a href="http://www.gwinnettdailyonline.com/">this stuff</a>. To raise the issue and then to hand-wave it away is leaving yourself one heck of a big escape hatch. The mention of 'Turing completeness' or 'Turing equivalence' begs attention; they're either <a href="https://memory-alpha.fandom.com/wiki/The_Omega_Glory_(episode)#Memorable_quotes">forbidden holy-words</a> or they're used precisely and must be discussed with precision. (Thus, O'Brien's Corollary (1991) to Godwin's Law: <em>The first person to mention 'Turing equivalence' in a debate of programming languages loses.</em>)</p>
<h2>Solution</h2>
<p>It's only because Fowler generally gives such excellent advice that the "Turing complete" stuff provoked me so much. Sure enough, a moment after the slide I didn't like, he came up with what seems like the answer. I'm not sure of his exact words, but it was along the lines of:</p>
<blockquote>
<p>Start with a general language that you think is readable and take stuff out. If you can't take out quite a bit, don't write an external DSL. </p>
</blockquote>
<p>Great advice.</p>Lang.NET: Preliminary Thoughts2009-04-15T05:20:00-10:002009-04-15T05:20:00-10:00larrytag:knowing.net,2009-04-15:/posts/2009/04/langnet-preliminary-thoughts/<p>There's a school of thought in anthropology that the form and vocabulary of the language you speak deeply affects <em>how</em> you think, even to the point of limiting <em>if</em> you can think about certain things. This is called the <a href="https://en.wikipedia.org/wiki/Sapir%E2%80%93Whorf_hypothesis">Sapir-Whorf Hypothesis</a>. There's definitely something to it, although probably not in …</p><p>There's a school of thought in anthropology that the form and vocabulary of the language you speak deeply affects <em>how</em> you think, even to the point of limiting <em>if</em> you can think about certain things. This is called the <a href="https://en.wikipedia.org/wiki/Sapir%E2%80%93Whorf_hypothesis">Sapir-Whorf Hypothesis</a>. There's definitely something to it, although probably not in its strongest "thought on certain subjects is downright impossible" form. It's relevance to software development and our artificial, highly constrained languages, ought to be obvious.</p>
<p>I believe a fairly strong version of Sapir-Whorf when it comes to programming languages. Different languages and programming paradigms lead to different results -- the cost of a software project is directly tied to the conciseness and maintainability of its expression. Even more, software projects grow from seeds, and the structures expressed in the earliest days profoundly affect the form of a system over its growth. So the designs and approaches used in the earliest days of a project can have ramifications for years afterward.</p>
<p>Meanwhile, the actual <em>popularity</em> of programming languages is an absolute mystery. What programming language are you going to be using in 10 years? <strong>No one knows. No one.</strong> Not Anders, not Matz, not Paul Graham. Twenty years ago (oh lord...), I started working for the magazines <em>Computer Language</em> and <em>AI Expert</em>. I've been hearing about the inevitability of this language or that paradigm or this other environment for two decades. And I don't have a horse in the race; I'm not a language designer, I don't teach anymore, I'm not beholden to a product line.</p>
<p>I do have one theory about language popularity: I think teachability matters a lot. I also have a theory about teachability: You are blind to the teachability of your own paradigm. This is an unfortunate combination of theories.</p>
<p>So that's why Lang.NET is my favorite conference of the year.</p>Facts Fail To Impress The Superstitious. Film at 11.2009-03-31T14:09:00-10:002009-03-31T14:09:00-10:00larrytag:knowing.net,2009-03-31:/posts/2009/03/facts-fail-to-impress-the-superstitious-film-at-11/<p>Andrew Cooper, a local astronomer, laments the continued belief in astrology, which apparently is so detached from the facts that they'll print "The Sun has entered Aries," when, due to precession, the Sun is still well inside Pisces.</p>
<p>Hawai'i is a place of deep spirituality, both mainstream and New Age …</p><p>Andrew Cooper, a local astronomer, laments the continued belief in astrology, which apparently is so detached from the facts that they'll print "The Sun has entered Aries," when, due to precession, the Sun is still well inside Pisces.</p>
<p>Hawai'i is a place of deep spirituality, both mainstream and New Age. A few years ago Tina and I went to a public-comment meeting on regulations for dolphin-human swimming. Spinner dolphins rest during the day in certain coves along the Kona coast (not every cove will do -- the dolphins like to rest over sand bottoms that are between, say, 40 and 120 feet deep). There's no question that dolphins' behavior is "disrupted" by swimmers or divers (they swim deeper under swimmers and they turn away from divers). If the <a href="https://www.fisheries.noaa.gov/">Marine Mammal Protection Act were followed to the letter</a>, large sections of several of the most popular swimming and diving locations would necessarily have to be entirely closed to humans. So some kind of compromise is needed. Tina and I have friends in both the commercial SCUBA industry and in the conservation community, so we went to this meeting expecting to hear some reasonable talk.</p>
<p>Well. The public testimony was entirely dominated by people explaining that dolphins were:</p>
<ul>
<li>alien beings</li>
<li>transdimensional beings</li>
<li>beings of pure spirit</li>
</ul>
<p>One way or the other, apparently it is the dolphins' greatest pleasure to seek out humans and swim with them, especially those that pay \$75 to drive in high-speed inflatables owned by bed & breakfasts that specialize in "enlightened" New Age tourism. Uh huh. At one point, Tina leaned over and said "You know, I once had a telepathic link with a dolphin. It said... 'leave me the fuck alone.'"</p>
<p>Anyway, word has it that after the meeting, the poor researcher whose job it was to respond to these comments had to take two weeks vacation, he was so dismayed.</p>From Theory to iPhone, Pt. 3: A Diversion Into Ruby2009-03-30T07:00:00-10:002009-03-30T07:00:00-10:00larrytag:knowing.net,2009-03-30:/posts/2009/03/from-theory-to-iphone-pt-3-a-diversion-into-ruby/<p>As far as I know, you <em>cannot</em> program the iPhone with Ruby. However, you can program OS X Cocoa applications with Ruby and, as a learning experience, it's very helpful.</p>
<p>I am coming to believe that the biggest barrier to learning how to program Cocoa are tutorials that emphasize the …</p><p>As far as I know, you <em>cannot</em> program the iPhone with Ruby. However, you can program OS X Cocoa applications with Ruby and, as a learning experience, it's very helpful.</p>
<p>I am coming to believe that the biggest barrier to learning how to program Cocoa are tutorials that emphasize the toolset rather than providing any context. This is a decades-old complaint of mine with programming tutorials, but that's a subject of another post.</p>
<p>In the case of my Ruby code, here is the object structure:</p>
<p><img alt="ruby_mvc" class="alignnone size-full wp-image-1999" height="399" src="/uploads/2009/03/ruby_mvc.png" title="ruby_mvc" width="574"></p>
<p>Which is about as classic an MVC triad as you can hope for, the only variation from the <a href="http://www.knowing.net/index.php/2009/02/23/from-theory-to-iphone-part-2-separation-of-concerns/" title="MVC discussion vis a vis iPhone development">classic structure</a> being the use of the singleton NSNotificationCenter rather than a strict OO Observer pattern.</p>
<p>Initialization also follows the classic sequence: the "main()" in the case of a Cocoa app is this Ruby code, executed outside of a class definition:</p>
<p>::: </p>
<div class="highlight"><pre><span></span><code># set up the application delegate
delegate = ApplicationDelegate.alloc.init()
OSX::NSApplication.sharedApplication.setDelegate(delegate)
</code></pre></div>
<p>:::</p>
<p>This will set in motion the initialization, which will eventually call back to the function <strong>applicationDidFinishLaunching(sender)</strong> in the just-created instance of the <strong>ApplicationDelegate</strong> class:</p>
<p>::: </p>
<div class="highlight"><pre><span></span><code><span class="nv">require</span><span class="w"> </span><span class="s1">'osx/cocoa'</span>
<span class="nv">require</span><span class="w"> </span><span class="s1">'MyModel'</span>
<span class="nv">require</span><span class="w"> </span><span class="s1">'MyView'</span>
<span class="nv">require</span><span class="w"> </span><span class="s1">'MyController'</span>
<span class="nv">class</span><span class="w"> </span><span class="nv">ApplicationDelegate</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nv">OSX</span>::<span class="nv">NSObject</span>
<span class="w"> </span><span class="nv">def</span><span class="w"> </span><span class="nv">applicationDidFinishLaunching</span><span class="ss">(</span><span class="nv">sender</span><span class="ss">)</span>
<span class="w"> </span><span class="nv">model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MyModel</span>.<span class="nv">alloc</span><span class="ss">()</span>.<span class="nv">init_cocoa</span><span class="ss">()</span>
<span class="w"> </span>#<span class="nv">View</span><span class="w"> </span><span class="nv">will</span><span class="w"> </span><span class="nv">subscribe</span><span class="w"> </span><span class="nv">to</span><span class="w"> </span><span class="nv">model</span><span class="w"> </span><span class="nv">notifications</span>.<span class="w"> </span><span class="nv">View</span><span class="w"> </span><span class="nv">creates</span><span class="w"> </span><span class="nv">Controller</span>
<span class="w"> </span><span class="nv">view</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">MyView</span>.<span class="nv">alloc</span><span class="ss">()</span>.<span class="nv">initWithFrame_model</span><span class="ss">(</span>[<span class="mi">30</span>,<span class="mi">20</span>,<span class="mi">600</span>,<span class="mi">300</span>],<span class="w"> </span><span class="nv">model</span><span class="ss">)</span>
<span class="w"> </span>#<span class="k">Do</span><span class="w"> </span><span class="nv">something</span><span class="w"> </span><span class="nv">that</span><span class="w"> </span><span class="nv">will</span><span class="w"> </span><span class="nv">propagate</span><span class="w"> </span><span class="nv">through</span><span class="w"> </span><span class="nv">connections</span>
<span class="w"> </span><span class="nv">model</span>.<span class="nv">text</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Hello, MVC!"</span>
<span class="w"> </span><span class="k">end</span>
<span class="k">end</span>
</code></pre></div>
<p>:::</p>
<p>The <strong>applicationDidFinishLaunching(sender)</strong> method follows the classic MVC initialization sequence:</p>
<ol>
<li>Create the Model</li>
<li>Create the View</li>
<li>Pass the Model to the View<ol>
<li>View creates its own Controller</li>
<li>View passes Model to Controller</li>
</ol>
</li>
</ol>
<p>I then manipulate the Model (by setting its text) in order to show how things are wired up.</p>
<p>But before we review that, let's take a look at the View initialization function <strong>initWithFrame_model(frame, model)</strong></p>
<p>::: </p>
<div class="highlight"><pre><span></span><code><span class="n">#This</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">inside</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">MyView</span>
<span class="n">def</span><span class="w"> </span><span class="n">initWithFrame_model</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span><span class="w"> </span><span class="n">model</span><span class="p">)</span>
<span class="w"> </span><span class="n">#Create</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">UI</span>
<span class="w"> </span><span class="n">styleMask</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSTitledWindowMask</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSClosableWindowMask</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSMiniaturizableWindowMask</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSResizableWindowMask</span>
<span class="w"> </span><span class="nv">@window</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSWindow</span><span class="p">.</span><span class="n">alloc</span><span class="p">.</span><span class="n">initWithContentRect_styleMask_backing_defer</span><span class="p">(</span><span class="n">frame</span><span class="p">,</span><span class="w"> </span><span class="n">styleMask</span><span class="p">,</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSBackingStoreBuffered</span><span class="p">,</span><span class="w"> </span><span class="k">false</span><span class="p">)</span>
<span class="w"> </span><span class="nv">@textview</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSTextView</span><span class="p">.</span><span class="n">alloc</span><span class="p">.</span><span class="n">initWithFrame</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span>
<span class="w"> </span><span class="nv">@window</span><span class="p">.</span><span class="n">setContentView</span><span class="p">(</span><span class="nv">@textview</span><span class="p">)</span>
<span class="w"> </span><span class="nv">@window</span><span class="p">.</span><span class="n">setTitle</span><span class="p">(</span><span class="ss">"Ruby Cocoa MVC"</span><span class="p">)</span>
<span class="w"> </span><span class="nv">@window</span><span class="p">.</span><span class="n">center</span><span class="p">()</span>
<span class="w"> </span><span class="nv">@window</span><span class="p">.</span><span class="n">makeKeyAndOrderFront</span><span class="p">(</span><span class="n">self</span><span class="p">)</span>
<span class="w"> </span><span class="n">#Make</span><span class="w"> </span><span class="n">controller</span><span class="p">.</span><span class="w"> </span><span class="n">Note</span><span class="w"> </span><span class="n">this</span><span class="w"> </span><span class="n">must</span><span class="w"> </span><span class="n">follow</span><span class="w"> </span><span class="n">initialization</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="ss">"controlled things"</span><span class="w"> </span><span class="p">(</span><span class="n">e</span><span class="p">.</span><span class="n">g</span><span class="p">.,</span><span class="w"> </span><span class="nv">@window</span><span class="p">)</span>
<span class="w"> </span><span class="n">controller</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">MyController</span><span class="p">.</span><span class="n">alloc</span><span class="p">.</span><span class="n">initWithView_model</span><span class="p">(</span><span class="n">self</span><span class="p">,</span><span class="w"> </span><span class="n">model</span><span class="p">)</span>
<span class="w"> </span><span class="n">#Associate</span><span class="w"> </span><span class="k">with</span><span class="w"> </span><span class="n">model</span><span class="p">.</span><span class="w"> </span><span class="n">Listen</span><span class="w"> </span><span class="k">to</span><span class="w"> </span><span class="n">model</span><span class="w"> </span><span class="n">updates</span><span class="w"> </span><span class="n">via</span><span class="w"> </span><span class="n">NSNotificationCenter</span>
<span class="w"> </span><span class="nv">@model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">model</span>
<span class="w"> </span><span class="nv">@notification_center</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSNotificationCenter</span><span class="p">.</span><span class="n">defaultCenter</span><span class="p">()</span>
<span class="w"> </span><span class="nv">@notification_center</span><span class="p">.</span><span class="n">addObserver_selector_name_object_</span><span class="p">(</span><span class="n">self</span><span class="p">,</span><span class="w"> </span><span class="err">:</span><span class="n">on_model_updated</span><span class="p">,</span><span class="w"> </span><span class="s1">'MyModelUpdatedNotification'</span><span class="p">,</span><span class="w"> </span><span class="nv">@model</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">self</span>
<span class="k">end</span>
</code></pre></div>
<p>:::</p>
<p>First, we setup the View itself using all those Cocoa calls. Then we instantiate the Controller, passing the <strong>model</strong> along (we'll return to <strong>MyController.initWithView_model(self, model)</strong> shortly). The last step of MyView initialization is registering a callback for when the <strong>model</strong> posts notifications. In this case, the parameters to <strong>addObserver_selector_name_object_()</strong> mean "When the \@model sends a notification called 'MyModelUpdatedNotification' call the function self.on_model_updated()":</p>
<div class="highlight"><pre><span></span><code><span class="n">#This</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">inside</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">MyView</span>
<span class="n">def</span><span class="w"> </span><span class="n">on_model_updated</span><span class="p">(</span><span class="n">notification</span><span class="p">)</span>
<span class="w"> </span><span class="n">puts</span><span class="w"> </span><span class="ss">"MyView.on_model_updated() called"</span>
<span class="w"> </span><span class="nv">@textview</span><span class="p">.</span><span class="n">insertText_</span><span class="p">(</span><span class="nv">@model</span><span class="p">.</span><span class="nc">text</span><span class="p">)</span>
<span class="k">end</span>
</code></pre></div>
<p>:::</p>
<p>Very straightforward: this the callback made after the model has been updated. In this case, the View reflects the model's <strong>text</strong> attribute. It's a very simple Model and a very simple View!</p>
<p>::: </p>
<div class="highlight"><pre><span></span><code><span class="kd">class</span><span class="w"> </span><span class="nx">MyModel</span><span class="w"> </span><span class="p"><</span><span class="w"> </span><span class="nx">OSX</span><span class="o">::</span><span class="nx">NSObject</span>
<span class="w"> </span><span class="nx">def</span><span class="w"> </span><span class="nx">init_cocoa</span>
<span class="w"> </span><span class="err">@</span><span class="nx">text</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="s">"initial text"</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kp">self</span>
<span class="w"> </span><span class="nx">end</span>
<span class="w"> </span><span class="nx">def</span><span class="w"> </span><span class="nx">text</span><span class="p">=(</span><span class="nx">t</span><span class="p">)</span>
<span class="w"> </span><span class="nx">puts</span><span class="w"> </span><span class="s">"Setting text: #{t}"</span>
<span class="w"> </span><span class="err">@</span><span class="nx">text</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">t</span>
<span class="w"> </span><span class="err">#</span><span class="nx">Model</span><span class="w"> </span><span class="nx">notifies</span><span class="w"> </span><span class="nx">observers</span>
<span class="w"> </span><span class="nx">notification_center</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="nx">OSX</span><span class="o">::</span><span class="nx">NSNotificationCenter</span><span class="p">.</span><span class="nx">defaultCenter</span><span class="p">()</span>
<span class="w"> </span><span class="nx">notification_center</span><span class="p">.</span><span class="nx">postNotificationName_object_</span><span class="p">(</span><span class="s">"MyModelUpdatedNotification"</span><span class="p">,</span><span class="w"> </span><span class="kp">self</span><span class="p">)</span>
<span class="w"> </span><span class="nx">end</span>
<span class="w"> </span><span class="nx">def</span><span class="w"> </span><span class="nx">text</span><span class="p">()</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="err">@</span><span class="nx">text</span>
<span class="w"> </span><span class="nx">end</span>
<span class="nx">end</span>
</code></pre></div>
<p>:::</p>
<p>This is almost deceptive, in that the most complex aspect of <strong>MyModel</strong> is the use of the <strong>NSNotificationCenter</strong>. One hopes that in the real world, there are all sorts of domain objects. In case it's not obvious, <strong>NSNotificationCenter.postNotificationName_object_()</strong> is the complement to <strong>NSNotificationCenter.addObserver_selector_name_object_()</strong> discussed previously.</p>
<p>So we've got a simple Model that concerns itself with problem domain and a simple View that concerns itself with output. So now let's return to the initialization sequence and the Controller, which concerns itself with input.</p>
<p>::: </p>
<div class="highlight"><pre><span></span><code><span class="n">#This</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">MyController</span>
<span class="n">def</span><span class="w"> </span><span class="n">initWithView_model</span><span class="p">(</span><span class="k">view</span><span class="p">,</span><span class="w"> </span><span class="n">model</span><span class="p">)</span>
<span class="w"> </span><span class="nv">@view</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">view</span>
<span class="w"> </span><span class="nv">@model</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">model</span>
<span class="w"> </span><span class="n">#View</span><span class="w"> </span><span class="k">is</span><span class="w"> </span><span class="n">manipulated</span><span class="w"> </span><span class="k">by</span><span class="w"> </span><span class="n">Controller</span>
<span class="w"> </span><span class="nv">@view</span><span class="p">.</span><span class="k">window</span><span class="p">.</span><span class="n">setDelegate</span><span class="p">(</span><span class="n">self</span><span class="p">)</span>
<span class="w"> </span><span class="n">#Controller</span><span class="w"> </span><span class="n">listens</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">updates</span><span class="w"> </span><span class="k">from</span><span class="w"> </span><span class="n">Model</span><span class="w"> </span><span class="n">via</span><span class="w"> </span><span class="n">NSNotification</span><span class="w"> </span><span class="n">Center</span>
<span class="w"> </span><span class="nv">@notification_center</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nl">OSX</span><span class="p">:</span><span class="err">:</span><span class="n">NSNotificationCenter</span><span class="p">.</span><span class="n">defaultCenter</span><span class="p">()</span>
<span class="w"> </span><span class="nv">@notification_center</span><span class="p">.</span><span class="n">addObserver_selector_name_object_</span><span class="p">(</span><span class="n">self</span><span class="p">,</span><span class="w"> </span><span class="err">:</span><span class="n">on_model_updated</span><span class="p">,</span><span class="w"> </span><span class="s1">'MyModelUpdatedNotification'</span><span class="p">,</span><span class="w"> </span><span class="nv">@model</span><span class="p">)</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">self</span>
<span class="k">end</span>
</code></pre></div>
<p>:::</p>
<p>Here, we see again the specification of a callback for when the Model notifies of changes. In this case, I just made an function that simply logged itself to the console ("Does input care if the text changes? Mmm... Not really..."). Really the only important piece of code here is the attachment of the view's <strong>window</strong>'s callbacks to the <strong>MyController</strong>. To fill that out, I had to write some simple functions to handle events associated with the window closing and the application terminating.</p>
<p>Easy-peasy, and here is the program running:</p>
<p><img alt="picture-4" src="/uploads/2009/03/picture-4.png" title="picture-4"></p>Pragmatic Bookshelf Goes Kindle-Compatible2009-03-25T15:19:00-10:002009-03-25T15:19:00-10:00larrytag:knowing.net,2009-03-25:/posts/2009/03/pragmatic-bookshelf-goes-kindle-compatible/<p><a href="https://pragprog.com/">The Pragmatic Bookshelf </a> is going Kindle and iPhone compatible, with support for .epub (iPhone) and .mobi (Kindle) formats.</p>
<p>I just downloaded <a href="https://pragprog.com/titles/bmrc/rubycocoa">RubyCocoa</a> on the Kindle and it looks excellent -- <strong>with listings in monospaced font!</strong> -- but most of my other books are not yet available in Kindle format.</p>
<p>Pragmatic Programmers have …</p><p><a href="https://pragprog.com/">The Pragmatic Bookshelf </a> is going Kindle and iPhone compatible, with support for .epub (iPhone) and .mobi (Kindle) formats.</p>
<p>I just downloaded <a href="https://pragprog.com/titles/bmrc/rubycocoa">RubyCocoa</a> on the Kindle and it looks excellent -- <strong>with listings in monospaced font!</strong> -- but most of my other books are not yet available in Kindle format.</p>
<p>Pragmatic Programmers have also begun selling tutorial screencasts. I've yet to take a look at any of those, but I think it's a good idea.</p>
<p>Kindle support from Pragmatic Programmers is a big deal. In my mind, PragProg has become the new O'Reilly. Not that O'Reilly has gone the way of the dinosaurs (or, say, Miller Freeman), but Safari access on portable devices is such a huge and obvious plum that the very fact they haven't plucked it makes me think that they must be facing internal issues.</p>My Most Popular Posts2009-03-21T09:41:00-10:002009-03-21T09:41:00-10:00larrytag:knowing.net,2009-03-21:/posts/2009/03/my-most-popular-post/<p>In response to a request from the esteemed <a href="https://damontucker.wordpress.com/">Director of the FBI Blogs</a>, these are some of the blog posts that have gotten the most traffic through the years:</p>
<ul>
<li><a href="http://www.knowing.net/index.php/2006/06/16/15-exercises-to-know-a-programming-language-part-1/">15 Exercises to Know a Programming Language</a></li>
<li><a href="http://www.knowing.net/index.php/2006/05/02/top-10-things-ive-learned-about-computers-from-the-movies-and-any-episode-of-24/">Top 10 Things I've Learned About Computers From Movies And Any Episode of "24 …</a></li></ul><p>In response to a request from the esteemed <a href="https://damontucker.wordpress.com/">Director of the FBI Blogs</a>, these are some of the blog posts that have gotten the most traffic through the years:</p>
<ul>
<li><a href="http://www.knowing.net/index.php/2006/06/16/15-exercises-to-know-a-programming-language-part-1/">15 Exercises to Know a Programming Language</a></li>
<li><a href="http://www.knowing.net/index.php/2006/05/02/top-10-things-ive-learned-about-computers-from-the-movies-and-any-episode-of-24/">Top 10 Things I've Learned About Computers From Movies And Any Episode of "24"</a></li>
<li><a href="http://www.knowing.net/index.php/2008/01/14/no-silver-programmers/">No Silver Programmers</a></li>
</ul>
<p>Unfortunately, my recent move from the Das Blog engine to Wordpress has left all my embedded links broken. I'll get around to fixing that someday (sure), but only after I do something about my blog theme.</p>
<p>And <em>that</em> will have to wait for a weekend that is not sunny...</p>FBI Bloggers: From Big Island2009-03-20T08:49:00-10:002009-03-20T08:49:00-10:00larrytag:knowing.net,2009-03-20:/posts/2009/03/fbi-bloggers-from-big-island/<p><img alt="fbifinalbutton1" class="size-full wp-image-1987 alignright" height="299" src="/uploads/2009/03/fbifinalbutton1.jpg" title="fbifinalbutton1" width="278"></p>
<p>I'm honored to be part of the <a href="https://fbiblogs.wordpress.com/" title="FBI Blogs">FBI Blogs</a> link-cycle. Although, having lived here only five years, I still feel very much a newcomer to the island.</p>
<p>I don't blog much about Hawai'i or the Big Island because I figure that most people subscribe to this site in order to …</p><p><img alt="fbifinalbutton1" class="size-full wp-image-1987 alignright" height="299" src="/uploads/2009/03/fbifinalbutton1.jpg" title="fbifinalbutton1" width="278"></p>
<p>I'm honored to be part of the <a href="https://fbiblogs.wordpress.com/" title="FBI Blogs">FBI Blogs</a> link-cycle. Although, having lived here only five years, I still feel very much a newcomer to the island.</p>
<p>I don't blog much about Hawai'i or the Big Island because I figure that most people subscribe to this site in order to read about software development. On the other hand, since I lost most of my old content and articles when switching from Das Blog to WordPress and since I have hardly had time to write any blogposts in the past year or so, it's probably a moot point.</p>
<p>One of the many interesting things about Hawai'i is how much smaller the community is than, say, the San Francisco Bay Area, where I lived for 17 years. In the Bay Area, you have <em>lots</em> of eyes on government and business. In Hawai'i, and especially the "neighbor islands" (not Oahu, where 90% of the state's population lives), the government is used to "reporting" that consists of a well-known reporter showing up at official meetings and transcribing rote answers to rote questions. The reporting of "citizen journalists," with their unrestrained voices and inconvenient attention to the world outside of council meetings, is actively clashing with a system that is unabashedly a political machine / old-boys network.</p>
<p>Simultaneously, the state and the Big Island are microcosms of the most interesting global challenges: environmental change and energy. Just yesterday, a report came out saying that 1<a href="http://www.stateofthebirds.org/2017/">/3 of the nation's endangered birds live in Hawai'i</a> (and <strong>many</strong> native species have already been driven to extinction). Accelerated rising of the sea-level will be a huge problem for Oahu. And our coral reefs are under threat from ocean acidification and warming. Meanwhile, this state could <strong>easily</strong> be carbon-neutral with existing technology. We have ample amounts of essentially every form of renewable energy except hydroelectric: <a href="http://dbedt.hawaii.gov/">wind</a>, <a href="http://www.jetsongreen.com/2008/02/hawaii-gateway.html">solar</a>, <a href="https://www.ormat.com/en/projects/all/main/">geothermal</a>, <a href="http://www.otecnews.org/">OTEC</a> (my favorite), <a href="https://www.cnet.com/news/">wave</a>, and <a href="https://www.sciencedaily.com/releases/2008/11/081121125604.htm">current</a>.</p>
<p>Obviously, the infrastructure to support <a href="https://www.hugedomains.com/domain_profile.cfm?d=eghia&e=com">electric vehicles</a> is much easier to build on an island, where a handful of charging stations is all that is required to ensure one is always nearby.</p>
<p>Yet we pay the highest electric rates in the nation and <a href="https://www.hawaiianelectric.com/portal/site/heco">our energy company</a> runs roughshod over a spineless and/or complicit Public Utilities Commission.</p>
<p>These are issues of interest to me, but whether this domain is the place to speak of them or not, I've not decided. What do you think?</p>Oslo Column Now Available...2009-03-16T13:45:00-10:002009-03-16T13:45:00-10:00larrytag:knowing.net,2009-03-16:/posts/2009/03/oslo-column-now-available/<p>My latest SD Times column is the first of a short series on Oslo.</p>Idea: Solar Energy Test Kit2009-03-16T12:07:00-10:002009-03-16T12:07:00-10:00larrytag:knowing.net,2009-03-16:/posts/2009/03/idea-solar-energy-test-kit/<p>I wish that I could put something the size of, say, a briefcase on my roof, leave it there for a month, bring it down, plug in a USB cord, and read "A solar water heater would have generated X% of your hotwater needs. A PV installation of X panels …</p><p>I wish that I could put something the size of, say, a briefcase on my roof, leave it there for a month, bring it down, plug in a USB cord, and read "A solar water heater would have generated X% of your hotwater needs. A PV installation of X panels would have generated Y KwH."</p>
<p>Basically: a single solar cell plus a data logger. I see a market in Hawaii (small) and the Southwest mainland (big).</p>
<p>Make it cheap enough and sell it to the geek market even. I suppose for the geek market you'd have to add WiFi connectivity.</p>Ultrafast Battery Recharging Breakthrough2009-03-11T10:37:00-10:002009-03-11T10:37:00-10:00larrytag:knowing.net,2009-03-11:/posts/2009/03/ultrafast-battery-recharging-breakthrough/<p>The Ars Technica article l<a href="https://arstechnica.com/science/2009/03/lithium-breakthrough-could-charge-batteries-in-10-seconds/">ithium breakthrough could charge batteries in 10 seconds</a> reports on a <em>Nature</em> article describing a very fast way to charge or discharge batteries. The upshot is that an electric-car battery could be charged in five minutes ("which would make electric vehicles incredibly practical") but would …</p><p>The Ars Technica article l<a href="https://arstechnica.com/science/2009/03/lithium-breakthrough-could-charge-batteries-in-10-seconds/">ithium breakthrough could charge batteries in 10 seconds</a> reports on a <em>Nature</em> article describing a very fast way to charge or discharge batteries. The upshot is that an electric-car battery could be charged in five minutes ("which would make electric vehicles incredibly practical") but would pull <strong>180,000 Watts</strong> ("which is most certainly not practical."). I would think you could use a two-stage process (whereby the filling station's bank of batteries would "trickle" charge from the grid and then discharge them rapidly), but I would also think that would generate huge amounts of heat unless you had a handy room-temperature-superconducting charging cord.</p>Kindle for iPhone: Nice But Not Comparable2009-03-04T15:39:00-10:002009-03-04T15:39:00-10:00larrytag:knowing.net,2009-03-04:/posts/2009/03/kindle-for-iphone-nice-but-not-comparable/<p>Amazon has released a Kindle application for the iPhone. It nicely synchronizes with your Kindle library (which is all stored "in the cloud") but, strangely, it seems to only pick up books and not periodicals or blogs.</p>
<p>The display is okay (I mean, it's the iPhone display. Duh.), nothing compared …</p><p>Amazon has released a Kindle application for the iPhone. It nicely synchronizes with your Kindle library (which is all stored "in the cloud") but, strangely, it seems to only pick up books and not periodicals or blogs.</p>
<p>The display is okay (I mean, it's the iPhone display. Duh.), nothing compared to the Kindle's eInk. The big win, though, is that the iPhone supports color, so this might make the iPhone good for reading Kindle content with images.</p>
<p>It appears that there's no facility for taking notes or highlighting, which is a fairly big deal for technical readers (on the other hand, since it's the iPhone I can flip over to Evernote, take a note there, and it synchs up with all of my Evernote databases). (P.S. Evernote is no OneNote, but there is no OneNote for the Mac, which is a huge disappointment.)</p>Kindle-d But Not Available2009-02-26T09:12:00-10:002009-02-26T09:12:00-10:00larrytag:knowing.net,2009-02-26:/posts/2009/02/kindle-d-but-not-available/<p>The New Yorker is now available in Kindle form. I subscribe to The New Yorker and have access to it in a browser, but the Kindle subscription is not linked to my physical subscription and their customer service says "Nope, can't link 'em." (Heck, I'd probably _trade_ my physical subscription …</p><p>The New Yorker is now available in Kindle form. I subscribe to The New Yorker and have access to it in a browser, but the Kindle subscription is not linked to my physical subscription and their customer service says "Nope, can't link 'em." (Heck, I'd probably _trade_ my physical subscription for the Kindle version -- aside from the very occasional photo-essay, the New Yorker is text and cartoons, which is perfect for the Kindle.)</p>
<p>The other day I bought a (dead-tree) technical book on Amazon. As part of the checkout process, I was offered a \<span class="math">\(5 "upgrade" to read it online. "Yeah, okay," I thought. Again, what I was given was a browser-based viewer. The book is \_available\_ on the Kindle for \\)</span>29. So I wasted my \<span class="math">\(5 and will never use that option again. But had they offered me a \\)</span>5 (or even \$10) "physical book + Kindle" bundle, I'd do it every time.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Dow 7000: What's the P:E?2009-02-23T12:50:00-10:002009-02-23T12:50:00-10:00larrytag:knowing.net,2009-02-23:/posts/2009/02/dow-7000-whats-the-pe/<p>Does anyone know what the combined earnings of the DJIA 30 is? I still have a couple decades before retirement; if the P:E ratio is getting back to normal, I might start buying because (a) it'll either come back or (b) it won't, in which case "investment strategies" aren't …</p><p>Does anyone know what the combined earnings of the DJIA 30 is? I still have a couple decades before retirement; if the P:E ratio is getting back to normal, I might start buying because (a) it'll either come back or (b) it won't, in which case "investment strategies" aren't going to help one way or the other.</p>From Theory to iPhone, Part 2: Separation of Concerns2009-02-23T11:20:00-10:002009-02-23T11:20:00-10:00larrytag:knowing.net,2009-02-23:/posts/2009/02/from-theory-to-iphone-part-2-separation-of-concerns/<p><a href="http://www.knowing.net/index.php/2009/02/17/from-theory-to-iphone-part-1/">Part 1</a></p>
<h2>Model-Editor / Domain-View : On This We Can Agree</h2>
<p>For 20 years now, it’s been widely agreed that one of the best ideas for writing a maintainable system is to separate the domain stuff from the interface stuff. This makes especially good sense in a world where you want …</p><p><a href="http://www.knowing.net/index.php/2009/02/17/from-theory-to-iphone-part-1/">Part 1</a></p>
<h2>Model-Editor / Domain-View : On This We Can Agree</h2>
<p>For 20 years now, it’s been widely agreed that one of the best ideas for writing a maintainable system is to separate the domain stuff from the interface stuff. This makes especially good sense in a world where you want to make your software available on multiple devices (say, a desktop and a smartphone).</p>
<p>In the world of Smalltalk, the domain stuff was called the Model and the interface stuff was called the Editor. The idea was that you had a single Model and you had one or more Editors for manipulating it. In the Windows world, years later, there was a similar model called “Document-View,” and, indeed, it’s an essentially universal concept when working with GUIs.</p>
<h2>From Editor To View-Controller: The Gathering Storm Clouds</h2>
<p>Smalltalk went a step further. “Interface stuff” consists of input and output, which are really quite different beasts. So Smalltalk split the Editor concern into two parts: the View concerned with how things are … let’s say … drawn on the screen and the Controller, which is concerned about how … let’s say … mouse clicks and keyboard strokes are interpreted as commands to the domain-stuff and screen-stuff.</p>
<p>This leads to the classic Model-View-Controller (MVC) communication model:</p>
<p><a href="/uploads/2009/02/mvc-classic-communication.png"><img alt="MVC_Classic_Communication" height="307" src="/uploads/2009/02/mvc-classic-communication-thumb.png" title="MVC_Classic_Communication" width="441"></a></p>
<p>The View requests data from the Model (“What is the city name?” “What is the postal code?”) and outputs it. The Controller routes mouse clicks and keyboard strokes to either the Model (“calculate shipping costs”) or to the View (“Scroll to the next page”). When the Model changes, either in response to a command sent to it view the Controller or by, say, a timer going off, it sends out a notification to any objects that have registered interest in hearing about it.</p>
<p>This model is simple enough, but it <strong>does contain</strong> some structural assumptions that are not <em>logically demanded</em> by the idea of separating the concerns of Model, View, and Controller. The most obvious is the notification model. Instead of having a Observer pattern, objects interested in the Model could be independent actors that just poll the Model regularly. That’d work: it’s actually closer to the structure of the Web (think about an RSS feed – the server does not maintain a list of subscribers, the subscribers just hit it every once in awhile saying “Anything new?”).</p>
<p>Another assumption (one directly relevant to OS X / iPhone programming) is that the Model maintains the list of its Observers. Another option is a separate notification “hub” that maintains the lists of “objects publishing updates” and “objects subscribing.” (This is how I think one “should” do it in Cocoa.)</p>
<p>Finally, this tidy little diagram begs the question of organizing complete screens. I’ve heard people adamant that one should create an MVC triad for each interface element. They say a <strong>BarChart</strong> View reflects a <strong>NumericRange</strong> Model and has <strong>Keyboard</strong> and <strong>Mouse</strong> Controllers and that these elements ought to be gathered together into larger units (panels and forms). Each component completely encapsulates its own responsibilities. This is a structure that fits well with most interface painting tools. I argue that such a structure is <em>not</em> MVC at all, but is <strong>Presentation-Abstraction-Control</strong>. (And I argue that most people get PAC wrong and that this is a cause of much suffering in the world. But that’s a post for another day.)</p>
<p>In my opinion, one <em>ought</em> to think of MVC triads in the coarsest granularity that maintains coherence. Sure, if you’re designing a framework, you have fine-grained MVC triads. But if you’re developing an application, your MVC triads ought to be quite coarse – that if you have a domain / <strong>Model</strong> object of type, say, <strong>Address</strong>, you ought to be thinking along the lines of an <strong>AddressController</strong> and an <strong>AddressView</strong> (or, in many cases, multiple View-Controllers that view and control the same domain object in different contexts – for instance, a read-only view that occurs after shipping occurs).</p>
<p><strong>Warning:</strong> This description of mine does not describe <strong>any</strong> MVC <em>framework</em> – it’s a discussion of the MVC <em>pattern</em>. Modern MVC frameworks implement things based on an underlying platform and implementation language. I think it’s valid for Rails, ASP.NET MVC, and Cocoa to call themselves MVC frameworks, but even if you scratch under their surfaces, you won’t (quite) see the diagram I’ve presented here. Indeed, that’s the major reason I’m writing this series of posts.</p>Google '#{first_name} Needs'2009-02-18T12:45:00-10:002009-02-18T12:45:00-10:00larrytag:knowing.net,2009-02-18:/posts/2009/02/google-first_name-needs/<p>The new game is to search Google for '#{your_first_name} Needs' and post the top two things:</p>
<p>http://www.google.com/search?q=Larry+Needs : Larry needs to make a budget. Liberal Larry needs a fisking.</p>
<p>Spooky.</p>From Theory to iPhone, Part 1: Everyone’s Got An Opinion2009-02-17T11:01:00-10:002009-02-17T11:01:00-10:00larrytag:knowing.net,2009-02-17:/posts/2009/02/from-theory-to-iphone-part-1/<p><strong>This is not a tutorial. This is me talking to myself. Much of what I say about iPhone development will be wrong.</strong></p>
<p>It has become a truism that the platform library, not the programming language, has become the large barrier to learning. As a guy with a background in “everything …</p><p><strong>This is not a tutorial. This is me talking to myself. Much of what I say about iPhone development will be wrong.</strong></p>
<p>It has become a truism that the platform library, not the programming language, has become the large barrier to learning. As a guy with a background in “everything but the Mac” (well, I learned Smalltalk on a Mac FX – does that count? And I had a NeXT pizzabox, but I never did any serious development on it), the barrier to iPhone development involves:</p>
<ul>
<li>Objective C</li>
<li>XCode</li>
<li>Cocoa</li>
<li>iPhone Licensing / Provisioning Hurdles</li>
</ul>
<p>My initial expectation was that Objective C was going to be the big problem. Objective C was a fascinating hybrid language back in the late 80s which combines approaches from C and Smalltalk – every C program is a valid Objective C program. (I really doubt that every valid Smalltalk program is also valid, but given <a href="http://chronos-st.blogspot.com/2007/12/smalltalk-in-one-page.html">Smalltalk’s famously compact grammar</a>, who knows?)</p>
<p>Objective C was a success both in its time as an important part of the dialog about shifting towards object-orientation and, to this day, as the main programming language for the second-most-popular OS. But, let’s face it, it’s kind of an odd bird in today’s ecosystem. The combination of pointers and <a href="https://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html">explicit memory management</a> with Smalltalk-style messages and syntax is guaranteed to cause some mental context thrashing (I was looking at a simple piece of code yesterday and caught myself in a loop: “Right-associative? Left-associative? Right-associative? Left-Associative?…”). Heck, Brad Cox doesn’t much code in Objective C anymore!</p>
<p>But after a short time with my books (<a href="https://www.amazon.com/gp/product/0321503619?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321503619">Cocoa(R) Programming for Mac(R) OS X (3rd Edition) by Hillegass</a>, <a href="https://www.amazon.com/gp/product/0321555457?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321555457">The iPhone Developer's Cookbook: Building Applications with the iPhone SDK (Developer's Library)</a> by Sadun, and <a href="https://www.amazon.com/gp/product/0321334221?ie=UTF8&tag=thinkinginnet-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0321334221">Step into Xcode: Mac OS X Development</a> by Anderson), it became clear that not only did I have to add a new challenge to my list:</p>
<ul>
<li>Interface Builder</li>
</ul>
<p>But that the real challenge would be understanding Cocoa and its design idioms.</p>
<h2>APIs, Frameworks, and Opinions</h2>
<p>At the lower-levels of an Operating System API, you can typically solve a problem in any number of ways: you have a potful of function calls and a whole bunch of resources that can be combined in whatever way you desire. You want to use a technique for inter-process communication that was obsolete a decade ago and is kept for legacy purposes? Go for it! You want to store the results of a calculation by encoding them in filenames? Awesome!</p>
<p>At the other extreme, frameworks such as Ruby on Rails boast of being “opinionated.” How do you structure your source code? Like this. Do you use unit-testing? Damn right: that goes over here. Storage structure, naming conventions, etc. – there’s a good argument to be made that “convention over configuration” saves a lot of time.</p>
<p>One of the big advantages of a baked-in “opinion” is that one can write tools based on the opinion. While it’s possible to write, say, a screen painter that works with any kind of layout management, generally speaking, tools can generate better code when there are fewer options.</p>
<p>Cocoa is less opinionated than Ruby on Rails but more than, say, .NET. More accurately, it appears to me that XCode and Interface Builder are <em>quite opinionated</em>, and if you forego the convention, you’re likely to lose out on some very powerful tooling (particularly in Interface Builder).</p>StimulusWatch.org: Wow2009-02-14T12:50:00-10:002009-02-14T12:50:00-10:00larrytag:knowing.net,2009-02-14:/posts/2009/02/stimuluswatchorg-wow/<p>StimulusWatch.org is a fantastic resource, which lists the specific projects in the economic stimulus, broken down to the county and city level, and sortable by price, number of jobs estimated, or votes (from the public) as to whether or not it's truly critical.</p>
<p>This is just fantastic; I hope …</p><p>StimulusWatch.org is a fantastic resource, which lists the specific projects in the economic stimulus, broken down to the county and city level, and sortable by price, number of jobs estimated, or votes (from the public) as to whether or not it's truly critical.</p>
<p>This is just fantastic; I hope that it is actually read by politicians.</p>
<p><strong>Update</strong>: Fixed link.</p>Happy 1234567890!2009-02-13T13:31:00-10:002009-02-13T13:31:00-10:00larrytag:knowing.net,2009-02-13:/posts/2009/02/happy-1234567890/<p>See you at 0x500,000!</p>Fireable Offense?2009-02-13T12:00:00-10:002009-02-13T12:00:00-10:00larrytag:knowing.net,2009-02-13:/posts/2009/02/fireable-offense/<p>Woman calls a customer service department, complains about something, has the situation explained to her.</p>
<p>She goes on a consumer advocate Website and describes the situation, saying that she had spoken to someone who was "moderately intelligent."</p>
<p>Customer service rep sees this post, takes offense. He uses his customer service …</p><p>Woman calls a customer service department, complains about something, has the situation explained to her.</p>
<p>She goes on a consumer advocate Website and describes the situation, saying that she had spoken to someone who was "moderately intelligent."</p>
<p>Customer service rep sees this post, takes offense. He uses his customer service email account to send an email with the content "moderately intelligent...?" to her.</p>
<p>She goes on the Website and characterizes this email as outlandish, offensive, etc.</p>
<p>The customer service rep gets fired. I dunno'. On the one hand, the rep's response was clearly ill-advised, but on the other hand, aren't we supposed to be breaking free of old conceptions of the appropriate tone between a company and its clients? If a rep responded, not with a boilerplate "We apologize for any inconvenience..." but with a "You know, that really hurt because I was distracted that day because I'd been up all night hand-feeding some kittens..." then this might have been some example of a company "speaking with a human voice." Is it really a fireable offense to take offense at being insulted (not that characterizing someone as "moderately intelligent" is extreme behavior) and to let the person know that you object?</p>
<p>What do you think?</p>
<p><strong>Update:</strong> Chuck Todd has a blog entry <a href="https://www.msn.com/">complaining about the tight reins he's experiencing as a member of the White House press corps</a>. The most common response of commenters is "quit whining." But I read it and see "These are the conditions I work in. They're frustrating and don't serve anyone's interests." It's the same kind of thing -- a personal tone, but isn't that what everyone's <em>supposed</em> to be doing nowadays?</p>Let’s Hope This Does Not Become An Iconic Image2009-02-10T15:39:00-10:002009-02-10T15:39:00-10:00larrytag:knowing.net,2009-02-10:/posts/2009/02/lets-hope-this-does-not-become-an-iconic-image/<p><a href="/uploads/2009/02/jobsrecessionssm.jpg"><img alt="jobsrecessionsSM" height="369" src="/uploads/2009/02/jobsrecessionssm-thumb.jpg" title="jobsrecessionsSM" width="504"></a></p>
<p>That green line is the current situation. Whee!!!!!</p>Kindle Monospaced Font Not "Picked Up" By My Existing Books2009-02-10T08:57:00-10:002009-02-10T08:57:00-10:00larrytag:knowing.net,2009-02-10:/posts/2009/02/kindle-monospaced-font-not-picked-up-by-my-existing-books/<p>I checked every programming book I have on my Kindle: Hillegass's Cocoa Programming, Odersky et al.'s Programming in Scala, and a couple Pragmatic Programmer books -- none "trigger" the monospaced font now supported by the Kindle. I suppose the "good" news is that there are not many programming books for …</p><p>I checked every programming book I have on my Kindle: Hillegass's Cocoa Programming, Odersky et al.'s Programming in Scala, and a couple Pragmatic Programmer books -- none "trigger" the monospaced font now supported by the Kindle. I suppose the "good" news is that there are not many programming books for the Kindle yet, so the amount of unsupported content is low.</p>
<p>Now that a monospaced font is available and Amazon is going to make Kindle material open on a variety of platforms (i.e., the iPhone), one hopes that the tech publishers will make the extra effort to support the Kindle / Mobi format. Both O'Reilly & Associates and Pragmatic Programmers have an eBook infrastructure and high-quality texts. It is just a matter of whether they can be convinced that the incremental cost of supporting the Kindle format is worthwhile.</p>Kindle Monospaced Fonts: Fail2009-02-09T09:35:00-10:002009-02-09T09:35:00-10:00larrytag:knowing.net,2009-02-09:/posts/2009/02/photo-kindle-font-improvements/<p>~~A mixed bag:~~</p>
<p>The Kindle has Greek characters, but not complete math (in the image below, there should be a ⇔ \<=> character).</p>
<p>~~It converts Courier (at least) to monospaced, but does not auto-convert Consolas:~~</p>
<p>As you can see, neither the Courier nor the Consolas work (just look at the difference in …</p><p>~~A mixed bag:~~</p>
<p>The Kindle has Greek characters, but not complete math (in the image below, there should be a ⇔ \<=> character).</p>
<p>~~It converts Courier (at least) to monospaced, but does not auto-convert Consolas:~~</p>
<p>As you can see, neither the Courier nor the Consolas work (just look at the difference in space taken by ||||| and mmmmm).</p>
<p>This is a PDF conversion, ~~so it’s possible that a different authoring route (perhaps Kindle specific) is necessary to get monospaced fonts~~ (See update below…) . Bad news for programmers:</p>
<p><a href="/uploads/2009/02/img-0081.jpg"><img alt="IMG_0081" height="484" src="/uploads/2009/02/img-0081-thumb.jpg" title="IMG_0081" width="364"></a></p>
<p><a href="/uploads/2009/02/img-0082.jpg"><img alt="IMG_0082" height="484" src="/uploads/2009/02/img-0082-thumb.jpg" title="IMG_0082" width="364"></a></p>
<p><strong>Update</strong>: Ah hah!</p>
<p>I managed to trigger the Kindle monospaced font by converting from HTML and using the \<pre> tag:</p>
<p><a href="/uploads/2009/02/img-00831.jpg"><img alt="IMG_0083" height="484" src="/uploads/2009/02/img-0083-thumb2.jpg" title="IMG_0083" width="364"></a></p>
<p>More bad news, though: using an explicit HTML \<font face=”Courier”> tag does not work.</p>Functional Programming Guidelines a la SOLID?2009-02-08T10:21:00-10:002009-02-08T10:21:00-10:00larrytag:knowing.net,2009-02-08:/posts/2009/02/functional-programming-guidelines-a-la-solid/<p>The recent kerfuffle between “Uncle Bob” Martin and <a href="https://www.joelonsoftware.com/">Joel Spolsky</a> involves the <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">SOLID Principles</a>,some object-oriented design guidelines that compress into a pleasing acronym.</p>
<p>While there are weaknesses in the mainstream OOP languages, I believe that OOP has a great advantage in that it <em>is</em> teachable. You can start with …</p><p>The recent kerfuffle between “Uncle Bob” Martin and <a href="https://www.joelonsoftware.com/">Joel Spolsky</a> involves the <a href="http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod">SOLID Principles</a>,some object-oriented design guidelines that compress into a pleasing acronym.</p>
<p>While there are weaknesses in the mainstream OOP languages, I believe that OOP has a great advantage in that it <em>is</em> teachable. You can start with “objects are nouns, methods are verbs,” draw some class diagrams, and move on to SOLID… all of which could be criticized as overly abstract and ungrounded in the business of turning inputs into outputs, but y’know, darn it, there <em>are</em> teachable principles.</p>
<p>Functional programming fits well with test-driven approaches to development and provides some guidance on concurrency issues. In the Jolt Judges discussions this year, nothing has engendered as much discussion as Haskell and Scala.</p>
<p>But from a pedagogical standpoint, I think that functional programming has a big problem. To the extent that you get <em>anything</em> in terms of principles, it’s mathematical category theory. How do you determine when a function is too big? When should you split a data structure into sub-structures? How can you tell a well-thought-out function from a poorly-thought-out one?</p>
<p>Functional programming needs answers to these types of questions and those answers can’t be of the “once you understand it, you’ll develop a feel for it,” ilk.</p>Mathematica Releases $295 Version For Home Use2009-02-06T11:31:00-10:002009-02-06T11:31:00-10:00larrytag:knowing.net,2009-02-06:/posts/2009/02/mathematica-releases-295-version-for-home-use/<p><a href="http://www.wolfram.com/">Mathematica</a> is one of the most impressive pieces of software I’ve ever used. I use it any time I can find an excuse, which is unfortunately not that often (it’s surprising how rarely math intrudes upon the actual day-to-day life of the software developer).</p>
<p>In line with its …</p><p><a href="http://www.wolfram.com/">Mathematica</a> is one of the most impressive pieces of software I’ve ever used. I use it any time I can find an excuse, which is unfortunately not that often (it’s surprising how rarely math intrudes upon the actual day-to-day life of the software developer).</p>
<p>In line with its professional utility (my brother-in-law uses it when designing electromagnetics for <a href="http://www.fnal.gov/">FermiLab</a>), Mathematica costs a pretty penny. However, Wolfram Research has just released a \$295 version for non-professional use (<a href="http://www.wolfram.com/mathematica/">Mathematica 7 Home Edition</a>). Not exactly cheap, but when I specifically asked if it was limited, I was told it is “a fully functional version of Mathematica Professional with the same features.” </p>Column on IronPython Up2009-02-03T14:02:00-10:002009-02-03T14:02:00-10:00larrytag:knowing.net,2009-02-03:/posts/2009/02/column-on-ironpython-up/<p>My latest column for SD Times argues that Python is “your best bet for easy access to arbitrary values of interesting.”</p>Perfect metaphor for language design2009-01-27T12:45:00-10:002009-01-27T12:45:00-10:00larrytag:knowing.net,2009-01-27:/posts/2009/01/perfect-metaphor-for-language-design/<p>Paul Vick nails it:</p>
<blockquote>
<p>[W]riting a new language, domain-specific or not, is a lot like opening a restaurant: everyone thinks they can do it because they’ve eaten at one and it looks like fun.</p>
</blockquote>
<p>via <a href="http://www.panopticoncentral.net/">DSLs: Definitely a bad idea!</a> .</p>
<p>He's getting some heat in the comments for …</p><p>Paul Vick nails it:</p>
<blockquote>
<p>[W]riting a new language, domain-specific or not, is a lot like opening a restaurant: everyone thinks they can do it because they’ve eaten at one and it looks like fun.</p>
</blockquote>
<p>via <a href="http://www.panopticoncentral.net/">DSLs: Definitely a bad idea!</a> .</p>
<p>He's getting some heat in the comments for his intentionally-provocative title, but I think he's exactly right -- <em>most</em> languages, whether domain-specific or not, turn out to be more trouble than they're worth. (I would say "die" but domain-specific languages tend to become undead -- unkillable beings whose origins are lost in the mists of time. How's that for a mixed metaphor? DSLs are restaurants that turn into vampires.)</p>Broken Links resulting from WordPress Conversion2009-01-27T07:39:00-10:002009-01-27T07:39:00-10:00larrytag:knowing.net,2009-01-27:/posts/2009/01/broken-links-resulting-from-wordpress-conversion/<p>Pretty much every link on my site was rewritten by Das Blog for logging purposes. The conversion to Word Press has broken all of those. I am going to have to write a utility to convert them and I won't be able to get to that for several days at …</p><p>Pretty much every link on my site was rewritten by Das Blog for logging purposes. The conversion to Word Press has broken all of those. I am going to have to write a utility to convert them and I won't be able to get to that for several days at best.</p>
<p>Sorry for the continued inconvenience...</p>Star Party on Mauna Kea2009-01-25T14:03:00-10:002009-01-25T14:03:00-10:00larrytag:knowing.net,2009-01-25:/posts/2009/01/star-party-on-mauna-kea/<p><img alt="m42" class="size-full wp-image-1913 alignright" height="102" src="/uploads/2009/01/m42.jpg" title="m42" width="148">My just-purchased <a href="https://www.stellarvue.com/stellarvue-svx102t-r-premier-apochromatic-triplet-refractor/">SV102ED</a> is my first "real" telescope and is a purchase I've put off for decades (ever since I realized what a huge \$ gap there was between a mall-store telescope and a decent one). After a lot of research, I went for the SV102ED "clearance special" with the M1 …</p><p><img alt="m42" class="size-full wp-image-1913 alignright" height="102" src="/uploads/2009/01/m42.jpg" title="m42" width="148">My just-purchased <a href="https://www.stellarvue.com/stellarvue-svx102t-r-premier-apochromatic-triplet-refractor/">SV102ED</a> is my first "real" telescope and is a purchase I've put off for decades (ever since I realized what a huge \$ gap there was between a mall-store telescope and a decent one). After a lot of research, I went for the SV102ED "clearance special" with the M1 mount, a star diagonal, and a 23mm eyepiece.</p>
<p>I was excited by what little I could see from my backyard in the past two weeks -- M42, phases of Venus, and Uranus-is-in-the-center-of-the-FOV-so-that-must-be-it. But last night was the new moon star party at the Visitor Center at the 9000' elevation of Mauna Kea.</p>
<p>Ho-ho-holy cow! According to the more experienced it was a "better than average" night with the temps in the mid 30s and very still air. The Milky Way, especially south of the Ecliptic, was phenomenal -- I can't wait to see it from there in the Summer!</p>
<p>Much of the first hour was spent with people volunteering to help me with my gear (thanks Ray!). Almost everything needed tightening, especially the clamshell. Initially, the scope would slide in the clamshell when pointing vertically no matter how tight the screws were; a fellow happened to have a patch of flocking material and scissors and that fixed that problem. I had screwed up my red dot royally and that took some time to get right.</p>
<p>By the time I got everything in order it was fully dark and I REALLY experienced the SV102ED for the first time -- M42, Andromeda, Perseus Double Cluster<img alt="ngc884" class="alignright size-full wp-image-1914" height="93" src="/uploads/2009/01/ngc884.jpg" title="ngc884" width="124">: all much better than I'd ever seen them. The first huge thrill, though, was getting the Sculptor Galaxy by star hopping. Then the Owl Cluster, which looked absolutely FANTASTIC in the SV.</p>
<p>The big "get" for the more experienced viewers was the Tarantula Nebula which was just barely up, skimming the slopes of Mauna Loa. I guess I don't have the most refined tastes, but it wasn't a highlight of the evening for me.</p>
<p>To me the highlight was M81 & M82 in the same FOV. Awesome! That blew my mind, daddy-o, and several people thought the view through my telescope was the most striking.<img alt="m81" class="alignright size-full wp-image-1915" height="100" src="/uploads/2009/01/m81.jpg" title="m81" width="150"></p>
<p>I picked up the Crab and Horsehead nebulas (nebulae?) but, again with unrefined tastes, was happy to move onto M38 or just to point the 102 into the Milky Way and be dazzled.</p>
<p>Saturn rose around 10 and, as soon as it got up 15 degrees or so, I had to take a look. I was not expecting to see anything more than a disk, but the 23mm clearly showed the side-on rings! (Small but sharp!) Like any newbie, I spent a LOT of time on Saturn. I borrowed Nagler's that were 13mm, a 9mm with a Powervue, and a 6-3mm zoom. I absolutely LOVED the view of Saturn in the 13 and the zoom at its lower-powers. All the way zoomed in or with the 9mm+Powervue, Saturn transited so quickly that the telescope didn't settle down in between adjustments.</p>
<p>That was the only piece of the equipment that didn't exceed my expectations. "Alt-az is fine," said several people when I was researching, but especially at high magnifications it was frustrating to slew it and lose several seconds of the transit through the FOV to vibrations.</p>
<p>Around midnight the wind started coming up and turned the FOV into a field of apostrophes. Plus, I'd accidentally re-misaligned my red dot (trying to remember where the dimmer was) and I'd run out of hot chocolate. So down through the cloud layer anc back home.</p>
<p>I had gone up very much thinking in terms of a "shake down" and had low expectations for actually seeing stuff. Instead, I was repeatedly blown away by the quality of the optics of the 102: everything that I could find (or have someone point to with a laser or find for me...) was MUCH better than I expected it to be. Although the purchase was a<br>
major decision, I'm absolutely convinced that I made the right decision to invest what I did. Now, of course, the problem is that I want a set of equally good eyepieces! (Which will have to wait for a LONG time!)</p>
<p>What a great night!</p>Converted to WordPress; pardon the dust...2009-01-25T12:13:00-10:002009-01-25T12:13:00-10:00larrytag:knowing.net,2009-01-25:/posts/2009/01/converted-to-wordpress-pardon-the-dust/<p>I am in the process of converting my blogging engine from das Blog to Word Press. During the transition, please feel free to ignore such things as the "about" page, my blogroll, etc.</p>Politically Correct2009-01-21T12:45:00-10:002009-01-21T12:45:00-10:00larrytag:knowing.net,2009-01-21:/posts/2009/01/politically-correct/<p>This from a reader of a newsletter sent out by one of my publishers:</p>
<blockquote>
<p>First, quit being political by having garbage like this:</p>
<p>\<QUOTE FROM NEWSLETTER><br>
In the spirit of new U.S. President Barack Obama's call for service <br>
in our communities, we offer up this e-mail from SPTechReport reader …</p></blockquote><p>This from a reader of a newsletter sent out by one of my publishers:</p>
<blockquote>
<p>First, quit being political by having garbage like this:</p>
<p>\<QUOTE FROM NEWSLETTER><br>
In the spirit of new U.S. President Barack Obama's call for service <br>
in our communities, we offer up this e-mail from SPTechReport reader <br>
Ted Tyree:<br>
\<END QUOTE></p>
<p>I didn't vote for that moron and it lowers your credibility and <br>
questions your intelligence by including this kind of stuff.</p>
</blockquote>
<p>Once upon a time when I was a magazine editor, we used the phrase "politically correct." A natural desire on the part of an editor is to avoid writing that unintentionally offends (when you offend, you want it to be intentional and precise). "PC" was used when writing sloppily or unknowingly promulgated racism or sexism. It was generally used with an ironic tone to acknowledge the arbitrariness of language and sensibilities -- "That's not PC! Rugs are 'Oriental,' people are 'Asian'" ? to which the appropriate response was "Thank you for raising my awareness.")</p>
<p>As is often case, the irony was lost on the feverishly sincere. On the Right, "PC" became an epithet that allowed one to pretend that offense was solely the responsibility of the listener, not something engendered by the speaker. On the Left, I think it's now universally acknowledged that the fear of offense has been counterproductive to effective dialogue (who am I, a white male, to offer a perspective on race or gender?).</p>
<p>Now, we get this, true "political correctness." True, it <em>is</em> a political statement ("of or relating to your views about social relationships involving authority or power") and I suppose that a thin-skinned \<a href="http://en.wikipedia.org/wiki/Objectivism_(Ayn_Rand)"" target="_blank" rel="noopener noreferrer">Objectivist might find a "call for service in our communities" repellant, but I doubt that is what is at work with the letter-writer (anyone who labels Obama a "moron" fails the "grounded in reality" part of Randian philosophy).</p>
<p>Instead, we see exactly what both candidates in the last election decried; the knee-jerk reaction that anything "they" say is imbecilic and anything "we" say is self-evident and stirring. We have to move beyond that.</p>
<p>Especially because in this post-W age, a conservatism based on anti-intellectual ideology is a losing position for at least a generation.</p>Star hopping : Goto Scope :: vi : IDE. Thinking about payoff curves.2009-01-16T11:38:00-10:002009-01-16T11:38:00-10:00larrytag:knowing.net,2009-01-16:/posts/2009/01/star-hopping-goto-scope-vi-ide-thinking-about-payoff-curves/<p>I have a brand new 4" refractor which is my first "real" telescope (as a kid I had a let's-say-3" Newtonian, your typical shopping-mall refractor, and I've had some decent binos and spotting scopes since then).</p>
<p>The world of amateur astronomy has vastly changed since I was a kid. Alan …</p><p>I have a brand new 4" refractor which is my first "real" telescope (as a kid I had a let's-say-3" Newtonian, your typical shopping-mall refractor, and I've had some decent binos and spotting scopes since then).</p>
<p>The world of amateur astronomy has vastly changed since I was a kid. Alan Zeichick called something "the greatest innovation since the big dob, the go to scope, and the SC." All innovations which post-date my childhood! (Well, I think Schmidt-Cassegrain's were hitting the scene?) One of the options when buying a telescope today is a "go to" computer which knows the orientation of your tripod and your latitude. You type in what object you want to look at (Jupiter, the Andromeda Galaxy, the Wild Duck star cluster), move your scope around until the numbers on the computer read "0" and then look through the eyepiece ("Wow, there it is.")</p>
<p>Such computers aren't cheap and when researching your purchase, you'll get a lot of "computers are all well and good, but ultimately, star-hopping is both effective and satisfying." So, like me, you might decide to kick it old school, especially if, like me, you think "Gee, I know <em>several</em> constellations and can pick out Andromeda if I can see Cassiopeia."</p>
<p>What I've concluded, after two nights of abject failure, is that (a) I'm an idiot and (b) star hopping is like programming without an IDE. The "I'm an idiot" aspect is simply reinforcing data that's been accumulating for some time, so let's skip over that.</p>
<p>It's very difficult for an expert to anticipate what will baffle a newcomer. In the case of star-hopping, an expert won't blink at "look 2 degrees SW of a hook-shaped formation found 5 degrees along a line defined by Alpha and Theta." In the case of programming, an expert doesn't need a tree of user-defined objects and methods taking up screen space. And the challenge to the expert is compounded because it's not <em>remembering</em> what was hard that's the problem ? "Go To" scopes have only come along recently, <a href="https://community.idera.com/developer-tools/b/blog">IDEs have been around for 25 years</a> but it's only been about a decade since I think they surpassed the command-line (the breakthrough, I think, was the refactoring IDE). For the cost of a "go to" mount, I could get two or three high-quality eyepieces. For the cost of an IDE (even if it's just the time spent mastering an OS IDE) you could learn a different language or library. As a newcomer, you face two different payoff curves (n.b.: <em>not</em> the same as a learning curve!): <img alt="IDE vs. Command-Line" height="322" src="http://www.knowing.net/content/binary/WindowsLiveWriter/StarhoppingGotoScopeviIDE.Thinkingabout_BFBD/IDE%20vs.%20Command-Line_thumb.png" title="IDE vs. Command-Line" width="409"></p>
<p>The expert might say "Oh, eventually, you'll appreciate the work of the slower, more 'full-bodied' learning curve:"</p>
<p><img alt="expert satisfaction" height="243" src="http://www.knowing.net/content/binary/WindowsLiveWriter/StarhoppingGotoScopeviIDE.Thinkingabout_BFBD/expert%20satisfaction_thumb_1.png" title="expert satisfaction" width="416"></p>
<p>But even if you accept that curve, the issue of what to do is still difficult. You actually have to integrate under the curve:</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/StarhoppingGotoScopeviIDE.Thinkingabout_BFBD/integrate_4.png"><img alt="integrate" height="314" src="http://www.knowing.net/content/binary/WindowsLiveWriter/StarhoppingGotoScopeviIDE.Thinkingabout_BFBD/integrate_thumb_1.png" title="integrate" width="468"></a></p>
<p>There's some period of time when the "easy" approach is more satisfactory. During that time, you are accumulating a surplus of satisfaction (the area 'A' in the above illustration). Ultimately, the "hard" approach may provide more satisfaction at a given moment, but there's still a "catch up" period ('B') where your <em>total</em> satisfaction is still less than the total satisfaction with the "easy" approach (in a sense, you have to pay off a debt you've incurred). It's only when you get to 'C' that the slower, harder approach really pays off.</p>
<p>To a professional, who moved through the 'A' and 'B' periods at a young age, 'C' dominates the curve and it seems natural to say "Slow and steady wins the race." But <strong>if you don't spend a long time in 'C' then the "easy" route is ultimately smarter.</strong> And, relevant to software developers, you are unlikely to be writing code at 65. If you're a developer in the first world, you're unlikely to be writing code at 45 or maybe even 35. The salary pressure from the \<a href="http://en.wikipedia.org/wiki/BRIC"" target="_blank" rel="noopener noreferrer">BRIC economies is too great. The finish line is closer than you think.</p>
<p>As to "go to" mount I still don't know what to do.</p>Awesome pilot, no miracle2009-01-15T22:19:00-10:002009-01-15T22:19:00-10:00larrytag:knowing.net,2009-01-15:/posts/2009/01/awesome-pilot-no-miracle/<p>I'm as thankful as anyone that everyone got off the plane that went down in the Hudson, but I'm kind of ticked that all the news sites are calling it "The Miracle on the Hudson," or "Miracle Landing." That cheapens the tens of thousands of hours the pilot spent flying …</p><p>I'm as thankful as anyone that everyone got off the plane that went down in the Hudson, but I'm kind of ticked that all the news sites are calling it "The Miracle on the Hudson," or "Miracle Landing." That cheapens the tens of thousands of hours the pilot spent flying, the Lord-knows-how-many training and simulation sessions he's been through, and his general awesomeness. (I don't know much about aviation, but I know that water-ditching an A320 with both engines out and only 3,000' of altitude to start with is not easy.)</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/Awesomepilotnomiracle_478/pilot_2.jpg"><img alt="pilot" height="354" src="http://www.knowing.net/content/binary/WindowsLiveWriter/Awesomepilotnomiracle_478/pilot_thumb.jpg" title="pilot" width="264"></a></p>
<p>Chelsea "Kick-Ass" Sullenberger (the Third). </p>2009: Slow Boot2009-01-13T09:58:00-10:002009-01-13T09:58:00-10:00larrytag:knowing.net,2009-01-13:/posts/2009/01/2009-slow-boot/<p>For much of the past week, I've been doing a bunch of accounting stuff. I am incorporating (as "Faster Programmer LLC" ? as in "Faster can mean both higher productivity and higher performance," but actually as in "Faster, Programmer! Code! Code!") and trying to get monetary things (new bank account, credit …</p><p>For much of the past week, I've been doing a bunch of accounting stuff. I am incorporating (as "Faster Programmer LLC" ? as in "Faster can mean both higher productivity and higher performance," but actually as in "Faster, Programmer! Code! Code!") and trying to get monetary things (new bank account, credit card, tax situation) as clean as possible.</p>
<p>Unfortunately, that's meant not getting any work done for either my clients, the Jolt Awards (in full swing, although I have to wonder if this is not the last time), or my recreational programming.</p>
<p>Meanwhile, I got myself a present for my recently-passed 45th birthday, a <a href="https://www.stellarvue.com/stellarvue-svx102t-r-premier-apochromatic-triplet-refractor/">StellarVue 102ED</a>. I got first light through it last night (not a very dark night, but M42 was spectacular, of course), an <a href="https://www2.keck.hawaii.edu/whac/home.html">astronomy club</a> meeting is tonight, and then on Thursday there's a star party up on Mauna Kea (How cool is <em>that</em>? Assuming, that is, by "cool" you mean "geeky." Which I do). All of which means sleep deprivation.</p>A Word To Big Island Bloggers2009-01-05T20:09:00-10:002009-01-05T20:09:00-10:00larrytag:knowing.net,2009-01-05:/posts/2009/01/a-word-to-big-island-bloggers/<p>I've been writing this blog since 2002, which I'm fairly sure makes me the graybeard among the Big Island's small blogging family. For what it's worth, I also was a magazine editor for 7 years (and won a few awards). So I'm going to shake my finger at the trio …</p><p>I've been writing this blog since 2002, which I'm fairly sure makes me the graybeard among the Big Island's small blogging family. For what it's worth, I also was a magazine editor for 7 years (and won a few awards). So I'm going to shake my finger at the trio of Big Island bloggers who have been spending the past week time criticizing each other: Stop it right now. Don't make me stop this car!</p>
<p>D: You had every right to take those photographs in a public place and you had every right to write what you did. Don't let anyone tell you differently.</p>
<p>T: As a journalist yourself, you should know to be extra careful about labeling someone's writing as "irresponsible" on the basis of a differing account coming from a government official.</p>
<p>A: Don't get caught up between D&T.</p>Lance Armstrong Sighting2009-01-05T13:38:00-10:002009-01-05T13:38:00-10:00larrytag:knowing.net,2009-01-05:/posts/2009/01/lance-armstrong-sighting/<p><img alt="DSC_1737" height="363" src="http://www.knowing.net/content/binary/WindowsLiveWriter/LanceArmstrongSighting_DBD9/DSC_1737_3.jpg" title="DSC_1737" width="438"></p>
<p>Look who's getting in shape on the Big Island of Hawai'i! Kick ass?</p>ResolverOne: Best Spreadsheet Wins $17K2008-12-18T08:02:00-10:002008-12-18T08:02:00-10:00larrytag:knowing.net,2008-12-18:/posts/2008/12/resolverone-best-spreadsheet-wins-17k/<p>ResolverOne is one of my favorite applications in the past few years. It's a spreadsheet powered by IronPython. Spreadsheets are among the most powerful intellectual tools ever developed: if you can solve your problem with a spreadsheet, a spreadsheet is probably the fastest way to solve it. Yet there are …</p><p>ResolverOne is one of my favorite applications in the past few years. It's a spreadsheet powered by IronPython. Spreadsheets are among the most powerful intellectual tools ever developed: if you can solve your problem with a spreadsheet, a spreadsheet is probably the fastest way to solve it. Yet there are certain things that spreadsheets don't do well: recursion, branching, etc.</p>
<p>Python is a clean, modern programming language with a large and still-growing community. It's a language which works well for writing 10 lines of code or 1,000 lines of code. (ResolverOne itself is more than 100K of Python, so I guess it works at that level, too!)</p>
<p>From now (Dec 2008) to May 2009, [Resolver Systems is giving away \<span class="math">\(2K per month to the best spreadsheet built in ResolverOne](https://www.resolversystems.com/). The best spreadsheet received during the competition gets the grand prize of an additional \\)</span>15K.</p>
<p>Personally, it seems to me that the great advantage of the spreadsheet paradigm is a very screen-dense way of visualizing a large amount of data and very easy access to input parameters. Meanwhile, Python can be used to create arbitrarily-complex core algorithms. The combination seems ideal for tinkering in areas such as machine learning and simulation.</p>
<p>I try to do some recreational programming every year between Christmas and New Year. I'm not sure I'll have the time this year, but if I do, I may well use ResolverOne and Python to do something.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Inference for .NET: Another Option for Python-Based Inference2008-12-14T09:38:00-10:002008-12-14T09:38:00-10:00larrytag:knowing.net,2008-12-14:/posts/2008/12/inference-for-net-another-option-for-python-based-inference/<p>Inference for .NET is an alternative to Infer.NET & IronPython.</p>
<p>Bonus: Inference for .NET integrates with ResolverOne.</p>IronPython 2.0 & Microsoft Research Infer.NET 2.22008-12-12T17:23:00-10:002008-12-12T17:23:00-10:00larrytag:knowing.net,2008-12-12:/posts/2008/12/ironpython-20-microsoft-research-infernet-22/<div class="highlight"><pre><span></span><code> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">clr</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"c:</span><span class="se">\\</span><span class="s2">program files</span><span class="se">\\</span><span class="s2">Microsoft Research</span><span class="se">\\</span><span class="s2">Infer.NET 2.2</span><span class="se">\\</span><span class="s2">bin</span><span class="se">\\</span><span class="s2">debug"</span><span class="p">)</span> <span class="n">clr</span><span class="o">.</span><span class="n">AddReferenceToFile</span><span class="p">(</span><span class="s2">"Infer.Compiler.dll"</span><span class="p">)</span> <span class="n">clr</span><span class="o">.</span><span class="n">AddReferenceToFile</span><span class="p">(</span><span class="s2">"Infer.Runtime.dll"</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">MicrosoftResearch.Infer</span> <span class="kn">import</span> <span class="o">*</span> <span class="kn">from</span> <span class="nn">MicrosoftResearch.Infer.Models</span> <span class="kn">import</span> <span class="o">*</span> <span class="kn">from</span> <span class="nn">MicrosoftResearch.Infer.Distributions</span> <span class="kn">import</span> <span class="o">*</span> <span class="n">firstCoin</span> <span class="o">=</span> <span class="n">Variable</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span><span class="o">.</span><span class="n">Bernoulli</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span> <span class="n">secondCoin</span> <span class="o">=</span> <span class="n">Variable …</span></code></pre></div><div class="highlight"><pre><span></span><code> <span class="kn">import</span> <span class="nn">sys</span> <span class="kn">import</span> <span class="nn">clr</span> <span class="n">sys</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"c:</span><span class="se">\\</span><span class="s2">program files</span><span class="se">\\</span><span class="s2">Microsoft Research</span><span class="se">\\</span><span class="s2">Infer.NET 2.2</span><span class="se">\\</span><span class="s2">bin</span><span class="se">\\</span><span class="s2">debug"</span><span class="p">)</span> <span class="n">clr</span><span class="o">.</span><span class="n">AddReferenceToFile</span><span class="p">(</span><span class="s2">"Infer.Compiler.dll"</span><span class="p">)</span> <span class="n">clr</span><span class="o">.</span><span class="n">AddReferenceToFile</span><span class="p">(</span><span class="s2">"Infer.Runtime.dll"</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">MicrosoftResearch.Infer</span> <span class="kn">import</span> <span class="o">*</span> <span class="kn">from</span> <span class="nn">MicrosoftResearch.Infer.Models</span> <span class="kn">import</span> <span class="o">*</span> <span class="kn">from</span> <span class="nn">MicrosoftResearch.Infer.Distributions</span> <span class="kn">import</span> <span class="o">*</span> <span class="n">firstCoin</span> <span class="o">=</span> <span class="n">Variable</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span><span class="o">.</span><span class="n">Bernoulli</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span> <span class="n">secondCoin</span> <span class="o">=</span> <span class="n">Variable</span><span class="p">[</span><span class="nb">bool</span><span class="p">]</span><span class="o">.</span><span class="n">Bernoulli</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span> <span class="n">bothHeads</span> <span class="o">=</span> <span class="n">firstCoin</span> <span class="o">&</span> <span class="n">secondCoin</span> <span class="n">ie</span> <span class="o">=</span> <span class="n">InferenceEngine</span><span class="p">()</span> <span class="nb">print</span> <span class="n">ie</span><span class="o">.</span><span class="n">Infer</span><span class="p">(</span><span class="n">bothHeads</span><span class="p">)</span> <span class="o">--></span> <span class="n">c</span><span class="p">:</span>\<span class="n">Users</span>\<span class="n">Larry</span> <span class="n">O</span><span class="s1">'Brien\Documents\Infer.NET 2.2>ipy InferNetTest1.py Compiling model...done. Initialising...done. Iterating: .........|.........|.........|.........|.........| 50 Bernoulli(0.25)</span>
</code></pre></div>
<p><strong>Sweet</strong></p>Cascaval et al.'s skepticism on transaction memory2008-11-25T11:43:00-10:002008-11-25T11:43:00-10:00larrytag:knowing.net,2008-11-25:/posts/2008/11/cascaval-et-als-skepticism-on-transaction-memory/<p>Alexa Weber-Morales of Parallelaware asked me my views on "Software Transactional Memory: Why Is It Only A Research Toy?" given my recent column predicting that the stars are aligning for STM as the model of choice for the manycore era. (Incidentally, if they ever bring back Schoolhouse Rock, my suggested …</p><p>Alexa Weber-Morales of Parallelaware asked me my views on "Software Transactional Memory: Why Is It Only A Research Toy?" given my recent column predicting that the stars are aligning for STM as the model of choice for the manycore era. (Incidentally, if they ever bring back Schoolhouse Rock, my suggested title for that column was "Transaction Faction Gaining Traction." The song practically writes itself!)</p>
<p>The Cascaval article is very interesting. Although it's the most pessimistic thing I've seen about STM, I tend to give lots of credence to people who say "We tried this for two years and it failed." On the other hand, the core of their complaints are "muddled semantics" and performance issues, both of which are fast-moving areas.</p>
<p>The Harris et al. paper addresses several areas of semantics, including exceptions, and it would be fascinating to hear Cascaval et al.'s reaction to that paper (and vice versa).</p>
<p>Performance... there's not a doubt in my mind that TM will only be practical with some level of hardware support. I'll go further and say that there's not a doubt in my mind that whatever concurrent programming model succeeds will require some level of hardware support. I don't think that's news. The challenge is making sure that you build hardware that's consistent, which fundamentally boils right back to the semantic issue. Without a calculus for this stuff, the hardware guys are flying a little blind.</p>
<p>So I look at these two articles and think that it's a little bit of Cascaval saying "the glass is mostly empty" and the Harris article filling up the cup a little and saying "looks like the cup is pretty full."</p>This Glamorous Life of Ours2008-09-19T07:42:00-10:002008-09-19T07:42:00-10:00larrytag:knowing.net,2008-09-19:/posts/2008/09/this-glamorous-life-of-ours/<h2>The glamorous life of a software engineering consultant, Pt. 1</h2>
<p>Larry O'Brien says: (7:46:07 AM)</p>
<p>I see you're pushing testing and *scribble* out of 1.3.</p>
<p>Client says: (7:46:23 AM)</p>
<p>we need to move forward</p>
<p>Larry O'Brien says: (7:46:26 AM)</p>
<p>Well.... Not really....</p>
<p>Client …</p><h2>The glamorous life of a software engineering consultant, Pt. 1</h2>
<p>Larry O'Brien says: (7:46:07 AM)</p>
<p>I see you're pushing testing and *scribble* out of 1.3.</p>
<p>Client says: (7:46:23 AM)</p>
<p>we need to move forward</p>
<p>Larry O'Brien says: (7:46:26 AM)</p>
<p>Well.... Not really....</p>
<p>Client says: (7:46:29 AM)</p>
<p>testing needs to wait until we get it done</p>
<p>Client says: (7:46:33 AM)</p>
<p>there is alot of things to fix</p>
<p>Client says: (7:46:42 AM)</p>
<p>it doesnt make sense to do test cases when it doesnt work</p>
<p>Larry O'Brien says: (7:46:51 AM)</p>
<p>Just for the record: I disagree with that.</p>
<p>Larry O'Brien says: (7:46:56 AM)</p>
<p>But it's your project...</p>
<p>Client says: (7:47:02 AM)</p>
<p>ok</p>
<p>Client says: (7:47:08 AM)</p>
<p>I have to get it done this week Larry</p>
<p>Client says: (7:47:14 AM)</p>
<p>I cant do that with *Person1* writting tests</p>
<p>Client says: (7:47:25 AM)</p>
<p>fuck the automated test</p>
<p>Larry O'Brien says: (7:47:27 AM)</p>
<p>I understand your perspective</p>
<p>Client says: (7:47:36 AM)</p>
<p>Once I meet my deadline</p>
<p>Client says: (7:47:41 AM)</p>
<p>I will move back to tests</p>
<h2>The glamorous life of a software engineering consultant, Pt. 2 (I swear, 1.5 hours later...)</h2>
<p>Client says: (9:29:19 AM)</p>
<p>Larry question please</p>
<p>Client says: (9:29:42 AM)</p>
<p>*scribble*</p>
<p>arent we supposed to be showing *scribble*?</p>
<p>Larry O'Brien says: (9:30:21 AM)</p>
<p>Yes</p>
<p>Larry O'Brien says: (9:30:26 AM)</p>
<p>*dammit*</p>
<p>Larry O'Brien says: (9:32:29 AM)</p>
<p>i do not knw why *scribble*</p>
<p>Larry O'Brien says: (9:32:59 AM)</p>
<p>OK, I think I see what the problem is...</p>
<p>Larry O'Brien says: (9:33:13 AM)</p>
<p>I _think_ the problem is that we're seeing this *scribble*</p>
<p>Client says: (9:33:35 AM)</p>
<p>yes but didnt we *scribble* it to the *scribble* also?</p>
<p>Client says: (9:33:46 AM)</p>
<p>we used to show them in the *scribble*</p>
<p>Larry O'Brien says: (9:34:52 AM)</p>
<p>OK, so the *scribble scribble scribble*</p>
<p>Larry O'Brien says: (9:35:59 AM)</p>
<p>So what I'm saying is that to show *scribble* I _think_ in the *scribble* there should be *scribble*</p>
<p>Larry O'Brien says: (9:36:23 AM)</p>
<p>I don't KNOW this is the problem, but I THINK this is the issue</p>
<p>Client says: (9:40:37 AM)</p>
<p>ok I am going to submit this to jira also</p>
<p>Client says: (9:40:43 AM)</p>
<p>I hate finding this things</p>
<p>Client says: (9:40:45 AM)</p>
<p>so late on the game</p>
<p>Larry O'Brien says: (9:41:14 AM)</p>
<p>not to get antagonistic about this issue, but in my opinion, this is why testing is important early, not late</p>
<p>Larry O'Brien says: (9:41:34 AM)</p>
<p>this is why I delaying test development is not what I recommend</p>
<p>Client says: (9:42:28 AM)</p>
<p>sometimes each developer should see this things</p>
<p>Client says: (9:42:32 AM)</p>
<p>I believe in testing</p>
<p>Client says: (9:42:42 AM)</p>
<p>but also that each developer should do things right the first time</p>
<p>Client says: (9:42:47 AM)</p>
<p>I am so sick of findiing problems</p>
<p>Larry O'Brien says: (9:44:02 AM)</p>
<p>I don't want to get into an argument.</p>Risk factors rewritten as standard practices: twice the fun2008-09-19T07:14:00-10:002008-09-19T07:14:00-10:00larrytag:knowing.net,2008-09-19:/posts/2008/09/risk-factors-rewritten-as-standard-practices-twice-the-fun/<p>Sez Who? has taken the offshore risk profile and <a href="http://qahatesyou.com/wordpress/2008/09/risk-factors-standard-practices-some-places-its-all-the-same/">rewritten them as recommendations</a>. Sadly, his piece is apparently in use at more companies than mine. ></p>Risk Factors for Offshore-Outsourced Development Projects2008-08-29T11:20:00-10:002008-08-29T11:20:00-10:00larrytag:knowing.net,2008-08-29:/posts/2008/08/risk-factors-for-offshore-outsourced-development-projects/<p>The June 2008 CACM contains the article "<a href="https://dl.acm.org/errorpgs/404.html">A Risk Profile of Offshore-Outsourced Development Projects</a>"</p>
<p>Since this is a common profile, I thought I'd reproduce the Top 10 Risks. Some of these are universal across all project profiles ("Lack of top management commitment"), but others are definitely more problematic for offshored …</p><p>The June 2008 CACM contains the article "<a href="https://dl.acm.org/errorpgs/404.html">A Risk Profile of Offshore-Outsourced Development Projects</a>"</p>
<p>Since this is a common profile, I thought I'd reproduce the Top 10 Risks. Some of these are universal across all project profiles ("Lack of top management commitment"), but others are definitely more problematic for offshored projects. I've highlighted those I think are notably different. All of these should be addressed in your project planning...</p>
<ol>
<li>Lack of top management commitment</li>
<li>Original set of requirements is miscommunicated</li>
<li>Language barriers in project communication</li>
<li><strong>Inadequate user involvement</strong></li>
<li><strong>Lack of offshore project management know-how by client</strong></li>
<li>Failure to manage end-user expectations</li>
<li><strong>Poor change controls</strong></li>
<li>Lack of business known-how by offshore teams</li>
<li><strong>Lack of required technical know-how by offshore team</strong></li>
<li>Failure to consider all costs</li>
</ol>
<p>That's not to say that I think the ones I did not highlight are unimportant, it's just that I think you can run into those issues onshore (if you replace "language barriers" with "poor communication skills").</p>
<p>Inadequate user involvement and poor change controls are, I think, more acute risks with offshore-outsourced projects because there's a certain amount of "out of site, out of mind" to these projects. It's not like people are hearing programmers talk around the watercooler or at lunch; offshore projects have a greater risk of 'going dark' for long periods of time. Similarly, with different working hours, different holiday schedules, etc., I think it's considerably more common for offshore work to get off the change-control rails. You really need to do daily check-ins with offshore teams, just like you do with local teams. It's harder and slower than a standup meeting, but I think it's definitely a necessary part of the daily routine.</p>Throwing over Flash for Silverlight...Wise?2008-08-27T20:26:00-10:002008-08-27T20:26:00-10:00larrytag:knowing.net,2008-08-27:/posts/2008/08/throwing-over-flash-for-silverlightwise/<p>I have a client who needs a Web-page component that does some photo compositing. Nothing super-fancy, but it needs to be professional, obey some business rules, and do some things dynamically based on static data.</p>
<p>The prototype is in Flash, but is filled with hideous programming -- magic numbers, a big …</p><p>I have a client who needs a Web-page component that does some photo compositing. Nothing super-fancy, but it needs to be professional, obey some business rules, and do some things dynamically based on static data.</p>
<p>The prototype is in Flash, but is filled with hideous programming -- magic numbers, a big monolithic function, etc. Today, the client said that they would be willing to accept the installed-base problem of Silverlight if I recommended it.</p>
<p>Well... It seems to me: Flash's programming story remains, if not terrible, nothing to write home about. Silverlight's programming story is pretty stellar -- a vast programming base from which I can draw the people to do the business rules and dynamic stuff (i.e., the programming). Flash may be beloved by designers, but for photo-compositing, I don't see a great advantage over WPF / Silverlight.</p>
<p>Am I wrong?</p>
<p>One way or the other, if you're a great Flash programmer or have some experience in Silverlight, I'm hiring... Drop me a line direct at lobrien -at- knowing -dot- net.</p>
<p>[Update:]{style="color:red"} "Not fair to compare poorly written Flash to green-field Silverlight" was one comment, but I am not comparing the <em>code</em>, I am comparing the code-creation possibilities (and, to some extent, the ecosystem. I think I want people who see the task as programming, not people who see the task as a design issue). "Try Flex," came a message from Adobe, which is certainly fair -- we have a prototype in Flash, Flex has a better programming story than Flash-the-development-environment, Flash is universal. Still looking for developers, but now I'll throw "Flex developers" into the mix as well...</p>RSS/ATOM Feeds -> Kindle2008-08-26T10:59:00-10:002008-08-26T10:59:00-10:00larrytag:knowing.net,2008-08-26:/posts/2008/08/rssatom-feeds-kindle/<p>Daniel Choi has created a Ruby gem that consolidates feeds into a Kindle-readable format! Say aloha to paying \$2 to subscribe to a single blog! <a href="http://danielchoi.com/software/kindle-feeds.html">link</a></p>Some Aspects of the Midori Story from SD Times2008-08-04T10:03:00-10:002008-08-04T10:03:00-10:00larrytag:knowing.net,2008-08-04:/posts/2008/08/some-aspects-of-the-midori-story-from-sd-times/<p>The Midori coverage from SD Times has gone mainstream, even making the front page of <a href="http://news.bbc.co.uk/2/hi/technology/7540282.stm">BBC World News</a> this morning. Since I reviewed the technical portions of the documents for the story, I thought I might clarify some things. First, though:</p>
<ul>
<li>I have no idea who wrote the document</li>
<li>I …</li></ul><p>The Midori coverage from SD Times has gone mainstream, even making the front page of <a href="http://news.bbc.co.uk/2/hi/technology/7540282.stm">BBC World News</a> this morning. Since I reviewed the technical portions of the documents for the story, I thought I might clarify some things. First, though:</p>
<ul>
<li>I have no idea who wrote the document</li>
<li>I have no idea how SD Times came into possession of the document</li>
<li>I have no idea when the document was written</li>
</ul>
<p>For all I know, what I reviewed <em>might</em> have been the musings of some 14-year-old in Novosobirsk. A very technical 14-year-old, but who knows?</p>
<p>Substantively, what I can say is that the documents were quite technical and were quite provocative -- they weren't a retrospective on Singularity that we conflated into a discussion of a future OS. The technicality of the documents actually gave me some pause: the unguarded tone and technical depth made me think "this is a long way from being a press release."</p>
<p><em>Taking the documents at face value,</em> they laid out a very aggressive, very ambitious, scenario for Midori. By "aggressive" and "ambitious," what I mean is that the author really grabs the bull by the horns and addresses concurrency and legacy head-on. Although there's a lot of talk in the analysis about "how is this going to work with legacy Windows" what's interesting to me, personally, is that the technical path being discussed is not a mealy-mouthed "we have to acknowledge the concurrent era" but rather is a full-throated "we have to reinvent what we talk about when we talk about OS."</p>
<p>What I read was the <em>type</em> of stance that some people don't think happens at Microsoft. I was impressed. ("It's all about concurrency": Larry is impressed. What a surprise.) Was it a deliberately leaked trial balloon? I dunno'.</p>Crossword App for iPhone Making $2K / day2008-08-02T07:44:00-10:002008-08-02T07:44:00-10:00larrytag:knowing.net,2008-08-02:/posts/2008/08/crossword-app-for-iphone-making-2k-day/<p>Via <a href="https://twitter.com/MikeG1">Mike Gunderloy</a> comes this link to the claim that a crossword puzzle app for the iPhone is bringing in the developer \$2K per day.</p>
<p>A forthcoming column of mine observes that while Microsoft is still the absolute king of corporate development, Apple has become increasingly appealing for development of …</p><p>Via <a href="https://twitter.com/MikeG1">Mike Gunderloy</a> comes this link to the claim that a crossword puzzle app for the iPhone is bringing in the developer \$2K per day.</p>
<p>A forthcoming column of mine observes that while Microsoft is still the absolute king of corporate development, Apple has become increasingly appealing for development of <em>retail</em> software.</p>Cobbler's Children2008-08-01T11:29:00-10:002008-08-01T11:29:00-10:00larrytag:knowing.net,2008-08-01:/posts/2008/08/cobblers-children/<p>I am aware of the irony that I talk a lot about software quality and the infrastructure of this blog is... well, I think it's up more often than Twitter! ...</p>
<p>But, yes, I'm aware. The cobbler's children go barefoot, and all that...</p>"Kids today": Is programming quality going up or going down?2008-07-30T11:56:00-10:002008-07-30T11:56:00-10:00larrytag:knowing.net,2008-07-30:/posts/2008/07/kids-today-is-programming-quality-going-up-or-going-down/<p>Not only am I as old as dirt, I started programming professionally when I was 16. So this may just be me being crotchety. But I <em>perceive</em> that the average quality of the <em>code</em> in today's software projects is going down.</p>
<p>That doesn't mean that software projects today don't have …</p><p>Not only am I as old as dirt, I started programming professionally when I was 16. So this may just be me being crotchety. But I <em>perceive</em> that the average quality of the <em>code</em> in today's software projects is going down.</p>
<p>That doesn't mean that software projects today don't have vastly more scope and power than they did in the 1980s: they do. I'm just saying that when I engage with clients nowadays, I brace myself to see "FORTRAN 77 written in <em>X</em>": huge monolithic functions with essentially-global variables, deeply embedded loops, etc. Often, X is a tag-based Web language (PHP, CF, ASP, etc.) but I'm not talking about "tag soup" per se. It's not the particulars of markup and code that bother me, although I do think:</p>
<ul>
<li>Tag-based Web languages facilitate imperative, drop-through programming</li>
<li>Tag-based Web languages are now a common early step on the "path to professional programming"</li>
<li>Therefore, tag-based Web languages aren't blameless</li>
</ul>
<p>Although X is often tag-based, I perceive an increase in FORTRAN 77 written in the more mainstream object-oriented languages such as C# and Java. (P.S. Please note that I'm picking on FORTRAN 77; I'm aware that Fortran (no caps!) has evolved into a powerful modern language.)</p>
<p>What do you think: am I just being crotchety or are "kids today" increasing the probability of experiencing really poor code? Take my self-selected, totally unscientific poll:</p>
<p><strong>Update:</strong> Guillaume Theorot makes the very fair point that kids "back in the day" probably produced crap, too. I know I did. And coding has always been a young person's job (while those who stay in SD <em>tend</em> to move into management). I would guess that the median age of a person whose job is writing code is 30 or less. So there's a lot of code out there written by people who are still in the first half-dozen years of their professional career. So maybe the phenomenon is just that I had the good fortune to have long periods of my career where I was dealing with people who were significantly more experienced. Hmmm... depressingly logical.</p>
<p><strong>Update 2:</strong> Implicit assumption -- FORTRAN 77 in X is not easier / faster to produce than modular code. It may seem to be for the first 100 lines, but these 1,000-line monoliths are inevitably fragile as heck and development has ground to a standstill.</p>Hiring Freelance Flash Programmer...2008-07-29T18:41:00-10:002008-07-29T18:41:00-10:00larrytag:knowing.net,2008-07-29:/posts/2008/07/hiring-freelance-flash-programmer/<p>I have a job that is probably about 120 hours total work for a good Flash programmer. By that, I mean I estimate that you could <em>probably</em> do it in about 30 hours, but if you can deliver in 120, everyone is happy.</p>
<p>The only caveat is that you need …</p><p>I have a job that is probably about 120 hours total work for a good Flash programmer. By that, I mean I estimate that you could <em>probably</em> do it in about 30 hours, but if you can deliver in 120, everyone is happy.</p>
<p>The only caveat is that you need to be able to write ActionScript that's not an offense to the profession of programming. I don't want to see scaling and positioning with magic numbers:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="k">var</span><span class="w"> </span><span class="n">FramePointDistance</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="n">Number</span><span class="p">(</span><span class="n">frame_Point</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span><span class="o">-</span><span class="n">Number</span><span class="p">(</span><span class="n">frame_Point</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">15</span><span class="p">)</span><span class="o">/</span><span class="mi">4</span><span class="p">;</span><span class="w"> </span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_xscale</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Math</span><span class="o">.</span><span class="n">floor</span><span class="p">((</span><span class="n">currentFramedistant</span><span class="o">/</span><span class="mi">146</span><span class="p">)</span><span class="o">*</span><span class="mi">100</span><span class="p">);</span><span class="w"> </span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_yscale</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Math</span><span class="o">.</span><span class="n">floor</span><span class="p">((</span><span class="n">currentFramedistant</span><span class="o">/</span><span class="mi">146</span><span class="p">)</span><span class="o">*</span><span class="mi">100</span><span class="p">);</span><span class="w"> </span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="p">(</span><span class="mi">210</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="p">(</span><span class="mi">210</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_width</span><span class="p">)</span><span class="o">/</span><span class="mi">2</span><span class="p">)</span><span class="w"> </span><span class="p">;</span><span class="w"> </span><span class="o">//</span><span class="n">showError</span><span class="p">(</span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_width</span><span class="w"> </span><span class="o">+</span><span class="s2">":"</span><span class="o">+</span><span class="n">currentFramedistant</span><span class="p">);</span><span class="w"> </span><span class="o">//</span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_x</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="p">(</span><span class="mi">140</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">pic</span><span class="o">.</span><span class="n">_width</span><span class="o">/</span><span class="mi">4</span><span class="p">)</span><span class="w"> </span><span class="p">;</span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_x</span><span class="w"> </span><span class="o">//</span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="p">(</span><span class="mi">130</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">Math</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">pic</span><span class="o">.</span><span class="n">_height</span><span class="o">/</span><span class="mf">1.5</span><span class="p">))</span><span class="w"> </span><span class="p">;</span><span class="o">//</span><span class="w"> </span><span class="n">_root</span><span class="o">.</span><span class="n">main</span><span class="o">.</span><span class="n">frameMC</span><span class="o">.</span><span class="n">_y</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="o">-</span><span class="p">(</span><span class="mi">127</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">Math</span><span class="o">.</span><span class="n">floor</span><span class="p">(</span><span class="n">Number</span><span class="p">(</span><span class="n">frame_Point</span><span class="p">[</span><span class="mi">1</span><span class="p">])))</span><span class="w"> </span><span class="p">;</span>
</code></pre></div>
<p>Drop me a line with salary requirement and availability at lobrien\@knowing.net</p>Wow, are program managers really that conservative?2008-07-24T16:23:00-10:002008-07-24T16:23:00-10:00larrytag:knowing.net,2008-07-24:/posts/2008/07/wow-are-program-managers-really-that-conservative/<p>I know that these little Zoho polls I'm running are totally unscientific, but they <em>are</em> interesting. Only thirteen people have voted on the question "Are corporate SD managers too risk averse or too eager?" but <em>every vote</em> has been "too risk averse."</p>
<p>I'm very surprised by that, because back when …</p><p>I know that these little Zoho polls I'm running are totally unscientific, but they <em>are</em> interesting. Only thirteen people have voted on the question "Are corporate SD managers too risk averse or too eager?" but <em>every vote</em> has been "too risk averse."</p>
<p>I'm very surprised by that, because back when I actually did real surveys (at Software Development and Computer Language magazines), managerial eagerness to embrace the latest shiny new toy came across as a real problem. That it's not seen that way by the first baker's dozen of self-selecting developers who happen to read my blog ... well, I just don't know how to take it.</p>Most Appreciated Rewards at Software Project Completion?2008-07-23T15:08:00-10:002008-07-23T15:08:00-10:00larrytag:knowing.net,2008-07-23:/posts/2008/07/most-appreciated-rewards-at-software-project-completion/<p>Here's a fun one to make up for all the dry process questions I've been asking: What rewards do you appreciate at software project completion? Money? Vacation? Time to learn?</p>
<p>(If you're reading in an aggregator, poll probably only visible if you jump to the site)</p>Are corporate program managers too risk-averse?2008-07-23T11:49:00-10:002008-07-23T11:49:00-10:00larrytag:knowing.net,2008-07-23:/posts/2008/07/are-corporate-program-managers-too-risk-averse/<p>I've been pondering this series of polls I've been running and wrote the following paragraph:</p>
<p>Standing in opposition for this need for high productivity is risk: risk of major delay, risk of a show-stopping technical incompatibility, risk of embracing a tool or technique that is reaching the end of its …</p><p>I've been pondering this series of polls I've been running and wrote the following paragraph:</p>
<p>Standing in opposition for this need for high productivity is risk: risk of major delay, risk of a show-stopping technical incompatibility, risk of embracing a tool or technique that is reaching the end of its evolution. These types of risks can have huge costs, and it's very reasonable for project managers to decide to be conservative, especially when it comes to critical infrastructure components.</p>
<p>But then I was stuck. In the next paragraph I'd like to be a little more prescriptive. But what do corporate program managers need to hear? Do they need to hear "Hey! Don't go chasing after yet another shiny new toy!" or do they need to hear "Go for it! You can take a little risk on the technology for a prototype or a one-off or an administrative automation tool"?</p>
<p>Of course, I'll try to make both points, but which should I emphasize?</p>
<p>Give your answer in the following poll (which, if you're reading in an aggregator, you probably can't see unless you follow it to my site):</p>How often do you run your complete unit-test suite?2008-07-22T09:04:00-10:002008-07-22T09:04:00-10:00larrytag:knowing.net,2008-07-22:/posts/2008/07/how-often-do-you-run-your-complete-unit-test-suite/<p>I've been finding myself hitting the "focused test" option in my IDE and have wondered if I should feel guilty. What do you think? Here's a poll asking "How often do you run the complete test suite?"</p>Tag Soup: Worse than Ugly Perfectly Valid2008-07-21T14:49:00-10:002008-07-21T14:49:00-10:00larrytag:knowing.net,2008-07-21:/posts/2008/07/tag-soup-strikeworse-than-uglystrike-perfectly-valid/<p>Jeff "Coding Horror" Atwood has fingered a particular sore spot for me in <a href="https://blog.codinghorror.com/web-development-as-tag-soup/">Web Development as Tag Soup</a>:</p>
<p>"Tag soup" is his name for the ~~spaghetti~~perfectly valid stuff that inevitably occurs in server-side, tag-based languages. A typically ~~hideous~~perfectly valid example he shows is:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="nt"><h1></span>Archive<span class="w"> </span>for<span class="w"> </span><span class="cp">{{</span> <span class="nv">year</span> <span class="cp">}}</span><span class="nt"></h1 …</span></code></pre></div><p>Jeff "Coding Horror" Atwood has fingered a particular sore spot for me in <a href="https://blog.codinghorror.com/web-development-as-tag-soup/">Web Development as Tag Soup</a>:</p>
<p>"Tag soup" is his name for the ~~spaghetti~~perfectly valid stuff that inevitably occurs in server-side, tag-based languages. A typically ~~hideous~~perfectly valid example he shows is:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="nt"><h1></span>Archive<span class="w"> </span>for<span class="w"> </span><span class="cp">{{</span> <span class="nv">year</span> <span class="cp">}}</span><span class="nt"></h1></span><span class="w"> </span><span class="cp">{%</span> <span class="k">for</span> <span class="nv">date</span> <span class="k">in</span> <span class="nv">days</span> <span class="cp">%}</span><span class="w"> </span><span class="cp">{%</span> <span class="k">ifchanged</span> <span class="cp">%}</span><span class="nt"><h3></span><span class="cp">{{</span> <span class="nv">date</span><span class="o">|</span><span class="nf">date</span><span class="s2">:"F"</span> <span class="cp">}}</span><span class="nt"></h3></span><span class="cp">{%</span> <span class="k">endifchanged</span> <span class="cp">%}</span><span class="w"> </span><span class="nt"><a</span><span class="w"> </span><span class="na">href=</span><span class="s">"http://www.codinghorror.com/blog/archives/%7B%7B%20date%7Cdate:"</span><span class="err">m/d"|lower</span><span class="w"> </span><span class="err">}}/"</span><span class="nt">></span><span class="cp">{{</span> <span class="nv">date</span><span class="o">|</span><span class="nf">date</span><span class="s2">:"j"</span> <span class="cp">}}</span><span class="nt"></a></span><span class="w"> </span><span class="cp">{%</span> <span class="k">endfor</span> <span class="cp">%}</span>
</code></pre></div>
<p>Which blithely marries presentation (HTML), control (for loop), and domain logic (the ifchanged and link).</p>
<p>~~Tag soup is a big deal, and not just for aesthetic reasons....~~</p>
<p>I started to write a fairly extensive post explaining why it was a big deal to combine presentation, control, and logic, when I happened to remember that, while it's out of fashion, there's a perfectly valid architectural pattern that combines them.</p>
<p>The <a href="https://en.wikipedia.org/wiki/Presentation-abstraction-control">Presentation-Abstraction-Control architectural pattern</a> stands in contrast to the more popular Model-View-Controller and related patterns. Where MVC could be said to embody the theme of "separation of concerns," PAC could be said to have the theme "Object, know thyself!" In PAC, an object knows everything there is to know about itself: it's data, it's behavior, and it's presentation/UI. If that immediately sounds unwieldy, let me reassure you that PAC emphasizes object graphs and hierarchies, so lots of presentation stuff is deferred to child objects.</p>
<p>For instance, the "tag soup" above might be a perfectly reasonable result of a call to a function <strong>Archive.renderChangedArticles()</strong> which, in turn, might be called from the <strong>renderArchivePage()</strong> function of the <strong>Blog</strong> object. While PAC may seem unusual for user-interfaces, it's similar to a common way of writing a custom XML serializer (that is, you define a <strong>Node toXml(Document doc)</strong> function on all your classes and let objects write what they know and defer the rest to their children objects).</p>
<p>The Visitor pattern or monkey-patching are alternatives to the direct writing of such functions inside a class. But still, the idea of <strong>not</strong> separating the concerns of rendering, control, and domain logic, is essentially "PAC"-ish. You can find support for this type of approach <strong>somewhere</strong>in most tag-based libraries. But, of course, it's not about what's possible, it's about what is facilitated.</p>
<p>Do any tag-based languages or tools <strong>facilitate</strong> the PAC approach? Not that I know of. It would have to be a tool that looked "more" like an IDE (with all those tools for navigating objects and functions) than a design surface (since <strong>most</strong> rendering definitions would not be associated with the object that defines the \<html> root element).</p>
<p>Instead, we are pained by the output of tools that facilitate the cutting-and-pasting of tags to create an enormous drop-through imperative page (I'm looking at you, Dreamweaver!)</p>Best Practices During Software Project Construction?2008-07-20T09:15:00-10:002008-07-20T09:15:00-10:00larrytag:knowing.net,2008-07-20:/posts/2008/07/best-practices-during-software-project-construction/<p>Along the lines of my recent poll on practices during project initialization, here's a poll on some common practices used during software development construction. Which of these have you found to be important for success? What have I missed?</p>Developer Interest in the iPhone, Android, and Symbian2008-07-19T11:39:00-10:002008-07-19T11:39:00-10:00larrytag:knowing.net,2008-07-19:/posts/2008/07/developer-interest-in-the-iphone-android-and-symbian/<p>ORA would <a href="http://radar.oreilly.com/2008/07/interest-in-the-iphone-android.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+oreilly%2Fradar%2Fatom+%28O%27Reilly+Radar%29">have us believe that developer interest in the iPhone</a> lags behind developer interest in Android or Symbian. I am skeptical</p>
<p><img alt="pathint" height="213" src="http://radar.oreilly.com/iphone1-thumb-625x333.jpg" title="iphone1.jpg" width="400"></p>
<p>(Via <a href="http://radar.oreilly.com/">O'Reilly Radar</a>.)</p>Cassette of Apple I BASIC becomes MP3 becomes CoreDump2008-07-19T11:35:00-10:002008-07-19T11:35:00-10:00larrytag:knowing.net,2008-07-19:/posts/2008/07/cassette-of-apple-i-basic-becomes-mp3-becomes-coredump/<p>What's especially amusing about <a href="https://www.pagetable.com/%3fp%3d32/"></a> recovery of Apple I's BASIC is that it was done via an MP3 file, which, as you know, is a <em>lossy</em> compression scheme.</p>
<p>(Via <a href="https://www.engadget.com/topics/apple/">The Unofficial Apple Weblog (TUAW)</a>.)</p>Best practices during software project initiation?2008-07-19T07:46:00-10:002008-07-19T07:46:00-10:00larrytag:knowing.net,2008-07-19:/posts/2008/07/best-practices-during-software-project-initiation/<p>I have created a short poll at Zoho on practices that can be done very early in a project's lifecycle, before a vision is really established. What do you think? What did I miss?</p>Testing MarsEdit from the Mac2008-07-13T07:58:00-10:002008-07-13T07:58:00-10:00larrytag:knowing.net,2008-07-13:/posts/2008/07/testing-marsedit-from-the-mac/<p>This is from MarsEdit. Do I have to add markup tags manually?</p>
<p>It appears that I have to add markup manually</p>Recent Articles2008-06-26T15:36:00-10:002008-06-26T15:36:00-10:00larrytag:knowing.net,2008-06-26:/posts/2008/06/recent-articles/<p>I've been busier than some metaphorical thing in some metaphorical place where things are really busy.</p>
<p>Here are some recent articles I've written:</p>
<p><a href="https://sdtimes.com/">Drag .Net -- Home Security Automation</a></p>
<p>\<a href="http://www.sdtimes.com/content/article.aspx%3fArticleID%3d32144"" target="_blank" rel="noopener noreferrer">Ozzie's 'Internet Tidal Wave' Leaves A …</p><p>I've been busier than some metaphorical thing in some metaphorical place where things are really busy.</p>
<p>Here are some recent articles I've written:</p>
<p><a href="https://sdtimes.com/">Drag .Net -- Home Security Automation</a></p>
<p>\<a href="http://www.sdtimes.com/content/article.aspx%3fArticleID%3d32144"" target="_blank" rel="noopener noreferrer">Ozzie's 'Internet Tidal Wave' Leaves A Mesh</p>Test from Mac2008-06-18T08:39:00-10:002008-06-18T08:39:00-10:00larrytag:knowing.net,2008-06-18:/posts/2008/06/test-from-mac/<p>Test</p>Fast Ranking Algorithm: Astonishing Paper by Raykar, Duraiswami, and Krishnapuram2008-06-07T09:34:00-10:002008-06-07T09:34:00-10:00larrytag:knowing.net,2008-06-07:/posts/2008/06/fast-ranking-algorithm-astonishing-paper-by-raykar-duraiswami-and-krishnapuram/<p>The July 08 (Vol. 30, #7) <em>IEEE Transactions on Pattern Analysis and Machine Intelligence</em> has an incredible paper by Raykar, Duraiswami, and Krishnapuram. <em>A Fast Algorithm for Learning a Ranking Function from Large-Scale Data Sets</em> appears to be a game-changer for an incredibly important problem in machine learning. Basically, they …</p><p>The July 08 (Vol. 30, #7) <em>IEEE Transactions on Pattern Analysis and Machine Intelligence</em> has an incredible paper by Raykar, Duraiswami, and Krishnapuram. <em>A Fast Algorithm for Learning a Ranking Function from Large-Scale Data Sets</em> appears to be a game-changer for an incredibly important problem in machine learning. Basically, they use a "fast multipole method" developed for computational physics to rapidly estimate (to arbitrary precision) the conjugate gradient of an error function. (In other words, they tweak the parameters and "get a little better" the next time through the training data.)</p>
<p>The precise calculation of the conjugate gradient is O(m\^2). This estimation algorithm is O(m)! (That's an exclamation point, not a factorial!)</p>
<p>On a first reading, I don't grok how the crucial transform necessarily moves towards an error minimum, but the algorithm looks (surprisingly) easy to implement and their benchmark results are jaw-dropping. Of course, others will have to implement it and analyze it for applicability across different types of data sets, but this is one of the most impressive algorithmic claims I've seen in years.</p>
<p>Once upon a time, I had the great fortune to write a column for a magazine on artificial intelligence and could justify spending huge amounts of time implementing AI algorithms (well, I think I was paid \$450 per month for my column, so I'm not really sure that "justified" 80 hours of programming, but I was young). Man, would I love to see how this algorithm works for training a neural network...</p>Embarcadero Acquires CodeGear (nee Borland Languages)2008-05-07T07:07:00-10:002008-05-07T07:07:00-10:00larrytag:knowing.net,2008-05-07:/posts/2008/05/embarcadero-acquires-codegear-nee-borland-languages/<p>CodeGear, the company semi-spun off from Borland's languages division, has been acquired by Embarcadero, the company best known for enterprise-y DB tools such as ER/studio.</p>
<p>The half-measure of announcing the division's sale and then holding on to it was always ugly and even though Embarcadero is probably not the …</p><p>CodeGear, the company semi-spun off from Borland's languages division, has been acquired by Embarcadero, the company best known for enterprise-y DB tools such as ER/studio.</p>
<p>The half-measure of announcing the division's sale and then holding on to it was always ugly and even though Embarcadero is probably not the most exciting company in the SD tools marketplace, better a loving step-parent than continuing the cycle of abuse at Borland.</p>
<p>Of course, being an "exciting" company that attempts to redefine the coding playing field may not be smart for a tool company; I always cling to such when I talk about Borland's languages division, which celebrated its 25th anniversary the other day, but it is neither the only nor perhaps the smartest strategy.</p>Incompetent American Programmers2008-04-26T14:54:00-10:002008-04-26T14:54:00-10:00larrytag:knowing.net,2008-04-26:/posts/2008/04/incompetent-american-programmers/<p>In the Summer and Fall of 1999, at the peak of the dot-com boom, there was incredible competition for software developers. Starting pay for developers with <strong>no experience</strong> had already climbed to \<span class="math">\(60K and then, in the course of maybe 3 months, it went from \\)</span>60K to \<span class="math">\(75K to \\)</span>90K …</p><p>In the Summer and Fall of 1999, at the peak of the dot-com boom, there was incredible competition for software developers. Starting pay for developers with <strong>no experience</strong> had already climbed to \<span class="math">\(60K and then, in the course of maybe 3 months, it went from \\)</span>60K to \<span class="math">\(75K to \\)</span>90K. And that was actual money, not soon-to-be-toilet-paper stock options.</p>
<p>A guy as American as apple pie came in, fresh out of college, applying as a Java developer. He didn't know the difference between a class and an instance and didn't know what inheritance was. So, just as incompetent as anything I'm seeing today. I started to explain to him that software development was a wonderful profession and that if he wanted to learn it, the traditional way would be to apply as a junior tester, and ... He cut me off, told me he had 5 other interviews lined up that week and made it clear that he expected to be hired at one of them. And I don't doubt that he did.</p>
<p>But I doubt that he's still incompetent and employed as a software developer and especially not as a freelance coder. I think he either:</p>
<ul>
<li>was weeded out of programming (perhaps by going into management), or</li>
<li>got a clue</li>
</ul>
<p>I complained the other day about an incompetent applicant from South American so I'll use as an example another guy on the team who lives in South America, "gets it" as far as software development goes and charges \$24 an hour. He lives in a beautiful house on, like, 10 acres or something, owns several horses, and I get the impression that he's considered quite the young go-getter.</p>
<p>So when people think the moral of my story is "cheap employer...you get what you pay for" I think they're entirely off-base. If you're willing to create a distributed team (the wisdom of which is a whole question in and of itself), you <em>might</em> find yourself in the enviable position of being able to give a smart person a high standard of living and contributing to a developing economy tra-la-la-la-la all while paying less than an American median wage. It's hard for me to see the argument that that is immoral.</p>
<p>It's not the nationality of incompetence that's depressing me, nor is it necessarily the scope of the incompetence embodied in a single person, it's how common it is that I encounter people who have no respect for this activity that I love. I feel that I'm seeing it more often than I used to, and while I may be imagining that ("When we were kids we hiked 7 miles through the snow to the data center..."), I think it's a real phenomenon.</p>
<p>Some people suggested that the language involved might have something to do with it, and others suggested that it might have to do with the increasing amount of hand-holding in modern development environments. I still tend towards my feeling that global commodification has something to do with it; more and more people applying for jobs in the field of software development did not enter that field due to a love of computers or software, they entered it because there's demand.</p>
<p>There have always been developers for whom programming is "just a job." Back when I was Editor of <em>Computer Language</em>, it was common-place to refer to the statistic that "the average programmer has less than 1 book on software development." But it was easy for me to ignore that, because those weren't the people who read magazines and attended conferences and swapped stories on Compuserve's CLMFORUM. So maybe I <em>am</em> just being an old codger. Except instead of CLMFORUM, when I look for reaction to my thoughts I find griefers on reddit making ad hominem attacks. Progress.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>I'm Looking to Hire Freelance Ruby Programmers2008-04-25T09:03:00-10:002008-04-25T09:03:00-10:00larrytag:knowing.net,2008-04-25:/posts/2008/04/im-looking-to-hire-freelance-ruby-programmers/<p>I'm trying to hire a couple developers. One guy sent a resume that looked great -- degree in CS, C++ experience, a year with Ruby in Rails. So I sent him a simple programming exercise. I <em>sent</em> him the testcases.</p>
<p>He shoots back an answer. I open a command-line, type <strong>ruby …</strong></p><p>I'm trying to hire a couple developers. One guy sent a resume that looked great -- degree in CS, C++ experience, a year with Ruby in Rails. So I sent him a simple programming exercise. I <em>sent</em> him the testcases.</p>
<p>He shoots back an answer. I open a command-line, type <strong>ruby TestCases.rb</strong> and see this:</p>
<p><strong>9 tests, 0 assertions, 0 failures, 9 errors</strong></p>
<p>He didn't even get to the freakin' assertions! His "solution" didn't treat the argument as an array.</p>
<p>Once upon a time, I programmed by sliding cards in a box under a window and returning 15 minutes later for the results. Once upon a time, I programmed by writing object files that could take anywhere from a few minutes to overnight to link together. If we still lived in those times, I could understand submitting some text and saying "I think this is a solution." We don't live in those times anymore.</p>
<p>This guy was from South America. A lot of the guys I'm dealing with lately have been from outside the United States -- we're a distributed team and, all things being equal, a guy with a CS degree, C++ experience, and a year with Ruby on Rails who's asking \<span class="math">\(20 an hour is going to be more appealing than a guy with the same background asking \\)</span>60 an hour.</p>
<p>I don't know if it's a cultural thing or a "younger programmer" thing, but I have to say that I'm getting really freaking tired of experiencing this level of incompetence, even for the thirty seconds it took me to see that and respond "Nope. Not even close" to HR. It's <em>actively depressing</em> to me to experience this crap.</p>
<p>To be clear, this has nothing to do with this guy's innate talent or intelligence. What it has to do with is this ... mindset .... that seems to be entirely at odds with my conception of the activity of software development. I'm not talking about an ignorance of, much less disagreement with, my particular biases and judgments about the niceties of methodology and process. I'm talking about people who don't seem to "get" that programming is, at the very least, about making programs that run.</p>
<p>And, accuse me of jingoism if you will, but I have to say that it's depressing that it's virtually impossible for an American to make a median wage being a freelance coder because their resumes probably look <em>worse</em> than that of these people with CS degrees who don't freaking bother to see if their programs run.</p>
<p><em>Of course</em> intelligence is distributed evenly throughout the world, but this level of incompetence has largely been weeded out of the American freelance programming community. <em>If</em> you're making a living and you have to charge twice what a person in South America or Asia charges, you pretty much <em>have</em> to "get it." And it is sad to consider a bunch of people who "get it" slowly being weeded out of the workforce because we are unable to clearly and concisely demonstrate value to potential employers.</p>
<p>Update: I've removed the name of the fellow's country, which is one I've always wanted to visit and which I'm sure has many fine developers. It's not relevant, other than to make the point that it's not just one country in Asia where there are freelance developers looking for work and charging significantly less than their American or European counterparts.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Aloha, Cheyenne2008-04-17T06:48:00-10:002008-04-17T06:48:00-10:00larrytag:knowing.net,2008-04-17:/posts/2008/04/aloha-cheyenne/<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/AlohaCheyenne_C8F1/image_2.jpg"><img alt="image" height="484" src="http://www.knowing.net/content/binary/WindowsLiveWriter/AlohaCheyenne_C8F1/image_thumb.jpg" width="332"></a></p>
<p>She was a good dog.</p>30K application lines + 110K testing lines: Evidence of...?2008-04-14T06:00:00-10:002008-04-14T06:00:00-10:00larrytag:knowing.net,2008-04-14:/posts/2008/04/30k-application-lines-110k-testing-lines-evidence-of/<p>I recently wrote an encomium to ResolverOne, the IronPython-based spreadsheet:</p>
<blockquote>
<p>[T]heir use of pair programming and test-driven development has delivered high productivity; of the 140,000 lines of code, 110,000 are tests....ResolverOne has been in development for roughly two years, is written in a language without explicit …</p></blockquote><p>I recently wrote an encomium to ResolverOne, the IronPython-based spreadsheet:</p>
<blockquote>
<p>[T]heir use of pair programming and test-driven development has delivered high productivity; of the 140,000 lines of code, 110,000 are tests....ResolverOne has been in development for roughly two years, is written in a language without explicit type declarations, and is on an implementation that itself is in active development. It's been brought to beta in a credible (if not downright impressive) amount of time despite being developed by pairs of programmers writing far more lines of test than application. Yet no one can credibly dismiss the complexity of 30,000 lines of application logic or spreadsheet functionality, much less the truly innovative spreadsheet-program features.<br>
ResolverOne is easily the most compelling data point I've heard for the practices of Extreme Programming. [<a href="https://sdtimes.com/">Extreme Program</a>, SD Times]</p>
</blockquote>
<p><a href="https://holub.com/">Allen Holub</a> sees the glass as half-empty, writing:</p>
<blockquote>
<p>I want to take exception to the notion that Python is adequate for a real programming project. The fact that 30K lines of code took 110K lines of tests is a real indictment of the language. My guess is that a significant portion of those tests are addressing potential errors that the compiler would have found in C# or Java. Moreover, all of those unnecessary tests take a lot of time to write, time that could have been spent working on the application.</p>
</blockquote>
<p>I was taken aback by this, perhaps because it's been a good while since I've heard someone characterize tests as evidence of trouble as opposed to evidence of quality.</p>
<p>There are (at least) two ways of looking at tests:</p>
<ol>
<li>Tools for discovering errors, or</li>
<li>Quality gates (they're one way -- are they quality diodes?)</li>
</ol>
<p>There's no doubt that the software development tradition has favored the former view (once you've typed a line, everything you do next is "debugging"). However, the past decade has seen a ... wait for it ... paradigm shift.</p>
<p>The Agile Paradigm views change over time as a central issue; if it were still the 90s, I would undoubtedly refer to it as Change-Oriented Programming (COP). Tests are the measure of change -- not lines of code, not cyclomatic complexity, not object hierarchies, not even deployments.</p>
<p>(Perhaps "User stories" or scenarios are the "yard-stick" of change, tests are the "inch-stick" of change, and deployments are the "milestone" of change.)</p>
<p>So from <em>within</em> the Agile Paradigm / COP, a new test is written that fails, some new code is written, the test passes -- a <strong>one-way</strong> gate has been passed through, progress has been made, and credit accrues. From <em>outside</em> the paradigm, <strong>a test is seen as indicative of a problem that ought not to exist in the first place</strong>. The <em>passing</em> of the test is not seen as the salient point, the "<em>need"</em> for (i.e., existence of)<em> </em>the test is seen as evidence of low quality.</p>
<p>In true test-<strong>driven</strong> development, every pass fails at least once, because the tests are written before the code. What is perhaps not appreciated by those outside the Agile Paradigm, however, is that tests are written that one expects to run from the moment the relevant code is created. For instance, if one had fields for sub-total, taxes, and total, one would certainly write a test that confirmed that total = sub-total + taxes. One would also certainly expect that test to pass as soon as the code had been written.</p>
<p>As is often the case with paradigms, often just realizing that there are different mental models / worldviews in play is crucial to communication.</p>
<p><strong>Update:</strong> This relates to Martin Fowler's recent post on <a href="https://martinfowler.com/bliki/SchoolsOfSoftwareDevelopment.html">Schools of Software Development</a>.</p>The ACM is Using ColdFusion to Deliver the CACM Electronically2008-04-14T06:00:00-10:002008-04-14T06:00:00-10:00larrytag:knowing.net,2008-04-14:/posts/2008/04/the-acm-is-using-coldfusion-to-deliver-the-cacm-electronically/<p>https://portal.acm.org/poplogin.cfm? .... etc ... (I can't post the whole URL since it's linked to my account)</p>Google App Engine: Another Python Victory2008-04-13T06:00:00-10:002008-04-13T06:00:00-10:00larrytag:knowing.net,2008-04-13:/posts/2008/04/google-app-engine-another-python-victory/<p>It's been quite a year for Python, and <a href="https://arstechnica.com/uncategorized/2008/04/analysis-google-app-engine-alluring-will-be-hard-to-escape/">Google App Engine</a> provides the dynamic language a very high profile indeed. GAE is a cloud platform that is competitive with Amazon's S3 (much like Stratos, on the planet Ardana might compete with <a href="https://www.starwars.com/databank/cloud-city">Cloud City on Bespin</a> ). GAE provides Django and other …</p><p>It's been quite a year for Python, and <a href="https://arstechnica.com/uncategorized/2008/04/analysis-google-app-engine-alluring-will-be-hard-to-escape/">Google App Engine</a> provides the dynamic language a very high profile indeed. GAE is a cloud platform that is competitive with Amazon's S3 (much like Stratos, on the planet Ardana might compete with <a href="https://www.starwars.com/databank/cloud-city">Cloud City on Bespin</a> ). GAE provides Django and other major Python frameworks, but I imagine that the real appeal is (a) the free hosting and (b) the CPU budget.</p>Name That Arcade Game2008-04-11T06:00:00-10:002008-04-11T06:00:00-10:00larrytag:knowing.net,2008-04-11:/posts/2008/04/name-that-arcade-game/<p>Sometime after Space War and Asteroids, but before color was widespread in arcade games, there was a 2-person vector-graphics game in which you and your friend drove "tractors" around and grabbed little diamonds (or whatever) from a pile in the center of the screen and dragged them back to your …</p><p>Sometime after Space War and Asteroids, but before color was widespread in arcade games, there was a 2-person vector-graphics game in which you and your friend drove "tractors" around and grabbed little diamonds (or whatever) from a pile in the center of the screen and dragged them back to your base. You could shoot the other guy a la Space War, but I think there were also bad guys flying around to shoot a la Asteroids.</p>
<p><strong>Name that Arcade Game!</strong></p>
<p><strong>Update: KSharkey rocks!</strong> He correctly identified <a href="https://www.arcade-museum.com/game_detail.php?game_id=9326">Rip-Off</a> -- with graphics like this, it's no wonder I was enthralled:</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/NameThatArcadeGame_D276/image_2.png"><img alt="image" height="484" src="http://www.knowing.net/content/binary/WindowsLiveWriter/NameThatArcadeGame_D276/image_thumb.png" width="644"></a></p>
<p>With the advent of color, there was this game involving a grid of city blocks. A dozen or so triangles started moving from one side (or all sides?) through the grid. I don't recall if you controlled the triangles or you controlled a car trying to get away from them, but over time the triangles would end up crashing into each other and being destroyed. And you either were trying to destroy them all before time ran out or you were trying to keep them alive until you achieved some goal.</p>
<p><strong>Name that Arcade Game!</strong></p>
<p><strong>Update:</strong> <strong>WillC2 Rocks</strong>! <a href="https://www.arcade-museum.com/game_detail.php?game_id=10034">Targ</a> it is!</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/NameThatArcadeGame_D276/image_4.png"><img alt="image" height="484" src="http://www.knowing.net/content/binary/WindowsLiveWriter/NameThatArcadeGame_D276/image_thumb_1.png" width="469"></a></p>
<p>Well, guess I'm going to have to renew my XNA Creator's Club membership...</p>2 Things That Made Me Scoff at "Breach"2008-04-09T14:39:00-10:002008-04-09T14:39:00-10:00larrytag:knowing.net,2008-04-09:/posts/2008/04/2-things-that-made-me-scoff-at-quotbreachquot/<p>"I wrote an encryption algorithm with 612 bits of security." (I really like to imagine the 'notes' from the studio on this -- "I like how this establishes that Hansen is a very talented programmer, but let's bump it up 100 to show he was <em>really</em> good.")</p>
<p>"We need Linux servers …</p><p>"I wrote an encryption algorithm with 612 bits of security." (I really like to imagine the 'notes' from the studio on this -- "I like how this establishes that Hansen is a very talented programmer, but let's bump it up 100 to show he was <em>really</em> good.")</p>
<p>"We need Linux servers..." (In the year 2000, he expected the FBI to run its infrastructure on OSS? No wonder this guy got nowhere!)</p>
<p>Other than that, the movie was okay, even if it had the cliched cop-out "Why did he do it? Well, in the end it doesn't matter. He did it. And that's what counts." That may be what counts in the real world, but in a <em>story</em> the 'why' is central to the job.</p>Open Source Powershell for Linux, MacOS, WindowsCE, and, oh yeah, Windows2008-04-09T07:07:00-10:002008-04-09T07:07:00-10:00larrytag:knowing.net,2008-04-09:/posts/2008/04/open-source-powershell-for-linux-macos-windowsce-and-oh-yeah-windows/<p>From Miguel de Icaza comes word of <a href="https://tirania.org/blog/archive/2008/Apr-07.html">Igor Moochnick's open source implementation of Powershell</a>, the excellent (if frustratingly verbose in its default configuration) shell from Microsoft</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/OpenSourcePowershellforLinuxMacOSWindows_6442/image_2.png"><img alt="image" height="484" src="http://www.knowing.net/content/binary/WindowsLiveWriter/OpenSourcePowershellforLinuxMacOSWindows_6442/image_thumb.png" width="460"></a></p>Does Collective Code Ownership Overcome Poor Programming?2008-04-08T17:51:00-10:002008-04-08T17:51:00-10:00larrytag:knowing.net,2008-04-08:/posts/2008/04/does-collective-code-ownership-overcome-poor-programming/<p>Hmm.... this post advocating Collective Code Ownership as "the most important principle of XP" has a link to my comment on "bad programmers are not good programmers who are slow"</p>
<p>The implication is that either:</p>
<ol>
<li>Counter-productive programmers are a myth and a scapegoat at all times, or</li>
<li>CCO is a …</li></ol><p>Hmm.... this post advocating Collective Code Ownership as "the most important principle of XP" has a link to my comment on "bad programmers are not good programmers who are slow"</p>
<p>The implication is that either:</p>
<ol>
<li>Counter-productive programmers are a myth and a scapegoat at all times, or</li>
<li>CCO is a cure for counter-productive programmers</li>
</ol>
<p>If (1), I'll <a href="https://sdtimes.com/">restate</a> that what little evidence we have about programmer productivity points to a productivity distribution that's skewed with a long tail of incompetence.</p>
<p>So, (2) CCO is a cure for low- or counter-productive programmers. I don't see that at all. For one thing, I don't see any mechanism by which CCO improves the talents of the worst programmers. It exposes them to higher-quality code than they write, true, but bad programmers don't learn by example (I'm tempted to say their lack of self-educational initiative is their defining characteristic).</p>
<p>From a managerial perspective, CCO can actually <em>hide</em> poor programming, in that a poor programmer does a "works on my machine" or "works for the default scenario" piece of crud, and a good programmer comes through and refactors the work before the poor programming is exposed. The good programmer is disgusted and frustrated and slowed, but management sees Bob The Poor and Gwen the Great as both finishing one task.</p>
<p>With version control logs, Bob's role in the poor work is not hidden to Gwen either, so it's not the case that the communal nature of CCO tempers her resentment.</p>
<p>I'm 100% for CCO, but I don't see it as having anything to do with incompetent programmers. (Clarification: I'm 100% for CCO, but that doesn't mean it can't 'hide poor programming' as discussed above. Nothing's perfect.)</p>"The Ruby Programming Language" Gets Thumbs Up2008-04-07T10:34:00-10:002008-04-07T10:34:00-10:00larrytag:knowing.net,2008-04-07:/posts/2008/04/quotthe-ruby-programming-languagequot-gets-thumbs-up/<p><a href="http://binstock.blogspot.com/2008/03/great-reference-for-ruby.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">Andrew Binstock says</a>:</p>
<blockquote>
<p>Ever-dependable O'Reilly just released <a href="https://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177?ie=UTF8&s=books&qid=1207014475&sr=8-1">Ruby Programming Language</a><img alt="img" src="http://www.assoc-amazon.com/e/ir?t=wwwpacificdat-20&l=ur2&o=1">, which is without a doubt the definitive Ruby reference. Not only is it co-authored by Yukihiro "Matz" Matusmoto, the inventor of Ruby, but it is superbly well edited, so that every page is full of useful information presented clearly. And …</p></blockquote><p><a href="http://binstock.blogspot.com/2008/03/great-reference-for-ruby.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">Andrew Binstock says</a>:</p>
<blockquote>
<p>Ever-dependable O'Reilly just released <a href="https://www.amazon.com/Ruby-Programming-Language-David-Flanagan/dp/0596516177?ie=UTF8&s=books&qid=1207014475&sr=8-1">Ruby Programming Language</a><img alt="img" src="http://www.assoc-amazon.com/e/ir?t=wwwpacificdat-20&l=ur2&o=1">, which is without a doubt the definitive Ruby reference. Not only is it co-authored by Yukihiro "Matz" Matusmoto, the inventor of Ruby, but it is superbly well edited, so that every page is full of useful information presented clearly. And at more than 400 pages, that's a lot of information. Couple this book with The Ruby Cookbook, which I <a href="http://binstock.blogspot.com/2006/09/really-useful-ruby-book.html">reviewed</a> on this blog, and you have probably the best 1-2 combination for learning and using Ruby.</p>
</blockquote>
<p>I haven't seen the book myself, but I trust Andrew's judgment. I certainly agree on the value of <em>The Ruby Cookbook</em>.</p>Google Calendar Spam2008-03-31T18:20:00-10:002008-03-31T18:20:00-10:00larrytag:knowing.net,2008-03-31:/posts/2008/03/google-calendar-spam/<p>Oh great. The spammers have figured out how to abuse Google Calendar. I think they just add your email to their "Google Calendar" and Google helpfully reminds you.</p>Aloha Airlines Shuts Down, Strands Passengers2008-03-30T12:56:00-10:002008-03-30T12:56:00-10:00larrytag:knowing.net,2008-03-30:/posts/2008/03/aloha-airlines-shuts-down-strands-passengers/<p>Aloha Airlines, one of the more important carriers to Hawai'i, entered bankruptcy a few weeks ago and this morning announced the grounding of their passenger fleet effective tomorrow.</p>
<p>We have a friend in town who's stranded. We love having her, but she appears a little stressed. She doesn't drink, either …</p><p>Aloha Airlines, one of the more important carriers to Hawai'i, entered bankruptcy a few weeks ago and this morning announced the grounding of their passenger fleet effective tomorrow.</p>
<p>We have a friend in town who's stranded. We love having her, but she appears a little stressed. She doesn't drink, either, so I can't ease her mind with a mai tai.</p>Time for a reset...2008-03-28T09:20:00-10:002008-03-28T09:20:00-10:00larrytag:knowing.net,2008-03-28:/posts/2008/03/time-for-a-reset/<p>OK, time to reset:</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/Timeforareset_840C/image_2.png"><img alt="image" height="46" src="http://www.knowing.net/content/binary/WindowsLiveWriter/Timeforareset_840C/image_thumb.png" width="161"></a></p>
<p>Attention is a finite resource...</p>I Hope You'll Forgive Me For Speaking Plainviewly2008-03-24T08:37:00-10:002008-03-24T08:37:00-10:00larrytag:knowing.net,2008-03-24:/posts/2008/03/i-hope-youll-forgive-me-for-speaking-plainviewly/<p>At a party Saturday night, I carried on while doing an impersonation of Daniel Day-Lewis in <em>There Will Be Blood</em>. Hopefully, no amount of alcohol will ever drown the shame and this will never <em>ever</em> happen again.</p>Django Taking Flight On IronPython2008-03-21T07:48:00-10:002008-03-21T07:48:00-10:00larrytag:knowing.net,2008-03-21:/posts/2008/03/django-taking-flight-on-ironpython/<p>At PyCon, Microsoft demoed Django running on IronPython. This blog post detailing the code says "not quite complete but ... [good enough to] get Django's tutorial running." From a language geek standpoint, I prefer Ruby (those object-oriented grooves run deep), but IronPython is very clearly on the cusp of adulthood.</p>
<p>In …</p><p>At PyCon, Microsoft demoed Django running on IronPython. This blog post detailing the code says "not quite complete but ... [good enough to] get Django's tutorial running." From a language geek standpoint, I prefer Ruby (those object-oriented grooves run deep), but IronPython is very clearly on the cusp of adulthood.</p>
<p>In other DLR news, Dermot Hogan has <a href="http://www.bitwisemag.com/2/DLR-Build-Your-Own-Language">begun a series on writing a DLR language using ANTLR</a>, the compiler-construction tool that I prefer.</p>
<p>Personally, I'm trying to figure out a way to get someone to pay me to write a DLR generator for ANTLR. ANTLR generates abstract syntax trees and this function works fine and is very flexible, allowing you to plug in your own tree-generators. All that needs to happen is the creation of new templates that create DLR expression trees.</p>
<p>My first-quarter project is coming to an end and although it's been overtime to make our deadline, it's beginning to look like we'll deploy next Friday, right on schedule. I'd dearly love to be able to get back to something that had technical and not personnel challenges.</p>You May Live In Hawai'i If...2008-03-15T17:14:00-10:002008-03-15T17:14:00-10:00larrytag:knowing.net,2008-03-15:/posts/2008/03/you-may-live-in-hawaii-if/<p>You see what looks like a bag of trash near your driveway and it turns out that someone pulled in, dressed the boar they'd caught, and left the carcass for you to haul to the dump. In a bag, at least.</p>Microsoft's StartKey: Computer Environment on a USB Stick. I've Experienced This Before and It's Awesome2008-03-08T08:16:00-10:002008-03-08T08:16:00-10:00larrytag:knowing.net,2008-03-08:/posts/2008/03/microsofts-startkey-computer-environment-on-a-usb-stick-ive-experienced-this-before-and-its-awesome/<p><a href="https://www.zdnet.com/blog/">StartKey</a> will be a technology that allows you to carry your Windows logon around on a USB keychain. Early reaction is mixed as to the value of this, but I loved something similar when I worked for a company developing software for Sun JavaStation network computers.</p>
<p>With JavaStation's, you had …</p><p><a href="https://www.zdnet.com/blog/">StartKey</a> will be a technology that allows you to carry your Windows logon around on a USB keychain. Early reaction is mixed as to the value of this, but I loved something similar when I worked for a company developing software for Sun JavaStation network computers.</p>
<p>With JavaStation's, you had a smartcard that you plugged in and, after 10 seconds or so, up would come your desktop. Since <em>most</em> of the time you work at your desk, <em>most</em> of the time this was not particularly valuable. But let me tell you -- it was <em>fantastic</em> for meetings and presentations. No messing around with cables and display settings, no hand-waving when trying to describe an issue you were talking about when you happened to be on the other side of the office.</p>
<p>The difference is that the JavaStations were uniform hardware, too, and all your software lived on the server (which, it turned out at 7AM the morning of a major trade show, is a single point of failure). While you might have a good experience assuming that a random machine has Office on it (a smile creeps across Microsoft's face), there would presumably have to be a solution for specialist software such as Visual Studio or Photoshop that could not be assumed to be local.</p>
<p>I would think the problem with that is that although memory sticks are probably getting capacious enough, the bus connection between the memory sticks and the main computer are going to be bottlenecks.</p>Fool Me For The Nth Time, Shame ^Nth on Me2008-03-07T14:08:00-10:002008-03-07T14:08:00-10:00larrytag:knowing.net,2008-03-07:/posts/2008/03/fool-me-for-the-nth-time-shame-nth-on-me/<p>Unbe-freakin'-lievable. The client who screwed me back in October called and, sure enough, gave me an assignment for an article that, just as I predicted, they now needed ASAP. Because I was hopeful that this would allow my context-sensitive image-resizing code to see the light of day, I agreed, working …</p><p>Unbe-freakin'-lievable. The client who screwed me back in October called and, sure enough, gave me an assignment for an article that, just as I predicted, they now needed ASAP. Because I was hopeful that this would allow my context-sensitive image-resizing code to see the light of day, I agreed, working 12 hour days and through last weekend in order to clear out the time to write the thing. And then... yep, they delayed the article.</p>
<p>Well, fool me once, etc.</p>
<p>Mamas, don't let your babies grow up to be freelance writers.</p>If you like science fiction, join tor.com2008-03-07T13:13:00-10:002008-03-07T13:13:00-10:00larrytag:knowing.net,2008-03-07:/posts/2008/03/if-you-like-science-fiction-join-torcom/<p>Tor.com is giving away eBooks of apparently-well-known authors. It's been a <em>long</em> time since I've followed SF, but "free eBook + Kindle" is too good to pass up. So far, I've received:</p>
<ul>
<li>Old Man's War by John Scalzi -- I'm reading this now; it's kind of like an updated <em>Starship Troopers …</em></li></ul><p>Tor.com is giving away eBooks of apparently-well-known authors. It's been a <em>long</em> time since I've followed SF, but "free eBook + Kindle" is too good to pass up. So far, I've received:</p>
<ul>
<li>Old Man's War by John Scalzi -- I'm reading this now; it's kind of like an updated <em>Starship Troopers</em> with a sense of humor.</li>
<li>Spin by Robert Charles Wilson</li>
<li>The Outstretched Shadow by Merces Lackey and James Mallory</li>
</ul>Ted Leung, Python-ista, joins Sun2008-03-04T14:03:00-10:002008-03-04T14:03:00-10:00larrytag:knowing.net,2008-03-04:/posts/2008/03/ted-leung-python-ista-joins-sun/<p><a href="https://www.sauria.com/blog/">Ted Leung has joined Sun</a> to help support Python "in a similar fashion" to the JRuby project.</p>
<blockquote>
<p>This is not just about Python on on the JVM. Sun will try to make its platforms, OpenSolaris and the JVM, the best place to develop and deploy Python applications.</p>
</blockquote>
<p>But it's <em>mostly …</em></p><p><a href="https://www.sauria.com/blog/">Ted Leung has joined Sun</a> to help support Python "in a similar fashion" to the JRuby project.</p>
<blockquote>
<p>This is not just about Python on on the JVM. Sun will try to make its platforms, OpenSolaris and the JVM, the best place to develop and deploy Python applications.</p>
</blockquote>
<p>But it's <em>mostly</em> about Python on the JVM. With <a href="https://archive.codeplex.com/">IronPython</a> approaching "fully baked" status, Python book sales up 31% over last year (<a href="http://radar.oreilly.com/Language_all.jpg">http://radar.oreilly.com/Language_all.jpg</a>), and applications like <a href="https://www.resolversystems.com/">ResolverOne</a>, Python is stealing some of the dynamic language thunder from Ruby.</p>
<p>The relative pace of Jython/JRuby and IronPython / IronRuby ought to provide plenty of ammunition for undoubtedly-overly-broad conclusions about the technical merits of the managed platforms and corporate cultures.</p>Gary Gygax: -1 HP2008-03-04T12:27:00-10:002008-03-04T12:27:00-10:00larrytag:knowing.net,2008-03-04:/posts/2008/03/gary-gygax-1-hp/<p><a href="https://gadgets.boingboing.net/2008/03/04/dungeons-dragons-cre.html">Put down your pencils...</a></p>Lead-Developer Compression Ratios2008-02-27T14:57:00-10:002008-02-27T14:57:00-10:00larrytag:knowing.net,2008-02-27:/posts/2008/02/lead-developer-compression-ratios/<p>Let's assume you're a pretty good programmer (and good looking to boot!). It's Monday morning and you're looking at a task that has some solid complexity to it -- it's going to take you 40 hours of effort to get through. <em>Or</em> you have the option of delegating components to 2 …</p><p>Let's assume you're a pretty good programmer (and good looking to boot!). It's Monday morning and you're looking at a task that has some solid complexity to it -- it's going to take you 40 hours of effort to get through. <em>Or</em> you have the option of delegating components to 2, 3, or even 4 competent-but-not-exceptional developers. For these guys to deliver, you're going to have to:</p>
<ul>
<li>Decompose the task significantly</li>
<li>Write a precise spec, at least for the initial subtasks (because if you get off on the wrong expectation of data structures, there's no way you're going to catch the problem, refactor it, and re-distribute the tasks)</li>
<li>Engage in course correction (when facing ambiguity, "problem solving" for these guys is going to be asking you for clarification)</li>
<li>Do some refactoring (let's face it, there's going to be a couple things that will be easier to fix than re-specify)</li>
<li>Spend (at least) one afternoon on interactive testing and integration</li>
</ul>
<p>(For "decompose" and "write a spec" feel free to interpret however you wish, so long as it's a concrete deliverable that acknowledges that if you're delegating and "fanning out" tasks, you have to pay an upfront cost thinking through scenarios that are still somewhat hazy and contingent.)</p>
<p>So here's my question: how many hours do you think you can shave off the 40 hours it would take you to "just do it" yourself? 8, 16, 32?</p>
<p>There are (at least) 2 points that strike me as relevant : one is that even in such a fine-grained, seemingly controlled, context you face significant "mythical man-month" issues of communication overhead, risk, etc. and so you discover, if you time it, that you don't save nearly as much time as you'd hope.</p>
<p>The second point that I think might be even more interesting is that your <em>perception</em> is likely to be even worse than what the clock says. If you are in this role, you will rarely or never get into a high-productivity "flow" state, a familiarity with which, I would submit, is <em>why</em> you're a pretty good programmer.</p>Subprime Bailouts2008-02-26T19:31:00-10:002008-02-26T19:31:00-10:00larrytag:knowing.net,2008-02-26:/posts/2008/02/subprime-bailouts/<p>Philip Greenspun</p>
<blockquote>
<p>Governments at various levels have decided that they have to bail out people who spent more than the houses turned out to be worth and the financial companies who weren't wise enough to notice that the U.S. is in fact not short of forests that can be …</p></blockquote><p>Philip Greenspun</p>
<blockquote>
<p>Governments at various levels have decided that they have to bail out people who spent more than the houses turned out to be worth and the financial companies who weren't wise enough to notice that the U.S. is in fact not short of forests that can be cut down for more sprawl. Where will the money come from? You, me, and everyone else who did not participate in the bubble. So? we missed buying real estate with a lot of leverage back in 2000 and missed the big ride up through 2004 or whenever. Now we get to buy that same real estate at a much higher price and without any upside at all since we won't actually own any of it.</p>
</blockquote>
<p>Yeah, what he said.</p>
<p>Of course I can appreciate the misery of someone who's underwater on a \$400K mortgage, but my sympathy goes away awfully quick when I hear them say "We just never imagined this!"</p>
<p>Didn't you notice that that whole "closing" business involved you signing, like, 100 pages of documents that were all variations on "YOU OWE LOTS OF MONEY"?</p>
<p>Giving and receiving multi-hundred-thousand dollar loans is adult stuff. I have friends who are not homeowners because they looked at the risks and decided not to take one of these nonsense loans. Now apparently my tax dollars are going to go to help out the imprudent people who caused my friends to be priced out of the market and, in so doing, my tax dollars will help prop up the prices and keep my friends locked out of the market. This is good for society how?</p>Ottawa Mayor Larry O'Brien Promises Blog -- Enraged Ottawans Support Me2008-02-26T07:10:00-10:002008-02-26T07:10:00-10:00larrytag:knowing.net,2008-02-26:/posts/2008/02/ottawa-mayor-larry-obrien-promises-blog-enraged-ottawans-support-me/<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/OttawaMayorLarryOBrienPromisesBlogEnrage_D658/image_2.png"><img alt="image" height="244" src="http://www.knowing.net/content/binary/WindowsLiveWriter/OttawaMayorLarryOBrienPromisesBlogEnrage_D658/image_thumb.png" width="203"></a>I'm going to be interviewed by CFRA (<a href="http://www.iheartradio.ca/580-cfra">580 News Talk Radio</a>) in a bit about the plans of Ottawa Mayor Larry O'Brien to bypass mainstream media by blogging. </p>
<p>Early feedback is that Larry "Amulet of Protection" O'Brien's rants on light rail are <strong>vastly</strong> less entertaining than Larry "Chillin' at the …</p><p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/OttawaMayorLarryOBrienPromisesBlogEnrage_D658/image_2.png"><img alt="image" height="244" src="http://www.knowing.net/content/binary/WindowsLiveWriter/OttawaMayorLarryOBrienPromisesBlogEnrage_D658/image_thumb.png" width="203"></a>I'm going to be interviewed by CFRA (<a href="http://www.iheartradio.ca/580-cfra">580 News Talk Radio</a>) in a bit about the plans of Ottawa Mayor Larry O'Brien to bypass mainstream media by blogging. </p>
<p>Early feedback is that Larry "Amulet of Protection" O'Brien's rants on light rail are <strong>vastly</strong> less entertaining than Larry "Chillin' at the Beach" O'Brien's rants on implicit vs. explicit type declarations in industrial-size codebases.</p>
<p>Just because this guy looks like a low-polygon-count videogame boss, I'm not intimidated! I'll drink his milkshake! I'll drink it up!</p>Lang.NET Videos Up2008-02-26T07:00:00-10:002008-02-26T07:00:00-10:00larrytag:knowing.net,2008-02-26:/posts/2008/02/langnet-videos-up/<p><a href="http://blog.barrkel.com/2008/02/langnet-symposium-videos-are-up-in-wmv.html" title="http://barrkel.blogspot.com/2008/02/langnet-symposium-videos-are-up-in-wmv.html">http://barrkel.blogspot.com/2008/02/langnet-symposium-videos-are-up-in-wmv.html</a></p>
<p>Recommendations :</p>
<p>http://langnetsymposium.com/talks/Videos/1-05 - Lively Kernel - Dan Ingalls - Sun.wmv</p>
<p>http://langnetsymposium.com/talks/Videos/2-01 - Newspeak - Gilad Braha - Cadence.wmv</p>
<p>http://langnetsymposium.com/talks/Videos/3-08 - Cobra - Chuck Esterbrook.wmv http://langnetsymposium.com/talks/Videos/3-09 - Intentional - Magnus …</p><p><a href="http://blog.barrkel.com/2008/02/langnet-symposium-videos-are-up-in-wmv.html" title="http://barrkel.blogspot.com/2008/02/langnet-symposium-videos-are-up-in-wmv.html">http://barrkel.blogspot.com/2008/02/langnet-symposium-videos-are-up-in-wmv.html</a></p>
<p>Recommendations :</p>
<p>http://langnetsymposium.com/talks/Videos/1-05 - Lively Kernel - Dan Ingalls - Sun.wmv</p>
<p>http://langnetsymposium.com/talks/Videos/2-01 - Newspeak - Gilad Braha - Cadence.wmv</p>
<p>http://langnetsymposium.com/talks/Videos/3-08 - Cobra - Chuck Esterbrook.wmv http://langnetsymposium.com/talks/Videos/3-09 - Intentional - Magnus Christerson.wmv</p>
<p>http://langnetsymposium.com/talks/Videos/3-00 - IronRuby - John Lam.wmv</p>
<p>http://langnetsymposium.com/talks/Videos/3-03 - Parsing Expression Grammars in FSharp - Harry Pierson.wmv</p>
<div class="highlight"><pre><span></span><code>
</code></pre></div>LINQ to XSD Alpha 0.2: Now We're Talking2008-02-25T07:00:00-10:002008-02-25T07:00:00-10:00larrytag:knowing.net,2008-02-25:/posts/2008/02/linq-to-xsd-alpha-02-now-were-talking/<p>LINQ seems to be an overwhelming success (I've been having a hard time finding anyone with bad things to say about it), but what most people are talking about is the nice Object-Relational mapping tools. The ultimate goal of LINQ, though, includes uniting not only objects and relational data but …</p><p>LINQ seems to be an overwhelming success (I've been having a hard time finding anyone with bad things to say about it), but what most people are talking about is the nice Object-Relational mapping tools. The ultimate goal of LINQ, though, includes uniting not only objects and relational data but XML. The current LINQ for XML does not support schemas, which is a <em>significant</em> limitation if you're trying to really unify a model; for instance, I have a client who needs to integrate two relational models, a middle-tier object model, and an XML data store. Today, we spend significant time batting back and forth XPaths and tracking them in and out of the relational model. As for reporting, the less said the better.</p>
<p>LINQ to XSD is the necessary next step: a set of tools for LINQ that understand the type information expressed in W3C Schemas.</p>1/3 of Jolt Finalists Available In Kindle Edition2008-02-23T07:00:00-10:002008-02-23T07:00:00-10:00larrytag:knowing.net,2008-02-23:/posts/2008/02/13-of-jolt-finalists-available-in-kindle-edition/<p>There were next-to-zero technical books available for the Kindle shortly after its launch. I was delighted to discover 4 of the 12 books that were finalists for Jolt Awards this year are now available in Kindle form:</p>
<ul>
<li>Geekonomics</li>
<li>Outside In Software Development</li>
<li>WPF Unleashed</li>
<li>xUnit Test Patterns</li>
</ul>Why Am I Not Receiving PayPal Emails -- Through Two Different Email Addresses?2008-02-21T17:59:00-10:002008-02-21T17:59:00-10:00larrytag:knowing.net,2008-02-21:/posts/2008/02/why-am-i-not-receiving-paypal-emails-through-two-different-email-addresses/<p>I need to reset my PayPal password. I went to their Web and requested a reset. "Check your Inbox" it said. 24 hours later, I <em>called</em> PayPal and they manually sent me emails: one to that address and another to <em>another</em> email address! <em>Neither</em> appeared. Neither are in the respective …</p><p>I need to reset my PayPal password. I went to their Web and requested a reset. "Check your Inbox" it said. 24 hours later, I <em>called</em> PayPal and they manually sent me emails: one to that address and another to <em>another</em> email address! <em>Neither</em> appeared. Neither are in the respective "Spam" folders.</p>
<p>What could be going on?</p>Build One To Throw Away, You Will Anyhow2008-02-21T17:24:00-10:002008-02-21T17:24:00-10:00larrytag:knowing.net,2008-02-21:/posts/2008/02/build-one-to-throw-away-you-will-anyhow/<p>Such was one of the many pieces of advice of Fred Brooks in <em>The Mythical Man-Month</em> and while others of Brooks aphorisms have stood the test of time, completely scrapping a codebase is today seen more as an aberration than a painful but necessary part of the process.</p>
<p>Andrew Binstock …</p><p>Such was one of the many pieces of advice of Fred Brooks in <em>The Mythical Man-Month</em> and while others of Brooks aphorisms have stood the test of time, completely scrapping a codebase is today seen more as an aberration than a painful but necessary part of the process.</p>
<p>Andrew Binstock, who's been developing a modern typesetting language (a TeX for the new millennium), has <a href="http://binstock.blogspot.com/2008/02/restarting-platypus.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">decided to do just that with his 20KLoC, multiple man-year codebase</a>. His recognition that "the more I code, the more I see that I am adding top floors to a leaning tower. Eventually I'll topple it" may seem startling coming from a vocal advocate of <a href="http://binstock.blogspot.com/2007/04/how-many-unit-tests-per-method-see.html">unit-testing</a>, especially to younger developers who probably have had pretty-good success developing Web-based applications.</p>
<p>Andrew pinpoints the critical issue:</p>
<blockquote>
<p>It's extremely difficult to figure out where your architecture is deficient if you have never done the kind of project you're currently undertaking.</p>
</blockquote>
<p>Nowadays, most of us do our professional programming in pretty well-worn niches -- Web-based database-driven this, Smart-client semi-connected that, etc. Because of that, we (or our team) tend to make pretty good architectural choices. So good, in fact, that nowadays you don't hear nearly as much concern about application architecture as used to be the case. So good, in fact, that lots of people think you can refactor your way out of the wrong architecture; Andrew's decision is surely painful, but I think it's <strong>vastly</strong> less painful than architectural refactoring.</p>
<p>Andrew seems to be heading towards re-implementing in Java, using NetBeans and Maven. I find that interesting, especially given his use of JavaScript as the internal command language. Why not go Rhino all the way down? Sheesh, Dan Ingalls friggin' reinvented Smalltalk in JavaScript and Andrew would be able to hang with the <a href="http://steve-yegge.blogspot.com/2007/06/rhino-on-rails.html">cool kids at Google</a>.</p>
<p>There are other good details in Andrew's post and he promises to share other reflections as they occur to him -- I'm sure <a href="http://binstock.blogspot.com/">his blog</a> will be especially interesting in the coming weeks.</p>Democratic Caucus2008-02-19T20:03:00-10:002008-02-19T20:03:00-10:00larrytag:knowing.net,2008-02-19:/posts/2008/02/democratic-caucus/<p>If the November elections are anything like the Democratic caucus I just attended, it will really be something. Turnout was 4-5x the 100 or so expected and the workers ran out of Democratic party registration forms. There was <em>lots</em> of visible support for Obama (native son, true) and none for …</p><p>If the November elections are anything like the Democratic caucus I just attended, it will really be something. Turnout was 4-5x the 100 or so expected and the workers ran out of Democratic party registration forms. There was <em>lots</em> of visible support for Obama (native son, true) and none for Hillary.</p>
<p>If Obama gets the nomination and can somehow bring out the disenfranchised ... well, wouldn't that be something.</p>Clever2008-02-19T14:37:00-10:002008-02-19T14:37:00-10:00larrytag:knowing.net,2008-02-19:/posts/2008/02/clever/<p><a href="https://www.zazzle.com/"><img alt="image" height="404" src="http://www.knowing.net/content/binary/WindowsLiveWriter/Clever_CE7A/image_3.png" width="404"></a></p>
<p>(follow image link to Zazzle store...)</p>Thoughts on Kindle Annotation2008-02-19T08:33:00-10:002008-02-19T08:33:00-10:00larrytag:knowing.net,2008-02-19:/posts/2008/02/thoughts-on-kindle-annotation/<p>Based in the S3 Cloud (of course).</p>
<p>Every book has a unique Wiki based on ISBN.</p>
<p>You annotate via a Kindle-browser-friendly blogging engine.</p>
<p>You can view threads chronologically (normal blog view) or if they incorporate references to Kindle "positions," they can be threaded by location in the book.</p>
<p>Server-side stuff …</p><p>Based in the S3 Cloud (of course).</p>
<p>Every book has a unique Wiki based on ISBN.</p>
<p>You annotate via a Kindle-browser-friendly blogging engine.</p>
<p>You can view threads chronologically (normal blog view) or if they incorporate references to Kindle "positions," they can be threaded by location in the book.</p>
<p>Server-side stuff is easy enough; Kindle-friendly blogging editor/display reasonable; barrier to entry is difficulty getting from Kindle reading to Kindle browser (Home -> Experimental -> Web -> Bookmark). Also, positional permalink should be easy but will be hard ("Remember your position in the Kindle book" H->E->W->B -> Note Editor, add text, enter position in field).</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/ThoughtsonKindleAnnotation_72CD/image_2.png"><img alt="image" height="330" src="http://www.knowing.net/content/binary/WindowsLiveWriter/ThoughtsonKindleAnnotation_72CD/image_thumb.png" width="484"></a></p>
<p>Also, links ought to be two-way ("Read Now" ought to open that page in Kindle), but impossible with current firmware:</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/ThoughtsonKindleAnnotation_72CD/image_4.png"><img alt="image" height="394" src="http://www.knowing.net/content/binary/WindowsLiveWriter/ThoughtsonKindleAnnotation_72CD/image_thumb_1.png" width="484"></a></p>Continuation Passing Style: The Simplest Metaphor That Could Possibly Work2008-02-17T07:00:00-10:002008-02-17T07:00:00-10:00larrytag:knowing.net,2008-02-17:/posts/2008/02/continuation-passing-style-the-simplest-metaphor-that-could-possibly-work/<p>Continuations are one of those things (like lambda expressions a few years ago) that people seem to struggle to explain.</p>
<p>Doesn't this capture the essence?</p>
<p>DoSomeProcessing.asp?BasedOn=SomeParameters&IfItSucceeds=GoToAPlace.asp&IfItFails=GoToADifferentPlace.asp</p>More Reasons To Visit Hawai'i In February2008-02-16T16:19:00-10:002008-02-16T16:19:00-10:00larrytag:knowing.net,2008-02-16:/posts/2008/02/more-reasons-to-visit-hawaii-in-february/<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/MoreReasonsToVisitHawaiiInFebruary_E631/image_2.png"><img alt="image" height="604" src="http://www.knowing.net/content/binary/WindowsLiveWriter/MoreReasonsToVisitHawaiiInFebruary_E631/image_thumb.png" width="484"></a></p>
<p>This photo was taken by <a href="http://www.mauinews.com/">Ron Dahlquist</a> yesterday off Maui.</p>
<p>Personally, I got up early to go for a swim in a whale-rich bay this morning and the surf was up and I forgot to shave so my mask kept flooding. It sucked (for sufficiently small values of "sucked").</p>BPEL4People: Surprisingly, Release Date Is Not 4/12008-02-16T07:00:00-10:002008-02-16T07:00:00-10:00larrytag:knowing.net,2008-02-16:/posts/2008/02/bpel4people-surprisingly-release-date-is-not-41/<p>\<a href="http://www.oasis-open.org/news/oasis-news-2008-02-14.php"" target="_blank" rel="noopener noreferrer">OASIS, the international open standards consortium, has formed a new technical committee to extend the Web Services Business Processes Execution Language (WS-BPEL) to support human interactions.</p>
<p>BPEL4People is comprised of WS-BPEL Extension for People and Web …</p><p>\<a href="http://www.oasis-open.org/news/oasis-news-2008-02-14.php"" target="_blank" rel="noopener noreferrer">OASIS, the international open standards consortium, has formed a new technical committee to extend the Web Services Business Processes Execution Language (WS-BPEL) to support human interactions.</p>
<p>BPEL4People is comprised of WS-BPEL Extension for People and Web Services Human Task. The WS-HumanTask spec explains that:</p>
<blockquote>
<p><em>Human tasks</em>, or briefly <em>tasks</em> enable the integration of human beings in service-oriented applications. This document provides a notation, state diagram and API for human tasks, as well as a coordination protocol that allows interaction with human tasks in a more service-oriented fashion and at the same time controls tasks' autonomy.</p>
</blockquote>
<p>Man, I am <em>so bummed</em> I'm no longer on any standards committees.</p>MS Reorg: Soma, ScottGu Title Inflation But No New Responsibilities (?)2008-02-14T14:09:00-10:002008-02-14T14:09:00-10:00larrytag:knowing.net,2008-02-14:/posts/2008/02/ms-reorg-soma-scottgu-title-inflation-but-no-new-responsibilities/<p>Yes, I write a column called "MS and .NET Watch," but it's a technology and process column, not a corporate analysis. Concurrent programming models I can follow, who's in and who's out in the airy realms of MS Corporate is entirely beyond me. I <em>think</em> though, that \<a href="http …</p><p>Yes, I write a column called "MS and .NET Watch," but it's a technology and process column, not a corporate analysis. Concurrent programming models I can follow, who's in and who's out in the airy realms of MS Corporate is entirely beyond me. I <em>think</em> though, that \<a href="http://www.microsoft.com/Presspass/press/2008/feb08/2008ExpandedLeadershipPR.mspx"" target="_blank" rel="noopener noreferrer">today's reorg boils down to "same old, same old" for things developer-related: S. Somasegar and Scott Guthrie get title bumps but it's said they will "continue to oversee" their teams (Visual Studio, .NET, and other things developer-related).</p>
<p>I guess the question is "Who's the new ScottGu?"</p>February: Best Month to Visit Hawai'i Island2008-02-11T18:05:00-10:002008-02-11T18:05:00-10:00larrytag:knowing.net,2008-02-11:/posts/2008/02/february-best-month-to-visit-hawaii-island/<p>\<a href="http://www.judithbastiaanssen.com/2002Australia/photos/fraser/fraser08.jpg"" target="_blank" rel="noopener noreferrer"><img alt="" height="155" src="http://www.judithbastiaanssen.com/2002Australia/photos/fraser/fraser08.jpg" width="240">The seas are filled with humpbacks, both breeding and nursing. If you go in the water, you can hear them a <em>little</em> if you're on the surface, but if you can swim down 5' …</p><p>\<a href="http://www.judithbastiaanssen.com/2002Australia/photos/fraser/fraser08.jpg"" target="_blank" rel="noopener noreferrer"><img alt="" height="155" src="http://www.judithbastiaanssen.com/2002Australia/photos/fraser/fraser08.jpg" width="240">The seas are filled with humpbacks, both breeding and nursing. If you go in the water, you can hear them a <em>little</em> if you're on the surface, but if you can swim down 5' or so, it can be unbelievable.</p>
<p>Yesterday, we were at Kekaha Kai and a whale swam by about 50 yards away (did I see it underwater? No, I did not. Darn.). They were breaching and slapping tails all over.</p>
<p>Plus, we get surf, but it's very user-friendly (maybe 2-3'). So tall enough to ride, but small enough to swim through very safely. Kekaha Kai is a hot place to go boogie-boarding and I was actually swimming around inside the waves, watching people take off.</p>
<p>Which was cool until my camera flooded. It was just a cheap submersible disposable from Longs, but still, what a rip. Good thing that whale <em>didn't</em> swim by!</p>Rolled Back To Older Das Blog...2008-02-09T11:35:00-10:002008-02-09T11:35:00-10:00larrytag:knowing.net,2008-02-09:/posts/2008/02/rolled-back-to-older-das-blog/<p>OK, so if you see this and it's more than a few hours after the posting time, that's good news.</p>Should I Switch To WordPress?2008-02-04T07:59:00-10:002008-02-04T07:59:00-10:00larrytag:knowing.net,2008-02-04:/posts/2008/02/should-i-switch-to-wordpress/<p>I've got six years of DasBlog entries in my /content directory. I don't have time to maintain my blogging infrastructure (it's hard enough to justify the time I spend just <em>writing</em> the darn thing). For whatever reason, DasBlog and my hosting company just don't seem to get along ... problems with …</p><p>I've got six years of DasBlog entries in my /content directory. I don't have time to maintain my blogging infrastructure (it's hard enough to justify the time I spend just <em>writing</em> the darn thing). For whatever reason, DasBlog and my hosting company just don't seem to get along ... problems with the comments, problems with memory consumption, I dunno...</p>
<p>My only caveats are: I want it to be locally hosted, I want to customize the templates, and I don't want any limitations against uploading other types of pages via FTP (i.e., static HTML pages or ASP.NET programs or whatever).</p>
<p>If you have an opinion on the pain or ease of switching from DasBlog to WordPress, please leave a comment or send email.</p>ToyScript and the DLR : 3 Different Compilers2008-02-04T07:00:00-10:002008-02-04T07:00:00-10:00larrytag:knowing.net,2008-02-04:/posts/2008/02/toyscript-and-the-dlr-3-different-compilers/<p>While I talked about being blown away by certain talks at Lang.NET, from a pragmatic standpoint I very much enjoyed the practical talks, such as those given by Harry Pierson and, especially, \<a href="http://blogs.msdn.com/mmaly/default.aspx"" target="_blank" rel="noopener noreferrer">Martin Maly. Martin …</p><p>While I talked about being blown away by certain talks at Lang.NET, from a pragmatic standpoint I very much enjoyed the practical talks, such as those given by Harry Pierson and, especially, \<a href="http://blogs.msdn.com/mmaly/default.aspx"" target="_blank" rel="noopener noreferrer">Martin Maly. Martin is one of the IronPython / DLR developers and hand-wrote a compiler for a language called "ToyScript." This compiler is now part of the IronPython distribution. Harry wrote an F# PEG parser (is that redundant?) of ToyScript and I wrote an ANTLR-based parser. The hope is to show 3 different approaches to building the compiler front-end, but all using the same backend ("Hand off the AST to the DLR").</p>
<p>Now, on the way to <em>that</em>, I started yesterday writing a series of examples that do things exactly backward: start with the handoff to the DLR ("<strong>GenerateNopFunction()</strong>"), add nodes (Using XML to represent the AST), and then say "Oh, and you create that AST using compiler front-end techniques." The sad thing is that all of this will have to be in my copious spare time, since my language stuff isn't supported by paying articles (I did the Lang.NET conference on my own dime).</p>Comments By Disqus... Let Me Know2008-02-03T07:01:00-10:002008-02-03T07:01:00-10:00larrytag:knowing.net,2008-02-03:/posts/2008/02/comments-by-disqus-let-me-know/<p>Ok, after despairing of getting the comment issue in <a href="http://www.dasblog.net">dasBlog</a> worked out, I have switched over to Disqus. Let me know if this causes headaches...</p>600 Lines of Code2008-02-03T07:00:00-10:002008-02-03T07:00:00-10:00larrytag:knowing.net,2008-02-03:/posts/2008/02/600-lines-of-code/<p>Like <a href="http://www.charlespetzold.com/blog/2008/01/250812.html">Charles Petzold</a>, my first reaction to Jeff Atwood's question "<a href="https://blog.codinghorror.com/">What Can You Build in 600 Lines of Code?</a>" was along the lines of "5 articles!"</p>
<p>But actually, I think 600 lines is just about the right benchmark size for a language, because it's:</p>
<ul>
<li>Small enough to develop in a …</li></ul><p>Like <a href="http://www.charlespetzold.com/blog/2008/01/250812.html">Charles Petzold</a>, my first reaction to Jeff Atwood's question "<a href="https://blog.codinghorror.com/">What Can You Build in 600 Lines of Code?</a>" was along the lines of "5 articles!"</p>
<p>But actually, I think 600 lines is just about the right benchmark size for a language, because it's:</p>
<ul>
<li>Small enough to develop in a weekend</li>
<li>Large enough so that "finger typing" is neither dominant nor drowned-out</li>
<li>Large enough to exploit a language's particular idioms and strengths</li>
</ul>
<p>A caveat though: the use of libraries and frameworks can grossly distort this discussion. Frankly, the quote "<strong>commercial project written in less than 600 lines of Ruby code"</strong> (<a href="https://blog.codinghorror.com/">ibid</a>.) is wrong: it ought to be "of Rails code." It's akin to saying "In DOS batch I can create a spreadsheet in a line of code -- all I have to do is type 'excel'!" (I know it's not <em>exactly</em> the same, but there's a similarity.)</p>
<p>This is one of the reasons why writing a parser has always been a measure of a programming language -- it involves complex pattern matching, the creation of a complex datastructure, transforms of that structure, and a fair amount of IO.</p>
<p>Harry Pierson's F# PEG parsers (is that redundant?) are a good example: I don't doubt he'll complete a parsing front-end to the "ToyScript" language in less than 600 lines of code. The first night at Lang.NET, I wrote an ANTLR parser for ToyScript (# lines in ANTLR, expands to # lines of C#!). From the impression I got of Newspeak, I think it would take significantly less than F#.</p>Comments Still Don't Work: Say Nothing More Substantial Than "You're So Gay!"2008-02-02T10:27:00-10:002008-02-02T10:27:00-10:00larrytag:knowing.net,2008-02-02:/posts/2008/02/comments-still-dont-work-say-nothing-more-substantial-than-quotyoure-so-gayquot/<p>At least two problems:</p>
<ul>
<li>Some-to-all (?) people don't see the CAPTCHA image, and</li>
<li>The system is crashing the application pool every several minutes</li>
</ul>
<p>I've disabled the comments to see if the system instability is definitely associated with them...</p>LINQ for Datacenters: Microsoft does MapReduce2008-02-02T08:42:00-10:002008-02-02T08:42:00-10:00larrytag:knowing.net,2008-02-02:/posts/2008/02/linq-for-datacenters-microsoft-does-mapreduce/<p>Correcting myself re. concurrency at Lang.NET, there was one "sit up and take notice" discussion. Erik Meijer briefly discussed that he and his team have implemented (or at least prototyped) MapReduce for LINQ. "We call it MapReduce for Datacenters or somesuch..."</p>
<p>I asked him to clarify if this a …</p><p>Correcting myself re. concurrency at Lang.NET, there was one "sit up and take notice" discussion. Erik Meijer briefly discussed that he and his team have implemented (or at least prototyped) MapReduce for LINQ. "We call it MapReduce for Datacenters or somesuch..."</p>
<p>I asked him to clarify if this a part of Volta or a separate project or been discussed and he said they hadn't talked about it yet. He made it sound like it was something they did in their copious spare time. During the talk, he'd said "I come into work every day and hack. Who would want a job like mine?" to which 45 people in the room had to bite their lips to prevent themselves shouting "Me!"</p>Concurrency Not Emphasized at Lang:NET2008-02-01T09:33:00-10:002008-02-01T09:33:00-10:00larrytag:knowing.net,2008-02-01:/posts/2008/02/concurrency-not-emphasized-at-langnet/<p>Although concurrency was laid out by Jason Zander as one of the overarching themes of language work moving forward, it was not <em>at all</em> emphasized as a primary concern in any of the talks I saw. There was some talk about language features that a "sufficiently smart compiler" could handle …</p><p>Although concurrency was laid out by Jason Zander as one of the overarching themes of language work moving forward, it was not <em>at all</em> emphasized as a primary concern in any of the talks I saw. There was some talk about language features that a "sufficiently smart compiler" could handle but no one took off their shoe and banged the table and said "We must focus on this!"</p>
<p>I button-holed <a href="https://www.microsoft.com/en-us/research/people/dcr/?from=http%3A%2F%2Fresearch.microsoft.com%2F%257eemeijer%2F">Erik Meijer</a> and Brian Goetz on the topic: Erik is a great believer in <a href="https://en.wikipedia.org/wiki/Transactional_memory">Software Transactional Memory</a> and Brian is "cautiously optimistic" about it. Both were very quick to acknowledge that we don't really know how people will react to the complexities that emerge when the behavior of memory transactions starts to necessarily diverge from the familiar world of database transactions. When I mentioned the \<a href="http://en.wikipedia.org/wiki/Actor_model"" target="_blank" rel="noopener noreferrer">Actor model as being intuitive, Brian astutely diagnosed me as having a Smalltalk background and said that message-passing would be confusing to a population that viewed objects as -- I think his phrase was -- "glorified structs."</p>Lang.NET Highlights2008-01-31T10:12:00-10:002008-01-31T10:12:00-10:00larrytag:knowing.net,2008-01-31:/posts/2008/01/langnet-highlights/<p>Jason Bock and <a href="http://blogs.tedneward.com/">Ted Neward</a> did a good job summarizing specific talks, so I won't duplicate that effort. Overall, I <em>loved</em> the conference, it was revitalizing for me. The speakers varied <em>greatly</em> in their presentation skills, but I actually liked the "texture" that gave the conference; you definitely didn't have …</p><p>Jason Bock and <a href="http://blogs.tedneward.com/">Ted Neward</a> did a good job summarizing specific talks, so I won't duplicate that effort. Overall, I <em>loved</em> the conference, it was revitalizing for me. The speakers varied <em>greatly</em> in their presentation skills, but I actually liked the "texture" that gave the conference; you definitely didn't have the feeling of homogenized content. There were only two talks that struck me as near-useless and, from me, that's high praise. <strong>Most impressive technologies:</strong></p>
<ul>
<li><a href="https://gbracha.blogspot.com/">Newspeak</a> by Gilad Bracha. I was utterly blown away by this. I <em>never</em> thought I'd think "Wow, that looks better than LISP for building languages!"</li>
<li>\<a href="http://www.intentsoft.com/"" target="_blank" rel="noopener noreferrer">Intentional Software as presented (and explained at the bar) by Magnus Christerson. I think I finally "get" intentional programming and, with that epiphany, reverse from being extraordinarily skeptical of its value to being extraordinarily impatient about getting my hands on it.</li>
</ul>
<p><strong>Most impressive application</strong>:</p>
<ul>
<li><a href="https://www.resolversystems.com/">ResolverOne</a> from Giles Thomas and Resolver Systems. Hands-down brilliant. The top half of the screen is a spreadsheet, something familiar to 100,000,000 users. The bottom half of the screen is a programming editor. Click in the programming editor, type:</li>
</ul>
<!-- -->
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="nv">def</span><span class="w"> </span><span class="nv">foo</span><span class="ss">(</span><span class="nv">v</span><span class="ss">)</span><span class="w"> </span>:<span class="w"> </span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nv">v</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span>
</code></pre></div>
<p>Click on the spreadsheet, put "1" in A1, and in A2 "=foo(A1)" and see the results of your Python function. Look back in the programming editor and see your spreadsheet expressed programmatically. I intend to write more about Resolver soon. Like OneNote, this is one of those applications that give you a shock of recognition -- "Yes! This is what I want!" -- and makes you lament how much effort we spend gilding lilies in our industry when we ought to be spending our time out trying to come up with this kind of real innovation. (Plus: it's a fascinating development story... More tk.)</p>
<p><strong>Stupidest Thing I Said</strong>: "Why did the OLPC choose to emphasize Python when it ships with Smalltalk and Smalltalk is clearly a better--" At which point I was struck by a sock filled with quarters. Now, in defense, the sentence I'd <em>intended</em> to complete was <em>not,</em> as my assailants later asserted, "--<em>language</em>" (Hey, <em>I'm</em> the one wrote wrote "The myth of better programming languages") but "-- learning environment?" But even so, after Jim Hugunin's talk (in which it took him three lines of code to import the XNA framework, XBox controller library, and Microsoft Robotics Studio connection) and Giles Thomas' talk (<a href="https://www.resolversystems.com/">Resolver</a>), I withdraw from the field.</p>
<p><strong>Second-Stupidest Thing I Said</strong>: "Intentional Software? Simonyi's galley slaves? Those guys are the Duke Nukem 3D of programming -- they'll never ship!" "Well... actually we're in beta now, and have you seen the boat? It's quite nice."</p>
<p>P.S. I had to leave at mid-day Friday, meaning that I missed several talks that might have been highlights -- I was very much hoping to hear Chuck Esterbrook's talk on \<a href="http://cobra-language.com/"" target="_blank" rel="noopener noreferrer">Cobra, which takes Eiffel-style Contracts and extends them with integrated test-specification (finally!).</p>Off to Lang.NET2008-01-27T08:29:00-10:002008-01-27T08:29:00-10:00larrytag:knowing.net,2008-01-27:/posts/2008/01/off-to-langnet/<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/OfftoLang.NET_745E/image_4.png"></a>></p>
<p><img alt="image" height="127" src="http://www.knowing.net/content/binary/WindowsLiveWriter/OfftoLang.NET_745E/image_thumb_1.png" width="106"><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/OfftoLang.NET_745E/image_2.png"><img alt="image" height="138" src="http://www.knowing.net/content/binary/WindowsLiveWriter/OfftoLang.NET_745E/image_thumb.png" width="160"></a>Yesterday I went swimming on a coral reef in 100' visibility with whales singing so loud that I almost expected to see them underwater. For the next 3 days, I'll be in Seattle, where I assume they have this thing I hear about called "heating."</p>
<p>Actually, after canceling the trip …</p><p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/OfftoLang.NET_745E/image_4.png"></a>></p>
<p><img alt="image" height="127" src="http://www.knowing.net/content/binary/WindowsLiveWriter/OfftoLang.NET_745E/image_thumb_1.png" width="106"><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/OfftoLang.NET_745E/image_2.png"><img alt="image" height="138" src="http://www.knowing.net/content/binary/WindowsLiveWriter/OfftoLang.NET_745E/image_thumb.png" width="160"></a>Yesterday I went swimming on a coral reef in 100' visibility with whales singing so loud that I almost expected to see them underwater. For the next 3 days, I'll be in Seattle, where I assume they have this thing I hear about called "heating."</p>
<p>Actually, after canceling the trip because I had such a non-productive, unlucky, and generally lousy January I decided at the last minute that the best thing in the world for me was to be in a room filled with people who totally out-class me.</p>
<p>My plan had been to spend, like, 6 weeks developing something and then saying "Well, I threw this together on the flight over..." and then have people say "well, it sucks of course, but for a plane flight, it's not bad." Now I'll just sit quietly in the corner. I'll be the guy wearing three layers of sweater over an aloha shirt....</p>SapphireSteel Previews Ruby On Rails Visual Designer2008-01-27T07:00:00-10:002008-01-27T07:00:00-10:00larrytag:knowing.net,2008-01-27:/posts/2008/01/sapphiresteel-previews-ruby-on-rails-visual-designer/<p>Definitely looks worth checking out:</p>
<p><img alt="image" height="484" src="http://www.knowing.net/content/binary/WindowsLiveWriter/SapphireSteelPreviewsRubyOnRailsVisualDe_E613/image_3.png" width="620"></p>Practical Mathematics: You Should Wait For The Bus2008-01-26T07:00:00-10:002008-01-26T07:00:00-10:00larrytag:knowing.net,2008-01-26:/posts/2008/01/practical-mathematics-you-should-wait-for-the-bus/<p>I used to live several miles from Harvard Square, which was (a) a destination in and of itself and (b) the last stop on the Red Line (back in the day). I used to live about 5 minutes from the Belmont Center route, which ran occasionally, and about 15 minutes …</p><p>I used to live several miles from Harvard Square, which was (a) a destination in and of itself and (b) the last stop on the Red Line (back in the day). I used to live about 5 minutes from the Belmont Center route, which ran occasionally, and about 15 minutes from the Waverly Square route, which ran more frequently. However, if I went to the Belmont Center route and walked another 20 minutes, I could get to an intersection served by the Arlington buses <em>as well as</em> the Belmont Center bus. However, doing so involved <em>abandoning</em> the Belmont Center route for about 5 minutes, during which, of course, the bus for which I had been waiting might very well drive by... </p>
<p>Aside from trying to figure out if you got more, less, or identically wet by running or walking through the rain, the question of how best to get to Harvard Square was a central preoccupation of my teenage years. <a href="https://arxiv.org/abs/0801.0297">Mathematicians have concluded that I should have waited for the bus</a>.</p>Programmer Productivity Pumped Post Picture-Picking Paradigm?2008-01-25T23:42:00-10:002008-01-25T23:42:00-10:00larrytag:knowing.net,2008-01-25:/posts/2008/01/programmer-productivity-pumped-post-picture-picking-paradigm/<p>Mitch Barnett responds to \<a href="http://www.knowing.net/PermaLink%2cguid%2cfde0f610-3773-47b8-9be6-d6e5a8a76858.aspx"" target="_blank" rel="noopener noreferrer">No Silver Programmers with a discussion of visual programming in BizTalk:</p>
<blockquote>
<p>[Y]ou drag n dropped onto the canvas (kinda like Visio) and then you would set a bunch of design …</p></blockquote><p>Mitch Barnett responds to \<a href="http://www.knowing.net/PermaLink%2cguid%2cfde0f610-3773-47b8-9be6-d6e5a8a76858.aspx"" target="_blank" rel="noopener noreferrer">No Silver Programmers with a discussion of visual programming in BizTalk:</p>
<blockquote>
<p>[Y]ou drag n dropped onto the canvas (kinda like Visio) and then you would set a bunch of design time properties and sometimes call out to some C# assemblies, or web services or adapters, but most often it was a matter of using the design surface, which included a designer for mapping one file format to another and a rules engine design surface, etc.</p>
<p>If you thought of the designers as "raising the level of abstraction" or a visual Domain Specific Language, in a lot of cases, not much real C# code was written ? you spent most of your time in this abstract kind of world. Point being, when I was hiring programmers, like in the traditional sense of yeah, I can write lots of C#, I found that some programmers found using the designers, very easy and others, just could not get their heads wrapped around, to the point, that they could not actually do the job ? period. </p>
<p>Meaning that in this specialized instance, I found <em>programmer productivity was totally dependant on how well your head dealt with abstractions and not traditional programming constructs ? to the point where some of my guys could whip out a BizTalk solution in a matter of days, others maybe a week or so and others, never.</em></p>
<p>[Emphasis Added]</p>
</blockquote>
<p>Just to be a skeptic, I'm not sure that there's just 1 thing (raising the abstraction level) going on when you're developing on a design surface. You're engaging the visual and spatial and pattern-recognition components of a your mind in a way that, perhaps, leads to different problem-solving skills (whether inherent or learned). I dunno'. The interesting thing would be to study the problem-solving ability of developers using a visual design surface with an equivalently high-level abstraction that used a text representation (<strong>block_1 = new Foo; block_2 = new Bar; block_1.outputPlug1 -> block_2.inputPlug1;</strong> etc...)</p>
<p>A related point, and an important one, is that different languages "engage" your mind in different ways and part of the joy of being a computer programmer is finding a good match (or better yet, good matches) for your particular wiring. Personally, I quite like pictures in some development tasks, but have never found a visual design surface that actually delivered a high-enough level of abstraction (in terms of "things you can do with code," i.e., meta-programming, reflection, code generation).</p>Hackstat : A Framework for Software Development Process Data2008-01-25T07:00:00-10:002008-01-25T07:00:00-10:00larrytag:knowing.net,2008-01-25:/posts/2008/01/hackstat-a-framework-for-software-development-process-data/<p>Philip Johnson tells me by email of <a href="https://code.google.com/archive/p/hackystat">Hackystat</a>:</p>
<blockquote>
<p>[A]n open source framework for collection, analysis, visualization, interpretation, annotation, and dissemination of software development process and product data....</p>
<p>Hackystat aspires to be the "Apache" of software engineering measurement systems: open source, standalone, scalable, extensible, and platform and technology neutral.</p>
<p>Our …</p></blockquote><p>Philip Johnson tells me by email of <a href="https://code.google.com/archive/p/hackystat">Hackystat</a>:</p>
<blockquote>
<p>[A]n open source framework for collection, analysis, visualization, interpretation, annotation, and dissemination of software development process and product data....</p>
<p>Hackystat aspires to be the "Apache" of software engineering measurement systems: open source, standalone, scalable, extensible, and platform and technology neutral.</p>
<p>Our current thrust with Hackystat is "Collective Intelligence for Software Developers", and we are thinking about things like annotable Simile/Timeline representations, mashups with Facebook and Twitter, and other ways to create a kind of collaborative sense-making between man and machine so that metrics can be reliably and efficiently refined into actionable knowledge.</p>
</blockquote>
<p>I've long been a fan of metrics, but traditionally programmers have resisted the introduction of metrics due to a (probably reasonable) fear that simplistic measurements would be tied to performance reviews, e.g., "Gee, you didn't add nearly as many lines of code to the system as Bob. No raise for you!"</p>
<p>Hopefully, the time of such fears has passed and Hackystat or a similar project will start giving us some of that missing data.</p>Me Filming A Jellyfish2008-01-25T07:00:00-10:002008-01-25T07:00:00-10:00larrytag:knowing.net,2008-01-25:/posts/2008/01/me-filming-a-jellyfish/<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/MeFilmingAJellyfish_F961/image_2.png"><img alt="image" height="425" src="http://www.knowing.net/content/binary/WindowsLiveWriter/MeFilmingAJellyfish_F961/image_thumb.png" width="644"></a></p>
<p>This is a photo by Wayne Levin, an incredible photographer who stars in a new video for Hawaiian tourism</p>
<p>While I'm at it, this is one Wayne took of Tina, bluewater freediving near a fish-aggregating buoy:</p>
<p><a href="http://www.knowing.net/content/binary/WindowsLiveWriter/MeFilmingAJellyfish_F961/image_4.png"><img alt="image" height="417" src="http://www.knowing.net/content/binary/WindowsLiveWriter/MeFilmingAJellyfish_F961/image_thumb_1.png" width="644"></a></p>Development Homeruns2008-01-24T07:00:00-10:002008-01-24T07:00:00-10:00larrytag:knowing.net,2008-01-24:/posts/2008/01/development-homeruns/<p>In email, Charles Gallo makes a point regarding "No Silver Programmers":</p>
<blockquote>
<p>I think the HUGE difference between the mean programmer, and the silver bullet programmer is NOT how fast they can code "x" function points. The HUGE difference is when they sit down to solve a problem, and they can …</p></blockquote><p>In email, Charles Gallo makes a point regarding "No Silver Programmers":</p>
<blockquote>
<p>I think the HUGE difference between the mean programmer, and the silver bullet programmer is NOT how fast they can code "x" function points. The HUGE difference is when they sit down to solve a problem, and they can come up with an "elegant" solution to the problem that takes 1/2 the number of function points (or less), and therefore even the average programmer writing the design that these super programmers came up with would do it in 1/2 the time and with 1/2 the bugs (because there is 1/2 as much code).</p>
</blockquote>
<p>This is definitely a fair point -- good programmers sometimes hit home runs. I had a case in point last year, when I had a client that had a problematic partner. The partner had a solution that they believed to involve such a huge barrier to entry that they could charge whatever they want, not respond to user needs, etc. Well, sadly for the partner, the barrier to entry was "write a parser."</p>
<p>Parsers <em>are</em> hard if you don't know what you're doing. Given their adamant refusal to make requested changes (not "that will take time" or "that will take money" but "no, that cannot be done") and confidence in their position, I strongly suspect that their parsing code was a very big, very complex hairball of hand-crafted code. On the other hand, I had <a href="https://www.antlr.org/">Antlr</a>, the Visitor pattern, and a couple weeks.</p>
<p>But the question is not "do homeruns exist?" but "To what extent is overall productivity affected by homeruns?"</p>
<p>This is a hard question to answer. On the one hand, you can say "Homeruns are infrequent -- even the best programmers spend a lot of their time doing mundane work." On the other hand, you can say "Homeruns, though infrequent, have ongoing effects on the system. Implementing a new Visitor over a nice AST is easy, if not entirely trivial." And, sometimes, a homerun can be something like Google's PageRank and have consequences vastly greater than "who has above-average productivity?"</p>
<p>I'm going to try to wiggle out of the conundrum by saying that homeruns (or even "extra-base hits") more often come from design and architectural decisions than from actual <em>coding</em> techniques. Not always, but more often. And once you raise the question of the distribution or impact of <em>architectural</em> talent, I don't think we have <em>any</em> data. And since we don't have any data about it, I think it's very hard to reason about it. I have my biases (I strongly distrust architects who don't code) but I respect the opposite belief (architects are less effective if they are busy "in the weeds").</p>Reading on a Kindle : I Miss The Weight of Pages Transferring From Right to Left2008-01-23T07:00:00-10:002008-01-23T07:00:00-10:00larrytag:knowing.net,2008-01-23:/posts/2008/01/reading-on-a-kindle-i-miss-the-weight-of-pages-transferring-from-right-to-left/<p>I'm now reading Dan Simmons' <em>The Terror</em> on my Kindle. He's a very competent writer, and perhaps it's his very slow, very claustrophobic build-up (which he'd d*** well better pay off) that makes it so noticeable, but I have to say that I'm very aware of a certain "running on …</p><p>I'm now reading Dan Simmons' <em>The Terror</em> on my Kindle. He's a very competent writer, and perhaps it's his very slow, very claustrophobic build-up (which he'd d*** well better pay off) that makes it so noticeable, but I have to say that I'm very aware of a certain "running on a treadmill" sensation when reading on the Kindle.</p>
<p>I turn pages, <em>click click click</em>, and the story progresses, but the only token of my progress is a bar at the bottom (the same length for all material, no matter the word count) that occasionally deigns to darken another pip. Like the animated plane on the in-flight display, this is almost worse than no indicator at all ("We still aren't past Nebraska?" Wait for it... wait for it ... <em>tick</em> it moves a single pixel...).</p>
<p>Especially with thrillers, the book-reading experience includes the <em>sensation</em> of the story moving from right-hand to left. It includes the canny appraisal of the upper-right corner, when the remaining pages become individualized -- "An hour more, then! I can miss the sleep!" The force of will to read every clause as the thumb holds down only the last 3 pages...</p>Stephen J. Gould on Baseball : May Relate to Programmer Productivity2008-01-23T07:00:00-10:002008-01-23T07:00:00-10:00larrytag:knowing.net,2008-01-23:/posts/2008/01/stephen-j-gould-on-baseball-may-relate-to-programmer-productivity/<p>Andrew Dalke reminded me of an essay by Stephen J. Gould (discussed at:</p>
<p><a href="https://michaelshermer.com/1996/10/bicycles-baseball-bacteria-and-bach/">http://www.michaelshermer.com/1996/10/bicycles-baseball-bacteria-and-bach/</a> and <a href="https://www.motherjones.com/politics/1997/01/stephen-jay-gould/">http://www.motherjones.com/commentary/columns/1997/01/outspoken.html</a>) about the decreasing deviation in performance as a field matures. Relating it to the old studies on programming productivity …</p><p>Andrew Dalke reminded me of an essay by Stephen J. Gould (discussed at:</p>
<p><a href="https://michaelshermer.com/1996/10/bicycles-baseball-bacteria-and-bach/">http://www.michaelshermer.com/1996/10/bicycles-baseball-bacteria-and-bach/</a> and <a href="https://www.motherjones.com/politics/1997/01/stephen-jay-gould/">http://www.motherjones.com/commentary/columns/1997/01/outspoken.html</a>) about the decreasing deviation in performance as a field matures. Relating it to the old studies on programming productivity, Dalke wonders:</p>
<blockquote>
<p>If that applies to programming, and I expect that's a strong confounding effect, then those 1980-era studies have another problem - the field was too new. Many of the good programmers my age have been programming since high school or earlier, so about 20 years. Who in the 1980s had that background?</p>
</blockquote>"Real World Haskell" Book In Public Beta2008-01-22T15:31:00-10:002008-01-22T15:31:00-10:00larrytag:knowing.net,2008-01-22:/posts/2008/01/quotreal-world-haskellquot-book-in-public-beta/<p>Haskell is a language that is pretty hard to "just pick up" (especially if you are mostly familiar with mainstream, C-derived languages). Perhaps "<a href="http://book.realworldhaskell.org/read/">Real World Haskell</a>" by Bryan O'Sullivan, Don Stewart, and John Goerzen will help the language (much beloved in academia) increase in popularity.</p>The Compounding Value of Programmers & Processes2008-01-22T08:39:00-10:002008-01-22T08:39:00-10:00larrytag:knowing.net,2008-01-22:/posts/2008/01/the-compounding-value-of-programmers-amp-processes/<p>In reaction to No Silver Programmers, several people have spoken to the compounding benefits of good programmers (or the compounding pain of bad programmers). This is an excellent point. I think it's best put in \<a href="http://www.valuedlessons.com/2008/01/garlic-programmers-for-silver-code.html"" target="_blank" rel="noopener noreferrer …</p><p>In reaction to No Silver Programmers, several people have spoken to the compounding benefits of good programmers (or the compounding pain of bad programmers). This is an excellent point. I think it's best put in \<a href="http://www.valuedlessons.com/2008/01/garlic-programmers-for-silver-code.html"" target="_blank" rel="noopener noreferrer">this blog post, which takes the focus away from the developers and speaks of the quality of the codebase and the ease with which changes can be made.</p>
<blockquote>
<p>[N]o one ever talks about code base productivity. If we do, where does it lead us?...[D]oing many common tasks in this code easily took 3x longer than necessary....[S]o bad that I was almost giddy whenever I could work on the new-style code. I'm sure you know what kind of code I'm talking about. Doing anything in this code easily took 3x even longer....A good code base makes any programmer more productive....</p>
<p><strong>Maybe silver programmers don't exist. But is there "silver code"?</strong></p>
<p><strong>[\<a href="http://www.valuedlessons.com/2008/01/garlic-programmers-for-silver-code.html"" target="_blank" rel="noopener noreferrer">Valued Lessons]</strong></p>
</blockquote>
<p>The author thinks "yes" and I agree. I alluded to this in my original post, but consider this curve:</p>
<p>This curve -- the cost of a change in software increases exponentially over time -- was <em>gospel</em> in the world of software development until less than a decade ago. It was absolutely accepted that, essentially, as the artifacts of software development (requirements, documentation, and, of course, source code) grew in size and complexity, the cost of making a change became ever-higher. In other words, as value grew in more-or-less linear form (one more feature), complexity grew in a non-linear form (like compounded interest).</p>
<p>About a decade ago, Kent Beck said "What if that assumption is wrong? What if we could have a curve like:</p>
<p>How would our processes and artifacts have to change to make that come about?"</p>
<p>And his conclusion was "Yes, we can achieve that second curve," by the processes that he called "Extreme Programming."</p>
<p>(One of the reasons why I was so heated in "No Silver Programmers" is precisely because the canard of "5% 20x productivity" not only accepts but <em>exaggerates</em> received wisdom. Just as Beck changed the industry by questioning the received wisdom of exponential cost increases, we cannot afford to perpetuate the myth of super-programmers.)</p>
<p>The way to achieve that second curve (which we can call the "agile cost curve") is, ultimately, to have a "silver codebase." (Well, a silver "artifact" base, because you have to do documentation and training and all of that stuff.) If the complexity of your codebase is growing non-linearly, no programmer (no matter their linear multiple of base productivity) can give you that second curve.</p>
<p>The point is that no heroic performance can change the <em>shape</em> of the exponential rise in cost over time. Tool choices don't change the <em>shape</em> either. What changes the <em>shape</em> of the rise in cost over time are <em>practices</em>.</p>
<p>So, the question becomes "How do you develop and <em>maintain</em> a silver codebase?" And it's widely believed that we <em>have</em> some answers to that:</p>
<ul>
<li>Refactoring (continual rewrites of the codebase rather than simple accretion)</li>
<li>Incremental delivery with shorter timeframes (feedback and validation rather than the risk of diverging concepts)</li>
<li>An emphasis on quality during development (increased cohesion, decreased coupling, improved project guidance)</li>
<li>Preference for working code over documentation</li>
</ul>
<p>Of course, practices are dependent on people -- all the people on the team. To me, a good programmer is one who contributes to the practices that maintain a "silver codebase" -- no matter how quickly they write code! Bad programmers are those who don't care about the quality of the codebase, either due to:</p>
<p>\<</p>
<p>ul></p>
<p>Arrogance ("Oh, that's not a problem. I can fix that in a couple minutes." "I just pulled an all-nighter!")</p>
<p>Lack of discipline ("Works on my machine!" "I'm done when I see my feature run the first time")</p>
<p>The wrong temperament (delete a loop to hoist a variable)</p>
<p>In addition, the quality of the programmers contribute additionally to the interpersonal dynamics of the team, likelihood of a disastrous miscommunication, etc. So, the interesting question <em>then</em> becomes "How do we <em>maintain</em> that second curve in the face of bringing in new developers?" In recent posts relating to programming talent, I know I've come across as a hard-ass (even though I'm a sweet guy, love my dog, wave people in at intersections, etc.). That's because I've <em>reluctantly</em> concluded that the "agile cost curve" is <em>not stable</em> in the face of poor hires.</p>
<p>In an agile team, there is a great emphasis on individual responsibility. We all learn new practices. We all make mistakes. We all break the build. In such a team, an <em>irresponsible</em> developer (not a slow developer, not an inexperienced developer) can subvert the entire process. And the result, in my experience, is that the "agile cost curve" can jump right back to the classic, exponential cost curve.</p>
<p>\<a href="http://www.knowing.net/PermaLink%2cguid%2cf6755acf-e8df-4f32-8d53-39b9a01992f5.aspx"" target="_blank" rel="noopener noreferrer">Bad programmers are not good programmers who are slow. They are actively counter-productive to the team.</p>Tina's fine2008-01-18T14:55:00-10:002008-01-18T14:55:00-10:00larrytag:knowing.net,2008-01-18:/posts/2008/01/tinas-fine/<p>She's got to get a CT to confirm, but basically the Doctor told her "no problem." So ends probably the least-productive week of the past several years...</p>
<p>My sincere thanks to everyone who got in touch and kept us in your thoughts. It really helped.</p>Live Action Popfly Tutorial2008-01-17T07:00:00-10:002008-01-17T07:00:00-10:00larrytag:knowing.net,2008-01-17:/posts/2008/01/live-action-popfly-tutorial/<p>Sometimes I move a penny around on a poster, but <a href="http://www.popfly.com/Videos/%3fvideo%3dliLiveAction">this tutorial of creating a Popfly mashup takes things up a notch</a>.</p>Test from reinstalled Live Writer2008-01-16T09:26:00-10:002008-01-16T09:26:00-10:00larrytag:knowing.net,2008-01-16:/posts/2008/01/test-from-reinstalled-live-writer/<p>asdfasdasdf</p>Sun Buys MySQL2008-01-16T08:23:00-10:002008-01-16T08:23:00-10:00larrytag:knowing.net,2008-01-16:/posts/2008/01/sun-buys-mysql/<p>My initial reaction to this is fear that Sun will try to force things a little too hard. When I think of MySQL, I think of ease-of-use and reliability. When I think of SQL Server and Oracle, I think of the ancillary tools and the fierceness with which DBAs cling …</p><p>My initial reaction to this is fear that Sun will try to force things a little too hard. When I think of MySQL, I think of ease-of-use and reliability. When I think of SQL Server and Oracle, I think of the ancillary tools and the fierceness with which DBAs cling to their specialized knowledge. DBAs don't have the programmers predilection to throw aside their tools for The Next Big Thing.</p>Kicking Around the Monads2008-01-16T08:13:00-10:002008-01-16T08:13:00-10:00larrytag:knowing.net,2008-01-16:/posts/2008/01/kicking-around-the-monads/<p>Actually, just a brief post. LINQ has injected into the mainstream a whole range of functional programming topics previously seen as esoteric. Putting aside the merits of each of them, the interesting dynamic to watch will be if these approaches generate a new sub-niche of programming. For instance, C++ templates …</p><p>Actually, just a brief post. LINQ has injected into the mainstream a whole range of functional programming topics previously seen as esoteric. Putting aside the merits of each of them, the interesting dynamic to watch will be if these approaches generate a new sub-niche of programming. For instance, C++ templates led to template metaprogramming, just such a sub-niche. To what extent will awareness of lambda functions and monads be <em>integrated</em> into mainstream awareness and to what extent will they exist as a self-perpetuating "eddy" in the mainstream? (Or will functional programming actually spread and come to be a dominant way of thinking about software construction in the same way that objects did? I still view it as unlikely, but not nearly as low-chance as I did a few years ago.)</p>Bad Programmers Are Not Good Programmers Who Are Slow2008-01-14T17:40:00-10:002008-01-14T17:40:00-10:00larrytag:knowing.net,2008-01-14:/posts/2008/01/bad-programmers-are-not-good-programmers-who-are-slow/<p>In response to "No Silver Programmers," a commenter points out:</p>
<blockquote>
<p>Say I'm a pretty good developer and there's this guy who is 5x worse than me, meaning it takes him a full work week to finish what i will finish in a day.</p>
<p>but then, what happens when it has …</p></blockquote><p>In response to "No Silver Programmers," a commenter points out:</p>
<blockquote>
<p>Say I'm a pretty good developer and there's this guy who is 5x worse than me, meaning it takes him a full work week to finish what i will finish in a day.</p>
<p>but then, what happens when it has 3x as many bugs, and it takes him 5x the time to fix each one? suddenly we're at 15x for the bug fixing phase. and actually, it should take him more than 5x as long to fix each one -- fixing bugs is much harder the more there are in the same code, and harder the longer it the time between writing them and finding them. (and think about how much more time occurs between writing a bug and fixing one for this guy compared to me -- he has 3x as many bugs, often blocking other bugs from being found and always blocking other bugs from being fixed, and he takes 5x as long to fix each one...)</p>
<p>and it doesn't scale linearly when we look at code that will take me a month. that's going to take him more than 5 months. his design mistakes will pile up and his buggy code will pile up. something that takes me a year he may simply be incapable of doing.</p>
</blockquote>
<p>Yes. Further, a team with him on it will require more coordination than one made of average-or-better developers. A 90% finished system will suddenly reveal a crucial weakness because of his work violating encapsulation or somesuch.</p>
<p>Bad programmers are not good programmers who are slow. They are <em>actively</em> counter-productive to the team.</p>
<p>This is another great point why, to improve your team's productivity, it's important to focus not on the hope that you can discover a magical super-programmer but on rooting out incompetence.</p>No Silver Programmers2008-01-14T13:36:00-10:002008-01-14T13:36:00-10:00larrytag:knowing.net,2008-01-14:/posts/2008/01/no-silver-programmers/<p>Someone who should know better gave a commencement address based on the premise "<a href="https://www.artima.com/weblogs/viewpost.jsp?thread=221622">5% of programmers are 20x more productive than the other 95%</a>." This is utter BS and it's important to say so. First, as boring as it may be to say "we don't have the data," go to …</p><p>Someone who should know better gave a commencement address based on the premise "<a href="https://www.artima.com/weblogs/viewpost.jsp?thread=221622">5% of programmers are 20x more productive than the other 95%</a>." This is utter BS and it's important to say so. First, as boring as it may be to say "we don't have the data," go to scholar.google.com and find me a peer-reviewed study of individual programmer productivity among <em>professionals</em> not students. I'll wait. What did you find? <strong>1992</strong>'s <a href="https://www.computer.org/10.1109/32.67600">Watts Humphrey</a> study? <a href="https://dl.acm.org/errorpgs/404.html">DeMarco's 1989 references to Coding Wars</a> (the source for <em>Peopleware</em> and the likely source of the misquote in the commencement)? Maybe <strong>1981</strong>'s work by \<a href="http://portal.acm.org/citation.cfm%3fdoid%3d539425"" target="_blank" rel="noopener noreferrer">Barry Boehm? The literature <strong>sucks</strong>. Anyone, including me, who tells you anything about software development productivity is telling you beliefs, not science. Understanding that is <strong>vital</strong>: the <strong>entire agile revolution is based on revisiting cost assertions taken as gospel.</strong> "What if the cost of a change didn't increase over time?" <em>That</em> question is why the practices followed by the best software developers today have little in common with the practices of ten years ago.</p>
<p>So, accepting that everything anyone says about this is anecdotal...</p>
<p>Do programmers vary in their productivity? Absolutely. Is there a small percentage of programmers who are very much more productive than average? Absolutely. Are they 20x more productive than those not in their ranks? Absolutely not. The numbers quoted in Peopleware strike me as most realistic: the best are near 3x median and 10x worst. In other words, <strong>the significant thing is not that some professional programmers are awesome, it's that some professional programmers suck.</strong></p>
<p>Doesn't that explain your world better? Have you ever met someone 20x better than you? Seriously, a <em>day</em> to do what you could produce in a <em>month</em> of undistracted, phones-off, heads-down programming sessions? Of course not. But have you met someone who's 5x worse than you? Who you say "It took you a <em>week</em> to do this?" I'm going to guess yes.</p>
<p>That incompetents can stay in the profession is not nearly as mysterious and fun as a secret society of magical programmers. It's a lot more gratifying to think "I've never met anyone 20x better than me, so therefore I'm part of the elite," than "What does it mean that Bob and I have similar titles?"</p>
<p><em>Programmer</em> productivity is essentially code creation: develop a function that satisfies specification X. I <em>love</em> code creation; I used to run a newsletter called "Those Who Can, Code." I write software to help me deal with stress. But code creation is not what spells the difference in <em>software development productivity,</em> for which I absolutely believe that teams can achieve a significant multiple (perhaps 10x) over median productivity.</p>
<p>Software development productivity is the rate at which you deliver value to the client. If good data on the productivity of code creation is lacking, good data on software development productivity is essentially non-existent. It's extraordinarily difficult to measure. Measuring satisfaction is an insufficient proxy, because satisfaction will tend to be a delta from the last experience, not an absolute.</p>
<p>There are only a few things we can say with certainty about software development productivity:</p>
<ul>
<li>We don't generally do a great job at it</li>
<li>Processes can improve it, if the processes are a good fit to the team</li>
<li>Tools can improve it, if the tools are a good fit to the team</li>
<li>It is <strong>always</strong> a people issue</li>
</ul>
<p>Now I've come full circle to agree with the conclusion of the commencement address.</p>
<p>--</p>
<p>What does the actual sparse data say? This is the graph from DeMarco's Coding Wars paper, the graph that is generalized in Peopleware (where the probably-significant shading of COBOL entries is missing):</p>
<p>(Remember "good" is to the left, not the right!)</p>
<p>Pretty shaky foundation for the whole damn super-programmer myth, wouldn't you say?</p>I'm Physically Sick With Fear2008-01-13T13:28:00-10:002008-01-13T13:28:00-10:00larrytag:knowing.net,2008-01-13:/posts/2008/01/im-physically-sick-with-fear/<p>Tina was diagnosed with leukemia when she was 29 and we were newlyweds. Two years ago, she was diagnosed with breast cancer. I got home from a business trip to find out that her routine dental x-rays had led to a referral to a dental surgeon because two things might …</p><p>Tina was diagnosed with leukemia when she was 29 and we were newlyweds. Two years ago, she was diagnosed with breast cancer. I got home from a business trip to find out that her routine dental x-rays had led to a referral to a dental surgeon because two things might be cancerous. One a shadow, the other white like another tooth. "With your history, just to be sure," the dentist said, but didn't offer a "but there are lots of other things that are more likely."</p>
<p>You Google "jaw cancer" and you hear about oral cancers in general -- bad -- or osteosarcoma -- bad.</p>
<p>She sees the surgeon on Friday.</p>Aging is the New Working2007-12-31T10:49:00-10:002007-12-31T10:49:00-10:00larrytag:knowing.net,2007-12-31:/posts/2007/12/aging-is-the-new-working/<p>I was reading <a href="https://www.pcmag.com/">PC Magazine's</a> 25th anniversary issue in which they have the evergreen "what will the future bring?" essays. I was struck by how much talk of medical stuff (nanobots, non-invasive diagnosis, ubiquitous this-and-that) there was. And then it struck me:</p>
<p>Boomers.</p>
<p>Just as they do with every damn …</p><p>I was reading <a href="https://www.pcmag.com/">PC Magazine's</a> 25th anniversary issue in which they have the evergreen "what will the future bring?" essays. I was struck by how much talk of medical stuff (nanobots, non-invasive diagnosis, ubiquitous this-and-that) there was. And then it struck me:</p>
<p>Boomers.</p>
<p>Just as they do with every damn thing, boomers define the mainstream concern as "What does this mean to me?" In the past 25 years (to take PC Mag's benchmark) it went from work (what is technology about? Business productivity!) to family (what is technology about? HDTVs, Internet predators, and bluetooth-enabled minivans!) and now, of course, it will shift again.</p>
<p>What will technology be about for the 25 years? Getting old.</p>
<p>Just as you wish you'd written a spreadsheet program 25 years ago or Facebook 10 years ago (well, you would have been flushed away in the dot-com bust, but aside from that...), the thing to think about now are the killer applications for aging, whether that's medical support, post-retirement money management, or Am I Wrinkly Or Not?</p>Harry Pierson's Awesome "Practical Parsing in F#" Series of Posts2007-12-31T07:00:00-10:002007-12-31T07:00:00-10:00larrytag:knowing.net,2007-12-31:/posts/2007/12/harry-piersons-awesome-quotpractical-parsing-in-fquot-series-of-posts/<p>When I can shake some time free to actually learn F#, this awesome series of blog posts on "Practical Parsing in F#" is <em>definitely</em> something I'll revisit. Parsing is one of the better tasks for shaking free a large number of concepts about a programming language, since it invariably involves …</p><p>When I can shake some time free to actually learn F#, this awesome series of blog posts on "Practical Parsing in F#" is <em>definitely</em> something I'll revisit. Parsing is one of the better tasks for shaking free a large number of concepts about a programming language, since it invariably involves large and dynamic data structures, abstraction strategies, IO, etc.</p>UFO Drinking Game2007-12-30T12:52:00-10:002007-12-30T12:52:00-10:00larrytag:knowing.net,2007-12-30:/posts/2007/12/ufo-drinking-game/<p>When I was 10, this show was on Saturdays at 4:00 on UHF Channel 56. I watched the static-y, ghost-filled image on a black-and-white television with, I'd guess, a 17" screen that sat on a cheap aluminum rolling stand. I thought it was the greatest show <em>ever</em>. This weekend …</p><p>When I was 10, this show was on Saturdays at 4:00 on UHF Channel 56. I watched the static-y, ghost-filled image on a black-and-white television with, I'd guess, a 17" screen that sat on a cheap aluminum rolling stand. I thought it was the greatest show <em>ever</em>. This weekend, I discovered that it was actually filmed in vibrant-is-not-the-word color and that, while other people may lament that the future did not bring the flying cars and laser blasters of pulp SF, what I lament is the absence of a moonbase staffed by hot babes in go-go attire and purple wigs.</p>
<h2>21st Century Fashions by Sylvia Anderson</h2>
<p>Appearance of a new groovy outfit: sip</p>
<p>A new groovy outfit places inappropriate emphasis on a secondary sexual characteristic: drink</p>
<p>Conscious will incapable of keeping eyes from straying to groovily-attired secondary sexual characteristic: chug!</p>
<h2>1980: The Future</h2>
<p>The future seems inexplicably colorful: sip</p>
<p>The future seems unnervingly reliant on balsa wood and styrofoam construction: drink</p>
<p>You involuntarily exclaim "Yeah, that's <em>exactly</em> how things were in 1980!": chug!</p>
<h2>Hey Kids, Let's Put On A Show!</h2>
<p>Attention wanders from incomprehensible plot: sip</p>
<p>Actors seem to be on different pages re. how seriously to play scene: drink</p>
<p>Dramatic zoom!: chug!</p>Why The Mainstream Concurrency Model is Broken2007-12-30T09:45:00-10:002007-12-30T09:45:00-10:00larrytag:knowing.net,2007-12-30:/posts/2007/12/why-the-mainstream-concurrency-model-is-broken/<p><a href="https://devblogs.microsoft.com/oldnewthing/">Raymond Chen's psychic debugging of a deadlock is everything you need to know</a> about why the mainstream model of concurrency (in which programmer's manually manage locks and can start their own threads) is fundamentally broken.</p>
<p>If you're a C# or Java programmer looking at this code, you might be tempted …</p><p><a href="https://devblogs.microsoft.com/oldnewthing/">Raymond Chen's psychic debugging of a deadlock is everything you need to know</a> about why the mainstream model of concurrency (in which programmer's manually manage locks and can start their own threads) is fundamentally broken.</p>
<p>If you're a C# or Java programmer looking at this code, you might be tempted to throw the bozo bit and say "Yech! C!" but this is <em>precisely</em> the same situation that one ~~can~~ will see in any kind of complex, multithreaded application.</p>
<p>Sure, <em>Raymond Freakin' Chen</em> can quickly debug such situations, but most of us don't have <em>Raymond Freakin' Chen</em> on staff. And no matter how gently Chen tries to show us how easy it is, most of us simply don't have the capacity to develop rapid, accurate intuitions into the cause of problematic thread behavior in this model.</p>
<p>And even if such capacity <em>were</em> widespread, the discipline of never doing any form of external calling (message sending, virtual function calls, invoking callbacks, etc.) while holding a lock is never going to be universal and, so long as it's not universal, this type of problem is inevitable.</p>Wondering if Subversion is Good Enough2007-12-29T09:42:00-10:002007-12-29T09:42:00-10:00larrytag:knowing.net,2007-12-29:/posts/2007/12/wondering-if-subversion-is-good-enough/<p>For the past few years I've felt that Subversion was a "good enough" SCM system, but I am beginning to wonder about that. In practice, SVN hits bumps quite often, especially when doing things like moving files or directories. This is always easy enough for an experienced user to correct …</p><p>For the past few years I've felt that Subversion was a "good enough" SCM system, but I am beginning to wonder about that. In practice, SVN hits bumps quite often, especially when doing things like moving files or directories. This is always easy enough for an experienced user to correct ("svn cleanup" plus move the directories, delete the .svn hidden folders, move them back, etc.) but with my less-experienced clients I think these bumps are really clouding their valuation of SCM. In contrast, I used to have customers who felt SourceSafe was easy and used it, only to experience spectacular failures (corrupted stores).</p>
<p>Going forward, if I have a client who doesn't have an SCM system, I'm going to say: \<a href="http://www.sourcegear.com/"" target="_blank" rel="noopener noreferrer">Vault, <a href="https://www.perforce.com/">Perforce</a>, or <a href="https://visualstudio.microsoft.com/">VSTS</a> . It's too high a surface area (every developer) and too critical a function to be undermined by "it doesn't work on my machine."</p>Parsing Microsoft's "Emacs.Net"2007-12-28T15:47:00-10:002007-12-28T15:47:00-10:00larrytag:knowing.net,2007-12-28:/posts/2007/12/parsing-microsofts-quotemacsnetquot/<p>Via Chris Sells comes \<a href="http://www.douglasp.com/blog/2007/12/27/EmacsNet.aspx"" target="_blank" rel="noopener noreferrer">this cryptic message from Microsoft's Doug Purdy:</p>
<blockquote>
<p>We are looking for developers/testers to build a tool that I will roughly describe as "Emacs.Net".</p>
<p>No more details than …</p></blockquote><p>Via Chris Sells comes \<a href="http://www.douglasp.com/blog/2007/12/27/EmacsNet.aspx"" target="_blank" rel="noopener noreferrer">this cryptic message from Microsoft's Doug Purdy:</p>
<blockquote>
<p>We are looking for developers/testers to build a tool that I will roughly describe as "Emacs.Net".</p>
<p>No more details than that, but it should be enough to get your brain moving in the right direction.</p>
</blockquote>
<p>Which he then elaborates in comments:</p>
<blockquote>
<p>Emacs is a text editor. Emacs is used to write apps (and a whole lot more) on different platforms. Emacs is hyper-extensible. More at http://en.wikipedia.org/wiki/Emacs.<br>
Imagine if someone wanted to write something like Emacs.Net. Actually don't imagine it, it is happening.</p>
</blockquote>
<p>The literal reading of the post (a clone of emacs) is too absurd to credit. As put by a commenter:</p>
<blockquote>
<p>Neat, so you want to make a clone of a free, open-source, extensible text editor that is loved by millions and write your own closed-source, proprietary, extensible-with-subscription text editor of your own?</p>
</blockquote>
<p>Surely not.</p>
<p>So what are the relevant characteristics of emacs?</p>
<ol>
<li>text editor : But there are gazillions of text editors, including programming editors, on every platform already. Microsoft even has their own <a href="https://visualstudio.microsoft.com/">little system they seem to like</a>. Can you think of any computing context in which text-editing is often soured?</li>
<li>cross-platform : But Microsoft is a Windows company. I mean, sure they develop a couple things for the Mac, but le's face it, Microsoft doesn't really support other platforms. <a href="http://www.microsoft.com/silverlight/">Do they</a>?</li>
<li>very extensible : But emacs is extended with LISP. An editor that's extended with C# or VB only is going to seem less flexible. And you can already extend VS with those languages. To really have emacs-like "hyper-extensibility," you would have to extend it using language(s) that themselves are <a href="http://www.ruby-lang.org/">very</a> \<a href="http://www.python.org"" target="_blank" rel="noopener noreferrer">flexible.</li>
</ol>
<hr>
<p>Counting against this supposition (a Silverlight-hosted text editor based on the DLR) is that I believe that Doug Purdy works in the Workflow and Windows Communication Foundation (WCF / Indigo) teams, which isn't where I would expect such an initiative to flourish.</p>iPhone vs. Kindle2007-12-28T08:08:00-10:002007-12-28T08:08:00-10:00larrytag:knowing.net,2007-12-28:/posts/2007/12/iphone-vs-kindle/<p>A client bought me an iPhone for Christmas (more-financially-successful friend's instant reaction: "You aren't charging them enough.").</p>
<p>My reaction is that while it's an incredible gadget, it's a pale shadow of the Kindle when it comes to reading. I am dismayed by the number of people who say "Well, the …</p><p>A client bought me an iPhone for Christmas (more-financially-successful friend's instant reaction: "You aren't charging them enough.").</p>
<p>My reaction is that while it's an incredible gadget, it's a pale shadow of the Kindle when it comes to reading. I am dismayed by the number of people who say "Well, the iPhone <em>ought</em> to be the ultimate eBook reader." The screen resolution is a joke compared to the Kindle. I was reading MSNBC on the iPhone a few minutes, started up my laptop, and thought "Oh man, this is much easier to read." The Kindle screen is that much better than my laptop display than my laptop display is to the iPhone.</p>
<p>Sadly, though, the browser that comes in the Kindle is very poor and I can't help but wonder if Amazon isn't content to keep it that way (Web browsing on the Kindle is via Sprint, fully subsidized by Amazon).</p>
<hr>
<p>Having the Kindle for 6 weeks has made me realize how little I read mainstream books -- I read technical books (so far, none available in "native" Kindle format, although I've had luck converting PDFs from the Pragmatic Bookshelf) and a wide variety of magazines, none available on the Kindle. The lack of magazines is especially frustrating for me, since magazines come to Hawaii via boat and I receive them all a month or more after their cover data (and, of course, most subscribers receive their issues well <em>before</em> the cover date).</p>
<hr>
<p>Another iPhone reaction relates to its locked-in development. For the moment, the only way to write a 3rd-party app for the iPhone is to develop an iPhone-friendly Web page; there are a few proprietary extensions, but mostly it's CSS and JavaScript. I have to say that there's a certain "constraints are liberating" aspect to this: the vast majority of PDA programs (todo lists and so forth) are easily-enough ported to the Web.</p>
<hr>
<p>Newsgator's iPhone interface is excellent.</p>
<hr>
<p>It seems that the iPhone only syncs email and calendars with Outlook, which is a disappointment, since my Outlook install seems to have been poisoned (it only runs in /safe mode no matter how many times I run scanpst) and I have been seriously considering switching to Thunderbird.</p>Ruby 1.9 Available2007-12-26T10:27:00-10:002007-12-26T10:27:00-10:00larrytag:knowing.net,2007-12-26:/posts/2007/12/ruby-19-available/<p><a href="https://www.ruby-forum.com/t/ruby-1-9-0-is-released/124153">Ruby 1.9</a>, which involves a number of significant upgrades, is now available. This is development code, probably not ready for use in upcoming sprints / development cyclese, but I will be downloading it if for no other reason than to experiment with its <strong>Fibers</strong> implementation.</p>To Twitter, To Facebook, To Facebook Perchance to Slack? Aye, There's The Rub2007-12-26T08:52:00-10:002007-12-26T08:52:00-10:00larrytag:knowing.net,2007-12-26:/posts/2007/12/to-twitter-to-facebook-to-facebook-perchance-to-slack-aye-theres-the-rub/<p>A client bought me an iPhone for Christmas. It's a pretty darn slick gadget, although I doubt that I'll keep a phone plan on it (I'm pretty much either at home in my wifi bubble all day long and, when I go out, I'm often going to beaches and other …</p><p>A client bought me an iPhone for Christmas. It's a pretty darn slick gadget, although I doubt that I'll keep a phone plan on it (I'm pretty much either at home in my wifi bubble all day long and, when I go out, I'm often going to beaches and other salty places).</p>
<p>For the moment, though, I have an unlimited data plan. I may try Twittering and see if that becomes interesting. Here's my feed: http://twitter.com/lobrien</p>
<p>::: {style="width:176px;text-align:center"}</p>
<p><a href="https://twitter.com/lobrien">follow lobrien at http://twitter.com</a>
:::</p>Software To Join A "Slightly More Fit" Peer Group2007-12-23T09:36:00-10:002007-12-23T09:36:00-10:00larrytag:knowing.net,2007-12-23:/posts/2007/12/software-to-join-a-quotslightly-more-fitquot-peer-group/<p>Were I to graph the calories burned per week exercising for group in my social network (were I to bother maintaining my Facebook page), it would create a normal distribution. This graph would probably correlate pretty directly to their perceived fitness and their enthusiasm for exercising. Within this group I …</p><p>Were I to graph the calories burned per week exercising for group in my social network (were I to bother maintaining my Facebook page), it would create a normal distribution. This graph would probably correlate pretty directly to their perceived fitness and their enthusiasm for exercising. Within this group I could find a subgroup that was slightly-more-enthusiastic-than-average (and subgroups that were slightly-less- and considerably-more- etc.). </p>
<p>If I had a New Year's resolution to burn more calories per week exercising, I could compare myself with a subgroup whose mean calories/week was <em>slightly</em> more than my average. This would be more effective than comparing myself to my most-fit friends, whose enthusiasm and dedication to fitness is as unreachable as the skills of teenagers in Halo 3 (note clever allusion to TrueSkill).</p>
<p>As time went on and my New Year's Resolution waxed (or waned), the group used to determine my subgroup would shift (hopefully toward the more fit, but always to "slightly more motivated than your current evidence"). Note that it's possible for essentially everyone to be in such a group, given a large enough set, i.e., the set of people who are interested in getting more fit.</p>
<p>I understand there's money to be made in Facebook applications. Does such an application exist?</p>Acoustic Ranging With Cell Phones2007-12-09T07:00:00-10:002007-12-09T07:00:00-10:00larrytag:knowing.net,2007-12-09:/posts/2007/12/acoustic-ranging-with-cell-phones/<blockquote>
<p><a href="https://www.microsoft.com/en-us/research/products/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fdownloads%2Frss_redirect.aspx%253f0rc%253dd%2526id%253d1194">BeepBeep</a> is a high-accuracy acoustic ranging system for mobile phones. It supports Pocket PC phones running Windows Mobile 5.0 or subsequent versions.</p>
</blockquote>
<p>I'm not even going to pretend to have the time to play with this.</p>The Golden Compass: Neither Great nor Poor2007-12-08T09:22:00-10:002007-12-08T09:22:00-10:00larrytag:knowing.net,2007-12-08:/posts/2007/12/the-golden-compass-neither-great-nor-poor/<p>Gee, what a surprise, no CGI can do justice to "broken-down drunk exiled prince of the armored polar bears." But <em>The Golden Compass</em> was not nearly as incomprehensible to those who hadn't read the books as I thought it would be. My wife quite liked the movie and hadn't been …</p><p>Gee, what a surprise, no CGI can do justice to "broken-down drunk exiled prince of the armored polar bears." But <em>The Golden Compass</em> was not nearly as incomprehensible to those who hadn't read the books as I thought it would be. My wife quite liked the movie and hadn't been prepped for the story (other than by me saying things like "The books are <em>Lord of the Rings</em> good"). For one thing, the movie <em>starts</em> by explaining there's a multiverse, that daemons are souls, and that Dust is central to tying everything together.</p>
<p>My biggest problem with the movie, actually, was that it lacked Pullman's spine of suspense and discovery. Compared to the books, it was just one damn thing after another. I had other problems, too, like the alethiometer ("golden compass") being a freaking television set when <em>the whole point</em> was that it was symbolic.</p>
<p>The movie was actually <em>more</em> openly anti-Magisterium/Church than I remembered the first book being, which goes hand-in-hand with the overall simplification of the text: there is no question from the get-go who are allies and enemies. On the other hand, at this point the Magisterium is presented as a pseudo-militaristic fascist power and you'd have to be wound pretty tightly to bristle at what's on the screen. (Now, how they can do the <em>third</em> book without the anti-Narnia stuff being on the screen, I dunno'.)</p>
<hr>
<p>CGI's come an incredible way, of course, and fur seems to be a done deal (Pan as a wildcat was done well, and for that matter, Pan in general was very good, with lots of shapeshifting). I think with big animals (like, say, armored bears) they're still falling short. They don't give proper attention to musculature (which is amusing, because if you look at <em>300</em> or <em>Beowulf</em>, you see an attention to human muscles that borders on fetishistic). One of the sublime moments in my life was seeing the back of a blue whale flex as it dove and seeing the flex of muscles 3 feet wide. Power, more than scale, is what is humbling about large animals.</p>Tagging Languages And Monolithic Code2007-12-08T07:00:00-10:002007-12-08T07:00:00-10:00larrytag:knowing.net,2007-12-08:/posts/2007/12/tagging-languages-and-monolithic-code/<p>The biggest problem with tag-based languages (<strong>\<h1>\<% someCode %>\</h1></strong> : the ASPs, the ColdFusions, the PHPs...) is that they facilitate monolithic code. This is related the big criticism of XML and DOMs for data structures, too: they facilitate the creation of hierarchies, not graphs. (As always with programming, the issue is …</p><p>The biggest problem with tag-based languages (<strong>\<h1>\<% someCode %>\</h1></strong> : the ASPs, the ColdFusions, the PHPs...) is that they facilitate monolithic code. This is related the big criticism of XML and DOMs for data structures, too: they facilitate the creation of hierarchies, not graphs. (As always with programming, the issue is "facilitates" not "possible"...)</p>
<p>My dear friend "Bob" creates horrific pages that are hundreds and even thousands of lines long, with \<cfif> at line 100, and then a \<cfelse> at line 837 and then a ... and ColdFusion isn't valid XML and there's a combination of HTML indentation and ColdFusion code indenting.</p>
<p>Just absolutely impenetrable stuff, and while I'm more than willing to blame many problems on Bob, I think this is a problem that the tool he uses (ColdFusion) is facilitating.</p>Microsoft Volta Initial Reaction: Too RPC-y2007-12-07T09:55:00-10:002007-12-07T09:55:00-10:00larrytag:knowing.net,2007-12-07:/posts/2007/12/microsoft-volta-initial-reaction-too-rpc-y/<p>Microsoft's new Volta toolset allows developers to develop their applications using standard OOP techniques and then use "declarative tier-splitting" to specify which functions should run on the client and which on the server. Erik Meijer says:</p>
<blockquote>
<p><strong>...</strong>Volta starts with a client-side perspective. That is, once developers are satisfied with an …</p></blockquote><p>Microsoft's new Volta toolset allows developers to develop their applications using standard OOP techniques and then use "declarative tier-splitting" to specify which functions should run on the client and which on the server. Erik Meijer says:</p>
<blockquote>
<p><strong>...</strong>Volta starts with a client-side perspective. That is, once developers are satisfied with an application's functionality and fully understand the internal object interactions, they "decorate" the code with declarative attributes, or annotations, to indicate the parts of the application that should run on other tiers.... Moreover, Volta allows developers to delay irreversible decisions until the last responsible moment, greatly increasing the agility of development in intermediate phases where change is often rapid. Since developers initially create easy-to-manage, single-tier client applications, and then incrementally distribute parts to other tiers through a "refactoring" technique they are already familiar with, they can apply familiar skills to new problems ? reducing development cost and risk.</p>
</blockquote>
<p><strong>I've not explored Volta, but...</strong></p>
<p>This sounds like a bad idea to me. <strong>You can't refactor away the difference between an in-memory method call and an Internet message</strong>: one happens in nanoseconds and the other in milliseconds.</p>
<p>Meijer says "Volta dramatically reduces the amount of 'new stuff' developers must learn...." which is all well and good, but <strong>"Making lots of function calls over the Internet is a bad idea for performance, scalability, and maintenance"</strong> doesn't qualify as 'new stuff' and I think pretending otherwise is wrong-headed.</p>Mandelbrot via LINQ2007-12-07T08:05:00-10:002007-12-07T08:05:00-10:00larrytag:knowing.net,2007-12-07:/posts/2007/12/mandelbrot-via-linq/<p>Jon Skeet's generation of the Mandelbrot set via LINQ chaotically oscillates between absurdity and relevance, sensitive to the input of what aspect of concurrency you're thinking about. If you're thinking about efficiency, you rapidly head towards "absurd," but if you think about mental models, it rapidly heads towards relevance (by …</p><p>Jon Skeet's generation of the Mandelbrot set via LINQ chaotically oscillates between absurdity and relevance, sensitive to the input of what aspect of concurrency you're thinking about. If you're thinking about efficiency, you rapidly head towards "absurd," but if you think about mental models, it rapidly heads towards relevance (by way of "declarative programming"). But as soon as your train of thought moves forward, you may find yourself flung towards either side of the spectrum. <strong>I like it.</strong></p>
<p>Oh, by the way, I was going to say some things about chaotic oscillators and concurrency and I realized how sad it is that I've never mastered Flash (I can program Flash, but every time I do I have to go through a learning curve again). And then I thought about Silverlight 2.0 (nee 1.1), which I can't get to run on my dev machine because I quarantine alpha and beta products in VMs and for some reason I can't get Silverlight ... but then I thought about Mathematica and how it now has a runtime player ...</p>No Single Device Suitable for Different Reading Types?2007-12-03T07:00:00-10:002007-12-03T07:00:00-10:00larrytag:knowing.net,2007-12-03:/posts/2007/12/no-single-device-suitable-for-different-reading-types/<p>Jeff Duntemann (a great competitor/friend from the <em>Computer Language</em> days) <a href="https://jeff-duntemann.livejournal.com/127281.html">opines</a> that:</p>
<blockquote>
<p>[T]here are three different kinds of reading:</p>
<ul>
<li><em>Meditative reading</em> is reading to change your state of mind....</li>
<li><em>Autodidactive reading</em> is reading to teach yourself something....</li>
<li><em>Developmental reading</em> is reading within the process of creating texts for …</li></ul></blockquote><p>Jeff Duntemann (a great competitor/friend from the <em>Computer Language</em> days) <a href="https://jeff-duntemann.livejournal.com/127281.html">opines</a> that:</p>
<blockquote>
<p>[T]here are three different kinds of reading:</p>
<ul>
<li><em>Meditative reading</em> is reading to change your state of mind....</li>
<li><em>Autodidactive reading</em> is reading to teach yourself something....</li>
<li><em>Developmental reading</em> is reading within the process of creating texts for reading or presentation....</li>
</ul>
<p>What kind of reading we do bears heavily on what kind of ebook reader we'd like to have....</p>
<p>There will come a day when the tech is good enough so that all three kinds of reading can be done exclusively on electronic devices. But I'm also pretty sure that <em>a single device will not serve all kinds of reading</em>.</p>
</blockquote>
<p>Which certainly seems to be supported by my Kindle experience, which continues to be excellent with "meditative reading" but could certainly not support "developmental reading," which Jeff accurately describes as involving "reading that involves quick changes of focus from one book to another, with occasional dashes to the Web. I sometimes sit in my chair with four or five books lying face down on my nearby desk, the chair arms, or the floor, like bugs."</p>My Friend Who Robbed An Armor Car2007-12-02T07:00:00-10:002007-12-02T07:00:00-10:00larrytag:knowing.net,2007-12-02:/posts/2007/12/my-friend-who-robbed-an-armor-car/<p>This story of <a href="https://www.msn.com/">a couple that stole \$7 million on Monday and were nabbed this morning</a> reminds me of a second-tier friend from High School who was very dim. A few years after HS I heard that he had gotten a job with an armored car company doing ATM refills …</p><p>This story of <a href="https://www.msn.com/">a couple that stole \$7 million on Monday and were nabbed this morning</a> reminds me of a second-tier friend from High School who was very dim. A few years after HS I heard that he had gotten a job with an armored car company doing ATM refills.</p>
<p>"Apparently, he decided that he'd skim some \$20s off the top and who would be the wiser?"</p>
<p>"He got caught?" I asked.</p>
<p>"He got <em>caught before lunch</em>."</p>
<p>I always liked that gradation: there's risky, there's fool-hardy, and then there's <em>caught before lunch</em>.</p>Lang.NET Symposium: Jan 28-30 Redmond2007-12-01T10:10:00-10:002007-12-01T10:10:00-10:00larrytag:knowing.net,2007-12-01:/posts/2007/12/langnet-symposium-jan-28-30-redmond/<p>Sounds like a great opportunity to hang out with compiler geeks. Since someone's already beaten me to an LOLCode compiler for the DLR, I'll have to put in some work on my other projects: \<a href="http://www.knowing.net/PermaLink%2cguid%2c8dc6782d-9207-4909-bcc4-f5dc7444c6c0.aspx"" target="_blank" rel="noopener noreferrer">Excel …</p><p>Sounds like a great opportunity to hang out with compiler geeks. Since someone's already beaten me to an LOLCode compiler for the DLR, I'll have to put in some work on my other projects: \<a href="http://www.knowing.net/PermaLink%2cguid%2c8dc6782d-9207-4909-bcc4-f5dc7444c6c0.aspx"" target="_blank" rel="noopener noreferrer">Excel# and a more serious language I've been noodling around with called Rinq, a REST-Oriented Language that supports LINQ.</p>RESTful intermediaries for mail, RSS?2007-11-29T09:08:00-10:002007-11-29T09:08:00-10:00larrytag:knowing.net,2007-11-29:/posts/2007/11/restful-intermediaries-for-mail-rss/<p>The Kindle browser works much better with RESTful sites as opposed to AJAXian Web 2.0-y pages. To be more specific, the Kindle browser doesn't work well at all with AJAXian Web 2.0-y pages.</p>
<p>So this leads me to look for RESTful intermediaries / proxies for the two most useful …</p><p>The Kindle browser works much better with RESTful sites as opposed to AJAXian Web 2.0-y pages. To be more specific, the Kindle browser doesn't work well at all with AJAXian Web 2.0-y pages.</p>
<p>So this leads me to look for RESTful intermediaries / proxies for the two most useful network functions: email and RSS feeds. Doesn't anyone know of such libraries / services?</p>Kindle Hacking: format is compatible specialization of Mobi, compatible with Open eBook Publication Standard2007-11-28T10:13:00-10:002007-11-28T10:13:00-10:00larrytag:knowing.net,2007-11-28:/posts/2007/11/kindle-hacking-format-is-compatible-specialization-of-mobi-compatible-with-open-ebook-publication-standard/<p>A quick check with a hex editor revealed that the Kindle .AZW format contains the magic number "BOOKMOBI," which led me to this set if free eBooks in Mobi format. Sure enough, when copied to an SD card, MOBI files come right up in the Kindle Homepage.</p>
<p>Here is a …</p><p>A quick check with a hex editor revealed that the Kindle .AZW format contains the magic number "BOOKMOBI," which led me to this set if free eBooks in Mobi format. Sure enough, when copied to an SD card, MOBI files come right up in the Kindle Homepage.</p>
<p>Here is a free-as-in-beer toolchain for creating MOBI files: http://www.mobipocket.com/en/DownloadSoft/ProductDetailsCreator.asp</p>
<p>So the idea that the Kindle is a proprietary format, while technically true, is overstating the case. Any publisher can trivially create a Kindle-compatible eBook, at least if they already target at least one other digital format.</p>
<p>This gives me significantly greater hope for the future of the device.</p>Tim O'Reilly On Why No Kindle Support2007-11-28T09:03:00-10:002007-11-28T09:03:00-10:00larrytag:knowing.net,2007-11-28:/posts/2007/11/tim-oreilly-on-why-no-kindle-support/<p>I challenged Tim O'Reilly, who said "I'm rooting for Jeff and the Kindle," on the subject of O'Reilly's lack of support for the Kindle:</p>
<blockquote>
<p>Why no O'Reilly books on the kindle? Well, Amazon has chosen to use a proprietary format, with a conversion cost of a couple of hundred dollars …</p></blockquote><p>I challenged Tim O'Reilly, who said "I'm rooting for Jeff and the Kindle," on the subject of O'Reilly's lack of support for the Kindle:</p>
<blockquote>
<p>Why no O'Reilly books on the kindle? Well, Amazon has chosen to use a proprietary format, with a conversion cost of a couple of hundred dollars per title to that format....[C]onversion to every new format adds complexity.... [T]his very problem that led us to develop the Docbook DTD in the late 80's....</p>
<p>So I'm rooting for the kindle to take off at a level that would justify that investment in conversion, or for Amazon to open up the platform to read more formats that we already support, like HTML and PDF.</p>
<p>Now, I understand that PDF is a sub-optimal experience with respect to reflow. But we're hopeful that there will be a standard, multi-vendor format for that, so that we only have to support one more format, rather than dozens of competing ones.</p>
<p>Of course, we may run some experiments on the kindle, and if it takes off, we will certainly support it, as their format will become a de facto standard.</p>
<p>We'd also love to experiment with models in which people who are Safari subscribers could access that content on the kindle. We'd be very eager to have a reseller relationship with Amazon, such that they resell safari subscriptions on the kindle.</p>
<p>[O'Reilly's complete post]</p>
</blockquote>
<p>Very reasonable and certainly the Safari comment sounds like a business and not technical issue.</p>Kindle: PDFs a la Pragmatic Programmers Work Fine2007-11-27T16:31:00-10:002007-11-27T16:31:00-10:00larrytag:knowing.net,2007-11-27:/posts/2007/11/kindle-pdfs-a-la-pragmatic-programmers-work-fine/<p>I just emailed my Kindle the PDF of <a href="https://pragprog.com/titles">Programming Ruby</a> and lo! it works great, with even the ToC converted into hyperlinks.</p>A Long Weekend With The Kindle: Programmers, Take Note2007-11-27T11:43:00-10:002007-11-27T11:43:00-10:00larrytag:knowing.net,2007-11-27:/posts/2007/11/a-long-weekend-with-the-kindle-programmers-take-note/<p>The first thing that must be said about the Kindle is that the screen technology -- eInk -- is vastly more readable than any screen you've read from before. Pause. No, seriously, <em>vastly</em> more readable. My wife, no technologist, actually used the word "wow," and after reading a page opined that it …</p><p>The first thing that must be said about the Kindle is that the screen technology -- eInk -- is vastly more readable than any screen you've read from before. Pause. No, seriously, <em>vastly</em> more readable. My wife, no technologist, actually used the word "wow," and after reading a page opined that it was <em>more</em> readable than many printed pages, an assessment I agree with. }catch(DisplayGeekException){ I've not used the Sony Reader, which uses similar (same?) technology, nor do I have a 200-DPI screen. I have a high-DPI (150?) screen on my tablet and two 21" monitors running at 1920 x 1050, and the Kindle is vastly more readable than those. }</p>
<h3>Ergonomics</h3>
<p>The screen is perfectly readable in the tropical Hawaiian sun and, although you <em>can</em> generate a reflection by turning it just so, a few degrees tilt in another direction makes the reflection go away.</p>
<p>The Kindle seems to have been designed with an anti-fashion aesthetic; while the iPod is clearly designed to attract attention to itself, Bezos' statement that they want the Kindle "to disappear" is clearly not just rhetoric. It comes with a leather binder (in which the Kindle fits somewhat unsecurely); when in the binder, it is essentially indistinguishable from an address book to the casual glance.</p>
<p>When carried outside the binder, the Kindle fits in the hand well (at least, my hand) and has excellent balance. The first morning after getting it, I found myself pouring coffee with my right hand while reading from the Kindle in my left -- exactly the type of position that I <em>would</em> do with a book but would hesitate doing with an iPod or PDA. One reason this is a natural position is that they have a "Next Page" button in the lower left of the device where your thumb naturally sits if you have the device balanced in your left hand: I like that button <em>a lot</em>, it is my wife's sole complaint about the Kindle's ergonomics ("there's no place to put your thumb" she says).</p>
<p>The keyboard sucks. I don't have an opinion as to whether it sucks more than other thumb keyboards, which I've never used.</p>
<h3>Durability</h3>
<p>As the coffee-pouring incident illustrated, my natural instinct is that the Kindle does not need to be overly protected. It's light and well-balanced, doesn't have any protruding edges, and the periphery is the domain of large, sturdy-seeming buttons/levers. When in its leather case, it seems <em>very</em> good for throwing in a backpack or purse.</p>
<h3>"Printed" Content</h3>
<p>So much for the good. I bought the Kindle for the purpose of my tech library: I spend over \<span class="math">\(1,000 a year on technical books and I receive for free probably another \\)</span>2-3K worth of titles. I'm sure that's <em>several</em> sigmas from the book-buying norm, but even if I spent "just" the several hundred dollars per year necessary to have the tools-at-hand to be a professional programmer, an eBook solution would be ideal. No matter how carefully I maintain my library, I am <em>constantly</em> realizing that "I just threw out that book last week."</p>
<p><strong>In my "To-Be Read" pile for technical books: 0 for 13 were available on the Kindle.</strong></p>
<p><strong>Of the technical books nominated for Jolts this year, I searched for the first 10: 0 were available for the Kindle.</strong></p>
<p><strong>In my "To-Be Read" pile for personal reading: 6 for 11 were available</strong>.</p>
<p>In the technology realm, only Addison-Wesley imprimaturs seem moderately available on the Kindle (although Wiley told me they were excited about the device). The top-selling "Programming" title is Brooks' "Mythical Man-Month," the top recent title is Brian Goetz's excellent "Java Concurrency in Action."</p>
<p><strong>Just Discovered Defect:</strong> The Kindle store incorrectly lists David Holmes as the lead author, though! Search for "Goetz concurrency" in the Kindle store and you get 0 results! <strong>This type of screwup is a huge problem for technical users!</strong></p>
<p>For general reading, I think the 6 for 11 is acceptable, especially for best-sellers -- the most esoteric title in my "to-be read" pile that was Kindle-available was "The Descendants" by Kaui Hart Hemmings, the most surprising "miss" was "The Midnight Choir" by Gene Kerrigan.</p>
<p>To try out long-form text, I am reading William Gibson's "Spook Country" on the Kindle and I don't miss a physical book for that type of reading whatsoever. (Of course, I'll have to turn the Kindle off in-between throttle-up and 10,000 feet, which I wouldn't need to do with a paperback.) And with paperbacks now at the \$10 price-point, the Kindle breaks even (absent the upfront cost) for airline reading.</p>
<p>But <strong>unless technical publishers make some kind of mass movement to support the Kindle, it's an enormous disappointment for (my) intended use. If Safari or Books24x7 got behind it, that could change overnight; otherwise, it's not a good purchase for technical texts today</strong> and we will just have to see if technical publishers start supporting it in the coming months.</p>
<h3>Other Content</h3>
<p>In addition to books, the Kindle Store offers magazines, newspapers, and blogs. None are technical at the professional level (no <em>SD Times</em>, no <em>Dr. Dobb's</em>, no <em>CACM</em>, no <em>Lambda the Ultimate,</em> etc.). Paying for blogs is absurd, so I won't even go into that.</p>
<p>There is an "experimental" Web browser in the Kindle. It's very clumsy to use, but I aimed it at a few of my bookmarks. Some were interesting successes (my site actually renders in a pretty readable way!) and others disasters (specifically, NewsGator and other Web 2.0-y sites). I logged on to a few client sites and discovered, with a certain satisfaction, that RESTful sites work well with the Kindle.</p>
<h3>Content is King</h3>
<p>The Kindle is a great piece of hardware for reading digitally-delivered text.</p>
<p>The only reliably-available text for the Kindle are best-selling texts: the <em>Time</em> magazines, the <em>New York Times</em>, the <em>You: The User Manual's</em>.</p>
<p>Professional resources are the raison d'etre for a software developer to buy the Kindle.</p>
<p>Professional resources are all but absent from the Kindle store.</p>
<p>I'll let you know how the situation evolves.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Scientists Invent Insect-Brained Robots: Science Fiction Writers Sue for Copyright Infringement2007-11-24T10:21:00-10:002007-11-24T10:21:00-10:00larrytag:knowing.net,2007-11-24:/posts/2007/11/scientists-invent-insect-brained-robots-science-fiction-writers-sue-for-copyright-infringement/<p>U. of Arizona researchers have <a href="https://boingboing.net/2007/11/23/robot-controlled-by.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+boingboing%2FiBag+%28Boing+Boing%29">built a robot that's guided by the brain of a moth</a>. I assume the resulting rampage can only be stopped by cantilevering a lightbulb over the rim of the Grand Canyon.</p>Morality and Code2007-11-20T08:09:00-10:002007-11-20T08:09:00-10:00larrytag:knowing.net,2007-11-20:/posts/2007/11/morality-and-code/<p>Darryl Taft's article "<a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Toward a Discussion of Morality and Code</a>" is quickly side-tracked into an exhortation that software developers should be moral people (recycle your punch cards, yo!). Not discussed is the more interesting question of whether there is a morality within coding decisions and, if so, what the higher …</p><p>Darryl Taft's article "<a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Toward a Discussion of Morality and Code</a>" is quickly side-tracked into an exhortation that software developers should be moral people (recycle your punch cards, yo!). Not discussed is the more interesting question of whether there is a morality within coding decisions and, if so, what the higher moral principles are.</p>
<p>The agile community likes to say "deliver client value" and I quite prefer that to the old hacker-ish value of "write elegant code," but client value falls short of being universally prescriptive.</p>
<p>Let's say that you're striving to bring online a complex system. The client is threatening to pull out, your team is working long hours, but there are kinks right in the middle of the processing. You believe by adding complexity and special cases you can solve the immediate problem. But on the other hand, the system <strong>ought not</strong> to be in that state by that point, the data should be thoroughly de-funked. As a professional, you know that you're seeing a symptom of a deeper problem and that by adding complexity, all you're doing is masking the pathology.</p>
<p>What's the moral thing to do, bearing in mind that the client's threat to shut down the project is serious?</p>Internet-Connected Washing Machines: (Brilliant) Myth?2007-11-20T00:00:00-10:002007-11-20T00:00:00-10:00larrytag:knowing.net,2007-11-20:/posts/2007/11/internet-connected-washing-machines-brilliant-myth/<p>While reading the latest <a href="https://www.thinkgeek.com/product/9e44/">ThinkGeek</a> ad copy, I find:</p>
<blockquote>
<p>[W]e're jealous of today's students. They can now go online to find out if any washers are open, pay for the laundry with their student ID, and then receive an e-mail alert when the washer and/or dryer is done …</p></blockquote><p>While reading the latest <a href="https://www.thinkgeek.com/product/9e44/">ThinkGeek</a> ad copy, I find:</p>
<blockquote>
<p>[W]e're jealous of today's students. They can now go online to find out if any washers are open, pay for the laundry with their student ID, and then receive an e-mail alert when the washer and/or dryer is done.</p>
</blockquote>
<p>Is this true? If so, that is the greatest freaking innovation since the relational database!</p>VS2008 Ships: LINQ is the Standout Feature2007-11-19T09:13:00-10:002007-11-19T09:13:00-10:00larrytag:knowing.net,2007-11-19:/posts/2007/11/vs2008-ships-linq-is-the-standout-feature/<p>\<a href="http://msdn2.microsoft.com/en-us/vstudio/default.aspx"" target="_blank" rel="noopener noreferrer">Visual Studio 2008 has shipped.</p>
<p>This is a very compelling upgrade, primarily because of Language-Integrated Query (LINQ), a new feature that is supported in the mainstream .NET languages VB and C# and will almost certainly …</p><p>\<a href="http://msdn2.microsoft.com/en-us/vstudio/default.aspx"" target="_blank" rel="noopener noreferrer">Visual Studio 2008 has shipped.</p>
<p>This is a very compelling upgrade, primarily because of Language-Integrated Query (LINQ), a new feature that is supported in the mainstream .NET languages VB and C# and will almost certainly spread to every .NET language and, I suspect, into the Java world in a few years.</p>
<p>Most readers of this blog will be familiar with LINQ. If not, you might find my latest column for SD Times, LINQ Clicks, useful.</p>Kindle Me2007-11-19T08:53:00-10:002007-11-19T08:53:00-10:00larrytag:knowing.net,2007-11-19:/posts/2007/11/kindle-me/<p><a href="https://www.amazon.com/dp/B00TSUGXKE" title="Kindle"><img alt="" src="http://images.amazon.com/images/P/B000FI73MA.01._AA_SCTZZZZZZZ_.jpg"></a>Amazon has shipped the <a href="https://www.amazon.com/dp/B00TSUGXKE">Kindle</a>, which I think may very well be the game-changing device the eBook market has been waiting for. Compatibility with PDF, plaintext, HTML, "Kindle format" (structured HTML), plus <strong>free</strong> EVDO connectivity, plus email-your-document-to-the-Kindle (<strong>killer</strong>). <strong>Books are \$9.99.</strong> If O'Reilly puts Safari on this thing, they'll …</p><p><a href="https://www.amazon.com/dp/B00TSUGXKE" title="Kindle"><img alt="" src="http://images.amazon.com/images/P/B000FI73MA.01._AA_SCTZZZZZZZ_.jpg"></a>Amazon has shipped the <a href="https://www.amazon.com/dp/B00TSUGXKE">Kindle</a>, which I think may very well be the game-changing device the eBook market has been waiting for. Compatibility with PDF, plaintext, HTML, "Kindle format" (structured HTML), plus <strong>free</strong> EVDO connectivity, plus email-your-document-to-the-Kindle (<strong>killer</strong>). <strong>Books are \$9.99.</strong> If O'Reilly puts Safari on this thing, they'll sell one to every programmer in the developed world.</p>
<p>As a matter of fact, I'm going to start emailing PR reps of the various tech publishers trying to get a response on the Kindle. Bookmark this article, I'll update as appropriate. Or, if you are a PR professional working for a technical publisher, contact me at lobrien -at- knowing.net with your press release.</p>
<p><strong>Update:</strong></p>
<p>No Starch : "We do not have an official position on Kindle."</p>
<p>O'Reilly : "We don't have a stated position on the Kindle yet, as we haven't seen one or had the opportunity to discuss it at any lengths with its developers. Check back with us in a bit - We'll be sure to let you know as soon as we do have an opinion."</p>
<p>Wiley: "Wiley is excited to actively participate in the newly launched Amazon Kindle."</p>
<p>Pragmatic Bookshelf: "It's a tough call. ... Our PDF's are not encumbered by DRM, so it's important that any PDF reader be able to handle that ... I'll reserve judgement on the Kindle until I have one in hand, and see how it performs in all respects"</p>
<p>APress: "don't have anything official to state yet."</p>SyncLinq: Haven't Tried It, But Love The Concept2007-11-19T07:00:00-10:002007-11-19T07:00:00-10:00larrytag:knowing.net,2007-11-19:/posts/2007/11/synclinq-havent-tried-it-but-love-the-concept/<p>Paul Stovell is working on a project he calls "SyncLINQ" which provides databinding over LINQ queries. Although I've not yet tried SyncLINQ, it's clearly a great idea. [<em>via</em> Steve Pietrek Links (11/15/2007)]</p>Shiny Buckshot Rather Than Silver Bullets2007-11-18T07:00:00-10:002007-11-18T07:00:00-10:00larrytag:knowing.net,2007-11-18:/posts/2007/11/shiny-buckshot-rather-than-silver-bullets/<p>Wes Moise's musings on Supercompilation led me to this discussion of the the <a href="https://www.reddit.com/r/programming/comments/1ur89/the_myth_of_the_sufficiently_smart_compiler">myth of the sufficiently smart compiler</a>.</p>
<p>The "sufficiently smart compiler" is still trotted out regularly, even though the market has moved away from demanding even moderate attention to performance at the compiler level. Have you timed your …</p><p>Wes Moise's musings on Supercompilation led me to this discussion of the the <a href="https://www.reddit.com/r/programming/comments/1ur89/the_myth_of_the_sufficiently_smart_compiler">myth of the sufficiently smart compiler</a>.</p>
<p>The "sufficiently smart compiler" is still trotted out regularly, even though the market has moved away from demanding even moderate attention to performance at the compiler level. Have you timed your rectangular arrays in C# lately? Or, to be inclusive, have you looked at what's (not) hoisted out of loops in Java?</p>
<p>The existence of the Iron* languages from Microsoft stems from Jim Hugunin's discovery that adding moderate smarts allowed dynamic languages to run fast on the CLR:</p>
<blockquote>
<ol>
<li>Use native CLR constructs whenever possible. These constructs are all heavily optimized by the underlying runtime engine. Sometimes these constructs will have to be used creatively to properly match Python's dynamic semantics.</li>
<li>Use code generation to produce fast-paths for common cases. This can either be development-time code generation with Python scripts creating C# code or run-time code generation using <strong>System.Reflection.Emit</strong> to produce IL on the fly.</li>
<li>Include fall-backs to dynamic implementations for less common cases or for cases where Python's semantics requires a fully dynamic implementation.</li>
<li>Finally, test the performance of every CLR construct used and find alternatives when performance is unacceptable. Type.InvokeMember is a great example a a function that must never be used in code that cares about performance.</li>
</ol>
</blockquote>
<p>That's hardly the stuff of PhD theses (don't misunderstand me: Hugunin's paper, which actually said something important, is more valuable than 99% of CS theses).</p>
<p>The point, though, is that we are in a time of high tension between what is possible and what is practiced. This gives me hope that we might see true breakthroughs in programming languages. Fred Brooks spoke of a silver bullet defined as a <strong>"single</strong> development, in either technology or in management technique, that by itself promises even one order-of-magnitude improvement in productivity, in reliability, in simplicity." [my emphasis]). I don't believe in silver bullets, but I think there's a possibility of shiny buckshot.</p>
<p>On the discouraging side, I think there are great difficulties to building such a system: the development of a shiny shotgun is, I think, the work of double-digit person-years. It's work that's too far over the horizon for VC funding, too pragmatic for grants, and too dependent on brilliant execution by a small, high-performance team for Open Source.</p>Bob the "programmer"2007-11-15T17:49:00-10:002007-11-15T17:49:00-10:00larrytag:knowing.net,2007-11-15:/posts/2007/11/bob-the-quotprogrammerquot/<p>I realize that the preceding may, in fact, make me appear to be a hot-head. In fact, I may be a hot-head. But I think if there's one thing that we <strong>should</strong> value, it's our time. I spent an <em>hour</em> trying to "clear the cache" because he uploaded a file …</p><p>I realize that the preceding may, in fact, make me appear to be a hot-head. In fact, I may be a hot-head. But I think if there's one thing that we <strong>should</strong> value, it's our time. I spent an <em>hour</em> trying to "clear the cache" because he uploaded a file to the wrong directory. Never mind continuous integration, he created a new site on the test server (HTF was anyone supposed to know? WTF?). And then when I'd spent <em>my</em> time figuring all this out, I see that his fix wasn't to move the link <strong>outside</strong> of the loop, but to delete the loop. Who thinks that way? I mean, seriously, how could anyone with more than 12 hours experience do that?</p>
<p>And, mind you, there are coding "standards" that include automated tests, defect-tracking, and CI. It's not like this is the first time he's heard me get angry at the 'works fine on my machine' excuse.</p>...for sufficiently small values of "programmer"2007-11-15T17:26:00-10:002007-11-15T17:26:00-10:00larrytag:knowing.net,2007-11-15:/posts/2007/11/for-sufficiently-small-values-of-quotprogrammerquot/<p>So we've got a page that allows clients to edit email addresses. Turns out that if there are no email addresses associated, the "Add an email" link doesn't show up. I glance at the page and see that the button is inside the loop that's iterating over the emails (this …</p><p>So we've got a page that allows clients to edit email addresses. Turns out that if there are no email addresses associated, the "Add an email" link doesn't show up. I glance at the page and see that the button is inside the loop that's iterating over the emails (this is ColdFusion, so what this means is that I see something like: \<cfloop query="emails">...email output stuff ... \<a href="./add_an_email.cfm">Add an email\</a>\</cfloop> (trying to get this system moved over to REST may be covered in another frustrated blog post at a later date)).</p>
<p>So I ask "Bob" to move the link outside the loop.</p>
<p>Twelve hours later:</p>
<p>Larry: What's the story?</p>
<p>Bob: Fixed.</p>
<p>Larry: Great! *click* Hey, Bob, I still don't see the link.</p>
<p>Bob: Yeah, ColdFusion must have the old version cached.</p>
<p>Larry: Really? I thought CF was really good about picking up changes.</p>
<p>Bob: Maybe it has something to do with timezones. I've seen it before.</p>
<p>Larry: That just seems incredible. You're sure you made the change?</p>
<p>Bob: Yeah.</p>
<p>Larry: And you <strong>tested</strong> it?</p>
<p>Bob: Yeah. <strong><a href="https://blog.codinghorror.com/the-works-on-my-machine-certification-program/">Works fine on my machine</a></strong>.</p>
<p>Larry: When you've seen it before, how long does it take to come online?</p>
<p>Bob: A day or two</p>
<p>Larry: WHAT? That's incredible. I had no idea. *speed dial* Hey, Carol, reboot the test server, we need to clear the cache.</p>
<p>Carol: What time is it in Hawaii?</p>
<p>Larry: 8:00 PM. Yeah, I guess it's kind of late there in New York, huh? *click*</p>
<p>-- this morning --</p>
<p>*click* ... pause ...</p>
<p>*ftp* ... double checking ...</p>
<p>*svn checkout* ... incredulous review ...</p>
<p>Larry: Bob, can I have a word?</p>
<p>Bob: How you doing this morning Larry?</p>
<p>Larry: I'm a little stressed out. Let's try to establish some common ground. Can you FTP onto the site and confirm that the file there is the old one?</p>
<p>Bob: Why's there only one file there?</p>
<p>Larry: What are you talking about?</p>
<p>Bob: There's only one file on the site.</p>
<p>Larry: Um ... Do you think it's possible that you uploaded the file to the wrong directory?</p>
<p>Bob: Let me check.</p>
<p>* 5 minutes pass *</p>
<p>Larry: Bob, why's it taken you 5 minutes to check out the name of the directory to which you FTPed?</p>
<p>Bob: Checking * 3 minutes * Oh, I see! You expected it in /TestSite. I uploaded it to /TestSite2!</p>
<p>Larry: WTF is /TestSite2? No, don't answer that. WTF did you mean when you said you tested it?</p>
<p>Bob: Works fine on my machine.</p>
<p>Larry: You're talking about the version 67 in Subversion? Do you have that open on your machine?</p>
<p>Bob: Hold on</p>
<p>* 5 minutes pass *</p>
<p>Larry: WTF is taking you so long? A Subversion checkout takes 5 seconds!</p>
<p>Bob: Hold on * 1 minute passes* Yeah, got it.</p>
<p>Larry: Did you delete the loop?</p>
<p>Bob: Huh?</p>
<p>Larry: You deleted the loop. It looped over email addresses. Instead of moving the link outside the loop, you just deleted the loop!</p>
<p>Bob: OK</p>
<p>Larry: No, it's not OK! WTF do you mean OK? Every f***ing [original did not have asterisks] client has more than one email address!</p>
<p>Bob: OK</p>
<p>Larry: STOP SAYING OK! WTF were you thinking? No, don't answer!!! WTF did you mean by 'works fine'?</p>
<p>Bob: It worked fine on my machine</p>
<p>Larry: NO IT F***ING DIDN'T! YOU DELETED THE F***ING LOOP!</p>
<p>Bob: I didn't understand what the page did.</p>
<p>Larry: IT WAS A F*** LOOP! YOU"RE SUPPOSED TO BE A PROFESSIONAL PROGRAMMER! YOU DIDN"T "GET" THAT A LOOP WAS NECESSARY? I GOT CAROL OUT OF BED AT 1 IN THE MORNING AND SPENT AN HOUR BETWEEN LAST NIGHT AND THIS MORNING BECAUSE YOU FTPED YOUR WRONG F*** PAGE TO THE WRONG DIRECTORY!</p>
<p>Bob: Control your temper, man.</p>
<p><em>Larry's brain explodes and he dies</em></p>Comments Off As I Deal with dasBlog2007-11-08T08:31:00-10:002007-11-08T08:31:00-10:00larrytag:knowing.net,2007-11-08:/posts/2007/11/comments-off-as-i-deal-with-dasblog/<p>My commenting problem has to do with <a href="http://www.dasblog.net">dasBlog</a> validating the viewstate. There is a helpful debugging suggestion in the logs, but my ISP tells me that it is not appropriate to my situation. Until I can spend some time trying to figure that out, I won't subject people to the …</p><p>My commenting problem has to do with <a href="http://www.dasblog.net">dasBlog</a> validating the viewstate. There is a helpful debugging suggestion in the logs, but my ISP tells me that it is not appropriate to my situation. Until I can spend some time trying to figure that out, I won't subject people to the frustration of the buggy system. In the meantime, I'm afraid that email (lobrien -at- knowing.net) will have to suffice.</p>Hypothetically...2007-11-06T18:47:00-10:002007-11-06T18:47:00-10:00larrytag:knowing.net,2007-11-06:/posts/2007/11/hypothetically/<p>You've got friends visiting. They're in town for 9 days. One day involves driving 4 hours to go to a botanical garden which you've been to before and flowers aren't really your "thing" anyway. Do you do it, because, you know, they're your friends, you'll enjoy being with them, etc …</p><p>You've got friends visiting. They're in town for 9 days. One day involves driving 4 hours to go to a botanical garden which you've been to before and flowers aren't really your "thing" anyway. Do you do it, because, you know, they're your friends, you'll enjoy being with them, etc.? Or do you not do it because, you know, it's a day of travel and affirmatively nodding every time someone says "OMYGOD LOOK AT THOSE LEAVES!"</p>
<p>What do you do?</p>
<p>Just hypothetically, I mean.</p>OLPC Advocates Python-Based Development2007-11-06T07:00:00-10:002007-11-06T07:00:00-10:00larrytag:knowing.net,2007-11-06:/posts/2007/11/olpc-advocates-python-based-development/<p>As the OLPC launch approaches, I thought I'd take a look at the development environment. Somewhat to my surprise, the \<a href="http://wiki.laptop.org/go/Getting_started_programming"" target="_blank" rel="noopener noreferrer">OLPC Development Wiki says that:</p>
<ul>
<li>Technically any language is usable</li>
<li>Python is strongly encouraged, to …</li></ul><p>As the OLPC launch approaches, I thought I'd take a look at the development environment. Somewhat to my surprise, the \<a href="http://wiki.laptop.org/go/Getting_started_programming"" target="_blank" rel="noopener noreferrer">OLPC Development Wiki says that:</p>
<ul>
<li>Technically any language is usable</li>
<li>Python is strongly encouraged, to have a single language "under the hood" when the curious child looks inside</li>
<li>C/C++ should be used where Python performance is unacceptable, but try to keep it to a minimum, preferably as standard well-encapsulated and documented components</li>
<li>Smalltalk-speaking developers may wish to work within the eToys environment</li>
<li>Javascript can be used in web-based applications (Gecko or Opera engine Javascript implementation)</li>
</ul>
<p>I like Python fine, but have to say that I think there's a real trade-off with it in terms of the world-changing vision of the OLPC. I don't think that Python is a language that facilitates software engineering and, although it's easier to learn than a C-derived statically-typed language, as a very-first programming language, I think Smalltalk would be superior in every way.</p>
<p>The trade-off, I suppose, is that OLPC developers would have had to learn Smalltalk and a high-performance Smalltalk VM would have had to be implemented (perhaps -- I don't know -- eToys has such a VM). To me it hardly seems like a burden to expect developers to learn and develop in Smalltalk.</p>
<p>...</p>
<p>I hate to be cynical, but every time I think about the OLPC it's difficult not to wonder how \$200 laptops will possibly stay in the hands of poor children. I definitely "get" that education and technology are crucial to fighting poverty, but I just wonder what percentage of the OLPCs sent to developing nations will end up being stolen and resold. Putting on my cold economic analysis hat, that <em>could</em> be seen as contributing to the society, but benefiting thieves and the able-to-afford-stolen-laptops doesn't seem efficient.</p>
<p>Well, the <em>thief</em> part is inefficient. Contributing a laptop with the understanding that it is 90% likely to be instantly resold is somewhat efficient (albeit not as efficient as sticking \$200 in an envelope and sending it to a random school).</p>
<p>Blech. It's too early in the week to be cynical. Sign me up.</p>17P/Holmes Spectacular Through Binoculars2007-11-05T07:25:00-10:002007-11-05T07:25:00-10:00larrytag:knowing.net,2007-11-05:/posts/2007/11/17pholmes-spectacular-through-binoculars/<p>To the naked eye, it doesn't look like much, but through binoculars, 17P/Holmes is incredible. I don't know how dependent that is on seeing it in very dark skies -- we had a really dark night Saturday. This is definitely one to go out of your way to see.</p>Universal Geometric Time2007-11-04T08:09:00-10:002007-11-04T08:09:00-10:00larrytag:knowing.net,2007-11-04:/posts/2007/11/universal-geometric-time/<p>Alan Zeichick struck a nerve by calling BS on the premise that Daylight Savings Time saves money. Personally, I dislike DST because during the Summer (or, at this point, non-Winter) Hawai'i is 3 hours behind the West Coast, while during the Winter we're an hour closer and I can begin …</p><p>Alan Zeichick struck a nerve by calling BS on the premise that Daylight Savings Time saves money. Personally, I dislike DST because during the Summer (or, at this point, non-Winter) Hawai'i is 3 hours behind the West Coast, while during the Winter we're an hour closer and I can begin work at 7 AM, not 6. (Fun fact: It's plenty damn dark at 5:30 in the morning in the Winter, even in Hawai'i. Not cold, but dark.)</p>
<p>The solution, it is clear, is Universal Geometric Time: Universal time adjusted for your exact longitude (as measured by GPS). For instance, if I were to follow what The Man says, at 8:00 AM Hawai'ian, it's 6:00PM Universal. However, I insist that at 6:00PM Universal, it's 7:37:06 AM (when I'm at home. If I happen to be breakfasting at Java on the Rock, watching the dolphin pod come in from their night's hunting, that same moment would be 7:37:05).</p>
<p>It's true that adjusting to Universal Geometric Time requires some getting used to. Anytime I spend more than an hour at a place, I adjust my watch and manually set my cell phone. Plus, of course, I have to be prepared to deal with people using standard time, so I have additional calculators running on my PDA. It's all quite burdensome, but ultimately it's a small price to pay for rationality.</p>
<p>There may be trouble, though. While eating in a food court in Waimea court not long ago, I spread my gear out (since I was sitting down for a meal). I tend to eat alone more since my "friends" have proved resistant to rendezvousing at properly specified times.</p>
<p>I admit that the sight of me blazing the way towards the future makes for a singular sight: GPS, PDA, cell phone, watch, cables, backup batteries, etc. Anyway, I was approached by a woman who turned out to be an astronomer for Keck. <em>Exactly the sort of person who would understand</em>, I thought and gave a quick overview of UGT (I had to break out my laptop, on which I carry an explanatory PowerPoint).</p>
<p>Well.</p>
<p>I don't know who this "sidereal" fellow is, but I can assure you that he has no place in Universal Geometric Time.</p>Wrox Blox: $4 Microcontent2007-11-04T07:00:00-10:002007-11-04T07:00:00-10:00larrytag:knowing.net,2007-11-04:/posts/2007/11/wrox-blox-4-microcontent/<p>Wrox has begun producing low-cost DRM-free electronic content. Their initial product offering is nicely eclectic:</p>
<p><strong>Leverage LINQ in ASP.NET 3.5 Projects</strong><br>
<strong>by Roger Jennings</strong><br>
This Wrox Blox introduces you to Language Integrated Query (LINQ), a .NET 3.5 application programming interface (API) and set of extensions to the …</p><p>Wrox has begun producing low-cost DRM-free electronic content. Their initial product offering is nicely eclectic:</p>
<p><strong>Leverage LINQ in ASP.NET 3.5 Projects</strong><br>
<strong>by Roger Jennings</strong><br>
This Wrox Blox introduces you to Language Integrated Query (LINQ), a .NET 3.5 application programming interface (API) and set of extensions to the Visual Basic and C# languages.</p>
<p><strong>Working with Animation in Silverlight 1.0</strong><br>
<strong>by Mike Meyers</strong><br>
This Wrox Blox teaches you how to create animations using Microsoft's new platform for building rich Internet applications - Silverlight. This Wrox Blox introduces animation concepts and answers questions, such as when and why you want to use animation in your Web development.</p>
<p><strong>iPhone and iPod touch Programming: Handling Touch Interactions and Events for Mobile Safari</strong><br>
<strong>by Richard Wagner</strong><br>
In this Wrox Blox, Richard Wagner explains touch input events and illustrates how to detect an orientation change, capture two-finger scrolling inputs, and simulate a drag-and-drop action.</p>
<p><strong>Introduction to Google Gears: Creating Off-Line Applications with Pre-built Components.</strong><br>
<strong>by Todd Meister</strong><br>
This Wrox Blox provides you with the information you need to use the classes provided from Google. The core classes within Google Gears include Factory, Database, HttpRequest, LocalServer, Timer, and WorkerPool. By reading this Wrox Blox, you'll be able to determine when to use the different classes provided by Google Gears.</p>
<p><strong>Building a Photo Gallery with Adobe AIR</strong><br>
<strong>by Todd A. Anderson</strong><br>
With your favorite text editor and the Flex 3 command-line tools in tow, this Wrox Blox walks you through building a desktop application, leveraging the Flex Framework to browse and manipulate images found on your local system.</p>Mathematica Ships Runtime Player2007-11-02T13:26:00-10:002007-11-02T13:26:00-10:00larrytag:knowing.net,2007-11-02:/posts/2007/11/mathematica-ships-runtime-player/<p>Mathematica, my preferred tool for algorithm development and exploration, now has <a href="http://www.wolfram.com/cdf-player/">a runtime viewer that allows full access to Mathematica "notebooks</a>." This is a wonderful step forward and I look forward to making some notebooks available in the future.</p>IronRuby Previews Form Designer2007-11-02T13:02:00-10:002007-11-02T13:02:00-10:00larrytag:knowing.net,2007-11-02:/posts/2007/11/ironruby-previews-form-designer/<p>From SapphireSteel, the makers of IronRuby, comes the first peek at an IronRuby visual design surface.</p>Open Komodo Now Available2007-11-02T12:38:00-10:002007-11-02T12:38:00-10:00larrytag:knowing.net,2007-11-02:/posts/2007/11/open-komodo-now-available/<p>Those without an investment in other editors would do well to investigate Open Komodo, a free as in speech editor based on the good as in good Komodo editor.</p>Shapewriter On The Way To Productization2007-11-01T17:07:00-10:002007-11-01T17:07:00-10:00larrytag:knowing.net,2007-11-01:/posts/2007/11/shapewriter-on-the-way-to-productization/<p>Shapewriter, formerly known as SHARK, is absolutely the fastest text input method short of typing (mmm... possibly voice input in certain domains). For years Shapewriter has languished at IBM's Alphaworks site. I can't wait for them to ship for the Tablet PC, although right now the downloads link at the …</p><p>Shapewriter, formerly known as SHARK, is absolutely the fastest text input method short of typing (mmm... possibly voice input in certain domains). For years Shapewriter has languished at IBM's Alphaworks site. I can't wait for them to ship for the Tablet PC, although right now the downloads link at the site is inactive.</p>See Doubleplus2007-11-01T07:30:00-10:002007-11-01T07:30:00-10:00larrytag:knowing.net,2007-11-01:/posts/2007/11/see-doubleplus/<p>"\<a href="http://blog.wired.com/27bstroke6/2007/10/att-invents-pro.html%23comments"" target="_blank" rel="noopener noreferrer">AT&T Invents Programming Language for Mass Surveillance" is Wired's absurdly bad headline describing how \<a href="http://www.research.att.com/%7ekfisher/hancock/"" target="_blank" rel="noopener noreferrer">Hancock, "a C-based domain-specific …</p><p>"\<a href="http://blog.wired.com/27bstroke6/2007/10/att-invents-pro.html%23comments"" target="_blank" rel="noopener noreferrer">AT&T Invents Programming Language for Mass Surveillance" is Wired's absurdly bad headline describing how \<a href="http://www.research.att.com/%7ekfisher/hancock/"" target="_blank" rel="noopener noreferrer">Hancock, "a C-based domain-specific language designed to make it easy to read, write, and maintain programs that manipulate large amounts of relatively uniform data," was used by AT&T to aid the NSA (allegedly, but c'mon).</p>
<p>In fact, Hancock looks like a good language for <a href="http://www.tbray.org/ongoing/When/200x/2007/09/20/Wide-Finder">Wide Finder</a>, Tim Bray's logfile analysis program that exemplifies the culture of hashtables and regular expressions, and which is bouncing around the blogosphere as a benchmark. As a benchmark, Wide Finder is as problematic as previous small benchmarks like Fib and Tak. I could write a lot more about that, but instead I wanted to highlight Bray's observation that there is an entire culture of programming relating to regex and hashtables. This culture is the remnant of the antediluvian Little Languages culture which, in turn, traced its heritage to the cyclopean Ye Olde Compiler Scribes. Today, the regex+hashtable crowd is basking in the limelight. Although I'm wholly in favor of promoting language-like techniques, one ought not to believe an emerging meme, which is that "you need a dynamic language to write a language-like program." As a matter of fact, it doesn't take long for a regex+hashtable program to grow to the point where a custom parser (generated by a tool, of course, from a regex-like grammar) becomes more efficient. Once you've gotten to <em>that</em> point, the utility of dynamism is greatly lessened and you're well into a situation where many people might prefer the clarity of explicit types (when walking a tree of many thousand nodes, it can be very helpful to know exactly what type of node is at hand).</p>
<p>Tools like <a href="https://www.antlr.org/">ANTLR</a> make language-recognizing programs easier to write than ever. And, as I wrote recently, \<a href="http://www.sdtimes.com/article/column-20070901-02.html"" target="_blank" rel="noopener noreferrer">writing a unit-tested compiler is the most fun you can have programming.</p>Congratulations to Charles Petzold2007-10-31T09:13:00-10:002007-10-31T09:13:00-10:00larrytag:knowing.net,2007-10-31:/posts/2007/10/congratulations-to-charles-petzold/<p>#include \<windows.h></p>
<p>int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR args, int show)</p>
<p>{</p>
<p>MessageBox(GetActiveWindow(), "Congratulations Charles & Deirdre!", "Many happy returns!", MB_OK);</p>
<p>return 0;</p>
<p>}</p>Apple Says Cash Not Legal Tender For iPhone Debt2007-10-31T08:34:00-10:002007-10-31T08:34:00-10:00larrytag:knowing.net,2007-10-31:/posts/2007/10/apple-says-cash-not-legal-tender-for-iphone-debt/<p>Apple is apparently <a href="https://www.pcworld.com/article/139041/article.html">refusing to accept cash for iPhones</a>. I have a feeling this policy will last less than 24 hours, as there's significant intersection among the set of people who would purchase iPhones and the set of people who will get into quite a snit about "This note is …</p><p>Apple is apparently <a href="https://www.pcworld.com/article/139041/article.html">refusing to accept cash for iPhones</a>. I have a feeling this policy will last less than 24 hours, as there's significant intersection among the set of people who would purchase iPhones and the set of people who will get into quite a snit about "This note is legal tender for all debts, public and private."</p>
<p><strong>Update:</strong> Neil Bartlett points to \<a href="http://en.wikipedia.org/wiki/Legal_tender%23In_the_United_States"" target="_blank" rel="noopener noreferrer">this Wikipedia article that says companies can refuse cash if the debt doesn't already exist at the time of payment (as would be the case when purchasing an iPhone). That's what I get for getting my legal advice from <em>30 Rock</em>.</p>Red Sox2007-10-29T10:26:00-10:002007-10-29T10:26:00-10:00larrytag:knowing.net,2007-10-29:/posts/2007/10/red-sox/<p>I hate to be an American League fan-boy, but now that The Curse has been broken, the truth is that the World Series was pretty anti-climactic. (Not that anything could be as dramatic as the 2004 Sox-Yankees series.)</p>
<p>I love that \<a href="http://www.dropkickmurphys.com/"" target="_blank" rel …</p><p>I hate to be an American League fan-boy, but now that The Curse has been broken, the truth is that the World Series was pretty anti-climactic. (Not that anything could be as dramatic as the 2004 Sox-Yankees series.)</p>
<p>I love that \<a href="http://www.dropkickmurphys.com/"" target="_blank" rel="noopener noreferrer">The Dropkick Murphy's have become The Sound of Boston : they use <em>I'm Shipping Up To Boston</em> and <em>Tessie</em> at Red Sox games and a song of their's was featured in <em>The Departed</em>. Couldn't have happened to a nicer bunch of drunken Micks.</p>Writing a Technical Article: Pt. 4, Client Delays2007-10-29T06:00:00-10:002007-10-29T06:00:00-10:00larrytag:knowing.net,2007-10-29:/posts/2007/10/writing-a-technical-article-pt-4-client-delays/<p>Pt. 1, Pt. 2, and \<a href="http://www.knowing.net/PermaLink%2cguid%2cb9661672-40f8-4e8f-a26e-985fdffd5d2b.aspx"" target="_blank" rel="noopener noreferrer">Pt. 3</p>
<p>One reason why it's very difficult to make a living writing about software development is that while traditional publications were deadline-driven, online outlets are marketing-driven. When there's a …</p><p>Pt. 1, Pt. 2, and \<a href="http://www.knowing.net/PermaLink%2cguid%2cb9661672-40f8-4e8f-a26e-985fdffd5d2b.aspx"" target="_blank" rel="noopener noreferrer">Pt. 3</p>
<p>One reason why it's very difficult to make a living writing about software development is that while traditional publications were deadline-driven, online outlets are marketing-driven. When there's a mistake about when a product will become available, an article in the pipeline can be delayed for an indeterminate period or even canceled entirely.</p>
<p>Such is the case with my article in which I was going to discuss context-sensitive / seam-based image resizing. I thought I was going to have an article finished by mid-October, but here it is on the verge of November and I still don't have the product. And, of course, that means that I haven't received a penny for the work I've done. And on the other hand, if I get a call tomorrow saying the product's ready, I guarantee the next line will be "... so we need that article in 10 days."</p>
<p>Naturally, this makes planning difficult. On the one hand, I need to plan my November and December and I can just say "yes" to some other clients. But I've already done a good chunk of the work for this article and I'd like my image-resizing code to see the light of day.</p>
<p>So... Such is the life of a freelance technical writer.</p>Stop Me Before I Parse Again2007-10-28T10:17:00-10:002007-10-28T10:17:00-10:00larrytag:knowing.net,2007-10-28:/posts/2007/10/stop-me-before-i-parse-again/<p>Must ... Resist ... </p>
<p>Can't ... Stop ...</p>My Nephew, The Paparazzo2007-10-27T14:08:00-10:002007-10-27T14:08:00-10:00larrytag:knowing.net,2007-10-27:/posts/2007/10/my-nephew-the-paparazzo/<p>My nephew Jake went to a friend's bar mitzvah at the Radisson in Scranton, PA. Apparently, the cast of <em>The Office</em> is in town doing a little goodwill and presumably shooting some exteriors (although I don't know why they need to -- the scenes they've been using look <em>totally</em> like Northeastern …</p><p>My nephew Jake went to a friend's bar mitzvah at the Radisson in Scranton, PA. Apparently, the cast of <em>The Office</em> is in town doing a little goodwill and presumably shooting some exteriors (although I don't know why they need to -- the scenes they've been using look <em>totally</em> like Northeastern Pennsylvania. (Sarcastic smiley tk) ). Jake spots Craig Robinson (Daryl the Warehouse Guy) tickling the ivories on the Radisson piano and snaps this <strong>EXCLUSIVE</strong> photo:</p>LOLCode: U R Obsoleted Ruby, Erlang, F#2007-10-26T08:02:00-10:002007-10-26T08:02:00-10:00larrytag:knowing.net,2007-10-26:/posts/2007/10/lolcode-u-r-obsoleted-ruby-erlang-f/<p>\<a href="http://blog.notdot.net/archives/32-LOLCode.net-Now-your-LOLCats-can-use-the-CLR!.html"" target="_blank" atomicselection="true" rel="noopener noreferrer"></p>When Repeatability Isn't A Customer Priority2007-10-23T08:17:00-10:002007-10-23T08:17:00-10:00larrytag:knowing.net,2007-10-23:/posts/2007/10/when-repeatability-isnt-a-customer-priority/<p>This might be better as a series of Twitter "thinking about..." posts, but since I don't really "get" Twitter, I'll jot down this nagging concern here...</p>
<p>I was reading this excellent post on \<a href="http://geekswithblogs.net/coredump/archive/2007/10/19/116178.aspx"" target="_blank" rel="noopener noreferrer …</p><p>This might be better as a series of Twitter "thinking about..." posts, but since I don't really "get" Twitter, I'll jot down this nagging concern here...</p>
<p>I was reading this excellent post on \<a href="http://geekswithblogs.net/coredump/archive/2007/10/19/116178.aspx"" target="_blank" rel="noopener noreferrer">Seven Essential Practices of Software Development [<em>via</em> Steve Pietrek] as I pondered how to convince my client to schedule the time to develop a "heartbeat monitor" and archive that will show the system's behavior over the past few days. <em>I</em> think that's necessary because the system is dependent on external service providers and there are assumptions about correctness and scheduling that, if violated, might lead to very expensive mistakes and lots of finger pointing.</p>
<p>Nor do the external service providers whole-heartedly embrace test-driven QA: there's no set of mocks of my team's system and mocks of their systems that can serve as a reference for developing new functionality.</p>
<p>While <em>I'm</em> convinced that investment in automation will pay off, the customer priorities are focused on new features. Why should we worry about all this Defense Against the Black Arts stuff when we're all friends?</p>
<p>In a sense I'm being defeated by the successes of my team, which, having moved to Scrum, have been rolling out new value regularly; now that we've established that rhythm, <em>not</em> delivering customer-facing features in the coming sprint is highly visible.</p>More on Bash Ups...2007-10-23T06:00:00-10:002007-10-23T06:00:00-10:00larrytag:knowing.net,2007-10-23:/posts/2007/10/more-on-bash-ups/<p>My ever-fitful comment system is apparently acting up, so from my email come these comments in reference to this post :</p>
<blockquote>
<p>I wonder if "cron" would also be a relevant addition to mashup. One of the things I tried to achieve with a Yahoo Pipe and a Google Mashup was to …</p></blockquote><p>My ever-fitful comment system is apparently acting up, so from my email come these comments in reference to this post :</p>
<blockquote>
<p>I wonder if "cron" would also be a relevant addition to mashup. One of the things I tried to achieve with a Yahoo Pipe and a Google Mashup was to consume several feeds on a regular basis, XSL-T them in another form and send the result to another URL.<br>
Maybe this is too much for free mashup platforms as it would be process intensive.</p>
<p>--David Dossot</p>
</blockquote>
<p><strong>Update:</strong> \<a href="http://blogs.msdn.com/johnmont/"" target="_blank" rel="noopener noreferrer">John Montgomery tells me that there is a timer component in Popfly that might satisfy David's scenario.</p>
<p>and</p>
<blockquote>
<p>Great thoughts on command-line "equivalents" for mashup operations.</p>
<p>Check out Orchestr8's AlchemyPoint for a mashup platform that provides both mouse-based and "command-line" modes of creating mashups. In command-line mode you can string together multiple 'actions' and 'conditions' to create quite varied mashups. (e.g., " email <a href="mailto:xx@xx.com">xx@xx.com</a> all links in 'top stories' table if they mention 'Google' "). It's very Unix shell-ish and can provide some pretty unique results.</p>
<p>--Elliot Turner</p>
</blockquote>John Lam Concedes Fight With Ola Bini2007-10-21T13:22:00-10:002007-10-21T13:22:00-10:00larrytag:knowing.net,2007-10-21:/posts/2007/10/john-lam-concedes-fight-with-ola-bini/<p>IronRuby Program Manager John Lam regarding JRuby's \<a href="http://ola-bini.blogspot.com/"" target="_blank" rel="noopener noreferrer">Ola Bini: </p>
<blockquote>
<p><strong>LOB:</strong> If you and Ola Bini were bungie-chorded into a steel cage supplied with mauls, chainsaws, and a copy of Bentley's "Programming Pearls," which of you would survive?</p>
<p><strong>JL:</strong> Well …</p></blockquote><p>IronRuby Program Manager John Lam regarding JRuby's \<a href="http://ola-bini.blogspot.com/"" target="_blank" rel="noopener noreferrer">Ola Bini: </p>
<blockquote>
<p><strong>LOB:</strong> If you and Ola Bini were bungie-chorded into a steel cage supplied with mauls, chainsaws, and a copy of Bentley's "Programming Pearls," which of you would survive?</p>
<p><strong>JL:</strong> Well, Ola is quite a bit bigger than me, so he'd likely kick my ass in a steel cage match</p>
</blockquote>
<p>The amazing thing is I couldn't figure out a way to incorporate that quote into the article I'm writing.</p>
<p><strong>Update:</strong> Ola refuses to take the bait, too:</p>
<blockquote>
<p><strong>OB:</strong> He would probably win. Now, if you gave me Hofstadters "G</p>
</blockquote>And Scientists Said Invisibility Cloaks Were Years Away...2007-10-21T07:58:00-10:002007-10-21T07:58:00-10:00larrytag:knowing.net,2007-10-21:/posts/2007/10/and-scientists-said-invisibility-cloaks-were-years-away/<p>I assume that <a href="https://boingboing.net/2007/10/20/japanese-women-could.html">this</a> is a joke / conceptual art statement but it does remind me of the thought processes of young nerds that are so failure-prone: "If only I elaborate the logical inconsistency of the bully's statements, he will no longer have the temerity to call me names!" On the …</p><p>I assume that <a href="https://boingboing.net/2007/10/20/japanese-women-could.html">this</a> is a joke / conceptual art statement but it does remind me of the thought processes of young nerds that are so failure-prone: "If only I elaborate the logical inconsistency of the bully's statements, he will no longer have the temerity to call me names!" On the other hand, Halloween is coming up. P.S. I think I will keep this image handy in case I ever give a talk on exception handling. "You don't want to do a lot within an exception handler. The more complex your exception handler, the more possible it is to to create a defect or failure-mode <em>within</em> your exception handling process..."</p>Alex, the incredible Gray Parrot, has Died2007-10-20T19:40:00-10:002007-10-20T19:40:00-10:00larrytag:knowing.net,2007-10-20:/posts/2007/10/alex-the-incredible-gray-parrot-has-died/<p>Via Sue Schmitz comes the sad word that Alex, the amazing Gray Parrot whose cognitive abilities were literally incredible, has died. Supposedly (there I go with the doubt), he had a vocabulary of 150 words, could count recognize quantities up to 6, could identify 50 objects, understood concepts such as …</p><p>Via Sue Schmitz comes the sad word that Alex, the amazing Gray Parrot whose cognitive abilities were literally incredible, has died. Supposedly (there I go with the doubt), he had a vocabulary of 150 words, could count recognize quantities up to 6, could identify 50 objects, understood concepts such as "bigger" and "smaller," and knew better than to call virtual methods within constructors.</p>
<p>I'm not surprised that Wikipedia has \<a href="http://en.wikipedia.org/wiki/Alex_(parrot)"" target="_blank" rel="noopener noreferrer">criticisms, but even there it only actually quotes one direct criticism, which in context (in the referenced NY Times article) is pretty clearly simply skepticism, not a repudiation.</p>O Lazy Web (Nitpicking Subset): Is Visual Studio Ever Absolutely Needed?2007-10-20T14:20:00-10:002007-10-20T14:20:00-10:00larrytag:knowing.net,2007-10-20:/posts/2007/10/o-lazy-web-nitpicking-subset-is-visual-studio-ever-absolutely-needed/<p>Is this a strictly true statement? </p>
<p>"One can freely download command-line compilers for all Microsoft languages and never use Visual Studio."</p>
<p>Specifically, don't you need VS to develop for Smartphones and / or Windows Mobile?</p>Bash Ups2007-10-20T10:38:00-10:002007-10-20T10:38:00-10:00larrytag:knowing.net,2007-10-20:/posts/2007/10/bash-ups/<p>With the release to public beta of Popfly, Microsoft's mashup editor, I'll reiterate my theory that mashups are the UNIX shell of the Internet. The corollary is that we need a suite of command equivalents:</p>
<hr>
<p><strong>Command</strong> <strong>Mashup Alternative</strong>
cd, mkdir, rmdir facilities for manipulating "current URI"; REST principles, etc.
mailx …</p><p>With the release to public beta of Popfly, Microsoft's mashup editor, I'll reiterate my theory that mashups are the UNIX shell of the Internet. The corollary is that we need a suite of command equivalents:</p>
<hr>
<p><strong>Command</strong> <strong>Mashup Alternative</strong>
cd, mkdir, rmdir facilities for manipulating "current URI"; REST principles, etc.
mailx messaging transformations and transports: mail, IM, SMS, twitter, etc.
man ?
jobs, ps, kill, sleep, etc. facilities for multiple mashup control
ls spidering facilities / robust HTML parsing, etc. "Get-ChildItem" in all its polymorphic complexity.
who FOAF
finger, chfn blogging
cat, sed, sort, grep, wc, tail, etc. All sorts of facilities for transformation of source to sink</p>
<hr>
<p>Right now, everyone's concentrating on what <em>output</em> the mashup editors can produce or what the component manipulation looks like. I think the winner of the mashup evolution will be the one that provides the most flexible suite of components.</p>F# To Become Product: Very Surprising2007-10-19T14:58:00-10:002007-10-19T14:58:00-10:00larrytag:knowing.net,2007-10-19:/posts/2007/10/f-to-become-product-very-surprising/<p>I'm tempted to label as "shocking" the announcement that F# will become a product fully integrated into Visual Studio, but I suppose it would be hard for anyone to ignore stuff as compelling as <a href="https://blogs.msdn.microsoft.com/dsyme/2007/10/10/introducing-f-asynchronous-workflows/">this</a>. F# is a derivative of OCaml and is a functional programming language. Those who delve …</p><p>I'm tempted to label as "shocking" the announcement that F# will become a product fully integrated into Visual Studio, but I suppose it would be hard for anyone to ignore stuff as compelling as <a href="https://blogs.msdn.microsoft.com/dsyme/2007/10/10/introducing-f-asynchronous-workflows/">this</a>. F# is a derivative of OCaml and is a functional programming language. Those who delve into my language-related or concurrency-related posts will be familiar with the concept that one of the great advantages of functional languages are characteristics that lend themselves to automatic parallelization. Microsoft is making more and more noise about functional approaches (Eric Lippert's "aside" that "<a href="https://blogs.msdn.microsoft.com/ericlippert/2007/10/04/path-finding-using-a-in-c-3-0-part-two/">Immutable data structures are the way of the future in C#."</a> is telling.) and this endorsement of F# is another sign that Redmond is throwing its weight pretty heavily behind this approach.</p>
<p>F# has been well-received among the \<a href="http://lambda-the-ultimate.org/"" target="_blank" rel="noopener noreferrer">hardcore language nerds but you have to give Microsoft credit for getting out ahead of the market on this one. F# is a very different beast than the Iron* languages (Python and Ruby). This isn't Microsoft reacting to market demands, it's Microsoft putting a not-at-all-well-known language into the spotlight.</p>Cannonball Run 20072007-10-17T14:23:00-10:002007-10-17T14:23:00-10:00larrytag:knowing.net,2007-10-17:/posts/2007/10/cannonball-run-2007/<p>I know I should qualify this with "of course, it's terribly irresponsible. If someone had died, what kind of possible excuse..." etc.</p>
<p>But he didn't kill anyone, so I'll just point to the link:</p>
<p>http://www.wired.com/cars/coolwheels/magazine/15-11/ff_cannonballrun?currentPage=all</p>X-Wing Rocket Comes Apart At Launch2007-10-17T06:00:00-10:002007-10-17T06:00:00-10:00larrytag:knowing.net,2007-10-17:/posts/2007/10/x-wing-rocket-comes-apart-at-launch/<p><a href="https://com.com/">This must have been bitter-sweet</a>. Sure, you <em>want</em> to get your rocket back, but talk about going out in a blaze of glory...</p>Software is Hard2007-10-16T06:00:00-10:002007-10-16T06:00:00-10:00larrytag:knowing.net,2007-10-16:/posts/2007/10/software-is-hard/<p>A well-written \<a href="http://www.gamearchitect.net/Articles/SoftwareIsHard.html"" target="_blank" rel="noopener noreferrer">reiteration of the premise that complexity is an essential, not accidental, aspect of software construction. [<em>via</em> links for 2007-10-03 Bill de h?ra ]</p>Supply & demand? Outsourcing backlash? CS grads average $53K out of school2007-10-16T06:00:00-10:002007-10-16T06:00:00-10:00larrytag:knowing.net,2007-10-16:/posts/2007/10/supply-amp-demand-outsourcing-backlash-cs-grads-average-53k-out-of-school/<blockquote>
<p>[C]omputer-science grads saw their average starting salary offers grow by 4.5 percent last year alone. The new average salary for a job right out of college is now \$53,051. That's the highest amount this decade.</p>
<p>Starting salaries surge for computer science grads [Ars Technica]</p>
</blockquote>
<p>Interesting. I still …</p><blockquote>
<p>[C]omputer-science grads saw their average starting salary offers grow by 4.5 percent last year alone. The new average salary for a job right out of college is now \$53,051. That's the highest amount this decade.</p>
<p>Starting salaries surge for computer science grads [Ars Technica]</p>
</blockquote>
<p>Interesting. I still think that the future is mixed-at-best for United States programmers (with our relatively high cost), but at least for now there's some good news.</p>The Least You Can Do2007-10-15T08:52:00-10:002007-10-15T08:52:00-10:00larrytag:knowing.net,2007-10-15:/posts/2007/10/the-least-you-can-do/<p>The only thing that's worse than ignoring a cause is doing something absolutely trivial and patting yourself on the back about it. Apparently if you blog about the environment today, you've done your part. I think there was a day last week when you were supposed to alter your CSS …</p><p>The only thing that's worse than ignoring a cause is doing something absolutely trivial and patting yourself on the back about it. Apparently if you blog about the environment today, you've done your part. I think there was a day last week when you were supposed to alter your CSS style sheets to decry the slaughter of monks in Burma.</p>
<p>You want to do something for the environment? Don't blog about how much you love pandas: reduce your waste stream. You want to support the troops? Don't put a sticker on your SUV: drive a high-mileage car.</p>Two Worthwhile Podcasts2007-10-14T13:47:00-10:002007-10-14T13:47:00-10:00larrytag:knowing.net,2007-10-14:/posts/2007/10/two-worthwhile-podcasts/<p><a href="https://nigelwarburton.typepad.com/philosophy_bites/">Philosophy Bites</a></p>
<p>\<a href="http://www.bbc.co.uk/radio4/history/inourtime/inourtime.shtml"" target="_blank" rel="noopener noreferrer">In Our Time I would say that these have nothing to do with software development, but there was actually a <a href="https://nigelwarburton.typepad.com/philosophy_bites/2007/08/timothy-william.html">great "Philosophy Bites" on vagueness</a> that touched directly on fuzzy logic …</p><p><a href="https://nigelwarburton.typepad.com/philosophy_bites/">Philosophy Bites</a></p>
<p>\<a href="http://www.bbc.co.uk/radio4/history/inourtime/inourtime.shtml"" target="_blank" rel="noopener noreferrer">In Our Time I would say that these have nothing to do with software development, but there was actually a <a href="https://nigelwarburton.typepad.com/philosophy_bites/2007/08/timothy-william.html">great "Philosophy Bites" on vagueness</a> that touched directly on fuzzy logic (which I think Williamson dismisses too quickly -- I'm not at all sure that the absurdity that he says "follows from fuzzy logic" does, in fact, follow according to the rules of fuzzy logic).</p>Blog Citation Standard: Flawed2007-10-13T14:01:00-10:002007-10-13T14:01:00-10:00larrytag:knowing.net,2007-10-13:/posts/2007/10/blog-citation-standard-flawed/<p>"Citing Medicine" has issued a standard for citing blogs in academic writing, which would like this for this entry:</p>
<p>O'Brien, L. Knowing.NET [blog on the Internet]. Kailua Kona: [Larry O'Brien]. [June 2002] - [cited 2007 October 13]. Available from http://www.knowing.net/.</p>
<p>The first thing I don't like is …</p><p>"Citing Medicine" has issued a standard for citing blogs in academic writing, which would like this for this entry:</p>
<p>O'Brien, L. Knowing.NET [blog on the Internet]. Kailua Kona: [Larry O'Brien]. [June 2002] - [cited 2007 October 13]. Available from http://www.knowing.net/.</p>
<p>The first thing I don't like is the "blog on the Internet" as the "type of medium." Why not just "Internet"? Or, if there's some legitimate distinction to be made between a blog and, say, a wiki or customized homepage or Facebook page, why not simply "blog"?</p>
<p>Worse, though, are the rules for date of publication [June 2002] and the availability block. Date of publication is the starting date of the blog, which in <em>a sense</em> parses logically, but that's like citing a television show as dating from the start of its network. But the lack of a permalink for the availability is terrible. To find a particular post, you have to find the main site, somehow navigate to the citation date, and seek the particular reference. Yuch. Permalink, people, permalink.</p>My host is migrating emails: You may get a bounce or a deferred delivery2007-10-12T08:42:00-10:002007-10-12T08:42:00-10:00larrytag:knowing.net,2007-10-12:/posts/2007/10/my-host-is-migrating-emails-you-may-get-a-bounce-or-a-deferred-delivery/<p>Between the semi-regularly broken CAPTCHA on my comment system and reports I'm getting from some correspondents, I may have been hard to get in touch with recently. Try lobrien -at- email for a day or two.</p>XP Symlinks Confuse Subversion No End2007-10-12T06:00:00-10:002007-10-12T06:00:00-10:00larrytag:knowing.net,2007-10-12:/posts/2007/10/xp-symlinks-confuse-subversion-no-end/<p>Word to the wise: do not combine Windows symlinks with Subversion; it cannot handle them:</p>
<p>G:\svn\websites>mkdir foo</p>
<p>G:\svn\websites>svn add foo<br>
A foo</p>
<p>G:\svn\websites>svn commit -m "message"<br>
Adding websites\foo<br>
svn: Commit failed (details follow):<br>
svn: File not found: transaction '39-1', path …</p><p>Word to the wise: do not combine Windows symlinks with Subversion; it cannot handle them:</p>
<p>G:\svn\websites>mkdir foo</p>
<p>G:\svn\websites>svn add foo<br>
A foo</p>
<p>G:\svn\websites>svn commit -m "message"<br>
Adding websites\foo<br>
svn: Commit failed (details follow):<br>
svn: File not found: transaction '39-1', path '/websites/foo'</p>
<p>This seems to hold true no matter which side of the symlink on which you work.</p>
<p>That's a bummer.</p>LINQ + Reflection: Querying the Object Graph2007-10-11T08:01:00-10:002007-10-11T08:01:00-10:00larrytag:knowing.net,2007-10-11:/posts/2007/10/linq-reflection-querying-the-object-graph/<p>Yuriy Solodkyy demonstrates the \<a href="http://weblogs.asp.net/ysolodkyy/archive/2007/10/07/using-linq-with-system-reflection-classes.aspx"" target="_blank" rel="noopener noreferrer">combination of LINQ and Reflection APIs, a technique which could prove to be tremendously powerful and which strikes me as allowing LINQ-enabled languages to have a level of …</p><p>Yuriy Solodkyy demonstrates the \<a href="http://weblogs.asp.net/ysolodkyy/archive/2007/10/07/using-linq-with-system-reflection-classes.aspx"" target="_blank" rel="noopener noreferrer">combination of LINQ and Reflection APIs, a technique which could prove to be tremendously powerful and which strikes me as allowing LINQ-enabled languages to have a level of "dynamism" that puts to shame duck-typing.</p>
<p>Could this simply replace the Visitor pattern with an approach that needs no cooperation from the data structure?</p>
<p>Would this allow an Abstract Factory that allowed you to dynamically find all products of one Factory and replace them with those of another?</p>
<p>[<em>via</em> Steve Pietrek]</p>HDTV: Made The Jump, Mixed Results2007-10-06T09:26:00-10:002007-10-06T09:26:00-10:00larrytag:knowing.net,2007-10-06:/posts/2007/10/hdtv-made-the-jump-mixed-results/<p>A year ago I said that HDTV didn't make sense for me. But with the arrival of Tivo HD, the dollar weakening and making dramatic price drops less likely, and the Red Sox making the playoffs, I decided to make the jump and bought a Philips 42".</p>
<p>The biggest problem …</p><p>A year ago I said that HDTV didn't make sense for me. But with the arrival of Tivo HD, the dollar weakening and making dramatic price drops less likely, and the Red Sox making the playoffs, I decided to make the jump and bought a Philips 42".</p>
<p>The biggest problem is that once you see high-definition channels in your own home side-by-side with standard definition, the standard definition channels look <em>horrible</em>. We actually had the TV for a couple days before I got the HD cable package and we were like "OK, definitely more noticeable compression and blurriness on the bigger screen, but that's fine." And then I got the set-top box and saw how much better the pictures look.</p>
<p>Then, all the trouble started. I chose to stick with Oceanic Time-Warner Cable rather than satellites because to receive HD satellite programming in Hawaii, you have to place two 2.5m dishes in your yard! Our neighbors have them and they're huge and ugly -- a non-starter for us. Plus, my Tivo HD was winging its way island-ward. All I would do is order some CableCards and life would be good.</p>
<p>Well.</p>
<p>Oceanic TWC no longer provides CableCards for HD. You can get a CableCard for SD channels, but if you want HD, you have to use one of their set-top boxes or DVRs. I was a little stunned, but I figured "OK, Tivo had this figured out from the start. So I'll take the set-top box, hook it into Tivo, and use Tivo's magic IR blasters to control the set-top box."</p>
<p>Well.</p>
<p>Turns out that Tivo HD has no facility for inputting HD other than CableCards. (And, just to make it complicated, some people are saying that Oceanic TWC can not legally convert-to-incompatible-form the HD streams of the networks, which provide the majority of the HD content I'd be looking to Tivo (at least until Battlestar Galactica restarts).) (If you thought that forbidding just this kind of practice was the whole <em>point</em> of CableCards, join the crowd.)</p>
<p>So I left my Tivo HD in the box and set up my old Tivo to control the set-top box with IR blasters. "If I need to watch HD, I'll watch it live." Which ticked me off no end. Not only is watching live TV unthinkable after you've gotten used to a DVR, watching live sports in Hawai'i is difficult due to the 3 hour time shift.</p>
<p>Even worse, the picture quality on shows recorded via the set-top box is <em>noticeably</em> worse than shows from the previous week, when they were recorded straight off our previous non-digital cable service. I suspect this has to do with double-compression: we <em>had been</em> recording analog and applying Tivo's compression to it; now we have a digitally-compressed stream decoded by the set-top box, sent to the Tivo and recompressed, naturally resulting in many more artifacts and general degradation of quality.</p>
<p>So to summarize:</p>
<ul>
<li>HD picture quality is mind-blowing, but we only get about a dozen channels in HD (networks, TBS and TNT, Discovery, and National Geographic, and then two showcase/movie channels).</li>
<li>If I want to time-shift HD, I have to use Oceanic's DVR, which if it's anything like their set-top box interface, will be hideous</li>
<li>I can use Tivo, but only on SD channels.</li>
</ul>
<!-- -->
<ul>
<li>I can use Tivo HD, which will probably record SD channels better, but I'll still have to keep the set-top box near the TV in case I want to watch HD. Plus, Tivo HD has a monthly fee.</li>
<li>I can use my old Tivo, in which case</li>
</ul>
<!-- -->
<ul>
<li>Picture quality via the set-top box is hideous, or</li>
<li>I can go back to basic cable and never be able to see HD broadcasting</li>
</ul>
<p>Oh, and then when I went to watch a rented HD DVD movie last night, I ran afoul of what \<a href="http://www.knowing.net/PermaLink%2cguid%2ccb2e395b-32b7-4f2e-a9bb-13eb602e1d4d.aspx"" target="_blank" rel="noopener noreferrer">smells tremendously like some form of DRM .</p>
<p>I'm definitely going to live with the status quo through the playoffs (or at least through the Red Sox run). Manny Ramirez' homerun last night looked <em>awesome</em> in HD.</p>
<p>But after that, I have no idea what I'm going to do.</p>XBox 360 HD DVD Can't Play This Content: C66700B2007-10-06T08:50:00-10:002007-10-06T08:50:00-10:00larrytag:knowing.net,2007-10-06:/posts/2007/10/xbox-360-hd-dvd-cant-play-this-content-c66700b/<p>Trying to play the very first HD DVD that I've rented ("The Host"), I received an XBox blade popup that said "Can't play this content. Reason code: C66700B." Does anyone know what this is? Please don't tell me there are incompatible HD DVD formats or DRM restrictions that say "Oh …</p><p>Trying to play the very first HD DVD that I've rented ("The Host"), I received an XBox blade popup that said "Can't play this content. Reason code: C66700B." Does anyone know what this is? Please don't tell me there are incompatible HD DVD formats or DRM restrictions that say "Oh, hey, sorry, we don't approve of your TV."</p>Content-Aware Image Resizing For Photo Prints2007-09-28T08:08:00-10:002007-09-28T08:08:00-10:00larrytag:knowing.net,2007-09-28:/posts/2007/09/content-aware-image-resizing-for-photo-prints/<p>I've got a few prototypes of content-aware image resizing running and the results are interesting, perhaps primarily because the algorithm works so well that usually you say "eh, what's the big deal?" Unless there are faces in the photo, but more on that later...</p>
<p>Coincidentally, I ordered some prints to …</p><p>I've got a few prototypes of content-aware image resizing running and the results are interesting, perhaps primarily because the algorithm works so well that usually you say "eh, what's the big deal?" Unless there are faces in the photo, but more on that later...</p>
<p>Coincidentally, I ordered some prints to send to my in-laws yesterday and was reminded of the annoyance of crop differences between the standard snapshot aspect ratios. Ah hah, thinks I! I should do one of those "mashup" things the kids are all talking about!</p>
<p>Ideally, you'd have:</p>
<ul>
<li>Easy access from your image software ("Oh, darn! Look at those default crop lines! Let me click on 'Crop Perfect'!)</li>
<li>Integration into the printing process (see above.)</li>
<li>Preview</li>
<li>Maintain original file</li>
</ul>
<p>Hmm.... There's no Picasa plugin API (although there's a Picasa Web Album API) and in my experience, all photo-printing places use an uploading plugin. Hmmm....</p>
<p>Any thoughts on strategy?</p>My Newbie Reaction to Halo 3 : Meh.2007-09-26T09:04:00-10:002007-09-26T09:04:00-10:00larrytag:knowing.net,2007-09-26:/posts/2007/09/my-newbie-reaction-to-halo-3-meh/<p>I've never played Halo nor Halo 2. I've now played the first level ("Groundfall" or somesuch) of Halo 3. Gotta' tell you: my initial impression is that it's not as entrancing as Gears of War or Call of Duty. The cutscenes make absolutely no sense to a newbie, the level …</p><p>I've never played Halo nor Halo 2. I've now played the first level ("Groundfall" or somesuch) of Halo 3. Gotta' tell you: my initial impression is that it's not as entrancing as Gears of War or Call of Duty. The cutscenes make absolutely no sense to a newbie, the level design was nothing special (oh, the trees shake when you move past them. Cute.), the combat tactics weren't clear, and the controls seemed sub-optimal (I read in Wired that you were supposed to always be switching between grenades, guns, and fists. But to use your fists, you have to take your thumb off the "look" control, so it's hard to melee).</p>
<p>People talk about multiplayer, but let me clue you in to something about multiplayer: it's offputting to normal people. Normal people don't enjoy undergoing a series of losses before being buoyed up by the matchmaking system. Perhaps subsequent to the 10th match everything is wonderful as you slot into the ranks of your peers. But I'll tell you what -- I've never played 10 matches online in any game, because my first half-dozen matches have always been unpleasant. In racing games, people intentionally crash through the first corner; in first person shooters, you get picked off ten times in a single match.</p>Those pesky powers of 22007-09-25T13:14:00-10:002007-09-25T13:14:00-10:00larrytag:knowing.net,2007-09-25:/posts/2007/09/those-pesky-powers-of-2/<p>Excel 2007: The problem is that the 3rd column contains =a2*b2 ... (the first 500 numbers for 2\^32 pass, though...)</p>
<hr>
<div class="highlight"><pre><span></span><code> 13
26
49
52
81
87
93
98
104
107
115
117
119
123
162
169
173
174
186
</code></pre></div>
<hr>
<p>etc. etc.</p>
<p>Is there a pattern in there?</p>Ergonomic Workstation Calculator2007-09-24T11:07:00-10:002007-09-24T11:07:00-10:00larrytag:knowing.net,2007-09-24:/posts/2007/09/ergonomic-workstation-calculator/<p><a href="https://www.ergotron.com/tools/workspace-planner"></a> </p>
<p><a href="https://www.ergotron.com/tools/workspace-planner">Helpful</a></p>Augmented Reality from casey chesnut2007-09-24T07:05:00-10:002007-09-24T07:05:00-10:00larrytag:knowing.net,2007-09-24:/posts/2007/09/augmented-reality-from-casey-chesnut/<p>casey chesnut has been \<a href="http://www.mperfect.net/blog/browse.aspx%3fbid%3d633261847266875000"" target="_blank" rel="noopener noreferrer">playing around with augmented reality for the UMPC. I think he's going strictly for a technology demo, but the physical tags he's constructed seem to be about the right size …</p><p>casey chesnut has been \<a href="http://www.mperfect.net/blog/browse.aspx%3fbid%3d633261847266875000"" target="_blank" rel="noopener noreferrer">playing around with augmented reality for the UMPC. I think he's going strictly for a technology demo, but the physical tags he's constructed seem to be about the right size for a conference badge. That'd be kind of cool -- hold up your UMPC in a crowd and get a "magic window" collection of homepage URLs?</p>Software Transactional Memory C++ Compiler from Intel2007-09-21T06:00:00-10:002007-09-21T06:00:00-10:00larrytag:knowing.net,2007-09-21:/posts/2007/09/software-transactional-memory-c-compiler-from-intel/<p>Intel's announced the availability of a prototype C++ compiler implementing Software Transactional Memory, one of the central topics of this brilliant \<a href="http://www.knowing.net/ct.ashx%3fid%3df405eb51-5e89-4e9d-864f-529914e78017%26url%3dhttp%253a%252f%252fwww.dotnetrocks.com%252f"" target="_blank" rel="noopener noreferrer">.NET Rocks show.</p>
<p>That's exciting, although …</p><p>Intel's announced the availability of a prototype C++ compiler implementing Software Transactional Memory, one of the central topics of this brilliant \<a href="http://www.knowing.net/ct.ashx%3fid%3df405eb51-5e89-4e9d-864f-529914e78017%26url%3dhttp%253a%252f%252fwww.dotnetrocks.com%252f"" target="_blank" rel="noopener noreferrer">.NET Rocks show.</p>
<p>That's exciting, although I <em>suspect</em> that on just two cores STM will be disappointing.</p>Magnifying Glass / Bug ID Expert System2007-09-20T11:08:00-10:002007-09-20T11:08:00-10:00larrytag:knowing.net,2007-09-20:/posts/2007/09/magnifying-glass-bug-id-expert-system/<p>I love this idea: a magnifying glass with a built-in expert system for identifying bugs. <img alt="" src="https://craphound.com/images/talkingbug.jpg">That's a nice combination of form and function. My thrill was clouded upon reading the that it only identifies "more than 50 real live bugs;" if you're going to do the hardware and firmware for …</p><p>I love this idea: a magnifying glass with a built-in expert system for identifying bugs. <img alt="" src="https://craphound.com/images/talkingbug.jpg">That's a nice combination of form and function. My thrill was clouded upon reading the that it only identifies "more than 50 real live bugs;" if you're going to do the hardware and firmware for this, it ought to be trivial to burn in the taxonomy for "thousands of real live bugs!" See, for instance, the remarkable \<a href="http://www.amazon.com/exec/obidos/redirect%3fpath%3dASIN/B0001NE2AK%26link_code%3das2%26camp%3d1789%26tag%3dthinkinginnet-20%26creative%3d9325"" target="_blank" rel="noopener noreferrer">20Q orb.</p>
<p>Once upon a time, I fielded an expert system for identifying seabirds. One of the big problems was that interacting with the display necessarily meant taking your eyes off the seabird and, if you weren't experienced, that often meant considerable time before re-acquiring. But if you <em>were</em> an experienced birder, you didn't need the expert system. Plus display and battery life on the available portable computers of the time were problematic.</p>
<p>When the Palm came out, I investigated developing expert systems for them: the target niches were going to be birds, plants, and mushrooms. Too little market confidence and too few resources kept that one at the prototype stage.</p>
<p>Sadly, that "more than 50" line and the lack of "I don't know" button makes me wager that instead of having a real expert system, with inferencing and reasoning under uncertainty, the software is just a simple tree. Which, if I'm right, is pathetic -- all of that work to develop a device and then to cripple it, for lack of a couple of hundred lines of code.</p>Writing A Technical Article, Pt. 3: Research Begins...2007-09-11T00:00:00-10:002007-09-11T00:00:00-10:00larrytag:knowing.net,2007-09-11:/posts/2007/09/writing-a-technical-article-pt-3-research-begins/<p>I'm not one of those people for whom the task of composition is a somewhat mechanical extension of increasingly detailed outlines. Nonetheless, research consumes between 80-90% of the time I spend on a technical article (note I said <em>time</em> and not <em>effort --</em> subjectively, writing text is two or three times …</p><p>I'm not one of those people for whom the task of composition is a somewhat mechanical extension of increasingly detailed outlines. Nonetheless, research consumes between 80-90% of the time I spend on a technical article (note I said <em>time</em> and not <em>effort --</em> subjectively, writing text is two or three times harder than writing C++. You can satisfy a compiler.)</p>
<p>In this case, research will consist of:</p>
<ol>
<li>Integrating CodeAnalyst and Eclipse</li>
<li>Profiling a simple application</li>
<li>Implementing an image-processing application</li>
<li>Profiling it to discover a performance problem</li>
<li>Investigating that problem with CodeAnalyst</li>
<li>Ameliorating it</li>
<li>Evaluating the performance "win"</li>
<li>If not "big enough" go to 3 </li>
</ol>
<p>In this case, my target sample application has two algorithms that I think will be difficult:</p>
<ol>
<li>Seam-discovery (CPU intensive)</li>
<li>Seam-removal (Memory-manipulation intensive)</li>
</ol>
<p>With seam-discovery, I know that even if I implement a known-good algorithm (such as graph-cuts), I am guaranteed to peg the CPUs. My big gamble professionally is that I'm a good enough programmer to find a Step 6 "win" that I can pull off in a reasonable amount of time. A safer bet would be to choose an algorithm that would have performance problems if <em>intentionally</em> implemented in a naive manner (for instance, a filter that just iterated across rows and columns and, at each pixel, retrieved the neighboring pixels and averaged them. Pretty easy to tune that up!)</p>
<p>Now, a confession. By the time you read this, I've been somewhere not-Hawai'i for a week or so. I'll carry print outs of this paper on content-aware image resizing and \<a href="http://www.knowing.net/ct.ashx%3fid%3d383b9b44-afcb-4ac0-8162-10c966778c25%26url%3dhttp%253a%252f%252fwww.cs.cornell.edu%252frdz%252fPapers%252fBVZ-iccv99.pdf"" target="_blank" rel="noopener noreferrer">this paper on graph-cuts and study them on the plane tomorrow. I'll have my laptop with me and may noodle around with source code, but it's far more likely that I'll be working with pen and paper to see if I can "get" the algorithm intuitively. Other than that, I'm going to do my darnedest not to spend too much time thinking about computers.</p>
<p>Coming September 19th or thereabouts: Part 4, Research Gets Underway...</p>Iron is the New Sharp2007-09-10T20:05:00-10:002007-09-10T20:05:00-10:00larrytag:knowing.net,2007-09-10:/posts/2007/09/iron-is-the-new-sharp/<p>Some d00d named Leppie has written a \<a href="http://xacc.wordpress.com/"" target="_blank" rel="noopener noreferrer">Lisp for the DLR [<em>via</em> Jason Bock]</p>iPod to RCA: Instant Add-To-Cart2007-09-07T14:05:00-10:002007-09-07T14:05:00-10:00larrytag:knowing.net,2007-09-07:/posts/2007/09/ipod-to-rca-instant-add-to-cart/<p>Alan Zeichick deserves a fortune in Amazon referral fees for \<a href="http://www.amazon.com/Cables-Go-35507-Connector-Cable/dp/B000JG3WBY"" target="_blank" rel="noopener noreferrer">this: iPod connector to RCA plugs. </p>Writing A Technical Article, Part 2: Gathering Tools2007-09-06T00:00:00-10:002007-09-06T00:00:00-10:00larrytag:knowing.net,2007-09-06:/posts/2007/09/writing-a-technical-article-part-2-gathering-tools/<p>Probably the biggest difference between academic and commercial writing is this: academic writing is almost always concerned with algorithms and process, commercial writing is <em>almost always</em> driven by a specific set of technologies. In this case, I'm being paid by AMD to explain integration of CodeAnalyst and <a href="http://www.eclipse.org/cdt/">Eclipse CDT</a>. So …</p><p>Probably the biggest difference between academic and commercial writing is this: academic writing is almost always concerned with algorithms and process, commercial writing is <em>almost always</em> driven by a specific set of technologies. In this case, I'm being paid by AMD to explain integration of CodeAnalyst and <a href="http://www.eclipse.org/cdt/">Eclipse CDT</a>. So that dictates that I'll be using C++, which leads to a couple questions:</p>
<ul>
<li>Linux or Windows?</li>
<li>What C++?</li>
</ul>
<p>The Linux or Windows question is fairly easy for me to answer: I boot into Windows and run Linux in Virtual Machines. For an article on a profiler, the VM is a complication -- CodeAnalyst works within a VM, of course, but since I expect this article to get down to the hardware, I don't want any confusion about how toasty-warm my code is making my Opterons. So I'll be experiencing the code in Windows. But when writing about Eclipse, surely I should imagine that my target audience is not strictly Windows-based. So it seems logical to set up a compiler-chain based on <a href="http://gcc.gnu.org/">GNU C++</a>: I know that will be portable. (Note: I'll probably cross-compile with at least Microsoft C++ and compare the experience. That might give me enough information for, if not an article, at least a column.)</p>
<p>Since the article is supposed to emphasize multicore/multichip development and in C++, it's a no-brainer that I'll be using OpenMP. My next thought is unit-testing. For one thing, I just don't develop anything without unit-testing anymore. For another, repeatability is critical to the article. For a third, I expect to hit some hard problems along the way and unit-testing is the best way to maintain momentum in the face of brain-twisters. I have not compared C++ unit-testing frameworks, but \<a href="http://www.boost.org/libs/test/doc/index.html"" target="_blank" rel="noopener noreferrer">Boost has a test component, and while there may well be better, I know that Boost won't be poor.</p>
<p>Version control is not the same issue in an article that it is in professional development, but you can never over-estimate the benefit of a backup: I'll be using \<a href="http://subversion.tigris.org/"" target="_blank" rel="noopener noreferrer">Subversion against a local server.</p>
<p>Since I know that I'll be doing image-processing, I'd just as well use a library or two to handle file-loading and basic pixel manipulation. If I were building an application, I'd <em>definitely</em> tend towards GTK+. However, I want to keep things as simple as possible around the algorithm(s) that I'll be developing, so I'm going to see how far I can get with this project, \<a href="http://cimg.sourceforge.net/"" target="_blank" rel="noopener noreferrer">CImg, which seems nice and minimal.</p>
<p>So my initial tool list is:</p>
<ul>
<li>CodeAnalyst : Profiler</li>
<li>Eclipse CDT : IDE</li>
<li>GCC : Compiler-chain</li>
<li>OpenMP : Shared-memory parallel programming</li>
<li>Boost.Test : Unit-testing</li>
<li>Subversion : VCS</li>
<li>CImg : Image-processing library</li>
</ul>
<p>If I need or change libraries, I'll make mention of it in forthcoming posts.</p>
<p>Next: Part 3, Research Begins...</p>I .NET Rock!2007-09-04T07:58:00-10:002007-09-04T07:58:00-10:00larrytag:knowing.net,2007-09-04:/posts/2007/09/i-net-rock/<p>I'm on <a href="https://www.dotnetrocks.com/">.NET Rocks this week talking about concurrency</a> -- a sure sign that Carl and Richard have run out of interesting people to talk to. Nonetheless, I try to not make too many mistakes when explaining Shared Memory Parallel, Software Transactional Memory, Message Passing, etc.</p>Good Post on the Byzantine Generals Problem2007-09-03T18:42:00-10:002007-09-03T18:42:00-10:00larrytag:knowing.net,2007-09-03:/posts/2007/09/good-post-on-the-byzantine-generals-problem/<p>If you are interested in concurrent programming, you'll eventually come across the Byzantine Generals problem. Mark Nelson has a good post explaining it.</p>Writing A Technical Article, Pt. 1: Background2007-09-03T09:01:00-10:002007-09-03T09:01:00-10:00larrytag:knowing.net,2007-09-03:/posts/2007/09/writing-a-technical-article-pt-1-background/<p>I thought I'd try blogging the development of a technical article; it might prove interesting to, I dunno', 3 people in the world.</p>
<p>I've been contracted to write a 2,500-words-plus-listings article on using AMD's CodeAnalyst profiler with Eclipse, especially relating to multithreaded / multicore development. So that's a pretty beefy …</p><p>I thought I'd try blogging the development of a technical article; it might prove interesting to, I dunno', 3 people in the world.</p>
<p>I've been contracted to write a 2,500-words-plus-listings article on using AMD's CodeAnalyst profiler with Eclipse, especially relating to multithreaded / multicore development. So that's a pretty beefy article, about twice the length of a typical technical article in a print magazine. CodeAnalyst works with native code, so my sample program(s) pretty much have to be written in C++ -- anything else would limit the audience.</p>
<p>AMD targets an experienced audience, so the educational goals for the article are "The reader will be able to..."</p>
<ul>
<li>... enable and gather data using CodeAnalyst from within <a href="http://www.eclipse.org/cdt/">Eclipse CDT</a></li>
<li>... navigate within the main profiles provided</li>
<li>... recognize the profile most clearly associated with their performance limits</li>
<li>... determine the source-code lines associated with a performance issue</li>
<li>... after making code changes, compare the performance of subsequent runs"</li>
</ul>
<p>Which is a heck of a lot of ground to cover. So the end result will be something like an advanced tutorial that you might get towards the end of a piece of documentation.</p>
<p>My <em>professional</em> goals are to deliver a technically sound article that satisfies my client's goals within a profitable range of hours. I can control that primarily by manipulating my sample program(s); the amount of time I need to research the actual <em>use</em> of Eclipse or CodeAnalyst is minimal, since I know both products. The research aspect of the article -- always the most time-consuming in a technical article -- will be the development of sample program(s) that:</p>
<ul>
<li>have a performance-limit that can be ameliorated,</li>
<li>are comprehensible, and</li>
<li>can be distributed (this limits my use of libraries)</li>
</ul>
<p>My <em>personal</em> goals are to make sample programs that are interesting in and of themselves. This is a weakness on my part, but what can you do? In this particular case, I hope to implement some significant part of the algorithms used for content-aware image resizing. I have no intention, or interest, in recreating the GUI shown in the video. I have neither the time nor, quite honestly, the mindset -- once I see the algorithm work, I can guarantee you that my interest in this will virtually disappear. That's one reason why I'm not rich.</p>
<p>Next up: Part 2, Gathering Tools</p>I've Issued a DMCA Takedown of the NBA2007-09-03T08:53:00-10:002007-09-03T08:53:00-10:00larrytag:knowing.net,2007-09-03:/posts/2007/09/ive-issued-a-dmca-takedown-of-the-nba/<p>Following the lead of the <a href="https://boingboing.net/2007/08/30/science-fiction-writ-1.html">SFWA, which issued a takedown to a fan site based on nothing but the existence of the strings "Asimov" or "Silverberg" in a text file</a>, I've demanded that NBA.com remove all pages that refer to "Larry O'Brien." Those bastards have been distributing my source …</p><p>Following the lead of the <a href="https://boingboing.net/2007/08/30/science-fiction-writ-1.html">SFWA, which issued a takedown to a fan site based on nothing but the existence of the strings "Asimov" or "Silverberg" in a text file</a>, I've demanded that NBA.com remove all pages that refer to "Larry O'Brien." Those bastards have been distributing my source code long enough.</p>Seam Generation Using A*2007-09-01T09:44:00-10:002007-09-01T09:44:00-10:00larrytag:knowing.net,2007-09-01:/posts/2007/09/seam-generation-using-a/<p>The key to content-aware image resizing (and other recent image algorithms) is the discovery of "seams" -- paths of pixels that don't differ much from each other. Such seams are places where the picture can be "pulled apart" gracefully. In image resizing, the seam is discarded and the two remaining pieces …</p><p>The key to content-aware image resizing (and other recent image algorithms) is the discovery of "seams" -- paths of pixels that don't differ much from each other. Such seams are places where the picture can be "pulled apart" gracefully. In image resizing, the seam is discarded and the two remaining pieces glued together -- when done time and time again, the result is the astonishing resizing behavior.</p>
<p>In the image in this post, a blown-up anti-aliased letter "R", an obvious seam exists straight down the left side. A not-quite-as-good seam might be along the right side, but cutting diagonally back across the tail of the "R."</p>
<p>Other people have used seams to automate collaging and masking. All very interesting, but the point of this post is to talk very briefly about the algorithms used to generate the seams.</p>
<p>Optimal seam generation is NP-hard. So it boils down to what works efficiently. \<a href="http://www.cs.cornell.edu/rdz/Papers/BVZ-iccv99.pdf"" target="_blank" rel="noopener noreferrer">Graph-cuts are the preferred method, but I just can't get out of my head that the simple path-finding method called A* might be effective.</p>
<p>The thing that is nagging at me is that A* uses a cost <em>approximation</em> to figure out the next step forward; it seems to me that when manipulating many seams, using approximations that might last for dozens of seams would have a big benefit. The other obvious thing about A* is that the approximations are easy to build: recursively develop lower-and-lower resolution images.</p>
<p>For instance, when the above image is converted into brightness values, you can average neighbors to create the values shown in yellow, and average those to create the values in red. (Did you think "\<a href="http://www.knowing.net/CommentView%2cguid%2cb67e40fa-9e00-4321-a110-40d5bece5809.aspx"" target="_blank" rel="noopener noreferrer">Haar wavelet"?)</p>
<p>Initially, this looks promising (the left-most yellow column is a clear winner), but at coarse levels, it's deceptive (For the red, lowest-resolution "image," you would clearly be drawn towards the right side for initial processing. Intuitively, you would think that most images would have several side-by-side seams (i.e., that would show up at coarser levels). Also, after seam removal, you would be able to "mark dirty" the approximations (i.e., the coarser calculations) and trigger recalculation as the amount of removed seams became significant (and, obviously, <em>not</em> recalculate areas through which the seam <em>did not</em> pass). \<a href="http://www.knowing.net/images/SeamGenerationUsingA_8204/image_5.png"" atomicselection="true"></p>
<p>This is kind of killing me, because I don't have time to explore an algorithm that I only <em>suspect</em> will be efficient.</p>
<p>Grrr....</p>Content-Aware Resizing: Looks Like C++2007-08-30T18:17:00-10:002007-08-30T18:17:00-10:00larrytag:knowing.net,2007-08-30:/posts/2007/08/content-aware-resizing-looks-like-c/<p>The good news is that I got a contract to write an article in which to discuss content-aware resizing (or rather, I got a contract for an article on performance tuning; I'll use the resizing algorithm as the sample).</p>
<p>The bad news is that the profiler I'll be discussing is …</p><p>The good news is that I got a contract to write an article in which to discuss content-aware resizing (or rather, I got a contract for an article on performance tuning; I'll use the resizing algorithm as the sample).</p>
<p>The bad news is that the profiler I'll be discussing is native-code only, so it looks like I'll be writing my program in C++.</p>
<p>I would still like to do a managed-code version and I'll write my C++ with an eye towards portability, but unless I can figure out a simple seam-generation algorithm, I doubt that I'll have the time. Right now, I think <a href="http://www.cs.cornell.edu/rdz/Papers/BVZ-iccv99.pdf">Boykov-Veksler-Zabih graph-cutting</a> is the answer as far as runtime efficiency, but it's not a trivial algorithm to implement. I spent last evening noodling around with other approaches that might not be as effective, but with which I'm more familiar; unfortunately, I didn't see anything to convince me they would work. </p>Implementation of Content Aware Image Resizing2007-08-29T11:14:00-10:002007-08-29T11:14:00-10:00larrytag:knowing.net,2007-08-29:/posts/2007/08/implementation-of-content-aware-image-resizing/<p>Regular readers will not be surprised to hear that I spent the morning working on an implementation of this.</p>
<p>Figuring out the "next" seam is simple enough, but coming up with an optimal sequence is going to take more time. Stay tuned...</p>
<p>Now, would you be most interested in seeing …</p><p>Regular readers will not be surprised to hear that I spent the morning working on an implementation of this.</p>
<p>Figuring out the "next" seam is simple enough, but coming up with an optimal sequence is going to take more time. Stay tuned...</p>
<p>Now, would you be most interested in seeing this implemented in:</p>That's Annoying: HTTP Meta-Refresh In Feed Ads2007-08-29T09:30:00-10:002007-08-29T09:30:00-10:00larrytag:knowing.net,2007-08-29:/posts/2007/08/thats-annoying-http-meta-refresh-in-feed-ads/<p>I just glanced over at my RSS aggregator and was surprised to see a full-page Web ad for something I obviously wouldn't be interested in. I clicked the "back" button and saw the normal newspaper layout and a nondescript blogpost that had a Feedburner-supplied ad at the bottom.</p>
<p>Which, in …</p><p>I just glanced over at my RSS aggregator and was surprised to see a full-page Web ad for something I obviously wouldn't be interested in. I clicked the "back" button and saw the normal newspaper layout and a nondescript blogpost that had a Feedburner-supplied ad at the bottom.</p>
<p>Which, in dastardly fashion, uses JavaScript to trigger a redirect / refresh.</p>Apology: Difficulty Commenting2007-08-29T06:00:00-10:002007-08-29T06:00:00-10:00larrytag:knowing.net,2007-08-29:/posts/2007/08/apology-difficulty-commenting/<p>Several people have let me know that comments often fail to post / validate. I'm planning on updating to the latest das Blog in a few weeks, after I do some traveling. Until then, I cannot afford to turn off CAPTCHA and I know that not every comment fails. My suggestion …</p><p>Several people have let me know that comments often fail to post / validate. I'm planning on updating to the latest das Blog in a few weeks, after I do some traveling. Until then, I cannot afford to turn off CAPTCHA and I know that not every comment fails. My suggestion (irritating, I know) is to Ctl-A, Ctl-C your comment, try to post it and if it fails, at least you can just Ctl-V it.</p>Content Aware Image Resizing: OMFG2007-08-29T00:00:00-10:002007-08-29T00:00:00-10:00larrytag:knowing.net,2007-08-29:/posts/2007/08/content-aware-image-resizing-omfg/<p>This video of an image manipulation algorithm shown at SIGGRAPH is jaw-dropping. They calculate paths through an image that have low entropy and either delete or interpolate them, creating images that shrink or grow while not distorting the "interesting" elements. (<em>via</em> John Lam) Here's \<a href="http://www.faculty.idc …</p><p>This video of an image manipulation algorithm shown at SIGGRAPH is jaw-dropping. They calculate paths through an image that have low entropy and either delete or interpolate them, creating images that shrink or grow while not distorting the "interesting" elements. (<em>via</em> John Lam) Here's \<a href="http://www.faculty.idc.ac.il/arik/imret.pdf"" target="_blank" rel="noopener noreferrer">the paper from the conference.</p>Lectures are Ineffective2007-08-28T11:48:00-10:002007-08-28T11:48:00-10:00larrytag:knowing.net,2007-08-28:/posts/2007/08/lectures-are-ineffective/<p>I used to frequently attend, talk at, and help organize software development conferences. As a former magazine editor, I couldn't help but compare the "information bandwidth" (if not the ultimate efficacy) of lectures with magazine articles and books. I concluded that successful one-hour lectures provided about the information of an …</p><p>I used to frequently attend, talk at, and help organize software development conferences. As a former magazine editor, I couldn't help but compare the "information bandwidth" (if not the ultimate efficacy) of lectures with magazine articles and books. I concluded that successful one-hour lectures provided about the information of an 1,800-word technical article (which is about 1.5x the length I believe is most effective for a technical article). Attempts to provide more information in an hour-long lecture forced skipping important details, attempts to provide much less information made the lecture too fluffy (this observation was validated by attendee ratings. Not that attendee ratings are primarily correlated to information delivered, but that's the topic of another post.)</p>
<p>This enforces the not-as-common-as-it-should-be wisdom that lectures are the least valuable aspect of professional conferences. Not that lectures are unimportant; you should attend conferences with great lectures, and even go out of your way to <em>be in the hall</em> as the lecture begins and ends, but you ought not to be terribly concerned about actually <em>attending</em> hour-long lectures.</p>
<p>Many conferences today are moving towards much shorter lectures: 15, 20, and 30 minutes. I think this dramatically increases value to the attendee (while making things significantly harder for the presenters and <em>vastly</em> harder for the organizers).</p>
<p>Phillip Greenspun, in a post on \<a href="http://blogs.law.harvard.edu/philg/2007/08/23/improving-undergraduate-computer-science-education/"" target="_blank" rel="noopener noreferrer">improving undergraduate CS quality that holds for professional training as well, concludes:</p>
<ul>
<li>Lecturing has been found to be extremely ineffective by all researchers. The FAA limits lectures to 20 minutes or so in U.S. flight schools.</li>
<li>Lab and project work are where students learn the most. The school that adopted lab/projects as the core of their approach quickly zoomed to the first position among American undergrad schools of engineering (<a href="http://www.olin.edu/">www.olin.edu</a>).</li>
<li>Engineers learn by doing progressively larger projects, not by doing what they're told in one-week homework assignments or doing small pieces of a big project</li>
<li>Everything that is part of a bachelor's in CS can be taught as part of a project that has all phases of the engineering cycle, e.g., teach physics and calculus by assigning students to build a flight simulator</li>
<li>It makes a lot of sense to separate teaching/coaching from grading and, in the Internet age, it is trivial to do so. Define the standard, but let others decide whether or not your students have met the standard.</li>
<li>A student who graduates with a portfolio of 10 systems, each of which he or she understands completely and can show off the documentation as well as the function (on the Web or on the student's laptop), is a student who will get a software development job.</li>
</ul>BZ Media Among Fastest-Growing Private Companies in America2007-08-27T09:49:00-10:002007-08-27T09:49:00-10:00larrytag:knowing.net,2007-08-27:/posts/2007/08/bz-media-among-fastest-growing-private-companies-in-america/<p>Congratulations to my friends (and employers) at BZ Media, which has made the cut for Inc. Magazine's "5,000 list," ranking the fastest-growing private companies in the US.</p>C++0x to Incorporate Standard Threading Model2007-08-24T09:19:00-10:002007-08-24T09:19:00-10:00larrytag:knowing.net,2007-08-24:/posts/2007/08/c0x-to-incorporate-standard-threading-model/<p>The working groups of the C++0x committee are working hard to complete a <em>major</em> new standard for C++ (there's a big meeting here in Kona in October). If you're not intimate with C++, you may be surprised that such an important language has not had a standard threading model …</p><p>The working groups of the C++0x committee are working hard to complete a <em>major</em> new standard for C++ (there's a big meeting here in Kona in October). If you're not intimate with C++, you may be surprised that such an important language has not had a standard threading model and that such a model is a <em>major</em> part of the C++0x version. This is actually part-and-parcel of the design philosophy that made C and C++ so important: the number of libraries dictated by the standard for C and C++ is much smaller than the BCL or Java's SE libraries. This allows standard C and C++ to be available for hundreds of processors.</p>
<p>I recently read the public C++0x papers on threading (links below). The proposed threading model is non-radical and is based on Boost.Thread. <strong>The reasonable perspective is that this is a conservative decision thoroughly in keeping with C/C++'s long tradition of minimal hardware/OS assumptions.</strong></p>
<p>The emotional perspective is that they've let slip by a golden opportunity to incorporate the best thinking about memory models. "Multi-threading and locking" is, I would argue, demonstrably broken for business programming. It just doesn't work in a world of systems built from a combination of libraries and user-code; while you <em>can</em> create large applications based on this model, large multithreaded applications based on locking require not just care, but sophistication, at <em>every level</em> of coding. By standardizing an established systems-level model, <strong>C++0x foregoes an opportunity for leadership, albeit radical.</strong></p>
<p>One of the real thought leaders when it comes to more sophisticated concurrency semantics is Herb Sutter. His Concur model (here's a \<a href="http://microsoft.sitestream.com/PDC05/TLN/TLN309_files/Default.htm%23nopreload%3d1%26autostart%3d1"" target="_blank" rel="noopener noreferrer">talk on Concur from PDC '05) is, I think, a substantial step forward and I've <em>really</em> hoped to see it influence language design. Is Sutter, though, just an academic with flighty thoughts and little understanding of the difficulties of implementation? It seems unlikely, given that he's the <em>Chair</em> of the ISO C++ standards committee. So you can see why there might have been an opportunity.</p>
<p>Multithreading proposals for C++0x:</p>
<ul>
<li><a href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2007/n2320.html">http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2007/n2320.html</a></li>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2334.htm">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2334.htm</a></li>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2338.html">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2338.html</a></li>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2381.html">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2381.html</a></li>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2382.html">http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2382.html</a></li>
</ul>Tilera 64-core CPU: The Future Cometh2007-08-23T06:00:00-10:002007-08-23T06:00:00-10:00larrytag:knowing.net,2007-08-23:/posts/2007/08/tilera-64-core-cpu-the-future-cometh/<p>Looks like the only programming tools for Tilera's 64-Core CPU is a C compiler, but the day is fast approaching when we're going to start seeing more and more of these types of tools in the mainstream.</p>Why Can't You Distribute The Social Graph?2007-08-23T06:00:00-10:002007-08-23T06:00:00-10:00larrytag:knowing.net,2007-08-23:/posts/2007/08/why-cant-you-distribute-the-social-graph/<p>I don't really follow the discussion about social networking (I guess I'm either a little too old or a little too antisocial to "get" it), but it seems to me that FOAF + OpenID is "ob hack." It seems to me that all that has to happen is that someone writes …</p><p>I don't really follow the discussion about social networking (I guess I'm either a little too old or a little too antisocial to "get" it), but it seems to me that FOAF + OpenID is "ob hack." It seems to me that all that has to happen is that someone writes a local / smart client editor with the kind of nit-picky details that you have to deal with for a blog editor (FTP upload, WordPress plugin, etc.) and <a href="http://www.worldwidewords.org/qa/qa-bob1.htm">Bob's your uncle</a>.</p>DSL for the DLR?2007-08-22T10:13:00-10:002007-08-22T10:13:00-10:00larrytag:knowing.net,2007-08-22:/posts/2007/08/dsl-for-the-dlr/<p>(HOTEL_BLOCK_RESERVATION(HOTEL_ID (IATA_NODE MDW) (PHONE_NUMBER 708 563 0200) (HOTEL_NAME Courtyard by Marriot)) (DAY_BLOCK (DATE_NODE 08 31 07) (FLIGHT_BLOCK (PAIRING_NODE (PAIRI... <em>etc...</em></p>
<p><em>"VisitorTests.parsesTheWholeThing(): Lex & Parse: 2765 ms. ReservationCountWalker 282 ms. to find 27327 reservations"</em></p>
<p>Man, if I could just get …</p><p>(HOTEL_BLOCK_RESERVATION(HOTEL_ID (IATA_NODE MDW) (PHONE_NUMBER 708 563 0200) (HOTEL_NAME Courtyard by Marriot)) (DAY_BLOCK (DATE_NODE 08 31 07) (FLIGHT_BLOCK (PAIRING_NODE (PAIRI... <em>etc...</em></p>
<p><em>"VisitorTests.parsesTheWholeThing(): Lex & Parse: 2765 ms. ReservationCountWalker 282 ms. to find 27327 reservations"</em></p>
<p>Man, if I could just get my clients to fund it, I could make that Silverlight "air travel" demo look like a joke...</p>Data Volumes Trumping Core Multiplication? Interesting Thought2007-08-19T06:00:00-10:002007-08-19T06:00:00-10:00larrytag:knowing.net,2007-08-19:/posts/2007/08/data-volumes-trumping-core-multiplication-interesting-thought/<p>Bill de h?ra makes an intriguing pitch that programming will be impacted by increasing data volumes more than by the transition to multi-/many-core. His basis is anecdotal -- we don't have the same metaphysical certainty that all of us will be dealing with much-larger datasets as we have the …</p><p>Bill de h?ra makes an intriguing pitch that programming will be impacted by increasing data volumes more than by the transition to multi-/many-core. His basis is anecdotal -- we don't have the same metaphysical certainty that all of us will be dealing with much-larger datasets as we have the certainty that we will all be dealing with multiple and then many cores -- but is logical. The speed of a single stream of in-cache instructions is blazing: short of <a href="http://mathforum.org/library/drmath/view/51947.html">chaotic functions</a>, it's hard to imagine perceptibly-slow scenarios that don't involve large amounts of data.</p>
<p>What I find especially thought-provoking about this argument is that it stands in opposition to another post I was going to make about YAGNI infrastructure. Not long ago, Alan Zeichick ranked databases and Ian Griffiths questioned whether he took price-performance into account. Even allowing that there are costs for OSS (training, tools, administration, etc.), I've noticed that few real-world CEOs understand where their companies stand in relationship to scaling. In my experience, they often over-buy software- and hardware- capacity and under-buy contingency capacity.</p>
<p>It seems to me that nowadays we work more and more with data <em>streams</em> and not data <em>sets</em>. On a transaction-to-transaction basis, I think it's an uncommon application that uses more data than can fit into several gigabytes of RAM (obvious exception: multimedia data). Never mind multi-node Map-Reduce; I'm saying that it seems to me that many "real" business systems could have a single-node non-relational data access layer.</p>
<p>It seems that what I'm saying is in direct contrast to what de h?ra is describing, and yet points to the same "maybe we ought not to start from the assumption of a relational DB" heresy. No conclusion... food for thought ...</p>
<p><em>Reflection:</em> I think I let my attention wander -- the world de h?ra is describing is that high-performance computing and I wandered into general business-computing. The two intersect, of course, but are not generally the same. So the thought then becomes that powerful relational databases are being squeezed from both the low-end ("eh, just put in memory") and the high-end ("ok, so this is our distributed tuple-space...").</p>C# Currying Mechanics2007-08-18T07:30:00-10:002007-08-18T07:30:00-10:00larrytag:knowing.net,2007-08-18:/posts/2007/08/c-currying-mechanics/<p>Dustin Campbell does a good job explaining the mechanics of currying in C#, although I'm afraid he stops before truly explaining why currying is considered an essential building block of functional programming. He promises to get to that in "the next post" so I won't offer my own take. As …</p><p>Dustin Campbell does a good job explaining the mechanics of currying in C#, although I'm afraid he stops before truly explaining why currying is considered an essential building block of functional programming. He promises to get to that in "the next post" so I won't offer my own take. As with recursion, simple examples often seem pointlessly complex ("Why would I want to calculate a factorial with recursion? Why would I want to add numbers with a curried function?"), so you're not likely to get the actual "art" of currying until he does his follow-up. (<em>via</em> .NET Languages Weblog)</p>Demoscene: Insanely Small Cool Programs2007-08-18T06:00:00-10:002007-08-18T06:00:00-10:00larrytag:knowing.net,2007-08-18:/posts/2007/08/demoscene-insanely-small-cool-programs/<p>Antonia Vargas sent me some links to some new "demos" (very small programs from which complex graphics and music emerge):</p>
<p><a href="https://winden.wordpress.com/2007/08/05/a-little-bit-of-assembly-2007/">http://winden.wordpress.com/2007/08/05/a-little-bit-of-assembly-2007/</a><br>
http://www.pouet.net/party.php?which=7&when=2007</p>Ionic-Breeze Chip-Cooling: Good Idea2007-08-16T11:58:00-10:002007-08-16T11:58:00-10:00larrytag:knowing.net,2007-08-16:/posts/2007/08/ionic-breeze-chip-cooling-good-idea/<p>Purdue researchers have applied the <a href="https://phys.org/news/2007-08-technology-chip-cooling-potential-future.html">idea of an ionic breeze to cooling computer chips</a>. This seems like a slam-dunk to me: more flexibility than a fan in terms of structure, the ability to generate the wind without a dead layer near the surface, and thereby more efficient. Presumably much quieter …</p><p>Purdue researchers have applied the <a href="https://phys.org/news/2007-08-technology-chip-cooling-potential-future.html">idea of an ionic breeze to cooling computer chips</a>. This seems like a slam-dunk to me: more flexibility than a fan in terms of structure, the ability to generate the wind without a dead layer near the surface, and thereby more efficient. Presumably much quieter, since there would be no ball bearings and increased efficiency means less total air displacement. Couple years to commercialize they say...</p>Was It That Ass I Coveted?2007-08-15T17:59:00-10:002007-08-15T17:59:00-10:00larrytag:knowing.net,2007-08-15:/posts/2007/08/was-it-that-ass-i-coveted/<p>In the past 96 hours, I've been exposed to:</p>
<p>\<</p>
<p>ul></p>
<p><a href="https://en.wikipedia.org/wiki/Leonids">meteors</a>,</p>
<p>an earthquake,</p>
<p>a hurricane,</p>
<p>a tsunami watch,</p>
<p><a href="https://www.ctahr.hawaii.edu/coqui/">annoying frogs</a> (which, while not exactly toads, are still amphibians), and</p>
<p>\<a href="http://arted.osu.edu/160/images/50rnr/hollyband.gif"" target="_blank" rel="noopener noreferrer">annoying crickets (which, while not …</p><p>In the past 96 hours, I've been exposed to:</p>
<p>\<</p>
<p>ul></p>
<p><a href="https://en.wikipedia.org/wiki/Leonids">meteors</a>,</p>
<p>an earthquake,</p>
<p>a hurricane,</p>
<p>a tsunami watch,</p>
<p><a href="https://www.ctahr.hawaii.edu/coqui/">annoying frogs</a> (which, while not exactly toads, are still amphibians), and</p>
<p>\<a href="http://arted.osu.edu/160/images/50rnr/hollyband.gif"" target="_blank" rel="noopener noreferrer">annoying crickets (which, while not exactly locusts, are still Orthopterids).</p>
<p>I feel like I should return that \<a href="http://www.imdb.com/title/tt0531151/"" target="_blank" rel="noopener noreferrer">tiki to the cave...</p>Poor Perseids, Battening Down For Flossie2007-08-13T08:43:00-10:002007-08-13T08:43:00-10:00larrytag:knowing.net,2007-08-13:/posts/2007/08/poor-perseids-battening-down-for-flossie/<p>We stayed over \<a href="http://www.plumhall.com/"" target="_blank" rel="noopener noreferrer">Tom & Lana Plum's house last night, hoping to take advantage of their very dark skies to see the Perseids. Slept on the porch on thin mattresses, beautiful milky way / Sagittarius / Scorpio in the evening hours. Saw …</p><p>We stayed over \<a href="http://www.plumhall.com/"" target="_blank" rel="noopener noreferrer">Tom & Lana Plum's house last night, hoping to take advantage of their very dark skies to see the Perseids. Slept on the porch on thin mattresses, beautiful milky way / Sagittarius / Scorpio in the evening hours. Saw a couple nice earth-skimmers around midnight, and then dozed fitfully until 4AM for the "big show." Unfortunately, large portions of the sky were overcast so that only 1st magnitude stars shone through, and there was only a keyhole near Orion that gave a glimpse of a few meteors.</p>
<p>Drove home early to talk to our wall construction guys and I now see that Hurricane Flossie is projected to remain a Category 3 as it passes by and if it's north of the projected track at all, it will hit the Big Island. We *should * get significant protection from Mauna Loa and Hualalai mountains as long as the eye stays south of us and we're hit by the East-to-West portion. If the eye tracks north and we get West-to-East, that could potentially suck.</p>
<p><a href="https://www.wunderground.com/"></a></p>Jon Skeet asks "Is C# 3 too big to learn from scratch?" I say "Absolutely"2007-08-09T19:54:00-10:002007-08-09T19:54:00-10:00larrytag:knowing.net,2007-08-09:/posts/2007/08/jon-skeet-asks-quotis-c-3-too-big-to-learn-from-scratchquot-i-say-quotabsolutelyquot/<p>Jon Skeet wonders:</p>
<blockquote>
<p>I've been looking at C# 3 in a fair amount of detail recently, and likewise going over the features of C# 2....I feel sorry for someone wanting to learn C# 3 from scratch. It's becoming quite a big language....It's often been said in the newsgroups …</p></blockquote><p>Jon Skeet wonders:</p>
<blockquote>
<p>I've been looking at C# 3 in a fair amount of detail recently, and likewise going over the features of C# 2....I feel sorry for someone wanting to learn C# 3 from scratch. It's becoming quite a big language....It's often been said in the newsgroups (usually when someone has been moving from another language to C#) that C# itself only takes a few days to learn....I suspect it would be hard to do it any sort of justice in less than about 700 pages, which is a pretty off-putting size (at least for me).</p>
</blockquote>
<p>You can't learn C# in days unless you have a background in either C++ or Java. JavaScript won't do it, because you have to learn about static typing, value and reference types, different inheritance model, different model for function objects / delegates / events. My book on C# 1.0 was over 900 pages and, although based on about the most successful structure for teaching Java, was inadequate for a true newcomer. That was before generics, which would take many pages to explain to the point of people "knowing" the idioms, much less lambdas and LINQ, which would be at least another 200.</p>
<p>To compile an object-oriented "Hello, World" in C# (1, much less 3) has a huge conceptual load: namespaces, classes, references, the difference between static and instance methods and variables (which, to really understand, requires a digression into the <strong>this</strong> pointer and v-tables, which opens a can of worms about how the CLR differs from the underlying memory model).... think about how many concepts you have to understand to understand <strong>public static void main(string[] args)</strong></p>
<p>That so many of us learned C# after knowing Java after knowing C++ after knowing C has perpetuated the myth that <em>any</em> of those languages are "learnable in days." It's just not so. I used to teach a hugely successful 5-day course on Java which worked great... as long as they weren't COBOL programmers. I imagine I would face the exact same problems trying to teach newcomers coming from, say, ColdFusion or Flash. Of course <em>some</em> people would "get" it, but I guarantee that those people would be those who had primed themselves on C-derived syntax and object orientation.</p>SOA Mashups: I'm 1-for-12007-08-09T11:34:00-10:002007-08-09T11:34:00-10:00larrytag:knowing.net,2007-08-09:/posts/2007/08/soa-mashups-im-1-for-1/<p>Harry Pierson wonders "Where Have All the SOA Mashups Gone?" Well, \<a href="http://www.sdtimes.com/printArticle/column-20070515-03.html"" target="_blank" rel="noopener noreferrer">this one went well. I'm not sure if it counts as a "mashup" in that all the data I was working with was XML and …</p><p>Harry Pierson wonders "Where Have All the SOA Mashups Gone?" Well, \<a href="http://www.sdtimes.com/printArticle/column-20070515-03.html"" target="_blank" rel="noopener noreferrer">this one went well. I'm not sure if it counts as a "mashup" in that all the data I was working with was XML and the interdiction / mashup was programmed in Ruby.</p>Raymond Chen Says Backward Compatibility Does Not Affect Windows Performance2007-08-09T06:00:00-10:002007-08-09T06:00:00-10:00larrytag:knowing.net,2007-08-09:/posts/2007/08/raymond-chen-says-backward-compatibility-does-not-affect-windows-performance/<p>For weeks, I've been chewing over \<a href="http://blogs.msdn.com/oldnewthing/archive/2007/07/23/4003873.aspx"" target="_blank" rel="noopener noreferrer">this post by Raymond Chen, in which he says: </p>
<blockquote>
<p>[T]he real cost of compatibility is not in the hacks. The hacks are small potatoes. Most …</p></blockquote><p>For weeks, I've been chewing over \<a href="http://blogs.msdn.com/oldnewthing/archive/2007/07/23/4003873.aspx"" target="_blank" rel="noopener noreferrer">this post by Raymond Chen, in which he says: </p>
<blockquote>
<p>[T]he real cost of compatibility is not in the hacks. The hacks are small potatoes. Most hacks are just a few lines of code (sometimes as few as zero), so the impact on performance is fairly low.</p>
</blockquote>
<p>The idea of a non-backward compatible version of Windows is something that I've mused about (as has Alan Zeichick). I'm not going to pick an argument with Chen, of course, but I wonder if he's not being a little disingenuous. Even a few lines of code in a core routine can have an effect if it affects cache behavior; okay, that's niggling... But still, to say that a non-compatible version wouldn't be much faster but to go on to say:</p>
<blockquote>
<p>[T]he real cost of compatibility is in the design.</p>
<p>If you're going to design a feature that enhances the window manager in some way, you have to think about how existing programs are going to react to your feature. These are programs that predate your feature and naturally know nothing about it. Does your feature alter the message order? Does it introduce a new point of re-entrancy? Does it cause a function to begin dispatching messages that previously did not? You may be forced to design your feature differently in order to accommodate these concerns. These issues aren't things you can "take out"; they are inherently part of the feature design.</p>
</blockquote>
<p>Well, yeah. But isn't that kind of like saying "the real cost of compatibility is not how fast you can type in the code, it's in the work."?</p>
<p>Surely (well, not surely, but surely "likely") a version of Windows where backwards compatibility was negotiable would have more flexibility for the type of redesign / refactoring which Windows will need for the manycore era? If nothing else, ~~surely~~ intuitively one would think that the very concept of the Windows message-loop (much less message ordering) would become highly problematic when trying to figure out how to exploit many cores.</p>Video game you control with piss (And it's not "Sink the battleship"?)2007-08-09T06:00:00-10:002007-08-09T06:00:00-10:00larrytag:knowing.net,2007-08-09:/posts/2007/08/video-game-you-control-with-piss-and-its-not-quotsink-the-battleshipquot/<p><img alt="" src="https://craphound.com/images/piss-screen.jpg"><br>
The Piss-Screen is a pressure-sensitive inlay for urinals, to play a game with your pee. The game is displayed on a screen above the urinal. <a href="http://www.piss-screen.de/">Link</a></p>
<p>The game development industry is the most miserable sector in the software development industry: lower pay, more bozos, worse management. And within that sector …</p><p><img alt="" src="https://craphound.com/images/piss-screen.jpg"><br>
The Piss-Screen is a pressure-sensitive inlay for urinals, to play a game with your pee. The game is displayed on a screen above the urinal. <a href="http://www.piss-screen.de/">Link</a></p>
<p>The game development industry is the most miserable sector in the software development industry: lower pay, more bozos, worse management. And within that sector, marketing-driven games are the worst sub-sector. I'm trying to imagine the karma that one must accrue in order to program a marketing-driven urine-controlled videogame.</p>Bye Baiji2007-08-08T12:10:00-10:002007-08-08T12:10:00-10:00larrytag:knowing.net,2007-08-08:/posts/2007/08/bye-baiji/<p>The Baiji, or Yangtze River Dolphin, appears to be the first cetacean \<a href="http://en.wikipedia.org/wiki/Baiji"" target="_blank" rel="noopener noreferrer">driven to extinction by man. No man is an island,<br>
Entire of itself.<br>
Each is a piece of the continent,<br>
A part of the main …</p><p>The Baiji, or Yangtze River Dolphin, appears to be the first cetacean \<a href="http://en.wikipedia.org/wiki/Baiji"" target="_blank" rel="noopener noreferrer">driven to extinction by man. No man is an island,<br>
Entire of itself.<br>
Each is a piece of the continent,<br>
A part of the main.<br>
If a clod be washed away by the sea,<br>
Europe is the less.<br>
As well as if a promontory were.<br>
As well as if a manner of thine own<br>
Or of thine friend's were.<br>
Each man's death diminishes me,<br>
For I am involved in mankind.<br>
Therefore, send not to know<br>
For whom the bell tolls,<br>
It tolls for thee.</p>Worse Than Crashing? Easy: Mistaking "MAY" for "SHALL" Near Money2007-08-07T16:08:00-10:002007-08-07T16:08:00-10:00larrytag:knowing.net,2007-08-07:/posts/2007/08/worse-than-crashing-easy-mistaking-quotmayquot-for-quotshallquot-near-money/<p>Jeff Atwood wonders "<a href="https://blog.codinghorror.com/">what's worse than crashing?</a>" and gives a general "application causes data loss and/or corruption." Uh huh. Let's fill between the lines on that:</p>
<p>I once worked on a supply chain system where one of the returns of the supplier's <strong>Cancel()</strong> function was along the lines of …</p><p>Jeff Atwood wonders "<a href="https://blog.codinghorror.com/">what's worse than crashing?</a>" and gives a general "application causes data loss and/or corruption." Uh huh. Let's fill between the lines on that:</p>
<p>I once worked on a supply chain system where one of the returns of the supplier's <strong>Cancel()</strong> function was along the lines of <strong>CANCELED_PENALTIES_APPLY</strong>. Our cancellation logic ran along these lines:</p>
<h6></h6>
<p>begin cancellation_transaction</p>
<p>cancellation_results = Cancel()</p>
<p>if cancellation_results == CANCELED_PENALTIES_APPLY</p>
<p>cancel_cancellation == ... other business logic, maybe involve a human in the decision ...</p>
<p>if cancel_cancellation</p>
<p>rollback cancellation_transaction</p>
<p>...etc...</p>
<p>As with many digitally-mediated marketplaces, once the switch was thrown on this thing, the amount of money flowing through it was substantial. About six weeks after deploying, the s*** hit the fan. Cancellation penalties amounting to <strong>tens of thousands of dollars</strong> had accrued. We had ass-u-med that because the request had that "Penalties apply" return value that, you know, we'd <em>get it</em> in the appropriate situation (we did during testing). "Oh no, that <strong><em>may</em></strong> or may not be returned. You always have to check the [free-form text] cancel penalties," the supplier told us (during the s***-storm) without the slightest acknowledgement of guilt. ("But they're free-form text," you might note, "How is one supposed to check that?" The answer: there was no 100% way to automate it.)</p>
<p>Dozens of thousands of dollars worth of damage, and if it weren't for dumb luck we wouldn't have caught it until a quarterly audit months later. I didn't participate in that particular coding task, but even if I had I really doubt that I would have flushed out the "MAY" rather than "SHALL" that caused all the trouble. Such SNAFUs are, far more than any mythical belief in purity, why smart people still occasionally spend time trying to "nail down" requirements.</p>
<p>More recently, I worked on a system that had an off-by-1 error when applying taxes. Only in <em>acceptance</em> testing did we flush out a sequence, not terribly uncommon in the real world, that triggered the bug. That would have been really nasty, precisely because the pain would have been spread out between clients and heaven knows how that would have been caught and resolved.</p>
<p>Money. It's the root of all evil, you know.</p>Silverlight, Why Do You Taunt Me So?2007-08-07T09:47:00-10:002007-08-07T09:47:00-10:00larrytag:knowing.net,2007-08-07:/posts/2007/08/silverlight-why-do-you-taunt-me-so/<p>Silverlight steadfastly refuses to install on my development Tablet PC or in my "Orcas Beta" Virtual PC. Those are the only two machines on which I'll put an under-development CLR, since experience has shown that it can be very difficult to cleanly uninstall anything in Microsoft's browser-CLR-plugin axis. This is …</p><p>Silverlight steadfastly refuses to install on my development Tablet PC or in my "Orcas Beta" Virtual PC. Those are the only two machines on which I'll put an under-development CLR, since experience has shown that it can be very difficult to cleanly uninstall anything in Microsoft's browser-CLR-plugin axis. This is a shame, because I have some ambitious Silverlight projects.</p>Ambler: Agile on a Fixed Budget2007-08-07T09:28:00-10:002007-08-07T09:28:00-10:00larrytag:knowing.net,2007-08-07:/posts/2007/08/ambler-agile-on-a-fixed-budget/<p>Scott Ambler has a great new article on DDJ discussing <a href="http://www.drdobbs.com/architecture-and-design/agile-on-a-fixed-budget/201202925?cid=Ambysoft.">agile software development on a fixed budget</a>. He discusses the "iron triangle" of time, scope, and resources and gives alternate strategies depending on which "corner" of the triangle is most constrained.</p>Rosario, Post-Orcas/2008 Visual Studio Team System Available In CTP2007-08-03T14:52:00-10:002007-08-03T14:52:00-10:00larrytag:knowing.net,2007-08-03:/posts/2007/08/rosario-post-orcas2008-visual-studio-team-system-available-in-ctp/<p>If you're eager to get your first glimpse at Visual Studio X (you heard it here first!), you can download a VPC image Visual Studio</p>Huge Uptick in PDF File-Attachment Spam2007-08-03T10:41:00-10:002007-08-03T10:41:00-10:00larrytag:knowing.net,2007-08-03:/posts/2007/08/huge-uptick-in-pdf-file-attachment-spam/<p>Is everyone else seeing a sudden increase in spam with PDF attachments? I'm not sure if they are payload-bearing virii or just stock spam (many seem to have "investor alert" nonsense in their title). It's just amazing to me the level of idiot on which these apparently-profitable scams are built …</p><p>Is everyone else seeing a sudden increase in spam with PDF attachments? I'm not sure if they are payload-bearing virii or just stock spam (many seem to have "investor alert" nonsense in their title). It's just amazing to me the level of idiot on which these apparently-profitable scams are built.</p>Broad Patent on Shared-Memory Parallel Processing Basis for Suit Against Sony (Tip of the Pyramid?)2007-08-01T06:00:00-10:002007-08-01T06:00:00-10:00larrytag:knowing.net,2007-08-01:/posts/2007/08/broad-patent-on-shared-memory-parallel-processing-basis-for-suit-against-sony-tip-of-the-pyramid/<p>The owners of Patent 5,056,000 have whacked Sony with a suit, on the basis that the Cell processor in the PS3 is a violator. The claims seem center on the idea of an "interconnection switch" that locks the access of a single processor to a particular bank of …</p><p>The owners of Patent 5,056,000 have whacked Sony with a suit, on the basis that the Cell processor in the PS3 is a violator. The claims seem center on the idea of an "interconnection switch" that locks the access of a single processor to a particular bank of shared memory. \<a href="http://arstechnica.com/news.ars/post/20070731-15-year-old-parallel-processing-patent-threatens-sony-ps3.html"" target="_blank" rel="noopener noreferrer">Speculation is that this very broad patent could be the basis of claims against many vendors.</p>"GonnaNeedIt" Annotation2007-07-31T06:00:00-10:002007-07-31T06:00:00-10:00larrytag:knowing.net,2007-07-31:/posts/2007/07/quotgonnaneeditquot-annotation/<p>I think programming languages need the complement to "deprecated." It's for those moments when "<a href="http://c2.com/xp/YouArentGonnaNeedIt.html">YAGNI</a>" conflicts with "But I just <em>know</em> I will..." Less imperative than a TODO, but more than a mental note.</p>Do Kids Still Build Models?2007-07-29T22:17:00-10:002007-07-29T22:17:00-10:00larrytag:knowing.net,2007-07-29:/posts/2007/07/do-kids-still-build-models/<p>Revell models. With the plastic trees that you twisted every numbered part out of? Rubber glue, Testor paint? If I were to make a reference to this experience as a metaphor, would anyone under the age of 40 know what I was talking about?</p>Virtualized TaskBar: A Utility I'd Like2007-07-29T07:17:00-10:002007-07-29T07:17:00-10:00larrytag:knowing.net,2007-07-29:/posts/2007/07/virtualized-taskbar-a-utility-id-like/<p>Is there any utility that displays on your task bar all the applications running within your Virtual PC / VMWare / Remote Desktop Session? I'd really like such a utility. It ought to be possible, at least if the virtual machine is network-reachable. If I felt that I could sell more than …</p><p>Is there any utility that displays on your task bar all the applications running within your Virtual PC / VMWare / Remote Desktop Session? I'd really like such a utility. It ought to be possible, at least if the virtual machine is network-reachable. If I felt that I could sell more than a couple hundred for \$30 a throw, I'd probably be willing to spend some time writing it myself, but I don't think Windows users spend money on utilities. Mac people apparently buy 3rd party software and PDA users and cellphone users are friggin' ATMs, but you <em>know</em> any utility for Windows is going to end up on P2P before you sell a hundred copies. Whether that actually zeroes out sales, I dunno'.</p>Coming To The Big Island This Week? The Helicopter Tour Might Be Worth It2007-07-28T08:11:00-10:002007-07-28T08:11:00-10:00larrytag:knowing.net,2007-07-28:/posts/2007/07/coming-to-the-big-island-this-week-the-helicopter-tour-might-be-worth-it/<p>\<a href="http://hvo.wr.usgs.gov/kilauea/update/archive/2007/Jul/DSCN1003_L.jpg"" target="_blank" atomicselection="true" rel="noopener noreferrer">Since I blogged the pause and restart of Pu'u O'o, for completeness I will report that the eruption on The Big Island of Hawai'i has not only returned …</p><p>\<a href="http://hvo.wr.usgs.gov/kilauea/update/archive/2007/Jul/DSCN1003_L.jpg"" target="_blank" atomicselection="true" rel="noopener noreferrer">Since I blogged the pause and restart of Pu'u O'o, for completeness I will report that the eruption on The Big Island of Hawai'i has not only returned, it's in probably the most visually exciting phase it's been in in years. After the Father's Day earthquake swarm, the lava being fed to the surface has apparently moved "\<a href="http://hvo.wr.usgs.gov/kilauea/update/maps.html"" target="_blank" rel="noopener noreferrer">downrift" of the Pu'u O'o crater and in the past week has found the surface in what's called a "fissure eruption." This morning's update speaks of a 100M-wide flow of lava (the picture is of a flow that was apparently around 10M across). If you want to see lava, you should know:</p>
<ul>
<li>The hundreds-of-feet tall lava fountains in the advertisements happened for a few days twenty-four years ago,</li>
<li>From a distance of more than a few dozen yards, during daylight hours, flowing lava doesn't look spectacular (the surface rock's heat-related red component is very largely overwhelmed by the ambient light of the tropics). (Hmmm.... if your camcorder / digital camera has an infrared "night-shot" mode ... )</li>
<li><em>Within</em> a few dozen yards, it's about the third-most amazing thing you'll ever see</li>
<li>At night, even from a distance, flowing lava is probably the second-most amazing thing you'll ever see. The visible red light from the heat is visible from many miles away.</li>
<li>Being within a few dozen yards of lava entering the ocean at night is the single most amazing thing you'll ever see.</li>
</ul>
<p>Right now, apparently the fissure eruption is throwing up some 2M high fountains. My guess is that this is among the best stuff you'll ever see from a helicopter.</p>
<p>In summary, as of 7/28/2007:</p>
<ul>
<li>Eruption's back on and vog has returned (bummer)</li>
<li>You probably can't see any of this from land <em>at the moment</em>, but the lava will very likely eventually find its way off the ridge its on and be visible, at night, from a distance</li>
<li>There are no legal hikes with a vantage point of the current eruption</li>
<li>A helicopter tour of the fissure eruption might give you a once-in-a-decade view</li>
</ul>
<p>All of this will probably change within a week or so. If you're planning on being a lava tourist, absolutely check out the \<a href="http://volcano.wr.usgs.gov/hvostatus.php"" target="_blank" rel="noopener noreferrer">daily eruption report.</p>BS On Rails2007-07-28T06:00:00-10:002007-07-28T06:00:00-10:00larrytag:knowing.net,2007-07-28:/posts/2007/07/bs-on-rails/<p>Kurt Schrader wonders if he's the first person to hit a point in a Rails app where he wonders if he's "finally hit the point where the cost of maintaining our code in Ruby is higher than the savings by writing it in Ruby in the first place?"</p>
<p>He says …</p><p>Kurt Schrader wonders if he's the first person to hit a point in a Rails app where he wonders if he's "finally hit the point where the cost of maintaining our code in Ruby is higher than the savings by writing it in Ruby in the first place?"</p>
<p>He says that:</p>
<ul>
<li>He misses the refactoring tools of IDEA, and</li>
<li>Although it may have taken longer to reach, he feels he's on "the same old curve to all of the standard problems you run into when programming a webapp in any language."</li>
</ul>
<p>Of course, he's <em>not</em> the first person to see such problems. As I write about in a forthcoming column in <em>SD Times</em>, basically as soon as you start getting into professional-level complexity in Ruby, you start seeing that it's no silver bullet. A great language, yes, but not a silver bullet.</p>
<p>Rails, too, is a very nice framework / DSL, but has huge shortcomings -- contorting it to work with the naming not-quite-conventions of legacy databases is enough to make me consider it a "new projects only" tool.</p>
<p>Of course, refactoring IDEs have not been around for very long and it's undoubtedly the case that people are striving to build refactoring Ruby IDEs. The challenge is making refactorings bullet-proof in a language with a dynamic type system. You can't have a "press the button" refactoring that works 95% of the time. This is a mistake that even today's refactoring IDEs make: the "review these changes" dialog they pop up. They're about as useful as "Are you sure you want to delete that?" in file dialogs. No one actually <em>considers</em> the question, they just hit "OK" and see if it breaks.</p>Dr. Dobb's Goes Flash-Based2007-07-27T06:00:00-10:002007-07-27T06:00:00-10:00larrytag:knowing.net,2007-07-27:/posts/2007/07/dr-dobbs-goes-flash-based/<p>Huh. I just received a link in email to "my" August issue of Dr. Dobb's Journal. I'm not going to post the link I got, since it's undoubtedly linked to me, but can anyone access http://www.nxtbook.com/nxtbooks/cmp/ddj0807/index.php?</p>
<p>It's a Flash-based interface, but even …</p><p>Huh. I just received a link in email to "my" August issue of Dr. Dobb's Journal. I'm not going to post the link I got, since it's undoubtedly linked to me, but can anyone access http://www.nxtbook.com/nxtbooks/cmp/ddj0807/index.php?</p>
<p>It's a Flash-based interface, but even when viewed in profile, full-screen (1050 x 1680), it's annoyingly fuzzy:</p>
<p>Which zooms in as:</p>
<p>\<a href="http://www.knowing.net/images/Dr.DobbsGoesFlashBased_9F50/image_4.png"" atomicselection="true"></p>
<p>There doesn't appear to be any way to control the antialiasing within the Flash interface. <em>Blech</em>.</p>Turing Award Boosted to $250K: Put On Your Thinking Caps!2007-07-27T06:00:00-10:002007-07-27T06:00:00-10:00larrytag:knowing.net,2007-07-27:/posts/2007/07/turing-award-boosted-to-250k-put-on-your-thinking-caps/<p>Google is joining Intel in putting more cash into the kitty for the <a href="https://awards.acm.org/">Turing Award</a>. To me, \<span class="math">\(250K is nonsensical -- you should either go for the million (Who Wants To Be A CS Millionaire?) or maintain the super-coolness of the \<a href="http://www.fields.utoronto.ca/aboutus/jcfields/fields …</span></p><p>Google is joining Intel in putting more cash into the kitty for the <a href="https://awards.acm.org/">Turing Award</a>. To me, \<span class="math">\(250K is nonsensical -- you should either go for the million (Who Wants To Be A CS Millionaire?) or maintain the super-coolness of the \<a href="http://www.fields.utoronto.ca/aboutus/jcfields/fields\_medal.html"" target="\_blank" rel="noopener noreferrer"\>Fields Prize (cash value: \\)</span>15000 Loonies).</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>VSTS 2008 Beta 2 VPC Available for Download2007-07-26T11:55:00-10:002007-07-26T11:55:00-10:00larrytag:knowing.net,2007-07-26:/posts/2007/07/vsts-2008-beta-2-vpc-available-for-download/<p><a href="https://www.microsoft.com/en-us/download/">Come and get it</a></p>
<p>P.S. I really, <em>really</em> like this use of VPCs.</p>Hail to Europa!2007-07-26T06:00:00-10:002007-07-26T06:00:00-10:00larrytag:knowing.net,2007-07-26:/posts/2007/07/hail-to-europa/<p>I'm not a big fan of Eclipse -- I'm an <a href="http://www.jetbrains.com/">IntelliJ IDEA</a> man, myself -- but <a href="http://www.eclipse.org/europa/">Europa, this year's coordinated release of components for Eclipse, is now available</a>.</p>Intel Open-Sources Its Excellent Threading Building Blocks Library2007-07-25T06:00:00-10:002007-07-25T06:00:00-10:00larrytag:knowing.net,2007-07-25:/posts/2007/07/intel-open-sources-its-excellent-threading-building-blocks-library/<p>The very good Threading Building Blocks library from Intel, released last year around this time as 1.0 and being updated soon, has been \<a href="http://www.intel.com/pressroom/archive/releases/20070724fact.htm%3fiid%3dpr1_releasepri_20070724fact"" target="_blank" rel="noopener noreferrer">open-sourced by Intel. This is a …</p><p>The very good Threading Building Blocks library from Intel, released last year around this time as 1.0 and being updated soon, has been \<a href="http://www.intel.com/pressroom/archive/releases/20070724fact.htm%3fiid%3dpr1_releasepri_20070724fact"" target="_blank" rel="noopener noreferrer">open-sourced by Intel. This is a hardcore C++ template library, but has some great-looking libraries and algorithms (lots of lock-free data structures). I've been unable to actually use the library, as my multicore system is AMD Opteron-based (just because I live in the tropics doesn't mean I can't appreciate an even warmer room). With quad-core systems available under \<span class="math">\(1000 and the Q6600 now at \\)</span>375 from Newegg, there's a great temptation, but I'm going to try to resist until I can build an 8-core machine, which to my mind is the inflection point from "multicore" to "manycore."</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Microsoft's Parallel Computing Team Is Hiring2007-07-25T06:00:00-10:002007-07-25T06:00:00-10:00larrytag:knowing.net,2007-07-25:/posts/2007/07/microsofts-parallel-computing-team-is-hiring/<blockquote>
<p>We're hiring developers and testers for the Parallel Computing team in Microsoft's Developer Division....[Contact] joedu at microsoft dot com if you are interested.</p>
</blockquote>TiVo HD for $299: HDTV Temptation Increases2007-07-25T06:00:00-10:002007-07-25T06:00:00-10:00larrytag:knowing.net,2007-07-25:/posts/2007/07/tivo-hd-for-299-hdtv-temptation-increases/<p>Interesting, my analysis from last November is unchanged other than time-shifting and yet, emotionally, the availability of TiVo makes a huge impact. On the other hand, I am not sure that they would allow me to change my current TiVo lifetime subscription over to the TiVoHD, so I'd be facing …</p><p>Interesting, my analysis from last November is unchanged other than time-shifting and yet, emotionally, the availability of TiVo makes a huge impact. On the other hand, I am not sure that they would allow me to change my current TiVo lifetime subscription over to the TiVoHD, so I'd be facing <em>another</em> recurring monthly bill.</p>
<p>So it's HDTV \~\<span class="math">\(2500 + Tivo HD \\)</span>300 + XBox 360 HD DVD Player \$200 + monthly fee and neither Comedy Central nor AMC nor TCM broadcast in HD. Mmm.... temptation decreases ...</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>First IronRuby Drop Available2007-07-24T06:00:00-10:002007-07-24T06:00:00-10:00larrytag:knowing.net,2007-07-24:/posts/2007/07/first-ironruby-drop-available/<p>John Lam details the first public availability of IronRuby. Couple reasons why I'm interested in this:</p>
<ul>
<li>It's Ruby</li>
<li>It's the CLR</li>
<li>It's a second data point for how to code for the DLR</li>
</ul>
<p>I don't think I'm going to be able to resist the temptation to write a compiler for …</p><p>John Lam details the first public availability of IronRuby. Couple reasons why I'm interested in this:</p>
<ul>
<li>It's Ruby</li>
<li>It's the CLR</li>
<li>It's a second data point for how to code for the DLR</li>
</ul>
<p>I don't think I'm going to be able to resist the temptation to write a compiler for the DLR. I know I <em>should</em> resist, but I spend so many cycles thinking about programming languages and the DLR seems to have so much promise to language implementors.</p>
<p><em>Argh</em>, I can't believe I have such a busy week in front of me.</p>Binary XML: Because Complex Ex-Cathedra Standards Have Done So Well Previously2007-07-23T06:00:00-10:002007-07-23T06:00:00-10:00larrytag:knowing.net,2007-07-23:/posts/2007/07/binary-xml-because-complex-ex-cathedra-standards-have-done-so-well-previously/<p>Joe Gregorio reports the \<a href="http://bitworking.org/news/219/Binary-XML"" target="_blank" rel="noopener noreferrer">First Public Working Draft of Efficient XML Interchange (EXI) Format 1.0. Even that name stinks of bureaucratic ineptitude.</p>
<p>This is my early contender for Worst Idea I've Heard This Year. Or maybe …</p><p>Joe Gregorio reports the \<a href="http://bitworking.org/news/219/Binary-XML"" target="_blank" rel="noopener noreferrer">First Public Working Draft of Efficient XML Interchange (EXI) Format 1.0. Even that name stinks of bureaucratic ineptitude.</p>
<p>This is my early contender for Worst Idea I've Heard This Year. Or maybe I should save that for this sub-idea:</p>
<blockquote>
<p>EXI processors MAY provide the capability to specify different built-in types or user-defined encoder/decoders (CODECS) for representing specific schema types. This capability is called <strong>Pluggable CODECS</strong>.</p>
</blockquote>
<p>Oh yeah, <em>perfect</em>. Because the only thing that could make a non-human-readable data interchange format <em>more</em> valuable would be to marry it with the robustness, ease-of-use, and interoperability that we associate with video and audio codecs.</p>
<p>And the wonderful thing about this is that this will be marketed as having something to do with performance, because, oh yeah, a linear decrease in the size of your messages -- <em>that</em> will solve your architectural problems. So people with performance issues with their Web services will solve them by introducing another layer of complexity, making the data non-readily inspectable, and throwing proprietary codecs into the midst. I can't see why that wouldn't work.</p>Interviewing Checkers Boffin Schaeffer After Man-Machine Poker Tourney2007-07-23T06:00:00-10:002007-07-23T06:00:00-10:00larrytag:knowing.net,2007-07-23:/posts/2007/07/interviewing-checkers-boffin-schaeffer-after-man-machine-poker-tourney/<p>I'll be interviewing Jonathan Schaeffer next week about his amazing checkers solution. Right now, he's busy at a big \<a href="http://www.msnbc.msn.com/id/19875057/"" target="_blank" rel="noopener noreferrer">man-machine poker showdown. Suggested questions welcome...</p>Free eBook on PowerShell2007-07-22T00:00:00-10:002007-07-22T00:00:00-10:00larrytag:knowing.net,2007-07-22:/posts/2007/07/free-ebook-on-powershell/<p>\<a href="http://blogs.msdn.com/mapo/archive/2007/07/17/windows-powershell-free-ebook-at-microsoft.aspx"" target="_blank" rel="noopener noreferrer">Free 40-page eBook on PowerShell (via Steve Pietrek)</p>NStatic Beta Appearing Imminent2007-07-21T18:00:00-10:002007-07-21T18:00:00-10:00larrytag:knowing.net,2007-07-21:/posts/2007/07/nstatic-beta-appearing-imminent/<p>Wesner Moise's NStatic static-analysis tool for .NET appears to be approaching its initial beta. Moise has made a number of exciting claims for this technology since he began discussing it about 18 months ago. If I understand correctly, NStatic involves considerably "deeper" analysis than most quality-assurance tools; it almost seems …</p><p>Wesner Moise's NStatic static-analysis tool for .NET appears to be approaching its initial beta. Moise has made a number of exciting claims for this technology since he began discussing it about 18 months ago. If I understand correctly, NStatic involves considerably "deeper" analysis than most quality-assurance tools; it almost seems it applies the field of constraint-based programming to parsed program structures. At least, that's the only way I can get my head around \<a href="http://wesnerm.blogs.com/net_undocumented/2007/06/equation_solvin.html"" target="_blank" rel="noopener noreferrer">this post.</p>Checkers (10^20 positions) Solved: Perfect Play Leads To Draw2007-07-21T12:00:00-10:002007-07-21T12:00:00-10:00larrytag:knowing.net,2007-07-21:/posts/2007/07/checkers-1020-positions-solved-perfect-play-leads-to-draw/<p>Wow! <a href="https://www.newscientist.com/">Jonathan Schaeffer of the University of Alberta has solved the game of checkers</a>. Games like tic-tac-toe, checkers, chess, and go are all known to have optimal strategies (I don't recall of the exact game-theory restriction that describes such games: "perfect information, sequential"?). That's why tic-tac-toe is boring -- it's always …</p><p>Wow! <a href="https://www.newscientist.com/">Jonathan Schaeffer of the University of Alberta has solved the game of checkers</a>. Games like tic-tac-toe, checkers, chess, and go are all known to have optimal strategies (I don't recall of the exact game-theory restriction that describes such games: "perfect information, sequential"?). That's why tic-tac-toe is boring -- it's always correct to first play to a corner and its always correct to respond by playing to the ~~opposite corner~~ middle .</p>
<p>The bigger games like checkers, chess, and go have such huge solution spaces that one wouldn't think their solutions could be discovered by brute force. Schaeffer's calculation has been ongoing for 18 calendar years (no word on total processing time) and involved "just" 10\^14 calculations. It seems that he reduced the tree by finding many equivalent positions and then brute-forcing every possible endgame involving fewer than 10 pieces. The conclusion is that perfect play leads to a draw (I believe it's still unknown if perfect play in chess leads to a draw).</p>
<p>What I'm impressed by from a software standpoint is that obviously he figured a way to maintain the partial calculations of his system over 18 years, even as he undoubtedly brought newer generations of hardware and software to bear on the problem. Well done!</p>Just sold "inkpositive.com" -- I get the feeling it was bought by a larger company2007-07-21T06:00:00-10:002007-07-21T06:00:00-10:00larrytag:knowing.net,2007-07-21:/posts/2007/07/just-sold-quotinkpositivecomquot-i-get-the-feeling-it-was-bought-by-a-larger-company/<p>A few weeks ago I got an email asking if I was interested in selling one of my idle domain names -- <a href="https://www.hugedomains.com/domain_profile.cfm?d=inkpositive&e=com">inkpositive.com</a>. "Sure," I said, and named a price that covered the hour of time it would take me to transfer the domain. The subsequent process (contract, escrow.com …</p><p>A few weeks ago I got an email asking if I was interested in selling one of my idle domain names -- <a href="https://www.hugedomains.com/domain_profile.cfm?d=inkpositive&e=com">inkpositive.com</a>. "Sure," I said, and named a price that covered the hour of time it would take me to transfer the domain. The subsequent process (contract, escrow.com, "I can't tell you who my associate is...") makes me think I could have asked for a couple more hours worth of revenue...</p>Acer Quad Core for <$200 per core2007-07-19T15:06:00-10:002007-07-19T15:06:00-10:00larrytag:knowing.net,2007-07-19:/posts/2007/07/acer-quad-core-for-lt200-per-core/<p>Looking for enough cores to start seeing complex behavior? Check out this Intel Core 2 Quad Q6600 Acer Aspire from CompUSA for \<span class="math">\(750 (sheesh, the *chip* goes for about \\)</span>580!).</p>
<p>Or, if you're rolling in the dough, CNet quite \<a href="http://www.cnn.com/2007/TECH/ptech/07/17 …</p><p>Looking for enough cores to start seeing complex behavior? Check out this Intel Core 2 Quad Q6600 Acer Aspire from CompUSA for \<span class="math">\(750 (sheesh, the *chip* goes for about \\)</span>580!).</p>
<p>Or, if you're rolling in the dough, CNet quite \<a href="http://www.cnn.com/2007/TECH/ptech/07/17/hp.pavilion.mc/index.html"" target="_blank" rel="noopener noreferrer">likes the HP Pavilion Media Center TV m8120n, which will set you back \~\$1200. It comes with a cheap graphics card, but sounds like a good media server.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Mitch Barnett's Web-Based IDE for IronPython2007-07-19T12:00:00-10:002007-07-19T12:00:00-10:00larrytag:knowing.net,2007-07-19:/posts/2007/07/mitch-barnetts-web-based-ide-for-ironpython/<p>I <em>love</em> this prototype / early version by Mitch Barnett of a web-based IDE for distributed programming using IronPython. It reminds me of my last dot-comet system: a Web-based assessment framework (I'd say "testing framework" but you'd think NUnit when you should be thinking certification). You were presented the pre-conditions, post-conditions …</p><p>I <em>love</em> this prototype / early version by Mitch Barnett of a web-based IDE for distributed programming using IronPython. It reminds me of my last dot-comet system: a Web-based assessment framework (I'd say "testing framework" but you'd think NUnit when you should be thinking certification). You were presented the pre-conditions, post-conditions, and invariants, pasted your code into the text box, your code was compiled, checked for permissions / size constraints, and then executed in a sandbox that was monitored and constrained in various ways (memory, time, resources, etc.).</p>
<p>What I like about Mitch's idea (other than that <strong>beautiful Smalltalk-like browser</strong>) is the idea of using this for pair-programming over the Internet. Mitch tells me that's not yet supported, but could easily be hacked.</p>Upswing in Dynamic Language Use is Breaking News?2007-07-19T09:31:00-10:002007-07-19T09:31:00-10:00larrytag:knowing.net,2007-07-19:/posts/2007/07/upswing-in-dynamic-language-use-is-breaking-news/<p>You know I love my homeys at \<a href="http://www.sdtimes.com/"" target="_blank" rel="noopener noreferrer">SD Times, but ought not the headline read: "Study states obvious, costs money"? </p>Esther Dyson's Hugely Influential "Release 1.0" Newsletter Back-Issues Freely Available2007-07-19T00:00:00-10:002007-07-19T00:00:00-10:00larrytag:knowing.net,2007-07-19:/posts/2007/07/esther-dysons-hugely-influential-quotrelease-10quot-newsletter-back-issues-freely-available/<p>O'Reilly has made the back issues (from 1983 to 2006) of Esther Dyson's "Release 1.0" newsletter available as freely-downloadable PDFs: O'Reilly Radar > Release 1.0</p>
<p>The newsletter was very forward-thinking; I just grabbed the June 1989 issue (the month I was hired at <em>Computer Language</em>) and found a discussion …</p><p>O'Reilly has made the back issues (from 1983 to 2006) of Esther Dyson's "Release 1.0" newsletter available as freely-downloadable PDFs: O'Reilly Radar > Release 1.0</p>
<p>The newsletter was very forward-thinking; I just grabbed the June 1989 issue (the month I was hired at <em>Computer Language</em>) and found a discussion of self-organizing multi-user systems that is pretty darn timely today.</p>Ruby's ObjectSpace: A Challenge for the Managed Platforms2007-07-18T18:00:00-10:002007-07-18T18:00:00-10:00larrytag:knowing.net,2007-07-18:/posts/2007/07/rubys-objectspace-a-challenge-for-the-managed-platforms/<p>The Ruby language contains the built-in module <strong>ObjectSpace</strong>, which provides programmatic access to the entire world of living objects. For instance, in Ruby you can write:</p>
<div class="highlight"><pre><span></span><code><span class="nv">ObjectSpace</span>::<span class="nv">each_object</span><span class="ss">(</span><span class="nv">Class</span><span class="ss">)</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="o">|</span><span class="nv">c</span><span class="o">|</span>
<span class="w"> </span><span class="nv">p</span><span class="w"> </span><span class="nv">c</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nv">c</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nv">Test</span>::<span class="nv">Unit</span>::<span class="nv">TestCase</span>
<span class="w"> </span><span class="k">end</span>
</code></pre></div>
<p>which will iterate over <em>every</em> instance of <strong>Class</strong> in the …</p><p>The Ruby language contains the built-in module <strong>ObjectSpace</strong>, which provides programmatic access to the entire world of living objects. For instance, in Ruby you can write:</p>
<div class="highlight"><pre><span></span><code><span class="nv">ObjectSpace</span>::<span class="nv">each_object</span><span class="ss">(</span><span class="nv">Class</span><span class="ss">)</span><span class="w"> </span><span class="k">do</span><span class="w"> </span><span class="o">|</span><span class="nv">c</span><span class="o">|</span>
<span class="w"> </span><span class="nv">p</span><span class="w"> </span><span class="nv">c</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="nv">c</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nv">Test</span>::<span class="nv">Unit</span>::<span class="nv">TestCase</span>
<span class="w"> </span><span class="k">end</span>
</code></pre></div>
<p>which will iterate over <em>every</em> instance of <strong>Class</strong> in the system and do something (in this case, print it out if it is a subclass of <strong>TestCase</strong>).</p>
<p>John Lam has mentioned to me that <strong>ObjectSpace</strong> is a particular challenge to IronRuby, as the obvious way to implement <strong>ObjectSpace</strong> is to hook into the garbage collector, which is not something that is allowed in the world of the CLR. Or in the world of the JVM, as Ola Bini discusses in <a href="http://ola-bini.blogspot.com/2007/07/objectspace-to-have-or-not-to-have.html">this interesting post</a>. Implementing <strong>ObjectSpace</strong> on the managed platforms (using WeakReferences) involves a huge performance hit (Bini talks of measuring several dozen percentage points worth of penalty). He additionally shows some code that works around the obvious <strong>ObjectSpace</strong> use-case.</p>The Continuing Decline of Tech Magazines, Chapter 382007-07-18T12:00:00-10:002007-07-18T12:00:00-10:00larrytag:knowing.net,2007-07-18:/posts/2007/07/the-continuing-decline-of-tech-magazines-chapter-38/<p>Forbes has a few-hundred word article on the decline in tech-sector print media. (<em>via</em> \<a href="http://www.cincomsmalltalk.com/blog/blogView%3fshowComments%3dtrue%26entry%3d3362119884"" target="_blank" rel="noopener noreferrer"><em>James Robertson) </em>Nothing specific to the software development industry, but still, another data point...</p>Virtual Earth MapCruncher2007-07-18T12:00:00-10:002007-07-18T12:00:00-10:00larrytag:knowing.net,2007-07-18:/posts/2007/07/virtual-earth-mapcruncher/<p>This tool from Microsoft Research:</p>
<blockquote>
<p>lets users quickly convert existing maps into an online format that's as fast and easy to use as Virtual Earth. PDF and raster maps can be converted in minutes just by clicking on corresponding landmarks on the user's map and the global maps in Virtual …</p></blockquote><p>This tool from Microsoft Research:</p>
<blockquote>
<p>lets users quickly convert existing maps into an online format that's as fast and easy to use as Virtual Earth. PDF and raster maps can be converted in minutes just by clicking on corresponding landmarks on the user's map and the global maps in Virtual Earth. MapCruncher re-projects the user's map, rendering correctly registered and zoomed tiles that can be mashed up seamlessly with Virtual Earth's standard road and aerial imagery.</p>
</blockquote>
<p><a href="https://www.microsoft.com/en-us/research/products/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fdownloads%2Fdetails%2F66596bbd-0444-4ab1-93bc-e41f010a237d%2Fdetails.aspx">Virtual Earth MapCruncher</a></p>Concurrency Tutorials Via LOLCuteness2007-07-18T11:36:00-10:002007-07-18T11:36:00-10:00larrytag:knowing.net,2007-07-18:/posts/2007/07/concurrency-tutorials-via-lolcuteness/<p>\<a href="http://www.knowing.net/images/BecomingThe1SoftwareDevelopmentBlog_A1C1/image_4.png"" atomicselection="true"></p>
<p>I figure I'll be the #1 programming blog by the end of the month.</p>Need To Draw (Mathematical-Style) Graphs? Try This Free Layout Engine for .NET2007-07-18T00:00:00-10:002007-07-18T00:00:00-10:00larrytag:knowing.net,2007-07-18:/posts/2007/07/need-to-draw-mathematical-style-graphs-try-this-free-layout-engine-for-net/<p>I've fiddled around with the examples of <a href="https://www.microsoft.com/en-us/research/products/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fdownloads%2Fdetails%2Ff1303e46-965f-401a-87c3-34e1331d32c5%2Fdetails.aspx">GLEE</a>, Microsoft's layout engine for graphs and wish I'd had it for some visualization projects I did a few years ago. Looks like a nice library to add to your collection.</p>Microsoft Research Accelerator Project2007-07-17T18:00:00-10:002007-07-17T18:00:00-10:00larrytag:knowing.net,2007-07-17:/posts/2007/07/microsoft-research-accelerator-project/<p>Microsoft's GPGPU programming library: <a href="https://www.microsoft.com/en-us/research/products/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fdownloads%2Fdetails%2F25e1bea3-142e-4694-bde5-f0d44f9d8709%2Fdetails.aspx">Microsoft Research Accelerator Project</a></p>Microsoft eScrum: Scrum for Visual Studio Team Foundation Server2007-07-17T12:00:00-10:002007-07-17T12:00:00-10:00larrytag:knowing.net,2007-07-17:/posts/2007/07/microsoft-escrum-scrum-for-visual-studio-team-foundation-server/<p>Microsoft has made available a VSTS tool for teams using Scrum: Download details: Microsoft eScrum Version 1.0</p>
<p><a href="https://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a> is, I've concluded, The Simplest Thing That Could Possibly Work for software project management. It's also over-hyped, as the first line of the Wikipedia entry shows.</p>
<p>I'd like to talk about …</p><p>Microsoft has made available a VSTS tool for teams using Scrum: Download details: Microsoft eScrum Version 1.0</p>
<p><a href="https://en.wikipedia.org/wiki/Scrum_(development)">Scrum</a> is, I've concluded, The Simplest Thing That Could Possibly Work for software project management. It's also over-hyped, as the first line of the Wikipedia entry shows.</p>
<p>I'd like to talk about eScrum in a future column for <em>SD Times</em> and would love to hear from people who've used it or evaluated it and decided against it. Contact me at lobrien@ </p>
<p>knowing.net</p>"New Scientist" (My Favorite Magazine) is Offering a 74% Subscription Discount2007-07-17T08:18:00-10:002007-07-17T08:18:00-10:00larrytag:knowing.net,2007-07-17:/posts/2007/07/quotnew-scientistquot-my-favorite-magazine-is-offering-a-74-subscription-discount/<p>The British science weekly <em>New Scientist</em> is my favorite magazine (barring <a href="https://sdtimes.com/">SD Times</a>, of course!). The front of the magazine is devoted to brief discussions of recent findings and then there are usually several longer articles that, while generally over-credulous (string theory and many-worlds being perennially batted back and forth …</p><p>The British science weekly <em>New Scientist</em> is my favorite magazine (barring <a href="https://sdtimes.com/">SD Times</a>, of course!). The front of the magazine is devoted to brief discussions of recent findings and then there are usually several longer articles that, while generally over-credulous (string theory and many-worlds being perennially batted back and forth), at least rely on, you know, <em>scientists.</em> The magazine has a political stance that I don't always agree with (they recently advocated academic boycotts, which I think is 100% wrong). But, in general, it's a great read.</p>
<p>The downside is that yearly subscriptions in the US run around \<span class="math">\(150 or more. But right now, they are running a \<a href="http://email.newscientist.com/cgi-bin1/DM/y/nBDnt0MYdsX0eJA0EILS0EL"" target="\_blank" rel="noopener noreferrer"\>\\)</span>64 subscription special (74% off the cover price).</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Moving Beyond The Typing Debate?2007-07-17T06:59:00-10:002007-07-17T06:59:00-10:00larrytag:knowing.net,2007-07-17:/posts/2007/07/moving-beyond-the-typing-debate/<p>Maybe the readers of my blog are more astute (and better looking!) than average, but I was happy that several comments to my recent post on type inference were properly dismissive of what one called "the static vs. dynamic holy war." As I said when writing about the myth of …</p><p>Maybe the readers of my blog are more astute (and better looking!) than average, but I was happy that several comments to my recent post on type inference were properly dismissive of what one called "the static vs. dynamic holy war." As I said when writing about the myth of better programming languages last year, different programming languages engage your mind in different ways and <em>that</em> is what is worth pursuing. There was a time when I was programming professionally in two languages: C and Prolog. They engaged my mind in such profoundly different ways that shifting between them felt like the clutch on the '77 Ford van I was driving at the time (three-on-the-tree, baby), but in terms of problem solving, I felt like Superman. Now, first-class functions have entered the mainstream (primarily via C#) and that, in combination with \<a href="http://216.239.37.132/papers/mapreduce-osdi04.pdf"" target="_blank" rel="noopener noreferrer">an influential paper about Google's MapReduce programming model has led people to begin to see what functional programming advocates have been talking about lo these many years.</p>
<p>Similarly, people are beginning to realize that concurrency models <em>just might</em> be important in the coming years and are beginning to pay attention to languages like \<a href="http://www.erlang.org/"" target="_blank" rel="noopener noreferrer">Erlang. (Incidentally, O'Reilly & Associates seems to be betting that "shared nothing" is the way to go, a conclusion that I think is certainly too sweeping and premature. ORA is the most influential publishing house in software development right now, so the biases of their editors in this area will have a noticeable impact on the debate in the years to come.)</p>
<p>Update: No sooner had I written this post when I see in my Inbox that Pragmatic Bookshelf has published \<a href="http://www.oreilly.com/catalog/9781934356005/"" target="_blank" rel="noopener noreferrer">Programming Erlang. Look for a review in the coming weeks...</p>Type Inference: Nice, But Environment Support Is Crucial2007-07-17T00:00:00-10:002007-07-17T00:00:00-10:00larrytag:knowing.net,2007-07-17:/posts/2007/07/type-inference-nice-but-environment-support-is-crucial/<p>Bill Venners, recently intrigued by <a href="https://www.scala-lang.org/">Scala</a>, talks about the \<a href="http://www.artima.com/weblogs/viewpost.jsp%3fthread%3d209353"" target="_blank" rel="noopener noreferrer">advantages of type inference in this post. Type inference means that type assignments are <em>implicit</em> but <em>static</em> (that is, the programmer need not "finger type …</p><p>Bill Venners, recently intrigued by <a href="https://www.scala-lang.org/">Scala</a>, talks about the \<a href="http://www.artima.com/weblogs/viewpost.jsp%3fthread%3d209353"" target="_blank" rel="noopener noreferrer">advantages of type inference in this post. Type inference means that type assignments are <em>implicit</em> but <em>static</em> (that is, the programmer need not "finger type" the type intention, but the compiler will catch type-breaking behavior, such as assigning a string to an integer). The forthcoming LINQ-enabled .NET languages use type inference, so many will be exposed to it shortly.</p>
<p>In a forthcoming column in <em>SD Times</em>, I talk about my experiences with Ruby as I move from administrative and scripting tasks to using it in multi-thousand-line applications. My conclusions include:</p>
<ul>
<li>Contrary to the claims of some, type-breaking behaviors (e.g., bad assignments) <em>do</em> occur on a regular basis in larger codebases (ever work with dates and times?), and</li>
<li>Dynamic typing can seduce you into ignoring a refactor (e.g., "Eh, I'll just change this function to return an array of values.")</li>
</ul>
<p>But what's <em>really</em> hard with implicitly-typed languages is that knowing what types are being used in a method is essential to code comprehension in larger codebases. With explicitly-typed languages, that information is always available. With implicitly-typed languages, that information <em>may</em> become available in a sophisticated development environment. In a language where the compiler is based on type inference, the development environment ought to be <em>expected</em> to provide you "what type is this?" information (IntelliSense) instantly and accurately. With truly dynamic languages, it's much harder. It's quite easy to overwhelm the Intellisense / Code Completion of even the best of the new Ruby IDEs, such as \<a href="http://www.sapphiresteel.com/"" target="_blank" rel="noopener noreferrer">Ruby In Steel. Ruby In Steel allows optional type-explicitness in specially formatted comment fields, which I quite like, but optional explicit typing was tried in Visual Basic and I think the result was more-or-less a failure (as I said back in 2004).</p>Bit Twiddling Hacks2007-07-16T18:00:00-10:002007-07-16T18:00:00-10:00larrytag:knowing.net,2007-07-16:/posts/2007/07/bit-twiddling-hacks/<p>Comes a time in every performance-oriented programmer's life when you can speed things up tremendously by working directly with bits. In such a situation, this page of bit twiddling hacks would be very useful: Bit Twiddling Hacks (<em>via</em> \<a href="http://feeds.feedburner.com/%7er/LessIsBetter/%7e3/130989829/drjflam"" target …</p><p>Comes a time in every performance-oriented programmer's life when you can speed things up tremendously by working directly with bits. In such a situation, this page of bit twiddling hacks would be very useful: Bit Twiddling Hacks (<em>via</em> \<a href="http://feeds.feedburner.com/%7er/LessIsBetter/%7e3/130989829/drjflam"" target="_blank" rel="noopener noreferrer">John Lam)</p>The Electron Sculptor : View Source Reflector tool for .NET Silverlight Sites2007-07-16T12:00:00-10:002007-07-16T12:00:00-10:00larrytag:knowing.net,2007-07-16:/posts/2007/07/the-electron-sculptor-view-source-reflector-tool-for-net-silverlight-sites/<p>Nice: A plug-in for the invaluable \<a href="http://www.aisto.com/roeder/dotnet/"" target="_blank" rel="noopener noreferrer">Lutz Roeder's Reflector tool that allows you to view Silverlight source: The Electron Sculptor : View Source Reflector tool for .NET Silverlight Sites (<em>via</em> David Ing)</p>From the "Fair Enough, I Guess" Dept.2007-07-14T14:22:00-10:002007-07-14T14:22:00-10:00larrytag:knowing.net,2007-07-14:/posts/2007/07/from-the-quotfair-enough-i-guessquot-dept/<blockquote>
<p>"7. Windows XP: Switching User During Capture.<br>
Never do this. Very bad things will happen."</p>
</blockquote>
<p>-- Pinnacle Studio 11 Readme.doc</p>Linux Multitouch: Like Surface, But Probably Less than $10K2007-07-13T18:45:00-10:002007-07-13T18:45:00-10:00larrytag:knowing.net,2007-07-13:/posts/2007/07/linux-multitouch-like-surface-but-probably-less-than-10k/<p>Microsoft's [Surface is estimated to cost \<span class="math">\(10K](https://www.microsoft.com/en-us/surface) in its first incarnation. I've already had an interesting conversation with an entrepreneur friend who has an application that he thinks would be fantastic on Surface, but \\)</span>10K for the hardware makes it a non-starter. Although I'm …</p><p>Microsoft's [Surface is estimated to cost \<span class="math">\(10K](https://www.microsoft.com/en-us/surface) in its first incarnation. I've already had an interesting conversation with an entrepreneur friend who has an application that he thinks would be fantastic on Surface, but \\)</span>10K for the hardware makes it a non-starter. Although I'm sure Surface will eventually cost less, I'll be talking to my friend about \<a href="http://wearables.unisa.edu.au/mpx/"" target="_blank" rel="noopener noreferrer">Multi-Pointer X Server, which has just added multi-touch support. Heck, might be my first commercial Mono project...</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Oracle 11g Beta Out: Alan Zeichick Says It's The Leader2007-07-12T17:46:00-10:002007-07-12T17:46:00-10:00larrytag:knowing.net,2007-07-12:/posts/2007/07/oracle-11g-beta-out-alan-zeichick-says-its-the-leader/<p>Alan Zeichick, commenting on the release of Oracle DB 11G Beta ranks the major databases as:</p>
<ol>
<li>Oracle</li>
<li>DB2</li>
<li>SQL Server</li>
<li>MySQL</li>
</ol>
<p>I've never been a fan of DB2, but Oracle DB is a rock and I would never hesitate to recommend it. (This despite my involvement with Oracle's abysmal XML-based …</p><p>Alan Zeichick, commenting on the release of Oracle DB 11G Beta ranks the major databases as:</p>
<ol>
<li>Oracle</li>
<li>DB2</li>
<li>SQL Server</li>
<li>MySQL</li>
</ol>
<p>I've never been a fan of DB2, but Oracle DB is a rock and I would never hesitate to recommend it. (This despite my involvement with Oracle's abysmal XML-based file-system (FS? FX?) ). Of course, many .NET shops use SQL Server and I've yet to experience a real problem with that. MySQL is preferred for Rails development and, again, I've never had a problem using it.</p>Another LiveWriter / dasBlog scheduling experiment2007-07-12T17:00:00-10:002007-07-12T17:00:00-10:00larrytag:knowing.net,2007-07-12:/posts/2007/07/another-livewriter-dasblog-scheduling-experiment/<p>\~8AM Hawaiian == \~7PM UCT</p>
<hr>
<p>Saved Publish On (Local) Appears At Publish Date
8:50 Today 9AM immediately 9 AM publication
9:25 Today 9:30 immediately
9:26 Today 11:30 immediately
9:30 1:30 immediately
9:32 1:45 ?
9:32 1:35 immediately
9:33 1:45 …</p><p>\~8AM Hawaiian == \~7PM UCT</p>
<hr>
<p>Saved Publish On (Local) Appears At Publish Date
8:50 Today 9AM immediately 9 AM publication
9:25 Today 9:30 immediately
9:26 Today 11:30 immediately
9:30 1:30 immediately
9:32 1:45 ?
9:32 1:35 immediately
9:33 1:45 immediately
9:33 1:50 immediately (!)
9:35 2:30 Today @ 2:30 Today @ 2:30
3:00PM 3:00PM immediately 3PM today
3:00PM Tomorrow 8AM </p>
<hr>
<p>Theory:</p>
<p>"Today" is determined strictly from UCT Date.</p>
<p>"Now" is determined properly by subtracting TZ offset.</p>
<p>Note that this creates a problem if "UCT Date" - TZ offset creates a "rollunder." Problem is more acute the further from UCT you are (sez the guy living UCT -11). </p>Jakob Nielsen Says Experts Should Write Articles, Not Blog Posts. I Disagree.2007-07-12T07:25:00-10:002007-07-12T07:25:00-10:00larrytag:knowing.net,2007-07-12:/posts/2007/07/jakob-nielsen-says-experts-should-write-articles-not-blog-posts-i-disagree/<p>Jakob Nielsen, the usability guru, argues that \<a href="http://www.useit.com/alertbox/articles-not-blogs.html"" target="_blank" rel="noopener noreferrer">experts should not blog, as blogging an opinion is a commodity display of knowledge, but rather they should write longer articles, as well-researched and argued articles lie outside the …</p><p>Jakob Nielsen, the usability guru, argues that \<a href="http://www.useit.com/alertbox/articles-not-blogs.html"" target="_blank" rel="noopener noreferrer">experts should not blog, as blogging an opinion is a commodity display of knowledge, but rather they should write longer articles, as well-researched and argued articles lie outside the capabilities of the hoi polloi. As an independent consultant, I couldn't disagree more.</p>
<p>Regular readers know that I make my living in two ways: teaching about software development and practicing what I teach. What you may not know is that teaching (writing, speaking, etc.) pays <em>very</em> poorly compared to practicing. I've been teaching software development for 18 years and if I rely on that alone, I can make a modest living -- just above median income (#1 rule for contractors: track your time and be astonished at your true rate of return). As a contract programmer, I can easily make more than twice that in the areas of my expertise.</p>
<p>Of course I write and speak for many reasons, but I <em>justify</em> writing and speaking by saying that it is the beacon that brings in higher-paying contract gigs. It establishes my expertise. So I'm very interested in where my leads come from, e.g.:</p>
<ol>
<li>Blog posts</li>
<li>Speeches at conferences</li>
<li>Articles in Web publications</li>
<li>Articles in print publications</li>
</ol>
<p>Did you notice that list is ordered? That's because that's my experience. Maintaining a blog is, for me, unquestionably the #1 lead-generator I've ever had. Leads generated by my blog over the past 5 years have led to more than half my income in that time (and I turn down work constantly). For me, the economic expectation of developing and delivering a conference tutorial is around three months median income.</p>
<p>I've published hundreds of articles over the past 18 years and I tell you this: <strong>articles don't generate leads</strong>.</p>
<p>Case in point: in Fall 2002, I "bet" on the Tablet PC. More with my heart than my head, perhaps, but at the time of introduction, there were high hopes that the Tablet PC was going to be a breakthrough form-factor. Through 2005, I published more than 20 articles on programming the Tablet PC. I generated precisely <em>one</em> contract gig, for about 4 months' median income (and, much to my horror, that fixed-bid gig consumed 6 months' effort stretched out over 9 months calendar time -- the worst hourly rate I've made programming since I was a teenager).</p>
<p>In contrast, in June 2003 I wrote this blog post on programming the Sabre global distribution system. That post has generated an average of 3 "hot" leads per month for more than 4 years and has made me the majority of my income. If I was smart and sub-contracted the work generated by that post, I think I would net something like 5-6X median income.</p>
<p>Is the market for programming travel reservation systems bigger than the market for programming Tablet PC applications? Absolutely. But there ought to have been <em>some</em> Tablet PC contracts out there.</p>
<p>My theory is that lead generation derives from Google rank and that the <strong>best way to increase Google rank is to</strong> <strong>be like a professional fighter</strong>: neither jabs nor haymakers are enough. You must be always jabbing and you must regularly throw haymakers. Blog continuously to keep your hit-rate and link-traffic high and write longer pieces, containing the high-value words associated with your niche, occasionally.</p>
<p>This is the plan I am following as I "set up" for the manycore era -- doing lots of learning, beginning to develop opinions, doing a few articles, writing a few programs. From the development perspective, I'd like to get some gigs remediating performance-oriented systems and maintaining my reputation for developing high-performance server software architectures. Right now, 90% of what I'm doing is jabbing, but already some of my longer posts have gotten good traffic and Google rank, so I think when I get to the point of really putting my weight behind certain posts, the number of smaller "jab-like" posts about concurrency will give the "haymaker" articles far more authority (as far as the search engines are concerned) than if I relied on articles alone.</p>Lava Lake in Pu'u O'o2007-07-10T15:22:00-10:002007-07-10T15:22:00-10:00larrytag:knowing.net,2007-07-10:/posts/2007/07/lava-lake-in-puu-oo/<p>Lava has reemerged at Pu'u O'o vent, creating a vast, slowly circulating lake of lava, as captured from the USGS cams at dawn on 7/8/07. During the day, it doesn't look like much, but try the \<a href="http://hvo.wr.usgs.gov/cam/"" target="_blank" rel="noopener …</p><p>Lava has reemerged at Pu'u O'o vent, creating a vast, slowly circulating lake of lava, as captured from the USGS cams at dawn on 7/8/07. During the day, it doesn't look like much, but try the \<a href="http://hvo.wr.usgs.gov/cam/"" target="_blank" rel="noopener noreferrer">live Pu'u O'o Webcams around dusk (7-9 Hawaiian) or before dawn (\~5:30 AM Hawaiian) and you should see a rare sight.</p>
<p>(Click image for 1920 x 480 version)</p>Does it post them if they're saved to the server as a draft?2007-07-08T04:01:00-10:002007-07-08T04:01:00-10:00larrytag:knowing.net,2007-07-08:/posts/2007/07/does-it-post-them-if-theyre-saved-to-the-server-as-a-draft/<p>If you end up seeing this draft, but no earlier than the 8th, then LiveWriter and das Blog <em>can</em> schedule drafts by "Post draft to Weblog" with a scheduled date. (This was scheduled for 7/8 4AM.)</p>Scheduling Posts with dasBlog / LiveWriter2007-07-04T13:59:00-10:002007-07-04T13:59:00-10:00larrytag:knowing.net,2007-07-04:/posts/2007/07/scheduling-posts-with-dasblog-livewriter/<p>I'm still working this out, but...</p>
<p>I believe the key is to "Post draft to Weblog" (not "Post to Weblog" or "Save local draft").</p>
<p>Further, there is definitely some hinkiness relating to UCT and TZ offset.</p>
<p>If, at 7/3 3:20 PM HST (== 7/4 1:20 UCT), I …</p><p>I'm still working this out, but...</p>
<p>I believe the key is to "Post draft to Weblog" (not "Post to Weblog" or "Save local draft").</p>
<p>Further, there is definitely some hinkiness relating to UCT and TZ offset.</p>
<p>If, at 7/3 3:20 PM HST (== 7/4 1:20 UCT), I set the publish date to "7/4 1:59 PM" the post is <em>immediately</em> displayed with a timestamp of 7/4 1:59 PM (i.e., it appears prematurely). If I set the publish date to "7/4 2:00 PM" (n.b. == "7/5 00:00" UTC) it does <em>not</em> post immediately. In other words, I think that "today's date" is based on UTC, but time is corrected for UTC.</p>Happy Birthday, America!2007-07-03T12:13:00-10:002007-07-03T12:13:00-10:00larrytag:knowing.net,2007-07-03:/posts/2007/07/happy-birthday-america/<p>\<a href="http://www.backbaypress.com/skylines.html"" target="_blank" atomicselection="true" rel="noopener noreferrer"> Since LiveWriter Beta seems to <em>not</em> delay publishing until the "Set publish date" time (it just time-stamps them later, which is just annoying), I will be going dark for a few days of travel. In …</p><p>\<a href="http://www.backbaypress.com/skylines.html"" target="_blank" atomicselection="true" rel="noopener noreferrer"> Since LiveWriter Beta seems to <em>not</em> delay publishing until the "Set publish date" time (it just time-stamps them later, which is just annoying), I will be going dark for a few days of travel. In the meantime, let me quickly say that this business about Intel's "Larrabee" GPU being based on the Pentium MMX is almost certainly hogwash. <a href="https://arstechnica.com/gadgets/2007/06/intels-next-gpu-to-be-pentium-mmx-based/">Jon Stokes has it right</a> I think.</p>XML Report Generators, Part 22007-07-02T11:19:00-10:002007-07-02T11:19:00-10:00larrytag:knowing.net,2007-07-02:/posts/2007/07/xml-report-generators-part-2/<p>Based on comments to my earlier post, I put further work into Crystal Reports XI and SQL Server Reporting Services. Both seem capable-enough in terms of handling the data volumes and seem to have similar ease-of-use as far as the ultimate end-user goes (the inexperienced programmers who will be charged …</p><p>Based on comments to my earlier post, I put further work into Crystal Reports XI and SQL Server Reporting Services. Both seem capable-enough in terms of handling the data volumes and seem to have similar ease-of-use as far as the ultimate end-user goes (the inexperienced programmers who will be charged with writing reports). My take is that Crystal has more flexibility in terms of output formats, which might influence my choice.</p>
<p>However, there's another wrinkle. The data is stored as an XML blob in the database. These are fairly hefty documents, 1-4MB apiece, with quite complex schema. <em>But</em> I don't want to report on a single one of these blobs, I want to report on all of them. So my data model is not-quite-XML and not-quite-relational.</p>
<p>For instance, to use the cliched example, every record in the database contains data such as:</p>
<div class="highlight"><pre><span></span><code><span class="cp"><?xml version='1.0' encoding='utf-8'?></span>
<span class="w"> </span><span class="nt"><book></span>
<span class="w"> </span><span class="nt"><authors></span>
<span class="w"> </span><span class="nt"><author></span>Arnold<span class="w"> </span>Aarnison<span class="nt"></author></span>
<span class="w"> </span><span class="nt"><author></span>Bob<span class="w"> </span>Billson<span class="nt"></author></span>
<span class="w"> </span><span class="nt"></authors></span>
<span class="w"> </span><span class="nt"><sales></span>23<span class="nt"></sales></span>
<span class="w"> </span><span class="nt"></book></span>
</code></pre></div>
<p>And the reports we're looking for might be "Total number of sales of books by author" which would seem to necessitate either:</p>
<ol>
<li>Joining the data in multiple database rows (i.e., make a <em>new</em> XML document that wraps the per-database-row \<book> element in a root element called, say, \<books>); or</li>
<li>Mapping the XML schema into a relational view (i.e., create tables for Books, Authors, and Sales); or</li>
<li>Reporting that can somehow combine SQL and XPath in a single query (e.g., "Select count(myXmlColumn.Xpath(/book/sales/text()) from myTable group by myXmlColumn.Xpath(/book/authors/author/text()")</li>
</ol>
<p>Option (1) is easy enough, but the resulting document is going to be massive -- gigabytes. I've never worked with XML documents of that size and worry (prematurely?) about the capacity / performance of feeding a report generator such a volume of XML.</p>
<p>Option (2), which is essentially the reverse of (1), would solve the reporting problem (since once it's in a relational structure, any reporting tool will work) and is <em>do-able</em> using Altova's XMLSpy "Create DB Structure from XML Schema" but I'm concerned about the amount of manual labor required (I have to define dozens of foreign keys relationships by hand -- but is that a one-time cost that's no big deal?).</p>
<p>Option (3) would be the ideal, but I don't think there are any reporting tools that work that way.</p>
<p>Any real-world experiences with similar challenges would be appreciated...</p>"Handkerchief-Clad Mechanics"?2007-07-02T07:21:00-10:002007-07-02T07:21:00-10:00larrytag:knowing.net,2007-07-02:/posts/2007/07/quothandkerchief-clad-mechanicsquot/<p>In <a href="https://www.msn.com/">this MSNBC article</a> about the Boeing 787, the writer remembers "the noisy factory floors with handkerchief-clad mechanics clanging away on shiny metal." Was that one of those weird hippie things?</p>Frisbee God Scott Zimmerman Pens MSDN Article2007-06-30T11:44:00-10:002007-06-30T11:44:00-10:00larrytag:knowing.net,2007-06-30:/posts/2007/06/frisbee-god-scott-zimmerman-pens-msdn-article/<p>I was just reading "8 Tips and Tricks for Better BizTalk Programming" in the May 2007 MSDN when the word "Frisbee" in the author's bio caught my eye.</p>
<p>I was pretty good with a disc (3 world records, all of which have been long eclipsed), but Scott Zimmerman was the …</p><p>I was just reading "8 Tips and Tricks for Better BizTalk Programming" in the May 2007 MSDN when the word "Frisbee" in the author's bio caught my eye.</p>
<p>I was pretty good with a disc (3 world records, all of which have been long eclipsed), but Scott Zimmerman was the Michael Jordan of disc. I think he held every throwing record, probably multiple times.</p>
<p>Reading that just sent me down nostalgia lane: Skippy Jammer, Crazy John Brooks, the Coloradicals ... Southampton, La Jolla Cove, Mission Beach Rollercoaster ...</p>
<p>Geez, now I'm going to have to learn BizTalk just for the offchance of jamming with Scott at some development conference...</p>Volcanic Caesura2007-06-30T09:58:00-10:002007-06-30T09:58:00-10:00larrytag:knowing.net,2007-06-30:/posts/2007/06/volcanic-caesura/<p>After Pele rolled over, she's gone into a deeper slumber and the Big Island is experiencing the lowest level of volcanic activity since 1983. Such pauses have happened twice before during the current 24-year-long eruption and previously lasted just a few weeks.</p>
<p>The effect on the Kona (leeward) side of …</p><p>After Pele rolled over, she's gone into a deeper slumber and the Big Island is experiencing the lowest level of volcanic activity since 1983. Such pauses have happened twice before during the current 24-year-long eruption and previously lasted just a few weeks.</p>
<p>The effect on the Kona (leeward) side of the island is dramatic. For the whole time I've known this island, the 14,000' Mauna Loa creates a huge atmospheric eddy in which the volcanic aerosols are transformed into "vog" (volcanic smog). This makes Kona "normally" hazy, with an indistinct horizon and, for some, noticeable effects when exercising. A few times per year, when the winds shift, and the sky becomes blue, it's literally like a scrim being lifted. It's been like that every day for the past couple weeks.</p>
<p>No one expects this pause to be long-lasting, but for the moment, it's marvelous.</p>"Set Publish Date" works or not in LiveWriter Beta?2007-06-30T06:00:00-10:002007-06-30T06:00:00-10:00larrytag:knowing.net,2007-06-30:/posts/2007/06/quotset-publish-datequot-works-or-not-in-livewriter-beta/<p>I am setting the publish date of this post to tomorrow (6/30) at 6:00:00 AM, although I am publishing it on the 29th at 7PM.</p>WiiWare: Small (and Non-Professional?) Game Development for Nintendo2007-06-29T18:51:00-10:002007-06-29T18:51:00-10:00larrytag:knowing.net,2007-06-29:/posts/2007/06/wiiware-small-and-non-professional-game-development-for-nintendo/<p>Wii has announced that they will be opening the door to small developers on the Wii. The first take on this is that "WiiWare" is primarily about downloadable games a la XBox Arcade, but we all knew that was coming. More surprising is that Nintendo says that they will not …</p><p>Wii has announced that they will be opening the door to small developers on the Wii. The first take on this is that "WiiWare" is primarily about downloadable games a la XBox Arcade, but we all knew that was coming. More surprising is that Nintendo says that they will not apply their notoriously thorough and expensive vetting process to such games. No details on the SDK: whether it will be C-based or some form of managed language and no word on whether it will be free.</p>Forza 2 Killed My Launch XBox 3602007-06-28T19:28:00-10:002007-06-28T19:28:00-10:00larrytag:knowing.net,2007-06-28:/posts/2007/06/forza-2-killed-my-launch-xbox-360/<p>Apparently, that my XBox 360 lasted from the day it went on sale until today is unusual. I was negotiating a turn in Forza 2 and the system froze. Rebooted, it froze during race startup. Rebooted, and now it's "the Red Ring of Death."</p>
<p>According to \<a href="http://www …</p><p>Apparently, that my XBox 360 lasted from the day it went on sale until today is unusual. I was negotiating a turn in Forza 2 and the system froze. Rebooted, it froze during race startup. Rebooted, and now it's "the Red Ring of Death."</p>
<p>According to \<a href="http://www.xbox360defective.com/yourstory.html"" target="_blank" rel="noopener noreferrer">this site, I can expect to be told that it will cost \$140 to get a refurbished replacement, but if I bitch I'll get 25% off. Oh well, maybe the replacement will be quieter -- there's no way the fans I had on this thing were up to spec.</p>XML Report Generators: Any Opinions, O Web?2007-06-28T12:38:00-10:002007-06-28T12:38:00-10:00larrytag:knowing.net,2007-06-28:/posts/2007/06/xml-report-generators-any-opinions-o-web/<p>We have a database (SQL Server) that has a field in which we store fairly-hefty (1-4MB) XML documents. We need to create reports. Lots of reports.</p>
<p>The schemas upon which the documents are based are quite complicated and we have thousands of records.The reports need to be modifiable by …</p><p>We have a database (SQL Server) that has a field in which we store fairly-hefty (1-4MB) XML documents. We need to create reports. Lots of reports.</p>
<p>The schemas upon which the documents are based are quite complicated and we have thousands of records.The reports need to be modifiable by inexperienced programmers, so a visual report designer is an absolutely necessity. Any opinions on good tools? (Big Faceless has high Google rank. Anyone use it?)</p>
<p>I d/l'ed a demo of Crystal Reports, but:</p>
<ul>
<li>Found it hard to configure my data source and schema (and even though I thought I finally got it right, although I can now see the "tables" and "fields" from my schema, it still says Records: 0)</li>
<li>Am not sure I can configure it to use an XML database field as a datasource</li>
</ul>
<p>Am I a fool to use Crystal Reports or just a fool to not have figured it out?</p>
<p>Anyone looking for some freelance report-generating work?</p>Top 10 Things To Do With Your Petaflop Supercomputer2007-06-27T07:58:00-10:002007-06-27T07:58:00-10:00larrytag:knowing.net,2007-06-27:/posts/2007/06/top-10-things-to-do-with-your-petaflop-supercomputer/<p>Now that <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0136573077293032061458529305568981325683%26anid%3D0136573077293032061458529305568981325683&u=0136573077293032061458529305568981325683&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553673703449&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0136573077293032061458529305568981325683%26anid%3D0136573077293032061458529305568981325683&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">IBM has a petaflop supercomputer</a>, the question becomes what to do with it:</p>
<p>10. Develop a coherent exit strategy from Iraq</p>
<p>9. Crank call Gary Kasparov at 3 in the morning and ask in that creepy computer-voice: "Would you like to play a game ... bitch?"</p>
<p>8. Write a …</p><p>Now that <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0136573077293032061458529305568981325683%26anid%3D0136573077293032061458529305568981325683&u=0136573077293032061458529305568981325683&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553673703449&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0136573077293032061458529305568981325683%26anid%3D0136573077293032061458529305568981325683&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">IBM has a petaflop supercomputer</a>, the question becomes what to do with it:</p>
<p>10. Develop a coherent exit strategy from Iraq</p>
<p>9. Crank call Gary Kasparov at 3 in the morning and ask in that creepy computer-voice: "Would you like to play a game ... bitch?"</p>
<p>8. Write a script that saves the Geico Cavemen sitcom from being canceled after 3 shows</p>
<p>7. Port Rails to VBScript</p>
<p>6. Explain the plot of <em>Pirates of the Caribbean: Dead Man's Chest</em></p>
<p>5. Open the pod bay doors (Or not -- let the computer figure it out.)</p>
<p>4. Hook up with slutty, esteem-challenged teraflop computers by telling them you think they're still hot</p>
<p>3. Explain Paris Hilton's popularity</p>
<p>2. Calculate shorelines post-Greenland icecap meltdown. Give seminars on how to buy to-be-oceanfront real-estate, particularly distressed and defaulted properties, for no money down!</p>
<p>And the #1 use for a petaflop-capable supercomputer...</p>
<p>1. Barter it for an iPhone</p>Austhink's Rationale: Software for Decomposing Arguments2007-06-26T09:29:00-10:002007-06-26T09:29:00-10:00larrytag:knowing.net,2007-06-26:/posts/2007/06/austhinks-rationale-software-for-decomposing-arguments/<p>Rationale is an interesting program that allows you to visually represent arguments:</p>
<p>It is essentially a domain-specific Visio or MindManager. Since it is domain-specific, it is faster to construct a complex tree and additionally export the structure as a text outline. This also limits it a little, in that I …</p><p>Rationale is an interesting program that allows you to visually represent arguments:</p>
<p>It is essentially a domain-specific Visio or MindManager. Since it is domain-specific, it is faster to construct a complex tree and additionally export the structure as a text outline. This also limits it a little, in that I couldn't find a way to associate a single point with multiple higher-level positions ("Ruby is easy to learn" relates to both training developers and maintenance). While it could be argued that one should continue to decompose one's arguments until they fit into a neat hierarchy, that seems a little over-zealous for the general case. (Incidentally, I didn't use the product to structure this paragraph, but it turned out quite close to the sort of text generated by Rationale.)</p>
<p>It's fun to use and you can rapidly construct arguments either top down ("We should use Rails for our next application" because ... ) or bottom-up ("Ruby's interactive console allows active exploration" supports ... ). It does not attempt to parse your logic (it won't balk at "because I say so") but it can help structure an argument for conversation and review.</p>
<p>As long as everyone agrees that decomposition is a productive route and as long as people aren't so cagey that they recognize that structuring a debate is 3/4 of the way to winning it. That's my biggest problem with the product; at \<span class="math">\(199 for a perpetual license or \\)</span>100 per year, it's a little pricey for something I <em>don't</em> think you'll be using in many meetings. However, as an educational tool, I think it's a good bargain. The educational rate is \<span class="math">\(49 for a perpetual license or \\)</span>24.50 annually, and I think this would be a very good tool for students learning rhetoric, debating, logic, or composition.</p>
<p>You can \<a href="http://www.austhink.com/"" target="_blank" rel="noopener noreferrer">download a 30-day trial version from Austhink.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Reading Shakespeare2007-06-25T19:01:00-10:002007-06-25T19:01:00-10:00larrytag:knowing.net,2007-06-25:/posts/2007/06/reading-shakespeare/<p>Charles Petzold has a <a href="http://www.charlespetzold.com/blog/2007/06/230501.html" title="post in which he talks about the unique experience of reading a book">post in which he talks about the unique experience of reading a book </a>. In the post, Petzold mentions a device that caused a buzz at a recent O'Reilly conference; the device was a book that somehow embedded a screen for displaying hyperlinked content (from the picture …</p><p>Charles Petzold has a <a href="http://www.charlespetzold.com/blog/2007/06/230501.html" title="post in which he talks about the unique experience of reading a book">post in which he talks about the unique experience of reading a book </a>. In the post, Petzold mentions a device that caused a buzz at a recent O'Reilly conference; the device was a book that somehow embedded a screen for displaying hyperlinked content (from the picture, it looks like it used some kind of flexible screen). Petzold says that while this sounds good initially, it will inevitably lead to more and more ancillary "fat."</p>
<p>I think he's right. I remember that the first few Shakespeare plays I read were from school-provided texts. They had footnotes for virtually every sentence and they were incredibly distracting ("Fardel: A burden.") It was only when I learned to willfully ignore the footnotes that I began to understand why people love Shakespeare. (Exception: ignoring footnotes is <em>not</em> recommended when reading \<a href="http://www.amazon.com/Pale-Fire-Vladimir-Nabokov/dp/0679723420/ref%3dpd_bbs_2/102-1238996-4973730%3fie%3dUTF8%26s%3dbooks%26qid%3d1182834052%26sr%3d8-2"" target="_blank" rel="noopener noreferrer">Nabokov.)</p>Borland StarTeam Best SCM Tool, Says Survey2007-06-25T09:58:00-10:002007-06-25T09:58:00-10:00larrytag:knowing.net,2007-06-25:/posts/2007/06/borland-starteam-best-scm-tool-says-survey/<p>eWeek is quoting an <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Evans Data survey in which Borland's StarTeam was rated the best source control management (SCM) software</a>, beating out CVS, IBM ClearCase/ClearQuest, Microsoft Visual SourceSafe, Microsoft Visual Studio Team System, Perforce, Serena/PVCS, and Subversion. It's an interesting result, because surveys have a strong tendency to …</p><p>eWeek is quoting an <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Evans Data survey in which Borland's StarTeam was rated the best source control management (SCM) software</a>, beating out CVS, IBM ClearCase/ClearQuest, Microsoft Visual SourceSafe, Microsoft Visual Studio Team System, Perforce, Serena/PVCS, and Subversion. It's an interesting result, because surveys have a strong tendency to correlate with marketshare, but surely StarTeam does not have dominant marketshare. Meanwhile, SCM tends to be a "good enough" solution, where people generally stick with what they already have. Is StarTeam so exceptionally good that it can overcome those tendencies?</p>
<p><strong>Update:</strong> Evans' methodology is to survey users of the tool in question, which ought to overcome the "marketshare == survey results" problem that one gets in most "reader's choice" surveys. On the other hand, it may inflate the influence of <a href="https://en.wikipedia.org/wiki/Cognitive_dissonance">cognitive dissonance</a>; people invested in niche products (StarTeam has about 9% marketshare, according to BZ Research) have a psychological pressure to praise them more than do people invested in market leaders (who, after all, know the market has endorsed their decision, making criticism come a little easier to the tongue).</p>
<p>I don't have deep opinions about SCM tools (except about Visual SourceSafe, which I despise), but I asked one of the judges in that category for the Jolt Awards his opinion. He recalls Evans "finding that among Java IDE users, the preferred IDE belonged to Rational. This struck me (and others) as being implausible, but not impossible. This survey result, however, does strike me as quite impossible."</p>
<p>Having said <em>that</em>, I solicited Eric Sink (of SourceGear, a competitor of Borland's) for his thoughts and he responded in the comments section. Sink characterized StarTeam as a product that is in the category of SCM tools that are "mostly or somewhat liked" by their users.</p>
<p>I've only used StarTeam momentarily, quite awhile ago, so my skepticism about the results may be sheer ignorance of a great product.</p>Binary Addition Analog (Wooden) Computer2007-06-23T13:14:00-10:002007-06-23T13:14:00-10:00larrytag:knowing.net,2007-06-23:/posts/2007/06/binary-addition-analog-wooden-computer/<p>Words cannot express my admiration for this.</p>ScottEVest Cargo Shorts Can't Accommodate Moleskine Reporter2007-06-23T09:58:00-10:002007-06-23T09:58:00-10:00larrytag:knowing.net,2007-06-23:/posts/2007/06/scottevest-cargo-shorts-cant-accommodate-moleskine-reporter/<p>A few weeks ago, Scottevest Cargo Shorts were on sale. I've never owned a Scottevest product before, but they're well-reviewed, and if there's one piece of clothing a Hawaiian geek requires, it's capacious cargo shorts.</p>
<p>They're quite good looking and can handle a full load of iPod, wallet, digital camera …</p><p>A few weeks ago, Scottevest Cargo Shorts were on sale. I've never owned a Scottevest product before, but they're well-reviewed, and if there's one piece of clothing a Hawaiian geek requires, it's capacious cargo shorts.</p>
<p>They're quite good looking and can handle a full load of iPod, wallet, digital camera, and phone. However, they have a critical flaw, of which I'm surprised given the company's clear understanding of their audience: <strong>there is no pocket that accommodates a Moleskine Reporter Notebook</strong> (or the slightly smaller and more casual Sherbert Notes 7"x5"). The "big" pockets on the Cargo Shorts are cut with an angled entry that writing-sized notebooks can't negotiate (see photo).</p>
<p>Of course the shorts can handle notecards or memo pads, which are sufficient for to-do lists and \<a href="http://www.43folders.com/2004/09/03/introducing-the-hipster-pda/"" target="_blank" rel="noopener noreferrer">Hipster PDAs, but have you ever tried to record a non-trivial thought on a memo pad? Doesn't work. Perhaps the next release will solve this critical bug.</p>Turing's Birthday2007-06-23T08:58:00-10:002007-06-23T08:58:00-10:00larrytag:knowing.net,2007-06-23:/posts/2007/06/turings-birthday/<p><a href="https://en.wikipedia.org/wiki/Alan_Turing">Alan Turing</a> was born 95 years ago today. <em>Less than 100 years ago</em>. I know that at the physical level, information processing is nowhere near as dramatic as flight or the rise of the car, but it's still astonishing to reflect upon the advances. I've been drafting an article about …</p><p><a href="https://en.wikipedia.org/wiki/Alan_Turing">Alan Turing</a> was born 95 years ago today. <em>Less than 100 years ago</em>. I know that at the physical level, information processing is nowhere near as dramatic as flight or the rise of the car, but it's still astonishing to reflect upon the advances. I've been drafting an article about the connections being discovered between computation and physics (both thermodynamics and Riemannian geometry), fields where there is a palpable sense of impending breakthroughs. I've never understood why there's so little discussion of the <em>science</em> of computation and information, which is still a field that, like biology in the 18th and 19th centuries, is broadly accessible and one where I am convinced amateurs and dilettantes can make major contributions.</p>NVIDIA's Tesla Takes the Second G Out of GPGPU2007-06-23T08:20:00-10:002007-06-23T08:20:00-10:00larrytag:knowing.net,2007-06-23:/posts/2007/06/nvidias-tesla-takes-the-second-g-out-of-gpgpu/<p>NVidia's <a href="https://arstechnica.com/gadgets/2007/06/nvidia-takes-on-the-supercomputing-market-with-tesla/">Tesla C870 Graphics Processing Unit (GPU) will be the basis for a "deskside supercomputer" add-on</a> that will provide highly-parallel high performance computing (HPC) capabilities, presumably programmed with \<a href="http://developer.nvidia.com/object/cuda.html"" target="_blank" rel="noopener noreferrer">NVidia's CUDA toolkit.</p>
<p>Dedicated hardware for HPC has …</p><p>NVidia's <a href="https://arstechnica.com/gadgets/2007/06/nvidia-takes-on-the-supercomputing-market-with-tesla/">Tesla C870 Graphics Processing Unit (GPU) will be the basis for a "deskside supercomputer" add-on</a> that will provide highly-parallel high performance computing (HPC) capabilities, presumably programmed with \<a href="http://developer.nvidia.com/object/cuda.html"" target="_blank" rel="noopener noreferrer">NVidia's CUDA toolkit.</p>
<p>Dedicated hardware for HPC has always been a treacherous market -- one year's darling is next year's has-been (people used to buy Cray Supercomputers at auction and resell them for the gold in the connectors. \<a href="http://findarticles.com/p/articles/mi_m0NEW/is_1993_April_16/ai_13786747"" target="_blank" rel="noopener noreferrer">True story.). Dedicated processing boards for desktop computers have always been especially troubled, as the system bus is such a bottleneck and Moore's Law used to provide such wonderful free lunches. (No longer true, although the bus issue is potentially more dramatic than ever.)</p>
<p>There is <em>infinite</em> demand for HPC from 3 well-funded sectors: economics (trading), bioinformatics, and chemistry (bio- and otherwise). These sectors will absorb <em>any</em> amount of information processing capacity available. Whether that can be translated into commercial success for NVidia, or whether they unlock additional markets, is far less certain.</p>
<p>I wonder if Google will buy a couple boards.</p>
<p>Takeaway for programmers: Feverish hardware activity relating to concurrency continues. Software lags, with only relatively low-level toolkits available for exploiting the system. Keep your C skills sharp.</p>Slow Death Of Dev^h^h^h Magazines, Part 38: Once Mighty Ziff Davis Sells Off Enterprise Group In Attempt To Service Debt2007-06-21T09:36:00-10:002007-06-21T09:36:00-10:00larrytag:knowing.net,2007-06-21:/posts/2007/06/slow-death-of-devhhh-magazines-part-38-once-mighty-ziff-davis-sells-off-enterprise-group-in-attempt-to-service-debt/<p>Ziff Davis is [selling for \<span class="math">\(150M its Enterprise Group](https://adage.com/section/btob/976), whose assets include *Baseline, CIO Insight, eWeek*, and **microsoft-watch.com.** Unfortunately, that leaves ZD with still around \~\\)</span>240M in debt, which they must pay off using their Consumer/Small Business Group (which published <em>PC Mag …</em></p><p>Ziff Davis is [selling for \<span class="math">\(150M its Enterprise Group](https://adage.com/section/btob/976), whose assets include *Baseline, CIO Insight, eWeek*, and **microsoft-watch.com.** Unfortunately, that leaves ZD with still around \~\\)</span>240M in debt, which they must pay off using their Consumer/Small Business Group (which published <em>PC Mag</em>) and their Game Group.</p>
<p>The purchaser was Insight Venture Partners. I can't imagine that they've got a plan to flip it -- I don't think any publishing company is hankering to make such an investment. So that leaves slicing-and-dicing.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Silverlight on Mono: Moonlight2007-06-21T08:43:00-10:002007-06-21T08:43:00-10:00larrytag:knowing.net,2007-06-21:/posts/2007/06/silverlight-on-mono-moonlight/<p>Miguel de Icaza has unveiled "<a href="https://tirania.org/blog/archive/2007/Jun-21.html">Moonlight,"</a> an implementation of Silverlight on Linux by way of Mono. The project was done as a 21-day sprint and while just a prototype, it makes Microsoft's new in-browser managed platform available on the 3 major desktop contenders.</p>
<p>I remain of the opinion that Silverlight …</p><p>Miguel de Icaza has unveiled "<a href="https://tirania.org/blog/archive/2007/Jun-21.html">Moonlight,"</a> an implementation of Silverlight on Linux by way of Mono. The project was done as a 21-day sprint and while just a prototype, it makes Microsoft's new in-browser managed platform available on the 3 major desktop contenders.</p>
<p>I remain of the opinion that Silverlight is going to be a major platform for Microsoft, siphoning off a lot of developers who otherwise would be looking at .NET / desktop CLR. And while Mono has not seen the uptake that I think it deserves, the availability of Silverlight on Linux is important for Silverlight's acceptance.</p>The Slow Death of Developer Magazines, Part 372007-06-19T10:57:00-10:002007-06-19T10:57:00-10:00larrytag:knowing.net,2007-06-19:/posts/2007/06/the-slow-death-of-developer-magazines-part-37/<p>I was just scanning my latest copy of one of the very last independent software development magazines (independent as in "copy not subject to approval by vendors") and saw an article on REST. It seems intuitive to me that if you're a programming magazine today, you compete on clarity and …</p><p>I was just scanning my latest copy of one of the very last independent software development magazines (independent as in "copy not subject to approval by vendors") and saw an article on REST. It seems intuitive to me that if you're a programming magazine today, you compete on clarity and authority. The article, in fact, was written by one of the magazine's contributing editors and I thought "Ah! A 1500 word overview of REST -- how valuable!"</p>
<p>Take a look at the core code of Listing 1:</p>
<p>protected void doPost(HttpServletRequest req, HttpServletResponse resp){<br>
...<br>
Employee emp = lookupUser(userSSID);<br>
String medPlan = emp.getMedicalPlan();<br>
String dntPlan = emp.getDentalPlan();<br>
String retPlan = emp.getRetirementPlan();<br>
Response = "User " + emp.getFullName()<br>
+ " has medical plan: " + medPlan<br>
+ ", and dental plan: " + dntPlan<br>
+ ", and retirement plan: " + retPlan;<br>
out.println(response)</p>
<p>></p>
<p>Believe me, I understand that I have a lot of glass in the walls of my house, but it's a <em>really</em> big mistake to have a tutorial on REST that uses the HTTP POST verb to retrieve existing data. The use of HTTP verbs for distinct purposes is <em>central</em> to REST principles. The author seems to be unaware of this.</p>
<p>One reason I've not posted the name of the magazine is that, although this magazine is likely to have been in the hands of its many tens of thousands of subscribers for weeks, I've not heard the slightest ripple of outrage in the blogosphere and I'd like to see if that continues.</p>
<p>Obviously, this prominent magazine's feature article on an architectural topic of great interest and passion has gone unremarked. What does that mean? There's been a great deal of buzz lately about "<a href="https://www.hanselman.com/blog/IsMicrosoftLosingTheAlphaGeeks.aspx">whether alpha geeks have given up on Windows</a>" but I find it even more disturbing to think that the alpha geeks have given up on ink on dead trees. Surely one of the roles of experts is to police the "mainstream media" and not simply to piss on each other about esoteric corner cases.</p>
<p>Or is it the case that this <em>particular</em> magazine has lost its credibility and that such a mistake is considered no more worth pointing out than the White House making an overly-optimistic prediction about Iraq?</p>Pele On The Move?2007-06-17T09:25:00-10:002007-06-17T09:25:00-10:00larrytag:knowing.net,2007-06-17:/posts/2007/06/pele-on-the-move/<p>A big earthquake swarm on the SE side of the island is "consistent with a shallow intrusion of magma" at Kilauea / Pu'u O'o. They don't predict eruptions, but I have a feeling that Pele might be restless. Luckily, that's 60 miles away and on the other side of a 13 …</p><p>A big earthquake swarm on the SE side of the island is "consistent with a shallow intrusion of magma" at Kilauea / Pu'u O'o. They don't predict eruptions, but I have a feeling that Pele might be restless. Luckily, that's 60 miles away and on the other side of a 13,000 foot mountain.</p>Why Do I Keep Giving Antivirus Companies My Money?2007-06-16T07:55:00-10:002007-06-16T07:55:00-10:00larrytag:knowing.net,2007-06-16:/posts/2007/06/why-do-i-keep-giving-antivirus-companies-my-money/<p>This isn't "fool me twice, shame on you," it's like "fool me every freakin' year for the past decade." At least Norton 360 doesn't seem to consume huge portions of my CPU constantly.</p>Interested in Deep Understanding of Concurrency? Read Mark McKeown2007-06-15T07:43:00-10:002007-06-15T07:43:00-10:00larrytag:knowing.net,2007-06-15:/posts/2007/06/interested-in-deep-understanding-of-concurrency-read-mark-mckeown/<p>I hesitate to call Mark McKeown's \<a href="http://betathoughts.blogspot.com/2007/06/brief-history-of-consensus-2pc-and.html"" target="_blank" rel="noopener noreferrer">Brief History of Consensus, 2PC, and Transaction Commit (via just about everyone, but let's say <a href="https://dehora.net/journal/">Bill de h?ra</a>) a "blog post." It reads much more like a darn …</p><p>I hesitate to call Mark McKeown's \<a href="http://betathoughts.blogspot.com/2007/06/brief-history-of-consensus-2pc-and.html"" target="_blank" rel="noopener noreferrer">Brief History of Consensus, 2PC, and Transaction Commit (via just about everyone, but let's say <a href="https://dehora.net/journal/">Bill de h?ra</a>) a "blog post." It reads much more like a darn good professional article.</p>
<p>If you're interested in having an informed opinion about concurrency (as opposed to waiting half-a-decade and accepting what the market has decided is "good enough"), the article is a must-read. As we get to the manycore era, the amount of asynchronicity <em>within a single machine</em> will be significant. We're already seeing hints of this with Non-Uniform Memory Access (NUMA), in which different cores can access main memory asynchronously.</p>
<p>So in order to think knowledgeably about what concurrent programming <em>ought to</em> be like, the best crude model is distributed programming. With a <em>huge caveat</em>, which is that you can't think just about the network messages as "the system," you have to think about keeping the local processor busy. So don't think about Google Maps, think about Forza 2 on XBox Live. (Mmmm... Forza 2 on XBox Live ... )</p>I Am A Demo God2007-06-14T15:55:00-10:002007-06-14T15:55:00-10:00larrytag:knowing.net,2007-06-14:/posts/2007/06/i-am-a-demo-god/<p>Can't talk about it, but I demo'ed something today. I love it when the chewing gum and baling wire doesn't show.</p>
<p>That was a lot of fun. It's been a long time since I've done a big stakes demo.</p>Sopranos Ending: No Spoilers2007-06-12T09:59:00-10:002007-06-12T09:59:00-10:00larrytag:knowing.net,2007-06-12:/posts/2007/06/sopranos-ending-no-spoilers/<p>Ambiguous? Of course. But c'mon, there's clearly one reading that gives David Chase credit for being brilliant.</p>
<p>Having said that -- Could anyone stand watching more than the first 15 minutes of <em>John from Cincinnati</em>? I only made it that far because it was David Milch.</p>Dan Bricklin Shreds Wikipedia's "Spreadsheet" page2007-06-11T12:00:00-10:002007-06-11T12:00:00-10:00larrytag:knowing.net,2007-06-11:/posts/2007/06/dan-bricklin-shreds-wikipedias-quotspreadsheetquot-page/<p>Dan Bricklin has posted a thoughtful article on Wikipedia's "Spreadsheet" page. Bricklin quickly establishes that the page is well below par and may be tainted by someone's personal agenda. Given Bricklin's knowledge and involvement with this important topic, the critique should certainly be taken seriously, both as an indictment of …</p><p>Dan Bricklin has posted a thoughtful article on Wikipedia's "Spreadsheet" page. Bricklin quickly establishes that the page is well below par and may be tainted by someone's personal agenda. Given Bricklin's knowledge and involvement with this important topic, the critique should certainly be taken seriously, both as an indictment of the page as it currently and, more deeply, as a warning sign of trouble with the Wikipedia model. I don't want to get into a debate weighing the relative value of dead-tree versus online journalism, but anyone interested in the subject ought to read and reflect upon Bricklin's article.</p>Google Buys Peakstream, Hot Young Player in General Purpose GPU (Concurrent) Programming2007-06-11T12:00:00-10:002007-06-11T12:00:00-10:00larrytag:knowing.net,2007-06-11:/posts/2007/06/google-buys-peakstream-hot-young-player-in-general-purpose-gpu-concurrent-programming/<p>Google's interest in concurrent programming is no surprise -- indexing the Web involves a lot of parallelism -- but their \<a href="http://www.theregister.co.uk/2007/06/05/google_buys_peakstream/"" target="_blank" rel="noopener noreferrer">acquisition of Peakstream, developers of a low-level programming tool, is startling.</p>
<p>To quickly review …</p><p>Google's interest in concurrent programming is no surprise -- indexing the Web involves a lot of parallelism -- but their \<a href="http://www.theregister.co.uk/2007/06/05/google_buys_peakstream/"" target="_blank" rel="noopener noreferrer">acquisition of Peakstream, developers of a low-level programming tool, is startling.</p>
<p>To quickly review: today's Graphics Processing Units (GPUs) are every bit as complex and powerful as the CPU. As opposed to mainstream CPUs, though, they are already highly parallel, with up to several dozen pipelines. I say "already" because highly parallel processing units is the future that awaits us all; it's one reason why I've been writing lots of articles about GPUs (the other reason being that graphics are hella' cool).</p>
<p>The trade-off for the high parallelism of GPUs is that they don't have anywhere near the flexibility of CPUs; the pipelines are quite rigid, with severe restrictions on memory access and code length. GPUs are architected to quickly perform matrix math on big parallel arrays (geometry and pixels), and for such tasks, they are <em>blazingly</em> fast. This graph shows the advantage of a GPU-based Mandelbrot set calculation I wrote.</p>
<p>A sufficiently motivated programmer with a highly parallel task can sometimes recast his problem so that it conforms to GPU architecture (arrays become textures, calculations become pixel coloring, etc.). This is what is known as "General Purpose GPU" (GPGPU) programming. Such recasting is difficult, especially across the broad ecosystem of GPUs, each with differing performance capabilities and characteristics. (For instance, that Mandelbrot shader I wrote exceeds the code length supported by my \$350-in-2006 graphics card.)</p>
<p>Peakstream is one of several companies that promises to make GPGPU programming easier. Since GPGPU is a fairly extreme task, it is no surprise that there are also academic and FOSS tools. </p>
<p>Last Fall, Peakstream started making PR noise. As soon as I saw their press release, I expressed interest in seeing their technology. I never heard back from them. They also nominated themselves for a Jolt Award. But, when asked to provide access to their technology so that we could, you know, <em>evaluate</em> it, we never heard back from them. At the time, I wrote them off as having put the PR cart in front of the technology horse. In retrospect, perhaps Google had already begun their acquisition inquiries.</p>
<p>One way or the other, the question of what Google is going to <em>do</em> with Peakstream's technology is fascinating. Are they going to use it as an internal advantage? What I don't get about that is: they're Google. My investigation of GPGPU libraries and tools was a major influence on my conclusion that there is no near-term "one size fits all" solution to concurrent programming -- the hardware is too demanding and too specific to be abstracted away. I am highly dubious that Google would trade a modicum of programming ease for a significant penalty in run-time performance. That's not how Google works.</p>
<p>My analysis of GPGPU is that the only thing that would <em>really</em> be worthwhile is a complete compiler chain. And not your CS201 "Introduction to Compilers" compiler, but a serious-voodoo compiler, with hardware-specific transforms, dynamic profiling, etc. If Peakstream had <em>that (</em>and the talent to put such a thing together), then I could imagine Google absorbing the company for internal use.</p>
<p>The other, more interesting, possibility is that they intend to offer Peakstream's technology to the masses. But while it's fair to say that Google has created a programming platform with APIs to their hosted services, a GPGPU tool is the furthest thing from a Web Service imaginable. GPGPU is as low-level as it gets: C-like languages are considered "high level" and the tools are binary libraries and compilers. These are the types of tools that one expects to come from Intel, AMD, and Nvidea. Why would Google get involved?</p>
<p>Perhaps the answer lies in that "already" that I threw out all those paragraphs ago. Whoever -- and I mean <em>whoever</em> -- figures out a way to get the mainstream through the manycore tsunami dictates the development platform for the 2010s. Maybe Google is interested in having a say.</p>Book 'Bots Battling Builds Bizarreness?2007-06-11T11:03:00-10:002007-06-11T11:03:00-10:00larrytag:knowing.net,2007-06-11:/posts/2007/06/book-bots-battling-builds-bizarreness/<p>Have you ever noticed that "Buy This Book Used..." prices from Amazon and the like are often bizarre? Often they're strangely specific -- "\<span class="math">\(43.72" -- and often they're insanely overpriced "Paperback 23rd Printing of Programming with dBase II: \\)</span>1,234.56"</p>
<p>Jeff Duntemann thinks it's due to 'bots. If it's not …</p><p>Have you ever noticed that "Buy This Book Used..." prices from Amazon and the like are often bizarre? Often they're strangely specific -- "\<span class="math">\(43.72" -- and often they're insanely overpriced "Paperback 23rd Printing of Programming with dBase II: \\)</span>1,234.56"</p>
<p>Jeff Duntemann thinks it's due to 'bots. If it's not, it's not a bad idea for a business:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="n">Register</span><span class="w"> </span><span class="n">yourself</span><span class="w"> </span><span class="n">with</span><span class="w"> </span><span class="n">Amazon</span><span class="w"> </span><span class="n">et</span><span class="w"> </span><span class="n">al</span><span class="o">.</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">receive</span><span class="w"> </span><span class="n">used</span><span class="o">-</span><span class="n">book</span><span class="w"> </span><span class="n">requests</span><span class="w"> </span><span class="n">Set</span><span class="w"> </span><span class="n">constant</span><span class="w"> </span><span class="n">minimum_acceptable_profit_per_book</span><span class="w"> </span><span class="n">Set</span><span class="w"> </span><span class="n">constant</span><span class="w"> </span><span class="n">hoped_for_profit_per_book</span><span class="w"> </span><span class="n">Set</span><span class="w"> </span><span class="n">constant</span><span class="w"> </span><span class="n">cost_of_remailing</span><span class="w"> </span><span class="n">On</span><span class="w"> </span><span class="n">receipt</span><span class="w"> </span><span class="n">of</span><span class="w"> </span><span class="n">used</span><span class="o">-</span><span class="n">book</span><span class="w"> </span><span class="n">request</span><span class="p">{</span><span class="w"> </span><span class="n">check</span><span class="w"> </span><span class="n">your</span><span class="w"> </span><span class="n">used_book_quotes</span><span class="w"> </span><span class="n">dictionary</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="n">price</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">you</span><span class="w"> </span><span class="n">don</span><span class="s1">'t have a price{ make the same used-book request record quoted price from other suppliers set price = quoted price from other suppliers + cost_of_remailing + hoped_for_profit_per_book } else #You do have a price { quote price if accepted { sell, achieving profit >= minimum_acceptable_profit_per_book } else #not accepted { diminish price towards: quoted price from other suppliers + cost_of_remailing + minimum_acceptable_profit_per_book } } }</span>
</code></pre></div>
<p>The downside is that with multiple such agents in the system, you can see how "quoted price from other suppliers" would lead to a positive feedback loop.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>"Service Unavailable" Woes: It Appears that dasBlog is Spontaneously Restarting2007-06-11T08:30:00-10:002007-06-11T08:30:00-10:00larrytag:knowing.net,2007-06-11:/posts/2007/06/quotservice-unavailablequot-woes-it-appears-that-dasblog-is-spontaneously-restarting/<p>I'm aware that my blog has been troublesome lately (hopefully, your aggregator has borne the pain). I run \<a href="http://www.dasblog.info/"" target="_blank" rel="noopener noreferrer"><a href="http://www.dasblog.net">dasBlog</a>, which I generally like and in which I have an insane investment (oh, look, I started this blog 5 years …</p><p>I'm aware that my blog has been troublesome lately (hopefully, your aggregator has borne the pain). I run \<a href="http://www.dasblog.info/"" target="_blank" rel="noopener noreferrer"><a href="http://www.dasblog.net">dasBlog</a>, which I generally like and in which I have an insane investment (oh, look, I started this blog 5 years ago this month). However, sometimes I envy those who use a hosted provider. Right now, my <a href="http://www.dasblog.net">dasBlog</a> logs seem to show that <a href="http://www.dasblog.net">dasBlog</a> is restarting every few minutes. The other exceptional thing is that the log is filled with "Validation of viewstate MAC failed" exceptions that very much appear to be the result of comment/referrer spam attempts. Are these exceptions, perhaps, causing the restarts? I dunno'. Anyway, I'll try to see if there's anything I can do about it...</p>IBM's Telelogic Acquisition: Buying Marketshare, Not Expanding Market2007-06-11T08:09:00-10:002007-06-11T08:09:00-10:00larrytag:knowing.net,2007-06-11:/posts/2007/06/ibms-telelogic-acquisition-buying-marketshare-not-expanding-market/<p><a href="http://bp0.blogger.com/_fKux43-_yfs/Rm1qjc6MVPI/AAAAAAAAAak/FQAL3ko2Ihc/s1600-h/920905.jpg"><img alt="" src="https://1.bp.blogspot.com/_fKux43-_yfs/Rm1qjc6MVPI/AAAAAAAAAak/FQAL3ko2Ihc/s320/920905.jpg"></a>I agree with Alan Zeichick's analysis of IBM's acquisition of modeling tool vendor Telelogic: the overlap with IBM's Rational product line is high, the acquisition "is a bid to buy market share....we've taken a powerful innovator and strong IBM competitor out of the market."</p>
<p>The software development industry typically …</p><p><a href="http://bp0.blogger.com/_fKux43-_yfs/Rm1qjc6MVPI/AAAAAAAAAak/FQAL3ko2Ihc/s1600-h/920905.jpg"><img alt="" src="https://1.bp.blogspot.com/_fKux43-_yfs/Rm1qjc6MVPI/AAAAAAAAAak/FQAL3ko2Ihc/s320/920905.jpg"></a>I agree with Alan Zeichick's analysis of IBM's acquisition of modeling tool vendor Telelogic: the overlap with IBM's Rational product line is high, the acquisition "is a bid to buy market share....we've taken a powerful innovator and strong IBM competitor out of the market."</p>
<p>The software development industry typically pendulums on modeling tools: excess, backlash, abandonment, code is king, frustration, some modeling helps, we can model everything, excess ...</p>
<p>Right now, modeling is not popular. But I think it's actually passed its nadir and, if history holds, we should see modeling increase in popularity. The problem for IBM and Rational is that part of the pendulum is the embrace of <em>new</em> modeling graphics/languages.</p>As A Programmer, Do You Go Into Debug Mode With Bureaucracy?2007-06-10T18:00:00-10:002007-06-10T18:00:00-10:00larrytag:knowing.net,2007-06-10:/posts/2007/06/as-a-programmer-do-you-go-into-debug-mode-with-bureaucracy/<p>One of my few talents is that I'm <em>really</em> good dealing with bureaucracies. Not in the long run, where they drive me crazy, but in the short run, when they're telling you that you should buy the ticket and they'll refund it, or that you have to pay your entire …</p><p>One of my few talents is that I'm <em>really</em> good dealing with bureaucracies. Not in the long run, where they drive me crazy, but in the short run, when they're telling you that you should buy the ticket and they'll refund it, or that you have to pay your entire year's out-of-pocket expense and then apply for a reimbursement. In situations like that, I go into debugging mode: persistent but not angry. My favorite line is when I'm talking to the person and I say "I know and you know that you can either help me or escalate the problem to someone who can help. And I'm going to keep talking to you until one of those two things happen." Yeah, I know it's kind of obnoxious, but I think they appreciate that I'm not emotional about it -- I'm persistent and I maintain eye contact but I know it's not a <em>person</em> denying me fairness, it's a program.</p>
<p>Or when they answer your question with a specific not-quite-relevant phrase and you say "Ah hah! That's a script constant! That points the way to the sub-routine!" For instance, I was recently talking to a hospital financial person and she kept saying "What we're dealing with is estimated charges," and I realized "Oh! She's <em>forbidden</em> from saying 'you aren't responsible for 30% of this, you're responsible for 30% of the adjusted charges. So all of this is just a Kabuki dance to get the hospital as much money as possible, to guard against deadbeats and, possibly, to float an interest-free loan from people who aren't programmers." And three minutes later we were both all smiles and laughing with our shared, but unspoken, understanding of the situation.</p>Parallel Hard Drives: Maybe I Was Wrong2007-06-10T16:03:00-10:002007-06-10T16:03:00-10:00larrytag:knowing.net,2007-06-10:/posts/2007/06/parallel-hard-drives-maybe-i-was-wrong/<p>A while ago, I posted my uninformed thoughts on parallel hard drives. \<a href="http://engagebrain.com/%3fp%3d41"" target="_blank" rel="noopener noreferrer">Charles Lecklider says I'm wrong: that doubling the number of moving parts <em>within</em> a single drive is unlikely to be popular, that a good RAID controller …</p><p>A while ago, I posted my uninformed thoughts on parallel hard drives. \<a href="http://engagebrain.com/%3fp%3d41"" target="_blank" rel="noopener noreferrer">Charles Lecklider says I'm wrong: that doubling the number of moving parts <em>within</em> a single drive is unlikely to be popular, that a good RAID controller and some cheap drives will get you through today's world and, in the future, solid-state drives will provide the performance necessary for the manycore era.</p>"The Definitive ANTLR Reference" by Terence Parr2007-06-07T10:54:00-10:002007-06-07T10:54:00-10:00larrytag:knowing.net,2007-06-07:/posts/2007/06/quotthe-definitive-antlr-referencequot-by-terence-parr/<p>I second <a href="http://binstock.blogspot.com/2007/06/great-nerd-stim.html">Andrew Binstock's recommendation</a> of "The Definitive ANTLR Reference" by Terence Parr (author of ANTLR), even to Binstock's sly observation that the book "sort of lulls you into the false belief that you could write a new scripting language fairly easily."</p>
<p>I <em>really</em> like ANTLR. Not long ago, I …</p><p>I second <a href="http://binstock.blogspot.com/2007/06/great-nerd-stim.html">Andrew Binstock's recommendation</a> of "The Definitive ANTLR Reference" by Terence Parr (author of ANTLR), even to Binstock's sly observation that the book "sort of lulls you into the false belief that you could write a new scripting language fairly easily."</p>
<p>I <em>really</em> like ANTLR. Not long ago, I was asked if it was even remotely feasible to essentially screen-scrape a complex mainframe-generated report. Other people were saying "weeks and even then no guarantees..." With ANTLR and ANTLRWorks, I wrote a parser in a day (albeit one with rules named things like "MysteryBlock1"). (I also pestered the client -- "No, seriously! If you want me to write parsers and hand that AJAX crap off to someone else, I'd be willing to make the sacrifice...")</p>"xUnit Test Patterns: Refactoring Test Code" by Gerard Meszaros2007-06-07T08:40:00-10:002007-06-07T08:40:00-10:00larrytag:knowing.net,2007-06-07:/posts/2007/06/quotxunit-test-patterns-refactoring-test-codequot-by-gerard-meszaros/<p>My first reaction to the book <em>xUnit Test Patterns: Refactoring Test Code</em> by Gerard Meszaros (Addison-Wesley) was shock: <em>800 pages</em> on writing unit tests? Isn't that taking things a little too far?</p>
<p>I have a problem calling such an omnibus a "patterns" book. At 800 pages, <em>xUnit Test Patterns</em> is …</p><p>My first reaction to the book <em>xUnit Test Patterns: Refactoring Test Code</em> by Gerard Meszaros (Addison-Wesley) was shock: <em>800 pages</em> on writing unit tests? Isn't that taking things a little too far?</p>
<p>I have a problem calling such an omnibus a "patterns" book. At 800 pages, <em>xUnit Test Patterns</em> is twice the size of Fowler's original <em>Refactoring</em> or Scott Ambler's <em>Refactoring Databases.</em> The value of patterns, in large part, came from creating a <em>common</em> vocabulary. I think it's perfectly legitimate to be discussing a problem and say "Visitor pattern" and expect that the response should be "Well, let's see..." I don't think that would be a legitimate expectation if I said "Hard-Coded Test Double."</p>
<p>Having said that, the omnibus of snippets has been a trend lately: the <em>Cookbook</em> series from O'Reilly and the <em>Recipes</em> series from the Pragmatic Programmers. The idea seems to be to beat Google at the "quick reference" problem: when faced with a problem, what's the fastest way to find a related snippet?</p>
<p>At that level, if you mentally retitle Meszaros' book "xUnit Cookbook/Recipes" then I think it accomplishes the job admirably: it seems to cover just about every problem scenario I could quickly think of. On the other hand, how many problem scenarios do you encounter running unit tests?</p>
<p>My take is that this is a good book to have in the shared library, but is unlikely to be fought over or, in the long run, thumb-worn and broken. I just don't see xUnit as being that complex or trouble-prone. And for those who don't "get" unit-testing, I think the book would be intimidating (even though a newcomer would do well to read the initial 275 pages, which amount to a book-within-a-book on unit testing).</p>
<p>If you're having trouble with unit testing, by all means, rush out and get it. But I can't help but feel that it could have been twice the book at half the length.</p>I know it was you, Paulie. You broke my heart. You broke my heart!2007-06-05T13:39:00-10:002007-06-05T13:39:00-10:00larrytag:knowing.net,2007-06-05:/posts/2007/06/i-know-it-was-you-paulie-you-broke-my-heart-you-broke-my-heart/<p>Mark my words.</p>
<p>Update: A "friend" reminds me that I predicted that the end would be Christopher killing Tony. Yeah, so obviously David Chase reads my blog and does things just to make me look stupid. But the ending's in the can, so I'm sticking with my prediction.</p>
<p>P.S …</p><p>Mark my words.</p>
<p>Update: A "friend" reminds me that I predicted that the end would be Christopher killing Tony. Yeah, so obviously David Chase reads my blog and does things just to make me look stupid. But the ending's in the can, so I'm sticking with my prediction.</p>
<p>P.S. Will <em>John from Cincinnati</em> be <em>Empire Strikes Back</em> or <em>Phantom Menace</em>?</p>Mathematica: The Greatest Programming Tool You've Never Used2007-06-04T07:48:00-10:002007-06-04T07:48:00-10:00larrytag:knowing.net,2007-06-04:/posts/2007/06/mathematica-the-greatest-programming-tool-youve-never-used/<p>If there were 3 tools that I could wish every programmer would develop one complete project in, they would be:</p>
<ul>
<li>jUnit</li>
<li>Smalltalk</li>
<li>Mathematica</li>
</ul>
<p>Each will forever change your opinion of what a software development environment <em>ought to be</em> like but each, at the level of an article or a blogpost …</p><p>If there were 3 tools that I could wish every programmer would develop one complete project in, they would be:</p>
<ul>
<li>jUnit</li>
<li>Smalltalk</li>
<li>Mathematica</li>
</ul>
<p>Each will forever change your opinion of what a software development environment <em>ought to be</em> like but each, at the level of an article or a blogpost or even a trivial project, is unlikely to persuade you because each is more about introducing a way of solving problems than a way of simplifying a task. (That is, what makes a nice demo is a visual interface builder, not a green bar on a test suite. )</p>
<p>I figure you've already used jUnit or one its kin. Smalltalk has enough proponents so you're probably at least <em>aware</em> that it's browser and persistent workspace are life-altering (if you aren't, check out James Robertson's series of screencasts). Mathematica, though, is not on most people's radar (unless you're in mathematics or certain sciences).</p>
<p>I've just received a copy of Mathematica 6, which has tremendously improved capabilities for interactive exploration of a problem space and sharing them with the world. I look forward to using the tool, not just to visualize some hopefully interesting things (for instance, concurrency issues) but to hopefully give a glimpse of a radically different philosophy of what an interactive console might look like.</p>Does LiveWriter schedule posts?2007-06-03T18:00:00-10:002007-06-03T18:00:00-10:00larrytag:knowing.net,2007-06-03:/posts/2007/06/does-livewriter-schedule-posts/<p>I am going to be the happiest freaking kid on the block if this post appears on my blog at 6PM tonight and not before...</p>
<p>The ability to schedule posts for future publishing is my single greatest wish for Windows LiveWriter. It looks like the new beta has that capability …</p><p>I am going to be the happiest freaking kid on the block if this post appears on my blog at 6PM tonight and not before...</p>
<p>The ability to schedule posts for future publishing is my single greatest wish for Windows LiveWriter. It looks like the new beta has that capability...</p>Parallel Hard Drives2007-06-03T12:01:00-10:002007-06-03T12:01:00-10:00larrytag:knowing.net,2007-06-03:/posts/2007/06/parallel-hard-drives/<p>In comments, David Glassborow makes the excellent point that the hard drive, far more than the CPU, seems to be the limiting factor for the concurrent revolution. When your computer is frustratingly slow, the odds of your disk-access light being on are approximately perfect.</p>
<p>I know very, very little about …</p><p>In comments, David Glassborow makes the excellent point that the hard drive, far more than the CPU, seems to be the limiting factor for the concurrent revolution. When your computer is frustratingly slow, the odds of your disk-access light being on are approximately perfect.</p>
<p>I know very, very little about hard drive technology, but I am under the impression that all hard drives are strictly serial in their processing -- that the hard drive processes only one request at a time and that requests are serviced in a FIFO manner.</p>
<p>I absolutely expect to see parallel hard drives emerge. Naively, it would seem fairly straightforward to have multiple heads per platter and and expanded bus so that multiple simultaneous read/writes could be serviced. In a sense, RAID 0 in a single bay.</p>Skype Stinks, At Least To and From Hawai'i2007-06-03T11:06:00-10:002007-06-03T11:06:00-10:00larrytag:knowing.net,2007-06-03:/posts/2007/06/skype-stinks-at-least-to-and-from-hawaii/<p>I know people love Skype, but my experience using it <em>from</em> Hawai'i has always been terrible -- horrid echo, constant break up -- and on my recent trip to Panama, it was equally useless for calling <em>to</em> Hawai'i. That's all I have to say about that.</p>Death and Taxes: Compilation, Type, and Test2007-06-03T09:08:00-10:002007-06-03T09:08:00-10:00larrytag:knowing.net,2007-06-03:/posts/2007/06/death-and-taxes-compilation-type-and-test/<p>Jeff Atwood has complained about the "<a href="https://blog.codinghorror.com/">compilation tax</a>" that he must pay with C#, contrasting it with Visual Basic's background compilation. It's utterly absurd that when we program, <strong>the most sophisticated, well-studied, computational task that is common</strong>, we are essentially typing into a text buffer. (At least IntelliSense / method completion …</p><p>Jeff Atwood has complained about the "<a href="https://blog.codinghorror.com/">compilation tax</a>" that he must pay with C#, contrasting it with Visual Basic's background compilation. It's utterly absurd that when we program, <strong>the most sophisticated, well-studied, computational task that is common</strong>, we are essentially typing into a text buffer. (At least IntelliSense / method completion keeps the CPU warm.)</p>
<p>Similarly, fans of dynamic languages often complain about the "finger typing" of explicit type declarations, saying that the effort of capturing their type intention is enough to break them from the zone of high productivity.</p>
<p>And yet: unit testing.</p>
<p>Since it's been more than a decade since the \<a href="http://www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp/0201633612"" target="_blank" rel="noopener noreferrer">Gang of Four, I have no hesitation in asserting that unit testing is the signal "best practice" of the past decade. One develops, side-by-side with progress-towards-user-value, a <em>considerable</em> body of code that exists to confirm / demonstrate / validate that progress. Writing unit-testing code takes significant time -- well spent, but significant. And the time needed to run a test suite absolutely dwarfs compile time. The question with taxes is what do you get in exchange? The "test tax" gives tremendous benefits and I don't hesitate to pay it, even though it is the heftiest of all. The "typing tax" is one that I find worthwhile in larger projects, although others disagree. The "compilation tax" though, provides very little. </p>
<p>People talk about background compilation and errors popping up before you're done with your thought and so forth, but that's a UI issue, not a technology issue. Don't show errors until you type "Ctrl-F5" but then show them <em>instantly --</em> that's okay by me. And I don't see any reason why you can't achieve that UI. Compilation typically consists of three phases: parsing the text into an "abstract syntax tree," transforming that tree for efficiency, and emitting code representing the transformed tree. Obviously, that's a pretty big benefit and a hard computational task, but the thing is: <strong>you have to do at least the first phase for IntelliSense</strong> and while continuous transformation might consume memory, at least it keeps my other 2-, 4-, 8- cores busy.</p>
<p><strong>I hate the compilation tax not because it's costly, but because it's inelegant.</strong></p>Print newspaper SD Times has biggest issue ever2007-06-02T10:02:00-10:002007-06-02T10:02:00-10:00larrytag:knowing.net,2007-06-02:/posts/2007/06/print-newspaper-sd-times-has-biggest-issue-ever/<p><a href="http://bp0.blogger.com/_fKux43-_yfs/RmBBTTX5EII/AAAAAAAAAZA/bPExZH76Wr4/s1600-h/sdtimes-175-06_01_2007-1.gif"><img alt="" src="https://1.bp.blogspot.com/_fKux43-_yfs/RmBBTTX5EII/AAAAAAAAAZA/bPExZH76Wr4/s320/sdtimes-175-06_01_2007-1.gif"></a>Alan Zeichick is understandably proud that the June 1, 2007 issue of <em>SD Times</em> is the largest in the paper's 7-year history. Launched as the dot-com bubble was deflating, <em>SD Times</em> has managed to thrive and now has more articles, more readers, and more advertisers than ever. That's quite an …</p><p><a href="http://bp0.blogger.com/_fKux43-_yfs/RmBBTTX5EII/AAAAAAAAAZA/bPExZH76Wr4/s1600-h/sdtimes-175-06_01_2007-1.gif"><img alt="" src="https://1.bp.blogspot.com/_fKux43-_yfs/RmBBTTX5EII/AAAAAAAAAZA/bPExZH76Wr4/s320/sdtimes-175-06_01_2007-1.gif"></a>Alan Zeichick is understandably proud that the June 1, 2007 issue of <em>SD Times</em> is the largest in the paper's 7-year history. Launched as the dot-com bubble was deflating, <em>SD Times</em> has managed to thrive and now has more articles, more readers, and more advertisers than ever. That's quite an achievement in this world of ours.</p>
<p>I write a column for <em>SD Times</em> (my latest is on RIAs) and am proud to be associated with such a fine publication.</p>JSON and XAML2007-06-01T09:43:00-10:002007-06-01T09:43:00-10:00larrytag:knowing.net,2007-06-01:/posts/2007/06/json-and-xaml/<p>John Lam reports that:</p>
<blockquote>
<p>2) <a href="https://tirania.org/blog/">Miguel de Icaza</a> spent a bunch of time lobbying us for a XamlReader.LoadFromJson() API. His reasoning was that folks don't like to type XAML, and would prefer a more wrist-friendly syntax for generating WPF/S element trees. It would be interesting to hear some …</p></blockquote><p>John Lam reports that:</p>
<blockquote>
<p>2) <a href="https://tirania.org/blog/">Miguel de Icaza</a> spent a bunch of time lobbying us for a XamlReader.LoadFromJson() API. His reasoning was that folks don't like to type XAML, and would prefer a more wrist-friendly syntax for generating WPF/S element trees. It would be interesting to hear some feedback from folks about this. I personally prefer using a "script-driven" XAML approach where I would generate WPF/S element trees from pure Ruby code. It would be a natural fit for managed JS, of course :)</p>
<p>Source: Wrapping up the Compiler Dev Lab<br>
Originally published on Thu, 24 May 2007 06:09:23 GMT by John Lam</p>
</blockquote>
<p>I'm +1 on keeping that out of the XamlReader interface. Conversions-to-my-type must be treated with suspicion, since they establish a permanent contract to support the other type. Of course, the world is full of types that have <strong>MyType.Parse(TheOtherType theOtherObject)</strong> functions and they're certainly convenient, but for big heavy IO objects and formats, I don't like it. There are proven patterns to solve the problem -- scripts, wrappers, decorators, etc.</p>And we all have strangely interconnected backstories...2007-06-01T09:42:00-10:002007-06-01T09:42:00-10:00larrytag:knowing.net,2007-06-01:/posts/2007/06/and-we-all-have-strangely-interconnected-backstories/<p>I am writing this (although heaven knows when I'll publish) from an under-construction terminal in the Tijuana airport. My COPA flight from Panama City to LAX had to divert around the storm off Central America and, with low fuel reserves, landed in Tijuana at midnight last night.</p>
<p>We were then …</p><p>I am writing this (although heaven knows when I'll publish) from an under-construction terminal in the Tijuana airport. My COPA flight from Panama City to LAX had to divert around the storm off Central America and, with low fuel reserves, landed in Tijuana at midnight last night.</p>
<p>We were then told that the flight crew could not fly us to LA until they received 14 hours rest. <em>Unfortunately</em>, TIJ immigration was already closed, so the flight crew did not leave for the hotel until 7 AM.</p>
<p>COPA told us that a flight crew from LAX was driving down and would fly us out around 6-7 AM. Sleepless night -- the stone floor is freezing cold and after a 7-hour flight from Panama City to Tijuana, my knee joints are so ballooned up with fluid that sitting sleep is impossible.</p>
<p>At 5:30 AM, just as the sky was lightening, we were told that the crew hadn't left at midnight, but were now on their way, to fly us out at 9-10.</p>
<p>At 7, we received a shipment of water and sandwiches.</p>
<p>Now, at 9, a rumor is flying around that the flight crew has <em>still</em> not left LAX. About 10 people who live in Southern California have decided to simply walk out, cab to the border, and make their way home, leaving their luggage to the competent hands of COPA. Hah.</p>
<p>Of course, that's not an option for me. I was <em>supposed</em> to connect to a United flight home to Hawaii that is probably clearing LAX departure right about now. I don't know if United flies to Hawaii more than once a day, so I strongly suspect that the upshot is that I'm going to stay in TIJ up to late tonight, spend a night in the terminal at LAX, and then get home mid-day tomorrow.</p>
<hr>
<p>Oh... fantastic rumor ... Perfect for the conspiracy minded. One piece of the puzzle that confused me was that the pilot told me that the diversion for the hurricane was 160 miles. So the question was: How could such a small diversion trigger a low-fuel situation? A rumor I've just been passed along by a former travel agent is that planes landing <em>in the United States</em> with fuel-safety margins below a required threshold pay a fine of \$17,000 (in that strangely specific way rumors have about numbers). So:</p>
<ol>
<li>COPA plans their fuel-loads for flights to LAX with that threshold in mind, (of course they would -- hauling extra fuel is lost money)</li>
<li>The 160-mile diversion resulted in a situation where we would have run out of fuel-safety <em>margin</em> and COPA would have had to pay a fine</li>
<li>By diverting to TIJ, COPA avoids the fine</li>
<li>Pissing off 200 passengers is acceptable to COPA, which has an operating monopoly for much international flight to Central- and South- America</li>
</ol>
<p>Now the question is whether they'll have the <em>cojones</em> (that's Spanish, kids!) to actually have us wait for the crew to get 14 hours rest (\~9PM) and have us fly in to LAX essentially 24 hours late. </p>
<hr>
<p>Scenes from the mosh pit:</p>
<p>The predictable and disappointing initial "let's do something about this!" tirade was "class-action lawsuit!"</p>
<p>The second, and much better reaction, was this Sam Jackson-looking dude calls the U.S. Embassy saying "U.S. citizens held against their will!" <strong>Nice escalation!</strong></p>
<p>Now me, my best reaction was starting a pool on when we go wheels-up. I took 10:36 AM, which I will certainly lose. I may double-down and put a bet on 10:36 PM.</p>TechEd is not the PDC Without Unveilings (I don't think)2007-06-01T09:35:00-10:002007-06-01T09:35:00-10:00larrytag:knowing.net,2007-06-01:/posts/2007/06/teched-is-not-the-pdc-without-unveilings-i-dont-think/<p>Perhaps I've been to above-average PDCs and below-par TechEds, but I don't think that TechEd is the PDC Without A Grand Unveiling that I dreamt of. I <em>think</em> that TechEd is essentially a goal-oriented show, a show where one goes to be educated about a technology with which one probably …</p><p>Perhaps I've been to above-average PDCs and below-par TechEds, but I don't think that TechEd is the PDC Without A Grand Unveiling that I dreamt of. I <em>think</em> that TechEd is essentially a goal-oriented show, a show where one goes to be educated about a technology with which one probably already works (for instance, "We're having DB performance problems, I will go and attend sessions about DB performance"). I <em>think</em> that PDC is essentially a vision-oriented show, to see things outside one's current toolset. I think that people fill gaps at TechEd and expand their horizons at PDC.</p>
<p>I feel talked <em>at</em> at the TechEds, I feel talked <em>to</em> at the PDCs. To me, a "Conference" is a different promise than a "Ed[ucation]."</p>
<p>So, when I talk of a PDC Without Announcements, what I'm suggesting is that if the PDC is where Microsoft hopes to capture the imaginations of the best developers, they would do well to have a conversation at the more ... I hate to say 'elite' but I can't think of a good alternative ... levels (for instance, Harry Pierson in conversation with David Ing would be a <em>fantastic</em> session).</p>
<p>For me, when the PDC was cancelled I did <em>not</em> consider replacing it with TechEd. Instead, I thought "Well, that makes OOPSLA 100%." If you've been to OOPSLA, you know that it's (a) a place where one's imagination can be excited and (b) not exactly The Green Zone for Microsoft. OOPSLA has faults -- big faults -- but I know that it's a place where I can get my assumptions challenged and my brain stretched.</p>
<p>I'll just leave it at that.</p>How Much of the Industry Will Go Parallel?2007-05-30T10:37:00-10:002007-05-30T10:37:00-10:00larrytag:knowing.net,2007-05-30:/posts/2007/05/how-much-of-the-industry-will-go-parallel/<p>Michael Seuss ponders one of my favorite questions: <strong><a href="http://www.thinkingparallel.com/cgi-sys/suspendedpage.cgi">How much of the software industry will have to deal with the concurrent computing [opportunity]</a>?</strong> He hits the vital points:</p>
<ul>
<li>2, 4, and maybe 8 cores may be usefully exploited by system services (anti-virus, disk indexing and searching, etc.), but when you …</li></ul><p>Michael Seuss ponders one of my favorite questions: <strong><a href="http://www.thinkingparallel.com/cgi-sys/suspendedpage.cgi">How much of the software industry will have to deal with the concurrent computing [opportunity]</a>?</strong> He hits the vital points:</p>
<ul>
<li>2, 4, and maybe 8 cores may be usefully exploited by system services (anti-virus, disk indexing and searching, etc.), but when you get beyond that, any program for which performance is any kind of issue simply cannot ignore the capacity (this is why I distinguish between our current "multicore" transitional phase and the coming "manycore" era).</li>
<li>Media programming (games, A/V processing) have an essentially infinite appetite for processing</li>
<li>The manycore era provides an opportunity for new types of functionality. He mentions concurrent semantic analysis of your input, both typing and spoken, and the accumulation of context documents. For instance, as I type this, my computer might be gathering all my blog posts, OneNote notes, source code, etc. relating to concurrency. (And then wouldn't it be cool if it offered them for my perusal, maybe with, I dunno', a goggle-eyed paperclip?).</li>
</ul>
<p>But I think the \$64 question is whether such services will be provided in a service-oriented, cross-application manner, or whether it will be the case that we find broad opportunities for them <em>within</em> applications. For instance, mail programs and word processors have had search functionality for a long time, but if you were designing such a program from scratch, you would probably be better advised to say "Hey, I won't implement a complete search subsystem, I'll just make sure I can be indexed by Windows and Google Desktop Search. If I want to add value, I'll layer on top of those systems if at all possible."</p>
<p>Conversely, if you had some powerful new value proposition (semantic analysis, task recognition, visual input), wouldn't it be <em>vastly</em> better for you and your customers if you could provide it to applications other than those that you happen to have written? In other words, <em>of course</em> value in the manycore era will derive from increased parallelism but <em>maybe</em> that parallelism will still be very coarse-grained. <em>Maybe</em> software organizations will face a choice: "<em>Either</em> develop client-oriented value with the best practices of "traditional" non-parallel development <em>or</em> develop broader, system-oriented value using whatever is the emerging set of best practices for system-level parallel development." <em>Maybe</em> that choice will become increasingly orthogonal.</p>
<p>Now, the final part of the thought experiment is this: <em>if</em> that scenario is reasonable, what kind of platform services / APIs would one desire?</p>Microsoft Unveils "Surface" Multi-Touch Table Interface2007-05-30T06:31:00-10:002007-05-30T06:31:00-10:00larrytag:knowing.net,2007-05-30:/posts/2007/05/microsoft-unveils-quotsurfacequot-multi-touch-table-interface/<p>Bill Gates has gone public on Microsoft's commercializing a <a href="https://www.msn.com/">multi-touch table interface called "Surface"</a>. This has been shown before, but only as one of the (many) prototypes that you see these brief glimpses of and which often are not commercialized (I think "Surface" and the device-pairing stuff was shown at …</p><p>Bill Gates has gone public on Microsoft's commercializing a <a href="https://www.msn.com/">multi-touch table interface called "Surface"</a>. This has been shown before, but only as one of the (many) prototypes that you see these brief glimpses of and which often are not commercialized (I think "Surface" and the device-pairing stuff was shown at some demo relating to digital identity).</p>
<p>I doubt that the first few generations of Surface will be what I want, but I bet in about a decade professionals will be able to work at a desk with a blotter-sized 133-DPI display (as well as vertically-oriented screens). Sweet.</p>Comment:Code > 1:3 ?2007-05-30T06:21:00-10:002007-05-30T06:21:00-10:00larrytag:knowing.net,2007-05-30:/posts/2007/05/commentcode-gt-13/<p>Andrew Binstock adds to his pithy series on quality ratios (<a href="http://binstock.blogspot.com/2007/04/how-many-unit-tests-per-method-see.html">unit tests per method</a>, <a href="http://binstock.blogspot.com/2007/03/how-many-unit-tests-are-enough.html">unit test coverage</a>) with a post saying that <a href="http://binstock.blogspot.com/2007/05/comments-how-many-should-you-have.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">high-quality code is likely to have around 35% and perhaps even more than 45% of lines devoted to comments</a>.</p>
<p>He also mentions two "commenting" practices that drive me …</p><p>Andrew Binstock adds to his pithy series on quality ratios (<a href="http://binstock.blogspot.com/2007/04/how-many-unit-tests-per-method-see.html">unit tests per method</a>, <a href="http://binstock.blogspot.com/2007/03/how-many-unit-tests-are-enough.html">unit test coverage</a>) with a post saying that <a href="http://binstock.blogspot.com/2007/05/comments-how-many-should-you-have.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">high-quality code is likely to have around 35% and perhaps even more than 45% of lines devoted to comments</a>.</p>
<p>He also mentions two "commenting" practices that drive me batty -- the boilerplate license agreement header when a URI would do and commented-out source, which is like handing in your homework with crossouts all over the page. (Is a metaphor invoking hand-written homework hopelessly anachronistic?)</p>
<p>I'm somewhat contrarian on the common wisdom regarding comments, an attitude that developed from writing so much code for print publication. Source code was traditionally very difficult to format and inflexible, so when writing code for publication, you use very few comments, explicit-as-possible names, and straightforward-as-possible control structures. Of course you explain the "why" in the article, but you want the "how" to be evident. If a comment is needed <em>within</em> a function written for publication, that's suspicious. But the thing is, that's not a bad attitude to take in the real world! Documentation comments? Absolutely vital. But <em>within</em> a function, I'm skeptical.</p>
<p>The most confusing thing <em>within</em> functions is the <em>combination</em> of state relating to flow-control (if ... else ... if ... case requires a comment saying "Okay, we've figured out that the situation is ... " comment) and the invocation of the consequences ("... So therefore, we know that the correct parameters are ... and we execute the call ... and we store the return in this variable relating to flow-control"). But the solution is not comments, it's refactoring. Create a function that determines the flow-control (or, even better, use a proper object structure with virtual function calls, the result of which is that much flow-control is implicit), and another function that incorporates the call-and-return logic.</p>
<p>Having said that, I don't doubt that the occasional within-function comment can do a world of good, especially in those situations when, due to library constraints, the names of the functions being invoked aren't clearly related to the immediate programming goals.</p>The Missed Opportunity of a PDC Without a Grand Unveiling2007-05-26T15:18:00-10:002007-05-26T15:18:00-10:00larrytag:knowing.net,2007-05-26:/posts/2007/05/the-missed-opportunity-of-a-pdc-without-a-grand-unveiling/<p>"Professional Developer's Conference." "[<a href="https://msdn.microsoft.com/en-us/">T]he definitive developer event focused on the future of the Microsoft platform."</a> That sounds awesome, but is unfortunately paired with the clause "we try to align it to be in front of major platform milestones."</p>
<p>Given a major technology announcement, it's logical that the PDC to …</p><p>"Professional Developer's Conference." "[<a href="https://msdn.microsoft.com/en-us/">T]he definitive developer event focused on the future of the Microsoft platform."</a> That sounds awesome, but is unfortunately paired with the clause "we try to align it to be in front of major platform milestones."</p>
<p>Given a major technology announcement, it's logical that the PDC to, uh, "align in front." A grand unveiling, a couple breathtaking demos, and then getting up to speed as quickly as possible. No doubt.</p>
<p>However, wouldn't it be frigging <strong>grand</strong> if Microsoft said:</p>
<blockquote>
<p>Welcome to PDC 2007. This conference is focused on conceiving, implementing, and delivering value in the form of software services on the Microsoft platform <em>[Ed: Not 'the Windows platform'? Interesting</em>.] You will not see any previously-secret technologies. You may very well learn APIs that are new to you, but they will not be new. Microsoft's very best software developers and managers are going to talk about how to create great applications on and for the Windows platform [<em>Ed: You mean 'the Microsoft platform'?]</em> , using the tools that Microsoft has promised would bring unprecedented levels of ease and power.</p>
<ul>
<li>We're going to expain how to architect systems that use MS technologies synergistically</li>
<li>We're going to break down the processes used by successful teams using MS tools</li>
<li>We're going to talk about code and performance, and we're not just going to talk best-case scenarios</li>
</ul>
</blockquote>
<p>Wouldn't you look forward to that conference?</p>
<p>(<em>Yeah</em>, it's the pre-sclerotic <em>Software Development Conference</em> but with a Microsoft-specific spin. I don't have any problem with the reality that PDC is a marketing effort.)</p>Two Cups of Coffee, A Coke, and A Plate of Broiled Octopus: Everything I Ate Today2007-05-23T15:37:00-10:002007-05-23T15:37:00-10:00larrytag:knowing.net,2007-05-23:/posts/2007/05/two-cups-of-coffee-a-coke-and-a-plate-of-broiled-octopus-everything-i-ate-today/<p>Oh, and there was a side of white rice with the octopus.</p>Pandora brings internet radio to Sprint cellphones2007-05-23T14:59:00-10:002007-05-23T14:59:00-10:00larrytag:knowing.net,2007-05-23:/posts/2007/05/pandora-brings-internet-radio-to-sprint-cellphones/<p>\$3 a month for Pandora? Geez, I might have to buy a cellphone just to get it.</p>
<blockquote>
<p><a href="http://www.pandora.com/everywhere/on-the-go?from_home=1"></a>Web broadcaster Pandora has announced <a href="http://www.pandora.com/everywhere/on-the-go?from_home=1">Pandora on the Go</a>, a mobile client that works with a handful of Sprint cellphones.<br>
There's a 30 day free trial for Sprint Power vision customers. After the …</p></blockquote><p>\$3 a month for Pandora? Geez, I might have to buy a cellphone just to get it.</p>
<blockquote>
<p><a href="http://www.pandora.com/everywhere/on-the-go?from_home=1"></a>Web broadcaster Pandora has announced <a href="http://www.pandora.com/everywhere/on-the-go?from_home=1">Pandora on the Go</a>, a mobile client that works with a handful of Sprint cellphones.<br>
There's a 30 day free trial for Sprint Power vision customers. After the trial period, you'll have to shell out \$2.99 a month. </p>
<h6></h6>
<p><img alt="" height="1" src="http://feeds.downloadsquad.com/~r/weblogsinc/downloadsquad/~4/119144424" width="1"></p>
</blockquote>
<p>Source: <a href="http://feeds.downloadsquad.com/%7er/weblogsinc/downloadsquad/%7e3/119144424/">Pandora brings internet radio to Sprint cellphones</a><br>
Originally published on Wed, 23 May 2007 20:00:00 GMT by Brad Linder</p>Why Ruby's The Mansion of Bliss2007-05-23T14:45:00-10:002007-05-23T14:45:00-10:00larrytag:knowing.net,2007-05-23:/posts/2007/05/why-rubys-the-mansion-of-bliss/<p>Scott Hanselman weighed in on the Ruby buzz, saying that <a href="https://www.hanselman.com/blog/ProgrammerIntentOrWhatYoureNotGettingAboutRubyAndWhyItsTheTits.aspx">no language is all things to all people at all times</a>. I agree, but think that there are a couple things about Ruby that don't require us to get into language design philosophies. Let me quickly state that these things …</p><p>Scott Hanselman weighed in on the Ruby buzz, saying that <a href="https://www.hanselman.com/blog/ProgrammerIntentOrWhatYoureNotGettingAboutRubyAndWhyItsTheTits.aspx">no language is all things to all people at all times</a>. I agree, but think that there are a couple things about Ruby that don't require us to get into language design philosophies. Let me quickly state that these things are not unique to Ruby, but may take the appearance of The Mansion of Bliss to those with backgrounds in more statically-defined languages. ("The Mansion of Bliss" was, I learned on my flight to Panama last night, a phrase used in the early 19th century to mean "tits.")</p>
<p>The first thing that I like about Ruby is that it has an interactive console / REPL loop. For instance, let's say you're trying to divvy up a bunch of data into bins, but don't know the exact cut you want. With Ruby, you can instantiate a database connection, retrieve this table's data, that table's data, apply this filter, that filter, etc., interactively. Of course you can do this with a static language, but every time you make a step of progress, you have to recompile, start the system, retrieve the data, stitch up the joins, and <em>then</em> check to see if your new filter moves you a step forward (which is the much-to-be-admired test-driven way, but sometimes keeping that line green takes a lot of time off the clock). Or, I imagine, you could do it in an interactive SQL Explorer, if your SQL is better than mine.</p>
<p>The other thing I quite like about Ruby is that while everything's an object, there's an implicit receiver. So if you have:</p>
<p>puts 'Hello, world!'</p>
<p>alone in a file or alone in the console, you can do without the likes of:</p>
<p>public static void main(String[] args) { ... }</p>
<p>and, y'know, that's just nice. Object-orientation is the Mansion of Bliss, to be sure, but sometimes there's something to be said for a block of imperative code.</p>
<p>Further, after 10 years trying to remember what combination of decorators with which to read a file, there's something awfully blissful about File.Open("foo.txt"), much less File.open(<a href="http://www.knowing.net">http://www.knowing.net</a>), which you do for the price of require 'open-uri'</p>
<p>It does make me pine, though, for two other things that it <em>could</em> have:</p>
<p>What if every line of code you ever wrote were available, perhaps organized in some form of browser?</p>
<p>What if as you worked in that interactive shell, you could just shut down the system and return to it later, having the exact objects, in all their complex state, restored to their former glory?</p>
<p>I suppose that such capabilities are impossible or someone would <a href="https://en.wikipedia.org/wiki/Smalltalk">surely have implemented them by now</a>.</p>SubSonic: .NET-based Database Access Layer akin to Ruby's ActiveRecord2007-05-22T08:27:00-10:002007-05-22T08:27:00-10:00larrytag:knowing.net,2007-05-22:/posts/2007/05/subsonic-net-based-database-access-layer-akin-to-rubys-activerecord/<p>Via <a href="https://tirania.org/blog/archive/2007/May-22-1.html">Rob Connery Interviewed</a> by Miguel de Icaza, I took a quick look at <a href="https://archive.codeplex.com/?p=actionpack">SubSonic</a>, which appears to be a good solution in the ASP.NET world for very rapidly generating Create-Retrieve-Update-Delete functionality pages that honor database foreign keys.</p>
<p>One of the dazzlers in the Ruby world is a library …</p><p>Via <a href="https://tirania.org/blog/archive/2007/May-22-1.html">Rob Connery Interviewed</a> by Miguel de Icaza, I took a quick look at <a href="https://archive.codeplex.com/?p=actionpack">SubSonic</a>, which appears to be a good solution in the ASP.NET world for very rapidly generating Create-Retrieve-Update-Delete functionality pages that honor database foreign keys.</p>
<p>One of the dazzlers in the Ruby world is a library called ActiveRecord, which powers similar functionality within Ruby on Rails. If you're lucky enough to be starting with a new database, you can generate "scaffolding" to edit your tables in a matter of quarter-hours. (As Steve Jones says in <a href="http://service-architecture.blogspot.com/2007/05/crud-is-crap.html">CRUD is Crap</a>, that such functionality is considered dazzling in the year 2007 is an indictment of our toolsets, but nonetheless.)</p>
<p>Any client-facing application almost instantly moves beyond scaffolding, but I've been reminded recently of the need for rapid data-editing / cleaning in any large application but <em>especially</em> in SOAs, with data continuously flowing into the system boundaries. Garbage-in, garbage-out is a big problem in SOAs.</p>
<p>Two downsides of ActiveRecord are that:</p>
<ul>
<li>Foreign key relationships must be manually inserted, and</li>
<li>It's naming conventions can be tough to overcome when using a legacy DB</li>
</ul>
<p>These seemingly minor issues can be significant when you're dealing with an enterprise-sized database with several hundred tables. Whether SubSonice addresses these issues, I don't know, but I look forward to adding it to my arsenal.</p>Electric Karmann Ghia2007-05-18T13:08:00-10:002007-05-18T13:08:00-10:00larrytag:knowing.net,2007-05-18:/posts/2007/05/electric-karmann-ghia/<p>My friend Doug has apparently gotten his converted Karmann Ghia onto the road...</p>Microsoft's Popfly: Getting Their Ducks In A Row2007-05-18T09:52:00-10:002007-05-18T09:52:00-10:00larrytag:knowing.net,2007-05-18:/posts/2007/05/microsofts-popfly-getting-their-ducks-in-a-row/<p>Popfly is the name (and URL) of Microsoft's new <a href="http://www.popfly.com/">non-professional developer community</a>, a Windows Live site whose flashiest feature is a Silverlight-based "mashup editor" that facilitates pipes-and-filters development. Before reviewing the gratuitous 3-D spinning cubes, though, pay attention to the context:</p>
<ul>
<li>Visual Studio Express has had 14,000,000 downloads …</li></ul><p>Popfly is the name (and URL) of Microsoft's new <a href="http://www.popfly.com/">non-professional developer community</a>, a Windows Live site whose flashiest feature is a Silverlight-based "mashup editor" that facilitates pipes-and-filters development. Before reviewing the gratuitous 3-D spinning cubes, though, pay attention to the context:</p>
<ul>
<li>Visual Studio Express has had 14,000,000 downloads (source: Dan Fernandez personal communication). Of course that translates to something far less than 14M users, but it ain't hay;</li>
<li>The Popfly mashups run inside Silverlight, so anyone wishing to view their friends' / child's / grandkid's project is going to have to install the Silverlight runtime; </li>
<li>Silverlight is going to rapidly evolve to incorporate the Dynamic Language Runtime. Silverlight + CoreCLR + DLR == Microsoft's platform play for dynamic languages, which have crossed the chasm and, whatever their other strengths or weaknesses, are easier to learn than explicitly typed or Pascal-like highly-structured languages</li>
</ul>
<p>Microsoft is on the verge of <strong>restoring the bridge between power users and programmers</strong>.</p>
<p>The collapse of that bridge -- the disappearance of macro-based automation during the DOS-Windows transition and the removal of <a href="https://en.wikipedia.org/wiki/HyperCard">Hypercard</a> from the Mac -- was the greatest setback the <em>professional</em> programming community has ever suffered (#insert COBOL or C++ joke here#).</p>
<p>Pipes-and-filters mashups are the UNIX shell-commands of the Web. The next step is automation -- after you start figuring out how to pipe commands, you start writing shell scripts, at which point <strong>you're programming the platform at a higher abstraction level.</strong> That's a crucial point: we're not talking about flow-control and manipulation within the pipes-and-filter components, but at the platform level. That's why it's <em>huge</em> that the Popfly mashups are executed on the client (within Silverlight) and not on the CPUs of the host. <strong>Mainframes->Minis->PCs: empowered users require and embrace personal resources</strong>. This is the salient distinction between Popfly and Yahoo Pipes (Popfly also works with more types of data, but Yahoo could address that). It's not <em>just</em> that there's a resource-consumption scaling problem that might be solvable by the host absorbing hardware costs, it's that there's a Big O scaling problem: to the extent that mashups are used to program the Web, as soon as people start looping/recursing, you're talking about non-linear increases in resource consumption.</p>
<p>To be clear, I don't think Popfly is the Bourne Shell of the Web -- that hasn't been written yet. But I think Popfly's the | and Silverlight's the \$</p>IronPython, IronRuby Discussion with Jim Hugunin and Jon Lam2007-05-15T12:02:00-10:002007-05-15T12:02:00-10:00larrytag:knowing.net,2007-05-15:/posts/2007/05/ironpython-ironruby-discussion-with-jim-hugunin-and-jon-lam/<p>I'm dying because I've just had a long talk with two of Microsoft's heavy hitters on the Dynamic Languages Runtime (DLR) team and have much to discuss, yet I am in a frenzy preparing for a business trip and cannot yet take the time to do the discussion any kind …</p><p>I'm dying because I've just had a long talk with two of Microsoft's heavy hitters on the Dynamic Languages Runtime (DLR) team and have much to discuss, yet I am in a frenzy preparing for a business trip and cannot yet take the time to do the discussion any kind of justice.</p>
<p>The single-most important quote, I think, was the statement that "no one will take [our implementations] seriously until we can run-- / We aren't done until we can run--" [\<a href="http://www.djangoproject.com/"" target="_blank" rel="noopener noreferrer">Django | <a href="https://rubyonrails.org/">Rails</a>]. That was contrasted with important libraries that were heavily dependent themselves upon C-based libraries (<a href="http://www.zope.org/en/latest/">Zope</a>, in particular). It was also contrasted with libraries that rely on unusual language quirks or implementation details; the touchpoint on that was Ruby's ... shoot, I thought Lam said "objectspaces" but I don't see that in the standard library ... maybe he said "ObjectSpaces-like ability to traverse the entire in-memory object graph" (Anyone know what lib that would be?) ... Anyway, the point was that this was an example of something that would be very difficult to implement within the constraints of the CLR.</p>
<p>I'll update this entry when I can report in more detail...</p>Fuzzy Bits2007-05-08T12:26:00-10:002007-05-08T12:26:00-10:00larrytag:knowing.net,2007-05-08:/posts/2007/05/fuzzy-bits/<blockquote>
<p>Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. (Stan Kelly-Bootle)</p>
</blockquote>
<p>That quote, which I saw by way of <a href="https://blog.codinghorror.com/">Jeff Atwood's latest</a>, reminds me of what may be my favorite Stan Kelly-Bootle story. Stan worked on the <a href="https://en.wikipedia.org/wiki/EDSAC">EDSAC</a> which …</p><blockquote>
<p>Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. (Stan Kelly-Bootle)</p>
</blockquote>
<p>That quote, which I saw by way of <a href="https://blog.codinghorror.com/">Jeff Atwood's latest</a>, reminds me of what may be my favorite Stan Kelly-Bootle story. Stan worked on the <a href="https://en.wikipedia.org/wiki/EDSAC">EDSAC</a> which stored memory using what were called "mercury delay lines" -- long tubes of mercury, down which they would send an audio pulse, which would echo off the far end and return some brief amount of time later (thus useful as a rapidly-changeable datastore). Naturally, the resulting signal was pretty noisy, even in the best situations. So Stan and company had a cardboard ruler that they'd hold up to the oscilloscope -- "Mmm... that's a 1 ... 0 ... call it a 1 ... " I always suspected that working with mercury might not have been entirely coincidental to Stan's legendary wit.</p>
<p>I think my even-more favorite Stan Kelly-Bootle is from his 70th birthday party. He was in the corner of his garden, drinking Grey Goose from the bottle with a beautiful girl, 45-years his junior, on his lap and two more at either shoulder. Two fellows in tweed jackets straight from central casting were hunched at another table, single-handedly generating the nicotine and Guinness atmosphere of an English pub. "'Ows 'e do it?" Lamented one. The other leaned in, tapping the table significantly, "'E's got what yer call ... charisma." The other nods and despondently says "Charisma." He takes a long drink from his pint glass and summarizes what separates we mortals from the Stans of the world: "Ya' can't fucking fake charisma."</p>I'll Stand By You2007-05-06T11:20:00-10:002007-05-06T11:20:00-10:00larrytag:knowing.net,2007-05-06:/posts/2007/05/ill-stand-by-you/<p>It caught my eye that "I'll Stand By You" by Carrie Underwood is the #2 single on iTunes. I clicked on the tune to hear the snippet (I won't buy copy-protected music ever again, but I do like browsing...). Not to be harsh to Carrie Underwood, who has a lovely …</p><p>It caught my eye that "I'll Stand By You" by Carrie Underwood is the #2 single on iTunes. I clicked on the tune to hear the snippet (I won't buy copy-protected music ever again, but I do like browsing...). Not to be harsh to Carrie Underwood, who has a lovely voice, but c'mon: covering Chrissie Hynde?</p>
<p><em>... at which point, Larry vapor-locks trying not to make a cheap joke about his adolescence...</em></p>
<p>... the larger point being that Chrissie Hynde is one of the great female singers, probably the best of the 80s. Admittedly, my list of top female vocalists is not exactly the <em>American Idol</em> pantheon (when <em>are</em> they going to give Patti Smith her due?) but no one can out-plaintive-yearn Chrissie Hynde. It's like trying to out-ring-a-ding-ding Sinatra.</p>
<p>(As I wrote those last sentences, in perfect rebuke, Johnny Cash shuffled onto my playlist. OK: I would have paid <em>huge</em> money for Johnny Cash doing <em>Hymn to Her.</em>)</p>Matching Donations To Team Hanselman Fight Diabetes2007-05-05T10:57:00-10:002007-05-05T10:57:00-10:00larrytag:knowing.net,2007-05-05:/posts/2007/05/matching-donations-to-team-hanselman-fight-diabetes/<p>There are lots of worthy causes out there to donate to, but it's always nice to have a personal connection. Scott Hanselman, whose blog and podcast are must-reading/hearing, is <a href="https://www.hanselman.com/blog/TeamHanselmanAndDiabetesWalk2010.aspx">fighting diabetes</a>.</p>
<p>I'll be matching donations to Team Hanselman up to ... see now, never having done this before, I don't …</p><p>There are lots of worthy causes out there to donate to, but it's always nice to have a personal connection. Scott Hanselman, whose blog and podcast are must-reading/hearing, is <a href="https://www.hanselman.com/blog/TeamHanselmanAndDiabetesWalk2010.aspx">fighting diabetes</a>.</p>
<p>I'll be matching donations to Team Hanselman up to ... see now, never having done this before, I don't know if I'm supposed to say the amount or keep it private or what ... But anyway, <a href="https://www.hanselman.com/blog/TeamHanselmanAndDiabetesWalk2010.aspx">contribute to Team Hanselman</a> between May 9 and May 11, mention me or this blog and make me pay...</p>
<p>\<a href="http://www.hanselman.com/fightdiabetes"" atomicselection="true"></p>Creating DOS/Windows VM From MSDN Downloads?2007-05-05T09:35:00-10:002007-05-05T09:35:00-10:00larrytag:knowing.net,2007-05-05:/posts/2007/05/creating-doswindows-vm-from-msdn-downloads/<p>My goal is to create a VM running Windows 3.11 (VMWare by preference, but Virtual PC if it's easier).</p>
<p>One can download <strong>EN_MSDOS60.EXE</strong> and <strong>EN_WIN311.EXE</strong> from MSDN, but these files seem to simply be compressions of the files in the relevant distributions. Most challengingly, <strong>EN …</strong></p><p>My goal is to create a VM running Windows 3.11 (VMWare by preference, but Virtual PC if it's easier).</p>
<p>One can download <strong>EN_MSDOS60.EXE</strong> and <strong>EN_WIN311.EXE</strong> from MSDN, but these files seem to simply be compressions of the files in the relevant distributions. Most challengingly, <strong>EN_MSDOS60.EXE</strong> uncompresses to \~6MB. I can make a bootable floppy (now that I just went out and bought a USB floppy drive), but I can't put all of the files within the DOS distro on a single floppy. Searching for variations of "Install DOS" they all talk of the DOS setup disks. If I could get <strong>the file list for the DOS setup disks</strong>, I imagine that I could recreate them manually. Does anyone have that?</p>
<p>Or alternately, did I miss a downloadable, bootable CD-ROM image?</p>
<p>Or alternately, am I missing another way to accomplish my task?</p>
<p><strong>Update:</strong> Looks to be a little harder than getting the right files on the floppy. My command prompts for important functions like fdisk and sys always result in "Incorrect DOS version"</p>Sun's Fortress Language : Looks Very Well Designed2007-05-04T11:07:00-10:002007-05-04T11:07:00-10:00larrytag:knowing.net,2007-05-04:/posts/2007/05/suns-fortress-language-looks-very-well-designed/<p>This is a rather daunting (124 slide) PDF on Sun's "Fortress" programming language, designed in large part by \<a href="http://en.wikipedia.org/wiki/Guy_L._Steele%2c_Jr."" target="_blank" rel="noopener noreferrer">Guy Steele, which is designed for scientific / mathematical programming. It looks <em>really</em> good -- lots of …</p><p>This is a rather daunting (124 slide) PDF on Sun's "Fortress" programming language, designed in large part by \<a href="http://en.wikipedia.org/wiki/Guy_L._Steele%2c_Jr."" target="_blank" rel="noopener noreferrer">Guy Steele, which is designed for scientific / mathematical programming. It looks <em>really</em> good -- lots of good decisions (take advantage of Unicode, traits and objects, implict and explicit parallelism... well, actually, making parallelism the default for loops is a mistake...). I do sometimes second-guess myself about whether concurrency is going to be a mainstream concern or whether taking advantage of 90% of your computer's power (once you get to more than 10 cores) is going to be a niche problem. My gut tells me that mainstream programmers cannot ignore <em>that much</em> of a discrepency in performance; performance is always an issue and, even though the majority of performance problems are not CPU-bound, I just feel that no one will want to say "Yeah, it's single-threaded" when the pointy-haired boss is looking for someone to blame for performance woes on a 16-core machine.</p>
<p>Found \<a href="http://feeds.feedburner.com/%7er/JamesGovernorsMonkchips/%7e3/113990665/"" target="_blank" rel="noopener noreferrer">by way of James Governor</p>Thread Creation Overhead Can Trip Up Pros2007-05-04T07:07:00-10:002007-05-04T07:07:00-10:00larrytag:knowing.net,2007-05-04:/posts/2007/05/thread-creation-overhead-can-trip-up-pros/<p>Michael Seuss has a good blog piece on \<a href="http://www.thinkingparallel.com/2007/05/02/parallel-programming-fun-with-loop-carried-dependencies/"" target="_blank" rel="noopener noreferrer">parallelizing code that contains loop-carried dependenciess, which is to say, code such as the following, where the calculation in one pass is dependent on a previous pass' …</p><p>Michael Seuss has a good blog piece on \<a href="http://www.thinkingparallel.com/2007/05/02/parallel-programming-fun-with-loop-carried-dependencies/"" target="_blank" rel="noopener noreferrer">parallelizing code that contains loop-carried dependenciess, which is to say, code such as the following, where the calculation in one pass is dependent on a previous pass' calculation. The moral of the story, though, is that even when run to the point where the <strong>double</strong>s start to overflow (i.e., at the upper limits of the code's capability), the <strong>overhead of creating threads turns out to be an order of magnitude slower</strong> than the non-parallel version! (And this in code submitted by boffins on the OpenMP mailing list.)</p>
<p>This is a great example of why neither of the simplistic approaches to parallelization ("everything's a future" or "let the programmer decide") will ultimately prevail and how <em>something</em> akin to run-time optimization (a la HotSpot) will have to be used.</p>
<blockquote>
<p><a href="http://www.thinkingparallel.com/cgi-sys/suspendedpage.cgi">PLAIN TEXT</a></p>
<p>C:</p>
<ol>
<li>
<p>const double up = 1.1 ;</p>
</li>
<li>
<p>double Sn=1000.0;</p>
</li>
<li>
<p>double opt[N+1];</p>
</li>
<li>
<p>int n;</p>
</li>
<li>
<p>for (n=0; n\<=N; ++n) {</p>
</li>
<li>
<p>opt[n] = Sn;</p>
</li>
<li>
<p>Sn *= up;</p>
</li>
<li>
<p>}</p>
</li>
</ol>
</blockquote>Hidden Mysteries of the Bayesian Conspiracy2007-05-03T13:51:00-10:002007-05-03T13:51:00-10:00larrytag:knowing.net,2007-05-03:/posts/2007/05/hidden-mysteries-of-the-bayesian-conspiracy/<p><a href="https://blog.codinghorror.com/an-initiate-of-the-bayesian-conspiracy/">Jeff Atwood</a> recommends that everyone read an Intuitive Explanation of Bayesian Reasoning in order to become an initiate in the Bayesian conspiracy. What he doesn't tell you is that Bayes' <em>theorem</em> is only the outermost ring of the Bayesian Conspiracy. Once you've been initiated and spent the necessary apprenticeship bringing …</p><p><a href="https://blog.codinghorror.com/an-initiate-of-the-bayesian-conspiracy/">Jeff Atwood</a> recommends that everyone read an Intuitive Explanation of Bayesian Reasoning in order to become an initiate in the Bayesian conspiracy. What he doesn't tell you is that Bayes' <em>theorem</em> is only the outermost ring of the Bayesian Conspiracy. Once you've been initiated and spent the necessary apprenticeship bringing beer to the poobahs, you will begin to hear of something called "Bayesian Belief Networks". They're what all the Illuminati use. Is Jeff <em>ignorant</em> of Bayesian networks or is he -- perhaps -- <em>all too knowledgeable</em> and withholding information? If so, for what nefarious purpose?</p>Editor Harry McCracken (PC World) Resigns -- Apparently Over Ad Pressure2007-05-03T13:35:00-10:002007-05-03T13:35:00-10:00larrytag:knowing.net,2007-05-03:/posts/2007/05/editor-harry-mccracken-pc-world-resigns-apparently-over-ad-pressure/<p>According to this <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1152654195004816817228326513451774132122%26anid%3D1152654195004816817228326513451774132122&u=1152654195004816817228326513451774132122&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553657173219&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1152654195004816817228326513451774132122%26anid%3D1152654195004816817228326513451774132122&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">CNet</a> article, Harry McCracken of <em>PC World</em> resigned when pressured by SVP Colin Crawford to tone down stories critical of advertisers. I have <em>no idea</em> of the inside scoop on this, and the CNet article is full of anonymous sources, but sadly, I can believe it.</p>
<p>I …</p><p>According to this <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1152654195004816817228326513451774132122%26anid%3D1152654195004816817228326513451774132122&u=1152654195004816817228326513451774132122&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553657173219&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1152654195004816817228326513451774132122%26anid%3D1152654195004816817228326513451774132122&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">CNet</a> article, Harry McCracken of <em>PC World</em> resigned when pressured by SVP Colin Crawford to tone down stories critical of advertisers. I have <em>no idea</em> of the inside scoop on this, and the CNet article is full of anonymous sources, but sadly, I can believe it.</p>
<p>I was never inappropriately pressured from the business side of the magazines, but I have learned that such autonomy is more unusual than not and I strongly suspect the Web has made things worse (everything is harder when journalism has been devalued, both literally and metaphorically).</p>
<p>If the story's accurate, McCracken deserves a big tip o' the hat.</p>Rails Forms With Auto-Hyperlink On FKs2007-05-03T10:12:00-10:002007-05-03T10:12:00-10:00larrytag:knowing.net,2007-05-03:/posts/2007/05/rails-forms-with-auto-hyperlink-on-fks/<p>Because I use <strong>primary_key_prefix_type = :table_name</strong> this did the trick for me. Basically, I just set up a hash mapping primary key column names (<strong>"InvoiceID"</strong> and the like) to the name of the appropriate controller (<strong>"invoice_admin"</strong>). When outputting a column, if the name of the column …</p><p>Because I use <strong>primary_key_prefix_type = :table_name</strong> this did the trick for me. Basically, I just set up a hash mapping primary key column names (<strong>"InvoiceID"</strong> and the like) to the name of the appropriate controller (<strong>"invoice_admin"</strong>). When outputting a column, if the name of the column is contained in that hash, output a link. All I had to do was write a script to generate the hash and a template for the show.rhtml and Bob was my uncle...</p>
<div class="highlight"><pre><span></span><code>#<span class="w"> </span>Methods<span class="w"> </span>added<span class="w"> </span>to<span class="w"> </span>this<span class="w"> </span>helper<span class="w"> </span>will<span class="w"> </span>be<span class="w"> </span>available<span class="w"> </span>to<span class="w"> </span>all<span class="w"> </span>templates<span class="w"> </span>in<span class="w"> </span>the<span class="w"> </span>application.
module<span class="w"> </span>ApplicationHelper
<span class="w"> </span>#lazy<span class="w"> </span>initializer<span class="w"> </span>for<span class="w"> </span>mapping<span class="w"> </span>between<span class="w"> </span>the<span class="w"> </span>names<span class="w"> </span>of<span class="w"> </span>FK<span class="w"> </span>fields<span class="w"> </span>and<span class="w"> </span>the<span class="w"> </span>appropriate<span class="w"> </span>controller
<span class="w"> </span>#:return:<span class="w"> </span>=><span class="w"> </span>nil
<span class="w"> </span>def<span class="w"> </span>initialize_identity_columns
<span class="w"> </span>@identityColumns<span class="w"> </span>=<span class="w"> </span>{
<span class="w"> </span>'InvoiceID'<span class="w"> </span>=><span class="w"> </span>'invoice_admin'
<span class="w"> </span>#<span class="w"> </span>...<span class="w"> </span>etc<span class="w"> </span>...
<span class="w"> </span>}
<span class="w"> </span>end
<span class="w"> </span>#called<span class="w"> </span>within<span class="w"> </span>show.rhtml<span class="w"> </span>(probably)<span class="w"> </span>ala
<span class="w"> </span>#<span class="w"> </span><span class="cp"><%</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">column</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="no">LineItem</span><span class="o">.</span><span class="n">content_columns</span><span class="w"> </span><span class="cp">%></span>
<span class="w"> </span>#<span class="w"> </span><span class="cp"><%=</span><span class="w"> </span><span class="n">show_column_with_auto_hyperlink</span><span class="p">(</span><span class="vi">@line_item</span><span class="p">,</span><span class="w"> </span><span class="n">column</span><span class="p">)</span><span class="w"> </span><span class="cp">%></span>
<span class="w"> </span>#<span class="cp"><%</span><span class="w"> </span><span class="k">end</span><span class="w"> </span><span class="cp">%></span>
<span class="w"> </span>#:return:<span class="w"> </span>=><span class="w"> </span>String
<span class="w"> </span>#:arg:<span class="w"> </span>currentObj<span class="w"> </span>=><span class="w"> </span>ActiveRecord::Base
<span class="w"> </span>#:arg:<span class="w"> </span>column<span class="w"> </span>=><span class="w"> </span>ActiveRecord::ConnectionAdapters::Column
<span class="w"> </span>def<span class="w"> </span>show_column_with_auto_hyperlink(currentObj,<span class="w"> </span>column)
<span class="w"> </span>if<span class="w"> </span>@identityColumns<span class="w"> </span>==<span class="w"> </span>nil
<span class="w"> </span>initialize_identity_columns()
<span class="w"> </span>end
<span class="w"> </span>html<span class="w"> </span>=<span class="w"> </span>"<span class="nt"><p><b></span>#{column.human_name}:<span class="nt"></b></span><span class="w"> </span>#{currentObj.send(column.name)}<span class="ni">&nbsp;</span>"
<span class="w"> </span>optionalLink<span class="w"> </span>=<span class="w"> </span>nil
<span class="w"> </span>if<span class="w"> </span>@identityColumns[column.name]<span class="w"> </span>!=<span class="w"> </span>nil
<span class="w"> </span>html<span class="w"> </span>+=<span class="w"> </span>link_to("Show",<span class="w"> </span>{<span class="w"> </span>:controller<span class="w"> </span>=><span class="w"> </span>@identityColumns[column.name],<span class="w"> </span>:action<span class="w"> </span>=><span class="w"> </span>"show",<span class="w"> </span>:id<span class="w"> </span>=><span class="w"> </span>currentObj.send(column.name)<span class="w"> </span>})
<span class="w"> </span>end
<span class="w"> </span>html<span class="w"> </span>+=<span class="w"> </span>"<span class="nt"></p></span>"
<span class="w"> </span>return<span class="w"> </span>html
<span class="w"> </span>end
end
</code></pre></div>Auto-Database Browser With FKs as Hyperlinks?2007-05-03T07:13:00-10:002007-05-03T07:13:00-10:00larrytag:knowing.net,2007-05-03:/posts/2007/05/auto-database-browser-with-fks-as-hyperlinks/<p>Is there a product in the "cheaply deployable" range (say \~\$100) that you can point at a significant SQL Server database and it parses the foreign key relationships and presents a table viewer in which the values in the foreign-key column automatically hyperlink to the relevant table? And this tool …</p><p>Is there a product in the "cheaply deployable" range (say \~\$100) that you can point at a significant SQL Server database and it parses the foreign key relationships and presents a table viewer in which the values in the foreign-key column automatically hyperlink to the relevant table? And this tool allows basic CRUD editing, searching, and sorting? Just like Access, but with navigation?</p>
<p>(Or do I have to create a Rails app for a db that has several hundred tables? Given that Rails doesn't automatically generate the FK relationships, you're talking about days of work.)</p>
<p>[<strong>Update:</strong> ]{style="color: #ff0000;"}[I'm not talking about a tool for me, necessarily -- have SQL, can travel and all that. And, sure, with Rails I can probably turn out a dozen or so forms (maybe more) in an 8-hour day. But, with a database with \~200 tables, you're talking about me charging my clients thousands of bucks just to make simple Web pages. My requirement is ad hoc navigation through a database, with CRUD at the table level and a "development time" of no greater-than-a-day for a 200-table database. Really, very close to Access, but when there's an FK in the table the person doesn't have to say "Oh, okay, this line item has <strong>InvoiceID</strong> 256 -- open the Invoices table, search for 256 -- Oh, okay, that has a <strong>CustomerID</strong> of 538 -- open the Customers table -- let's see, <strong>OrganizationID</strong> 23 ... " Just:]{style="color: #000000;"}</p>
<hr>
<p><strong>LineItemID</strong> <strong>InvoiceID</strong> <strong>LineItemColumn</strong> <strong>LineItemColumn2</strong>
1 [[256]{style="color: #0000ff;"}]{style="text-decoration: underline;"} foo bar</p>
<hr>
<p>...where that link leads to...</p>
<hr>
<p><strong>InvoiceID</strong> <strong>CustomerID</strong> <strong>InvoiceColumn</strong> <strong>InvoiceColumn2</strong>
256 [[538]{style="color: #0000ff;"}]{style="text-decoration: underline;"} foo bar</p>
<hr>
<p>... etc ...</p>
<p>[<strong>Update:</strong> ]{style="color: #ff0000;"}[<a href="http://www.knowing.net/index.php/2007/05/03/rails-forms-with-auto-hyperlink-on-fks/">I solved the problem using Rails</a>]{style="color: #000000;"}</p>Microsoft.Scripting: Someone's Going to Have to Target This With Antlr2007-05-02T08:17:00-10:002007-05-02T08:17:00-10:00larrytag:knowing.net,2007-05-02:/posts/2007/05/microsoftscripting-someones-going-to-have-to-target-this-with-antlr/<p>The source code to the <strong>Microsoft.Scripting</strong> namespace is available at <a href="https://archive.codeplex.com/" title="http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=438">http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=438</a></p>
<p>A review of the IronPython codebase in the release makes the early-stage processing look <em>pretty close to</em> the (well-designed) IronPython 1.0 release: there's a language-specific tokenizer, parser, AST …</p><p>The source code to the <strong>Microsoft.Scripting</strong> namespace is available at <a href="https://archive.codeplex.com/" title="http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=438">http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=438</a></p>
<p>A review of the IronPython codebase in the release makes the early-stage processing look <em>pretty close to</em> the (well-designed) IronPython 1.0 release: there's a language-specific tokenizer, parser, AST generator and walker. Once you've transformed your AST into whatever-the-appropriate-form is, code generation looks insanely easy.</p>
<p>So the bad news is that there's no <strong>compiler = new Language(BNF myGrammar);</strong> statement. The good news is that we already <em>have</em> such things: they're called Lex and Yacc -- or better yet, <a href="https://www.antlr.org/">ANTLR</a>. Although the sheer line-count of a language-specific compiler using <strong>Microsoft.Scripting</strong> seems large, such tools should be able to generate maybe 80-90% of it (I'm talking of the compiler, not the shell or runtime support, but that, too, looks generically handled by <strong>Microsoft.Scripting</strong>).</p>
<p>But this is one of those recursive things -- you can't generate a DLR-based compiler until someone writes a DLR target for the compiler-compiler. Interestingly, the <a href="https://pragprog.com/titles/tpantlr/index.html">definitive ANTLR Book</a> will hit the shelves any day now. Hmmm ... if I was a kid interested in getting a job at Microsoft, I know what I'd be doing this Summer ...</p>Dynamic Language Runtime: PHP, Scheme, and "maybe one more" coming2007-05-02T07:38:00-10:002007-05-02T07:38:00-10:00larrytag:knowing.net,2007-05-02:/posts/2007/05/dynamic-language-runtime-php-scheme-and-quotmaybe-one-morequot-coming/<p>The preliminary documentation for the DLR is included in the IronPython-2.0A1-Doc.zip download at <a href="https://archive.codeplex.com/" title="http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=438">http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=438</a> :</p>
<blockquote>
<p>We're leveraging the learning we did on IronPython to extract elements that could be common amongst languages (dynamic type system, hosting APIs, cached method dispatch …</p></blockquote><p>The preliminary documentation for the DLR is included in the IronPython-2.0A1-Doc.zip download at <a href="https://archive.codeplex.com/" title="http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=438">http://www.codeplex.com/IronPython/Release/ProjectReleases.aspx?ReleaseId=438</a> :</p>
<blockquote>
<p>We're leveraging the learning we did on IronPython to extract elements that could be common amongst languages (dynamic type system, hosting APIs, cached method dispatch, symbol tables, ASTs, codegen, etc.), and we currently are working on IronPython 2.0, JScript, VBX, and Ruby to vet the common designs. We'll eventually do (or recruit people to do) PHP, scheme, and maybe one more to believe we really can move language+1 with ease to the DLR.</p>
</blockquote>
<p>.... Another juicy quote ...</p>
<blockquote>
<p>That runtime needs a great scripting story and UIFx story to compete with the virtuous cycle Flash/EcmaScript enjoy. We also watn to work with a partner on an IDE to eventually make a play for the MS app programmability story so that you can have your choice of dynamic language on a little runtime for scripting, say, Office or VS.</p>
</blockquote>Cross-Platform CLR2007-04-30T13:29:00-10:002007-04-30T13:29:00-10:00larrytag:knowing.net,2007-04-30:/posts/2007/04/cross-platform-clr/<p>Sam Gentile enthuses about the availability of the CLR on the Mac. Another thing is that Mac users, like PDA users, appear to be more willing to support small/Micro ISVs. Whether that would hold true for a Silverlight (i.e., non-native) UI, I don't know. But maybe I'll buy …</p><p>Sam Gentile enthuses about the availability of the CLR on the Mac. Another thing is that Mac users, like PDA users, appear to be more willing to support small/Micro ISVs. Whether that would hold true for a Silverlight (i.e., non-native) UI, I don't know. But maybe I'll buy my first Mac since the F/X on which I learned Smalltalk circa 1990 (?). </p>Udell Interviews Lam on DLR, Silverlight, IronRuby2007-04-30T13:19:00-10:002007-04-30T13:19:00-10:00larrytag:knowing.net,2007-04-30:/posts/2007/04/udell-interviews-lam-on-dlr-silverlight-ironruby/<p>I'll be listening to this podcast ASAP.</p>Book Design2007-04-30T12:59:00-10:002007-04-30T12:59:00-10:00larrytag:knowing.net,2007-04-30:/posts/2007/04/book-design/<p>Charles Petzold and Jeff Atwood have gotten in a bit of a kerfluffle that, I think, is an unfortunate example of how online writing can escalate and over-dramatize disagreements between even two talented writers. I'm <em>sure</em> that Atwood appreciates Petzold's work and I'm <em>sure</em> that Petzold appreciates constructive criticism. I'm …</p><p>Charles Petzold and Jeff Atwood have gotten in a bit of a kerfluffle that, I think, is an unfortunate example of how online writing can escalate and over-dramatize disagreements between even two talented writers. I'm <em>sure</em> that Atwood appreciates Petzold's work and I'm <em>sure</em> that Petzold appreciates constructive criticism. I'm not going to link to the original posts, because I think that they were both perhaps overly curt and I don't want to fan any flames.</p>
<p>But I do feel strongly enough about the issue to say this: Petzold's <em><a href="https://www.amazon.com/Applications-Code-Markup-Presentation-Foundation/dp/0735619573/ref%3dsr_1_1/104-3338891-4707968%3fie%3dUTF8%26s%3dbooks%26qid%3d1177971664%26sr%3d8-1">Applications = Code + Markup</a></em> is a very good book. It's dense in a good way (if you've been following the dustup, <em>read</em> the pages in Atwood's original post).</p>
<p>Petzold's work also has a <em>conscious</em> narrative philosophy. Petzold talked about this when he was writing the book. Atwood praises the layout choices made in another book (which I haven't read) and his arguments are credible. But Petzold, too, made <em>deliberate choices</em> on these very issues and I don't think that it's fair to dismiss those choices as if they were accidents of an outdated approach to book design.</p>Dynamic Language Runtime / IronRuby Inst-analysis2007-04-30T09:34:00-10:002007-04-30T09:34:00-10:00larrytag:knowing.net,2007-04-30:/posts/2007/04/dynamic-language-runtime-ironruby-inst-analysis/<p>That Microsoft was going to increase support for dynamic languages is no surprise: they've been talking about that since (at least) PDC '03 and various hires and initiatives have clearly been in the works. I haven't seen the DLR yet, but my big question is: <strong>what version / runtime / patch level …</strong></p><p>That Microsoft was going to increase support for dynamic languages is no surprise: they've been talking about that since (at least) PDC '03 and various hires and initiatives have clearly been in the works. I haven't seen the DLR yet, but my big question is: <strong>what version / runtime / patch level of the CLR and libraries becomes the lowest-common denominator for Silverlight (i.e., cross-platform, in the browser)?</strong> Because for better or worse, <em>that</em> becomes the platform for dynamic languages in the .NET world.</p>
<p>I <em>am</em> surprised by the IronRuby announcement (and officially bestow the He-Man Programming Award to John Lam). I really thought we were going to see some form of Ruby#:Ruby::C#:Java. Although I'm happy (Ruby is now my #1 administrative programming language), I was actually hoping to see a new language. Ruby's a fine language, but it doesn't have a good story for concurrence, it has a boring model of XML (unlike VB), it has some unattractive Perl-isms. Most importantly, I think MS does a good job when they have the flexibility to evolve the language and, simultaneously, can devote the resources to developing the compilers, libraries, and toolsets.</p>"Google is the PS2"2007-04-30T09:05:00-10:002007-04-30T09:05:00-10:00larrytag:knowing.net,2007-04-30:/posts/2007/04/quotgoogle-is-the-ps2quot/<p>Ozzie compared Google's position to Sony's position with the PS2 a few years ago. But doesn't that make IBM Nintendo?</p>IronRuby announced2007-04-30T08:22:00-10:002007-04-30T08:22:00-10:00larrytag:knowing.net,2007-04-30:/posts/2007/04/ironruby-announced/<p>Scott Guthrie just announced IronRuby! Yeehaw!!!!!!</p>
<p>--</p>
<p>Silverlight binding; demoing on Mac</p>
<p>--</p>
<p>Dynamic Language Runtime announced</p>
<p>--</p>
<p>"Shipping later this week" (I'm sure he means shipping a beta / CTP)</p>
<p>--</p>
<p>Uses Ruby naming scheme when programming .NET libraries (weird. Not sure I like that.)</p>
<p>--</p>
<p>"Switch the console into Python mode, Ruby mode, VB …</p><p>Scott Guthrie just announced IronRuby! Yeehaw!!!!!!</p>
<p>--</p>
<p>Silverlight binding; demoing on Mac</p>
<p>--</p>
<p>Dynamic Language Runtime announced</p>
<p>--</p>
<p>"Shipping later this week" (I'm sure he means shipping a beta / CTP)</p>
<p>--</p>
<p>Uses Ruby naming scheme when programming .NET libraries (weird. Not sure I like that.)</p>
<p>--</p>
<p>"Switch the console into Python mode, Ruby mode, VB mode" (he means something called "Dynamic VB")</p>
<p>--</p>
<p><a href="https://docs.microsoft.com/en-us/previous-versions/windows/silverlight/dotnet-windows-silverlight/mt788654(v=msdn.10)">www.silverlight.net</a> is the commmunity site</p>
<p>(No sign of DLR / IronRuby / IronPython / Dynamic VB on that site as far as I can see)</p>
<p>--</p>
<p>"Componentize dispatching code, code generation, that sort of thing that compiler vendors do" ... namechecks to Hugunin and Lam ... we shipped this morning the DLR source code" on Codeplex ...</p>
<p>(<a href="https://archive.codeplex.com/" title="http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=dynamic%20language%20runtime">http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=dynamic%20language%20runtime</a> ? )</p>First, we'll need 3 monoliths...2007-04-30T08:09:00-10:002007-04-30T08:09:00-10:00larrytag:knowing.net,2007-04-30:/posts/2007/04/first-well-need-3-monoliths/<p>Voyager is moving at \~17KPS ... divided into 300,000 KPS ... multiplied by 3600 * 24 * 365.25 ... multiplied by 20. \~370,000 years to reach Gliese. To me, a 200-year mission is about what I could imagine our civilization buying into. No way gravity assist can scale; I don't think <a href="https://en.wikipedia.org/wiki/Fast_solar_sailing">solar …</a></p><p>Voyager is moving at \~17KPS ... divided into 300,000 KPS ... multiplied by 3600 * 24 * 365.25 ... multiplied by 20. \~370,000 years to reach Gliese. To me, a 200-year mission is about what I could imagine our civilization buying into. No way gravity assist can scale; I don't think <a href="https://en.wikipedia.org/wiki/Fast_solar_sailing">solar sails scale</a>; no way we're putting enough nuclear bombs into space to do an Orion thing. Lessee... Wikipedia says <a href="https://en.wikipedia.org/wiki/Ion_engine">ion drives have exhaust speeds of \~30KPS</a> ... And <a href="https://en.wikipedia.org/wiki/Spacecraft_propulsion">this Wikipedia article seems wildly optimistic about "technologies requiring further research"</a> ... Some kind of electromagnetic mass-driver I can imagine (but then, my brother-in-law works at Fermilab, so I'm biased) ...</p>
<p><strong>Update:</strong> Surely (?) Dan Ciruli is correct in his comments that without friction, you can go much faster than your exhaust ... So let's say ion drive ... Lessee ... 10\^-4 g ... d = 1/2 at\^2 ... turnaround at 10 light years ... \~620 years with a peak velocity of 9000 km/sec ... now we're talking ... get a little more acceleration and we're on that planet like locusts on a cornfield.</p>Kauai2007-04-29T14:55:00-10:002007-04-29T14:55:00-10:00larrytag:knowing.net,2007-04-29:/posts/2007/04/kauai/<p><img alt="IMG_0193" height="240" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="180">Just back from a 4-day mini-vacation in Kauai, hiker's paradise (well, if your idea of paradise is a hike in the rain to the world's highest swamp along knife-edge ridges with 3,000' drops...) Looks like I missed lots of interesting goings-on and Mix is going to generate tons of …</p><p><img alt="IMG_0193" height="240" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png" width="180">Just back from a 4-day mini-vacation in Kauai, hiker's paradise (well, if your idea of paradise is a hike in the rain to the world's highest swamp along knife-edge ridges with 3,000' drops...) Looks like I missed lots of interesting goings-on and Mix is going to generate tons of posts, so back to work. In the meantime, you can check out some photos at Flickr.</p>Microsoft CLR Boffin: "immutability and isolation are two things that all modern type systems should support (and encourage use of!) in a 1st class way"2007-04-22T09:32:00-10:002007-04-22T09:32:00-10:00larrytag:knowing.net,2007-04-22:/posts/2007/04/microsoft-clr-boffin-immutability-and-isolation-are-two-things-that-all-modern-type-systems-should-support-and-encourage-use-of-in-a-1st-class-way/<p>Michael Suess's <a href="http://www.thinkingparallel.com/cgi-sys/suspendedpage.cgi">fantastic series of brief interviews with concurrence gurus concludes</a> with Microsoft's Joe Duffy (whose own <a href="http://www7.securybrowse.com/view?src=ndAw6QphxRpXIcAab4LsGMjsjffpACs77FPY_gXv_lPYbLw94N0GmjcVNztgedgJDloXLBRsX5AhtqGCvezwd3JPG5s9pr32Zvz7Yd0CbZx0u4OtNoqp7uYUxbv6pb71jOZ_8gOIXHrXDGgUHwikTWWP-hCXgD_3evCEravBHCx6cmX3sfTRdP5M4kkR-aTyuu2sDKpseoRQpcg1zgCj0tZ9DeIlPPovvzymKaKzI4vblo_agsb3BitO3jcGu0Iy3BczbFBWjSjm-JM-xMzNnfkfpUSzlfWIG9nfSl5wDlk_y9Hq0zhMLFoS0PixeD93uw72J0atbftOIPJHNjISArHgV2lzL76DWzNSDGHfaINWiwOMzUnBPRvzUVkC1ShYK93VXsyYCaWmvL-BXtxxfi2ZgOAlIhsCU7D3GkeSsTgyNWrmzP6fwvbtNOic_CW_HtgARtQqMjvd3BUPyUo3ycY_cZpMfrrv0PTzzh5VJ5Y_tFiPpUyKrUq0aCYwuLcfdgGm4rWB0K4omUvrsU3T-A">blog is must-reading for performance-oriented windows developers"></a>)contains the intriquing quote in the title. I smell CLR support!</p>Silverlight on Rails2007-04-20T18:02:00-10:002007-04-20T18:02:00-10:00larrytag:knowing.net,2007-04-20:/posts/2007/04/silverlight-on-rails/<p>Jonathan Edwards has a <a href="https://alarmingdevelopment.org/?p=67">great piece of speculation</a>. Man, if John Lam has produced a native CLR Ruby (maybe based on the IronPython codebase) in 8 months, he'd be the run-away winner of this year's He-Man Programming Award.</p>Schadenfreude2007-04-19T13:05:00-10:002007-04-19T13:05:00-10:00larrytag:knowing.net,2007-04-19:/posts/2007/04/schadenfreude/<p>Please, feel free to laugh at this column describing how I was completely pwned by hackers trading the German dub of 'Norbit'...</p>It's Much Work, Measuring Turtles2007-04-19T10:38:00-10:002007-04-19T10:38:00-10:00larrytag:knowing.net,2007-04-19:/posts/2007/04/its-much-work-measuring-turtles/<p><a href="http://www.blog.sciencenews.org/mathtrek/2007/04/cant_knock_it_down.html"><img alt="Self-Righting Object" src="http://www.dailynugget.com/images/self-righting.jpg" title="Self-Righting Object"></a>This object, which is of uniform density, is self-righting. It has a second balance point that is "unstable"/highly susceptible to perturbation (when I first read the article I thought it said it <em>didn't</em> have such a point, which freaked me out). I love mathematical objects that are complex and …</p><p><a href="http://www.blog.sciencenews.org/mathtrek/2007/04/cant_knock_it_down.html"><img alt="Self-Righting Object" src="http://www.dailynugget.com/images/self-righting.jpg" title="Self-Righting Object"></a>This object, which is of uniform density, is self-righting. It has a second balance point that is "unstable"/highly susceptible to perturbation (when I first read the article I thought it said it <em>didn't</em> have such a point, which freaked me out). I love mathematical objects that are complex and yet arise from (presumably) simple causes (irrational numbers, Julia / Mandelbrot sets, etc.).</p>
<p>My favorite part of \<a href="http://blog.sciencenews.org/mathtrek/2007/04/cant_knock_it_down.html"" target="_blank" rel="noopener noreferrer">the article though, is that the mathematicians noted the similarity of the shape to certain turtle shells. They are now attempting to find if any turtles are inherently self-righting with no leg wiggling. But "It's much work, measuring turtles."</p>
<p>*Original post by * Fabian</p>Ageism in Software Development2007-04-18T10:21:00-10:002007-04-18T10:21:00-10:00larrytag:knowing.net,2007-04-18:/posts/2007/04/ageism-in-software-development/<p><a href="http://www.benoitlavigne.com/blog/2007/04/16/ageism-in-software-development/">Benoit Lavigne wonders if ageism is a problem in the software development profession</a>. Oh, <em>hell</em> yeah. From the minute I began editing software development magazines (when I was 25) I began hearing from professionals in their 40s and higher who faced disproportionate difficulty getting work. There is not a question …</p><p><a href="http://www.benoitlavigne.com/blog/2007/04/16/ageism-in-software-development/">Benoit Lavigne wonders if ageism is a problem in the software development profession</a>. Oh, <em>hell</em> yeah. From the minute I began editing software development magazines (when I was 25) I began hearing from professionals in their 40s and higher who faced disproportionate difficulty getting work. There is not a question in my mind that this is a real problem. True, this is a field that is unforgiving to those who don't keep their skills current, but I've heard <em>far</em> too many stories to believe that's the only, or even dominant, factor.</p>
<p>Now that I have a touch of gray around the temples myself, I worry about this myself. I'm the oldest person on my programming team right now and I'm at least two decades away from retiring. I have no doubt that it will be harder and harder for me to get work as a developer, no matter how current my coding skills stay. If I'm on the phone with a potential client and they ask about my experiences, I don't say "Professional programmer for 27 years," because I think that could very well trigger ageism; I say "I sold my first program when I was 16."</p>
<p>I fear the day when I'm so old that the only work I'll be able to get will be drawing lines between boxes and pretending I'm delivering value.</p>Hyperlinks From CD To Web Patent (#6,314,574): I Have Prior Art, How Do I Help?2007-04-18T09:39:00-10:002007-04-18T09:39:00-10:00larrytag:knowing.net,2007-04-18:/posts/2007/04/hyperlinks-from-cd-to-web-patent-6314574-i-have-prior-art-how-do-i-help/<blockquote>
<p>Disc Link, a subsidiary of Acacia Technologies Group (an organization that basically buys up patents so that it can sue anyone who violates them), claims that it's patent number 6,314,574 covers hyperlinks from documents stored on a CD that send users to sites on the web.<br>
Last week …</p></blockquote><blockquote>
<p>Disc Link, a subsidiary of Acacia Technologies Group (an organization that basically buys up patents so that it can sue anyone who violates them), claims that it's patent number 6,314,574 covers hyperlinks from documents stored on a CD that send users to sites on the web.<br>
Last week, Disc Link filed suit against Borland, Business Objects, Compuware, Corel, Eastman Kodak, Novell, Oracle, and SAP, claiming they all violate its patent.</p>
<p><em>via</em> <a href="http://feeds.downloadsquad.com/%7er/weblogsinc/downloadsquad/%7e3/110099756/">Download Squad</a></p>
</blockquote>
<p>The patent was filed on Nov 8, 1998.</p>
<p>I first put a hyperlink to the Web on a commercial CD in 1994. (The proceedings of the Software Development Conference. And, yeah, to the Web.) I continued the practice on several subsequent CDs that shipped before '98. I have copies of several of these CDs sitting on my shelf.</p>
<p>I can't see how the claims of the patent cover such links, but if anyone involved in the lawsuit thinks I could be of help, let me know.</p>
<p>Coincidentally, I have a press release in my Inbox from the "Coalition for Patent Fairness" praising the <a href="https://patentlyo.com/patent/2007/04/patent_reform_a.html">Patent Reform Act of 2007</a>. Maybe, but the bullet item "Reform to make it easier to file a patent application without the inventor's cooperation;" doesn't seem very nice. Intellectual Property legislation has been such a disaster in the past decade that I fear that the only thing worse than the current patent system would be "reform" written by the same people who brought us the DMCA.</p>TurboTax E-Filing Server Bogged Down2007-04-17T18:09:00-10:002007-04-17T18:09:00-10:00larrytag:knowing.net,2007-04-17:/posts/2007/04/turbotax-e-filing-server-bogged-down/<p>Well, looks like I might have to run down to the Post Office after all. The TurboTax filing servers have not been working for hours. I thought that after midnight EST, things might calm down, but I don't know how long to waste before just printing out the forms and …</p><p>Well, looks like I might have to run down to the Post Office after all. The TurboTax filing servers have not been working for hours. I thought that after midnight EST, things might calm down, but I don't know how long to waste before just printing out the forms and taking a trip into town.</p>
<p>Update: The answer turned out to have been "about an hour." Given that the whole point of e-filing is convenience, for which they charge you \<span class="math">\(34 (\\)</span>17 for Fed, \$17 for State), there didn't seem to be any point in online drama. A big screwup on Intuit's part, but not enough to make me switch products. I have Quicken records going back years and TurboTax is actually a heckuva good piece of software.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>DeveloperWorks Podcast About Jolt Awards, With Rosalyn Lum and I2007-04-17T17:39:00-10:002007-04-17T17:39:00-10:00larrytag:knowing.net,2007-04-17:/posts/2007/04/developerworks-podcast-about-jolt-awards-with-rosalyn-lum-and-i/<p>DeveloperWorks interviewed Rosalyn Lum and I about the Jolt Awards (IBM was a big winner this year).</p>Frontpage of Microsoft.com today2007-04-16T10:37:00-10:002007-04-16T10:37:00-10:00larrytag:knowing.net,2007-04-16:/posts/2007/04/frontpage-of-microsoftcom-today/<p><em>via</em> Dan Fernandez</p>Override Chicago Manual Of Style 13th Edition Rule 8.32007-04-16T10:30:00-10:002007-04-16T10:30:00-10:00larrytag:knowing.net,2007-04-16:/posts/2007/04/override-chicago-manual-of-style-13th-edition-rule-83/<p>Eye-tracking studies by Jakob Nielsen lead to the recommendation "<a href="https://www.nngroup.com/articles/web-writing-show-numbers-as-numerals/">Show numbers as numerals when writing for online readers</a>." This contradicts the traditional style rule of writing out numbers less than 100 (or sometimes 10) (I really had to stop and consciously use numerals for those!).</p>Map, Everything's An Object, and Inline2007-04-14T08:22:00-10:002007-04-14T08:22:00-10:00larrytag:knowing.net,2007-04-14:/posts/2007/04/map-everythings-an-object-and-inline/<p>One of the reasons that functional programming is worth studying is that it abounds with opportunities for implicit parallelization. As <a href="http://fsharpnews.blogspot.com/2007/04/exploiting-concurrency.html">Jon Harrop discusses in this post</a>, the <strong>map</strong> function takes a function object <strong>f</strong> and an array <strong>[a, b, c, d]</strong> and returns <strong>[f(a), f(b), f(c), f …</strong></p><p>One of the reasons that functional programming is worth studying is that it abounds with opportunities for implicit parallelization. As <a href="http://fsharpnews.blogspot.com/2007/04/exploiting-concurrency.html">Jon Harrop discusses in this post</a>, the <strong>map</strong> function takes a function object <strong>f</strong> and an array <strong>[a, b, c, d]</strong> and returns <strong>[f(a), f(b), f(c), f(d)]</strong> (syntax varies from language to language, of course, but you get the point).</p>
<p>The optimist sees this and says "Ah hah! The compiler can simply distribute these calculations to a thread-pool and have a performance advantage on a manycore machine." And this is true if (a) <strong>f</strong> is quite lengthy or (b) the array is quite large. Otherwise, the overhead of distributing the calculation across cores / processors can very well be greater than performing the <strong>map</strong> "in core." In the worst case, when function and data are already inside the initial core's cache, the performance hit for distributing it would be very substantial.</p>
<p>This is a familiar theme in programming languages: a theoretical capability runs afoul of implementation realities. The best design decision in Java was "(Almost) Everything's an object": numbers and strings -- the most commonly used data types -- have different semantics (what the .NET world calls "value semantics") because they <em>aren't</em> pure objects. And they aren't pure objects for performance reasons (immutable strings are also good for a couple other reasons). To this day, you can feel an occasional performance hit with pure object-oriented languages (before you flame, keep in mind that I'm about to deploy a Ruby-based service right into the middle of a live multimillion-dollar application and Ruby's not only pure objects, it's <em>interpreted.</em> So I'm not one of those who doesn't understand that performance, productivity, and responsiveness are different things).</p>
<p>Another situation is C/C++'s <strong>inline</strong> keyword. Structured programming theory tells us not to repeat ourselves -- to define functions rather than writing the same code in multiple places. But in the not-terribly-distant past, the cost of a function call was large relative to local operations (a situation that holds today with some embedded processors). So C and C++ have an <strong>inline</strong> keyword to say "don't generate a function call for this, generate the code inline." But unlike Java's success with "Everything's an object: almost" the <strong>inline</strong> keyword turned out to be pretty much a disaster. Now, to this day some people doing embedded systems undoubtedly use <strong>inline</strong> to great effect. But <em>most</em> developers do a poor job estimating the benefit of the <strong>inline</strong> keyword. Because, just as distributing <strong>map</strong> can be counter-productive, inlined code can decrease performance (the on-chip caches of modern processors make code size and data locality very important to performance). (And don't even get me started on template metaprogramming.)</p>
<p>So, what does this history suggest for the manycore era?</p>
<ul>
<li>Languages that promise that the solution is "every call's distributed" (or other "pure" approach) will either fail outright to deliver performance gains or will require very sophisticated just-in-time code generators (this is similar to the situation with pure object-oriented languages such as LISP and Smalltalk, where commercial VMs are leaps and bounds beyond academic "proof of concept" interpreters / VMs). The problem with this is that the development of sophisticated JITters requires time and experience, so "the language takes care of it" solutions face a very big chicken-and-egg problem.</li>
<li>Languages that shift 100% of the burden of parallelization to the programmer (a <strong>ParallelAttribute</strong> that can be applied to blocks or functions, say) will work in the hands of experts but will be disasters in the hands of the mainstream.</li>
<li>Some kind of hybrid approach that purists decry as tainted but that solves 80% of the problem (a la Java's "(Almost) Everything's an object") will be the winner.</li>
</ul>
<p>(No, I don't know what the hybrid approach will be.)</p>System Freeze Update: Acronis Rescues Me2007-04-12T12:16:00-10:002007-04-12T12:16:00-10:00larrytag:knowing.net,2007-04-12:/posts/2007/04/system-freeze-update-acronis-rescues-me/<p>In the way of computers and their miserable antics, my attempts to figure out my system freeze led to a disaster. After determining that my system continued to freeze even when using the "VgaSave" graphics adapter, I began to suspect that it might be my Wireless Network Card (a WMP54GX …</p><p>In the way of computers and their miserable antics, my attempts to figure out my system freeze led to a disaster. After determining that my system continued to freeze even when using the "VgaSave" graphics adapter, I began to suspect that it might be my Wireless Network Card (a WMP54GX). I hadn't updated the driver but freezes definitely seemed more common while accessing the Web (causing my initial misguided suspicion of Firefox) and background behavior could additionally trigger network access for the other, seemingly random freezes.</p>
<p>So, using Device Manager I disabled my network card. I rebooted and the system had lost my identity. That is, somehow, c:\documents and settings\larry was not-quite-deleted, but I think all of its <em>sub-directories</em> were. All of my start programs, desktop, settings, etc. were gone. Further, so too were directories gone from the 'all users' account. And there was something weird about the registry -- when I tried to switch "View options" in Explorer (so I could see hidden files and show extensions and all that sort of stuff), it "wouldn't take." As if data wasn't being properly written into the Registry under CURRENT_USER.</p>
<p>So that kind of sucked and I played around for a bit before deciding that the system was so screwed up that I had to take the ultimate risk -- restoring from backups. I have Acronis TrueImage on a daily backup to an internal drive. I pointed at the OS partition (I have partitions on various drives for OS, bin (Program files), data, media, and a non-backed-up "volatile" partition) and chose a restore point of last Thursday, before the freezes started. Acronis rebooted into itself and a few hours later told me it was finished.</p>
<p>I think this is the first time in my <em>life</em> that an emergency restore worked perfectly: the very stuff that I had lost came back and because I keep my data on another partition, I didn't even lose any email. I may have lost some files I'd temporarily stored on the Desktop, but otherwise, I feel like the luckiest guy on Earth. Now all I have to fear is my deep suspicion that the problem was caused by some auto-update facility.</p>
<p>So... Acronis TrueImage 8 (I think they're up to 9 or even 10 now) on a daily backup to an internal SATA drive. (N.B.: If I'd relied only on RAID, I'm fairly sure I would have been screwed.)</p>
<p>OK, back to posting about software development issues, I promise...</p>System Locking : Circumstances Point To Firefox (!)^h^h^h^h^h^h^h^h^h Mystery2007-04-10T14:34:00-10:002007-04-10T14:34:00-10:00larrytag:knowing.net,2007-04-10:/posts/2007/04/system-locking-circumstances-point-to-firefox-hhhhhhhhh-mystery/<p>My system has begun locking up and the circumstantial evidence, much to my surprise, ~~seem to point to Firefox~~. The lockup is a hard one: the screen freezes with no mouse response, no perfmon counters, no hard drive activity. Have to go to the big red switch. I recently re-installed …</p><p>My system has begun locking up and the circumstantial evidence, much to my surprise, ~~seem to point to Firefox~~. The lockup is a hard one: the screen freezes with no mouse response, no perfmon counters, no hard drive activity. Have to go to the big red switch. I recently re-installed my display drivers (for an ATI All-In-Wonder 800) using the latest Catalyst drivers and normally I would <em>strongly</em> suspect them. ~~But it seems to me that the hangs are at least often and perhaps always occuring right at the moment of switching pages in Firefox. (It just did it as I checked that I was running Firefox 2.0.0.3.)~~</p>
<p>~~Now, opening pages in a browser is a common task, so it's possible that this is pure coincidence. Too, I've had hangs when I <em>wasn't</em> opening pages, but I very well may have had the browser open and experiencing an auto-refresh (such as happens on my homepage, which is msnbc.com). Nor does this let my display driver entirely off the hook, as the problem may relate to the display-rendering of a just-changed Web page, right?~~</p>
<p>~~So, after two days of drastic msconfig work, I am ready to try the ultimate sacrifice -- switching to IE. Wish me luck.~~</p>
<p>Update: Well, the good news is that it's not Firefox. Fifteen minutes into a Firefox-less session, I got the freeze. I feel it <em>must</em> be the display drivers, but I don't know what alternatives I have.</p>Insect Retinas (Retini?)2007-04-09T13:02:00-10:002007-04-09T13:02:00-10:00larrytag:knowing.net,2007-04-09:/posts/2007/04/insect-retinas-retini/<p>Todor Georgiev, a scientist at Adobe, has etched a lens so that it creates many images. "Software merges the mini-images into a single image that the photographer can focus and refocus at will." (Link to BoingBong report, not original, which may be BoingBoinged/Slashdotted.) So <em>that's</em> what we'll be using …</p><p>Todor Georgiev, a scientist at Adobe, has etched a lens so that it creates many images. "Software merges the mini-images into a single image that the photographer can focus and refocus at will." (Link to BoingBong report, not original, which may be BoingBoinged/Slashdotted.) So <em>that's</em> what we'll be using manycore machines for.</p>
<p><img alt="" src="http://www.genomenewsnetwork.org/articles/2004/04/30/shrimp.jpg">I had always assumed that the compound eyes of insects and mantis shrimps consisted of a gazillion separate lenses <em>and</em> retinas. If I <a href="https://link.springer.com/article/10.1007%2FBF00229463">read this abstract correctly</a>, that seems to be true, at least for our friend the mantis shrimp. But that which Adobe can do in software nature can exceed. Some animal eyes are just pinhole cameras (such as, apparently, that of the white crappie). But what if you had <em>two</em> (or a gazillion) pinholes projecting onto the same retina?</p>
<p>The advantage, you'd think, would be that you'd get the higher resolution of a big retina (the data from a single lens being spread out across more receptors) and the high motion sensitivity of a compound eye (from the lenses positioned more obliquely to the object).</p>
<p>Of course, the signal falling on a single rod/cone is much more complex to interpret. You might need a visual cortex the size of a basketball. And the signal is more subtle, too, since you'd want to be able to detect a fluctuation occurring just in one or a few lenses while the total light falling on a given cone/rod would be contributed by all the lenses. Maybe rhodopsin / existing photoreceptor chemicals wouldn't cut it.</p>I Dream of Djinni2007-04-07T08:05:00-10:002007-04-07T08:05:00-10:00larrytag:knowing.net,2007-04-07:/posts/2007/04/i-dream-of-djinni/<p>"But this isn't a silver bullet!" Fabian insisted. "It's a djinni-bearing magic lamp! Not just one thing?you get three things!"</p>
<p>...My April 1st column for SD Times is now online...</p>Dice Going Public2007-04-05T08:49:00-10:002007-04-05T08:49:00-10:00larrytag:knowing.net,2007-04-05:/posts/2007/04/dice-going-public/<p>Dice, the terrible job board, has announced a \$100M IPO. <em>Sigh</em>. The answer to many-to-many social network problems lies, not with full mediation, but with semantically-meaningful hypermedia. In other words, semantic Webs (which I use only in the loosest sense of domain-specific tags). At the moment, this isn't apparent, with …</p><p>Dice, the terrible job board, has announced a \$100M IPO. <em>Sigh</em>. The answer to many-to-many social network problems lies, not with full mediation, but with semantically-meaningful hypermedia. In other words, semantic Webs (which I use only in the loosest sense of domain-specific tags). At the moment, this isn't apparent, with mediators doing just fine, but as far as <em>investment</em> goes, what you're buying are future cashflows, not today's shiny pennies. To invest in Dice, you're making a bet that either their success at mediation will continue into the far future or that they will be the incubator or acquirer of "what comes next." Given the public face of Dice (i.e., their product), I think that's a bad bet.</p>
<p>That I think we will continue to see transformations in the way we interact with computers leads me to believe that MSFT and GOOG are good investments. I think that Microsoft Research is likely to incubate the future of interfaces (beyond keyboards) and that Google is going to acquire or develop the "business rules"/"autonomous agents" of semantic hypermedia.</p>WPF Tools Expression Web and Blend to join MSDN2007-04-03T14:25:00-10:002007-04-03T14:25:00-10:00larrytag:knowing.net,2007-04-03:/posts/2007/04/wpf-tools-expression-web-and-blend-to-join-msdn/<blockquote>
<p>In a welcome about face, Microsoft has decided to make Expression Blend and Expression Web available in MSDN subscriptions. Soma Somasegar makes the announcement....Initially Microsoft was intending to separate out the new Expression design tools from the developer resources.</p>
</blockquote>
<p>Source: Expression Web and Blend to join MSDN<br>
Originally published …</p><blockquote>
<p>In a welcome about face, Microsoft has decided to make Expression Blend and Expression Web available in MSDN subscriptions. Soma Somasegar makes the announcement....Initially Microsoft was intending to separate out the new Expression design tools from the developer resources.</p>
</blockquote>
<p>Source: Expression Web and Blend to join MSDN<br>
Originally published on Tue, 03 Apr 2007 18:26:27 GMT by Loren</p>
<p><em>And there was much rejoicing</em><em>.</em>**</p>
<p>Along with the announcement that \<a href="http://www.knowing.net/PermaLink%2cguid%2ce3a8925c-97ac-469b-ad87-f22658f04735.aspx"" target="_blank" rel="noopener noreferrer">testing tools are going to migrate into the "mainstream" VS Pro offering, this is another welcome sign that Microsoft is moving back towards valuing MSDN subscribers as the crucial resource they are (i.e.: by developing applications that exploit and rely on Microsoft technologies, in the long run MSDN developers generate more income for Microsoft makes by limiting their access to Microsoft's high-end tools and servers).</p>Mutable variables eliminated from .NET2007-04-01T11:22:00-10:002007-04-01T11:22:00-10:00larrytag:knowing.net,2007-04-01:/posts/2007/04/mutable-variables-eliminated-from-net/<p>True, I'm only up to "L" in my aggregator, but this post on Lambda The Ultimate looks like the day's best announcement: </p>
<blockquote>
<p>Redmond, WA: At an unusual press conference held this Sunday morning, Bill Taylor, Microsoft's General Manager of Platform Strategy, announced that after much research into the causes of …</p></blockquote><p>True, I'm only up to "L" in my aggregator, but this post on Lambda The Ultimate looks like the day's best announcement: </p>
<blockquote>
<p>Redmond, WA: At an unusual press conference held this Sunday morning, Bill Taylor, Microsoft's General Manager of Platform Strategy, announced that after much research into the causes of security holes and instabilities, Microsoft will eliminate mutable variables from the .NET platform and its languages, including C# and VB.NET. "One of our top researchers found that mutable variables were the major root cause preventing us from achieving the great user experience we always strive to deliver," said Taylor. "Once we realized that, eliminating them from .NET was a no-brainer."</p>
<p>Given that this announcement was made on a Sunday, reactions have been limited so far, but one prominent VB.NET developer commented that "Compared to the switch from VB6 to VB.NET, this ought to be a breeze." A C# developer was heard to say, "After anonymous delegates, monads shouldn't be a problem."</p>
<p>To ensure wide penetration of this significant update, Microsoft will be issuing updated Windows CDs to all licensed customers, free of charge. The new CDs can be identified by the distinctive holographic "Haskell Inside" logo, featuring a holographic version of <a href="https://www.microsoft.com/en-us/research/people/simonpj/?from=http%3A%2F%2Fresearch.microsoft.com%2F%257esimonpj%2Fgifs%2Fspj-snow.jpg">this portrait</a> of Simon Peyton-Jones, grinning from ear to ear.</p>
<p>LtU readers are encouraged to share any inside info they may have about this move!</p>
</blockquote>
<p>Source: <a href="http://lambda-the-ultimate.org/node/2164">Mutable variables eliminated from .NET</a><br>
Originally published on Sun, 01 Apr 2007 16:31:44 GMT</p>InfoWorld is dead2007-03-29T20:41:00-10:002007-03-29T20:41:00-10:00larrytag:knowing.net,2007-03-29:/posts/2007/03/infoworld-is-dead/<p>IDG's newsweekly, InfoWorld, is moving to an online-only format (Read Steve Fox's, its Editor-in-Chief, discussion). Fox says that InfoWorld is not "going away," but so far the conversion of a print readership to online has been, at best, problematic. There have been some credible attempts ( Byte, for instance) but the …</p><p>IDG's newsweekly, InfoWorld, is moving to an online-only format (Read Steve Fox's, its Editor-in-Chief, discussion). Fox says that InfoWorld is not "going away," but so far the conversion of a print readership to online has been, at best, problematic. There have been some credible attempts ( Byte, for instance) but the problems are considerable, not least that the business instincts of a print publisher must be overridden regularly in this different medium. I'm not saying it's impossible, and wish success for Infoworld's staff, but this is yet another instance where I am grateful for having left the business aspects of publishing behind me.</p>Ready To Get Home2007-03-29T20:41:00-10:002007-03-29T20:41:00-10:00larrytag:knowing.net,2007-03-29:/posts/2007/03/ready-to-get-home/<p>In the airport today, I saw a fellow browsing Sudoku books. Flipping through them, seemingly evaluating pages as one might check out a writer's style. I thought about going up beside him, looking over his shoulder and saying "Well, <em>that</em> one's trivial," or "Oh, <em>that</em> one."</p>
<p>Last night I had …</p><p>In the airport today, I saw a fellow browsing Sudoku books. Flipping through them, seemingly evaluating pages as one might check out a writer's style. I thought about going up beside him, looking over his shoulder and saying "Well, <em>that</em> one's trivial," or "Oh, <em>that</em> one."</p>
<p>Last night I had a dream and it had something to do about useless wedding gifts. One thing was a quilted earpiece caddy for eyeglasses -- you slipped it on over the ends of your eyeglasses while leaving your glasses on the counter overnight in a cold climate, thus avoiding that annoying "gee, my eyeglasses are chilly," feeling that ruins so many a cold morning. What's sad is that I know if I pick up a Sky Mall in the plane, I'll see something even more absurd.</p>MSTest Moving to VS Pro2007-03-29T01:30:00-10:002007-03-29T01:30:00-10:00larrytag:knowing.net,2007-03-29:/posts/2007/03/mstest-moving-to-vs-pro/<blockquote>
<p>Naysawn has announced that the Visual Studio unit testing framework (MSTest) is moving into the Pro SKU of Visual Studio. That's a good start, but I want to lobby for going the whole way:</p>
<p><strong>Please move the unit testing framework into the .NET framework.</strong></p>
</blockquote>
<p>Source: MSTest Moving to VS Pro …</p><blockquote>
<p>Naysawn has announced that the Visual Studio unit testing framework (MSTest) is moving into the Pro SKU of Visual Studio. That's a good start, but I want to lobby for going the whole way:</p>
<p><strong>Please move the unit testing framework into the .NET framework.</strong></p>
</blockquote>
<p>Source: MSTest Moving to VS Pro<br>
Originally published on Wed, 28 Mar 2007 08:35:00 GMT by Brad Wilson</p>
<p><em>And there was much rejoicing...</em></p>
<p>Of course, Brad's right that unit-testing libraries ought to move into the base library, but the VS tools are sophisticated enough to be implemented solely as VS add-ins.</p>Kathy Sierra: 100% Right. Those Who Threatened Her: 100% Wrong.2007-03-28T16:27:00-10:002007-03-28T16:27:00-10:00larrytag:knowing.net,2007-03-28:/posts/2007/03/kathy-sierra-100-right-those-who-threatened-her-100-wrong/<p>I've never met Kathy Sierra. I don't subscribe to her blog. But I am utterly, <strong>utterly</strong> appalled to hear that she was subjected to death threats and, while those who threatened her are below contempt, nor should there by the tiniest portion of toleration for <a href="http://scripting.com/stories/2007/03/27/chorusOfCowardice.html">those</a> who <em>attempt to make …</em></p><p>I've never met Kathy Sierra. I don't subscribe to her blog. But I am utterly, <strong>utterly</strong> appalled to hear that she was subjected to death threats and, while those who threatened her are below contempt, nor should there by the tiniest portion of toleration for <a href="http://scripting.com/stories/2007/03/27/chorusOfCowardice.html">those</a> who <em>attempt to make light</em> of such things. No. Wrong. That the Internet provides an amplification to the voice of the disenfranchised and the unhappy, to the untrained and the counter-cultural, is commendable, but in no way, <strong>in no way</strong>, does this excuse anyone, <strong>anyone</strong> from the power of the written word or from the affect of the public voice. That the Internet already plays host to hate, to misogyny, to racism, to all that shit -- in no way do those facts mitigate the responsibility of those who write.</p>
<p>Apparently, it is known who is most likely responsible for the threats. I hope they're prosecuted and I hope they go to jail.</p>Build A Game In A Year: Win $10K2007-03-25T08:02:00-10:002007-03-25T08:02:00-10:00larrytag:knowing.net,2007-03-25:/posts/2007/03/build-a-game-in-a-year-win-10k/<blockquote>
<p><a href="http://www.mydreamrpg.com/">Dream Games</a> has extended their registration date for their <a href="http://www.garagegames.com/community/blogs/view/12491">Build a game in a year</a> and increased the prize money to \$10,000. They have also explictly stated that TorqueX based games will be allowed. Last date for registration is April 1st 2007</p>
<p>Source: Another \$10,000 competition - for TorqueX …</p></blockquote><blockquote>
<p><a href="http://www.mydreamrpg.com/">Dream Games</a> has extended their registration date for their <a href="http://www.garagegames.com/community/blogs/view/12491">Build a game in a year</a> and increased the prize money to \$10,000. They have also explictly stated that TorqueX based games will be allowed. Last date for registration is April 1st 2007</p>
<p>Source: Another \$10,000 competition - for TorqueX Originally published by <a href="mailto:zman@thezbuffer.com">zman@thezbuffer.com</a></p>
</blockquote>
<p>I almost landed a 25-article contract for high-performance programming for which I was going to develop a game. I had the games all designed, too. Oh well. None of us can afford a significant amount of programming for a purely speculative reward, but if you have the intention of developing a game <em>anyway</em>, what harm would it be registering for the contest?</p>stpBA Storyboarding: Best Rookie Product I've Seen In Years2007-03-22T09:20:00-10:002007-03-22T09:20:00-10:00larrytag:knowing.net,2007-03-22:/posts/2007/03/stpba-storyboarding-best-rookie-product-ive-seen-in-years/<p>The easiest Jolt vote I've made in years was for <a href="http://www.stpsoft.co.uk/story/">stpBA Storyboarding</a>, a product which every architect and team lead owes themselves to evaluate. I would say it is revolutionary, but it is better than that -- it simply makes the way you probably already work vastly more efficient.</p>
<p>Essentially, it …</p><p>The easiest Jolt vote I've made in years was for <a href="http://www.stpsoft.co.uk/story/">stpBA Storyboarding</a>, a product which every architect and team lead owes themselves to evaluate. I would say it is revolutionary, but it is better than that -- it simply makes the way you probably already work vastly more efficient.</p>
<p>Essentially, it is a product that transforms screen-based storyboards into requirements and work-items. Based on (and in) Microsoft Office, you mock up screens using Visio and link them together using arrows. And then it transforms that into work-items. That's it. Simple. Obvious. Just works.</p>
<p>I could say that storyboards are one of the few diagrams that are universally comprehensible and producible by designers, users, and developers. I could say that usage-centered design, as laid out by Larry Constantine & Lucy Lockwood, is the most efficacious way I know to elicit requirements. I could say that the downside of storyboards has always been tracing their detail to and from work-items, and so they've traditionally been a "write once" work product. But I don't need to say that, because it's all so obvious.</p>
<p>It's really an eye-opening product -- download it, install it in a VM, you'll be happy.</p>
<p>The only rub being that I really <em>do</em> mean "install it in a VM." That it is essentially a Visio plug-in is both a strength and weakness of Storyboarding. Today, it only works with Office 2003. An Office 12 version is in development, but this is the type of product that, once you've tried it, you don't want to be without. Like all Jolt judges, I make extensive use of virtual machines (the awarding of a Jolt to VMWare Lab Manager was no shock) but Storyboarding was one where I felt that tuning up a dedicated virtual machine was very much the "way to do it." Perhaps due to the opaqueness of Office as a plug-in host, getting Storyboarding up and running took a little tweaking. If I recall correctly, before I attached the VM to the Internet to register/validate Office, there was some silent error that led to features not being enabled. Also, the workflow <em>within</em> Storyboarding was not immediately obvious, since it relies on its own pane within Visio and the potential is not quite unleashed by "press the buttons left to right." It's not a long learning curve, but it's longer than learning <a href="https://www.ea.com/studios/popcap">Peggle</a>.</p>
<p>Highly recommended. (Storyboarding, not Peggle. If you wish to ever have a productive day again, I advise you <em>not</em> try Peggle.)</p>
<p>\<a href="http://www.stpsoft.co.uk/story/"" atomicselection="true"></p>2007 Jolts Awards2007-03-22T08:52:00-10:002007-03-22T08:52:00-10:00larrytag:knowing.net,2007-03-22:/posts/2007/03/2007-jolts-awards/<p>The Jolt Awards were announced last night. The list of winners is below. We had some particularly competitive categories this year (in Technical Books, I advise you to simply fill your shopping cart with the finalists). Most delightful, this was a year where there was some real innovation, which I'll …</p><p>The Jolt Awards were announced last night. The list of winners is below. We had some particularly competitive categories this year (in Technical Books, I advise you to simply fill your shopping cart with the finalists). Most delightful, this was a year where there was some real innovation, which I'll highlight in some individual discussions.</p>
<p><strong>1. Books General</strong></p>
<p>Jolt Winner:</p>
<ul>
<li><em>Agile Software Development</em> by Alistair Cockburn (Addison-Wesley Professional)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li><em>Catastrophe Disentanglement</em> by E. M. Bennatan (Addison-Wesley Professional)</li>
<li><em>Practices of an Agile Developer</em> by V. Subramaniam and A. Hunt (Pragmatic Bookshelf)</li>
<li><em>Software Estimation Demystifying the Black Art</em> by Steve McConnell (Microsoft Press)</li>
</ul>
<p><strong>2. Books Technical</strong></p>
<p>Jolt Winner:</p>
<ul>
<li><em>Head First Object-Oriented Analysis & Design</em> by B. McLaughlin, G. Pollice, and D. West (O'Reilly Media)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li><em>Code Quality</em> by Diomidis Spinellis (Addison-Wesley Professional)</li>
<li><em>Refactoring Databases</em> by Scott W. Ambler and P. J. Sadalage (Addison-Wesley Professional)</li>
<li><em>CSS: The Missing Manual</em> by David Sawyer McFarland (O'Reilly Media)</li>
</ul>
<p><strong>3. Change and Configuration Management</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>AccuRev 4.5 with AccuWorkflow (AccuRev)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>AnthillPro3 (Urbancode)</li>
<li>Perforce SCM (Perforce)</li>
<li>Team Foundation Server (Microsoft)</li>
</ul>
<p><strong>4. Collaboration Tools</strong></p>
<p>Jolt Winner:</p>
<ol>
<li>Confluence (Atlassian Software Systems)</li>
</ol>
<p>Productivity Winners:</p>
<ul>
<li>Adobe Acrobat Connect Professional (Adobe Systems)</li>
<li>NetBeans IDE (Sun Microsystems)</li>
<li>TeamCity (JetBrains)</li>
</ul>
<p><strong>5. Database Engines and Data Tools</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>Visual Studio 2005 Team Edition for Database Professionals (Microsoft)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>Coral8 Engine (Coral8)</li>
<li>Dbdeploy (ThoughtWorks)</li>
<li>SQL Refactor (Red Gate Software)</li>
</ul>
<p><strong>6. Design and Modeling Tools</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>stpBA Storyboarding (stpsoft)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>Corticon Business Rules Modeling Studio (Corticon)</li>
<li>MagicDraw UML (No Magic)</li>
<li>Stylus Studio 2007 XML Enterprise Suite (DataDirect Technologies)</li>
</ul>
<p><strong>7. Development Environments</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>NetBeans IDE (Sun Microsystems)</li>
</ul>
<p>></p>
<p>Productivity Winners:<br>
IntelliJ IDEA (JetBrains)<br>
IronPython (Microsoft)<br>
Wolfram Workbench (Wolfram Research)</p>
<p><strong>8. Enterprise</strong> <strong>Tools</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>Cape Clear ESB Platform (Cape Clear Software)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>Liferay Portal (Liferay</li>
<li>Appistry EAF (Appistry)</li>
<li>Pentaho Open BI Suite (Pentaho)</li>
</ul>
<p><strong>9. Libraries, Frameworks and Components</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>NetAdvantage for .NET (Infragistics)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>JViews (ILOG)</li>
<li>.NET Framework 3.0 (Microsoft)</li>
<li>Intel Threading Building Blocks (Intel)</li>
</ul>
<p><strong>10. Mobile Development Tools</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>Carbide .c++ Professional Edition (Nokia)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>Crossfire (AppForge)</li>
<li>NetBeans Mobility Pack and Sun Java Wireless Tookit (Sun Microsystems)</li>
<li>Qtopia (Trolltech)</li>
</ul>
<p><strong>11. Project Management</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>Rally Enterprise (Rally Software)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>6th Sense Analytics (6th Sense Analytics)</li>
<li>Teamwork (Open Lab)</li>
<li>V1: Agile Enterprise (VersionOne)</li>
</ul>
<p><strong>12. Security</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>AppScan (Watchfire)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>DevInspect (SPI Dynamics)</li>
<li>Fortify Source Code Analysis (Fortify)</li>
<li>Metasploit Framework (Metasploit)</li>
</ul>
<p><strong>13. Testing</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>AgitarOne (Agitar Software)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>Mindreef SOAPscope (Mindreef)</li>
<li>Parasoft SOAtest (Parasoft)</li>
<li>TestComplete (AutomatedQA)</li>
</ul>
<p><strong>14. Bug and Defect Tracking</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>TestTrack Studio (Seapine Software)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>JIRA (Atlassian Software Systems)</li>
<li>OnTime 2007 (Axosoft)</li>
<li>Software Planner Professional (Pragmatic Software)</li>
</ul>
<p><strong>15. Utilities</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>VMware Lab Manager (VMware)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>Adobe Captivate 2 (Adobe)</li>
<li>ElectricCommander (Electric Cloud)</li>
<li>Textmate (MacroMates)</li>
</ul>
<p><strong>16. Web Development</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>Adobe Flex 2 (Adobe Systems)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>IntelliJ IDEA (JetBrains)</li>
<li>Mindreef SOAPscope Server (Mindreef)</li>
<li>NetBeans Visual Web Pack 5.5 (Sun Microsystems)</li>
</ul>
<p><strong>17. Websites and Developer Networks</strong></p>
<p>Jolt Winner:</p>
<ul>
<li>Sun Developer Network (Sun Microsystems)</li>
</ul>
<p>></p>
<p>Productivity Winners:</p>
<ul>
<li>CM Crossroads (CMC Media)</li>
<li>Koders.com (Koders)</li>
<li>Krugle (Krugle)</li>
</ul>
<p><strong>HALL OF FAME</strong></p>
<ul>
<li><strong>IBM developerWorks (IBM)</strong></li>
</ul>
<p>></p>Version Control Patterns?2007-03-22T08:40:00-10:002007-03-22T08:40:00-10:00larrytag:knowing.net,2007-03-22:/posts/2007/03/version-control-patterns/<p>I started to write a post on version-control patterns ("How to pack your trunk") when I realized what a can of worms it was. Essentially, every time I wrote down "the way I've always done it" I realized that there were always trade-offs -- that what worked in some situations wouldn't …</p><p>I started to write a post on version-control patterns ("How to pack your trunk") when I realized what a can of worms it was. Essentially, every time I wrote down "the way I've always done it" I realized that there were always trade-offs -- that what worked in some situations wouldn't be appropriate in others. In other words, that there really was a need for a pattern language for discussing version-control / change-management.</p>
<p>I'm not talking about "use version control," which has (thankfully) become standard. I'm talking about the organizational memory of your software development team. For instance, I generally organize by deployment task -- /Web, /App1, /App2, /Utilities, etc. But in a more service-oriented environment, it might definitely make more sense to organize in a more use-case driven manner: /admin, /tradingpartner1, /tradingpartner2, /internalclient1, etc.</p>
<p>Umm... Am I missing a well-known resource on this issue? Basically, the post quickly grew towards article length while hardly scratching the surface. I could throw up a Wiki on the topic easily enough, but I don't want to duplicate effort. Thoughts?</p>Twitter for Logging?2007-03-20T07:56:00-10:002007-03-20T07:56:00-10:00larrytag:knowing.net,2007-03-20:/posts/2007/03/twitter-for-logging/<p>Perhaps <a href="https://twitter.com/">Twitter</a> is the rock-and-roll of a generation that I am too old to get, but even with my vast ego, I find it inconceivable that anyone would want to receive an SMS of the minutiae of my life ("Driving to Costco," "Taking a break and throwing some darts").</p>
<p>However …</p><p>Perhaps <a href="https://twitter.com/">Twitter</a> is the rock-and-roll of a generation that I am too old to get, but even with my vast ego, I find it inconceivable that anyone would want to receive an SMS of the minutiae of my life ("Driving to Costco," "Taking a break and throwing some darts").</p>
<p>However, every real project that I work on involves logging and developing some kind of "heartbeat monitor" for the administrators. If Twitter is easily hackable, perhaps it could be used as the infrastructure for logging. Hmm... </p>Vista Mobile App Developer Contest2007-03-18T08:22:00-10:002007-03-18T08:22:00-10:00larrytag:knowing.net,2007-03-18:/posts/2007/03/vista-mobile-app-developer-contest/<p>Thee UMPCs up for grabs in this CodeProject programming competition:</p>
<blockquote>
<p>...must allow new means of input: ink, touch, and more. Build a great application that encompasses these needs, write an article about what you've done, and you may win <strong>one of three cool Samsung Ultra-Mobile PCs</strong>.</p>
<p><strong>One winner per month …</strong></p></blockquote><p>Thee UMPCs up for grabs in this CodeProject programming competition:</p>
<blockquote>
<p>...must allow new means of input: ink, touch, and more. Build a great application that encompasses these needs, write an article about what you've done, and you may win <strong>one of three cool Samsung Ultra-Mobile PCs</strong>.</p>
<p><strong>One winner per month, 3/15/07?6/15/07.</strong></p>
</blockquote>
<p>Hmmm.... maybe make that <em>two</em> UMPCs still up for grabs ...</p>Keep the 404!2007-03-18T08:20:00-10:002007-03-18T08:20:00-10:00larrytag:knowing.net,2007-03-18:/posts/2007/03/keep-the-404/<p>Unusually, I find myself disagreeing with Jeff Atwood and his statement that "<a href="https://blog.codinghorror.com/">Any 404 page that has the characters "404" on it, if not already an outright failure, is already well on its way to becoming one</a>." Jeff's larger point is that one not use the default 404, which is …</p><p>Unusually, I find myself disagreeing with Jeff Atwood and his statement that "<a href="https://blog.codinghorror.com/">Any 404 page that has the characters "404" on it, if not already an outright failure, is already well on its way to becoming one</a>." Jeff's larger point is that one not use the default 404, which is good advice. But I think it's a mistake to actually remove the code, which is concise and meaningful to experienced users.</p>iPower, my pwned host, boasts of being "Hacker safe"2007-03-16T12:56:00-10:002007-03-16T12:56:00-10:00larrytag:knowing.net,2007-03-16:/posts/2007/03/ipower-my-pwned-host-boasts-of-being-quothacker-safequot/<p>I wasn't going to name names, because I do not know the vulnerability which allowed a rootkit to be installed on my system. I may well have been the source of whatever vulnerability by which the system was compromised.</p>
<p>But this "Hacker Safe" blaze front and center on the iPower …</p><p>I wasn't going to name names, because I do not know the vulnerability which allowed a rootkit to be installed on my system. I may well have been the source of whatever vulnerability by which the system was compromised.</p>
<p>But this "Hacker Safe" blaze front and center on the iPower homepage is infuriating. The blaze is provided by way of ScanAlert. Judging from the logs that I saw before I was disconnected and lost the system, multiple machines within the same subnet as mine were compromised. The technical support from iPower was beyond unhelpful: the "live technical support" is provided by a call center that is not physically located with the data center. After the initial problems on Tuesday, we requested a local reboot and tighter reconfiguration. They couldn't do it. Their only offer was to repave the machine and make it available to us over the Internet without any hardening of the attack surface! They couldn't even activate a firewall for us or modify the ACL. We told them to go jump in a lake earlier today -- four days after we discovered the compromise. Oh, and they're not refunding us any of the \$7,000 or so we paid to set up (multiple) servers with them.</p>
<p>iPower is "Hacker safe"? I suppose so, in a sense.</p>
<p>Highly <em>not recommended</em>.</p>Gaming Across Cultural Divides2007-03-15T13:07:00-10:002007-03-15T13:07:00-10:00larrytag:knowing.net,2007-03-15:/posts/2007/03/gaming-across-cultural-divides/<p>Jon Udell suggests that if <a href="https://blog.jonudell.net/2007/03/15/greasing-the-skids-for-network-travelers-burger-kings-versus-atm-machines/">we have travel-like learning experiences online, then perhaps some of the non-obvious benefits of travel would also accrue in online environments</a>. It's a nice thought, but I'm thinking that you don't necessarily choose "Gears of War" as your meeting ground.</p>Software Product Lines2007-03-14T11:45:00-10:002007-03-14T11:45:00-10:00larrytag:knowing.net,2007-03-14:/posts/2007/03/software-product-lines/<blockquote>
<p>However, the real-world development of software product lines is hampered by the real-world limitations of maintaining a stable center as the product-line offerings spin off in a widening gyre...</p>
</blockquote>
<p>Going Over the Software Product Line is the title of my latest SD Times column.</p>I, Hacked2007-03-13T14:27:00-10:002007-03-13T14:27:00-10:00larrytag:knowing.net,2007-03-13:/posts/2007/03/i-hacked/<p>So one of my servers is totally compromised by a rootkit called Hacker Defender. I've spent the day trying to clean it off, and I <em>think</em> I just pronged it for good (cross my fingers). It's funny how I discovered the problem (and by funny, I mean, there's nothing funny …</p><p>So one of my servers is totally compromised by a rootkit called Hacker Defender. I've spent the day trying to clean it off, and I <em>think</em> I just pronged it for good (cross my fingers). It's funny how I discovered the problem (and by funny, I mean, there's nothing funny about it this): my Tomcat-based task manager (Jira) stopped working. It threw a ClassNotFoundException when loading. <em>That's odd</em>, thinks I, and switch to the relevant /classes directory and -- sure enough -- the /com folder leading to the classes is gone.</p>
<p>I sent out a message to users ("Who fracked with the server?") and, after some stumbling around, explicitly unpacked the classes into that directory and ... they disappear ...</p>
<p>It turns out that the rootkit (or its payload) installs a significantly sized Java-based web service and then hides the .class files from Windows (I think the evil hidden process actively hooks kernel .dlls and hides .class files). Well, the same logic that hid the evil Java classes hid my <em>good</em> Java classes. And thus began my education.</p>
<p>So, long story short: I highly recommend Sophos Anti-Rootkit, which was able to diagnose the rootkit automatically and not-quite-automatically allowed me to locate and delete the critical initialization file that re-infects the system every time it is rebooted. (It is <em>not</em> enough to delete the driver!)</p>
<p>Now that the hidden files are visible, what does it turn out my system was doing? Trading movies. These guys f***ed with my system in orded to swap a cam of <em>Norbit</em> in German. F***ers.</p>
<p>Okay, so now I have logs of a whole bunch of machines, all presumably in the botnet. Do I send these to someone?</p>
<p>Update: OMFG. Someone from a British Telcom range just logged on (anonymously -- how the f*** is he doing that? The guest account was never enabled, I've changed the name of the admin account, I've changed every password on the f***ing system), booted me off, and now I can't access via Remote Desktop. Well, it was a nice server while it lasted...</p>2: The Prequel To 3002007-03-11T09:52:00-10:002007-03-11T09:52:00-10:00larrytag:knowing.net,2007-03-11:/posts/2007/03/2-the-prequel-to-300/<p>The weekend box office receipts aren't yet published, but if Makalapua Cinemas in Kailua Kona are any benchmark of the American viewing population (and they aren't), I predict that <em>300</em> will either set or approach record revenues.</p>
<p>We actually saw <em>Zodiac</em>, which was excellent (it's ending challenges you to consider …</p><p>The weekend box office receipts aren't yet published, but if Makalapua Cinemas in Kailua Kona are any benchmark of the American viewing population (and they aren't), I predict that <em>300</em> will either set or approach record revenues.</p>
<p>We actually saw <em>Zodiac</em>, which was excellent (it's ending challenges you to consider the gap between "preponderance of evidence" and "beyond a reasonable doubt," and does so not from an authorially introduced ambiguity, but from the question of human obsession projecting patterns into mountains of circumstantial evidence), but there were huge lines for the multiple screens showing <em>300</em>.</p>
<p>But the real joy was two boys in line locked in combat on the battleground of Thermopylae. </p>
<p>Now, it may be that the history of the Greco-Persian wars are taught in some crusty ivy-shrouded prep school in Connecticut, but I'm quite certain that it's not in any curriculum in Hawai'i. And, let's be honest, it's not in that category of "things a curious teenager might be expected to know." That there was a city-state called Sparta -- sure. That they were famous warriors -- okay. Other than that, I insist that everything I heard was either made up on the spot or gleaned from Wikipedia in anticipation of the movie.</p>
<p>Which is fine. That's how <em>I</em> learned about the battle of Thermopylae. But what was classic was that these two young men were trying to impress several lovely young women and, locked in intellectual battle, carried themselves well beyond their depth. And, having misremembered vital details of the Wikipedia article they found themselves not only (wrongly) explaining the outcome of the battle, they were asked by the young ladies what happened next in the war. Which they didn't know. The one lad's courage failed and he stammered something "Well, watch the movie," while the other, bold warrior, took the chance and won the battle-for-fair-hearts by saying that the Persians retreated. And then, sadly, I had to go get my bucket of popcorn.</p>
<p>Human drama. It never changes. He was a smart kid and I hope that he finesses his way out of his problem. He'd done the critical thing: getting the girls interested. Enthusiasm, confidence, a good story: Well done. But, my boy, you <em>have</em> to know "what happens next?"</p>Pragmatic Programmers To Publish Erlang Book2007-03-05T07:49:00-10:002007-03-05T07:49:00-10:00larrytag:knowing.net,2007-03-05:/posts/2007/03/pragmatic-programmers-to-publish-erlang-book/<p>The Pragmatic Programmers have a very good sense of software developmet trends -- they're doing today what O'Reilly did in the early 90s. Coming in July from them is <a href="https://pragprog.com/book/jaerlang/programming-erlang">Joe Armstrong's Programming Erlang.</a> Erlang is seen by programming language mavens as one of the real contenders for the crown of "most …</p><p>The Pragmatic Programmers have a very good sense of software developmet trends -- they're doing today what O'Reilly did in the early 90s. Coming in July from them is <a href="https://pragprog.com/book/jaerlang/programming-erlang">Joe Armstrong's Programming Erlang.</a> Erlang is seen by programming language mavens as one of the real contenders for the crown of "most practical language for writing concurrent programs." I haven't sensed any real groundswell for Erlang recently, but a great book on the language might well contribute to an uptick in popularity.</p>α Geek Trend: PowerShell2007-03-05T07:40:00-10:002007-03-05T07:40:00-10:00larrytag:knowing.net,2007-03-05:/posts/2007/03/alpha-geek-trend-powershell/<p>I don't know if I missed an epochal MSDN article or what, but all of a sudden, PowerShell scripts are everywhere. There are too many to point to, but when it gets to the point of posting World of Warcraft utilities, something's afoot.</p>Assert(LOC(Test) ~= LOC(App))2007-03-02T09:16:00-10:002007-03-02T09:16:00-10:00larrytag:knowing.net,2007-03-02:/posts/2007/03/assertloctest-locapp/<p><a href="http://binstock.blogspot.com/2007/03/how-many-unit-tests-are-enough.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">Andrew Binstock discusses a talk with Agitar</a> about "how many unit tests are enough?" The upshot is that if the amount of test code is roughly equal to the amount of application code, that generally translates into code coverage of around 70% and is generally "pretty good shape."</p>
<p>I think …</p><p><a href="http://binstock.blogspot.com/2007/03/how-many-unit-tests-are-enough.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">Andrew Binstock discusses a talk with Agitar</a> about "how many unit tests are enough?" The upshot is that if the amount of test code is roughly equal to the amount of application code, that generally translates into code coverage of around 70% and is generally "pretty good shape."</p>
<p>I think that's probably about right, although I'll admit to rarely maintaining that level in a serious project -- shame on me.</p>Wii Controls SAP via Ruby On Rails Mashup2007-03-02T08:24:00-10:002007-03-02T08:24:00-10:00larrytag:knowing.net,2007-03-02:/posts/2007/03/wii-controls-sap-via-ruby-on-rails-mashup/<p>I know that sounds like a some kind of Bayesian spam-evader, but apparently Edward Herrmann, a programmer at Colgate-Palmolive, and colleagues hacked their Wii controller to send messages to their Ruby On Rails application, which drove their SAP system (film after the jump). What a geek-tastic transcendance of normal categories …</p><p>I know that sounds like a some kind of Bayesian spam-evader, but apparently Edward Herrmann, a programmer at Colgate-Palmolive, and colleagues hacked their Wii controller to send messages to their Ruby On Rails application, which drove their SAP system (film after the jump). What a geek-tastic transcendance of normal categories.</p>
<p>Thanks to Anthony Beecher for the tip!</p>Jolt Book Finalists: Incredibly Strong2007-03-01T16:06:00-10:002007-03-01T16:06:00-10:00larrytag:knowing.net,2007-03-01:/posts/2007/03/jolt-book-finalists-incredibly-strong/<p>Normally, I don't have a lot of problems making decisions like this, but I've changed my mind 3 times about which book will get my top vote in this year's Jolt Awards for Technical Books. This is a very, <em>very</em> good set of books:</p>
<p><strong>Books (Technical)</strong></p>
<p><em>Code Quality</em> (Addison-Wesley) by …</p><p>Normally, I don't have a lot of problems making decisions like this, but I've changed my mind 3 times about which book will get my top vote in this year's Jolt Awards for Technical Books. This is a very, <em>very</em> good set of books:</p>
<p><strong>Books (Technical)</strong></p>
<p><em>Code Quality</em> (Addison-Wesley) by Diomidis Spinellis</p>
<p><em>How to Break Web Software</em> (Addison-Wesley) by M. Andrews, J. Whittaker</p>
<p><em>Java Concurrency in Practice</em> (Addison-Wesley) by Brian Goetz et al</p>
<p><em>Rails Recipes</em> (Pragmatic Bookshelf) by Chad Fowler</p>
<p><em>Refactoring Databases</em> (Addison-Wesley) by Scott W. Ambler and P. J. Sadalage</p>
<p><em>Head First Object-Oriented Analysis and Design</em> (O'Reilly) by B. McLaughlin, G. Pollice and D. West</p>
<p><em>Ruby Cookbook</em> (O'Reilly) by Lucas Carlson and Leonard Richardson</p>
<p><em>CSS: The Missing Manual</em> (O'Reilly) by David Sawyer McFarland</p>Perhaps We Need Something Other Than Silver Bullets2007-03-01T13:39:00-10:002007-03-01T13:39:00-10:00larrytag:knowing.net,2007-03-01:/posts/2007/03/perhaps-we-need-something-other-than-silver-bullets/<p>Of course, debates on the theoretical effectiveness of programming paradigms may be missing the point entirely, given the <a href="https://blog.codinghorror.com/why-cant-programmers-program/">too-horrifying-to-be-true assertion</a> that many programmer applicants cannot:</p>
<blockquote>
<p>Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the …</p></blockquote><p>Of course, debates on the theoretical effectiveness of programming paradigms may be missing the point entirely, given the <a href="https://blog.codinghorror.com/why-cant-programmers-program/">too-horrifying-to-be-true assertion</a> that many programmer applicants cannot:</p>
<blockquote>
<p>Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".</p>
</blockquote>
<p>Last night, I watched a new TV show called <em>Are You Smarter Than A Fifth Grader?</em> (implication: yeah, I watch <em>American Idol</em>. Want to make something of it?) The contestant was a "Computer Systems Analyst." Rather than answer the question "How many decades in two millennia?" she took the money she had won previously (by triumphing over her doubts about "What is the closest star to the Earth?"). I think she left \$50,000 on the table. When asked to guess, she offered "20?" So, yeah, I'm thinking she might have trouble with FizzBuzz.</p>
<p>In far, far brighter news, Microsoft today announced the <a href="https://visualstudio.microsoft.com/vs/express/">Beginner Developer Learning Center</a>, which is intended to provide resources for people all the way to "zero experience." This is a really wonderful idea. I had inklings, but not direct knowledge, that something like this was in the works and I am looking forward to poking around the site.</p>
<p>P.S. Hilariously, Jeff's comments section is filled with people demonstrating their prowess by implementing -- and sometimes failing -- the program. Don't do that here. As Scott Hanselman says, "<a href="https://www.hanselman.com/blog/YouCantTeachHeightMeasuringProgrammerCompetenceViaFizzBuzz.aspx">You'll only die a little inside if you do.</a>"</p>I, Werewolf?2007-03-01T09:36:00-10:002007-03-01T09:36:00-10:00larrytag:knowing.net,2007-03-01:/posts/2007/03/i-werewolf/<p>My dispute with Wesner Moise continues...</p>
<p>\<a href="http://www.knowing.net/images/IWerewolf_716D/image02.png"" atomicselection="true"> I'm going to take this post with good humor -- the "werewolf" being a reference to the question of a silver bullet and an image in one of my responses. And the …</p><p>My dispute with Wesner Moise continues...</p>
<p>\<a href="http://www.knowing.net/images/IWerewolf_716D/image02.png"" atomicselection="true"> I'm going to take this post with good humor -- the "werewolf" being a reference to the question of a silver bullet and an image in one of my responses. And the "naked, pale-skinned" thing I'll take as pure jealousy of my chiseled physique, descended from Irish kings, tanned in the warm glow of the tropical sun, and followed, wherever I travel, by the wistful sighs of desirous women.</p>
<p><em>Anyway</em>...</p>
<p>What we're arguing about is whether there is any:</p>
<blockquote>
<p>single development, in either technology or in management technique, that by itself promises even one order-of-magnitude improvement in productivity, in reliability, in simplicity.</p>
</blockquote>
<p>This is how Fred Brooks defined the Silver Bullet for Software Engineering. In particular, Wes champions functional programming as a candidate.</p>
<p>My side of the original spat were these three posts in early December. In mid-January, we disagreed as to whether a 14-line Python recursive descent parser and Microsoft's implementation of regular expressions had any relevance to the question.</p>
<p>Now, he's posted something that's either just an ad hominem attack or a response. I'll take it as a response.</p>
<p>Wes says that I'm "wedded to the idea of no silver bullet." Not so. I'm not emotionally committed to it. I'm just convinced, absent substantive evidence to the contrary, by the arguments that Brook made two decades ago and which have held since. I'm aware that this places me in what <a href="https://en.wikipedia.org/wiki/The_Structure_of_Scientific_Revolutions">Kuhn</a> would label the "dominant paradigm" and sets me up to be pushed aside by some revolution. But they'll need more than mere assertions of merit to sweep me away: the werewolf hunters are going to have to ship commercial- and enterprise-sized applications that are developed an order-of-magnitude faster and that, to date, seems to be a sticking point.</p>
<p>Further, let's be clear that I'm a fan of functional programming: ref. this post preceding the spat in which I praise Wes's advocacy or re-read any of my posts in this spat, in which I regularly make it clear that I like functional programming approaches and am only skeptical of the hyperbole that it is a silver bullet.</p>
<p>The RegEx parser was held out as a template for a silver bullet approach. I pointed out that it's capabilities are vastly different than what we mean by RegEx capabilities in a language. The example is, in fact, a perfect example of Brook's central argument:</p>
<blockquote>
<p><em>the hard part of building software [is] the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation</em>.</p>
</blockquote>
<p>This was lost on Wes, who said:</p>
<blockquote>
<p>[W]ith this approach, we can get a reasonable implementation of regular expressions over lists of arbitrary types in less than 200 lines of code, which is two orders of magnitude more concise than Microsoft's more specific implementation over strings. I'll produce a port of this one day and post it in my blog.</p>
</blockquote>
<p>So there's a testable claim: a program that clones Microsoft's RegEx implementation including time and space constraints. I doubt it can be done in 200 lines of code. I doubt that "testing the fidelity of the representation" can be done in an additional 200 lines of code. But perhaps someone will prove me wrong.</p>
<p>Wes invokes <a href="https://www.intentsoft.com/">Charles Simonyi and IntentSoft</a> as perhaps the company that will deliver the silver bullet. I hope he's right. Simonyi is a fracking genius and is absolutely credible. However, surely it's fair to point out that IntentSoft has been in business for 5 years without shipping a product and Simonyi was talking about intentional programming for years before the company incorporated. Whatever the ultimate benefits of intentional programming, there appears to have been difficulty boot-strapping themselves into silver bullet productivity.</p>In Outlook, Any Way to Use Rules / Folders to Choose Reply Account?2007-02-27T09:11:00-10:002007-02-27T09:11:00-10:00larrytag:knowing.net,2007-02-27:/posts/2007/02/in-outlook-any-way-to-use-rules-folders-to-choose-reply-account/<p>I have an email account on a customer's Exchange server and I need to ensure that I reply using that account to email traveling over that server. I don't want it to be my default account for normal email. Essentially, I want to say, "When replying to mail in Outlook …</p><p>I have an email account on a customer's Exchange server and I need to ensure that I reply using that account to email traveling over that server. I don't want it to be my default account for normal email. Essentially, I want to say, "When replying to mail in Outlook Folder 'foo', use account <a href="mailto:'lobrien@foo.com'">'lobrien@foo.com'</a>." Is there a way to implement such a rule in Outlook or do I need to install VSTO and write some kind of Outlook extension?</p>Newsgator Online Has Stopped Working?2007-02-23T09:47:00-10:002007-02-23T09:47:00-10:00larrytag:knowing.net,2007-02-23:/posts/2007/02/newsgator-online-has-stopped-working/<p>Huh... I use Newsgator Online because I have so many machines. I don't know if I should hold this out as an example of the problem with browser-based applications, but suddenly Newsgator Online has stopped properly marking articles as read. The problem extends across both Firefox and IE7, so I …</p><p>Huh... I use Newsgator Online because I have so many machines. I don't know if I should hold this out as an example of the problem with browser-based applications, but suddenly Newsgator Online has stopped properly marking articles as read. The problem extends across both Firefox and IE7, so I don't think it's some errant extension in my browser.</p>
<p>Gee, that sucks.</p>Retail Security: Growth Industry2007-02-23T09:22:00-10:002007-02-23T09:22:00-10:00larrytag:knowing.net,2007-02-23:/posts/2007/02/retail-security-growth-industry/<p>Via Dale Churchward, standing in for Harry Pierson, comes word that Massachusetts lawmakers are considering a bill to punish retailers for personal data leaks. Dale speculates "there may be some good jobs in retail IT data security."</p>
<p>I think so. Of course, you should figure out what you love to …</p><p>Via Dale Churchward, standing in for Harry Pierson, comes word that Massachusetts lawmakers are considering a bill to punish retailers for personal data leaks. Dale speculates "there may be some good jobs in retail IT data security."</p>
<p>I think so. Of course, you should figure out what you love to do and figure out a way to get paid for doing it, but a good hobby for any self-employed person is trying to figure out non-glamorous retail industries that will have guaranteed growth. For instance, I live in a place that attracts retirees, little infrastructure, and has very high shipping costs -- I <em>know</em> that a retail medical supply company that delivered would have ample business.</p>
<p>Similarly, the rise of IT data security as a business cost is a <em>fait accompli.</em> I have a friend who does <a href="http://www.dailynugget.com/">security audits for a major consulting firm</a> and he's living large. Starting a business to do it on a smaller scale makes a lot of sense. I would imagine that it's a significant amount of upfront work and then you get a long-term maintenance contract, which is nice for a business, since I would think there's a significant amount of lock-in associated with that initial audit.</p>CG Portrait -- Not So Uncanny2007-02-23T08:52:00-10:002007-02-23T08:52:00-10:00larrytag:knowing.net,2007-02-23:/posts/2007/02/cg-portrait-not-so-uncanny/<p>Via Bill de h?ra comes this CG image. I don't follow the CG scene so I don't know how this compares to the best work of others, but I wouldn't pause for a second if I saw an image like this in an ad. So if stills have crossed …</p><p>Via Bill de h?ra comes this CG image. I don't follow the CG scene so I don't know how this compares to the best work of others, but I wouldn't pause for a second if I saw an image like this in an ad. So if stills have crossed the "<a href="https://en.wikipedia.org/wiki/Uncanny_Valley">uncanny valley</a>" could it be more than another decade for motion?</p>
<p>\<a href="http://forums.cgsociety.org/showthread.php%3ff%3d121%26t%3d399499"" atomicselection="true"></p>Ah hah! Ward Cunningham Explained!2007-02-22T08:24:00-10:002007-02-22T08:24:00-10:00larrytag:knowing.net,2007-02-22:/posts/2007/02/ah-hah-ward-cunningham-explained/<p>Fran Allen's Turing Award made me ponder future recipients. Most of the action in the software development world today rotates around business, not science. The Turing Award is supposed to honor technical contributions, not marketshare or business models. The problem with that is that "<a href="http://lambda-the-ultimate.org/node/2059">everything happened in the Golden Age …</a></p><p>Fran Allen's Turing Award made me ponder future recipients. Most of the action in the software development world today rotates around business, not science. The Turing Award is supposed to honor technical contributions, not marketshare or business models. The problem with that is that "<a href="http://lambda-the-ultimate.org/node/2059">everything happened in the Golden Age ('64-'74), right</a>?" Then I thought of an obvious candidate for a future Turing Award,<a href="https://en.wikipedia.org/wiki/Ward_Cunningham">someone who's elegant programs and approaches have had a lasting and practical impact</a>. Do you see?</p>
<p><strong>Ward Cunningham is a time traveller from 1969!</strong></p>Fran Allen Receives Turing Award: First Woman So Honored2007-02-22T08:09:00-10:002007-02-22T08:09:00-10:00larrytag:knowing.net,2007-02-22:/posts/2007/02/fran-allen-receives-turing-award-first-woman-so-honored/<p>The ACM honored Frances Allen with the Turing Award today. Allen started her career teaching FORTRAN to scientists in the late 50s, wrote a classic paper called <em>Program Optimization</em> in the mid-60s, and did major foundational work on optimizing transformations. She is the first woman to receive the Turing Award …</p><p>The ACM honored Frances Allen with the Turing Award today. Allen started her career teaching FORTRAN to scientists in the late 50s, wrote a classic paper called <em>Program Optimization</em> in the mid-60s, and did major foundational work on optimizing transformations. She is the first woman to receive the Turing Award (Grace Hopper didn't get a Turing Award?!?!?).</p>Visual Basic + Mono + LiveCD == Programming Console for Education?2007-02-22T08:03:00-10:002007-02-22T08:03:00-10:00larrytag:knowing.net,2007-02-22:/posts/2007/02/visual-basic-mono-livecd-programming-console-for-education/<p>Mono now has native support for Visual Basic. Linux already supports a "console" approach to your hardware: pop in a CD/DVD and boot into a specialized environment. While I think general-purpose computers are more appropriate for intermediate-and-better users, the console approach is very appealing when it comes to training …</p><p>Mono now has native support for Visual Basic. Linux already supports a "console" approach to your hardware: pop in a CD/DVD and boot into a specialized environment. While I think general-purpose computers are more appropriate for intermediate-and-better users, the console approach is very appealing when it comes to training beginners-to-intermediate in complex fields. For instance, I would love to have a "statistics machine," that gave me access to a suite of appropriate tools for my every-few-years need to do something more sophisticated than calculate a standard deviation. (In the meantime, I have Mathematica, which of course can do anything that's asked of it, but the point is that I have to essentially re-learn my own beginner-intermediate understanding of statistics, which is not facilitated by simply having a powerful tool.)</p>
<p>I could imagine a LiveCD that surfaced environments for ... <em>(snip an ever-growing list of arguably appropriate languages)</em> ... whatever languages you felt were necessary for a programming curriculum. Of course, VB's great advantage has been that it is both accessible and professionally used. Today, it would be hard to make the argument that Ruby, JavaScript, or PHP don't fit that philosophy better.</p>
<p>Lisp machines are fondly remembered by some. The only Mac I've ever owned was a "IIFX" that, for me, was essentially a Smalltalk console.</p>Perhaps I'm Wrong About Multitouch2007-02-21T09:44:00-10:002007-02-21T09:44:00-10:00larrytag:knowing.net,2007-02-21:/posts/2007/02/perhaps-im-wrong-about-multitouch/<p>A few commentors have taken me to task for drooling over the "multitouch" UI demo. My gut reaction is two-fold: I <em>want</em> a huge display (covering 150 degrees or so, with high-density pixels, of course) and I <em>want</em> direct manipulation. Although I'm pretty sure I'm right about the former, I …</p><p>A few commentors have taken me to task for drooling over the "multitouch" UI demo. My gut reaction is two-fold: I <em>want</em> a huge display (covering 150 degrees or so, with high-density pixels, of course) and I <em>want</em> direct manipulation. Although I'm pretty sure I'm right about the former, I could very well be wrong about the latter. A cautionary tale:</p>
<p>From about a year before it was publicly announced until recently, I have spent a good deal of time programming the Tablet PC. I did this primarily because I was a huge enthusiast for pen-based UIs. However, when you use a Tablet PC regularly and, especially, if you try to integrate pen-based components with regular UI elements, what you learn is that <strong>UIs have co-evolved with the keyboard and mouse.</strong> There's an old UI canard that "everyone agrees that mice are faster than keyboards: except the stopwatch." Similarly, I <em>adore</em> writing longhand with a pen, but it is unworkably slow as an input method and there is no word-processing software that is pen-specific. Not even OneNote works as an actual pen-based word-processor and while I admire the technical achievement of InkGestures, it doesn't make longhanding into Word appropriate.</p>
<p>More subtlely, virtually everything about the modern UI -- clicking, the size of icons, rectangular movements "through" menus, etc. -- work better with mice and the movements that come naturally from the wrist. Pens have more precision from the fingertips and use more of the arm and, of course, I don't think there's anyone who can actually <em>draw</em> better with a mouse than with a pen. But I know from experience that a pen is not nearly as transformative within Photoshop as you'd think -- again, the workflow is co-evolved with keyboard and mouse.</p>
<p>All of which is to say that I have a history of being mistaken about the long-term effectiveness of touch-based UIs.</p>Perceptive Pixels Multitouch: Pretty Much The Precrime Interface from Minority Report2007-02-20T09:22:00-10:002007-02-20T09:22:00-10:00larrytag:knowing.net,2007-02-20:/posts/2007/02/perceptive-pixels-multitouch-pretty-much-the-precrime-interface-from-minority-report/<p><a href="https://www.macrumors.com/2007/02/12/more-multitouch-from-jeff-han/">This is a much more impressive video</a> than the one from (Siggraph?) last year. The UI that Tom Cruise's character uses in <a href="https://www.imdb.com/title/tt0181689/">Minority Report</a> blew me away and this video, which demonstrates "multitouch" on a big screen (rear projection, I imagine), is amazingly similar. Of course, what they're showing may …</p><p><a href="https://www.macrumors.com/2007/02/12/more-multitouch-from-jeff-han/">This is a much more impressive video</a> than the one from (Siggraph?) last year. The UI that Tom Cruise's character uses in <a href="https://www.imdb.com/title/tt0181689/">Minority Report</a> blew me away and this video, which demonstrates "multitouch" on a big screen (rear projection, I imagine), is amazingly similar. Of course, what they're showing may not be a universally usable metaphor for users, but to me, this is like Engelbart demoing the mouse.</p>CodeGear Unveils Delphi for PHP, Delphi 2007 for Win32/Vista/Ajax2007-02-20T08:35:00-10:002007-02-20T08:35:00-10:00larrytag:knowing.net,2007-02-20:/posts/2007/02/codegear-unveils-delphi-for-php-delphi-2007-for-win32vistaajax/<p>CodeGear has unveiled the first of their new development environments since their not-quite-spin-off from Borland. First is Delphi 2007 for Win32, which actually supports Vista Aero development and Ajax (as well as Win32 development). Second is their first new language in years -- Delphi for PHP. No one from CodeGear saw …</p><p>CodeGear has unveiled the first of their new development environments since their not-quite-spin-off from Borland. First is Delphi 2007 for Win32, which actually supports Vista Aero development and Ajax (as well as Win32 development). Second is their first new language in years -- Delphi for PHP. No one from CodeGear saw fit to include me in the beta of these products (<em>cough cough</em>), but word from my spies is that Delphi for PHP, in particular, looks like a killer product.</p>Hints that Mix May Have Developer Announcements2007-02-20T07:55:00-10:002007-02-20T07:55:00-10:00larrytag:knowing.net,2007-02-20:/posts/2007/02/hints-that-mix-may-have-developer-announcements/<p>First John Lam and now John Montgomery have dropped broad hints that they will be making announcements at Mix, Microsoft's April-May show in Las Vegas targeted primarily at Web developers. Obviously, if one were planning on discussing something substantively at the <a href="https://msdn.microsoft.com/en-us/">PDC</a> in early October, one might announce it in …</p><p>First John Lam and now John Montgomery have dropped broad hints that they will be making announcements at Mix, Microsoft's April-May show in Las Vegas targeted primarily at Web developers. Obviously, if one were planning on discussing something substantively at the <a href="https://msdn.microsoft.com/en-us/">PDC</a> in early October, one might announce it in early May. Hmm... I wasn't planning on attending Mix, but y'know, I love announcements.</p>
<p>On the other hand, the <a href="https://www.universalmusic.com/">Pussycat Dolls</a> are the entertainment at the party and if there'd be one thing more depressing than standing around being reminded that I'm no kid anymore, it'd be doing it to a lip-synched version of "Dontcha."</p>
<p>I knew the Go-Gos. I saw the Go-Gos. The Go-Gos were friends of mine (well, Kathy once met my eyes and smiled and in that moment, I think there was a real connection). The Pussycat Dolls are no Go-Gos.</p>Lisp is the Language of the Gods2007-02-16T09:07:00-10:002007-02-16T09:07:00-10:00larrytag:knowing.net,2007-02-16:/posts/2007/02/lisp-is-the-language-of-the-gods/<p><a href="https://xkcd.com/224/">Brief and funny</a>.</p>Human Hampster Ball: Madness ... or Genius?2007-02-16T08:06:00-10:002007-02-16T08:06:00-10:00larrytag:knowing.net,2007-02-16:/posts/2007/02/human-hampster-ball-madness-or-genius/<p>A company's developed <a href="http://www.virtusphere.com/">a hamster ball in which you run while wearing VR goggl</a>es. My initial reaction was scorn, but adopting Mom's best "who cares what others think of how you look?" attitude, I have to admit it's kind of... well, I can't bring myself to say that I …</p><p>A company's developed <a href="http://www.virtusphere.com/">a hamster ball in which you run while wearing VR goggl</a>es. My initial reaction was scorn, but adopting Mom's best "who cares what others think of how you look?" attitude, I have to admit it's kind of... well, I can't bring myself to say that I think it'll succeed, but it <em>does</em> have a certain elegance of function.</p>
<p>Synchronicity-ously, last night I was reading <a href="https://www.newscientist.com/">New Scientist's</a> straight-faced pooh-poohing of the question "Could the world's energy crisis be solved by a sufficient quantity of hamsters running on wheels?" My favorite response delved into the question of whether caged wheel-running was <a href="https://www.freedomforanimals.org.uk/zoos/zfaq.htm">natural or stereotypic behavior</a>; I learned that if you give hamsters bedding of 20cm or more, their wheel-running drops dramatically. I <em>can't wait</em> until the next cocktail party!</p>I Love My Life...2007-02-15T13:08:00-10:002007-02-15T13:08:00-10:00larrytag:knowing.net,2007-02-15:/posts/2007/02/i-love-my-life/<p>Okay, this is pure gloating, but I get paid (or, at least, can justify time spent on...) to think about things as diverse as quantum computing, Ruby IDEs, and trustworthy Trackbacks. Even better, when Tina heard the humpback songstream she invoked a 'We live in Hawaii' break and we went …</p><p>Okay, this is pure gloating, but I get paid (or, at least, can justify time spent on...) to think about things as diverse as quantum computing, Ruby IDEs, and trustworthy Trackbacks. Even better, when Tina heard the humpback songstream she invoked a 'We live in Hawaii' break and we went up to freedive Puako Bay, where the whales sounded so close we kept expecting to see them appear in the distance (of course, they were actually about half-a-mile away).</p>
<p><em>So</em> much better than having a nice car...</p>I'm Interviewing D-Wave (Quantum Computer Guys): What Do Programmers Want To Know?2007-02-15T12:57:00-10:002007-02-15T12:57:00-10:00larrytag:knowing.net,2007-02-15:/posts/2007/02/im-interviewing-d-wave-quantum-computer-guys-what-do-programmers-want-to-know/<p>I'm arranging an interview with a VP at D-Wave, the quantum computer company. Any topics I should be sure to cover?</p>IntelliJ IDEA for Ruby Programming: First Look2007-02-15T12:35:00-10:002007-02-15T12:35:00-10:00larrytag:knowing.net,2007-02-15:/posts/2007/02/intellij-idea-for-ruby-programming-first-look/<p>My long-time favorite Java editor JetBrains/IntelliJ IDEA has added a Ruby plug-in that supports Rails. My initial reaction is that the vitally important quality of code completion is well below that of both Ruby In Steel and Komodo. Don't be too excited by the presence of the Analyze and …</p><p>My long-time favorite Java editor JetBrains/IntelliJ IDEA has added a Ruby plug-in that supports Rails. My initial reaction is that the vitally important quality of code completion is well below that of both Ruby In Steel and Komodo. Don't be too excited by the presence of the Analyze and Refactor menus either -- they're non-functional (or at least I couldn't get them to work).</p>
<p>The little "ruby" icon beside 'def HeloWorld' navigates to the view for the action -- that's pretty slick. You can generate Rails entities (controllers, etc.) via right-click context menus and you can Rake from within IDEA.</p>
<p>My quick feeling is that the plug-in, while welcome, seems to fall well short of the functionality in Komodo and Ruby In Steel much less the full array of functionality available in IDEA (or even ReSharper).</p>
<p>I wonder <a href="https://www.embarcadero.com/">if anyone else is working on a Ruby IDE</a>.</p>
<p>\<a href="http://www.knowing.net/images/IntelliJIDEAforRubyProgrammingFirstLook_AFE2/f13.png"" atomicselection="true"></p>FOAFBack: Delayed Spam Vulnerability?2007-02-15T10:36:00-10:002007-02-15T10:36:00-10:00larrytag:knowing.net,2007-02-15:/posts/2007/02/foafback-delayed-spam-vulnerability/<p>Hmm... If a site <em>delays</em> its association with a spammer until after it's been insinuated as a "friend" within target blogs, it can at a ripe moment trigger a slew of spammy FOAFbacks. Thoughts?</p>Streaming Humpback Lovesongs From Hawai'i2007-02-14T09:25:00-10:002007-02-14T09:25:00-10:00larrytag:knowing.net,2007-02-14:/posts/2007/02/streaming-humpback-lovesongs-from-hawaii/<p>Sexy cetacean sounds... oh yeah, baby ...</p>Shocking if True: D-Wave Demos 16-Qubit Quantum Computer2007-02-14T08:31:00-10:002007-02-14T08:31:00-10:00larrytag:knowing.net,2007-02-14:/posts/2007/02/shocking-if-true-d-wave-demos-16-qubit-quantum-computer/<p>Showing how clueless aggregator sites are, no one seems to be properly freaking out about the claims of D-Wave to be demoing a 16-qubit quantum computer with plans for a 1K-qubit computer within a year. <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A182620899621255925911652800605457197766%26anid%3D182620899621255925911652800605457197766&u=182620899621255925911652800605457197766&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553657728022&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A182620899621255925911652800605457197766%26anid%3D182620899621255925911652800605457197766&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">CNet story here</a>, straight <a href="https://www.dwavesys.com/">link to company here.</a></p>
<p>The shocking thing about this is that …</p><p>Showing how clueless aggregator sites are, no one seems to be properly freaking out about the claims of D-Wave to be demoing a 16-qubit quantum computer with plans for a 1K-qubit computer within a year. <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A182620899621255925911652800605457197766%26anid%3D182620899621255925911652800605457197766&u=182620899621255925911652800605457197766&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553657728022&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A182620899621255925911652800605457197766%26anid%3D182620899621255925911652800605457197766&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">CNet story here</a>, straight <a href="https://www.dwavesys.com/">link to company here.</a></p>
<p>The shocking thing about this is that a quantum computer's information processing ability goes up exponentially as its qubits increase. I believe that <a href="https://en.wikipedia.org/wiki/Shor%27s_algorithm">Shor's algorithm</a> factors at O(n) (goodbye standard cryptography) and <a href="https://en.wikipedia.org/wiki/Grover%27s_algorithm">Grover's algorithm</a> sorts at O(n\^2). The <em>theoretical</em> power is even more mind-blowing: small numbers of qubits can model incredibly complex things (I'm not going to post the thing I'm thinking of without finding a source).</p>
<p>What triggers a certain skepticism is that the few-qubit computers that have been developed didn't look like they were going to scale and everyone expected it to be quite a slog to find a scalable architecture. D-Wave's claims imply a <em>huge</em> breakthrough; of course, given the epochal nature of such a breakthrough, very smart people have been looking for just such a thing.</p>
<p>I'm utterly stunned. I use to play with simulating quantum computations and tried in vain to develop algorithmic design methods that were comprehensible, but I did not expect a significant quantum computer until the 2020s.</p>Maltese Falcon Stolen; $25,000 reward stolen.2007-02-13T18:30:00-10:002007-02-13T18:30:00-10:00larrytag:knowing.net,2007-02-13:/posts/2007/02/maltese-falcon-stolen-25000-reward-stolen/<p>An "official replica" of the movie bird was stolen from a restaurant in San Francisco.</p>
<p>The reward would be higher, but <a href="https://www.imdb.com/title/tt0033870/quotes">with a dollar of this, you can buy ten dollars of talk</a>.</p>More on OpenID, FOAF, and Trackback2007-02-13T16:50:00-10:002007-02-13T16:50:00-10:00larrytag:knowing.net,2007-02-13:/posts/2007/02/more-on-openid-foaf-and-trackback/<p>Dmitry Shecthman, who knows more about OpenID than I do, doesn't get why OpenID is important to making FOAF the validation route for Trackback. Here's my thinking, which has a 90% chance of being wrong (based on historical averages):</p>
<p>FOAF looks like this:</p>
<div class="highlight"><pre><span></span><code><span class="nt"><foaf:Person></span><span class="w"> </span><span class="nt"><foaf:name></span>Leigh<span class="w"> </span>Dodds<span class="nt"></foaf …</span></code></pre></div><p>Dmitry Shecthman, who knows more about OpenID than I do, doesn't get why OpenID is important to making FOAF the validation route for Trackback. Here's my thinking, which has a 90% chance of being wrong (based on historical averages):</p>
<p>FOAF looks like this:</p>
<div class="highlight"><pre><span></span><code><span class="nt"><foaf:Person></span><span class="w"> </span><span class="nt"><foaf:name></span>Leigh<span class="w"> </span>Dodds<span class="nt"></foaf:name></span><span class="w"> </span><span class="nt"><foaf:firstName></span>Leigh<span class="nt"></foaf:firstName></span><span class="w"> </span><span class="nt"><foaf:surname></span>Dodds<span class="nt"></foaf:surname></span><span class="w"> </span><span class="nt"><foaf:mbox_sha1sum></span>71b88e951cb5f07518d69e5bb49a45100fbc3ca5<span class="nt"></foaf:mbox_sha1sum></span><span class="w"> </span><span class="nt"><foaf:knows></span><span class="w"> </span><span class="nt"><foaf:Person></span><span class="w"> </span><span class="nt"><foaf:name></span>Dan<span class="w"> </span>Brickley<span class="nt"></foaf:name></span><span class="w"> </span><span class="nt"><foaf:mbox_sha1sum></span>241021fb0e6289f92815fc210f9e9137262c252e<span class="nt"></foaf:mbox_sha1sum></span><span class="w"> </span><span class="nt"><rdfs:seeAlso</span><span class="w"> </span><span class="na">rdf:resource=</span><span class="s">"http://rdfweb.org/people/danbri/foaf.rdf"</span><span class="nt">/></span><span class="w"> </span><span class="nt"></foaf:Person></span><span class="w"> </span><span class="nt"></foaf:knows></span><span class="w"> </span><span class="nt"></foaf:Person></span>
</code></pre></div>
<p>Which essentially says:</p>
<p>And one would expect this to be part of a file created by Leigh Dodd and sitting in his Website (perhaps at www.leighdodds.com/foaf.rdf) Given that Leigh created that file, one would think that Leigh would be willing to have his Trackback server automatically create links to Dan's comments regarding Leigh's blogposts (i.e., Dan is trusted by Leigh).</p>
<p>So, a Web of FOAF files (n.b. \<rdfs:seeAlso>) defines a social network graph and part of my premise is that anyone within a few degrees of separation from me could be trusted to -- oh I can't resist -- "Foafback."</p>
<p>So my first cut at a new Foafback software would be one that receives a Trackback post of this form:</p>
<div class="highlight"><pre><span></span><code><span class="nt">POST</span><span class="w"> </span><span class="nt">http</span><span class="o">://</span><span class="nt">www</span><span class="p">.</span><span class="nc">example</span><span class="p">.</span><span class="nc">com</span><span class="o">/</span><span class="nt">foafback</span><span class="o">/</span><span class="nt">5</span><span class="w"> </span><span class="nt">Content-Type</span><span class="o">:</span><span class="w"> </span><span class="nt">application</span><span class="o">/</span><span class="nt">x-www-form-urlencoded</span><span class="o">;</span><span class="w"> </span><span class="nt">charset</span><span class="o">=</span><span class="nt">utf-8</span><span class="w"> </span><span class="nt">title</span><span class="o">=</span><span class="nt">Foo</span><span class="o">+</span><span class="nt">Bar</span><span class="o">&</span><span class="nt">url</span><span class="o">=</span><span class="nt">http</span><span class="o">://</span><span class="nt">www</span><span class="p">.</span><span class="nc">bar</span><span class="p">.</span><span class="nc">com</span><span class="o">/&</span><span class="nt">excerpt</span><span class="o">=</span><span class="nt">My</span><span class="o">+</span><span class="nt">Excerpt</span><span class="o">&</span><span class="nt">blog_name</span><span class="o">=</span><span class="nt">Foo</span><span class="o">;</span><span class="nt">postedBy</span><span class="o">=</span><span class="nt">Dan</span><span class="o">+</span><span class="nt">Brickley</span>
</code></pre></div>
<p>And looks up Dan Brickley in Leigh's FOAF file and says "Oh yeah, Dan! Swell!" Except, of course, the value of <strong>postedBy</strong> can't possibly be "Dan Brickley" or <a href="mailto:dbrickley@rdfweb.org">dbrickley@rdfweb.org</a> or even Dan's mbox_sha1sum because spammers are going to figure out the Websites of those doing Foafbacks to your site and they will easily guess any publicly available identifier of those wishing to perform Foafbacks.</p>
<p>Therefore, I think you need an arbiter of identity; you need a service that Leigh's Foafback server and Dan's Foafback pinger can use to silently-after-the-first-time validate the identity of the person doing the posting.</p>
<p>The second cut at a new Foafback server works like this: The first time that Dan trys to Foafback to Leigh's site, he is redirected to Dan's OpenID provider (I think that's the term), logs in, and is told "www.leighdodds.com is requesting your email address" and Dan clicks "Okay, now and forever."</p>
<p>Leigh's Foafback server then receives OpenID credentials and a Foafback post (sans <strong>postedBy</strong> because the email of the person whose logged in is actually coming from the OpenID provider, not from the person performing the Trackback). Leigh's Foafback server validates that the OpenID identity (i.e., Dan's persona) is in the trust zone (i.e., can be reached via FOAF) and automatically generates a link.</p>
<p>So that's why I think you need OpenID.</p>
<p>Now, since I went to the bother of showing what a Trackback post actually looks like, I guess I should state the obvious, which is that the onus of calculating the FOAF graph ought not to be on Leigh (the original blogger) but on Dan, the Foafbacker. The Foafback pinger needs to include the route by which the poster is asserting a relationship (a list of FOAF URIs ought to suffice). The Foafback server needs to <em>verify</em> that route (at least once, but I can well imagine the admin software saying "These people have tracked back to you; include them in your FOAF?").</p>
<p>Spammers will subvert Overly Trusting Ted with second-order attacks ("Hey, love your site!" from "new friend" cutegirl15, whose FOAF is 10,000 phentermine sites) and there's little that can be done about that. But the list of targets for the spammers real purpose (which is to get links to their phentermine sites posted on high-traffic blogs) is limited to those in Ted's FOAF file. But of course Ted asserts that he knows Dave Winer, Robert Scoble, and Cory Doctorow, so the spammers have a target. But if the spammers link indiscriminantly to outbound links, they're already at 3 degrees of separation (Ted-cutegirl15-phentermine) and, of course, Ted won't validate (since Winer, Scoble, and Doctorow <em>don't</em> have Ted in <em>their</em> FOAF files). So the spammers wise up and validate the route to the potential target by checking the potential target FOAFs. But by validating along the directed graph, this severely limits the speed by which spammers can propagate "out" from Ted's trust zone (assuming that those in the top 1/2 of 1% of the blogging power curve don't become superpropagators by allowing six-degree-of-separation Foafbacks).</p>FOAF, OpenID, and Trackback2007-02-13T08:43:00-10:002007-02-13T08:43:00-10:00larrytag:knowing.net,2007-02-13:/posts/2007/02/foaf-openid-and-trackback/<p>Is a limited recursion through a FOAF graph based on OpenID the solution to Trackback? If that sentence isn't understandable, don't worry about it, but if it parses, continue...</p>
<p>The big problem, of course, is the initial trackback from those outside the limits of the graph. In such a case …</p><p>Is a limited recursion through a FOAF graph based on OpenID the solution to Trackback? If that sentence isn't understandable, don't worry about it, but if it parses, continue...</p>
<p>The big problem, of course, is the initial trackback from those outside the limits of the graph. In such a case, the attempted trackback raises the barrier above which a bot can rise: you must have an OpenID and you must propose a path through the graph. Such trackbacks are submitted for moderation (who doesn't check out those commenting on their posts? The A-Listers? Who gives a frack if this doesn't work for them? As a person well up the power-curve of blogging (99.9th percentile), I can assure you that it's not hard to read every mention that Technorati can find). </p>
<p>OK, so the obvious failure mode is that Trusting Ted, who's in my trustzone, allows into his zone a mole, who becomes a conduit for spammers. Several things occur to me about this: yeah, I have a blacklist in my trackback mechanism and it, too, is FOAF. Second, Trusting Ted FOAF probably has a distinctively low inbound:outbound ratio (again, the A-List bloggers love being supernodes, so they haven't noticed that supernodes have downsides). Third, it seems to me that the graphs of spammer's OpenID-based FOAFs would have characteristics: lots of transience, low connectivity to "real" FOAFs, non-power-law distributions (even if they developed mock supernodes, those would necessarily be transient), etc.</p>
<p>Given that the costs of any automated assault on such a system will approach zero, how is such a system vulnerable?</p>John Lam (ex-RubyCLR, now Microsoftian) Hints At Forthcoming Announcement2007-02-12T07:18:00-10:002007-02-12T07:18:00-10:00larrytag:knowing.net,2007-02-12:/posts/2007/02/john-lam-ex-rubyclr-now-microsoftian-hints-at-forthcoming-announcement/<p>John Lam, whose <a href="http://www.rubyclr.com/">RubyCLR</a> bridge led to a position in Microsoft's CLR team, hints that an announcement on his project (my guess, <em>X:</em>Ruby::C#:Java) will be forthcoming. Sadly, he hedges as to whether it will be MIX or <a href="https://msdn.microsoft.com/en-us/">PDC</a>. Of course, I'll be going to PDC, but if …</p><p>John Lam, whose <a href="http://www.rubyclr.com/">RubyCLR</a> bridge led to a position in Microsoft's CLR team, hints that an announcement on his project (my guess, <em>X:</em>Ruby::C#:Java) will be forthcoming. Sadly, he hedges as to whether it will be MIX or <a href="https://msdn.microsoft.com/en-us/">PDC</a>. Of course, I'll be going to PDC, but if there is a major dynamic language announcement at MIX, maybe I'll have to go to that as well...</p>If OOXML is Relevant, Why Is MS Unable to Provide Macintosh Converters?2007-02-07T18:07:00-10:002007-02-07T18:07:00-10:00larrytag:knowing.net,2007-02-07:/posts/2007/02/if-ooxml-is-relevant-why-is-ms-unable-to-provide-macintosh-converters/<p>Alan Zeichick relates what happened when the first .docx file was sent to BZ Media, a company that runs primarily on Macs. Microsoft says that everything's just swell:</p>
<blockquote>
<p>We are running on target and expect to release a free public beta version of the file format converters in Spring 2007 …</p></blockquote><p>Alan Zeichick relates what happened when the first .docx file was sent to BZ Media, a company that runs primarily on Macs. Microsoft says that everything's just swell:</p>
<blockquote>
<p>We are running on target and expect to release a free public beta version of the file format converters in Spring 2007, with final converters available six to eight weeks after we launch our next version of Office for Mac (which, as previously reported, will be available 6-8 months after general availability of Win Office.)</p>
</blockquote>
<p>But Alan wonders "How can Microsoft expect outside developers to be able to implement these new Office Open XML formats , when they can't even do that themselves in a timely matter? A six to eight month delay, after having more than a year to prepare?"</p>Detailed Terrain Map By Walking Around With a GPS?2007-02-02T10:37:00-10:002007-02-02T10:37:00-10:00larrytag:knowing.net,2007-02-02:/posts/2007/02/detailed-terrain-map-by-walking-around-with-a-gps/<p>My house is built on a bit of a ridge between two gullies (well, two collapsed lava tubes -- I <em>do</em> live on the side of an active volcano, after all). Grand plans include decks and terraces, but I can't envision them without a plan. Of course, I could hire surveyors …</p><p>My house is built on a bit of a ridge between two gullies (well, two collapsed lava tubes -- I <em>do</em> live on the side of an active volcano, after all). Grand plans include decks and terraces, but I can't envision them without a plan. Of course, I could hire surveyors to come in and map the place, but I have a GPS (actually, and I wonder if this is significant, I have <em>two</em> GPSes). What I want / wondering if it exists / wondering if I could code it is an application that takes a GPS track and creates a surface. Anyone know?</p>
<p>Why I wonder if having <em>two</em> GPSes is significant is because I would be very happy to leave one GPS sitting, perfectly motionless, while walking around with the other. While the GPS signal is salted with random imprecision, <em>if</em> that imprecision is the same for two different GPS devices, I would think that I could subtract the "jitter" of the stationary GPS from the track of the mobile GPS, perhaps providing me with the vaunted precision of "differential GPS." ... <em>5 minutes later</em> ... Hmm, not an encouraging experiment. Perhaps the GPS have to lock on to the same satellites?</p>First Look: Komodo 4 for Ruby Programming2007-02-01T11:04:00-10:002007-02-01T11:04:00-10:00larrytag:knowing.net,2007-02-01:/posts/2007/02/first-look-komodo-4-for-ruby-programming/<p>It's been a good couple weeks for Ruby IDEs. First, Ruby In Steel was released. Pretty much simultaneously, ActiveState released<a href="https://www.activestate.com/">Komodo 4 with support for Ruby</a>.</p>
<p>Komodo is a significantly "weightier" IDE and Ruby is just one of the many languages it supports. It is, I suppose, more akin to …</p><p>It's been a good couple weeks for Ruby IDEs. First, Ruby In Steel was released. Pretty much simultaneously, ActiveState released<a href="https://www.activestate.com/">Komodo 4 with support for Ruby</a>.</p>
<p>Komodo is a significantly "weightier" IDE and Ruby is just one of the many languages it supports. It is, I suppose, more akin to Visual Studio itself than to Ruby In Steel, which adds Ruby support <em>to</em> Visual Studio.</p>
<p>I still have much more head-to-head comparison to doing, but I wanted to point out a clear "win" for Komodo: the Ruby shell shown in the bottom pane here is graphical, allowing for a significantly easier cut-and-paste experience than the IRB-in-a-DOS-Box approach:</p>
<p>P.S. What the heck is "IDE_GeneticAlgorithm"? Well, a while back there was a flurry of posts about "the best" customized color schemes for programmers. I thought it would be funny to write a distributed genetic algorithm that "bred" color schemes and evolved them on the Web. The problem is the age-old challenge of creating a decent traversal through colorspace (that isn't along the gray axis). What's a way to encode color in a single number such that like values have like colors?</p>Gunnar Peterson on Message-Level Security2007-02-01T10:52:00-10:002007-02-01T10:52:00-10:00larrytag:knowing.net,2007-02-01:/posts/2007/02/gunnar-peterson-on-message-level-security/<p>Gunnar Peterson, responding to my posts on REST, <a href="https://1raindrop.typepad.com/1_raindrop/2007/02/current_state_e.html">says we cannot punt on message-level security</a>. He cites 3 security breaches as evidence that the "the 1995 security model" of "firewall, SSL, and a prayer" won't cut it. However, I don't believe that any of these breaches would have been thwarted …</p><p>Gunnar Peterson, responding to my posts on REST, <a href="https://1raindrop.typepad.com/1_raindrop/2007/02/current_state_e.html">says we cannot punt on message-level security</a>. He cites 3 security breaches as evidence that the "the 1995 security model" of "firewall, SSL, and a prayer" won't cut it. However, I don't believe that any of these breaches would have been thwarted by message-level security. In the first "an intruder hacked into a TJC Companies' database," the 2nd was a stolen file (whether physical or due to a login, I don't know), and the 3rd was a phishing attack. I don't see how encryption at the message-level would help in these scenarios. I'm not a computer security expert, but it seems to me that bad logins, physical loss (i.e., stolen laptops), and phishing account for the vast majority of security breaches. At the targeted assault level you have SQL injection and buffer overflows and rootkits. I've never heard of an actual man-in-the-middle security breach at the SSL/HTTPS level (feel free to enlighten me).</p>
<p>I'll reiterate my main point: KISS approaches work well enough for companies like Google, Amazon, and Apple/iTunes to transact billions of dollars in commerce. WS-Security, with its encryption-scheme-independent tokens and trust relationships, etc.: I just don't see the utility. I certainly see the complexity. Of course, the complexity is generally mitigated within a single vendor's stack, but interop is <em>actually</em> the "big promise" that started this whole Web Services thing and is much more a real-world issue than the supposed flaws of Internet protocols.</p>
<p>The only scenario that I can think of where I would not trust SSL/HTTPS at the message-level are actual wire transfers. And I think the people who program bank transfers have already figured out a way that works. (Very rapidly, but one penny at a time, as numerous people pointed out in response to my "Top 10 Things I've Learned About Computers From The Movies" post.)</p>Service-Oriented Systems That Actually Do Something2007-01-31T09:36:00-10:002007-01-31T09:36:00-10:00larrytag:knowing.net,2007-01-31:/posts/2007/01/service-oriented-systems-that-actually-do-something/<p>Sam Gentile says:</p>
<blockquote>
<p>[W]hen people bitch about WS-*, I don't get how its not obvious that "the main characteristics of Web services is communication over unreliable communication channels such as the Internet employing unreliable data transfer protocols such as HTTP, SMTP and FTP" and many of us need things …</p></blockquote><p>Sam Gentile says:</p>
<blockquote>
<p>[W]hen people bitch about WS-*, I don't get how its not obvious that "the main characteristics of Web services is communication over unreliable communication channels such as the Internet employing unreliable data transfer protocols such as HTTP, SMTP and FTP" and many of us need things like WS-RM and other standards to build real service-oriented systems that actually do something.</p>
</blockquote>
<p>Since I've stopped being polite about WS-*, I'll bite:</p>
<p>It's just not the case that "real service-oriented systems that actually do something" require the WS-* stack. Very reliable, very scalable, very large systems accomplish transactions over Internet protocols without using WS-RM. iTunes has now executed over a <em>billion</em> transactions without using WS-RM. And, subjectively, while Internet protocols are technically unreliable, they are reliable enough for me to order books from Amazon, track packages via FedEx, send my articles and invoices via email, etc. Professionally, they're reliable enough for a POX system I architected to transact \~\$100M a year in airline tickets.</p>
<p>WS-* advocates will probably say that the transactions involved in the examples cited above are relatively simple -- high volume, perhaps, but simple. "Financial services! Trading partners! Supply chains!" they will say. It is to these which, for years, I gave a "To be sure..." exemption. "REST works in most situations," I would say, "Although, to be sure..." and then I would capitulate. Perhaps with a high-enough volume, or a large-enough amount of money, or a time-sensitive enough clock, or a complex-enough transaction, one needed WS-*.</p>
<p>I no longer concede that. I say that, six or seven years into the Web Services era, the onus is on the WS-* advocates to prove the need, because the advocates of KISS approaches have, I think, amply demonstrated the viability of their approaches.</p>
<p>Further, let's posit for the sake of argument that reliability and re-ordering may be problems. I say that, in both those cases, the solution lies in <em>higher</em>, not <em>lower</em>, abstraction levels. If reliability is a problem, implement some form of <em>visible</em> ACK/NACK functionality (if you think about it, the idiom of "shopping cart checkout" that has evolved involves just such a <em>higher-level</em> ACK/NACK: "Press submit to finalize," "Here is the page acknowledging your order; an email has been sent to you acknowledging the order as well."). If reordering is a problem, first check for excessive conversational state, and second, put a frackin' <strong>messageOrder</strong> element in your XML. <strong>Visible, visible, visible</strong>.</p>
<p>Would it be better to have such functionality "for free" in a library or tool? Would such functionality be burdensome and error-prone? Sure, why not? All programming is burdensome and error-prone. But I assert that the odds of being <em>stumped</em> by a problem are <em>lower</em> in a Keep It Simple Stupid, highly-visible, higher-abstraction-level solution than they are in a WS-* architecture involving more than one vendors' service stack.</p>
<p>Further, I would argue that WS-* is unlikely to ultimately triumph for the very reason that it's attempting to inject a low-abstraction-level layer between a (posited-for-the-sake-of-argument) insufficient infrastructure and the business-programming domain. That <em>may</em> work for a single vendor, with a unified analysis of the supposed shortcomings of the infrastructure and the business-programming domain. But with <em>multiple</em> vendors, who not only don't share a single view, but whose view of the business-programming domain is <em>inherently</em> biased by their commercial interests, the confusion and slow progress that has characterized WS-* is more likely than not to continue.</p>Turing Award Recipient Jim Gray Missing At Sea2007-01-30T08:24:00-10:002007-01-30T08:24:00-10:00larrytag:knowing.net,2007-01-30:/posts/2007/01/turing-award-recipient-jim-gray-missing-at-sea/<p>Jim Gray, who did fundamental work on transaction processing and won theTuring Award, is missing off California's Farallon Islands. The good news is that weather has been good and he was sailing in a 40' yacht, which ought to provide ample shelter for a few days. The bad news is …</p><p>Jim Gray, who did fundamental work on transaction processing and won theTuring Award, is missing off California's Farallon Islands. The good news is that weather has been good and he was sailing in a 40' yacht, which ought to provide ample shelter for a few days. The bad news is that he was sailing alone and the ocean there can be nasty (cold, choppy, etc.)</p>Vista Install Problems2007-01-30T08:06:00-10:002007-01-30T08:06:00-10:00larrytag:knowing.net,2007-01-30:/posts/2007/01/vista-install-problems/<p>I lag behind in this brave new era.</p>
<p>I've been running Vista in VMWare virtual machines and having an acceptable, but not good, experience. No glass, no NUMA (one of the few interesting APIs targetting concurrency), performance less than stellar.</p>
<p>However, with the time at hand to install Vista to …</p><p>I lag behind in this brave new era.</p>
<p>I've been running Vista in VMWare virtual machines and having an acceptable, but not good, experience. No glass, no NUMA (one of the few interesting APIs targetting concurrency), performance less than stellar.</p>
<p>However, with the time at hand to install Vista to the actual boot disk, I am stymied. I have a Tyan K8W S2885, an uncommon-to-rare motherboard with an SSI EEB 3.0 form (12" x 13") that is pretty dang tight once heatsinks and cables are attached.</p>
<p>Vista informs me that I need to get a driver for the "Primary AMD IDE Channel" which confuses even my friends at AMD.</p>Ruby In Steel's Optional Type Assertions2007-01-29T10:36:00-10:002007-01-29T10:36:00-10:00larrytag:knowing.net,2007-01-29:/posts/2007/01/ruby-in-steels-optional-type-assertions/<p>In order to provide Intellisense for Ruby, a language that does not have explicit typing, <a href="http://www.sapphiresteel.com/">Ruby In Steel</a> turns to type inference. The built-in inferencing can be aided by adding type assertions to a function, for instance:</p>
<div class="highlight"><pre><span></span><code><span class="err">#:</span><span class="k">return</span><span class="err">:</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="n">nil</span>
<span class="w"> </span><span class="err">#:</span><span class="nl">arg</span><span class="p">:</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="n">String</span>
<span class="w"> </span><span class="n">def</span><span class="w"> </span><span class="n">Bar</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="w"> </span><span class="nv">@field</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">c</span>
<span class="w"> </span><span class="n">puts</span><span class="w"> </span><span class="nv">@field</span>
<span class="w"> </span><span class="k">end …</span></code></pre></div><p>In order to provide Intellisense for Ruby, a language that does not have explicit typing, <a href="http://www.sapphiresteel.com/">Ruby In Steel</a> turns to type inference. The built-in inferencing can be aided by adding type assertions to a function, for instance:</p>
<div class="highlight"><pre><span></span><code><span class="err">#:</span><span class="k">return</span><span class="err">:</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="n">nil</span>
<span class="w"> </span><span class="err">#:</span><span class="nl">arg</span><span class="p">:</span><span class="w"> </span><span class="n">c</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="n">String</span>
<span class="w"> </span><span class="n">def</span><span class="w"> </span><span class="n">Bar</span><span class="p">(</span><span class="n">c</span><span class="p">)</span>
<span class="w"> </span><span class="nv">@field</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">c</span>
<span class="w"> </span><span class="n">puts</span><span class="w"> </span><span class="nv">@field</span>
<span class="w"> </span><span class="k">end</span>
</code></pre></div>
<p>The type assertion block can be automatically added by typing "##" in the line above the function/method declaration (it fills in the type with "Object" to start). I'm a proponent of explicit typing in non-trivial projects so this is potentially a big deal to me. What I need, though (consider this a feature request, SapphireSteel) is some form of FxCop-like reporting / enforcement of type assertion "coverage."</p>
<p>That is, I would like to enforce a business rule "Ruby programs longer than 500 lines must have type assertions on all functions." To me, this would be a win-win: you can develop as fast-and-loose as you want, but if you want to check code into a team project, you have to add type information (which, in my mind, is extremely important to the <a href="https://blog.codinghorror.com/when-understanding-means-rewriting/">dominant task of understanding code</a>).</p>
<p>To be sure, in my experience the "DocComments" facility in VS/C# (typing "///" triggers a documentation block for the parameters) is widely ignored and FxCop enforcement is resented, but I think documenting parameters in a strongly typed language often seems gratuitous ("string firstName: a string representing the first name" and so forth), while I think everyone admits that type information is helpful for comprehension.</p>First Look: Ruby In Steel2007-01-29T09:36:00-10:002007-01-29T09:36:00-10:00larrytag:knowing.net,2007-01-29:/posts/2007/01/first-look-ruby-in-steel/<p>Here's the Ruby In Steel editing / debugging experience. Intellisense works dynamically -- as soon as you define a function, it becomes available to Intellisense. The debugging experience seems to be the standard VS one (that is, pretty darned good).</p>
<p>REPL functionality is provided by IRB in a console window: not ideal …</p><p>Here's the Ruby In Steel editing / debugging experience. Intellisense works dynamically -- as soon as you define a function, it becomes available to Intellisense. The debugging experience seems to be the standard VS one (that is, pretty darned good).</p>
<p>REPL functionality is provided by IRB in a console window: not ideal, but convenient. There's quick access to Rails, Rake, and Gems (see the second screenshot).</p>
<p>The install silently guessed wrong on my Ruby install location, which caused my very, very first "puts 2+2" to fail, but it was easy enough to guess that the issue could be fixed under Tools | Options...</p>
<p>So far, so good: more to come as experiences develop. I look forward to putting this head-to-head against Komodo.</p>
<p>\<a href="http://www.knowing.net/images/FirstLookRubyInSteel_8583/p22.png"" atomicselection="true"></p>I'm Greg Benford -- Nice!2007-01-28T15:30:00-10:002007-01-28T15:30:00-10:00larrytag:knowing.net,2007-01-28:/posts/2007/01/im-greg-benford-nice/<p>+-------------------------------------------------------------------------------+------------------------------------------------------------+
| <img alt="" height="200" src="http://paulkienitz.net/quizpix/skiffy_greg.jpg" width="200"> | I am:\ |
| | |
| | > <strong>Gregory Benford</strong> |
| | |
| | A master literary stylist who is also a working scientist. |
+-------------------------------------------------------------------------------+------------------------------------------------------------+</p>
<p><strong><a href="http://paulkienitz.net/skiffy.html">Which science fiction writer are you?</a></strong></p>Software Productivity: The Only Two Things That Matter2007-01-27T09:28:00-10:002007-01-27T09:28:00-10:00larrytag:knowing.net,2007-01-27:/posts/2007/01/software-productivity-the-only-two-things-that-matter/<p>Joel Spolsky's <a href="https://www.joelonsoftware.com/2007/01/21/the-big-picture/">review of Dreaming in Code</a> makes the point that <a href="http://www.osafoundation.org/">Chandler</a> is yet another high-quality data point that, contrary to the <a href="http://www.catb.org/%7eesr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html">initial exhortations</a>, Open Source is not a significantly-more-productive development methodology. It turns out that Open Source is an interesting <em>business model</em> (somewhat to my surprise) and that free-as-in-beer …</p><p>Joel Spolsky's <a href="https://www.joelonsoftware.com/2007/01/21/the-big-picture/">review of Dreaming in Code</a> makes the point that <a href="http://www.osafoundation.org/">Chandler</a> is yet another high-quality data point that, contrary to the <a href="http://www.catb.org/%7eesr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html">initial exhortations</a>, Open Source is not a significantly-more-productive development methodology. It turns out that Open Source is an interesting <em>business model</em> (somewhat to my surprise) and that free-as-in-beer is a killer <em>competitive strategy (</em><a href="http://www.eclipse.org/">Eclipse</a> or, for that matter, <a href="https://www.microsoft.com/en-us/windows">IE</a> and not surprising to anyone).</p>
<p>This is not to bash Chandler's ultimate deliverable: the Mozilla project would be a similar datapoint and Firefox is a great piece of software (and my choice of browser). OSS can certainly be high-quality (<a href="http://www.apache.org/">Apache</a> being another exemplar). But at this point it's clear that open-source development is not inherently <em>fast</em>. Joel fingers lack of analysis and design as Chandler's shortcoming, but veterans (should) know that promoting A&D as inherently speedy is laughable.</p>
<p>I'm all for spending vast amounts of energy debating the incremental issues of languages, tools, development methodologies, design paradigms, and so forth, but let's be clear that of all the things we know about software development, there are only two things that we <em>know</em> to be <em>inherently</em> highly productive:</p>
<ul>
<li>Well-treated talented programmers; and</li>
<li>Iterative development incorporating client feedback</li>
</ul>IDEs are Noise Compared to Version Control, Build System, and Bugtracking2007-01-27T08:45:00-10:002007-01-27T08:45:00-10:00larrytag:knowing.net,2007-01-27:/posts/2007/01/ides-are-noise-compared-to-version-control-build-system-and-bugtracking/<p>I was struck by the statement "the version control system is a first order effect on software, along with two others - the build system and the bugtracker. Those choices impact absolutely everything else. Things like IDEs, by comparison, don't matter at all," in a post by Bill de h?ra …</p><p>I was struck by the statement "the version control system is a first order effect on software, along with two others - the build system and the bugtracker. Those choices impact absolutely everything else. Things like IDEs, by comparison, don't matter at all," in a post by Bill de h?ra. It's not 100% true -- innovations like integrated debugging (Turbo Pascal?), refactoring (IDEA), and the Smalltalk browser -- can be enormous, but there is certainly more than a grain of truth to it.</p>IT Windfall from Vista == Consumer Costs2007-01-27T08:36:00-10:002007-01-27T08:36:00-10:00larrytag:knowing.net,2007-01-27:/posts/2007/01/it-windfall-from-vista-consumer-costs/<p>Alan Zeichick points out the absurdity of the position, touted by Microsoft, that Windows Vista will "generate" \$10 billion in new revenue for the California IT industry this year. Alan observes that IT revenue means that "someone else's costs have to go up" and that it's perverse to "celebrate a …</p><p>Alan Zeichick points out the absurdity of the position, touted by Microsoft, that Windows Vista will "generate" \$10 billion in new revenue for the California IT industry this year. Alan observes that IT revenue means that "someone else's costs have to go up" and that it's perverse to "celebrate a software update when its creator boasts that it will <em>increase</em> the cost of IT." Good for those who charge for technology per se, but bad for dentists, manufacturers, schools, restaurants, and others in the large majority of business who do not directly profit from work in IT.</p>Caffeinated Donut == 2 Cups of Coffee: American Ingenuity in the 21st Century2007-01-26T09:08:00-10:002007-01-26T09:08:00-10:00larrytag:knowing.net,2007-01-26:/posts/2007/01/caffeinated-donut-2-cups-of-coffee-american-ingenuity-in-the-21st-century/<p>There are those who say that American's time is past. That this great country, this bastion of ingenuity, has lost it's spark, it's insight, it's entrepreneurial spirit. To those people, I give molecular biologist Robert Bohannon, who has figured out how to mask the bitterness of caffeine in pastry, opening …</p><p>There are those who say that American's time is past. That this great country, this bastion of ingenuity, has lost it's spark, it's insight, it's entrepreneurial spirit. To those people, I give molecular biologist Robert Bohannon, who has figured out how to mask the bitterness of caffeine in pastry, opening the way to <a href="https://www.msn.com/">The Buzz Donut</a>.</p>
<p>I think this is a complete answer to the question of America's greatness in the 21st century.</p>Komodo 4 Supports Ruby2007-01-23T16:21:00-10:002007-01-23T16:21:00-10:00larrytag:knowing.net,2007-01-23:/posts/2007/01/komodo-4-supports-ruby/<p>Hard on the heels of Ruby In Steel's debut, Komodo 4 was released today. This new version supports Ruby and RoR. <em>via</em> <a href="http://binstock.blogspot.com/2007/01/enter-komodo-dragon.html">Binstock on Software</a>.</p>Microsoft Ought To Make A Bootable DOS Thumbdrive Image Available2007-01-23T15:30:00-10:002007-01-23T15:30:00-10:00larrytag:knowing.net,2007-01-23:/posts/2007/01/microsoft-ought-to-make-a-bootable-dos-thumbdrive-image-available/<p>I need to flash my motherboard BIOS in order to install Vista on my dual-processor desktop (I hope that will do the trick). I don't have a floppy drive anymore, not on any machine. I can't believe what a problem this has turned into. I go through my half-a-dozen rescue …</p><p>I need to flash my motherboard BIOS in order to install Vista on my dual-processor desktop (I hope that will do the trick). I don't have a floppy drive anymore, not on any machine. I can't believe what a problem this has turned into. I go through my half-a-dozen rescue CDs -- all of them are either utility-specific or Linux-based. The flash program from Tyan, though, is DOS-based. I started to follow the instructions to make a bootable thumbdrive, but they rely on a bootsect.bin extracted from a floppy! Back to square one. (P.S. Please don't send me a bootsect.bin -- I'm a trusting soul, but I'm not <em>that</em> trusting.)</p>
<p>I wish Microsoft had a "format thumbdrive to boot DOS" utility.</p>A Few 365-Day Challenges2007-01-23T11:23:00-10:002007-01-23T11:23:00-10:00larrytag:knowing.net,2007-01-23:/posts/2007/01/a-few-365-day-challenges/<p>Ooh, this is tough; I've received a couple one-a-day challenges that are on things that I really <em>do</em> need to do. <a href="http://polynomia.com/">Jimmy Norton</a> invited me into the Flickr Project 365 challenge, which is to post an image a day for a year. I am always dismayed to realize how little …</p><p>Ooh, this is tough; I've received a couple one-a-day challenges that are on things that I really <em>do</em> need to do. <a href="http://polynomia.com/">Jimmy Norton</a> invited me into the Flickr Project 365 challenge, which is to post an image a day for a year. I am always dismayed to realize how little I photograph Hawai'i, which is an incredibly beautiful place undergoing profound changes. Plus, if I did more photography, I'd have an excuse to buy a digital SLR.</p>
<p>Worse, <a href="http://westcoastgrid.blogspot.com/">Dan Ciruli</a> called me out for <a href="http://westcoastgrid.blogspot.com/2006/12/your-new-years-resolution.html">his pushup challenge</a>, which is "do 1 pushup and 1 crunch on day 1, 2 on day 2, 3 on day 3, etc." I hurt my back for the first time in my life a few months ago and know that the lesson is that I have to strengthen my core (#1 way to help your back: strengthen your gut). Plus, although I'm pretty fit aerobically, I have very little upper-body strength, so pushups are good for me, too.</p>
<p>I wonder if I should counter-challenge: "On day 1, swim a distance of 1' underwater..."</p>
<p>(Photo is me on the bottom at \~80')</p>Peter Coffee Leaves eWeek for Salesforce2007-01-22T14:18:00-10:002007-01-22T14:18:00-10:00larrytag:knowing.net,2007-01-22:/posts/2007/01/peter-coffee-leaves-eweek-for-salesforce/<p>Peter Coffee, who's been providing some of the most insightful, technically-based discussions of the IT and software industries for 18 years, has left eWeekto become Director of Platform Research at Salesforce.com. This is a significant loss to the field (although I am sure a great benefit to Salesforce.com …</p><p>Peter Coffee, who's been providing some of the most insightful, technically-based discussions of the IT and software industries for 18 years, has left eWeekto become Director of Platform Research at Salesforce.com. This is a significant loss to the field (although I am sure a great benefit to Salesforce.com). When I was an editor, especially at <em>AI Expert</em>, Peter used to keep me honest with pointed questions about the depth and accuracy of what we were publishing; one of my major regrets of my tenure as an editor is that I never got Peter to write for me.</p>
<p>In the years since, I've always looked forward to his columns. Peter always provided a great enterprise-level focus to his discussions, even as he stayed grounded in the realities of the programming experience. I think he's the most trustworthy development tool reviewer of the past decade, providing an invaluable service to countless developers at thousands of companies.</p>
<p>Well, so it goes. I wish the best to Peter and his family on this new direction....</p>Ruby In Steel (Ruby Development Environment in VS 2005) Goes 1.02007-01-22T10:10:00-10:002007-01-22T10:10:00-10:00larrytag:knowing.net,2007-01-22:/posts/2007/01/ruby-in-steel-ruby-development-environment-in-vs-2005-goes-10/<p>Ruby programmers using Windows should <a href="http://www.sapphiresteel.com/">definitely give this a look</a>; this is very high on my "IDEs to look out for" list. It should be noted that this is <em>not</em> a CLR / .NET-based Ruby; it's a plug-in to Visual Studio (Standard Edition and above; unfortunately, VS Express users are out …</p><p>Ruby programmers using Windows should <a href="http://www.sapphiresteel.com/">definitely give this a look</a>; this is very high on my "IDEs to look out for" list. It should be noted that this is <em>not</em> a CLR / .NET-based Ruby; it's a plug-in to Visual Studio (Standard Edition and above; unfortunately, VS Express users are out of luck) that targets the standard Ruby interpreter.</p>
<p>Although <a href="https://www.scintilla.org/SciTE.html">Scite</a> has it's charms (like loading in a fraction of a second), VS is definitely a superior environment for extended development.</p>SideShow A Breakthrough API?2007-01-18T10:53:00-10:002007-01-18T10:53:00-10:00larrytag:knowing.net,2007-01-18:/posts/2007/01/sideshow-a-breakthrough-api/<p>Scott Hanselman goes <a href="https://www.hanselman.com/blog/OptimusMiniThreeKeyboardAndWindowsVistaSideShow.aspx">ga-ga for the SideShow API</a>, the Vista functions for auxiliary displays. When I was first told about SideShow quite a while ago, the emphasis was on displays embedded in the outer shell of the notebook, just as clamshell phones often have a little aux display on their …</p><p>Scott Hanselman goes <a href="https://www.hanselman.com/blog/OptimusMiniThreeKeyboardAndWindowsVistaSideShow.aspx">ga-ga for the SideShow API</a>, the Vista functions for auxiliary displays. When I was first told about SideShow quite a while ago, the emphasis was on displays embedded in the outer shell of the notebook, just as clamshell phones often have a little aux display on their surface. I wrote an article back in 2004 in which I was more excited about "REM mode" applications (applications which can be run by a computer that's somewhere between hibernating and fully awake) than by the aux display itself.</p>
<p>Happily, the SideShow APIs seem to be fully decoupled from the physical attachment of the display, so Scott's excitement is primarily about using the SideShow APIs from one's main desktop machine to drive alternate displays.</p>Bad Comparison: 14 Line Python RegEx evaluator vs. Microsoft's 14K lines2007-01-18T09:54:00-10:002007-01-18T09:54:00-10:00larrytag:knowing.net,2007-01-18:/posts/2007/01/bad-comparison-14-line-python-regex-evaluator-vs-microsofts-14k-lines/<p>Wesner Moise points to "generalized regular expression matching" as a moderately hard problem that might serve as the basis for comparing programming languages and approaches. He says "Microsoft's implementation of regular expression matching over strings is spread across 24 files and 14,455 lines of code including comments and whitespace …</p><p>Wesner Moise points to "generalized regular expression matching" as a moderately hard problem that might serve as the basis for comparing programming languages and approaches. He says "Microsoft's implementation of regular expression matching over strings is spread across 24 files and 14,455 lines of code including comments and whitespace." (I'm not sure how he'd know that -- I assume he's talking about Rotor source code.)</p>
<p>He wonders if a functional approach could be more efficient and points to a 14-line Python program.</p>
<p>No, no, no: they are two incredibly different capabilities.</p>
<p>The Python program implements something like the original definition of a regular expression --restricted to that which can be expressed in a single line of Extended Backus-Naur Form without recursion. "Regular expression support" for today's languages means something very, very different, starting with compatibility with Perl5 and going from there. Backslashes, named groups, etc. are complex features that require, in any language, something in excess of 14 lines.</p>
<p>Having said <em>that</em>, regular expressions <em>are</em> a good fit for functional approaches. But, just to point out the lack of silver bullets, attempting to parse a left-recursive grammar (a grammar with a production of the form A->AB) will hang a simplistic recursive-descent parser. </p>Ruby Booksales Grow At 53%: Glass Half-Full or Half-Empty?2007-01-18T09:18:00-10:002007-01-18T09:18:00-10:00larrytag:knowing.net,2007-01-18:/posts/2007/01/ruby-booksales-grow-at-53-glass-half-full-or-half-empty/<p>Tim O'Reilly posts his always-intriguing quarterly analysis of the tech book sector.</p>
<p>Joe Gregorio <a href="https://bitworking.org/news/2007/01/Ruby-book-sales-growth-plummets-again">interprets</a> the 53% growth in sales of Ruby-based books as evidence that there is no "next Java" or "next framework." I'm sympathetic with his thesis, but I'm not sure that 53% growth counts as any kind …</p><p>Tim O'Reilly posts his always-intriguing quarterly analysis of the tech book sector.</p>
<p>Joe Gregorio <a href="https://bitworking.org/news/2007/01/Ruby-book-sales-growth-plummets-again">interprets</a> the 53% growth in sales of Ruby-based books as evidence that there is no "next Java" or "next framework." I'm sympathetic with his thesis, but I'm not sure that 53% growth counts as any kind of failure...</p>How To Win (Or At Least Get Considered) For A Jolt2007-01-17T09:02:00-10:002007-01-17T09:02:00-10:00larrytag:knowing.net,2007-01-17:/posts/2007/01/how-to-win-or-at-least-get-considered-for-a-jolt/<p>Andrew Binstock <a href="http://binstock.blogspot.com/2007/01/want-to-be-jolt-award-finalist-three.html">shares the advice</a> he gives when vendors call to ask why they didn't become finalists.</p>The Personal Threading Maturity Model2007-01-17T08:06:00-10:002007-01-17T08:06:00-10:00larrytag:knowing.net,2007-01-17:/posts/2007/01/the-personal-threading-maturity-model/<p>Alan Zeichick's proposal of an organizational Threading Maturity Model is an excellent contribution. As with object-orientation, it does not suffice for a single person to have mastery or near-mastery; the average ability of the team must be fair in order to maintain quality, chaos can be wrought by just one …</p><p>Alan Zeichick's proposal of an organizational Threading Maturity Model is an excellent contribution. As with object-orientation, it does not suffice for a single person to have mastery or near-mastery; the average ability of the team must be fair in order to maintain quality, chaos can be wrought by just one or two who are unaware, and reaching the higher levels requires cultivating talent for long enough for mastery to become part of the culture. However, the TMM isn't very descriptive of individual progress and does not provide guidance. I thought that I'd take a crack at a Personal Thread Maturity Model (PTMM) that might be a complementary effort. Opinions more than welcome.</p>
<ol>
<li><strong>Unaware</strong>: Single-threaded, may occasionally use threaded libraries unawares</li>
</ol>
<p>The first level of concurrent programming is no conscious use of concurrence at all. Since no mainstream language makes threads a first-class concern, threads are only used as, essentially side-effects, in library and infrastructure calls. No useful recommendations can be made for programmers in this category, as by definition they are not part of the conversation.</p>
<ol>
<li><strong>Casual</strong>: Conscious use of high-level abstractions (components, libraries) to solve specific problems</li>
</ol>
<p>Today, the large majority of programmers are in this category. They are aware of threads and their ability to run a lengthy calculation or IO operation while maintaining a responsive UI. They may use a drag-and-drop component or a Thread object that allows a calculation to run to completion. Their experience with threading is generally positive: the UI remains responsive, the network calls back, etc. They may be taken aback by all the dire warnings about multithreading that are so common to discussions.</p>
<p>Recommendations: Continue! "<a href="http://www.devx.com/">The simplest multithreading that can possibly work</a>" often does! Become comfortable with callbacks and asynchronous patterns (in .NET, the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=55984">Event-based Asynchronous Pattern</a>). Avoid guaranteed trouble spots: don't update the UI from a worker thread, don't rely on shared data maintaining its state, don't try to roll your own synchronization techniques.</p>
<ol>
<li><strong>Rigid</strong>: Significant use of multiple cores, coordination based on locking</li>
</ol>
<p>In this stage, programmers move from using threading as a pain-relief mechanism to a benefit that can be<em> </em>actively exploited. Asynchronous processing becomes an intentional part of design. They face their first wicked problems and gnarly bugs and become initiates in the "threading is hard" camp. Their designs focus on the use of locking to coordinate their programs; while they may occasionally use other techniques, locking is the hammer with which they pound the nail of concurrency.</p>
<p>Recommendations: The problem for this group is complacency. They've triumphed over problems and may have reached a plateau. They discover that core logic is often non-parallel and, although willing, may have a difficult time seeing places where asynchrony can contribute. At this level of mastery it may not be clear <em>on today's</em> <em>hardware</em> that further learning is necessary. Unfortunately, since manycore machines are not yet available and few of us have access to parallel clusters, moving beyond this level of maturity is driven more by faith and reading than by hands-on experience.</p>
<ol>
<li><strong>Flexible</strong>: Attempt to maximize use of cores, use of lock-free algorithms and data structures</li>
</ol>
<p>This level is characterized by a deeper theoretical understanding of asynchronous processing, mastery of basic techniques, and determination to achieve the best results possible. Programmers at this level seek, not just to exploit their processors, but to saturate them. This stage is additionally characterized by a shift from programming-language-based thinking to hardware-based thinking.</p>
<p>Recommendations: This is a very difficult phase to move through. Popular texts will not guide you <em>past</em> this stage, advancement requires a combination of textbook theory, hardware knowledge, and hands-on experience. (I'm not going to claim to have moved beyond this phase myself<em>.</em>)</p>
<ol>
<li><strong>Optimizing</strong>: Optimal use of parallel architecture</li>
</ol>
<p>Parallelism is fully incorporated into one's mental approach to solving problems via symbols. Specific techniques are considered not along any "better-worse" axis, but for their individual benefits and drawbacks. Multiple approaches may be incorporated into a single design. The world appears as falling strings of glowing numbers, bullets can be dodged, and Agent Smith can be defeated.</p>Give it a REST2007-01-17T07:11:00-10:002007-01-17T07:11:00-10:00larrytag:knowing.net,2007-01-17:/posts/2007/01/give-it-a-rest/<p>My latest in SD Times is up, in which I decide to stop being polite about WS-*.</p>Dugg: Ugh!2007-01-16T18:51:00-10:002007-01-16T18:51:00-10:00larrytag:knowing.net,2007-01-16:/posts/2007/01/dugg-ugh/<p>Sorry about the "Service Unavailable"s throughout the day. My post on "Top 10 Things I've Learned About Computers From The Movies and Any Episode of '24'" got >1800 Diggs today. My ISP called me in the middle of the afternoon and said that my site was consuming 100% CPU …</p><p>Sorry about the "Service Unavailable"s throughout the day. My post on "Top 10 Things I've Learned About Computers From The Movies and Any Episode of '24'" got >1800 Diggs today. My ISP called me in the middle of the afternoon and said that my site was consuming 100% CPU on its shared host. I had to take down <a href="http://www.dasblog.net">dasBlog</a> and serve up static pages only for a couple hours.</p>2006 Jolt Award Finalists: Development Environments2007-01-16T18:43:00-10:002007-01-16T18:43:00-10:00larrytag:knowing.net,2007-01-16:/posts/2007/01/2006-jolt-award-finalists-development-environments/<p>I'm the moderator of the "Development Environments" category of the Jolt Awards and this year the finalists are:</p>
<p><strong>Development Environments</strong></p>
<ul>
<li>EiffelStudio Open Source Edition (Eiffel Software)</li>
<li>IntelliJ IDEA (JetBrains)</li>
<li>IronPython (Microsoft)</li>
<li>Microsoft XNA Game Studio Express, XNA Framework (Microsoft)</li>
<li>NetBeans IDE (Sun Microsystems)</li>
<li>Wolfram Workbench (Wolfram Research)</li>
</ul>
<p>This makes for …</p><p>I'm the moderator of the "Development Environments" category of the Jolt Awards and this year the finalists are:</p>
<p><strong>Development Environments</strong></p>
<ul>
<li>EiffelStudio Open Source Edition (Eiffel Software)</li>
<li>IntelliJ IDEA (JetBrains)</li>
<li>IronPython (Microsoft)</li>
<li>Microsoft XNA Game Studio Express, XNA Framework (Microsoft)</li>
<li>NetBeans IDE (Sun Microsystems)</li>
<li>Wolfram Workbench (Wolfram Research)</li>
</ul>
<p>This makes for three interesting match-ups at the "sub-category" level: EiffelStudio and IronPython are primarily language-driven, IDEA and NetBeans are broadly capable Java heavyweights, and XNA and Wolfram Workbench are for the development of specialized types of applications. Oh, how I wish the judges' discussions could be published.</p>2006 Jolt Award Finalists: Other Categories2007-01-16T18:43:00-10:002007-01-16T18:43:00-10:00larrytag:knowing.net,2007-01-16:/posts/2007/01/2006-jolt-award-finalists-other-categories/<p><strong>Change and Configuration Management</strong></p>
<p>AnthillPro3 (Urbancode)</p>
<p>Automated Build Studio (AutomatedQA)</p>
<p>FLEXnet Connect (Macrovision)</p>
<p>Perforce: the Fast Software Configuration (Perforce Software)</p>
<p>Team Foundation Server (Microsoft Corporation)</p>
<p>CA Wily Introscope ChangeDetector (CA / Wily Technology)</p>
<p><strong>Collaboration Tools</strong></p>
<p>Adobe Acrobat Connect Professional (Adobe Systems)</p>
<p>Code Collaborator (Smart Bear Software)</p>
<p>Confluence (Atlassian Software Systems)</p>
<p>NetBeans …</p><p><strong>Change and Configuration Management</strong></p>
<p>AnthillPro3 (Urbancode)</p>
<p>Automated Build Studio (AutomatedQA)</p>
<p>FLEXnet Connect (Macrovision)</p>
<p>Perforce: the Fast Software Configuration (Perforce Software)</p>
<p>Team Foundation Server (Microsoft Corporation)</p>
<p>CA Wily Introscope ChangeDetector (CA / Wily Technology)</p>
<p><strong>Collaboration Tools</strong></p>
<p>Adobe Acrobat Connect Professional (Adobe Systems)</p>
<p>Code Collaborator (Smart Bear Software)</p>
<p>Confluence (Atlassian Software Systems)</p>
<p>NetBeans IDE (Sun Microsystems)</p>
<p>Sugar Professional (SugarCRM)</p>
<p>TeamCity (JetBrains)</p>
<p><strong>Database Engines and Data Tools</strong></p>
<p>Coral8 Engine (Coral8)</p>
<p>dbdeploy (ThoughtWorks)</p>
<p>MarkLogic Server (Mark Logic)</p>
<p>SQL Anywhere (Sybase iAnywhere)</p>
<p>SQL Refactor (Red Gate Software)</p>
<p>Visual Studio 2005 Team Edition for Database Professionals (Microsoft)</p>
<p><strong>Design and Modeling</strong></p>
<p>Compuware OptimalJ (Compuware)</p>
<p>Corticon Business Rules Modeling Studio (Corticon Technologies)</p>
<p>MagicDraw UML (No Magic)</p>
<p>RAVEN (Ravenflow)</p>
<p>stpBA Storyboarding for Microsoft Visual Studio 2005 Team System (stpsoft ltd.)</p>
<p>Stylus Studio 2007 XML Enterprise Suite (DataDirect Technologies)</p>
<p><strong>Enterprise</strong> <strong>Tools</strong></p>
<p>Cape Clear ESB Platform (Cape Clear Software)</p>
<p>Liferay Portal (Liferay)</p>
<p>Mule (MuleSource)</p>
<p>Appistry EAF (Appistry)</p>
<p>Pentaho Open BI Suite (Pentaho)</p>
<p>TeamCity (JetBrains)</p>
<p><strong>Libraries, Frameworks and Components</strong></p>
<p>JViews (ILOG)</p>
<p>NetAdvantage for .NET (Infragistics)</p>
<p>telerik r.a.d.controls for WinForms (Telerik)</p>
<p>.NET Framework 3.0 (Microsoft)</p>
<p>Intel Threading Building Blocks for Linux (Intel)</p>
<p>Microsoft XNA Game Studio Express, XNA Framework (Microsoft)</p>
<p>The Mono Project (Novell)</p>
<p><strong>Mobile Development</strong></p>
<p>AccuSPEECH (Vangard Voice Systems)</p>
<p>Carbide .c++ Professional Edition (Nokia)</p>
<p>Crossfire (AppForge)</p>
<p>Qtopia Greenphone (Trolltech)</p>
<p>NetBeans Mobility Pack 5.5 and Sun Java Wireless Tookit 2.2 (Sun Microsystems)</p>
<p>Qtopia (Trolltech)</p>
<p><strong>Project Mangement Tools</strong></p>
<p>6th Sense Analytics (6th Sense Analytics)</p>
<p>DevPlan (TechExcel)</p>
<p>Rally Enterprise (Rally Software)</p>
<p>TargetProcess (TargetProcess)</p>
<p>Teamwork (Open Lab)</p>
<p>V1: Agile Enterprise (VersionOne)</p>
<p><strong>Security</strong></p>
<p>AppScan (Watchfire)</p>
<p>beSTORM (Beyond Security)</p>
<p>DevInspect (S.P.I. Dynamics)</p>
<p>Fortify Defender (Fortify Software)</p>
<p>Fortify Source Code Analysis (SCA) (Fortify Software)</p>
<p>Metasploit Framework (Metasploit)</p>
<p><strong>Automated Testing Tools</strong></p>
<p>AgitarOne (Agitar Software)</p>
<p>CodePro AnalytiX (Instantiations)</p>
<p>Mindreef SOAPscope (Mindreef)</p>
<p>Parasoft Jtest (Parasoft)</p>
<p>Parasoft SOAtest (Parasoft)</p>
<p>TestComplete (AutomatedQA)</p>
<p><strong>Bug and Defect Tracking Tools</strong></p>
<p>JIRA (Atlassian Software Systems)</p>
<p>OnTime 2007 Hosted (Axosoft)</p>
<p>Software Planner Professional (Pragmatic Software Co.)</p>
<p>TestTrack Studio (Seapine Software)</p>
<p><strong>Utilities</strong></p>
<p>Adobe Captivate 2 (Adobe Systems)</p>
<p>AutoPatch (SourceForge)</p>
<p>ElectricCommander (Electric Cloud)</p>
<p>TEKchecker and StyleWriter (ClearSpecs Enterprises)</p>
<p>TextMate (Macromates)</p>
<p>VMware Lab Manager (VMware)</p>
<p><strong>Web Development</strong></p>
<p>Adobe Flex 2 (Adobe Systems)</p>
<p>IntelliJ IDEA (JetBrains)</p>
<p>Kapow Mashup Server (Kapow Technologies)</p>
<p>LignUp Communications Application Server (LignUp)</p>
<p>Mindreef SOAPscope Server (Mindreef)</p>
<p>NetBeans Visual Web Pack (Sun Microsystems)</p>
<p><strong>Web Sites/Developer Networks</strong></p>
<p>CM Crossroads (CMC Media)</p>
<p>IBM developerWorks (IBM)</p>
<p>Sun Developer Network (Sun Microsystems)</p>
<p>Koders.com (Koders)</p>
<p>Krugle (Krugle)</p>
<p>Makezine.com (O'Reilly)</p>
<p>The Code Project (The Code Project)</p>2006 Jolt Award Finalists, Books2007-01-16T18:42:00-10:002007-01-16T18:42:00-10:00larrytag:knowing.net,2007-01-16:/posts/2007/01/2006-jolt-award-finalists-books/<p><strong>Books (Practical/General Developer Interest)</strong></p>
<p><em><a href="https://www.amazon.com/gp/product/0201699699">Agile Software Development: The Cooperative Game</a></em> (Addison-Wesley) by Alistair Cockburn</p>
<p><em><a href="https://www.amazon.com/gp/product/0321336623">Catastrophe Disentanglement</a></em> (Addison-Wesley) by E. M. Bennatan</p>
<p><em><a href="https://www.amazon.com/gp/product/1590596234">Eric Sink on the Business of Software</a></em> (Apress) by Eric Sink</p>
<p><em><a href="https://www.amazon.com/gp/product/097451408X">Practices of an Agile Developer</a></em> (Pragmatic Bookshelf) by Venkat Subramaniam and Andy Hunt</p>
<p><em><a href="https://www.amazon.com/gp/product/0977213315">Software Creativity 2.0 …</a></em></p><p><strong>Books (Practical/General Developer Interest)</strong></p>
<p><em><a href="https://www.amazon.com/gp/product/0201699699">Agile Software Development: The Cooperative Game</a></em> (Addison-Wesley) by Alistair Cockburn</p>
<p><em><a href="https://www.amazon.com/gp/product/0321336623">Catastrophe Disentanglement</a></em> (Addison-Wesley) by E. M. Bennatan</p>
<p><em><a href="https://www.amazon.com/gp/product/1590596234">Eric Sink on the Business of Software</a></em> (Apress) by Eric Sink</p>
<p><em><a href="https://www.amazon.com/gp/product/097451408X">Practices of an Agile Developer</a></em> (Pragmatic Bookshelf) by Venkat Subramaniam and Andy Hunt</p>
<p><em><a href="https://www.amazon.com/gp/product/0977213315">Software Creativity 2.0</a></em> (DeveloperDotStar) by Robert L. Glass</p>
<p><em><a href="https://www.amazon.com/gp/product/0735605351">Software Estimation: Demystifying the Black Art</a></em> (Microsoft Press) by Steve McConnell</p>
<p><em><a href="https://www.amazon.com/gp/product/093263365X">Weinberg on Writing: The Fieldstone Method</a></em> (Dorset House) by Gerald M. Weinberg</p>
<p><strong>Books (Technical)</strong></p>
<p><em><a href="https://www.amazon.com/gp/product/0321166078">Code Quality</a></em> (Addison-Wesley) by Diomidis Spinellis</p>
<p><em><a href="https://www.amazon.com/gp/product/0321369440">How to Break Web Software</a></em> (Addison-Wesley) by M. Andrews, J. Whittaker</p>
<p><em><a href="https://www.amazon.com/gp/product/0321349601">Java Concurrency in Practice</a></em> (Addison-Wesley) by Brian Goetz et al</p>
<p><em><a href="https://www.amazon.com/gp/product/0977616606">Rails Recipes</a></em> (Pragmatic Bookshelf) by Chad Fowler</p>
<p><em><a href="https://www.amazon.com/gp/product/0321293533">Refactoring Databases</a></em> (Addison-Wesley) by Scott W. Ambler and P. J. Sadalage</p>
<p><em><a href="https://www.amazon.com/gp/product/0596008678">Head First Object-Oriented Analysis and Design</a></em> (O'Reilly) by B. McLaughlin, G. Pollice and D. West</p>
<p><em><a href="https://www.amazon.com/gp/product/0596523696">Ruby Cookbook</a></em> (O'Reilly) by Lucas Carlson and Leonard Richardson</p>
<p><em><a href="https://www.amazon.com/gp/product/0596526873">CSS: The Missing Manual</a></em> (O'Reilly) by David Sawyer McFarland</p>
<p>Not a bad bookshelf...</p>
<p>Congratulations to all the finalists!</p>The Threading Maturity Model2007-01-15T13:06:00-10:002007-01-15T13:06:00-10:00larrytag:knowing.net,2007-01-15:/posts/2007/01/the-threading-maturity-model/<p>Alan Zeichick proposes a Threading Maturity Model.</p>Top 10 Things I've Learned About Computers From The Movies and Any Episode of "24"2007-01-14T12:29:00-10:002007-01-14T12:29:00-10:00larrytag:knowing.net,2007-01-14:/posts/2007/01/top-10-things-ive-learned-about-computers-from-the-movies-and-any-episode-of-quot24quot/<p>Allow me to reiterate. <strong>Update:</strong> Fixed link.</p>5 Things You Probably Don't Know About Me2007-01-14T09:35:00-10:002007-01-14T09:35:00-10:00larrytag:knowing.net,2007-01-14:/posts/2007/01/5-things-you-probably-dont-know-about-me/<p>Steve Pietrek tagged me, so...</p>
<p>I may be <strong>the world's worst student</strong>. I graduated High School by the margin of a D+ (in English yet, where I had 780s on both my SATs and boards), I dropped out of college (where I had dual majors in Marine Biology and, yes …</p><p>Steve Pietrek tagged me, so...</p>
<p>I may be <strong>the world's worst student</strong>. I graduated High School by the margin of a D+ (in English yet, where I had 780s on both my SATs and boards), I dropped out of college (where I had dual majors in Marine Biology and, yes, English), and I walked out of the only Adult Education class I ever took (in screenwriting, even though I've sold a screenplay). It's bad enough that I'm never satisfied with the pacing the teacher chooses, but even worse is that I'm a <em>huge</em> skeptic: I synthesize information by reflexively seeking counterarguments. Among peers, that's fine, because saying "But that's not the case with X" is part of a mutual search for an optimum approach. I'm not talking about once per semester, I'm saying this is my <em>mode</em> when learning.</p>
<p>This way of thinking is why, <strong>politically and philosophically, I'm a pragmatist.</strong> Sure, for the past decade I've probably looked like an unrepentant liberal, but that's primarily a reaction to the rise of the ideologically driven right and the particularly reprehensible hypocrisy of those "conservatives" who are actively working against the very restraints on power that were the greatest achievement of the founders of our country. (I think the founding of the United States was one of the greatest triumphs in the entire history of civics; a view that is not generally identified as "liberal.")</p>
<p>I bet you didn't know that <strong>I solved backgammon</strong>. And not in the sense of "wrote a really good computer program" (although I did that, too), but in the sense that I wrote down several pages of equations the maximum value of which, when applied to all legal moves, provides the objective best move. I don't have the equation or program anymore (I don't even have the <a href="https://en.wikipedia.org/wiki/DECtape">DECTape</a> on which the program was stored...), but the solution can be described very simply: that move is best which creates the greatest delta between your situation and your opponents in the average number of rolls left to bear off all your men. The average number of rolls to bear off your stones can be computed trivially when there is no engagement and you are simply in a race to bear off (average number of rolls is a little different than the intermediate backgammon tactic of tracking the "count" of stones * positions, but not much) . When you <em>are</em> engaged, if you momentarily put aside "hitting" and think only of blocking, it's still pretty easy to figure out (since the efficacy of a block can be compared: a block that extends over six points, for instance, has a 100% chance of blocking all moves from an opponent's stone butting up against it). When you add hitting to the equation, you both directly "push back" the stone and you have a chance of blocking it's re-entrance to the board. But what about the evolution of the board, you ask? Well, that's why you recurse. But <em>unlike</em> <em>chess,</em> the evolution of the board is controlled by probability. Therefore, you only have to look ahead a <em>tiny</em> amount of moves before the immediate contribution of possible future board configuration becomes vanishingly small (I don't recall <em>ever</em> seeing a situation where the correct move altered by extending the look-ahead past 4). Since you can calculate the average number of rolls left for both players, it's easy to calculate the probability of reversing the current situation and therefore determining when a double is rational to offer or accept. Thus is backgammon solved: strategy isn't relevant, since an objective score for every possible move can be rapidly calculated.</p>
<p>I think <strong>I'm quite nice</strong>. You might not know that if you just know me from my blog and articles. I try to always be fair when I write, but that's not the same as being nice, which I think I am in person. Even though I reflexively seek holes in every argument (see above), I don't feel compelled to share them, especially in social situations. True, I <em>like</em> the argumentative social structure that was common in Boston and New York. I think I would have been a helluva good rabbi, if being an atheist raised as an Irish Catholic didn't disqualify me. Oh and I bet rabbis have to go to school (see above)?</p>
<p>You might know this -- it's no secret -- but if you want to understand me, it's important to know that <strong>my wife Tina was diagnosed with leukemia and given 18 months to live</strong> when we were 29-year-old newlyweds (14 years ago). She had a bone-marrow transplant from her only brother and I decided that I was not interested in pursuing success at the expense of my time on Earth with her. So, although I love work and spend a lot of time working, when it comes to making the kinds of sacrifices that are necessary to excel in business, I'm not interested. A few years ago I was offered a dream job, one that would undoubtedly have made me lots of money and put me on the track to retiring early as a millionaire. All I had to do was devote myself to this major company for 10 or 15 years, buy a couple suits and a drawerful of stylish black turtlenecks, and do a lot of traveling. It was incredibly easy to turn down. And if I didn't want <em>that</em> job... We moved to Hawai'i six months later.</p>
<p>Okay, so who to tag... Who do I know-but-not-know and who blogs? Hmm... <a href="http://thedatafarm.com/blog/">Julie Lerman</a>, <a href="http://www.brains-n-brawn.com/">casey chesnut</a>, and <a href="https://blog.codinghorror.com/">Jeff Atwood</a> don't seem to have yet been caught in this Ponzi scheme. I bet Alan Zeichick and <a href="http://www.ambysoft.com/">Scott Ambler</a> will have interesting things to say. I wonder if <a href="http://binstock.blogspot.com/">Andrew Binstock</a> can be persuaded to go off-topic.</p>Dog Sighting2007-01-12T10:29:00-10:002007-01-12T10:29:00-10:00larrytag:knowing.net,2007-01-12:/posts/2007/01/dog-sighting/<p>Sorry about such a string of offtopics but now that I've posted something SD-related, I just <em>have</em> to tell you about literally bumping into Beth and Duane "Dog" Chapman at the airport. Tina and I were over in Honolulu a few days ago, all bleary-eyed and coffee-deprived from an early …</p><p>Sorry about such a string of offtopics but now that I've posted something SD-related, I just <em>have</em> to tell you about literally bumping into Beth and Duane "Dog" Chapman at the airport. Tina and I were over in Honolulu a few days ago, all bleary-eyed and coffee-deprived from an early morning flight, and I had to grab Tina and yank her back lest she knock over this bottle-blonde woman with huge knockers making her way to the curb. "Beth" I mouth. (If you haven't seen the show Dog The Bounty Hunter you might think I'm a sexist pig for characterizing a woman by the size of her breasts. If you have seen the show, you'll understand that it'd be like not describing Yao Ming as "tall.")</p>
<p>So anyway, sure enough, it's all there -- Dog, Baby Lisa, the big black SUV van. A guy taps me on the shoulder and says "I'm going to call my mother and put you on the phone. You have to confirm that we've actually seen Dog." So I do that, and she starts <em>crying</em> because her favorite people in the world are: Dog, Elvis, and Princess Diana. How's that for company?</p>
<p>I know I have to alert my friend <a href="http://www.dailynugget.com/">Fabian</a>, who cracks up at the show. I send a text message "Beth n Dog at airport." As luck would have it, Fabian's in the airport in San Juan, Puerto Rico when he gets the SMS. Now apparently, Fabian doesn't have my cell phone in <em>his</em> cell phone, so he just gets the text message from an 808 area code. As you can imagine, his first thought is "Beth and Dog are in Puerto Rico?" and his second thought is "Why are they telling me?" and his <em>third</em> thought is "I guess they need a ride." So about thirty seconds later I get a phone call and through a bad international connection I hear this very tentative "Huh...hello?"</p>
<p>Okay, back to regularly scheduled programming...</p>Writing Your Own Language: Choose a VM or Native?2007-01-12T08:46:00-10:002007-01-12T08:46:00-10:00larrytag:knowing.net,2007-01-12:/posts/2007/01/writing-your-own-language-choose-a-vm-or-native/<p>Andrew Binstock has a good post on "<a href="http://binstock.blogspot.com/2006/08/writing-your-own-language-how-to.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">Writing your own language -- How to choose a VM</a>." In the post, he says that "Most of these VMs encourage your compiler to output not bytecodes but source code using their native language." But at the level of code generation, you're talking low-level …</p><p>Andrew Binstock has a good post on "<a href="http://binstock.blogspot.com/2006/08/writing-your-own-language-how-to.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+BinstockOnSoftware+%28Binstock+on+Software%29">Writing your own language -- How to choose a VM</a>." In the post, he says that "Most of these VMs encourage your compiler to output not bytecodes but source code using their native language." But at the level of code generation, you're talking low-level output, it's much harder to take advantage of the abstractions of a high-level language. In other words, I don't think that <em>for code generation</em>, it's that much harder to output C than it is to output Ruby (or Lua or Java or C# or Haskell or whatever). And, if so, I have to wonder if targetting a VM (which all, as far as I can tell, are more constrained than the 'portable assembly language' of C) is not more trouble than it's worth.</p>
<p>Of course, my argument only holds true for writing a new general purpose language: a domain-specific language that is primarily additive (for instance, a language that specifies the structure of a particular type of game <em>cough cough</em>) can, when targeting a VM, accept huge swaths of functionality, like type systems and control-flow structure and so forth.</p>
<p>And also, of course, whether you're building a DSL or a general-purpose language, you will most likely end up using a parser generator. I personally like <a href="https://www.antlr.org/">ANTLR</a>, which like most generators allows you to alter the generation target between C and higher-level languages (right now, the significant upgrade to ANTLR 3 is being tracked by contributors writing code generators for Java, C++, C#, C, Objective C, Python, Ruby, LISP, Perl6, PHP, and Oberon).</p>Deus Ex Machine Gun2007-01-08T17:52:00-10:002007-01-08T17:52:00-10:00larrytag:knowing.net,2007-01-08:/posts/2007/01/deus-ex-machine-gun/<p>When discussing how awesome <em>Children of Men</em> was, Tina pointed out that it had <em>some</em> flaws, like a scene where someone is utterly defeated, the bad guy cocks the gun, all hope is lost, and <strong>rat-a-tat-tat</strong> come the bullets from off-screen. I said "Oh, you mean the <em>deus ex machine …</em></p><p>When discussing how awesome <em>Children of Men</em> was, Tina pointed out that it had <em>some</em> flaws, like a scene where someone is utterly defeated, the bad guy cocks the gun, all hope is lost, and <strong>rat-a-tat-tat</strong> come the bullets from off-screen. I said "Oh, you mean the <em>deus ex machine gun?</em><em>"</em>** and then spent the rest of the evening terribly pleased with myself.</p>
<p><a href="https://en.wikipedia.org/wiki/Deus_ex_machina">For those without a background in dramatic theory</a>.</p>Civilization Advancements During Climate Stress? Nice To Think So2007-01-05T14:55:00-10:002007-01-05T14:55:00-10:00larrytag:knowing.net,2007-01-05:/posts/2007/01/civilization-advancements-during-climate-stress-nice-to-think-so/<p>According to an article in <strong>Seed</strong> Magazine (article not online), "early civilizations in Egypt, Peru, Mesopotamia, among other regions, arose not, as traditionally thought, because of the era's relatively benign climate, but instead to cope with an especially harsh one." I don't know about the data, but it's an appealing …</p><p>According to an article in <strong>Seed</strong> Magazine (article not online), "early civilizations in Egypt, Peru, Mesopotamia, among other regions, arose not, as traditionally thought, because of the era's relatively benign climate, but instead to cope with an especially harsh one." I don't know about the data, but it's an appealing hypothesis, given the likely coming century.</p>Alan Zeichick Dislikes The Ribbon, Too: Office 2007 Backlash Brewing?2007-01-05T14:34:00-10:002007-01-05T14:34:00-10:00larrytag:knowing.net,2007-01-05:/posts/2007/01/alan-zeichick-dislikes-the-ribbon-too-office-2007-backlash-brewing/<p>I thought I was the only one in the world who can't stand the Ribbon. I find it much harder to find functions than I did using menus. Alan Zeichick agrees, but for more noble reasons.</p>Over-rated Movies: "Devil Wears Prada" "Akeelah and the Bee"2007-01-04T14:10:00-10:002007-01-04T14:10:00-10:00larrytag:knowing.net,2007-01-04:/posts/2007/01/over-rated-movies-quotdevil-wears-pradaquot-quotakeelah-and-the-beequot/<p>Ugly Betty has the <em>exact</em> same plot (including must-be-from-the-same-source-material stuff about how the perfectly routine magazine process called "Run of Book" has special fashion-industry quirks and at least one identical "Are you the 'Before'?" joke), is funnier, and (with the exception of Meryl Streep, who's fantastic) is better cast. (They …</p><p>Ugly Betty has the <em>exact</em> same plot (including must-be-from-the-same-source-material stuff about how the perfectly routine magazine process called "Run of Book" has special fashion-industry quirks and at least one identical "Are you the 'Before'?" joke), is funnier, and (with the exception of Meryl Streep, who's fantastic) is better cast. (They sneer at <a href="https://www.imdb.com/gallery/rg1859820288">Anne Hathaway</a> as fat? Possibly true, but <a href="https://www.imdb.com/name/nm1065229/">America Ferrera</a> is actually built like a real person.)</p>
<p><a href="https://www.imdb.com/title/tt0437800/">Akeelah and the Bee</a> is not just the same-old triumph-over-economic-adversity story, it's a particularly cliched version of it. I think there were actually <strong>three</strong> sports-training montages. Everyone, including the unspecified-felonies neighborhood thug, is behind her. The antagonist turns out to be Not So Bad After All. And the outcome of the final competition is a cop-out that will displease the story-telling sensibilities of anyone over 12. Same topic, more drama, vastly more interesting characters: <a href="https://www.imdb.com/title/tt0334405/">Spellbound</a>.</p>search?q=vista+architecture: What's Wrong With This Result Set?2007-01-02T08:24:00-10:002007-01-02T08:24:00-10:00larrytag:knowing.net,2007-01-02:/posts/2007/01/searchqvistaarchitecture-whats-wrong-with-this-result-set/<p>http://www.google.com/search?q=vista+architecture</p>
<p>It seems to be the common wisdom that programmers, as well as the general public, are hesitant about embracing Vista. With results like the above, it's no wonder: at the moment it takes until page 5 to see a relevant text article …</p><p>http://www.google.com/search?q=vista+architecture</p>
<p>It seems to be the common wisdom that programmers, as well as the general public, are hesitant about embracing Vista. With results like the above, it's no wonder: at the moment it takes until page 5 to see a relevant text article, and even that is on the interrupt architecture. Then, on page 6, there's something on device driver architecture: good. But I have yet to find</p>
<p>The first result (as I write) is a video interview that Scoble did with Rob Short in December '05. I am not among those who count Scoble's video interviews as primary technical resources.</p>
<p>Well, it's Google, right? <a href="https://www.bing.com:443/search?q=vista+architecture&mkt=en-us&FORM=LVSP&go.x=15&go.y=8&go=Search?fdr=lc&toHttps=1&redig=B1328B3276CE484D8FFF91863CFF286C" title="http://search.live.com/results.aspx?q=vista+architecture&mkt=en-us&FORM=LVSP&go.x=15&go.y=8&go=Search">http://search.live.com/results.aspx?q=vista+architecture&mkt=en-us&FORM=LVSP&go.x=15&go.y=8&go=Search</a></p>
<p>Rob Short again, and then info on the Veterans Health Information Systems and Technology Architecture. Great.</p>
<p>Surely MSDN does better? http://search.msdn.microsoft.com/search/default.aspx?siteId=0&tab=0&query=vista+architecture</p>
<p>The first two results are on security, the next is from January 2004.</p>
<p>I don't know which way I should cast the blame here: on the lack of ontology in search engines (the authoritative text on Vista Architecture <em>whatever it is</em> ought to be ranked higher) or on Microsoft's fragmented communication. For a company that's supposed to know the value of software developers in the success of its operating systems, where is the top-down resource (but top-<strong>down</strong>, dammit, not just <a href="https://docs.microsoft.com/en-us/previous-versions/aa904951(v=msdn.10)">fluff-and-link</a> "Get Started!" crap)? I want block diagrams, people! Blocks, I say! And I don't want those blocks to be misleading about the centrality (or lack thereof) of the .NET Framework 3.0.</p>Hau'oli makahiki hou!2007-01-01T08:53:00-10:002007-01-01T08:53:00-10:00larrytag:knowing.net,2007-01-01:/posts/2007/01/hauoli-makahiki-hou/<p>Hoowee! Even with a bad cold, New Year's in Hawaii is a special thing: with July 4th, it is one of 2 days per year that fireworks are legal. I imagine that it's the Asian influence on the society, but for whatever reason, New Year's is <em>much</em> louder than the …</p><p>Hoowee! Even with a bad cold, New Year's in Hawaii is a special thing: with July 4th, it is one of 2 days per year that fireworks are legal. I imagine that it's the Asian influence on the society, but for whatever reason, New Year's is <em>much</em> louder than the 4th. This year, our street had three houses that were doing it up and it was something like fireworks-in-the-round last night. And our dog Cheyenne is so deaf now that she didn't even freak out.</p>
<p>Life got in the way of my plans last year and I didn't achieve a single goal. So I'll just put them up again, because I'm nothing if not persistent:</p>
<ul>
<li>Release at least one significant "long-tail" Web-based training resource;</li>
<li>Write at least one article to be sold by micropayments;</li>
<li>Develop professional-level competence in WinFX;</li>
<li>Maintain 6 AM - 2 PM working discipline;</li>
<li>Free-dive goals: 3 minutes; 100' depth;</li>
<li>Go surfing; </li>
<li>Memorize the field marks, common, scientific, and Hawaiian names of the 50 most common reef fish in every developmental phase;</li>
<li>Figure out a fitness routine that isn't so "weekend warrior";</li>
<li>Rewrite my novel to submission-quality</li>
</ul>
<p>Wishing nothing but the best to everyone in the coming year!</p>Chess Champ Banned for Bluetooth-in-the-Ear During a Tournament2006-12-31T07:28:00-10:002006-12-31T07:28:00-10:00larrytag:knowing.net,2006-12-31:/posts/2006/12/chess-champ-banned-for-bluetooth-in-the-ear-during-a-tournament/<p>According to <a href="https://www.informationweek.com/chess-player-banned-10-years-for-cheating-with-bluetooth-computer/d/d-id/1050213">InformationWeek</a>, Umakant Sharma, seeded 2nd in a tournament in New Delhi, was caught with a Bluetooth headset stitched into a cap that he wore "pulled down over his ears" during competition. According to the All India Chess Federation, accomplices fed him moves from a chess program. He's been …</p><p>According to <a href="https://www.informationweek.com/chess-player-banned-10-years-for-cheating-with-bluetooth-computer/d/d-id/1050213">InformationWeek</a>, Umakant Sharma, seeded 2nd in a tournament in New Delhi, was caught with a Bluetooth headset stitched into a cap that he wore "pulled down over his ears" during competition. According to the All India Chess Federation, accomplices fed him moves from a chess program. He's been banned by FIDE for 10 years.</p>
<p>This reminds me of something I've discussed before -- during Gary Kasparov's famous 1997 battle with Deep Blue, he demanded that the program's code be escrowed because <strong>Kasparov was of the belief that no computer could generate such play</strong> and that a human or humans must be feeding the machine moves. That response -- <strong>an expert in his domain asserting that computer behavior "must be from a human"</strong> -- always struck me as more important than the ability of the computer to ultimately grind down the world's best chess player. The response was the first, and to date, closest thing to a triumph in the <a href="https://en.wikipedia.org/wiki/Turing_test">Turing test</a>.</p>
<p>I have to admit it also reminds me of my own scandalous behavior in 3rd grade, when as a Cub Scout I made a pinewood derby car into which I could slip a fishing weight after the official weighing. I was caught because my car didn't just win the race, it ran down the ramp about twice as fast as anything else (objects of different mass might fall in a vacuum at equal speed; objects with wire axles running through a wood block, not so much). Needless to say, that was the end of my time in scouting. (Although, to be fair, they actually wanted to have some kind of disciplinary thing and then let me continue. Somehow I never made it over to the Brennan's house for <em>that</em> meeting.)</p>My Sister Bought Me A C++ GUI Programming Guide!2006-12-29T09:40:00-10:002006-12-29T09:40:00-10:00larrytag:knowing.net,2006-12-29:/posts/2006/12/my-sister-bought-me-a-c-gui-programming-guide/<p>Well, more or less...</p>
<p><a href="https://www.amazon.com/gp/product/1598220160"></a>\<a href="http://www.amazon.com/exec/obidos/redirect%3fpath%3dASIN/1584503491%26link_code%3das2%26camp%3d1789%26tag%3dthinkinginnet-20%26creative%3d9325"" atomicselection="true"></p>
<p>There's really no way to program XNA, even in 2D modes, without learning HLSL.</p>Envy Code R Programming Font Preview Release (Oh, and iTunes sucks)2006-12-29T09:32:00-10:002006-12-29T09:32:00-10:00larrytag:knowing.net,2006-12-29:/posts/2006/12/envy-code-r-programming-font-preview-release-oh-and-itunes-sucks/<p>Damien Guard has released a preview of Envy Code R , a good-looking programming font. At the moment, I think it looks best at higher font-sizes: I would definitely consider this for use in presentations.</p>
<p>Incidentally, the image is from some utility programs I've been writing for iTunes. I got an …</p><p>Damien Guard has released a preview of Envy Code R , a good-looking programming font. At the moment, I think it looks best at higher font-sizes: I would definitely consider this for use in presentations.</p>
<p>Incidentally, the image is from some utility programs I've been writing for iTunes. I got an iPod for Christmas, something I asked for in part because I was under the impression that the iTunes software, being as dominant in the world of music management as Office is in the world of spreadsheets, must be reasonably competent.</p>
<p>iTunes <em>sucks</em>. It must have crashed twenty times in the past five days. And not just crashed, but hung processes, minutes-long freezes, cryptic memory-error messages: an entire litany of bad program behavior. The only thing I like about it is that it unlocked my DRM-ed music and figuring out how to "Convert to MP3" was the work of a few seconds.</p>
<p>After a year or so of relying on <a href="https://www.pandora.com/">Pandora</a> and <a href="http://www.kexp.org/">KEXP</a>, the "Party Shuffle" in iTunes seems just absurd. The only <em>other</em> thing I like about iTunes is that it has a COM interface, which implies that I can unlock a couple facilities. First up, I'm going to see if I can write a program that cleans up "genre" tags so that they provide a more relevant personal view. For instance, I have a lot of what most people would simply call "punk rock," but for me, I need to divvy that up maybe 5-6 sub-genres. On the other hand, even though there are <em>many</em> genres of hip-hop, I'd only need maybe 2 or 3. I've got an algorithm in mind...</p>Mandelbrot Shader: Holy Effing Crap!2006-12-21T11:14:00-10:002006-12-21T11:14:00-10:00larrytag:knowing.net,2006-12-21:/posts/2006/12/mandelbrot-shader-holy-effing-crap/<p>Absolute times to calculate a fixed range of the Mandelbrot set:</p>
<hr>
<p><strong>Machine</strong> <strong>Concurrency</strong> <strong>Language</strong> <strong>Time</strong></p>
<p>Dual-Opteron Singlethreaded C# \~0.81</p>
<p>Dual-Opteron Multithreaded C# \~0.45</p>
<p>Dual-Opteron Singlethreaded C++ \~0.50</p>
<p>Dual-Opteron Multithreaded C++ \~0.38</p>
<p>XBox 360 Singlethreaded C# \~4.4</p>
<p>XBox 360 Multithreaded C# \~2.1</p>
<p><strong>XBox 360\ </strong>GPU …</p><p>Absolute times to calculate a fixed range of the Mandelbrot set:</p>
<hr>
<p><strong>Machine</strong> <strong>Concurrency</strong> <strong>Language</strong> <strong>Time</strong></p>
<p>Dual-Opteron Singlethreaded C# \~0.81</p>
<p>Dual-Opteron Multithreaded C# \~0.45</p>
<p>Dual-Opteron Singlethreaded C++ \~0.50</p>
<p>Dual-Opteron Multithreaded C++ \~0.38</p>
<p>XBox 360 Singlethreaded C# \~4.4</p>
<p>XBox 360 Multithreaded C# \~2.1</p>
<p><strong>XBox 360\ </strong>GPU Shader\ <strong>HLSL\ </strong>\~0.05<br>
<strong> </strong> <strong> </strong></p>
<hr>
<p>This isn't even fair because the non-GPU timings are strictly timings of the calculation loop. The GPU timing is actually derived from my <em>frame-rate</em>.</p>
<p>I'm having some trouble getting my shader to run on my desktop (ATI All-In-Wonder with Radeon X800), but will post that number when I can.</p>XNA Multithreading: Must Set Processor Affinity Manually2006-12-21T09:46:00-10:002006-12-21T09:46:00-10:00larrytag:knowing.net,2006-12-21:/posts/2006/12/xna-multithreading-must-set-processor-affinity-manually/<p>\<a href="http://www.knowing.net/images/XNAMultithreadingMustSetProcessorAffinit_7800/image011.png"" atomicselection="true"></p>
<p>Ah, that's more like it. This is a graph of duration (in seconds) versus the number of threads during a calculation of a Mandelbrot set using the XNA Framework on the XBox 360 (Neil: The previous graph …</p><p>\<a href="http://www.knowing.net/images/XNAMultithreadingMustSetProcessorAffinit_7800/image011.png"" atomicselection="true"></p>
<p>Ah, that's more like it. This is a graph of duration (in seconds) versus the number of threads during a calculation of a Mandelbrot set using the XNA Framework on the XBox 360 (Neil: The previous graph was normalized speed, as you suspected. For more on labeling the Axis in Office 12, see the next post.)</p>
<p>In order to have the XNA Framework distribute processing, you must explicitly set the "thread affinity." This must be done <em>within</em> the worker thread (presumably early in the <strong>ThreadStart</strong> delegate) and, on the XBox 360, you must not use the values 0 or 2, which are reserved. Thus, I use code like this:</p>
<div class="highlight"><pre><span></span><code><span class="nv">struct</span><span class="w"> </span><span class="nv">ThreadWorker</span>
{
<span class="w"> </span><span class="nv">int</span><span class="w"> </span><span class="nv">processorAffinity</span><span class="c1">;</span>
<span class="w"> </span><span class="nv">static</span><span class="w"> </span><span class="nv">int</span><span class="w"> </span><span class="nv">processorAffinityIterator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="c1">;</span>
<span class="w"> </span><span class="nv">internal</span><span class="w"> </span><span class="nv">ThreadWorker</span><span class="ss">()</span>
<span class="w"> </span>{
<span class="w"> </span><span class="nv">switch</span><span class="w"> </span><span class="ss">(</span><span class="nv">processorAffinityIterator</span><span class="ss">)</span>
<span class="w"> </span>{
<span class="w"> </span><span class="nv">case</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span>:
<span class="w"> </span><span class="nv">processorAffinity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="c1">;</span>
<span class="w"> </span><span class="k">break</span><span class="c1">;</span>
<span class="w"> </span><span class="nv">case</span><span class="w"> </span><span class="mi">1</span><span class="w"> </span>:
<span class="w"> </span><span class="nv">processorAffinity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="c1">;</span>
<span class="w"> </span><span class="k">break</span><span class="c1">;</span>
<span class="w"> </span><span class="nv">case</span><span class="w"> </span><span class="mi">2</span><span class="w"> </span>:
<span class="w"> </span><span class="nv">processorAffinity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">4</span><span class="c1">;</span>
<span class="w"> </span><span class="k">break</span><span class="c1">;</span>
<span class="w"> </span><span class="nv">case</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span>:
<span class="w"> </span><span class="nv">processorAffinity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">5</span><span class="c1">;</span>
<span class="w"> </span><span class="k">break</span><span class="c1">;</span>
<span class="w"> </span><span class="nv">default</span><span class="w"> </span>:
<span class="w"> </span><span class="nv">processorAffinity</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="c1">;</span>
<span class="w"> </span><span class="k">break</span><span class="c1">;</span>
<span class="w"> </span>}
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="ss">(</span><span class="o">++</span><span class="nv">processorAffinityIterator</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="mi">4</span><span class="ss">)</span><span class="w"> </span>{<span class="w"> </span><span class="nv">processorAffinityIterator</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="c1">; }</span>
<span class="w"> </span>}
<span class="w"> </span><span class="nv">internal</span><span class="w"> </span><span class="nv">void</span><span class="w"> </span><span class="nv">ThreadRun</span><span class="ss">()</span>
<span class="w"> </span>{
<span class="w"> </span><span class="nv">Thread</span>.<span class="nv">CurrentThread</span>.<span class="nv">SetProcessorAffinity</span><span class="ss">(</span><span class="nv">processorAffinity</span><span class="ss">)</span><span class="c1">;</span>
<span class="w"> </span>...<span class="w"> </span><span class="nv">begin</span><span class="w"> </span><span class="nv">work</span><span class="w"> </span>...
</code></pre></div>Office 12 Excel Graphing Bug: Axis Label Not Copied On Cut-And-Paste2006-12-21T08:40:00-10:002006-12-21T08:40:00-10:00larrytag:knowing.net,2006-12-21:/posts/2006/12/office-12-excel-graphing-bug-axis-label-not-copied-on-cut-and-paste/<p>Properly chastised by Neil Bartlett for not labeling my Y Axis on a graph, I added such a title to my next attempt. I then cut-and-pasted that image, which resulted in this being pasted into my blog editor:</p>
<p>And yet, I had already typed the Axis Title, as this screen …</p><p>Properly chastised by Neil Bartlett for not labeling my Y Axis on a graph, I added such a title to my next attempt. I then cut-and-pasted that image, which resulted in this being pasted into my blog editor:</p>
<p>And yet, I had already typed the Axis Title, as this screen capture of my Excel chart shows:</p>
<p>Now if only I could also figure out how to add a title for the X axis! Thank God for the Ribbonbar!</p>XNA Multithreading: Built On A Throne of Lies?2006-12-20T14:30:00-10:002006-12-20T14:30:00-10:00larrytag:knowing.net,2006-12-20:/posts/2006/12/xna-multithreading-built-on-a-throne-of-lies/<p>UPDATE: See this new post ~~It looks like XNA does not distribute processing across the multiple cores of the 360:~~</p>
<p>This is <em>identical</em> code (a Mandelbrot calculation of a fixed size) running with multiple threads. While my desktop machine speeds up with more threads (peaking at 3), the XBox 360 …</p><p>UPDATE: See this new post ~~It looks like XNA does not distribute processing across the multiple cores of the 360:~~</p>
<p>This is <em>identical</em> code (a Mandelbrot calculation of a fixed size) running with multiple threads. While my desktop machine speeds up with more threads (peaking at 3), the XBox 360 running XNA runs at <em>almost exactly</em> the same speed.</p>
<p>Incidentally, the graphic shows normalized speeds. The actual performance of the XBox 360 is 1/5 - 1/9 that of my desktop (4.43 seconds as opposed to \~.8 seconds single-threaded or \~.47 with 3 threads).</p>My First XNA Program: Up And Running on the 3602006-12-20T11:24:00-10:002006-12-20T11:24:00-10:00larrytag:knowing.net,2006-12-20:/posts/2006/12/my-first-xna-program-up-and-running-on-the-360/<p>Sweet. Stay tuned for performance benchmarks, concurrency and GPGPU programming experiments on the 360, and maybe even some games...<strong>Maybe</strong> even a domain-specific language for writing board games.</p>19-Year-Old Creates ANTLR Studio For Eclipse: I Think We'll Be Hearing From This Kid2006-12-15T16:15:00-10:002006-12-15T16:15:00-10:00larrytag:knowing.net,2006-12-15:/posts/2006/12/19-year-old-creates-antlr-studio-for-eclipse-i-think-well-be-hearing-from-this-kid/<p>As far as I can tell, the only mistake he made is charging <em>way</em> too little (\$19.99) and admitting his age. Other than that, <a href="http://placidsystems.com/antlrstudio.aspx">ANTLR Studio for Eclipse</a> looks professional as all get-out.</p>Microsoft Robotic Studio RTMs2006-12-13T13:31:00-10:002006-12-13T13:31:00-10:00larrytag:knowing.net,2006-12-13:/posts/2006/12/microsoft-robotic-studio-rtms/<p>Microsoft has released-to-manufacture Microsoft Robotics Studio (<em>via</em> Dan Fernandez).</p>
<p>\<a href="http://www.knowing.net/images/MicrosoftRoboticStudioRTMs_BA78/image02.png"" atomicselection="true">We got a Roomba as an early Christmas present and I gotta' tell you, it's won over my extremely-skeptical wife. My least favorite chore is sweeping our long …</p><p>Microsoft has released-to-manufacture Microsoft Robotics Studio (<em>via</em> Dan Fernandez).</p>
<p>\<a href="http://www.knowing.net/images/MicrosoftRoboticStudioRTMs_BA78/image02.png"" atomicselection="true">We got a Roomba as an early Christmas present and I gotta' tell you, it's won over my extremely-skeptical wife. My least favorite chore is sweeping our long, steep driveway and I'm very tempted to get another and mod it for the task (put a plow on the front for the leaves and stones, desensitize or shut off the bump sensor, maybe turn off the brushes altogether. I looked at the Roomba API and it seems straightforward.). Man. If I had a robotic driveway cleaner <strong>and</strong> an autonomous frog-killing blimp? That would be<strong> </strong>totally sweet. <strong>Totally.</strong></p>What Happens When You Drink A Coke2006-12-13T12:56:00-10:002006-12-13T12:56:00-10:00larrytag:knowing.net,2006-12-13:/posts/2006/12/what-happens-when-you-drink-a-coke/<p>\<a href="http://www.knowing.net/images/WhatHappensWhenYouDrinkACoke_B318/image06.png"" atomicselection="true">John Montgomery points to this interesting article on the physical effects of Coca Cola. (Short version: you get a sugar spike, one more potent than you could stand if the taste of sugar wasn't cut by the …</p><p>\<a href="http://www.knowing.net/images/WhatHappensWhenYouDrinkACoke_B318/image06.png"" atomicselection="true">John Montgomery points to this interesting article on the physical effects of Coca Cola. (Short version: you get a sugar spike, one more potent than you could stand if the taste of sugar wasn't cut by the use of phosphoric acid.) </p>
<p>I gave up my daily Coke early this year and, doing very little else, dropped from The Most I've Ever Weighed to Less Than I've Weighed In Fifteen Years. \~240 calories a day \~= 7200 calories per month \~= 2 pounds worth of calories. Once I learned to diagnose the "coming off the morning coffee, ingest coke" urge and manage it with a not-vastly-sugary snack, I haven't really missed it on a daily basis. I still keep a six-pack around and I admit that I drink a can before Ultimate games!</p>Implementing Dataflow with Threads2006-12-13T12:28:00-10:002006-12-13T12:28:00-10:00larrytag:knowing.net,2006-12-13:/posts/2006/12/implementing-dataflow-with-threads/<p>Here's <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d1227">a scholarly, but clearly written, article</a> on a generalized algorithm for implementing dataflow using shared memory. Dataflow is a very intuitive calculation model (think "spreadsheet"). When I saw this paper I thought "Wasn't it known that dataflow could be automatically parallelized?" but maybe not. One way or the other …</p><p>Here's <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d1227">a scholarly, but clearly written, article</a> on a generalized algorithm for implementing dataflow using shared memory. Dataflow is a very intuitive calculation model (think "spreadsheet"). When I saw this paper I thought "Wasn't it known that dataflow could be automatically parallelized?" but maybe not. One way or the other, it is now. The authors even show how their algorithm can be tweaked to improve cache coherency. Nice.</p>You had me at 'autonomous blimp'2006-12-13T11:51:00-10:002006-12-13T11:51:00-10:00larrytag:knowing.net,2006-12-13:/posts/2006/12/you-had-me-at-autonomous-blimp/<p>Sadly, <a href="http://www.alavs.com/">it</a> sounds all artsy-fartsy with the blimps moving towards sound or somesuch. <em>Sigh</em>. If your autonomous blimps can detect and move towards sound, at least let paint the target with a laser sighting device to instill an appropriate feeling of dread.</p>
<p>\<a href="http://www.knowing.net/images/Youhadmeatautonomousblimp …</p><p>Sadly, <a href="http://www.alavs.com/">it</a> sounds all artsy-fartsy with the blimps moving towards sound or somesuch. <em>Sigh</em>. If your autonomous blimps can detect and move towards sound, at least let paint the target with a laser sighting device to instill an appropriate feeling of dread.</p>
<p>\<a href="http://www.knowing.net/images/Youhadmeatautonomousblimp_A324/image05.png"" atomicselection="true"> Plus, the party's being held in a wind tunnel, so that doesn't make these things sound like they could do much to prevent escape from The Village.</p>
<p>If I had an autonomous blimp (how many times have I typed <em>that</em> phrase over the years?), I would outfit it with targeting lasers and set it to work discovering the calling places of the invasive <a href="https://www.ctahr.hawaii.edu/coqui/">coqui frog</a>, a dime-sized creature that produces a 110 dB (!) whistle.</p>PDC '07: October 2-5, Los Angeles2006-12-12T12:45:00-10:002006-12-12T12:45:00-10:00larrytag:knowing.net,2006-12-12:/posts/2006/12/pdc-07-october-2-5-los-angeles/<p>Microsoft just announced that the next PDC will be held October 2 - 5 in Los Angeles. Forecast calls for lingering late-season wildfires and a chance of LINQ...</p>XNA First Impressions2006-12-12T12:22:00-10:002006-12-12T12:22:00-10:00larrytag:knowing.net,2006-12-12:/posts/2006/12/xna-first-impressions/<p>I spent about an hour last night playing with the release of <a href="https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh452744(v=win.10)">XNA Game Studio</a>. My first impression is that someone at Microsoft needs to contract me to write some tutorials! Heh heh heh.</p>
<p>Actually, I'm greatly looking forward to incorporating XNA into a series of articles I'm pitching on …</p><p>I spent about an hour last night playing with the release of <a href="https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh452744(v=win.10)">XNA Game Studio</a>. My first impression is that someone at Microsoft needs to contract me to write some tutorials! Heh heh heh.</p>
<p>Actually, I'm greatly looking forward to incorporating XNA into a series of articles I'm pitching on GPGPU programming. Basically, I've written the same program in Ruby, C#, C++, C++ with OpenMP, C++ with assembly language, <a href="http://www.neatware.com/lbstudio/web/hlsl.html">HLSL</a>, and I'd like to add implementations in <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftr_id%253d1040">Accelerator</a>, <a href="http://www.peakstreaminc.com/">PeakStream</a>, and any other GPU-based languages / libraries I can find. It'll be fascinating to see how the XBox 360 stacks up in "one design" racing. (BTW, as much as I love Ruby, it is <em>slaughtered</em> in this type of comparison.)</p>
<p>Say... I wonder if I could develop a tutorial that ran <em>on the XBox 360</em> that combined audio-video / screencasts / etc. teaching how to program in XNA Studio. I mean, I know I could produce the tutorial, I just wonder if the "XNA Creator's Club" would allow me to distribute it (i.e., sell it) via XBox Live. <em>Hmmm....</em></p>Alan Z. Calls Shenanigans On Office Open XML2006-12-12T11:58:00-10:002006-12-12T11:58:00-10:00larrytag:knowing.net,2006-12-12:/posts/2006/12/alan-z-calls-shenanigans-on-office-open-xml/<p><a href="http://www.rube-goldberg.com/"></a>Alan Zeichick brands ECMA a "vendor-driven standards body" and decries "the competitive aspects of turning one company's impossible-to-implement spec into an industry standard." I'm a <em>little</em> more sanguine about ECMA, but only because I'm skeptical that standards (or open source) have <em>nearly</em> the importance they're generally accorded. (I'm well aware …</p><p><a href="http://www.rube-goldberg.com/"></a>Alan Zeichick brands ECMA a "vendor-driven standards body" and decries "the competitive aspects of turning one company's impossible-to-implement spec into an industry standard." I'm a <em>little</em> more sanguine about ECMA, but only because I'm skeptical that standards (or open source) have <em>nearly</em> the importance they're generally accorded. (I'm well aware that this is sacrilege.)</p>I'm not entirely happy about this...2006-12-12T08:59:00-10:002006-12-12T08:59:00-10:00larrytag:knowing.net,2006-12-12:/posts/2006/12/im-not-entirely-happy-about-this/<p><strong>Rock Star</strong><br>
You scored 94%!<br>
Link: The BASIC classic rock Test</p>Or you could get 'em Ruby and a snowboard2006-12-11T09:40:00-10:002006-12-11T09:40:00-10:00larrytag:knowing.net,2006-12-11:/posts/2006/12/or-you-could-get-em-ruby-and-a-snowboard/<p>\<a href="http://www.c-jump.com/"" atomicselection="true"></p>
<p>Where's the LHS on 6-x;? And does that say "parent friendly" under the "x++"?</p>Hopes for Jon Udell's Tenure At Microsoft2006-12-11T08:42:00-10:002006-12-11T08:42:00-10:00larrytag:knowing.net,2006-12-11:/posts/2006/12/hopes-for-jon-udells-tenure-at-microsoft/<p>I imagine that every single person who reads this blog other than my sister (Hi Donna!) knows who Jon Udell is and knows that he is joining Microsoft. In the small world of "people who make their living by writing about software development," Jon is clearly the leading light on …</p><p>I imagine that every single person who reads this blog other than my sister (Hi Donna!) knows who Jon Udell is and knows that he is joining Microsoft. In the small world of "people who make their living by writing about software development," Jon is clearly the leading light on the technologies collectively known as "Web 2.0."</p>
<p>Jon has the rare ability to move between high-level conversations with technology business leaders, advocating new ways of sharing information, and demonstrating technical points with his own code. He makes surprising connections between technologies and between technologies and homely matters (LibraryLookup and his walking tour). Typically, he's constructed these demonstrations with very accessible tools -- XML, JavaScript, etc.</p>
<p>There are two things that I worry about Jon's new position:</p>
<ul>
<li>To what extent will the inherent imperative to advocate MS technologies stifle him?, and</li>
<li>Will he be reduced to just a conduit of information (Microsoft's new A-list blogger) or will he continue to contribute new creations?</li>
</ul>
<p>Oh, and I'll throw in:</p>
<ul>
<li>Will direct knowledge of unannounced initiatives keep him quiet on the very subjects on which he's passionate?</li>
</ul>
<p>Unfortunately, that last is almost a given. Whether the subject is the way that young people learn programming, design and implementation of dynamic languages, or concurrency, there have been thought leaders at Microsoft who've essentially "gone dark." Presumably, that's so that they can actually <strong>make</strong> something rather than talking about it, and I suppose there's <strong>some</strong> value in that.</p>
<p>But there's also value in people who are in the public realm batting around ideas without behing beholden to commercial interest, especially when those people have the rare ability to crank out demoes. One of the most encouraging things to come out of Microsoft in years was Ozzie's "Live clipboard" -- if the boss (or the boss plus a <a href="https://www.fox.com/house/">House</a>-like crew of apprentices) produces small conceptual demoes, then one can guess that small conceptual demoes just might be a route to corporate success.</p>
<p>Finally, I have to say that it worries me a bit that Jon is leaving New Hampshire. One of the things that I've admired about him is that he showed that a person could have his finger on the pulse of the industry while living in the place that they love -- I very consciously took Jon as an example when making the decision to move to Hawai'i.</p>DRM: Won't Get Fooled Again2006-12-08T11:35:00-10:002006-12-08T11:35:00-10:00larrytag:knowing.net,2006-12-08:/posts/2006/12/drm-wont-get-fooled-again/<p>For a few years, I've been a happy subscriber to Musicmatch Universal, a system that gave me on-demand streaming of a sizeable music catalog. Musicmatch also had a \$.99 song-purchase facility from which I bought a few songs. Although I've always hated the Musicmatch player (bloated, self-updating, etc.) I was …</p><p>For a few years, I've been a happy subscriber to Musicmatch Universal, a system that gave me on-demand streaming of a sizeable music catalog. Musicmatch also had a \$.99 song-purchase facility from which I bought a few songs. Although I've always hated the Musicmatch player (bloated, self-updating, etc.) I was content enough. Oh, sure I had to "authorize" my hardware, but how hard was that?</p>
<p>If you're shaking your head in disgust at my naivete, fair enough: I'm neither 8 nor 80 and I ought to know better than to trust a technology company to provide service. But, you know, just because you <em>know</em> something unethical is prone to happen, it doesn't make it less unethical when it does.</p>
<p>Musicmatch was bought by Yahoo. One day, for some reason I allowed my Musicmatch Player to update itself into the Yahoo Music Player. "Sign in with your Yahoo id" it prompts. "Uh oh!" I thought, since Musicmatch used my email address and my Yahoo id is something different. But perhaps they'll map the two behind the scenes -- it's not like that's rocket science.</p>
<p>Of course they don't. I now no longer have Musicmatch software and all of the songs I bought refuse to play on any device. Of course they don't respond to my customer service complaints. It turns out that the amount of music I'd bought was not just a handful, but perhaps a dozen albums or so worth of legally purchased, royalty-paying music. Music that was so easy and convenient to buy digitally that I didn't give it a thought. Except that now that it's been taken away from me by the vagaries of the industry, I shan't ever buy DRM'ed music again. </p>
<p>Instead, I'll think about this experience and the greed and incompetence of the music industry. I'll think "Those frackers took more than a hundred dollars from me, is it immoral for me to recover that music (illegal, yes, but immoral)?" At best, they've converted me to buying CDs and ripping them. At worst, they've made piracy tempting.</p>
<p>Yes. Right. Geeks are supposed to know that DRM only inconveniences the honest and does nothing to deter the dishonest. Lesson learned.</p>C++ GUI Programming Guide2006-12-07T14:49:00-10:002006-12-07T14:49:00-10:00larrytag:knowing.net,2006-12-07:/posts/2006/12/c-gui-programming-guide/<p>I'd rather hang out with <a href="http://areasofmyexpertise.blogspot.com/">John Hodgman</a>. I'd rather get a <a href="https://www.amazon.com/gp/product/157231995X">C++ GUI Programming Guide</a>. </p>More On Functional Programming Languages and Silver Bullets2006-12-07T09:49:00-10:002006-12-07T09:49:00-10:00larrytag:knowing.net,2006-12-07:/posts/2006/12/more-on-functional-programming-languages-and-silver-bullets/<p>Paul... uh... NoLastName has an excellent post on silver bullets and functional programming. He cites studies, makes logical connections... why, it's hardly a blog post at all!</p>
<p>Anyway, I starting writing a comment, but it grew and grew, so I am posting it here instead. Read his post first....</p>
<p>You …</p><p>Paul... uh... NoLastName has an excellent post on silver bullets and functional programming. He cites studies, makes logical connections... why, it's hardly a blog post at all!</p>
<p>Anyway, I starting writing a comment, but it grew and grew, so I am posting it here instead. Read his post first....</p>
<p>You do a good job of laying out the issues, but I disagree that it's likely that functional languages are <em>vastly</em> more productive across the field of "larger" systems. (By "vastly," I'll take "just" 5x faster across a broad variety of programming tasks.)</p>
<p>\<a href="http://www.knowing.net/images/6d98fede14ac_711B/image02.png"" atomicselection="true">I am skeptical that the success of functional languages in smaller tasks (they dominate academic programming contests or the USN prototype you mention) provides strong support to the idea that they strike at "essential" not "accidental" issues. That is, it's not that they're silver bullets, it's that they're good languages. </p>
<p>You argue that the defect rate staying constant (per KLOC) argues for the "essential" case, but this is a long-known phenomenon that holds true across a broad variety of languages. (I think the original studies were by Boehm, but it may have been Capers Jones.) I believe the way to read this is that "expressive density" is beneficial in programming languages. In other words, what you describe as "packing more into fewer lines" is itself a benefit (but not a silver bullet).</p>
<p>As you recognize, concurrency is the anvil on which will break today's popular programming languages. The threading models in the popular C-derived languages are demonstrably intractable, just as C's memory model was intractable and has led to decades of misery. But this is clearly a problem of "accidental" quality: it's not that programming dual-cores falls short of 2X times <em>easier</em> than single-threading, it's that doubling your cores makes your programming task <em>harder</em>.</p>
<p>\<a href="http://www.knowing.net/images/6d98fede14ac_711B/image05.png"" atomicselection="true"> Functional languages, with their guarantees on the semantics of assignment, have a huge leg up on concurrency. It is much, much easier to build a system that automatically and efficiently manages the distribution of work when you have those guarantees. However, I don't believe there is any language that has reached the "finish line" in terms of expressive density, interoperability with mainstream languages (i.e., a C interface and "zero-config" interoperability with one of the two major managed platforms), and runtime efficiency.</p>
<p>When there <em>is</em> such a language, though, it's worth pointing out that it's embrace by the mainstream is <em>still</em> far from guaranteed. LISP is probably as close to that "finish line" as anything. <strong>LISP has been around for 48 years!</strong> And yet it is the most-abandoned language in programming (perhaps C has gotten to the point of contending that title). Smalltalk is universally admired for its embodiment of OOP, the construction approach that absolutely dominates mainstream programming. And yet Smalltalk doesn't show any sign of a dramatic increase of acceptance. What <em>is</em> increasing rapidly? Ruby. To me, Ruby seems a Smalltalk-like language with a primitive development environment. But maybe text editors and command-line-like shells are actually benefits. ... The subject of another post ... My final point regarding the mainstream embrace of languages: if I were to design a language that I hoped to be popular, I'd use curly brackets to denote code blocks.</p>
<p>Productivity jumps (and silver bullets, if they're at all possible) arise from embodying in a language (or <em>perhaps</em> a framework) new concepts that are broadly applicable. Languages have long been the vehicle for delivering these advances because facilitating the use of truly broad concepts (use of functions as first-class objects of reason, modularization of state and behavior in "classes", search -- a concept embodied in Prolog and <a href="https://www.viasatprovider.com/">Oz</a>) generally requires semantic guarantees.</p>
<p>This <em>certainly</em> advocates for the power of domain-specific languages embodying domain-specific concepts.</p>
<p>For general-purpose languages, I think the challenge for the manycore era is to discover a new concept (and I don't <em>think</em> it's <a href="https://en.wikipedia.org/wiki/Software_transactional_memory">software transactional memory</a>, or <a href="https://en.wikipedia.org/wiki/Concurrent_programming_language">message-passing</a> as we conceive it today) that allows us to exploit parallelism. I think the challenge for the perhaps-not-vanishingly-far future is to develop new concepts that relieve, by orders-of-magnitude, the tasks that we commonly consider programming.</p>
<p>\<a href="http://www.knowing.net/images/6d98fede14ac_711B/image08.png"" atomicselection="true"> For instance, right now there's a huge debate about explicit typing. Is it helpful or not to declare that a variable is an integer? Meanwhile, there's <em>not</em> a huge debate about the value of unit-testing. That is, everyone agrees that it's helpful to declare that a variable always be greater than 0 and less than, say, 2\^32. Is the irony not clear? Unit-testing assertions <em>are</em> type information: constraints on the interpretation of the inherently-plastic memory representation. It seems to me clear that unit-testing specification should migrate into languages, not remain the province of libraries. It <em>ought</em> to be the case that a failure of the unit-testing suite have the same, if not greater, ramification that comes from assigning a signed int to an unsigned one.</p>
<p>More generally, one can see that there's a conceptual failure with the idea of a purely static compile phase, followed by a monolithic runtime representation (we conceive of differences between "Debug" and "Release" runtimes, but those are simply compile-time conventions). Microsoft's C++ compiler has an advance on this model, with the idea of instrumenting a build, profiling it, and then altering the code-generation based on the results of that profiling. <strong>That's</strong> how testing should work! There <strong>is</strong> useful information about program structure that <strong>could be automatically extracted</strong> from unit-testing; if nothing else, that a particular class or method is a source of trouble. Far, far more speculatively, might it be possible for the computer to generate alternatives and present to the "programmer" those that satisfy the tests/constraints? Back in 1990, I speculated that genetic programming might be the only thing that could use up all the power of the then-distant gigahertz-speed processors. (Little did I expect Office 97.)</p>Flash movie of a guy using Windows Paint well2006-12-06T17:12:00-10:002006-12-06T17:12:00-10:00larrytag:knowing.net,2006-12-06:/posts/2006/12/flash-movie-of-a-guy-using-windows-paint-well/<p>I wish I could draw. I wish I could use tools to make my hideous drawings into acceptable drawings.</p>
<p><a href="http://ebersys.blogspot.com/2006/12/if-youre-talented-tools-dont-matter.html">This guy can draw and can use tools to make his sketches into better drawings.</a></p>
<p>I wish I could learn something from this guy.</p>Bullets Over Wrong Ways: Components, Functional Programming, and Essential Difficulties2006-12-06T10:16:00-10:002006-12-06T10:16:00-10:00larrytag:knowing.net,2006-12-06:/posts/2006/12/bullets-over-wrong-ways-components-functional-programming-and-essential-difficulties/<p>In comments to my previous post, Wesner Moise says:</p>
<ul>
<li>given today's components, "why build vi?";</li>
<li>the difficulty arising from software state "is a solved problem in functional programming"; and</li>
<li>suggests that the advances in graphics and networking that I'd acknowledged amount to a silver bullet.</li>
</ul>
<p>I'm afraid he's missing the …</p><p>In comments to my previous post, Wesner Moise says:</p>
<ul>
<li>given today's components, "why build vi?";</li>
<li>the difficulty arising from software state "is a solved problem in functional programming"; and</li>
<li>suggests that the advances in graphics and networking that I'd acknowledged amount to a silver bullet.</li>
</ul>
<p>I'm afraid he's missing the central point regarding "essential" vs. "accidental" characteristics.</p>
<p><em>"Why build vi?"</em></p>
<p>The point of vi is not that Bill Joy rapidly wrote the first programming editor, it's that he rapidly wrote a programming editor <strong>to meet particular and unforeseen requirements</strong>. Several editors (I think even emacs) already existed when he wrote vi, but Joy needed an editor that ran over a 300 baud connection.</p>
<p><strong>We're always building vi</strong>. Software development is <em>never</em> about the requirement you get in the elevator ("I need a text editor," "I need an online store," "I need to share data"), it's <em>always</em> about the specific needs of the end user. Why build vi? Because the editor needs to work in the memory of a cellphone. Or over a satellite phone link. Or via an SSH connection. Or because we don't want to retrain the users and they want an insert and a command mode. Or because we want to have piped program output insertable into the middle of a text file.</p>
<p>Brooks makes this as plain as possible in his essay:</p>
<blockquote>
<p>I believe the hard part of building software to be the specification, design, and testing of this conceptual construct, not the labor of representing it and testing the fidelity of the representation. We still make syntax errors, to be sure; but they are fuzz compared with the conceptual errors in most systems.</p>
</blockquote>
<p><strong>The <em>essential</em> problem is not the representation we develop, it's developing the concept of the system.</strong> The fault lies not in the source code, but in ourselves.</p>
<p><em>Functional programming solves the problem of complex state</em></p>
<p>Nonsense. Functional approaches have strengths, as I've discussed. However, they fall <em>far</em> short of solving the problems of complex state. The conceptual strengths of existing functional approaches diminish as the system grows: it is <em>not</em> an accident that object-orientation won out as the preferred method of conceptualizing larger systems. I am not saying that OOP is a panacea (not at all) or that state-carrying objects are a better approach to construction, but OOA&D is <em>clearly</em> more appealing and more successful <em>in the broad marketplace of ideas</em> than other approaches.</p>
<p>I <em>personally</em> <em>believe</em> that functional approaches may very fruitfully evolve in the coming years in both construction (where I think it's clear that they will be important in the evolution towards manycore) and analysis and design (perhaps hybridized with certain aspects of OOA&D). But personal beliefs aren't silver bullets.</p>
<p><em>Some silver bullets</em></p>
<p>Wesner again misses the forest for the trees when he clams I've acknowledged silver bullets for "development for an end computer (graphics programming) and development for a network of computers (network programming), there is a no order of magnitude improvement for any other form of computer."</p>
<p>For one thing, by "graphics programming" what I meant was not GUIs, but 2D and 3D visualization. I meant things like the ability to present, light, and move through space 3D objects.</p>
<p>More generally, the point is, again, that libraries and frameworks advance but the conceptual challenges remain the same. Design-time form building, if anything, argues <em>for</em> Brooks, not against him: "friends don't let programmers design interfaces" and all that.</p>
<p>\<a href="http://www.knowing.net/images/BulletsOverTextBoxesComponentsDeclarativ_7756/image02.png"" atomicselection="true"> Here's an example of the fundamental issue: <a href="https://ericsink.com/entries/WPF_14July2006.html">Eric Sink's woodworking application</a>. The whole issue of "silver bullets" boils down to whether you think the problem is creating a 3D view or writing an application that linearizes the steps in a woodworking project. Is coding the views 10 times simpler than it would be if he were using DirectX? Just about. Is DirectX 10 times simpler than writing your own projections? Yep. So for 3D views, you have substantial advances: multiple generations, programming becoming faster not just by integral factors, but by orders of magnitude. Yes, I think that's fair.</p>
<p>But... what about the "steps" part of things? How much more capable is this program at creating a list of materials than was the copy of Autocad I used twenty years ago? A little? A lot? I dunno'. But I guarantee you that there is not an order of magnitude difference between the time Eric spent representing those domain rules in whatever-language-he-used and the time it would have taken to express the same design rules in OCaml or other functional language and the time it would have taken to express those rules in AutoLisp (assuming the Eric was fluent in all of them).</p>
<p><strong>Creating a representation of a conceptual system is the essential task of <em>programming</em>. Developing a conceptual system that can express something useful is the essential task of <em>software development</em>.</strong></p>
<p>Once upon a time, I used to make a big deal about that distinction-- at <em>Computer Language</em>, I forbade the use the term "programming" or "programmer" to describe our subject matter. When I left publishing, I purposefully embraced the opposite swing of the pendulum: I called myself a "programmer" and intentionally embraced in my writing those aspects of our job.</p>Moonbase Alpha2006-12-05T15:07:00-10:002006-12-05T15:07:00-10:00larrytag:knowing.net,2006-12-05:/posts/2006/12/moonbase-alpha/<p>I'm going out on a limb, I know, but I'm going to say that I don't think <a href="http://www.cnn.com/2006/TECH/space/12/04/moon.base/index.html">NASA will be ready to begin construction base on the moon in the year 2020</a> and, darn it, I know I shouldn't speculate wildly like this, but I'm going to say that when …</p><p>I'm going out on a limb, I know, but I'm going to say that I don't think <a href="http://www.cnn.com/2006/TECH/space/12/04/moon.base/index.html">NASA will be ready to begin construction base on the moon in the year 2020</a> and, darn it, I know I shouldn't speculate wildly like this, but I'm going to say that when they <em>do</em> land on the moon again, it's going to have cost a lot more than originally planned.</p>Wesner Moise Claims IDEs Disprove "No Silver Bullets": I Say "Are You Kidding?"2006-12-05T13:30:00-10:002006-12-05T13:30:00-10:00larrytag:knowing.net,2006-12-05:/posts/2006/12/wesner-moise-claims-ides-disprove-quotno-silver-bulletsquot-i-say-quotare-you-kiddingquot/<p>Wesner Moise quickly reviews Brook's "No Silver Bullets" assertion and claims "[t]hat assertion turns out to be pure nonsense, amply disproven by numerous advances in IDEs, languages, frameworks, componentization over the past few decades."</p>
<p>I couldn't disagree more. While the <em>cumulative</em> effects have given us more than an order …</p><p>Wesner Moise quickly reviews Brook's "No Silver Bullets" assertion and claims "[t]hat assertion turns out to be pure nonsense, amply disproven by numerous advances in IDEs, languages, frameworks, componentization over the past few decades."</p>
<p>I couldn't disagree more. While the <em>cumulative</em> effects have given us more than an order of magnitude improvement, no single development has come close. I would say that the two single areas where there have been a close to an order-of-magnitude improvement are in user interfaces, with the rise of the compile-time visual form builders and HTML for text presentation, and network programming, with Java's stream-based model being a huge step over sockets.</p>
<p>Outside of network and graphics programming, I don't see the cumulative effects as being even two orders of magnitude. <a href="https://www.theregister.co.uk/2003/09/11/bill_joys_greatest_gift/">Bill Joy admits</a> that he didn't write vi in a weekend -- that it tooks months. Let's say it took him 100 days. You think you could do it in 1?</p>Office to Skip Version 13: Regardless, Bogeymen Vow Trouble2006-12-05T09:01:00-10:002006-12-05T09:01:00-10:00larrytag:knowing.net,2006-12-05:/posts/2006/12/office-to-skip-version-13-regardless-bogeymen-vow-trouble/<p>Apparently, the next version of Office is going to be 14, embracing the triskedecaphobic convention of buildings in skipping the sp-o-o-o-k-y ramifications of, you know, counting.</p>
<p>Not to put too fine a point on it, but when you get to the point where, despite your worldwide hegemony on office documents …</p><p>Apparently, the next version of Office is going to be 14, embracing the triskedecaphobic convention of buildings in skipping the sp-o-o-o-k-y ramifications of, you know, counting.</p>
<p>Not to put too fine a point on it, but when you get to the point where, despite your worldwide hegemony on office documents, you let superstitious nonsense hold sway because of potential sales-loss among particularly gutless 6-year-olds, you've got too much bureaucracy.</p>LineRider: I Want to Clone this on XNA2006-12-01T14:34:00-10:002006-12-01T14:34:00-10:00larrytag:knowing.net,2006-12-01:/posts/2006/12/linerider-i-want-to-clone-this-on-xna/<p>Things are beginning to look up for me being able to do some XNA-based projects in the new year. I need a couple realizable games to tackle. I have one designed that I'll never be able to get approved (it's called "Fanaticize me!" I think I'd get in trouble even …</p><p>Things are beginning to look up for me being able to do some XNA-based projects in the new year. I need a couple realizable games to tackle. I have one designed that I'll never be able to get approved (it's called "Fanaticize me!" I think I'd get in trouble even by describing the playing pieces).</p>
<p>I'm thinking it would be a better idea to do a physics-based simulation a la <a href="http://feeds.downloadsquad.com/%7er/weblogsinc/downloadsquad/%7e3/56240855/">Line Rider</a>. I'd never heard of that particular one until today. It looks like a lot of fun (of course, for me, it's more fun to program it than to actually play it).</p>Backseat Playground: GPS-Enabled Automated Storytelling / Game2006-12-01T14:23:00-10:002006-12-01T14:23:00-10:00larrytag:knowing.net,2006-12-01:/posts/2006/12/backseat-playground-gps-enabled-automated-storytelling-game/<p>Backseat Playground is a research project that developed a GPS-based game for kids. It seems more like a (great) storytelling system more than a game. Basically, it uses the GPS and location-awareness to introduce game elements, e.g., when it sees that you're driving over a bridge, it presents you …</p><p>Backseat Playground is a research project that developed a GPS-based game for kids. It seems more like a (great) storytelling system more than a game. Basically, it uses the GPS and location-awareness to introduce game elements, e.g., when it sees that you're driving over a bridge, it presents you with the opportunity to "explore" the river with that SCUBA tank you picked up in the last town you drove through.</p>
<p>What a great idea. Any story is made infinitely more appealing by tailoring it to the invididual. To present a long car-ride to Grandma's house as a detective story is a brilliant innovation. I wonder, though, if the better approach would be to feed the <em>parent</em> plot points as they drove, as that would be infinitely more enthralling for a kid.</p>Lives of the Ancient Geeks2006-12-01T08:40:00-10:002006-12-01T08:40:00-10:00larrytag:knowing.net,2006-12-01:/posts/2006/12/lives-of-the-ancient-geeks/<p>\<a href="http://www.knowing.net/images/ComputersoftheAncientGeeks_74BC/image05.png"" atomicselection="true">Scientists have reverse engineered the Antikythera Mechanism, a sophisticated analog computer that was known to have calculated lunar phases and a luni-solar calendar. Newly reported is that it additionally calculated lunar and solar eclipses! Additionally, it <em>may …</em></p><p>\<a href="http://www.knowing.net/images/ComputersoftheAncientGeeks_74BC/image05.png"" atomicselection="true">Scientists have reverse engineered the Antikythera Mechanism, a sophisticated analog computer that was known to have calculated lunar phases and a luni-solar calendar. Newly reported is that it additionally calculated lunar and solar eclipses! Additionally, it <em>may</em> have (correctly) modeled the moon as having a slightly elliptical orbit. The Mechanism predates by at least a thousand years other devices of similar complexity (I'm not sure if that claim is restricted to Western technology or includes the Chinese).</p>
<p>I often fantasize about what life must have been like for an ancient geek. Both the career challenges ("You battle the Hittites without me, I'm going to look at the stars. Again.") and, more amazingly, the induction. Sure, you're going to figure out that the moon waxes and wanes regularly. The seasons, complete with solstices and equinoxes? Given the relationship to food, I'll grant you that. But how in the <em>world</em> do you model lunar and solar eclipses that only occur a few times per lifetime, in a time when you are absolutely beholden to clouds, correspondence is limited to trading routes, and the vast majority of learning is transmitted orally? Or the <em>irregularities</em> of orbits when your instruments of measurement are your eyes and fixed stars? Just incredible.</p>
<p>It gives me hope for the future of programming. However we program the computers that run the United Federation of Planets, it won't be with text files containing linear descriptions adhering to context-free grammars.</p>Envy Code R Font Preview Entices2006-12-01T08:11:00-10:002006-12-01T08:11:00-10:00larrytag:knowing.net,2006-12-01:/posts/2006/12/envy-code-r-font-preview-entices/<p>Damien Guard has done some work on a great looking monospaced font. He hasn't finished it yet, so be sure to post about it so that he gets a whole bunch of technorattention for the project and is shamed into finishing it. (<em>via</em> Brad Wilson)</p>I'm emotionally reversed2006-11-30T16:49:00-10:002006-11-30T16:49:00-10:00larrytag:knowing.net,2006-11-30:/posts/2006/11/im-emotionally-reversed/<p><a href="http://thedatafarm.com/blog/">Julie Lerman</a> parsed from an email of mine that I :</p>
<ul>
<li>am "kinda nervous" about Tina's first mammogram since her mastectomy,</li>
<li>was "scared" by the 12' tiger shark I saw while diving the other day, and</li>
<li>am "terrified" of installing a new hard drive</li>
</ul>
<p>Apparently, I've got an inverter on my …</p><p><a href="http://thedatafarm.com/blog/">Julie Lerman</a> parsed from an email of mine that I :</p>
<ul>
<li>am "kinda nervous" about Tina's first mammogram since her mastectomy,</li>
<li>was "scared" by the 12' tiger shark I saw while diving the other day, and</li>
<li>am "terrified" of installing a new hard drive</li>
</ul>
<p>Apparently, I've got an inverter on my nervousness circuits.</p>
<p>(Incidentally, Tina just told me she got a clean bill of health on the mammogram.)</p>New F# Compiler Released; Thoughts on "Practical OCaml" by Joshua Smith2006-11-30T10:55:00-10:002006-11-30T10:55:00-10:00larrytag:knowing.net,2006-11-30:/posts/2006/11/new-f-compiler-released-thoughts-on-quotpractical-ocamlquot-by-joshua-smith/<p><a href="https://www.amazon.com/gp/product/159059620X" title="Practical OCaml"><em><img alt="" src="http://images.amazon.com/images/P/159059620X.01._AA_SCTZZZZZZZ_.jpg"></em></a>Microsoft has posted <a href="https://www.microsoft.com/en-us/research/products/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fdownloads%2Fdetails%2F82587104-ad38-48d4-af53-b3c36cb97585%2Fdetails.aspx">version 1.1.13.8 (whatever the heck that means) of their F# compiler</a>, which gives me an excuse to discuss the book <em>Practical OCaml</em> by Joshua Smith.</p>
<p><em>Practical OCaml</em> is a new release from APress. My favorite technical book of last year was <em>Practical Common Lisp …</em></p><p><a href="https://www.amazon.com/gp/product/159059620X" title="Practical OCaml"><em><img alt="" src="http://images.amazon.com/images/P/159059620X.01._AA_SCTZZZZZZZ_.jpg"></em></a>Microsoft has posted <a href="https://www.microsoft.com/en-us/research/products/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fdownloads%2Fdetails%2F82587104-ad38-48d4-af53-b3c36cb97585%2Fdetails.aspx">version 1.1.13.8 (whatever the heck that means) of their F# compiler</a>, which gives me an excuse to discuss the book <em>Practical OCaml</em> by Joshua Smith.</p>
<p><em>Practical OCaml</em> is a new release from APress. My favorite technical book of last year was <em>Practical Common Lisp</em>, by Peter Seibel, and I hoped that Smith could duplicate the feat. It looks like the book has a different editorial team, but follows some similar structural advice. Even if nothing else, both books are reasonably sized (\~400 pages, not \~1,000) and divided in a manner that makes them very appealing for those interested in learning a programming language.</p>
<p>My main motivation for reading this book (other than the hope that APress had discovered a way to bottle the lightning of language evangelism) was that "pure" functional languages are <em>inherently parallelizable</em>. That is to say, the language semantics are such that a sufficiently smart compiler could correctly take care of threading the computation over multiple cores/processors. Since I am of the belief that the manycore era is going to require a sea-change in programming approaches, I think it behooves those interested in the future to gain experience with such languages. Concurrency is treated only tangentially in <em>Practical OCaml</em> and I am under the distinct impression that OCaml is <em>not</em> inherently parallelizable (I believe this to be the case with F# as well). Nonetheless, it's certainly true that concurrency is "easier to think about" when using functional approaches, so there're still things to be gained.</p>
<p>What I <em>didn't</em> realize was that OCaml is a very, <em>very</em> good language for writing domain-specific languages. It's pattern-matching semantics are quite advanced and lex/YACC libraries (ocamllex and ocamlyacc) are part of the standard distribution. While I feel that tools like <a href="https://www.antlr.org/">ANTLR</a> and concepts like <a href="https://pdos.csail.mit.edu/~baford/packrat/">Parsing Expression Grammars</a> have the potential to displace lex/YACC, there's no questionthat lex/YACC is the dominant "species" in the world of compilers.</p>
<p>Having said all that, I'm afraid that Smith's book is not nearly as persuasive as Seibel's. I abandoned LISP long ago and Seibel made me reconsider that decision. I <em>wanted</em> to learn OCaml but could hardly sustain my enthusiasm through the first chapter. The first sentence of <em>Practical Common Lisp</em> is "If you think the greatest pleasure in programming comes from getting a lot done with code that simply and clearly expresses your intention, then programming in Common Lisp is likely to be about the most fun you can have with a computer." That's a good opening and I think accurately captures the undeniable aesthetic appeal of LISP. The first sentence in Smith's "Why OCaml?" introduction is "It's a fair question." That's a bad opening. At least, it's a bad opening when followed by <em>five paragraphs</em> whose greatest substantive claim is "OCaml helps the programmer to easily express normal concepts and actually express difficult concepts." If <em>that</em> doesn't take the wind out of your sails, rest assured that it is preceded by "Returning to the title question, if I were to answer the question in more mundane terms, I would say that...." That's the type of opening that calls into question the author's precision.</p>
<p>The tutorial that follows is structured well-enough, but the concepts are not presented as well as they could be. Here is the complete discussion of the I-would-think-important concept of mutable variables:</p>
<blockquote>
<p>It can be tempting to use mutable references, but I suggest that you resist that temptation. I have generally found that, except in a few cases, the use of a mutable reference could be removed by fixing my designs. This is not a rule in any sense of the term because sometimes a mutable reference is really the best choice. File input/output (I/O) is a good example because file I/O is often a nonfunctional chore. Some other functional languages deal with these nonfunctional chores by using monadic computation, but that might not always be necessary. You can hide mutable references in OCaml classes to make their use less problematic (this is discussed in more detail in Chapter 19).</p>
</blockquote>
<p>This is on page 23 and is <em>not</em> preceded by a discussion of why mutable references are undesirable or what monadic computation is...I can't resist: the index has only 1 reference for "monadic computation" and that leads to page 251's explanation that:</p>
<blockquote>
<p>Monadic computations and monads in general are creations that open up a small loophole for purely functional languages. Although a purely functional language cannot have functions with side effects, it can have values that describe and contain side effects. This boils down to computational sleight-of-hand that comes with a cool-sounding name.</p>
</blockquote>
<p>Oh. Alright then. I started the book under the impression that issues of mutability might be fairly important to understanding a functional language, but apparently they aren't.</p>
<p>APress is 1-for-2 with their <em>Practical...</em> series, I hope <em>Practical Haskell</em> comes up to bat next.</p>
<p>In the meantime, if you want a really good book I suggest: <a href="https://www.amazon.com/gp/product/1590592395">Practical Common Lisp</a>.</p>
<p><a href="https://www.amazon.com/gp/product/1590592395" title="Practical Common Lisp"><img alt="" src="http://images.amazon.com/images/P/1590592395.01._AA_SCTZZZZZZZ_.jpg"></a></p>Measuring the speed of a meme2006-11-29T14:51:00-10:002006-11-29T14:51:00-10:00larrytag:knowing.net,2006-11-29:/posts/2006/11/measuring-the-speed-of-a-meme/<p><a href="https://acephalous.typepad.com/acephalous/2006/11/measuring_the_s.html">This post</a> is attempting to measure the speed with which a blog post can propagate across the blogosphere. Feel free to link to it.</p>Modified Snapshot Pattern2006-11-29T08:30:00-10:002006-11-29T08:30:00-10:00larrytag:knowing.net,2006-11-29:/posts/2006/11/modified-snapshot-pattern/<p>Here's a good pattern to use when you have a domain object that combines non-varying and time-varying data. Perrin's modified the original pattern to use generics: a good choice. (Why is it a good choice? Because objects that combine these two types of data <em>are</em> usually conceived of in a …</p><p>Here's a good pattern to use when you have a domain object that combines non-varying and time-varying data. Perrin's modified the original pattern to use generics: a good choice. (Why is it a good choice? Because objects that combine these two types of data <em>are</em> usually conceived of in a direct-but-composed way: we don't think of a Product as changing it's identity because it is or is not on sale, but we <em>do</em> think of a Product and its normal- or sales-price as a combination of two things. While it's easily possible to express this type of structure using inheritance, making them parameters to a generic is a batter match with the conceptual model.)</p>
<p>Here's a challenge (for explicitly typed languages: for those with duck-typing it's trivial):</p>
<p>Design a Snapshot\<T> such that you can query any property P in T for a given time. For instance, if you had Snapshot\<PlayStation3> myPlayStation, you could query it's price using code similar to this form:</p>
<p>Price p = myPlayStation.ValueAt(myDateTime).Price()</p>
<p><strong>Hint: </strong>Would the problem be easier (or possible) if you were to use a CTP?</p>Altair 8800 Kits For Sale on eBay2006-11-26T09:41:00-10:002006-11-26T09:41:00-10:00larrytag:knowing.net,2006-11-26:/posts/2006/11/altair-8800-kits-for-sale-on-ebay/<p>If you're looking for the perfect Christmas gift for a geek and your budget is around \$1800, <a href="http://www.altairkit.com/index.html">this reproduction of the kit that started it all</a> would be perfect.</p>CodeGear and The Blogosphere2006-11-17T10:08:00-10:002006-11-17T10:08:00-10:00larrytag:knowing.net,2006-11-17:/posts/2006/11/codegear-and-the-blogosphere/<p>A few days ago was launched the biggest, most experienced, development tools company to be created since the dot-com era. A company that's explicitly turning away from managerial buzzwords in order to concentrate on language implementations, libraries, and tool-chains that will cross platforms. The company includes people who developed some …</p><p>A few days ago was launched the biggest, most experienced, development tools company to be created since the dot-com era. A company that's explicitly turning away from managerial buzzwords in order to concentrate on language implementations, libraries, and tool-chains that will cross platforms. The company includes people who developed some of the world's fastest-working compilers, most famously productive environments, and pretty much invented the models for software components that dominate software development today. The way in which the company was launched is controversial, with a very public reversal of a very public plan. To me, it <strong>seems like a big deal</strong>. </p>
<p>How did Slashdot, Techmeme, Lambda the Ultimate, and the blogosphere in general react to this launch?</p>
<p>Almost complete silence.</p>
<p>I don't get it; I really don't.</p>
<p>It's <a href="http://blog.marcocantu.com/blog/Delphi_past_its_peak.html">not like I'm the world's biggest fan of Delphi</a> and I don't get why the world doesn't share my enthusiasm. What I don't get is why there's so much more blogospheric coverage of Sun's choice of license for open sourcing Java compared to CodeGear. Heck, there's more blogospheric coverage of the latest mapping "mashup" than there is of CodeGear.</p>
<p>CodeGear seems like a big deal to me. Yeah, Borland's languages division has been neglected and lost status. Yeah, Borland's decision not to sell raises <strong>huge</strong> questions about commitment and investment, but I don't <strong>think</strong> the meaning of it all is so obvious that it doesn't bear comment and discussion.</p>
<p>Perhaps I'm just of a certain age and am assigning to CodeGear a weight they no longer deserve; perhaps the blogosphere's collective "meh" is an indication that people have no more faith in the former Borland division than they would in any other startup.</p>
<p>Time will tell. I expect fireworks from Scotts Valley -- for better or worse.</p>Me vs. $540M Government S/W Project2006-11-16T08:26:00-10:002006-11-16T08:26:00-10:00larrytag:knowing.net,2006-11-16:/posts/2006/11/me-vs-540m-government-sw-project/<p>There was a short piece on the news last night about a \$540M travel reservation system developed to aid the Department of Defense manage their travel costs (in peacetime). Apparently, it doesn't work (doesn't deliver low fares) and even if it <em>did</em> work, it would take 20 years of projected …</p><p>There was a short piece on the news last night about a \$540M travel reservation system developed to aid the Department of Defense manage their travel costs (in peacetime). Apparently, it doesn't work (doesn't deliver low fares) and even if it <em>did</em> work, it would take 20 years of projected savings to pay for itself. A congressman is trying to kill the project, and Northrup Grummin trotted out a project manager to say "This is a project that works and of which the American taxpayer can be proud," while smiling incessantly.</p>
<p>Government software overruns are always scandalous. Back of the envelope: \<span class="math">\(540M / \\)</span>250 / person/hour / 40 person-hours/work-week / 50 work-weeks per year = 1080 person-years of effort @ \$250 an hour. The contract was granted 8 years ago, projected to go into service 4 years ago, and is "approaching full deployment."</p>
<p>"DTS has processed more than 1.87 million vouchers since its inception, according to DOD." That's not far from the number of travel vouchers that have been processed by reservation systems that I've architected. At the risk of putting myself out of work, I've gotta' tell you: travel reservation systems ain't rocket science. It's big databases, ugly data formats, and business rules. Business rules, of course, are expensive to get right and prone to change. <em>Duh.</em> But not person-millennia at \$250 an hour. Nope. Uh uh. I know whereof I speak.</p>
<p>At what point does inefficiency shade into outright fraud?</p>
<p>Hey, isn't there some kind of Federal "whistleblower / watchdog" reward? Like, if I investigated this and gave the government cause to withhold, say, \$100M in payments, I would get a reward of, say, a couple million bucks?</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>SD Times Newsfeed2006-11-16T07:46:00-10:002006-11-16T07:46:00-10:00larrytag:knowing.net,2006-11-16:/posts/2006/11/sd-times-newsfeed/<p>SD Times has a newsfeed. Huzzah! Subscribed.</p>Euphemism: "in a stop sell mode"2006-11-15T14:41:00-10:002006-11-15T14:41:00-10:00larrytag:knowing.net,2006-11-15:/posts/2006/11/euphemism-quotin-a-stop-sell-modequot/<p>A client relying on a 3rd party service which we had been assured was available received an email today that said "[The service] is in a stop sell mode at this time as we are evaluating etc."</p>
<p>I'm going to have to remember that the next time I approach a …</p><p>A client relying on a 3rd party service which we had been assured was available received an email today that said "[The service] is in a stop sell mode at this time as we are evaluating etc."</p>
<p>I'm going to have to remember that the next time I approach a deadline: "I'm sorry, Dave, but that column is in a stop sell mode as I am evaluating content choices."</p>No New Features2006-11-15T08:44:00-10:002006-11-15T08:44:00-10:00larrytag:knowing.net,2006-11-15:/posts/2006/11/no-new-features/<p><em>TeX and METAFONT have version numbers that asymptotically approach ? and e</em>. This reflects <a href="https://www-cs-faculty.stanford.edu/~knuth/">Don Knuth</a>'s decision that it's more important to create consistency with those tools than to add features. I've thought about something similar with programming language design: languages like Java and C# were very "teachable" in their …</p><p><em>TeX and METAFONT have version numbers that asymptotically approach ? and e</em>. This reflects <a href="https://www-cs-faculty.stanford.edu/~knuth/">Don Knuth</a>'s decision that it's more important to create consistency with those tools than to add features. I've thought about something similar with programming language design: languages like Java and C# were very "teachable" in their initial releases. The addition of generics, if nothing else, makes them significantly harder to teach. Add closures, LINQ, type inference, etc. and you're talking about something that, while not C++, has very different "teachability" characteristics, if nothing else. Plus, there's the burden of supporting old decisions -- like the confusing way that C# deals with finalizing resources (<strong>using</strong>, IDisposable, \~Class()).</p>
<p>Niklaus Wirth may have been on to something producing a family of languages (Pascal, Modula, Modula-2, Oberon) each of which incorporated his experiences and current thoughts, but which were clearly distinct efforts. I suppose that programming languages have become the brands, so we have Perl 6 and C# 3.0, rather than "the latest effort" from Larry Wall or Anders Hejlsberg. I can understand why dissociating a person's name from a brand is good for the company, but I don't know that it's the best way to serve the industry. Maybe it could be like movies "<em>From the people who brought you..."</em></p>Turbo Ruby: Strong Hints From CodeGear / DevCo2006-11-15T07:59:00-10:002006-11-15T07:59:00-10:00larrytag:knowing.net,2006-11-15:/posts/2006/11/turbo-ruby-strong-hints-from-codegear-devco/<p>The new spinoff from Borland, CodeGear, is strongly hinting that they will produce at least one dynamic language:</p>
<p>CEO Ben Smith: "We're also working on plans that can help developers take advantage of growing and emerging areas like web services, Ruby, Python and Ajax. "</p>
<p>David I: "We are not limited …</p><p>The new spinoff from Borland, CodeGear, is strongly hinting that they will produce at least one dynamic language:</p>
<p>CEO Ben Smith: "We're also working on plans that can help developers take advantage of growing and emerging areas like web services, Ruby, Python and Ajax. "</p>
<p>David I: "We are not limited to just a few programming languages (Delphi, Delphi .NET, Java, C++, C#)....[CodeGear will be driven by languags that are ] compiled, managed, scripted, dynamic and more...What will be the next CodeGear programming language?"</p>
<p>CodeGear FAQ: "The emergence of web services and new development capabilities from Ruby to Python to Ajax provide an opportunity for even more substantial innovation."</p>
<p>Obvious interpretations: a stack for JavaScript programming and debugging (Ajax) and at least one of Turbo Ruby or Turbo Python.</p>Charles Nutter Hints at a JRuby Release By The End of the Year2006-11-14T21:48:00-10:002006-11-14T21:48:00-10:00larrytag:knowing.net,2006-11-14:/posts/2006/11/charles-nutter-hints-at-a-jruby-release-by-the-end-of-the-year/<p>In comments, Sun's Charles Nutter <em>hints</em> that JRuby may ship by the end of year. Or he may be taking a swipe at the Perl 6 guys: you decide. Ruby on at least one of the two major managed platforms: huge for Ruby. (In that post, I caution that it …</p><p>In comments, Sun's Charles Nutter <em>hints</em> that JRuby may ship by the end of year. Or he may be taking a swipe at the Perl 6 guys: you decide. Ruby on at least one of the two major managed platforms: huge for Ruby. (In that post, I caution that it took Jim Hugunin something like 2 years to move IronPython through beta to 1.0. Nutter and Thomas Enebo, the core JRuby developers, only joined Sun two <em>months</em> ago. A year-end release would be pretty darn impressive!)</p>Borland Developer Tools Become CodeGear, nee DevCo, a Wholly Owned Subsidiary2006-11-14T17:13:00-10:002006-11-14T17:13:00-10:00larrytag:knowing.net,2006-11-14:/posts/2006/11/borland-developer-tools-become-codegear-nee-devco-a-wholly-owned-subsidiary/<p>Borland's Developer Tools Group, including the Delphi, C++, C#, and JBuilder tools and the Interbase database tools, have been spun off into a new company called CodeGear to be headed by Ben Smith (Byte's old tech editor?). Contrary to all previous reports, CodeGear will be a wholly owned subsidiary, not …</p><p>Borland's Developer Tools Group, including the Delphi, C++, C#, and JBuilder tools and the Interbase database tools, have been spun off into a new company called CodeGear to be headed by Ben Smith (Byte's old tech editor?). Contrary to all previous reports, CodeGear will be a wholly owned subsidiary, not sold off.</p>
<p>While Alan Zeichick is skeptical about the confusion (and I share his dismissal of "ALM" as a market separate from the development tools market), I take a measure of hope in my April observation that "if Borland corporate saw a way for a self-sufficient company to keep the balance sheet in the black, it would be spinning the division out, not selling it off."</p>Jolt Awards Need Your Input: Best Languages, Development Environments, Books...2006-11-14T14:31:00-10:002006-11-14T14:31:00-10:00larrytag:knowing.net,2006-11-14:/posts/2006/11/jolt-awards-need-your-input-best-languages-development-environments-books/<p><em>Dr. Dobb's Journal</em> has taken over the Jolt Awards now that <em>Software Development</em> is no more. Once again I'll be judging and, actually, serving as Moderator of the Development Environments and Languages category.</p>
<p>Given that we considered VS2005 last year (but, hey!, XNA) and given that Callisto is certainly going …</p><p><em>Dr. Dobb's Journal</em> has taken over the Jolt Awards now that <em>Software Development</em> is no more. Once again I'll be judging and, actually, serving as Moderator of the Development Environments and Languages category.</p>
<p>Given that we considered VS2005 last year (but, hey!, XNA) and given that Callisto is certainly going to be nominated, what other languages and development environments have <strong>or should have</strong> "Jolted" the industry in the year 2006?</p>
<p>IronPython went to 1.0 a few months ago. </p>
<p>The re-released Turbo products? Were they just a reboxing of existing tools?</p>
<p>Perl 6 may beat the Dec 31 deadline, but JRuby won't.</p>
<p>I wonder if I can sneak in consideration of <a href="http://www.dangermouse.net/esoteric/piet.html">Piet</a>, the programming language in which programs look like abstract paintings. (<em>via</em> Harry Pierson)</p>
<p>What new tools and books have helped you kick butt and take names this year?</p>Am I The Only Geek Still Running 484I (Or is it 486i or 480i)?2006-11-14T08:46:00-10:002006-11-14T08:46:00-10:00larrytag:knowing.net,2006-11-14:/posts/2006/11/am-i-the-only-geek-still-running-484i-or-is-it-486i-or-480i/<p>I don't have an HDTV and I don't think I'm going to buy one in the foreseeable future. I watch TV every evening for a couple of hours. I like TV fine.</p>
<p>I have analog basic cable that requires no set-top box and for which I pay around \<span class="math">\(40 a …</span></p><p>I don't have an HDTV and I don't think I'm going to buy one in the foreseeable future. I watch TV every evening for a couple of hours. I like TV fine.</p>
<p>I have analog basic cable that requires no set-top box and for which I pay around \<span class="math">\(40 a month (it's bundled with my cable Internet, so it's hard to say). I live in a rural area on an island -- I really doubt that I get any HD programming over the air. If I bought an HDTV, my cable rates would climb a minimum of \\)</span>20 as I would have to pay for digital cable, set-top box "rental," and an HDTV package.</p>
<p>Every broadcast show I watch -- everything -- I watch via time-shifted Tivo. If I had HDTV, I would either have to buy a new DVR (\<span class="math">\(\\)</span>\$) or give up 20 minutes per hour to commercials.</p>
<p>My favorite channels are old-time movie channels (TCM and AMC) and Comedy Central, which I don't think broadcast in HD. My understanding is that non-HD shows look somewhere between worse-than-before to terrible on an HDTV.</p>
<p>I have a 27" diagonal set. HDTVs are 16:9, so I believe that a 36" HDTV would provide around the same picture size for broadcast TV.</p>
<p>I watch DVDs from Netflix. DVDs are, what?, 720P? And presumably, you can somehow set them up so that the 16:9 HDTV shows them fullscreen. So those would look better.</p>
<p>So, I buy an HDTV for, say, \<span class="math">\(2500. Plus maybe \\)</span>50 per month in recurring charges. In order to get a no-better picture for my favorite shows, watch new HD shows with commercials and without time-shifting, and get an incremental improvement in DVDs?</p>
<p>\<GeekTone value="Spock">Highly illogical.\</GeekTone></p>
<p>Update: I grabbed 486i from some Google search for "NTSC" but after being mocked, I double-checked. So I guess standard TV is 484i. And HDTV's are 9:5, not 16:9? And DVDs are only \~480 resolution?</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>What Makes A Programming Language?2006-11-13T09:43:00-10:002006-11-13T09:43:00-10:00larrytag:knowing.net,2006-11-13:/posts/2006/11/what-makes-a-programming-language/<p>Bill de h?ra's post on the language's he's used in the past year contains the provocative thought "...some people are looking at things like HTTP and Ant and CSS and wondering whether they are really programming languages....[T]hey are either replacing or reducing the raw coding I used …</p><p>Bill de h?ra's post on the language's he's used in the past year contains the provocative thought "...some people are looking at things like HTTP and Ant and CSS and wondering whether they are really programming languages....[T]hey are either replacing or reducing the raw coding I used to do....[A]t least, if you start thinking about HTTP as a language, the job of using it becomes far easier...."</p>
<p>To me, the definition of a programming language has always been simple: Is it <a href="https://en.wikipedia.org/wiki/Turing_completeness">Turing complete</a>? More practically, I skip any type of formal analysis and look for control structures and recursion. By my criteria, not only is HTTP not a language, SQL (as it's generally used) isn't either. This definition has two advantages: it's pretty bulletproof from a theoretical standpoint and, pragmatically, something feels "right" about assigning looping and recursion as the uniquely "program language-y" thing. Lots of things are complex or reduce complexity and lots of things have state that evolves over time, but solving problems by looping is what makes a solution <em>feel</em> like programming.</p>
<p>On the other hand, this view seems a little out-of-touch, if not anachronistic. Much of the "action" traditionally associated with language development ( conceptual mappings, problem-solving models, etc.) has shifted to framework development. Part of this is the evolution from "libraries" (generally, a group of related functions at the same abstraction level, such as a library for trigonometry or statistical analysis) to "frameworks" (a set of components of different abstraction levels covering an entire problem domain). Objects unified the vocabulary for discussions of behavior, data, and structure. Once that was established, patterns gave us a channel for professional discourse that previously might have required a shared language background (indeed, they're called "pattern languages.")</p>
<p>Further, something is wrong with actually writing a programming language. As Bjarne Stroustrup puts it, "On the order of 200 new languages are developed each year and...about 200 languages become unsupported each year." So on the one hand, you have the great value of expressing domain reasoning directly in code and on the other, you have a task that requires a large effort and which is almost certainly doomed. Perhaps one is smarter to simply embrace studying frameworks.</p>
<p>But ultimately I cannot believe that that's the right answer: frameworks are great, but I don't think they shift your reasoning in the way that a language does. I was fortunate enough to spend some time in my early professional years shifting back and forth between C and Prolog: two <em>radically</em> different languages. It was obvious to me that different parts of my reasoning were engaged by the different languages; I could be exhausted in C and fresh as a daisy in Prolog and vice versa. (In retrospect, it's probably fair to say that in C I was dealing with "housekeeping" and in Prolog I was solving "higher-level" problems, but in those days, low-level coding for data acquisition, transformation, and speed-ups was not optional.)</p>
<p>Stroustrup advocates <a href="https://about.att.com/error.html">Semantically Enhanced Libraries</a> as the route forward. I note an echo of the modular compiler meme that Harry Pierson has mentioned (essentially: start from a complete language and extend/restrict it rather than start with a grammar and fire up lex/yacc). Those familiar with Lisp will naturally point out that extending/restricting the base language is precisely what Lisp macros do; the disadvantage being that the language being extended/restricted is Lisp (which I don't mean in a snide way, but simply in the way of acknowledging that the market has declined to embrace Lisp over the course of forty-five years).</p>
<p>Given my belief that the shift from single- to multi-to many- core is going to be <em>the</em> issue in programming within a half-decade, I naturally think we need tools for exploring new semantics. To me, it still seems that the best tools for that are new languages, not new constructions built on sinking foundations.</p>Tim Bray on Frameworks (But Not .NET)2006-11-11T11:26:00-10:002006-11-11T11:26:00-10:00larrytag:knowing.net,2006-11-11:/posts/2006/11/tim-bray-on-frameworks-but-not-net/<p><a href="http://www.tbray.org/ongoing/When/200x/2006/11/10/Comparing-Frameworks">Tim Bray compares Frameworks</a> (Source: Still done seeking). I largely agree with Tim Bray's analysis, particularly the point that all major web frameworks will scale sufficiently and that, in the long run, maintainability is likely to be the most important factor in the attractiveness of a framework.</p>
<p>By that token …</p><p><a href="http://www.tbray.org/ongoing/When/200x/2006/11/10/Comparing-Frameworks">Tim Bray compares Frameworks</a> (Source: Still done seeking). I largely agree with Tim Bray's analysis, particularly the point that all major web frameworks will scale sufficiently and that, in the long run, maintainability is likely to be the most important factor in the attractiveness of a framework.</p>
<p>By that token, Bray recommends Rails and Java, and is skeptical of PHP. I think this is probably right, and that ASP.net, using C# or Visual Basic, would compare to Java. The Rails advantage, according to Bray, derives from Ruby's increased expressiveness: fewer lines of code means clearer code. While that's often true, it ain't necessarily so (metaprogramming can be very hard to understand). Further, implicitly typing language has disadvantages for maintainability. Further, one should not ignore the ease with which one can hire a maintenance programmer, which will be certainly easier if one chooses a Java or C# framework.</p>
<p>In my opinion, the jury is still out on the relative maintainability of Ruby on Rails versus Java/Struts and ASP.NET.</p>New Island Emerges From Ocean2006-11-10T11:59:00-10:002006-11-10T11:59:00-10:00larrytag:knowing.net,2006-11-10:/posts/2006/11/new-island-emerges-from-ocean/<p>Off Tonga, a volcanic island has emerged from the depths. How cool must <em>that</em> be to see?</p>Passports in lead foil2006-11-09T14:22:00-10:002006-11-09T14:22:00-10:00larrytag:knowing.net,2006-11-09:/posts/2006/11/passports-in-lead-foil/<p><img alt="img" src="http://photos1.blogger.com/blogger/6741/3794/320/passport.jpg">
<img alt="img" src="http://photos1.blogger.com/blogger/6741/3794/1600/passport.jpg"> Alan Zeichick explains why if you must get a new passport, you should invest in a lead foil billfold.</p>Puerto Rico Board Game (hReview)2006-11-09T09:16:00-10:002006-11-09T09:16:00-10:00larrytag:knowing.net,2006-11-09:/posts/2006/11/puerto-rico-board-game-hreview/<p>::: {.hreview}
A Board Game That Adults Can Play {#a-board-game-that-adults-can-play .summary}</p>
<hr>
<p>11/9/2006</p>
<div>
by [[Larry O'Brien]{.fn}]{.reviewer .vcard}
</div>
<p>[product]{.type style=""} <a href="https://www.amazon.com/gp/product/B00008URUT"><img alt="Image of Puerto Rico" class="photo" src="http://images.amazon.com/images/P/B00008URUT.01._AA_SCTZZZZZZZ_.jpg"></a></p>
<p>::: {.item .fn}
Puerto Rico
:::</p>
<p>?????</p>
<p>Visiting friends gave me the opportunity to coerce a try of Puerto Rico, a very well-reviewed board game. Unlike most people who review board …</p><p>::: {.hreview}
A Board Game That Adults Can Play {#a-board-game-that-adults-can-play .summary}</p>
<hr>
<p>11/9/2006</p>
<div>
by [[Larry O'Brien]{.fn}]{.reviewer .vcard}
</div>
<p>[product]{.type style=""} <a href="https://www.amazon.com/gp/product/B00008URUT"><img alt="Image of Puerto Rico" class="photo" src="http://images.amazon.com/images/P/B00008URUT.01._AA_SCTZZZZZZZ_.jpg"></a></p>
<p>::: {.item .fn}
Puerto Rico
:::</p>
<p>?????</p>
<p>Visiting friends gave me the opportunity to coerce a try of Puerto Rico, a very well-reviewed board game. Unlike most people who review board games, we are <em>not</em> "into" the genre, so this was very much a new experience for us. Basically, we ended up playing every night and, after the third night, Tina turned to me and said, very intensely, "We have to get [our neighbors] addicted to this."</p>
<p>For those like us new to this new type of board game, the rules are initially pretty opaque. The core of the game is a SimCity-like resource cascade: to gain victory points and money, you ship goods. To ship goods, you produce goods. To produce goods, you must have appropriate production facilities and plantations. Facilities and plantations must be populated with colonists. (For instance, to produce sugar, you need to build a sugar plantation and a sugar mill and populate them with workers.)</p>
<p>The initially confusing key to the the game, though, is that the game state evolves by way of an "inner loop":</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="n">Game</span><span class="p">.</span><span class="n">playing</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">true</span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">foreach</span><span class="w"> </span><span class="n">Player</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Player</span><span class="w"> </span><span class="n">chooses</span><span class="w"> </span><span class="n">Role</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="p">[</span><span class="n">various</span><span class="w"> </span><span class="n">roles</span><span class="p">]</span>
<span class="w"> </span><span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="n">foreach</span><span class="w"> </span><span class="n">Player</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">Player</span><span class="w"> </span><span class="n">advances</span><span class="w"> </span><span class="n">his</span><span class="w"> </span><span class="n">resource</span><span class="o">-</span><span class="n">creation</span><span class="w"> </span><span class="n">according</span><span class="w"> </span><span class="n">to</span><span class="w"> </span><span class="n">the</span><span class="w"> </span><span class="n">chosen</span><span class="w"> </span><span class="n">Role</span><span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>The "Role" chosen determines the game state: one Role ("Mayor") produces colonists, another ("Builder") allows production facilities to be built, etc. The first time you play the game (we were smart to play two "practice" games, the first just to get a sense of the rules, and the second to think out loud about strategy and tactics) you concentrate on the inner loop and pretty much just choose the Role that brings you the most immediate benefit. But the <em>interesting</em> part comes when you start anticipating the Roles that others will choose ("The 'Mayor' role is so beneficial to Danni that I know she will choose it when her turn comes around. Therefore, I can choose 'Settler' with the confidence that I will soon get colonists to populate it.")</p>
<p>The rules are written fairly densely -- they're very good about specifying "may" versus "must" and the order of things -- which makes them initially very opaque. But after an hour or so of frustration (or, I bet, being introduced to play by an experienced person) things come into focus.</p>
<p>An aspect that's very enjoyable is that every game we've played has played out in a <em>very</em> different way: there doesn't appear to be any simple optimal strategy. I'm sure that with experience you get better and gain advantages, but the complexity seems to even the playing field significantly.</p>
<p>Highly recommended.
:::</p>To The PR Person Who Called At 6AM2006-11-06T09:28:00-10:002006-11-06T09:28:00-10:00larrytag:knowing.net,2006-11-06:/posts/2006/11/to-the-pr-person-who-called-at-6am/<p>I'm really not upset. It's the price I pay to work out of my house in Hawaii. I normally keep West Coast hours, and just a week ago, during Daylight Savings Time, I would have been checking my emails and drinking coffee at 6. So please feel free to call …</p><p>I'm really not upset. It's the price I pay to work out of my house in Hawaii. I normally keep West Coast hours, and just a week ago, during Daylight Savings Time, I would have been checking my emails and drinking coffee at 6. So please feel free to call back!</p>Database Refactoring & Ruby2006-11-06T09:22:00-10:002006-11-06T09:22:00-10:00larrytag:knowing.net,2006-11-06:/posts/2006/11/database-refactoring-amp-ruby/<p>I don't do a lot of database work, I believe in rendering unto the DBA that which is the DBA's. But ya got's to pay the bills, so I've been doing some refactoring work on a database. While flirting with RedGate's SQL Dependency Tracker, I finally figured out how to …</p><p>I don't do a lot of database work, I believe in rendering unto the DBA that which is the DBA's. But ya got's to pay the bills, so I've been doing some refactoring work on a database. While flirting with RedGate's SQL Dependency Tracker, I finally figured out how to replace my current Visio install wtih Enterprise Architect Edition and that did a good-enough job for me in terms of reverse- and forward-engineering the database.</p>
<p>The next phase was formatting the initial data. This was in the form of about half-a-dozen text dumps (a few in XML, a few in CSV) from 3 different sources, each with their own names and structures. Several involved not-particularly-difficult data formatting as well (date formats, etc.).</p>
<p>I did this with Ruby, using the interactive shell a little, but always dropping back to scripts, since ultimately the datasources might very well create a "new" dump and I wanted to be able to automate the process as much as possible. The ability to create an iterator (the "yield" keyword) turned out to be a nice part of this, as it was trivial to do this development generating just a few thousand records and then basically expand the iterator. Of course this would have been <em>possible</em> using normal imperative techniques, but language choice is all about what approaches the language <em>facilitates</em>, not what is "possible" in the language.</p>
<p>So the development of the data-transform scripts was very positive. As the dataset grew, though, the performance became problematic: I was only generating about 1,000 records per minute. Since the complete dataset would be on the order of 1,000,000 records, I was looking at an evening-to-morning batch run.</p>
<p>That would be no big deal <em>if</em> I knew that it was a one-time effort, <em>but</em> that's not appropriate in Our Agile Times, right? One must be sanguine to the possibility of the database being refactored and repopulated often.</p>
<p>Additionally, the text dumps were not crystalline. Every once in a while there would be some heretofore-unseen oddity that would, in the best case, raise an exception and stop the processing and, in the worst case, quietly corrupt the data stream. And, of course, when the destination is a normalized data structure, the corruption of one record can have far-reaching implications.</p>
<p>Further, it's difficult to know exactly <em>why</em> the performance is what it is. Am I IO-bound, CPU-bound, or memory-bound? Am I thrashing the Garbage Collector? Are there performance implications to those nice-to-use iterators? I like the Ruby language, but I am far from an expert in its internals. This raises two issues about choosing a non-mainstream language.</p>
<p>One issue is that when you get an <a href="https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/">abstraction leak</a>, the resource advantages of a mainstream language / platform can become very significant. If there were a book called "Ruby Performance Programming," I'm sure it would help. If I were running Ruby on either the JVM or the CLR, I would be able to leverage lots of existing tools and knowledge about memory behavior.</p>
<p>The other issue is that, had I put my credibility onthe line selecting Ruby to script the process, I would be open to criticism. "It would have run faster had you programmed it in [preferred mainstream language]!" If I was vulnerable to office politics, the choice of Ruby would have "given them an opening" to criticize me. (I can't remember if there's a general name for "No one ever got fired for choosing IBM," but that's the dynamic at play.) It is irrelevant, for the purposes of that kind of real-world issue, whether the mainstream, conservative language really would have led to significantly faster runtime performance (my hunch is that it almost certainly <em>would)</em> and whether any such advantage at runtime would have outweighed the development-time advantages (my hunch is it almost certainly <em>would not</em>).</p>
<p>Since I am a programmer and not an evangelist, my solution will disappoint theorists: I reworked the Ruby enough to create 5,000 records at a time and to take "restart" command-line parameters that could be used to re-start the process midway through the data, after a data corruption is manually diagnosed. It's far from a perfect solution: it's easy to imagine an import taking 3 complete days (day 1 start, data corruption occurs in evening. Corrected day 2 morning, restart runs into day 2 evening, data corruption 2 happens).</p>OneNote Section: Product Keys / Serials2006-11-03T10:48:00-10:002006-11-03T10:48:00-10:00larrytag:knowing.net,2006-11-03:/posts/2006/11/onenote-section-product-keys-serials/<p>This is probably obvious, but my life has been eased since I've created a OneNote section called "Product Keys" and used it to store serial numbers and keys.</p>SQL Injection Bug Defined2006-11-01T10:02:00-10:002006-11-01T10:02:00-10:00larrytag:knowing.net,2006-11-01:/posts/2006/11/sql-injection-bug-defined/<p>Joel Spolsky briefly explains this <a href="https://www.joelonsoftware.com/2006/11/01/whats-a-sql-injection-bug/">very common security defect</a>. Because my last name (O'Brien) contains an apostrophe, I'm particularly conscious of how common is this vulnerability.</p>Tech Ed 2007 Not In New Orleans: I Wish They'd Reconsider2006-10-31T14:20:00-10:002006-10-31T14:20:00-10:00larrytag:knowing.net,2006-10-31:/posts/2006/10/tech-ed-2007-not-in-new-orleans-i-wish-theyd-reconsider/<p>This has been around for a month, but I wanted to lament that <a href="http://bink.nu/Article8446.bink">Microsoft has cancelled their plans to hold next year's major conferences in New Orleans</a>. New Orleans is one of my favorite cities (and is a great place to ~~get really drunk~~ hold a conference) and certainly needs …</p><p>This has been around for a month, but I wanted to lament that <a href="http://bink.nu/Article8446.bink">Microsoft has cancelled their plans to hold next year's major conferences in New Orleans</a>. New Orleans is one of my favorite cities (and is a great place to ~~get really drunk~~ hold a conference) and certainly needs the business. Apparently, the airlines have not restored capacity to service the city, raising a nasty Catch-22 when it comes to the city hosting major events.</p>Practical OCaml2006-10-30T18:15:00-10:002006-10-30T18:15:00-10:00larrytag:knowing.net,2006-10-30:/posts/2006/10/practical-ocaml/<p>My very favorite technical book of last year was Peter Seibel's <a href="https://www.amazon.com/exec/obidos/ASIN/1590592395/thinkinginnet-20">Practical Common Lisp</a>. APress has recently released Practical OCaml by Joshua Smith. OCaml is the language implemented by <a href="https://www.microsoft.com/en-us/research/project/f-at-microsoft-research/?from=http%3A%2F%2Fresearch.microsoft.com%2Ffsharp%2Ffsharp.aspx">F#</a> (I don't know if F# is super- or sub-set -- perhaps the book will clarify).</p>
<p>I doubt that lightning will strike …</p><p>My very favorite technical book of last year was Peter Seibel's <a href="https://www.amazon.com/exec/obidos/ASIN/1590592395/thinkinginnet-20">Practical Common Lisp</a>. APress has recently released Practical OCaml by Joshua Smith. OCaml is the language implemented by <a href="https://www.microsoft.com/en-us/research/project/f-at-microsoft-research/?from=http%3A%2F%2Fresearch.microsoft.com%2Ffsharp%2Ffsharp.aspx">F#</a> (I don't know if F# is super- or sub-set -- perhaps the book will clarify).</p>
<p>I doubt that lightning will strike twice, but if Smith's book is half as good as Seibel's I look forward to reading it.</p>Y2K: What Went Right?2006-10-30T12:05:00-10:002006-10-30T12:05:00-10:00larrytag:knowing.net,2006-10-30:/posts/2006/10/y2k-what-went-right/<p>I've been writing an article about software brittleness and found myself asking a question I can't answer: Why was there so little software chaos in January 2000? There really <em>were</em> hundreds of millions if not billions of lines of COBOL that were at least potentially vulnerable to the rollover bug …</p><p>I've been writing an article about software brittleness and found myself asking a question I can't answer: Why was there so little software chaos in January 2000? There really <em>were</em> hundreds of millions if not billions of lines of COBOL that were at least potentially vulnerable to the rollover bug, those systems really <em>were</em> spread out across a huge variety of industries, including sectors like business and insurance. I've never heard a post-mortem of Y2K that claimed that pre-Y2K remediation efforts were so heroic and wide-spread that the problem was just plain "caught in the nick of time."</p>
<p>In the years prior to 2000, I can at least claim that I cautioned against the most dire warnings. In essays in <em>Software Development</em> and in a letter-to-the-editor in response to a <em>Newsweek</em> editorial, I pointed out that the oft-quoted estimate of \$600M seemed to originate from the worst-case scenario of a single analyst's report, that most PC-based software was written in languages not vulnerable to the problem, and that while errors would certainly crop up (<em>wrong!</em>), many systems would tolerate the computer's belief that the year was 1900. But... I didn't expect the <a href="https://en.wikipedia.org/wiki/Y2K">utter lack of effects</a>.</p>
<p>It's a puzzlement.</p>Extraordinary Claim: British Boffins Crack Lottery2006-10-29T09:50:00-10:002006-10-29T09:50:00-10:00larrytag:knowing.net,2006-10-29:/posts/2006/10/extraordinary-claim-british-boffins-crack-lottery/<p>Supposedly, a group of scentists and academics in Britain have, on an investment of \<span class="math">\(8700, used a mathematical approach to win a \\)</span>13M jackpot. (Source: <a href="https://novaspivack.typepad.com/nova_spivacks_weblog/2006/10/a_mathematical_.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+typepad%2FMindingThePlanet+%28Minding+the+Planet%29">A Statistical Approach for Winning Lottery -- Group Wins \$13M!</a>)</p>
<p>Momentarily assuming that there's no "rake" and that the lottery pays \<span class="math">\(1 in prizes for each …</span></p><p>Supposedly, a group of scentists and academics in Britain have, on an investment of \<span class="math">\(8700, used a mathematical approach to win a \\)</span>13M jackpot. (Source: <a href="https://novaspivack.typepad.com/nova_spivacks_weblog/2006/10/a_mathematical_.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+typepad%2FMindingThePlanet+%28Minding+the+Planet%29">A Statistical Approach for Winning Lottery -- Group Wins \$13M!</a>)</p>
<p>Momentarily assuming that there's no "rake" and that the lottery pays \<span class="math">\(1 in prizes for each \\)</span>1 in gambling, that's "only" \~1500:1 odds. Not likely, but stranger things happen every day.</p>
<p>But, of course, the problem with <em>any</em> kind of approach to the lottery (or, for that matter, stock picking), is that there <em>is</em> a rake. In the case of the lottery, the state takes a large percentage of the income. In the case of stocks, trading costs and the speed of execution have destroyed many a trading "system" (it's surprisingly easy to create a statistical model that works, if execution is instantaneous and free).</p>
<p>The scant details seem to describe a technique for covering all numbers in order to increase the amount of payout when those numbers hit (as opposed to, say, the numbers 1-12 and 1-30, which are used by people betting birthdays and anniversaries). I find it highly doubtful that any such technique could beat the rake in a professionally-run, large-scale lottery. If there <em>is</em> a technique, I hope the newly rich academics publish their mathematical techniques, because it will probably necessitate rewriting the textbooks of probability!</p>
<p>Oh, and this gives me an excuse to blog a long-held opinion of mine: it's perfectly rational to buy a ticket for a lottery. What's contemptibly irrational is buying two or more.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>The Departed: Just a Fun Ride or Tightly Plotted? (Spoilers)2006-10-26T08:40:00-10:002006-10-26T08:40:00-10:00larrytag:knowing.net,2006-10-26:/posts/2006/10/the-departed-just-a-fun-ride-or-tightly-plotted-spoilers/<p>We went to see <em>The Departed</em> last night. I'm trying to figure out if I should try to figure it out or if, like "Snakes on a Plane," verisimilitude was not it's highest goal.</p>
<p>First, though, I have to say how gratifying it is to hear actual Boston accents (Matt …</p><p>We went to see <em>The Departed</em> last night. I'm trying to figure out if I should try to figure it out or if, like "Snakes on a Plane," verisimilitude was not it's highest goal.</p>
<p>First, though, I have to say how gratifying it is to hear actual Boston accents (Matt Damon and Mark Wahlberg). What you hear 99% of the time from actors is this weird Hollywood concept of what a Boston accent sounds like; it's vanishingly rare to hear an actual accent. Damon, in particular, can sound like he never trained himself out of it.</p>
<p>Okay, spoilers hereafter...</p>
<hr>
<p>My biggest question is simple: What was the basis of Costello's relationship with the FBI?</p>
<p><em>If</em> he was protected by <strong>primarily honest</strong> Feds, <em>then</em> they must have been getting something out of it. <em>But</em> Costello only gave them underlings and people "who were going down anyway." The movie definitely made it seem that Costello was the top of the food chain, so the idea of him being a resource to get to another level of criminal doesn't really make sense dramatically. If, in fact, that was the idea, the Chinese chip smuggler situation would have gone down differently: <em>if</em> that was all a charade perpetrated by Costello and Ellerby (Alex Baldwin), either the Chinese would get away scot-free but compromised (<em>not</em> get busted at the border "with lightbulbs or something") or they would have been picked up that night in a way that let Costello escape (by the Coast Guard, say).</p>
<p>So the hypothesis that Costello was working for the Feds seems weak.</p>
<p><em>If</em> Costello was protected by <strong>primarily corrupt</strong> Feds, <em>then</em> he was never in real danger from Ellerby. In fact, I think this would necessarily imply that Ellerby / Baldwin was corrupt. Ellerby was in charge post-Queenan. <em>If</em> Ellerby was corrupt, Costello would not have been ambushed at the drug raid.</p>
<p>So the hypothesis that the Feds were working for Costello seems weak.</p>
<p>The plot points came fast and furious in the movie, so I may very well have missed something. Thoughts?</p>
<hr>
<p>I'll offer 3:1 that Scorsese finally gets his "Best Director" Academy Award.</p>God, I Hate Classpaths2006-10-25T14:49:00-10:002006-10-25T14:49:00-10:00larrytag:knowing.net,2006-10-25:/posts/2006/10/god-i-hate-classpaths/<p>I have to wire up a ColdFusion to an Axis Web Service. I've spent the past 3 hours trying to figure out freaking classpath issues: something about a ClassCastException from a org.apache.commons.logging.LogFactory. I'm giving up for the day. Stupid freaking classpaths.</p>Blog theme2006-10-25T09:36:00-10:002006-10-25T09:36:00-10:00larrytag:knowing.net,2006-10-25:/posts/2006/10/blog-theme/<p>Incidentally, my normal blog CSS screwed up the rendering in IE7 and Firefox. Since I have not yet updated my <a href="http://www.dasblog.net">dasBlog</a> installation to the latest, I've decided to switch to this staid theme until I upgrade and can do some browser compatibility testing. </p>LISP for the XBox360?2006-10-25T09:34:00-10:002006-10-25T09:34:00-10:00larrytag:knowing.net,2006-10-25:/posts/2006/10/lisp-for-the-xbox360/<p>Patrick Logan says that some Schemers have put a <a href="http://patricklogan.blogspot.com/2006/10/lisp-on-ds.html">Scheme on the Nintendo DS</a>. Naturally, my first thought was "Hmmm... I wonder if I could do that with XNA?" (Or, more generally, if one could write a self-contained interpreter / compiler that would run on the XBox360). You could certainly do …</p><p>Patrick Logan says that some Schemers have put a <a href="http://patricklogan.blogspot.com/2006/10/lisp-on-ds.html">Scheme on the Nintendo DS</a>. Naturally, my first thought was "Hmmm... I wonder if I could do that with XNA?" (Or, more generally, if one could write a self-contained interpreter / compiler that would run on the XBox360). You could certainly do a clunky, self-contained interpreter but the real goal would be something running at chip-level or at least CLR-level. Generating the appropriate bytes is certainly well within the capabilities of the hardware (are you kidding?), but the really, really hard thing would be convincing XNA to start executing your generated bytes as instructions. At the assembly-language or C/C++ level, of course, it's trivial to command the machine to "execute these bytes as instructions," but (one of) the major security-oriented points of managed environments is that such plasticity is forbidden. I suspect that XNA has pretty tight walls around the sandbox to prevent you getting around this limitation, as once you allow this capability, security guarantees become much, much harder. (Not impossible, though, in the case of managed code, since you can still run security checks at load-time -- whether the bytes were generated ten months or ten microseconds ago is irrelevant.) </p>Computer Gaming World Archive: Inspiration for XNA Programming?2006-10-23T12:11:00-10:002006-10-23T12:11:00-10:00larrytag:knowing.net,2006-10-23:/posts/2006/10/computer-gaming-world-archive-inspiration-for-xna-programming/<p>Computer Gaming World has <a href="https://www.gamefront.com/">posted online</a> their first 100 issues, going back to 1981. The first issue has a great essay by Chris Crawford about how computer-based wargames <em>will be</em> different than boardgames. Not surprisingly, he's pretty much spot-on with his analysis.</p>
<p>I also enjoyed it because it's a great …</p><p>Computer Gaming World has <a href="https://www.gamefront.com/">posted online</a> their first 100 issues, going back to 1981. The first issue has a great essay by Chris Crawford about how computer-based wargames <em>will be</em> different than boardgames. Not surprisingly, he's pretty much spot-on with his analysis.</p>
<p>I also enjoyed it because it's a great indication of what a true hobbyist-driven market might look like. Today's hardware is, of course, vast orders of magnitude more powerful but the amount of programming effort available to a single hobbyist is still the same. Looking at "what could be achieved" in those days helps one imagine what could be achieved today.</p>
<p>Another thing that really gave me a pang was the page layout that, with its line drawings and inflexibility, reminded me of magazines like <em>Dragon</em> and <em>Microcornucopia</em>.</p>Cow Paths and Coding2006-10-23T10:09:00-10:002006-10-23T10:09:00-10:00larrytag:knowing.net,2006-10-23:/posts/2006/10/cow-paths-and-coding/<p>The always insightful <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments?kc=EWITAEMNL102306EOAD">Peter Coffee has a good new column</a> that offers a couple contrarian observations. To the generally positive buzz over <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Cisco's new virtual meeting system</a> (HD screens, lighting, surround-sound), Peter makes the skewering concession "If face-to-face meetings were considered the high point of organizational productivity, I'd endorse the …</p><p>The always insightful <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments?kc=EWITAEMNL102306EOAD">Peter Coffee has a good new column</a> that offers a couple contrarian observations. To the generally positive buzz over <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Cisco's new virtual meeting system</a> (HD screens, lighting, surround-sound), Peter makes the skewering concession "If face-to-face meetings were considered the high point of organizational productivity, I'd endorse the idea of throwing bandwidth and hardware at the task of migrating that process to cyberspace." <em>Touche.</em></p>
<p>Coffee frames the article with a discussion of "paved cow paths" which are (apocryphally, one suspects) how Boston's notorious street layout evolved. This comes right up to the edge of software development heresy: paving grass-worn paths is one of the cliches of explaining "patterns;" incrementalism is a watchword of the <a href="http://agilemanifesto.org/principles.html">agile movement</a>; and, for that matter, Boston rules, ok?</p>
<p>Coffee's long had an enterprise-level perspective on development and although he holds his fire in this column, I suspect that he may be gearing up for an assault on the common wisdom.</p>John Lam (RubyCLR) Joins MSFT2006-10-21T09:49:00-10:002006-10-21T09:49:00-10:00larrytag:knowing.net,2006-10-21:/posts/2006/10/john-lam-rubyclr-joins-msft/<p>John Lam, whose RubyCLR bridge has been a fascinating and seemingly highly-successful project, is joining Microsoft. Details are vague, but he says he'll "be working in the CLR team" and "I'm not going to leave the Ruby community" but makes it pretty clear that he's looking to hand off the …</p><p>John Lam, whose RubyCLR bridge has been a fascinating and seemingly highly-successful project, is joining Microsoft. Details are vague, but he says he'll "be working in the CLR team" and "I'm not going to leave the Ruby community" but makes it pretty clear that he's looking to hand off the RubyCLR codebase to the community (<em>hmmm...I have such copious spare time...</em>).</p>
<p>I'll be trying to wheedle details out of him, but I still feel that Microsoft will not produce a Ruby but, something at least Java:C#::Ruby:<em>X</em> if not even a little bit more of a Ruby-VB hybrid. Timing-wise <em>let's say</em> that Microsoft has designed a "more dynamic" language (VB.Nexter, Sapphire [Perl->Ruby->Sapphire]). One could <em>well imagine</em> that they might be in a good position to develop a back-room prototype for PDC2007.</p>Adobe Acquires Serious Magic2006-10-19T07:40:00-10:002006-10-19T07:40:00-10:00larrytag:knowing.net,2006-10-19:/posts/2006/10/adobe-acquires-serious-magic/<p><a href="https://www.adobe.com/">Serious Magic Communicator</a> is a nice product: it combines teleprompter and chromakey (green screen) software, so you can rapidly create "talking head" videos with video or graphics in the background, a la TV weathermen. The quality, of course, isn't exactly <em>Lord of the Rings</em>, but it's a very fast way …</p><p><a href="https://www.adobe.com/">Serious Magic Communicator</a> is a nice product: it combines teleprompter and chromakey (green screen) software, so you can rapidly create "talking head" videos with video or graphics in the background, a la TV weathermen. The quality, of course, isn't exactly <em>Lord of the Rings</em>, but it's a very fast way to produce content.</p>
<p>Personally, I've found that it's not quite a silver bullet for producing training videos for software developers, at least not without actually building a small production studio, but it's quite good.</p>
<p>Anyway, they've been acquired by Adobe. It may be that Adobe acquired them out of petty cash for some of their other technologies, like their HD codecs, but hopefully it will mean a wider audience for Communicator.</p>52 Hours After The Quake, 100 FEMA Experts Take A Chartered Jet In2006-10-18T15:02:00-10:002006-10-18T15:02:00-10:00larrytag:knowing.net,2006-10-18:/posts/2006/10/52-hours-after-the-quake-100-fema-experts-take-a-chartered-jet-in/<p>I wasn't going to criticize FEMA for spending \$400K flying in a response to the quake. Post-Katrina, I was certainly expecting to see some highly visible Federal presence here. But it turns out that they flew 100 experts, including hazmat teams and smokejumpers, <a href="https://www.msn.com/">more than 2 days after the quake …</a></p><p>I wasn't going to criticize FEMA for spending \$400K flying in a response to the quake. Post-Katrina, I was certainly expecting to see some highly visible Federal presence here. But it turns out that they flew 100 experts, including hazmat teams and smokejumpers, <a href="https://www.msn.com/">more than 2 days after the quake hit</a>, when it was quite clear by that time that we didn't have a crisis.</p>
<p>I hope they're enjoying what is, even by Hawaiian standards, some beautiful weather.</p>Ruby Threads Are Actually Single-Process2006-10-18T13:31:00-10:002006-10-18T13:31:00-10:00larrytag:knowing.net,2006-10-18:/posts/2006/10/ruby-threads-are-actually-single-process/<p>Prob'ly all real Rubists know this, but I was disappointed to discover that Ruby's threading is implemented in the Ruby interpreter's process and, within that, does not take advantage of the native system's threading capabilities. Although I assume that this is an implementation detail and not part of the language …</p><p>Prob'ly all real Rubists know this, but I was disappointed to discover that Ruby's threading is implemented in the Ruby interpreter's process and, within that, does not take advantage of the native system's threading capabilities. Although I assume that this is an implementation detail and not part of the language spec, it means that at the moment Ruby is incapable of taking advantage of multicore/multiprocessor systems.</p>Anecdotal "Animals Knew" Stories About Earthquake Are Appearing2006-10-17T09:51:00-10:002006-10-17T09:51:00-10:00larrytag:knowing.net,2006-10-17:/posts/2006/10/anecdotal-quotanimals-knewquot-stories-about-earthquake-are-appearing/<p>So far, I've heard that horses at a show up in Kamuela started bucking several seconds before and that fish at a pond in one of the resorts started jumping as much as minutes before the quake. There's even a report about cockroaches going crazy the night before.</p>
<p>At the …</p><p>So far, I've heard that horses at a show up in Kamuela started bucking several seconds before and that fish at a pond in one of the resorts started jumping as much as minutes before the quake. There's even a report about cockroaches going crazy the night before.</p>
<p>At the scale of a few seconds, I can certainly believe that different species might sense and react at different rates to the first waves and/or there may be some kind of "precursor" wave. In this case, there was absolutely a "build up" to the major shaking and I find it interesting that Tina had gotten out of bed literally in 1 or 2 seconds before the onset.</p>
<p>On the other hand, this island is <em>littered</em> with seismometers due to the volcanoes and if there were long-wavelength precursor waves, they would be visible in the data. Further, while I've heard some theories about gas releases presaging quakes, this quake was not a tectonic slip and originated both 24 miles down and at sea, so if animals here sensed it in the same way they sense a quake in California, you've got a problem with mechanism.</p>
<p>Personally, I think that people's need to project certainty onto an uncertain world is one of the strongest mechanisms of the human psyche.</p>Earthquake Made My Computer Louder2006-10-16T09:07:00-10:002006-10-16T09:07:00-10:00larrytag:knowing.net,2006-10-16:/posts/2006/10/earthquake-made-my-computer-louder/<p>OK, here's some trivia for you: a case fan situated 17 miles from the epicenter of a 6.6 earthquake can be shaken lose to the extent of creating a significant rattle.</p>
<p>Now you know.</p>Hawaii 6-62006-10-15T16:21:00-10:002006-10-15T16:21:00-10:00larrytag:knowing.net,2006-10-15:/posts/2006/10/hawaii-6-6/<p>Thank god for first-world construction codes.</p>
<p>This morning's earthquake, which occurred pretty much directly offshore from us, was several factors more severe than anything I experienced while living in California. I was in the city of San Francisco for the 1989 Loma Prieta earthquake and I compare that experience to …</p><p>Thank god for first-world construction codes.</p>
<p>This morning's earthquake, which occurred pretty much directly offshore from us, was several factors more severe than anything I experienced while living in California. I was in the city of San Francisco for the 1989 Loma Prieta earthquake and I compare that experience to a bumpy subway ride like Boston's "T." The experience of this was akin to what you experience on a wooden roller coaster.</p>
<p>Tina was literally two steps from the bed when the earthquake struck. The onset was like children running overhead in a house: patter-PATTER-Rumble-RUMBLE and then "Holy?" I rolled out of bed and grabbed the dog.</p>
<p>Cheyenne is recovering from an vestibular inner-ear problem and the shaking probably seemed like more of the same to her, but by the time I got in the doorframe, the shaking had reached a level quite unlike anything I experienced in 19 years living in California.</p>
<p>By the time I got into the doorway (and Tina across from me, in another), the sound of breaking glass rose to dominate the low-frequency rumble.</p>
<p>It was at that point that I experienced the Code Red adrenalin shot. The first time you parachute, even if you like jumping off high diving boards and riding roller-coasters, after 100' of drop or so, your body recognizes the unique parameters of your current situation and moves you into a different kind of awareness. I had that for the second half of the quake, which I suppose you'll tell me was only half-a-minute long. A lot of people talk about "time slowing" but for me, the experience is dominated by the complete shutdown of inner dialogue. A zen-like peace, I suppose, if zen-like peace involved being scared.</p>
<p>The thing that felt very different was the short-wavelength motion. I was holding my dog by the collar and she was going one way and I was going another. The "twistiness" of the shaking was, qualitatively, much different than anything I'd experienced plus, of course, the severity of the shaking was higher. I have a good sense of balance and I was almost thrown off my feet.</p>
<p>After the shaking was gone for a few seconds, I let the dog go and we began to assess the damage, which was disheartening. Dozens of pictures fell, including a heavy oil painting whose hanging wire was <em>snapped</em> by the jolting. Most of the appliances "walked" -- the TV was an inch from toppling, the stove had moved 5 inches, the refrigerator had shifted. There was broken glass and ceramic everywhere -- vases, mirrors, the shelves and contents of our tiki bar, and dozens of sentimental tchotchkes. Several things broke because something heavier fell on top of them -- a couple sculptures, my SLR camera, a keyboard. Bookshelves collapsed, others were emptied.</p>
<p>That's when the aftershock (or, as they're saying now, a separate 5.8 earthquake) hit. This one felt much more like a "normal" big earthquake. After getting out from the doorframes from that, we heard our neighbor's children screaming.</p>
<p>Their mother was working and their dad had run out to grab breakfast. He'd left his kids, age 4 to 8, watching "Left Behind" -- a movie about The Rapture. Somehow I think that <em>their</em> Code Red adrenalin level put mine to shame. So we looked after them until their Dad rushed home a few minutes later.</p>
<hr>
<p>I am frankly astonished that our house wasn't structurally damaged. The miracle of wood, I guess. Our house was flexing, boy -- I could see it. I now <em>viscerally</em> understand what led to the devastation in places like Aremenia and Iran.</p>
<p>One of our stone retaining walls shifted significantly and another partially collapsed. The composition of the Big Island is essentially jagged lava rock in all sizes -- the island is so young and amorphous and the way that lava forms is such that the geology hasn't sorted itself out. This is one of the reasons why the images you're seeing from the news of collapsed rock walls and slides and so forth is quite misleading: it's <em>always</em> like that. There are significant slides and slumpages in every rain and while I don't mean to discount that this event was major, the types of rock falls that are making national news are not all that unusual here.</p>
<hr>
<p>After a few hours passed, we went out to get ice. We live above "Mamalahoa Highway," which is a rural two-lane road and, as it turns out, one of the rockfalls which is making national news is about 100 yards away. We went down to Queen Ka'ahumanu Highway, which runs by the airport and, by 11, the triathletes in town for next week's IronMan were thick on the road.</p>
<p>We were surprised, but the power was on along the highway and we had no problem buying 30 pounds of ice, some coffee, and some water.</p>
<p>Ironically, it's a particularly lovely day here. The other islands in the state, all of which are suffering blackouts presumably related to the earthquake, have the additional misery of heavy rains.</p>
<hr>
<p>True to form, we heard several rumors about this structure's roof collapsing and that place being destroyed and these all turned out to be exaggerations. One thing that's getting extensive coverage on the news is the structural damage to the local hospital. I probably shouldn't say anything, since getting Federal funds to pay for a new hospital would be <em>awesome</em>, but the condition of that hospital was a local disgrace before this morning.</p>
<p>Power came back on at 1 in the afternoon and I received yet another education in the way of TV news. Just as in the 1989 Loma Prieta earthquake, when the media concentrated on the (relatively minor) damage to San Francisco when in fact Santa Cruz and Watsonville were devastated, radio and TV coverage seemed to cover the power outages throughout the state.</p>
<p>As for the local reports they're putting on the airwaves, I admit that shaking varies from place to place and it's possible that someone another twenty miles down the road or over in Oahu had a worse experience than we did, but I think it's even <em>more</em> likely that there's a knowing complicitness between the eye-witnesses and the media about what makes good TV -- "emphasize the terror, emphasize the close call, use words like 'devastation' and 'war zone'" </p>
<p>(I just had a flashback to the movie "Jaws" and the mayor saying "But as you can see, it's a beautiful day..." just as Alex Kintner is paddling out on his inflatable raft...)</p>
<hr>
<p>Oh, did I mention the waterspout that we had Friday?</p>Don't Believe Earthquake "War Zone" News Coverage!2006-10-15T14:19:00-10:002006-10-15T14:19:00-10:00larrytag:knowing.net,2006-10-15:/posts/2006/10/dont-believe-earthquake-war-zone-news-coverage/<p>CNN is <strong>incredibly</strong> over-dramatizing the situation in Kona. They are getting over-wound-up quotes from people who are saying "like a war zone." <strong>This is not true!</strong></p>
<p>One of the "highway blockages" is 100 yards from my house -- it's a couple big rocks in the road. Too big for a person …</p><p>CNN is <strong>incredibly</strong> over-dramatizing the situation in Kona. They are getting over-wound-up quotes from people who are saying "like a war zone." <strong>This is not true!</strong></p>
<p>One of the "highway blockages" is 100 yards from my house -- it's a couple big rocks in the road. Too big for a person to roll away but hardly cause for national coverage. It's a beautiful day here (unlike the rest of the state), power's back up, water's on.</p>Earthquake trashed interior, but safe and no significant structural damage2006-10-15T12:57:00-10:002006-10-15T12:57:00-10:00larrytag:knowing.net,2006-10-15:/posts/2006/10/earthquake-trashed-interior-but-safe-and-no-significant-structural-damage/<p>That sucked. We're directly onshore from the epicenter, as we understand it.</p>
<p>We're okay, though, and the house (pretty incredibly, given the experience) doesn't seem to have any structural damage. Much more extensive blog posting to come.</p>
<p>Power is on (for the moment?) and water is back on.</p>
<p>On Queen …</p><p>That sucked. We're directly onshore from the epicenter, as we understand it.</p>
<p>We're okay, though, and the house (pretty incredibly, given the experience) doesn't seem to have any structural damage. Much more extensive blog posting to come.</p>
<p>Power is on (for the moment?) and water is back on.</p>
<p>On Queen Kaahumanu highway, the IronMan triathletes are back training. Can't let a little temblor spoil your training.</p>You Call That A Nuke?2006-10-13T10:38:00-10:002006-10-13T10:38:00-10:00larrytag:knowing.net,2006-10-13:/posts/2006/10/you-call-that-a-nuke/<p>I absolutely <em>love</em> that what's playing out re. Korea, which presumably expended approximately 1/6 of its enriched uranium on Sunday, is "<a href="https://www.msn.com/">Geez, I don't know.</a> If you <em>did</em>, mighty impressive. But, y'know, if I were Iran, I wouldn't buy anything from you on the basis of <em>that</em>. Maybe you'd …</p><p>I absolutely <em>love</em> that what's playing out re. Korea, which presumably expended approximately 1/6 of its enriched uranium on Sunday, is "<a href="https://www.msn.com/">Geez, I don't know.</a> If you <em>did</em>, mighty impressive. But, y'know, if I were Iran, I wouldn't buy anything from you on the basis of <em>that</em>. Maybe you'd better try again... <em>five more times</em>."</p>Explicit Typing, Trail Blazing, and Packrat Parsing2006-10-13T10:25:00-10:002006-10-13T10:25:00-10:00larrytag:knowing.net,2006-10-13:/posts/2006/10/explicit-typing-trail-blazing-and-packrat-parsing/<p>(Warning / Reassurance: this is not a technical post on how to use packrat parsing to evaluate type declarations.)</p>
<p>Steve Yegge calls this image a "<a href="http://steve-yegge.blogspot.com/2006/10/egomania-itself.html">treatise on non-inferring static type systems...one of the most insightful Computer Science papers ever published</a>":</p>
<p>He then goes on to say "[Different styles are] perfectly …</p><p>(Warning / Reassurance: this is not a technical post on how to use packrat parsing to evaluate type declarations.)</p>
<p>Steve Yegge calls this image a "<a href="http://steve-yegge.blogspot.com/2006/10/egomania-itself.html">treatise on non-inferring static type systems...one of the most insightful Computer Science papers ever published</a>":</p>
<p>He then goes on to say "[Different styles are] perfectly OK with me, as long as they understand that it's not some proven silver bullet ? it's just a style thing." which is exactly true. But the funny cartoon has been reproduced here and there by implicit typing advocates. John Lam wonders "if static typing advocates really look at the world this way."</p>
<p>No, we don't. We look at type declarations this way:</p>
<p>Explicit type declarations are primarily for the task of understanding code.</p>
<p>As <a href="https://blog.codinghorror.com/when-understanding-means-rewriting/">Jeff Atwood recently pointed out</a>, "if you <em>ask</em> a software developer what they spend their time doing, they'll tell you that they spend most of their time writing code. However, if you actually <em>observe</em> what software developers spend their time doing, you'll find that they spend of their time <em>trying to understand code</em>."</p>
<p>Now, people of good faith can argue about what <em>should be</em> the result of evaluating "1/3" but silent conversion to an integer of value 0 (as happens in Ruby) is something where one can imagine a misunderstanding arising. Explicit typing advocates think that the additional four keystrokes of "int x = 1/3" is a small price to pay (especially because there is always a type <em>intention</em> during assignment).</p>
<p>(Incidentally, I use the terms "explicit" and "implicit" typing, not the misleading-for-this-purpose terms "static" and "dynamic." See this column from 2004.)</p>
<p>Steve Yegge, in his <a href="http://steve-yegge.blogspot.com/2006/10/egomania-itself.html">original post</a>, laments that he finds it "pretty farging depressing that a simple declaration" like ArrayList\<int> myListOfInt = new ArrayList\<int>(); "can be haiku-sized in Java." But ignores that what he's declared has capabilities (i.e., constraints) that go beyond the equivalent "myListOfInt = Array.new"</p>
<p>The fair comparison is:</p>
<p>ArrayList myListOfInt = new ArrayList();<br>
myListOfInt = Array.new</p>
<p>As far as the finger-typing burden goes, for a 60WPM (360CPM) typist, it's 40 characters versus 23 -- 1/9 of a second versus 1/16 of a second. Sometimes I get farging depressed from programming, but not over stuff like that.</p>
<p>Again, people of good faith can argue about which is actually easier and less error-prone to understand. I'd certainly agree that an expression like (int)(((float)a/b)*c) is annoying both to write and understand (did I balance my parentheses? Did I do the necessary casts?). But whether typing is implicit or explicit, the closer a program approaches the ideal of one statement per line the easier it is to understand. And, as programs approach that ideal, the relative burden of typing explicitness largely falls away.</p>
<p>Since it's a blog post, I will use an anecdote to "prove" my point: Packrat parsing is the hot new thing in compiler techniques. It is <a href="https://pdos.csail.mit.edu/~baford/packrat/icfp02/">described very clearly in this article</a>, which uses Haskell as the implementation language. Readable as it is, for me to "get" a complex algorithm, I like to implement it myself. So last Sunday, while watching football, I worked through the article's example in Ruby.</p>
<p>Packrat parsing evolves from a top-down predictive (aka recursive-descent) parser. That means parsing an expression like "1+2*3" from left-to-right, suspending judgement on "what you've got" as long as "what's remaining" is ambiguous. (So, for instance, when "what you've got" is "1+" you don't know if "what's remaining" is going to be a number or, as is in this case, the result of a multiplication.) Writing top-down parsers is <em>easy</em> and, sure enough, by the time Bledsoe even <em>tried</em> to hit T.O., I was getting "7" back my Ruby work.</p>
<p>The knock on recursive-descent parsing is that when an ambiguity is resolved, you have to backtrack up "what you've got" until you find an alternative and then you have to reparse the expression from that point forward. (Traditionally, you'll also hear that top-down parsing cannot handle as many grammar forms as bottom-up, but in the realm of programming languages, that's a <a href="https://www.dictionary.com/browse/bagatelle">bagatelle</a>.) This gives naive recursive-descent parsers such as my own poor Big O characteristics (Intuitively, I'd guess O(n log n) -- anyone know?).</p>
<p>(At this point in the anecdote, I will bite my lip from a long tangent that boils down to "With today's hardware resources and modern tastes in compilation-unit size, is poor Big O a sufficient reason to complicate parsing?")</p>
<p>So anyway, if you read the paper, you'll see that the core of Packrat parsing is to change "what's remaining" from a <strong>string</strong> to a doubly-recursive data structure that represents "the remaining string, plus partial results of all previous attempts at disambiguation." The paper explains it very well, moving along in Haskell.</p>
<p>According to most arguments about implicit and explicit typing, a football-game-length project is <em>exactly</em> the sort of thing in which an implicitly typed language ought to shine over an explicitly-typed one. But I <em>really</em> had a hard time refactoring my Ruby into a packrat parser. This was due, in no small part, because of the difficulty in understanding the types being built-up in the data structure. The paper, in explicitly-typed Haskell: clear as a bell. My code's behavior on unit tests: virtually indistinguishable from random.</p>
<p>They were deterministic, of course (even I'm not clumsy enough to introduce randomness into an arithmetic parser), but anticipating which ones would be red and which green after making a change? Baffling. By the time the Phillies locked up the game, I was doing most of my work on a legal pad -- writing type annotations!</p>
<p>And then I tried to do a "use closures instead of functors" refactoring which exceeded my Ruby skills and, because I hadn't put the project under version control, succeeded only in screwing the pooch.</p>
<p>But by the time the late game came on, I was confident that if I were assigned the task of writing a four-function calculator, I could do it by writing a Packrat Parser -- in C#.</p>Anthony (6) Programs A Game2006-10-11T09:10:00-10:002006-10-11T09:10:00-10:00larrytag:knowing.net,2006-10-11:/posts/2006/10/anthony-6-programs-a-game/<p>This is a <a href="http://davidbau.com/archives/2005/07/29/haaarg_world.html">great story</a> about teaching Anthony to program his first game. An <a href="http://davidbau.com/archives/2005/07/27/a_programming_question.html">earlier post</a> echoes my own thoughts on how fortunate my generation is to have been exposed to computers at a time when typing in a simple game was part and parcel of learning to use the …</p><p>This is a <a href="http://davidbau.com/archives/2005/07/29/haaarg_world.html">great story</a> about teaching Anthony to program his first game. An <a href="http://davidbau.com/archives/2005/07/27/a_programming_question.html">earlier post</a> echoes my own thoughts on how fortunate my generation is to have been exposed to computers at a time when typing in a simple game was part and parcel of learning to use the things.</p>Vista Server Core2006-10-11T08:25:00-10:002006-10-11T08:25:00-10:00larrytag:knowing.net,2006-10-11:/posts/2006/10/vista-server-core/<p>Scott Swigart describes Vista Server Core, a GUI-less version of Vista. While I quite like the idea (not just for resources, but because a purely command-line driven server facilitates a shift towards scripting repetitive tasks), there is a deep irony that this version of Vista <em>does not support the .NET …</em></p><p>Scott Swigart describes Vista Server Core, a GUI-less version of Vista. While I quite like the idea (not just for resources, but because a purely command-line driven server facilitates a shift towards scripting repetitive tasks), there is a deep irony that this version of Vista <em>does not support the .NET Framework</em>.</p>
<p>So we beat on, boats against the current, borne back ceaselessly into the past.</p>
<p>Update: <a href="http://brewder.blogspot.com/2006/10/powershell-command-line-net.html">Brian Brewder</a> observes that no .NET == no PowerShell, which pretty much destroys the "shift towards scripting" concept.</p>Gray Goo Assault On Second Life2006-10-11T08:17:00-10:002006-10-11T08:17:00-10:00larrytag:knowing.net,2006-10-11:/posts/2006/10/gray-goo-assault-on-second-life/<p>I hardly know what Second Life is (even though smart people think it's important), but I love the fact that it's being <a href="http://alphavilleherald.com/2006/09/linden_lab_grey.html">assaulted by gray goo</a>. Bring on the <a href="https://www.amazon.com/Diamond-Age-Neal-Stephenson/dp/0553573314">New Victorians</a>!</p>Database Refactoring: RedGate's SQL Dependency Tracker First Impression2006-10-05T09:35:00-10:002006-10-05T09:35:00-10:00larrytag:knowing.net,2006-10-05:/posts/2006/10/database-refactoring-redgates-sql-dependency-tracker-first-impression/<p>Based on people commenting on my previous post, it looks like RedGate kind of "owns" the database-refactoring tools market. I downloaded the 14-day trial of SQL Dependency Tracker. It gives an excellent first impression: not a wizard interface, but very obvious how to start.</p>
<p>After you point it at your …</p><p>Based on people commenting on my previous post, it looks like RedGate kind of "owns" the database-refactoring tools market. I downloaded the 14-day trial of SQL Dependency Tracker. It gives an excellent first impression: not a wizard interface, but very obvious how to start.</p>
<p>After you point it at your database, you see a diagram like this:</p>
<p>As you can see, I've selected one table and the tool highlights its dependencies.</p>
<p>One limitation is that the tool does not have a "Print" capability. I would like to print out a (huge, wall-sized) poster of the dependency for study. It does, though, have an "Export to image..." capability. If you save to .PNG it does not preserve detail, but if you save to .EMF, you can import it into Illustrator and divvy it up there.</p>
<p>Of course, the devil is in the details: does it accurately calculate relationships and dependencies? Coming to a conclusion on that will take more time.</p>Bears Repeating: Hard To Test == Code Smell2006-10-05T09:09:00-10:002006-10-05T09:09:00-10:00larrytag:knowing.net,2006-10-05:/posts/2006/10/bears-repeating-hard-to-test-code-smell/<p><a href="https://www.oreilly.com/">Curtis Poe</a> (via <a href="http://patricklogan.blogspot.com/2006/10/building-any-system.html">Patrick Logan</a>): <em>[I]f you find something is hard to test, that's a code smell.</em></p>
<p>(I just spent minutes confirming that it's "bears repeating" and not "bares repeating." Both bring up funny mental images.)</p>Database Refactoring Is Hard2006-10-04T17:29:00-10:002006-10-04T17:29:00-10:00larrytag:knowing.net,2006-10-04:/posts/2006/10/database-refactoring-is-hard/<p>I am facing the task of refactoring a database whose structure has accreted through the years. Table names like "Foo" and "FooX." Something like 20 tables that have no records (those are easy to scratch), others that have virtually the same columns and yet which each have thousands of records …</p><p>I am facing the task of refactoring a database whose structure has accreted through the years. Table names like "Foo" and "FooX." Something like 20 tables that have no records (those are easy to scratch), others that have virtually the same columns and yet which each have thousands of records, indicating they're both in use.</p>
<p>I don't generally deal with database stuff at this level. I thought I'd use Visio to help me re-engineer the database, but it seems that it only reverse-engineers, it doesn't forward-engineer or even generate DDL.</p>
<p>I grabbed Scott Amble's "Agile Database Techniques" off the shelf, but it didn't seem very concrete in terms of the tasks I'm actually facing, like "How do I generate a list of all columns that are null, or only have 1 value?" and "Is there a way to tell the date on which the table data was last modified?" I know that the answers to these sorts of questions lie in the system tables, but it's hard to find a concise guide to their structure and use.</p>
<p>Scott emphasizes unit-tests to maintain data integrity. OK, check: require 'test/unit'</p>
<p>Other than that, I've thought about installing the Visual Studio CTP for Database Professionals, but I'm not sure if this is what it does or if it is geared for other tasks.</p>Slow Software: Acronis, Canon TWAIN2006-10-03T10:46:00-10:002006-10-03T10:46:00-10:00larrytag:knowing.net,2006-10-03:/posts/2006/10/slow-software-acronis-canon-twain/<p>I have Acronis TrueImage, which got good reviews from PC Mag, as my backup software, running against a Maxtor OneTouch over USB 2.0. It's insanely slow: an incremental backup of my data partition takes more than a day. The partition is big (200G) but the delta is some small …</p><p>I have Acronis TrueImage, which got good reviews from PC Mag, as my backup software, running against a Maxtor OneTouch over USB 2.0. It's insanely slow: an incremental backup of my data partition takes more than a day. The partition is big (200G) but the delta is some small fraction of that.</p>
<p>I replaced my HP Scanjet 2100 with a Canon 8400C for the <em>sole reason</em> that online reviewers said that it was fast, but that turns out to mean a minute to scan a single magazine page. So if I want to save a 5-page magazine article, I have to dedicate something like 7-8 minutes to the task (including page flipping, "OK" clicking, etc.).</p>Cooperative Models For Neither Free-Beer Nor Free-Speech Software2006-10-03T08:50:00-10:002006-10-03T08:50:00-10:00larrytag:knowing.net,2006-10-03:/posts/2006/10/cooperative-models-for-neither-free-beer-nor-free-speech-software/<p><a href="https://www.netflixprize.com/">The Netflix optimization challenge</a> exemplifies a situation for which there <em>should be</em> a solution, but which I've not seen a good answer. Namely: for-profit but initially ad-hoc cooperation. For instance, let's just say that I made the case that a <a href="https://www.pandora.com/">Pandora</a>-like "Movie Genome Project" was the key to winning …</p><p><a href="https://www.netflixprize.com/">The Netflix optimization challenge</a> exemplifies a situation for which there <em>should be</em> a solution, but which I've not seen a good answer. Namely: for-profit but initially ad-hoc cooperation. For instance, let's just say that I made the case that a <a href="https://www.pandora.com/">Pandora</a>-like "Movie Genome Project" was the key to winning the prize. And let's say that <em>you</em> are sitting on top of a data-mining algorithm that you think will work great in conjunction with such a database. And let's say that there are 5 people who, reading this, think "Well, I might not be able to contribute an algorithm, but for a piece of \$1M, I'd be willing to 'genotype' some movies."</p>
<p>The problem is: how do we go about working with each other? In the Open Source world, one can prototype a project by throwing it against the wall and seeing if it sticks: if people contribute or show interest, one can make a judgment about continuing or discontinuing the project. This works because all work, whether prototype or production, is given the same (free) value. However, if there's money at stake, one cannot begin prototyping until "what if we win?" is sorted out. Even more importantly, the payoff <em>percentages</em> seem to necessarily be predetermined even though the relative contributions of all parties to the task won't be known until after-the-fact.</p>
<p>I wonder if some derivative of a <a href="http://mathworld.wolfram.com/CakeCutting.html">fairness-ensuring "cake cutting" algorithm</a> can be applied to the problem.</p>Genetic Algorithm For Kernel Tuning2006-10-03T07:22:00-10:002006-10-03T07:22:00-10:00larrytag:knowing.net,2006-10-03:/posts/2006/10/genetic-algorithm-for-kernel-tuning/<p><a href="https://swigartconsulting.blogs.com/tech_blender/">Scott Swigart</a> points to this article that gives a non-technical overview of the use of genetic algorithms to determine the optimal tuning characteristics of one's Linux Kernel. This ought to work: many years ago I wrote a genetic algorithm that tuned the optimization parameters of one's C++ compiler and it …</p><p><a href="https://swigartconsulting.blogs.com/tech_blender/">Scott Swigart</a> points to this article that gives a non-technical overview of the use of genetic algorithms to determine the optimal tuning characteristics of one's Linux Kernel. This ought to work: many years ago I wrote a genetic algorithm that tuned the optimization parameters of one's C++ compiler and it worked perfectly (well, who knows if it worked <em>perfectly</em>, but it did create better runtime performance than one would generally get from naive optimization options).</p>Netflix: Actual Thoughts2006-10-03T07:14:00-10:002006-10-03T07:14:00-10:00larrytag:knowing.net,2006-10-03:/posts/2006/10/netflix-actual-thoughts/<p>My "Mechanical Turk" reference in the previous post was, as Michael Chermside says, a facetious strategy of using Amazon's cheap-human-labor service to improve movie recommendations. I've been trying to come up with a joke about this that involves the word "Bollywood" and yet which isn't potentially offensive...</p>
<p>In the real …</p><p>My "Mechanical Turk" reference in the previous post was, as Michael Chermside says, a facetious strategy of using Amazon's cheap-human-labor service to improve movie recommendations. I've been trying to come up with a joke about this that involves the word "Bollywood" and yet which isn't potentially offensive...</p>
<p>In the real world, I have been impressed in the past few years by a couple machine-based learning systems: the handheld 20-question gadget driven by the algorithms at <a href="http://www.20q.net/">20Q.net</a> and Pandora.</p>
<p>The 20Q.net knowledge was apparently derived from a Bayesian network. (<em>Real</em> Bayesian networks, not the simple pivot used by Bayesian spam filters. Also, search for "median of medians")</p>
<p><a href="https://www.pandora.com/">Pandora</a>, on the other hand, works via expertly-defined, human-assigned characteristics that have been applied to a large set of music. For instance, one of my radio stations is emphasizing "a subtle use of vocal harmony, mixed acoustic and electric instrumentation, major key tonality, and many other similarities." Now, that's not how <em>I'd</em> describe The Velvet Underground (the band with which I started the station) or The New York Dolls (the band currently playing), but however they did it, it's an appropriate link.</p>
<p>Another thought on movie selection: one of the things that really plays into movie selection is "I can see why you'd think I'd like it, but I hated it." For instance, <a href="https://www.imdb.com/title/tt0169547/">American Beauty</a> was obviously an attempto do worthwhile things, but I despised its weak-headedness. Jim Jarmusch seems to <em>always</em> fall a little short of his potential, but I'd prefer watching his worst work rather than spending two hours with Kevin Costner as a Coast Guard rescue swimmer. (For that matter, there's never been a movie -- not The Perfect Storm, not Master & Commander -- that's come close to communicating how frigging scary an open-ocean storm is. So any time I see a movie that has blowing foam and a dump tank throwing a knee-deep wash across across the deck, I subtract half-a-star right there.)</p>
<p><em>One of those no-conclusion posts...</em></p>I ROCK AT BASIC2006-10-03T06:04:00-10:002006-10-03T06:04:00-10:00larrytag:knowing.net,2006-10-03:/posts/2006/10/i-rock-at-basic/<p>Well, looks like <em>my</em> Christmas shopping is done for the year... [<em>via</em> Jeff Atwood]</p>Netflix' $1M Bounty / Amazon's Mechanical Turk...2006-10-02T12:50:00-10:002006-10-02T12:50:00-10:00larrytag:knowing.net,2006-10-02:/posts/2006/10/netflix-1m-bounty-amazons-mechanical-turk/<p>Netflix is <a href="https://www.netflixprize.com/">offering \$1M to the first person</a> who can achieve 10% better movie recommendations than their current system. Sweet.</p>
<p>I have all sorts of ideas on this. Thank heavens I have copious spare time.</p>Live Writer & Microformats: An Incomplete Story2006-10-01T10:52:00-10:002006-10-01T10:52:00-10:00larrytag:knowing.net,2006-10-01:/posts/2006/10/live-writer-amp-microformats-an-incomplete-story/<p>Jon Udell's latest Screening Room is about Windows Live Writer, Microsoft's quite-nice blogging client. However, the discussion of microformats glosses over a significant limitation in the current version of Live Writer, which is that addin content is atomic. For instance, I secured the domain name distributedreviews.com (it's just parked …</p><p>Jon Udell's latest Screening Room is about Windows Live Writer, Microsoft's quite-nice blogging client. However, the discussion of microformats glosses over a significant limitation in the current version of Live Writer, which is that addin content is atomic. For instance, I secured the domain name distributedreviews.com (it's just parked right now) with the idea of being a site based on the <a href="http://microformats.org/wiki/hreview">hReview</a> microformat. The idea was to:</p>
<ol>
<li>Spider the Web for hReview-tagged content, and</li>
<li>A pingback site for hReviews</li>
</ol>
<p>So, I wrote a plugin for Live Writer that creates an hReview-formatted post and pings back to hReview aggregating sites (like distributedreviews.com). But the problem -- a big problem -- is that the editing of the content must be done entirely within the <em>add-in</em>, not within Live Writer's editing box. So the only way to edit the content of a plugin is within the taskpane on the right:</p>
<p>For my purposes, I consider this a nonstarter: no one's going to write a review without marking it up and having undo and redo and all those good things.</p>
<p>So, that's a limitation in Live Writer right now.</p>
<hr>
<p>Now, the other thought would be to create a template for a format: \<div class="hreview">\<h1 class="summary">What are you reviewing?\</h1>...etc... and then writing a post-editing proxy that looked for that format and did the pingback to the aggregating server. The proxy is possible, but it's kind of ugly and far more intrusive on a user's system than I think appropriate for the scope of the projecct (especially with Vista's security model).</p>
<p>Ideally, the Live Writer would simply evolve. Even if it was nothing but exposing events for <strong>BlogpostInitializing</strong> and <strong>BlogpostPosting .</strong></p>
<hr>
<p>As for spidering the Web for existing hReviews, the hope is that Amazon's Alexa Web Crawl will be my solution. Something I'll look into in my copious spare time...</p>
<hr>
<p>Phase three: Profit!</p>
<p>Search hReviews...Sign in to manage your affiliate codes...Cryptographically-signed hReviews & affiliates fees... Bucket-brigade affiliation payouts ...</p>Borland Gives Up On Core SDP: I Wonder How Much That Cost 'Em?2006-09-29T10:50:00-10:002006-09-29T10:50:00-10:00larrytag:knowing.net,2006-09-29:/posts/2006/09/borland-gives-up-on-core-sdp-i-wonder-how-much-that-cost-em/<p>Borland is abandoning its two-year-old strategy of delivering a "software development platform" to further the goal of "software delivery optimization." As I feared from the start, Borland's over-stuffed product portfolio and large ambitions clashed with their limited resources.</p>
<p>To summarize: Borland was once the most loved brand in the programming …</p><p>Borland is abandoning its two-year-old strategy of delivering a "software development platform" to further the goal of "software delivery optimization." As I feared from the start, Borland's over-stuffed product portfolio and large ambitions clashed with their limited resources.</p>
<p>To summarize: Borland was once the most loved brand in the programming world. They squandered that in order to become second-tier players in various other niches: first they were a second-tier Oracle, then they were a second-tier Weblogic, and most recently they attempted to become a second-tier Rational. As part of that strategy, they decided that what would be <em>brilliant</em> would be to jettison the pesky remnants of the only things they ever did well, which were IDEs and compilers.</p>
<p>I can't wait to hear what they're going to do next. My guess is some sort of second-tier MySpace for Software Development.</p>Made In Express Shenanigans: MS Relents2006-09-29T10:22:00-10:002006-09-29T10:22:00-10:00larrytag:knowing.net,2006-09-29:/posts/2006/09/made-in-express-shenanigans-ms-relents/<p>Microsoft has granted two additional "grand prizes" to other "Made in Express" finalists. As you may recall, I declared "shenanigans" at the original winner, which was a team project that had been in development for years. An uproar slowly developed and after some reluctance (including a letter from MS Legal …</p><p>Microsoft has granted two additional "grand prizes" to other "Made in Express" finalists. As you may recall, I declared "shenanigans" at the original winner, which was a team project that had been in development for years. An uproar slowly developed and after some reluctance (including a letter from MS Legal, which naturally communicated "We admit no error. If you sue us, we will crush you.") Microsoft has shelled out another couple \$10K prizes, which is certainly the best outcome.</p>
<p>There but for the grace of God go I. Contests that evaluate software with unpaid judges <em>always</em> involve some amount of shenanigans. There is an incredible disparity between the amount of time given to judging a product that took hundreds...thousands...tens of thousands of hours to develop. With the <a href="http://www.drdobbs.com/joltawards/">Jolt Awards</a>, we once gave a Jolt to a Visual Studio release that was still in beta on December 31 and gave a "Hall of Fame" award to a product that had never won previously. A declaration of shenanigans would have been just. A long-standing joke we used to make getting off the stage was "No one stood up and cried 'how dare you?' Another success!"</p>
<p>So I'm certainly a stone-throwing glass-house-owner. At the Jolts, Rosalyn Lum's work over the past several years has vastly improved the process and kept shenanigans to a minimum. I still hate certain aspects of the process (particularly, that companies have to pay an entrance fee to be considered) and every year there are finalists and winners that make me want to tear my hair out, but I think, on balance, the benefits of contests that strive to objectively evaluate software development efforts and publicly acknowledge and reward excellent programmers outweighthe shenanigans.</p>
<p><a href="http://www.twiztv.com/scripts/southpark/season2/southpark-213.htm">Put away your brooms.</a></p>Victoria Crater Makes My Heart Go Pitter-Patter2006-09-28T15:20:00-10:002006-09-28T15:20:00-10:00larrytag:knowing.net,2006-09-28:/posts/2006/09/victoria-crater-makes-my-heart-go-pitter-patter/<p>\<a href="http://marsrovers.jpl.nasa.gov/gallery/press/opportunity/20060927b/site_B76_264_navcam_CYL_L-B952R1.jpg"" target="_new" atomicselection="true" rel="noopener noreferrer"></p>
<p>The image above is linked to the 2680 x 982 original. If you've got dual-monitors and can stretch it out, it's an amazing vista of …</p><p>\<a href="http://marsrovers.jpl.nasa.gov/gallery/press/opportunity/20060927b/site_B76_264_navcam_CYL_L-B952R1.jpg"" target="_new" atomicselection="true" rel="noopener noreferrer"></p>
<p>The image above is linked to the 2680 x 982 original. If you've got dual-monitors and can stretch it out, it's an amazing vista of, you know, <em>the surface of another planet</em>.</p>SD Times Latest2006-09-28T10:33:00-10:002006-09-28T10:33:00-10:00larrytag:knowing.net,2006-09-28:/posts/2006/09/sd-times-latest/<p>At the risk of sounding immodest, I think we SD Times columnists have been hitting on all cylinders for the past few issues. The latest issue includes Allen Holub on FitNesse testing, Andrew Binstock on free books for programmers, and some crap from me on XNA and non-professional programming (written …</p><p>At the risk of sounding immodest, I think we SD Times columnists have been hitting on all cylinders for the past few issues. The latest issue includes Allen Holub on FitNesse testing, Andrew Binstock on free books for programmers, and some crap from me on XNA and non-professional programming (written before I'd gotten hands on XNA. Scratch the part about network programming.)</p>.NET Template Engine: A Step Towards DSLs2006-09-28T10:22:00-10:002006-09-28T10:22:00-10:00larrytag:knowing.net,2006-09-28:/posts/2006/09/net-template-engine-a-step-towards-dsls/<p>This article on Code Project (found via Steve Pietrek) might be an excellent stepping-stone for someone trying to learn language-design and compiler technologies. While code-generation and templates are good first steps and are easy to do easy things, but you should be aware that as the semantics of what you're …</p><p>This article on Code Project (found via Steve Pietrek) might be an excellent stepping-stone for someone trying to learn language-design and compiler technologies. While code-generation and templates are good first steps and are easy to do easy things, but you should be aware that as the semantics of what you're trying to accomplish increases, the difficulty typically inverts. That is, at some point the verboseness but flexibility of generating assembly-language or IL becomes less painful than subverting the semantics of C# or VB.NET (or whatever other language you use).</p>
<p>This actually touches on a broader point: one thing we've seen with the shift towards agile processes is an emphasis on refactoring. This requires a faith in the prospect that a program can be incrementally changed from one form to another. In practice, this is generally true, but there are certainly cases, and DSLs might be a good example, where there may be a discontinuity of architecture significant enough to foreclose evolution and force you back to viewing your initial work as "build one to throw away."</p>
<p>That still doesn't mean that one ought to regret the initial work. "The simplest thing that could possibly work," is still a solid principle for approaching a project. But the devil is in the word "possibly."</p>Strap On Tinfoil Hat, Unleash the FOIA: NSA Publications Includes "Key to the Extraterrestrial Messages"2006-09-26T16:28:00-10:002006-09-26T16:28:00-10:00larrytag:knowing.net,2006-09-26:/posts/2006/09/strap-on-tinfoil-hat-unleash-the-foia-nsa-publications-includes-quotkey-to-the-extraterrestrial-messagesquot/<p>A researcher has been plugging away at the NSA with the Freedom of Information Act. He's recently received an index to NSA publications (the publications are not yet available). Among the articles that have appeared in <em>NSA Technical Journal</em>: "Extraterrestrial Intelligence" and "Key to the Extraterrestrial Messages." I'm going to …</p><p>A researcher has been plugging away at the NSA with the Freedom of Information Act. He's recently received an index to NSA publications (the publications are not yet available). Among the articles that have appeared in <em>NSA Technical Journal</em>: "Extraterrestrial Intelligence" and "Key to the Extraterrestrial Messages." I'm going to guess that the articles aren't all that interesting, but you gotta' admit, those are catchy titles.</p>Does It Come With a Fake Male-Model Face, Too?2006-09-25T08:31:00-10:002006-09-25T08:31:00-10:00larrytag:knowing.net,2006-09-25:/posts/2006/09/does-it-come-with-a-fake-male-model-face-too/<p>Given the cheesy Photoshoppery of the image, I suspect this is fake, but supposedly, this is a pullover that you slip into for a videoconference. Given my recent 4 AM local-time teleconferences, I might be able to use this.</p>Alan Zeichick Joins Blogosphere2006-09-25T07:57:00-10:002006-09-25T07:57:00-10:00larrytag:knowing.net,2006-09-25:/posts/2006/09/alan-zeichick-joins-blogosphere/<p>Alan Zeichick, the man who put the "Z" in <a href="https://www.bzmedia.com/">BZ Media</a>, has started to blog. Alan's been in the "writing about computers" business since Radio Shak Model 100 days and we've worked together since 1989. I have no idea where he'll find the time to blog, but on the other …</p><p>Alan Zeichick, the man who put the "Z" in <a href="https://www.bzmedia.com/">BZ Media</a>, has started to blog. Alan's been in the "writing about computers" business since Radio Shak Model 100 days and we've worked together since 1989. I have no idea where he'll find the time to blog, but on the other hand, he's one of the most prolific writers I know, so I'm sure he'll figure it out. Knowing Alan, he'll probably use the blog to justify the purchase of some kind of insane active-sound noise-cancelling system for his Mustang, so that he can use voice dictation into a Linux cluster tucked under the rear seat (no, wait... a Linux cluster would add weight ... maybe an EVDO connection to a Linux cluster running in a rack in his hall closet...)</p>Smalltalk Daily2006-09-25T07:44:00-10:002006-09-25T07:44:00-10:00larrytag:knowing.net,2006-09-25:/posts/2006/09/smalltalk-daily/<p>James Robertson is producing a series of screencasts providing a Smalltalk overview. I <em>highly</em> recommend taking a look if you are not familiar with Smalltalk. You've undoubtedly <em>heard</em> of Smalltalk and perhaps have seem some Smalltalk syntax, but if you've not <em>seen</em> the Smalltalk development environment in use, you might …</p><p>James Robertson is producing a series of screencasts providing a Smalltalk overview. I <em>highly</em> recommend taking a look if you are not familiar with Smalltalk. You've undoubtedly <em>heard</em> of Smalltalk and perhaps have seem some Smalltalk syntax, but if you've not <em>seen</em> the Smalltalk development environment in use, you might not understand how radically different the experience of Smalltalk programming is from developing in Visual Studio, Eclipse, or other file-centric systems. Even if you've programmed in a dynamic language such as Ruby and appreciated the "live" feel of <a href="https://en.wikipedia.org/wiki/Read-eval-print_loop">REPL</a>-style irb, this falls <em>far</em> short of Smalltalk, where your working context can persist from day-to-day and year-to-year.</p>
<p>Robertson works for Cincom and I believe is using the non-commercial version of his company's implementation for the screencasts. The Smalltalk environment, which has been evolving for more than 2 decades and has its own GUI conventions, can definitely be overwhelming at first, and the screencasts will help familiarize you with the territory.</p>Exceptions in the Manycore Era2006-09-25T06:09:00-10:002006-09-25T06:09:00-10:00larrytag:knowing.net,2006-09-25:/posts/2006/09/exceptions-in-the-manycore-era/<p>Here's some interesting reading on the challenges of and possible strategies for dealing with exceptions in concurrent versions of C++. The try...catch...finally model of exception handling introduces its own control flow. How will that interact with concurrent models in which you're passing around a "future" (essentially, an IOU …</p><p>Here's some interesting reading on the challenges of and possible strategies for dealing with exceptions in concurrent versions of C++. The try...catch...finally model of exception handling introduces its own control flow. How will that interact with concurrent models in which you're passing around a "future" (essentially, an IOU that can be cashed in for the results of a calculation)? Even more practically, as the number of cores increase, the possibility of simultaneous exceptions rises (probably dramatically, since the worked-out assumptions of normal control-flow no longer hold). Among other things, this paper proposes "reduction functions" that create "compound exceptions." Interesting stuff.</p>When Things Go Awry Writing2006-09-24T14:52:00-10:002006-09-24T14:52:00-10:00larrytag:knowing.net,2006-09-24:/posts/2006/09/when-things-go-awry-writing/<p>I've been writing a series of articles for DevX on <a href="http://www.devx.com/">concurrent</a> <a href="http://www.devx.com/cplus/">programming</a>. The final installment was supposed to be "Multicore for multimedia." Plan A was to speed up the MAD (<a href="http://www.underbit.com/products/mad/">MPEG Audio Decoder</a>) processing library using OpenMP. That went well enough except for the fact that the code was so …</p><p>I've been writing a series of articles for DevX on <a href="http://www.devx.com/">concurrent</a> <a href="http://www.devx.com/cplus/">programming</a>. The final installment was supposed to be "Multicore for multimedia." Plan A was to speed up the MAD (<a href="http://www.underbit.com/products/mad/">MPEG Audio Decoder</a>) processing library using OpenMP. That went well enough except for the fact that the code was so clean that I couldn't get any very impressive wins without committing myself to really changing the design in some fairly substantial ways (like concentrating the processing phases of a single audio channel to a single core). So Plan B was to write a video filter. Problem with that is that Adobe Premiere Pro already uses multiple threads to perform the callbacks to the video filter, distributing one frame to one core, the next frame to the next. That's pretty much optimal. So when I added threads, my performance actually decreased.</p>
<p>So now I've got to figure out a Plan C. Oh, and I recommend MAD and Adobe Premiere Pro: they're well engineered pieces of code.</p>Laser-Based Processor: A Nanosecond is Still A Foot2006-09-21T07:43:00-10:002006-09-21T07:43:00-10:00larrytag:knowing.net,2006-09-21:/posts/2006/09/laser-based-processor-a-nanosecond-is-still-a-foot/<p>Intel's announcement of a <a href="https://betanews.com/2006/09/18/intel-builds-new-laser-based-processor/">laser-based chip</a> is frickin' cool and, at the practical level, may be a big deal (beats me). But one thing that blows my mind every time I think about it is that light can only travel \~11.8 inches in a billionth of a second. And …</p><p>Intel's announcement of a <a href="https://betanews.com/2006/09/18/intel-builds-new-laser-based-processor/">laser-based chip</a> is frickin' cool and, at the practical level, may be a big deal (beats me). But one thing that blows my mind every time I think about it is that light can only travel \~11.8 inches in a billionth of a second. And even though things get tricky when you start talking about CPU clocks multipliers, if we take a 4GHz CPU at face value, light can only travel <em>3 inches</em> per cycle! You could barely get around the perimeter of the chip in that time! So chip designers <em>literally</em> have to take into account time as a physical dimension! That's just <em>awesome</em>! (As clearly evidenced by my excessive use of exclamation points.)</p>HP: I'm A Little Confused2006-09-20T17:35:00-10:002006-09-20T17:35:00-10:00larrytag:knowing.net,2006-09-20:/posts/2006/09/hp-im-a-little-confused/<p>One of the things that differentiates me from many of my analyst colleagues is that I don't generally delve into business stuff: I'm a technology guy. So normal boardroom shenanigans and so forth aren't "my beat." So let me see if I have this straight: the chairwoman of HP hired …</p><p>One of the things that differentiates me from many of my analyst colleagues is that I don't generally delve into business stuff: I'm a technology guy. So normal boardroom shenanigans and so forth aren't "my beat." So let me see if I have this straight: the chairwoman of HP hired people to ... let's just put the whole "pretexting" thing aside -- she hired people to <em>install keyloggers</em> on other people's systems? And the debate isn't how long she's spending in prison, but kind of whether it was "ok" or not?</p>
<p>Am I missing something here? Is this not clearly illegal?</p>Are the CLR & JVM Well Suited For The Manycore Era?2006-09-20T09:00:00-10:002006-09-20T09:00:00-10:00larrytag:knowing.net,2006-09-20:/posts/2006/09/are-the-clr-amp-jvm-well-suited-for-the-manycore-era/<p>Patrick Logan refers to Ted Leung observing that quad-core and octo-core MacPros don't show anything like linear speedup. This accords with my own fanaticism about the manycore future. A question I don't know the answer to: Do the CLR & JVM have characteristics that dramatically help or dramatically hinder their suitability …</p><p>Patrick Logan refers to Ted Leung observing that quad-core and octo-core MacPros don't show anything like linear speedup. This accords with my own fanaticism about the manycore future. A question I don't know the answer to: Do the CLR & JVM have characteristics that dramatically help or dramatically hinder their suitability for manycore hardware?</p>
<p>The CLR & JVM are based on abstract hardware. The virtual machines have some things which immediately jump out as, let's say, "tough" for parallelizability -- both have a model whereby separate threads are responsible for coordinating their own access to shared memory (i.e., fields in objects). On the other hand, they have at least one thing which jumps out as potentially a "very good" thing for parallelizability -- their stacks are conceptually separate from main memory, which may make the threading models easier to evolve (in a world without pointers, data in the stack is inherently local to the current thread.) The "inherently parallelizable" aspect of functional languages arises from their exclusive use of the stack for volatile state, but with the way the stack is generally conceived (as, y'know, a <em>stack</em>) requiring pushing and popping and copying variables from one to another, problems arise when copying large datastructures; thus my thought that <em>maybe</em> the abstraction of the stack could be a "win."</p>Is That A Turbine In Your Pocket?2006-09-19T16:11:00-10:002006-09-19T16:11:00-10:00larrytag:knowing.net,2006-09-19:/posts/2006/09/is-that-a-turbine-in-your-pocket/<p>I'm not sure that I'd feel comfortable carrying a <em>fan rotating at 20,000 revolutions per second</em> in my cellphone, which I keep in my pocket, which is next to my...</p>
<p>The thing produces 10 watts. I don't know if I'm just being paranoid about wondering how it might fail …</p><p>I'm not sure that I'd feel comfortable carrying a <em>fan rotating at 20,000 revolutions per second</em> in my cellphone, which I keep in my pocket, which is next to my...</p>
<p>The thing produces 10 watts. I don't know if I'm just being paranoid about wondering how it might fail catastrophically (I don't fret about batteries blowing up, even though it's obviously possible). I suppose you wrap the thing in titanium and have "crush zones" like a car.</p>
<p>Update: Added link so you know what I'm talking about.</p>Made In Express Winners Announced: I Call "Shenanigans!"2006-09-19T07:46:00-10:002006-09-19T07:46:00-10:00larrytag:knowing.net,2006-09-19:/posts/2006/09/made-in-express-winners-announced-i-call-quotshenanigansquot/<p>The Made In Express contest is over, with the <a href="https://www.madeinexpress.com/">winner being an "All Terrain Self-Maneuverable Robot</a>." This is unfair for at least two reasons:</p>
<ol>
<li>It's a group entry ("<a href="https://www.madeinexpress.com/">Group entries will not be accepted</a>"), and</li>
<li>It's been under development for years</li>
</ol>
<p>I downloaded the source to the robot and the …</p><p>The Made In Express contest is over, with the <a href="https://www.madeinexpress.com/">winner being an "All Terrain Self-Maneuverable Robot</a>." This is unfair for at least two reasons:</p>
<ol>
<li>It's a group entry ("<a href="https://www.madeinexpress.com/">Group entries will not be accepted</a>"), and</li>
<li>It's been under development for years</li>
</ol>
<p>I downloaded the source to the robot and the very first file I opened had a history file showing it had been <em>finished</em> in March of 2005! This is patently unfair to individuals who wrote their programs, as the contest clearly promotes, in two or three months.</p>
<p>To be fair, a re-reading of the rules page doesn't restrict time of development to the big graphic on the frontpage that says "May: [Finalists] start to build their ideas into projects," but the "group entry" thing is clearly forbidden.</p>
<p>"Made In Express" was a contest to highlight the use of the freely downloadable "non-professional" versions of Visual Express. I had criticized some of those chosen as finalists, including the robotic entry, because they were clearly overly ambitious for the short development window. I don't want to rehash the particulars, but I hope that if there's a repeat of this contest, the process could be a little more rigorous.</p>Tina and I Were Among The First Americans To Dive There2006-09-18T13:54:00-10:002006-09-18T13:54:00-10:00larrytag:knowing.net,2006-09-18:/posts/2006/09/tina-and-i-were-among-the-first-americans-to-dive-there/<p>Tina and I dove <a href="http://www.washingtonpost.com/wp-dyn/content/article/2006/09/18/AR2006091800302.html?noredirect=on">this area of Irian Jaya</a> years ago. It was beautiful and <em>very</em> wild. We didn't see any fin-walking horn sharks, though. (We did see a species of stonefish that is classified as deadly and the locals were like: "Oh, if you get stung, you chew that …</p><p>Tina and I dove <a href="http://www.washingtonpost.com/wp-dyn/content/article/2006/09/18/AR2006091800302.html?noredirect=on">this area of Irian Jaya</a> years ago. It was beautiful and <em>very</em> wild. We didn't see any fin-walking horn sharks, though. (We did see a species of stonefish that is classified as deadly and the locals were like: "Oh, if you get stung, you chew that leaf over there, spit it into the wound, and you're fine.")</p>
<p>Oh, and I had to pin a cassowary that had escaped to the bottom of our boat for 2 hours. They named him "Larry the Cassowary" in honor of the occasion. He was a lot of fun (I mean, after the boat ride was over and he was released on the island and calmed down). He would chase after you and then you could spin around and chase him. It was sort of like having a small T. Rex as a pet.</p>Want to work with me?2006-09-18T12:53:00-10:002006-09-18T12:53:00-10:00larrytag:knowing.net,2006-09-18:/posts/2006/09/want-to-work-with-me/<p>I'm hiring.</p>Game Developer's Conference Is Now Huge2006-09-18T09:38:00-10:002006-09-18T09:38:00-10:00larrytag:knowing.net,2006-09-18:/posts/2006/09/game-developers-conference-is-now-huge/<p>This is fascinating: in a time where the common wisdom is that "big" industry conferences have met their doom, the Game Developer's Conference has just announced that they are <em>doubling</em> the size of their floor space (i.e.: making money from people spending tens of thousands of dollars in setting …</p><p>This is fascinating: in a time where the common wisdom is that "big" industry conferences have met their doom, the Game Developer's Conference has just announced that they are <em>doubling</em> the size of their floor space (i.e.: making money from people spending tens of thousands of dollars in setting up booths and glad-handing strangers walking by) and is projecting 12,500 attendees will walk through Moscone Center in San Francisco.</p>
<p>I think the <em>Software Development Conference </em>peaked at around 16,000 attendees circa 1999 and is now far smaller. That the GDC, which used to be a wonderfully intimate event, has surpassed CMP's flagship development event is really striking.</p>
<p>Jamil Moledina and crew have done a wonderful job of growing the GDC and making it a real exception to CMP's overall clumsiness in transitioning to the Internet era.</p>Test Drive Unlimited With A Steering Wheel2006-09-18T08:07:00-10:002006-09-18T08:07:00-10:00larrytag:knowing.net,2006-09-18:/posts/2006/09/test-drive-unlimited-with-a-steering-wheel/<p><a href="https://www.amazon.com/gp/product/B000EGEX9Y" title="Test Drive Unlimited"><img alt="" src="http://images.amazon.com/images/P/B000EGEX9Y.01._AA_SCTZZZZZZZ_.jpg"></a>The slow boat from Amazon finally brought my copy of <a href="https://www.amazon.com/gp/product/B000EGEX9Y">Test Drive Unlimited</a>, a "massive multiuser online racing game" set on the island of Oahu. At first, I was slightly disappointed, since while the <em>layout</em> of the streets is based on reality, the scenery isn't. So it's not like you're …</p><p><a href="https://www.amazon.com/gp/product/B000EGEX9Y" title="Test Drive Unlimited"><img alt="" src="http://images.amazon.com/images/P/B000EGEX9Y.01._AA_SCTZZZZZZZ_.jpg"></a>The slow boat from Amazon finally brought my copy of <a href="https://www.amazon.com/gp/product/B000EGEX9Y">Test Drive Unlimited</a>, a "massive multiuser online racing game" set on the island of Oahu. At first, I was slightly disappointed, since while the <em>layout</em> of the streets is based on reality, the scenery isn't. So it's not like you're bombing down the street at 180 and see the old water department and thereby know that you're coming up to Punchbowl Street (although I did shout to Tina "Don't go around the block! Just take Prince Kuhio the wrong way for three blocks!").</p>
<p>The individuality of the cars doesn't seem <em>quite</em> at the same level as <a href="https://www.amazon.com/exec/obidos/ASIN/B000B6ML28/thinkinginnet-20">Project Gotham Racing</a>, especially the drift mechanics (in PGR3, you go around one corner and you can <em>tell</em> where the engine weight in the car is). The engine sounds of PGR3 are also more distinctive.</p>
<p>So, while I was very happy with the TDU as a different kind of racing game, I wasn't entirely jazzed. And then, after tooling around for a couple hours using either the gamepad or my <a href="https://www.amazon.com/exec/obidos/ASIN/B000BQUV5M/thinkinginnet-20">MadCatz steering wheel</a>, I discovered the somewhat obscure "Options|Controllers|Steering Wheel|Enable" setting. <em>Oh baby...</em> The problem with steering wheels has always been that games optimized for thumb-stick steering aren't responsive to the slight corrections of "real" steering. So although you have a steering wheel (which is nice), you have to throw it side to side. Not with TDU: once you tell it you have a steering wheel, the responsiveness improves tremendously and, instead of feeling like a video game, you feel like you're driving and can do things like stay in your lane, track through corners, weave through traffic... It's incredible. I lost like 3 hours yesterday to it. (For me, spending 3 hours of daylight in front of a TV is inconceivable.)</p>
<p>Awesome game.</p>Pete Wright Ends Relationship With MS to Embrace Ruby on Rails2006-09-18T07:42:00-10:002006-09-18T07:42:00-10:00larrytag:knowing.net,2006-09-18:/posts/2006/09/pete-wright-ends-relationship-with-ms-to-embrace-ruby-on-rails/<p>Pete Wright, whose TabletPC Sudoku program was "shot in the head" by Microsoft's surprise release of their own version (join the group, Pete!), has ended his long relationship with MS consulting in order to fully embrace a job working with Ruby on Rails. His post is obviously cathartic, but he …</p><p>Pete Wright, whose TabletPC Sudoku program was "shot in the head" by Microsoft's surprise release of their own version (join the group, Pete!), has ended his long relationship with MS consulting in order to fully embrace a job working with Ruby on Rails. His post is obviously cathartic, but he echoes the not-uncommon sentiment that within the Ruby community one is more likely to encounter passionate, involved people.</p>
<p>This is only true because Ruby is still at the "enthusiasts" place in the adoption curve. Once upon a time, the passionate people were embracing Java and VB: the languages that Pete now associates with drones. If Ruby crosses the chasm, it, too, will eventually become the domain of boring people.</p>Presentations from Lang.NET 20062006-09-18T07:14:00-10:002006-09-18T07:14:00-10:00larrytag:knowing.net,2006-09-18:/posts/2006/09/presentations-from-langnet-2006/<p>I greatly regret having missed this conference, but personal issues trumped my travel plans. Videos (audio over PPT) of many presentations are now available. I haven't watched them myself yet, but word is that <a href="http://download.microsoft.com/download/9/4/1/94138e2a-d9dc-435a-9240-bcd985bf5bd7/Jim-Cory-SecondLife.wmv">Cory Doctorow's presentation on SecondLife was a standout</a>.</p>Why Johnny Can't Code2006-09-15T10:12:00-10:002006-09-15T10:12:00-10:00larrytag:knowing.net,2006-09-15:/posts/2006/09/why-johnny-cant-code/<p>The most-excellent SF author David Brin has an article on Salon called "Why Johnny Can't Code" (you have to sit through a commercial to gain access). In it, he laments the approachability of dear-old "line oriented" BASIC, by which, I think he means that era of BASIC when every line …</p><p>The most-excellent SF author David Brin has an article on Salon called "Why Johnny Can't Code" (you have to sit through a commercial to gain access). In it, he laments the approachability of dear-old "line oriented" BASIC, by which, I think he means that era of BASIC when every line began with a numeric label:</p>
<p>10 PRINT "HELP, I AM STUCK IN A PROGRAM LOOP"</p>
<p>20 GOTO 10</p>
<p>Apparently, to this day elementary-school textbooks have sidebars exhorting kids to "Try it in BASIC!" and Brin tells an amusing story about having to buy a Commodore 64 on eBay for \$25 in order to give his kid that chance.</p>
<p>He conflates a couple of different things: the increasing abstraction levels between the user and the underlying hardware, the resulting mental model, and the "learnability" of block-oriented imperative code. With BASIC, he says, you could write PONG and see the block move "at the command of math, and not magic." A nice turn of phrase but not fair: the PDP-8 on which <em>I</em> learned to program didn't have a raster display and I seem to recall <em>quite a bit</em> of PEEKing and POKEing "magic" when I did eventually gain access to such things.</p>
<p>There's two things about BASIC:</p>
<ul>
<li>Many people can "get it", and</li>
<li>What they "get" is a decent mental model of imperative code (I'll always remember the very first time I tried to tutor someone in BASIC: "So then it goes to the next line: 'X = X + 1'," I said. "False!" She said. I was flustered). Imperative code maps well to how computer registers and memory have volatile state. <strong>But BASIC doesn't provide a mental model of all sorts of other stuff (like the plasticity of memory) that are equally part of any kind of even rough understanding of what's "really going on."</strong></li>
</ul>
<p>(A related point: the only other "programming-like thing" that many people "get" is spreadsheets.)</p>
<p>So, while I agree with the premise that it was <em>much</em> easier to develop a mental model of how computers worked, I disagree with the premise that BASIC was all there was to it.</p>
<p>If, though, you want a BASIC-like programming model in a modern wrapper, there's a surprising equivalent: Flash. Flash works <em>exactly</em> like "line-oriented BASIC": execution "falls through" from one block to the next but can be redirected to an arbitrary label/block/frame with a GOTO. It has the added benefit of having built-in graphics. You could totally write PONG in Flash. The only difficulty would be to constrain yourself to imperative constructs, since Flash has all sorts of additional constructs that you'd have to willfully ignore.</p>Review: Dragon Book, 2nd Edition2006-09-15T09:06:00-10:002006-09-15T09:06:00-10:00larrytag:knowing.net,2006-09-15:/posts/2006/09/review-dragon-book-2nd-edition/<p>\<a href="http://www.amazon.com/exec/obidos/ASIN/0321486811/thinkinginnet-20"" target="_blank" rel="noopener noreferrer">Compilers: Principles, Techniques, & Tools 2nd Ed. by Aho, Lam, Sethi, & Ullman is the perfect book for two niches: people writing C compilers for embedded processors and CS students running the gantlet of compiler courses …</p><p>\<a href="http://www.amazon.com/exec/obidos/ASIN/0321486811/thinkinginnet-20"" target="_blank" rel="noopener noreferrer">Compilers: Principles, Techniques, & Tools 2nd Ed. by Aho, Lam, Sethi, & Ullman is the perfect book for two niches: people writing C compilers for embedded processors and CS students running the gantlet of compiler courses. I don't want to say that those niches don't exist and that for people in that situation The Dragon Book, as it's universally known, is anything but essential reading. For the rest of the world, that is, that broader-than-professional-compiler-writers-but-still-a-marked-subset-of-the-world-of-professional-programming niche, the book is not compelling. The Dragon Book, as the text has been universally known, is widely considered a "hard read" and, like Shakespeare or Joyce, even a smart person reading it without guidance or prior exposure will have difficulty gauging the amount of attention one should give a particular point. It's near-universal reach probably does make it "the one book to have if you're having only one," and it's depth has kept it a spot on many a shelf for many a year, but in all honesty I found myself disappointed while reading it.</p>
<p>The entire second half of the book is devoted to optimization and OS- and machine-level code generation. It remains the definitive text on this subject, but this subject is outside the realm of interest for the large majority of people who might be interested in writing compilers. Today, most people interested in compiler construction are far more interested in language design issues than in chip-level instruction sets and graph-based optimizations. Whether a minority or a majority, I can't say, but many (potential) compiler writers are interested in targeting the CLR and/or the JVM and thereby embrace a simplified runtime environment.</p>
<p>It seems sadly out of touch with current debates: the index lacks references to, for instance, "duck typing" or "packrat parsing," two techniques that are unquestionably, on the one hand, "all the rage" and, on the other, theoretically intriguing. To not cover either, in a book that spends 200 pages on lexical and syntactical analysis, seems almost willfully pig-headed. The book covers its <em>chosen</em> principles in depth (bordering on "is this a book on compilers or automata theory?") but does not venture outside those lines.</p>
<p>Another instance: on page 966, in the appendix, there're two paragraphs discussing "object-oriented vs. phase-oriented" compiler design. To call that perfunctory is to be kind -- perfunctory coverage would at least mention theVisitor design pattern.</p>
<p>Again: just in the past few days, there's been talk about how one could / should generate method dispatch in a dynamic language. Joel Spolsky <a href="https://www.joelonsoftware.com/2006/09/12/ruby-performance-revisited/">says</a> that Ruby is slow because of method dispath. Avi Bryant says that's true, but only <a href="https://www.afternic.com/forsale/smallthought.com?utm_source=TDFS_DASLNC&utm_medium=DASLNC&utm_campaign=TDFS_DASLNC&traffic_type=TDFS_DASLNC&traffic_id=daslnc&">because of naive code generation</a> (Ruby today does not follow <strong>The Hugunin Directive : "Use fast paths for common cases, using native constructs if possible.")</strong> Ted Leung refers to Avi's discussion as "the 20-year-old method of in-line method caching." The Dragon Book, in contrast, explains how to construct a stack frame.</p>
<p>Similarly, The Dragon Book spends a tremendous amount of time on "lexing" efficiently (lexical analysis is the first step of writing a compiler: transforming a stream of characters into a stream of tokens) and such is the influence of theory that I would be shocked to ever see a lexer not based on deterministic finite automata (DFAs). Anyone who ever wrote a lexer using, say, <strong>String.Split()</strong> and a hashtable would be banished from The He-Man's Compiler Writers Club. This despite the fact that such a lexer would be highly transparent in purpose and design and would almost certainly be able to handle any reasonably-sized source code input (I was going to qualify this, but for heaven's sake, we've got <em>gigabytes</em> and <em>gigahertz</em> today).</p>
<p>As for "tools," the discussion is solely focused on <a href="http://dinosaur.compilertools.net/">lex & yacc</a>. A quick example of how creaky the discussion is: the one source code snippet showing input to lex shows a function that returns a pointer and whose signature specifies it as returning an <strong>int</strong>. So...there's a piece of C code that hasn't been updated in twenty years. True, lex & yacc are the ancestors of virtually every compiler-construction tool. More's the pity, as the general <em>design</em> of these tools <em>could</em> be made recognizable to those who've used tagging languages like PHP or ASP. For that matter, a generation that's familiar with DOMs and XML parsers brings more than a blank slate to the tasks of tree-walking and rewriting.</p>
<p>So The Dragon Book sadly exemplifies the barriers-to-entry in the world of language design and compiler construction. This is a great book for the 500 teams worldwide building C compilers (yeah, seriously, there are <em>hundreds</em> of C compilers). For better-or-worse, it's undoubtedly the textbook of choice for many CS curricula. It is not a good text for those interested in today's active debates and discussions about language design and implementation.</p>Microsoft DSL Tools: Rosetta Stone Needed (Calc Anyone?)2006-09-14T10:48:00-10:002006-09-14T10:48:00-10:00larrytag:knowing.net,2006-09-14:/posts/2006/09/microsoft-dsl-tools-rosetta-stone-needed-calc-anyone/<p>Twenty minutes ago I was throwing up my hands in despair at the C# code being generated by <a href="https://www.antlr.org/">ANTLR</a> and, turning to my blogreader, saw that Microsoft has released the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=55984">documentation for their DSL (Domain-Specific Language) tools</a>. Boy, is that a frustrating set of Web pages.</p>
<p>I'm <strong>all for</strong> revisiting …</p><p>Twenty minutes ago I was throwing up my hands in despair at the C# code being generated by <a href="https://www.antlr.org/">ANTLR</a> and, turning to my blogreader, saw that Microsoft has released the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=55984">documentation for their DSL (Domain-Specific Language) tools</a>. Boy, is that a frustrating set of Web pages.</p>
<p>I'm <strong>all for</strong> revisiting the assumptions about language design and implementation. Perhaps it is the case that Microsoft's DSL tools make perfect sense to a person with a blank slate of expectations. But, for a person who's been spending time reviewing the latest version of <a href="https://www.amazon.com/exec/obidos/ASIN/0321486811/thinkinginnet-20">The Dragon Book</a> and comparing a bunch of <a href="http://www.seclab.tuwien.ac.at/projects/cuplex//cup.htm">compiler</a> <a href="https://sourceforge.net/projects/csflex/">construction</a> tools, Microsoft's DSL documentation seems just impenetrable.</p>
<p>Microsoft's approach emphasizes the use of a Visio-like design surface to create some form of directed-acyclic graph. I think the result is a visualization of the grammar of the target language. But the documentation uses a vocabulary different than standard "compiler 101" talk of tokens and lexemes and so forth, so I'm not sure.What the heck is a "relationship swimlane" and what does it have to do with language design and implementation? Is this vocabulary difference gratuitous or necessary?</p>
<p>The button-pushing walkthroughs are too mechanical for understanding. For instance: "Step 7. On the <strong>Define New Model File Type</strong> page, under <strong>What extension should model files use?</strong>, type <strong>ftree</strong>, and click <strong>Next</strong>." Directing attention to this kind of trivia is counter-productive.</p>
<p>Developing a four-function calculator is a cliche of compiler construction and I applaud teaching newcomers with something different. <strong>But</strong> it does have lots of advantages: the syntax and semantics are minimal and, if nothing else, it could help map Microsoft's vocabulary into something more familiar. <strong>Even if</strong> Microsoft intends these tools to be used by a broader audience than traditional lex/yacc users (and I hope they do), there needs to be some outreach to us old-timers, who are, if nothing else, the one's who are most likely to advocate the power of DSLs.</p>Free Dog!2006-09-14T09:28:00-10:002006-09-14T09:28:00-10:00larrytag:knowing.net,2006-09-14:/posts/2006/09/free-dog/<p>"Dog The Bounty Hunter" Duane Chapman, his son Leland (who we see around town), and Tim ("Youngblood") have been <a href="https://www.tmz.com/2006/09/14/dog-chapman-arrested-faces-extradition/">arrested and are facing extradition to Mexico</a>. They are charged with kidnapping (bounty hunting being illegal in Mexico) a man who's now serving a 124-year sentence for rape. I wonder if …</p><p>"Dog The Bounty Hunter" Duane Chapman, his son Leland (who we see around town), and Tim ("Youngblood") have been <a href="https://www.tmz.com/2006/09/14/dog-chapman-arrested-faces-extradition/">arrested and are facing extradition to Mexico</a>. They are charged with kidnapping (bounty hunting being illegal in Mexico) a man who's now serving a 124-year sentence for rape. I wonder if the fact that the guy they retrieved is a multimillionaire has anything to do with the Mexican government's pursuit of them. (Although it appears that they may have been arrested at the time in Mexico, posted bail, and jumped back to the U.S.!)</p>
<p>First a post about a Dyson Sphere, now a post about a sentimental bounty hunter... We'll return to our regularly scheduled technology blog shortly...</p>My Guess: Prototype Dyson Sphere2006-09-14T07:51:00-10:002006-09-14T07:51:00-10:00larrytag:knowing.net,2006-09-14:/posts/2006/09/my-guess-prototype-dyson-sphere/<p><a href="https://www.msn.com/">http://www.msnbc.msn.com/id/14825910/</a></p>Some Women See 100,000,000 More Colors Than The Rest of Us2006-09-13T18:30:00-10:002006-09-13T18:30:00-10:00larrytag:knowing.net,2006-09-13:/posts/2006/09/some-women-see-100000000-more-colors-than-the-rest-of-us/<p>According to <a href="http://old.post-gazette.com/pg/06256/721190-114.stm">this article</a>, the X chromosone is responsible for generating the cone cells responsible for detecting red and greed, but in perhaps 2-3% of women (2 Xs, don'tchaknow) there is the possibility of generating a <em>fourth</em> receptor type halfway between green and red (orange-y). The resulting "tetrachromat" women can …</p><p>According to <a href="http://old.post-gazette.com/pg/06256/721190-114.stm">this article</a>, the X chromosone is responsible for generating the cone cells responsible for detecting red and greed, but in perhaps 2-3% of women (2 Xs, don'tchaknow) there is the possibility of generating a <em>fourth</em> receptor type halfway between green and red (orange-y). The resulting "tetrachromat" women can discern many more hues than the rest of us. Awesome.</p>An App A Day For A Month2006-09-12T08:48:00-10:002006-09-12T08:48:00-10:00larrytag:knowing.net,2006-09-12:/posts/2006/09/an-app-a-day-for-a-month/<p>Dana Hanna intends to write <a href="https://chicagosurgeonguide.weebly.com/breast-augmentation.html">a utility every day for a month</a>. This reminds me of National Novel Writing Month (<a href="http://www.nanowrimo.org/">NaNoWriMo</a>), a brilliant way to overcome the angst and inertia of the first draft. It will be amusing to see how this plays out.</p>Microsoft and Ruby2006-09-12T07:53:00-10:002006-09-12T07:53:00-10:00larrytag:knowing.net,2006-09-12:/posts/2006/09/microsoft-and-ruby/<p>In comments, Daniel Crenna asked "What do you think of the Garden Point Ruby.NET compiler? If Microsoft supported this project financially, why do you think they didn't put together an in-house project similar to Jim's IronPython for the Ruby equivalent?"</p>
<p>I've swapped a couple emails with the GP guys …</p><p>In comments, Daniel Crenna asked "What do you think of the Garden Point Ruby.NET compiler? If Microsoft supported this project financially, why do you think they didn't put together an in-house project similar to Jim's IronPython for the Ruby equivalent?"</p>
<p>I've swapped a couple emails with the GP guys (including confirming that MS was supporting the project), but honestly I haven't yet looked at their compiler. I have been tracking John Lam's RubyCLR; my impression is that John is a little further along.</p>
<p>A few months ago, Microsoft posted a job listing for someone to work with Jim Hugunin's team and the posting explicitly mentioned Ruby on the CLR as the type of project on which the person might be working. It's unlikely though that MS is on the cusp of announcing any Microsoft-branded Ruby projects. It's one thing for MS to support an external project or an MSR project with limited goals and deliverables, but when a project is publicly visible and is being developed in Redmond, it instantly acquires baggage -- a wave of attention, an expectation of support, people using betas in production systems, integration with Visual Studio, etc.</p>
<p><em>At this point</em>, my guess is that Microsoft doesn't feel that they can gain anything from a publicly-visible Ruby. They've got IronPython: a good, fast example of a dynamic language running on the CLR. My guess is that they feel that they've proved their point to the public, and I think they feel they've flushed out a <em>lot</em> of the issues involved in evolving the CLR to better support "dynamism," which is a very active interest of some very smart people.</p>
<p>The odds that MS will <em>ever</em> produce a Ruby is, I think, less than 50-50. Microsoft was <em>terribly</em> burned by Java: they were skewered for acting on the indisputable observation that Java Native Interfacing was a pain. Ruby has quirks in its syntax and some type system decisions that the language, as it stands, is not a hand-in-glove fit with the CLR: to say that changes are "needed" is not strictly correct, but to say that changes could improve the programming experience is, I think, fair. Subsequent to their Java experience, Microsoft has had the C# experience: a fairly-unqualified success. My <em>guess</em> is that "one of these days" (I'm thinking a backroom at PDC '07), we'll see a language that is to Ruby what C# is to Java: similar enough to attract immediate comparison / crossover but with semantic differences fitting Microsoft's overall language strategy.</p>Remembering Ted Hennessey2006-09-11T08:37:00-10:002006-09-11T08:37:00-10:00larrytag:knowing.net,2006-09-11:/posts/2006/09/remembering-ted-hennessey/<p>"Keep those fingers snappin'"</p>Sun Hires JRuby Developers: How Much To Read Into This?2006-09-10T09:55:00-10:002006-09-10T09:55:00-10:00larrytag:knowing.net,2006-09-10:/posts/2006/09/sun-hires-jruby-developers-how-much-to-read-into-this/<p>Sun has <a href="http://headius.blogspot.com/2006/09/jruby-steps-into-sun.html">hired Charles Oliver Nutter and Thomas Enebo</a>, the two core JRuby developers with the charge of bringing JRuby to fruition.</p>
<p>I've held for a while now that the crucial step for Ruby to cross the chasm and become an "early majority" language was hosting / 100% transparent interop with …</p><p>Sun has <a href="http://headius.blogspot.com/2006/09/jruby-steps-into-sun.html">hired Charles Oliver Nutter and Thomas Enebo</a>, the two core JRuby developers with the charge of bringing JRuby to fruition.</p>
<p>I've held for a while now that the crucial step for Ruby to cross the chasm and become an "early majority" language was hosting / 100% transparent interop with one or both of the CLR and the JVM.</p>
<p>A word of caution: Jim Hugunin was hired by Microsoft two years ago and only now is <a href="https://archive.codeplex.com/">IronPython a 1.0 release</a>. <em>Probably</em> Nutter and Enebo will face some of the same issues within Sun that Hugunin has faced within Microsoft: in addition to working on the parser and code generation and so forth, there'll be (undoubtedly engrossing) involvement at the platform level, interaction with the tool team(s), etc. My guess is that the tool-support complexities will be a little less complex (Visual Studio being so central to any Microsoft development system) and the platform complexities a little harder (evolving the Java platform being more democratic / bureaucratic).</p>
<p>A second word of caution: the single-core era stopped short of eliminating the problems with "everything is an object." Today, we know about how fast a single processor will run. There will be incremental improvements, but the speed of a single thread of processing in 2016 is probably not going to be even twice as fast as a single thread of processing today. And this topping out of the Moore's Law "free lunch" conflicts with the premise that all types should be abstracted into objects. The <em>million-fold</em> penalty of accessing main memory versus accessing a register or an in-cache value is enough to introduce human-noticeable lag when applied to arrays of just several thousand values. <em>Of course</em> that does not disqualify languages with heap-based numerical values from the large majority of programming tasks. But neither is it true that we can simply put aside the question because calculations are "fast enough."</p>
<p>There's still definitely a performance question relating to not just the performance of numerical values but the implementation of some advanced operations (continuations) within the managed platform's virtual machines. Meanwhile, of course, the physical machines are moving towards the multicore and manycore eras, which will rewrite all the rules on performance.</p>
<p>Oh! Oh! And Ruby still needs the freaking Smalltalk browser and persistent workspace!</p>Funny Concurrency Story2006-09-09T12:12:00-10:002006-09-09T12:12:00-10:00larrytag:knowing.net,2006-09-09:/posts/2006/09/funny-concurrency-story/<p>I've recently have been working with a client using a <em>very well-known</em> Web-tier library (which will go anonymous for certain reasons). Under heavy load, their system started responding terribly. They asked me to take a look at things.</p>
<p>To make a long story short, the library has a <a href="https://en.wikipedia.org/wiki/Race_condition">race condition …</a></p><p>I've recently have been working with a client using a <em>very well-known</em> Web-tier library (which will go anonymous for certain reasons). Under heavy load, their system started responding terribly. They asked me to take a look at things.</p>
<p>To make a long story short, the library has a <a href="https://en.wikipedia.org/wiki/Race_condition">race condition</a> in the assignment of a Web session's state to the activated code-handling block. Under heavy concurrent load, a handler may be activated with a <strong>null</strong> session (and, delightfully, a few microseconds later another handler might find its underlying session state assigned to). Not surprisingly, my client's code can't do anything logical with a <strong>null</strong> session and generates an exception. Worse, though, the library thread, which is pooled, becomes permanently corrupted.</p>
<p>So once the <em>first</em> failure happens and the thread corrupted, it increased the load on the remaining threads, making their failure more likely. However, as the thread pool corruption grows, the time that the over-all application spends in states away from the race condition increases, the requests start to queue, and the system limps along (kind of).</p>
<p>One of the reasons why the company couldn't figure out what was going on was that when they turned Debug logging on, the serialization of debugging statements to the logfile inadvertently throttled the system so that the deadly race condition didn't occur.</p>
<p>So, after figuring out al this, my first recommendation was to change the use of the Web-tier library. In the meantime, though, I added a very few logging calls as an "Info" log-level, gave them a graphical "dashboard" showing the system at that level, and tested the system to data-tier saturation without triggering the race condition! (Oh, and I gave them a <em>very</em> detailed explanation of why they shouldn't view the "synchronization by logging statement" trick as a fix!)</p>XNA Screencast: Component-Based Game Development (But Is A DSL Called For?)2006-09-09T09:25:00-10:002006-09-09T09:25:00-10:00larrytag:knowing.net,2006-09-09:/posts/2006/09/xna-screencast-component-based-game-development-but-is-a-dsl-called-for/<p>Mitch Walker provides an excellent screencast showing the use of components within XNA GSE. However, looking at it I kept thinking "Shouldn't this be a domain-specific language"? I have to be careful here because, obviously, drag-and-drop designers have proven to be successful. But using the design surface as nothing but …</p><p>Mitch Walker provides an excellent screencast showing the use of components within XNA GSE. However, looking at it I kept thinking "Shouldn't this be a domain-specific language"? I have to be careful here because, obviously, drag-and-drop designers have proven to be successful. But using the design surface as nothing but a bag for instances and the Properties window as a declarative manipulator... I'm just not sure that's any clearer (and it certainly seems limited in flexibility) than a DSL.</p>
<p>This morning, even before coming across the screencast, I was thinking about the tension on this blog between: concurrency (the issue that I think is going to come to dominate professional programming), Ruby (a language which I think is coming to influence the mainstream), and Domain-Specific Languages (a technique that's one of the "lost treasures" of the 70s-80s programming era).</p>
<p>One of the most regrettable things about current mainstream languages is that exploring language possibilities is a <em>huge</em> task: you want to explore "what if sprites were first-class" and you have to start by defining whitespace and digit tokens. One of the reasons "Little Languages"/DSLs are not as common an approach as they were in the 70s and 80s is because, in those days, whitespace and digits were a lot closer to the problem domains! Dealing with weird character sets, packed data, and custom binary representations was a very customary part of problem-solving. Nowadays, those types of issues are rarely at the forefront.</p>
<p>This put me in mind of this post on Modular Compilers and even more so, <a href="http://www.defmacro.org/ramblings/lisp.html">LISP macros.</a> <a href="http://codegeneration.net/cg2014/">Code generation</a> goes a little way, but my big problem with tag-based code generation is that once you get into semantic complexity, the difficulty inverts and suddenly you think "Why am I not generating this with a compiler tool?" (Which, perhaps, points the way towards a possible answer based on refactoring?)</p>
<p>This is one of those "no conclusion" posts...</p>I Love This Diagram2006-09-08T10:43:00-10:002006-09-08T10:43:00-10:00larrytag:knowing.net,2006-09-08:/posts/2006/09/i-love-this-diagram/<p>\<a href="http://headrush.typepad.com/creating_passionate_users/2006/09/success_should_.html"" atomicselection="true"></p>
<p>from Kathy Sierra via John Lam</p>Vista can be installed on VMWare2006-09-08T08:59:00-10:002006-09-08T08:59:00-10:00larrytag:knowing.net,2006-09-08:/posts/2006/09/vista-can-be-installed-on-vmware/<p>Ah hah! Joel Spolsky <a href="https://www.joelonsoftware.com/2006/09/08/installing-vista-rc1-in-vmware-workstation/">posts</a> a technique that allows Vista to instal on VMWare: edit the .vmx file (a plaintext file) and add the lines svga.maxWidth="640" and svga.maxHeight="480". This allows you to see the Vista install (with crappy posterized colors). After Vista boots, install VMWare Tools …</p><p>Ah hah! Joel Spolsky <a href="https://www.joelonsoftware.com/2006/09/08/installing-vista-rc1-in-vmware-workstation/">posts</a> a technique that allows Vista to instal on VMWare: edit the .vmx file (a plaintext file) and add the lines svga.maxWidth="640" and svga.maxHeight="480". This allows you to see the Vista install (with crappy posterized colors). After Vista boots, install VMWare Tools, remove the lines from your .vmx and Bob's your uncle. Just tried it and it works.</p>
<p>Update: Corrected link.</p>Fascinating: Language Exposure Must Be Live, Not Recorded2006-09-08T08:48:00-10:002006-09-08T08:48:00-10:00larrytag:knowing.net,2006-09-08:/posts/2006/09/fascinating-language-exposure-must-be-live-not-recorded/<p>Infants exposed to a Mandarin-speaking adult for less than 5 hours (25-minute sessions over 4 weeks) were "able to distinguish phonetic elements of that language." Very impressive. But infants exposed to a similar amount of speech delivered over DVD could not. Fascinating. General-audience article here (<em>via</em> The Old New Thing …</p><p>Infants exposed to a Mandarin-speaking adult for less than 5 hours (25-minute sessions over 4 weeks) were "able to distinguish phonetic elements of that language." Very impressive. But infants exposed to a similar amount of speech delivered over DVD could not. Fascinating. General-audience article here (<em>via</em> The Old New Thing)</p>
<p>My <em>guess</em> is that there's a difference-in-kind to the type of attention that infants pay humans to the type of attention they pay brightly flickering screens. It would be interesting to see the effect of exposure to, say, a guy in a big purple talking dinosaur suit. Or is the key ingredient perhaps, non-verbal facial communication (eyes and so forth)?</p>
<p><em>I guess I can avoid "Offtopic" by slotting this under "AI"...</em></p>Microsoft's Conflation of DRM/Security Patching is Serious2006-09-08T08:17:00-10:002006-09-08T08:17:00-10:00larrytag:knowing.net,2006-09-08:/posts/2006/09/microsofts-conflation-of-drmsecurity-patching-is-serious/<p>Microsoft rapidly pushed out, via Windows LiveUpdate, a patch to invalidate the FairUse4WM application, which strips the Digital Rights Management (anti-copying) mechanism of Windows Media Player. Most comments on this have spoken of the apparently greater zeal applied to DRM than to security, but the incident is far more infuriating …</p><p>Microsoft rapidly pushed out, via Windows LiveUpdate, a patch to invalidate the FairUse4WM application, which strips the Digital Rights Management (anti-copying) mechanism of Windows Media Player. Most comments on this have spoken of the apparently greater zeal applied to DRM than to security, but the incident is far more infuriating than that.</p>
<p>Patching is an invariably risky technique. It introduces the possibility of defects, either functional or security related. It's a <strong>big deal</strong> to delegate the responsibility of deciding which patches and when to apply to your OS; the vulnerability of Internet-connected machines running Windows is so great, though, that LiveUpdate is acceptable. The implicit contract is "I will allow you to change my machine, introducing the possibility of sudden loss of capability or introduction of new defects, <strong>in order that you may reduce its security exposure."</strong> Period. I want patches for all those completely avoidable buffer overflows that somehow you <strong>still</strong> have and introduce.</p>
<p>To the extent that Microsoft uses <strong>live</strong> updates to perform non-security-related tasks, they seriously reduce the quality of the tradeoff.</p>IronPython as a Foundation for DSLs2006-09-07T14:38:00-10:002006-09-07T14:38:00-10:00larrytag:knowing.net,2006-09-07:/posts/2006/09/ironpython-as-a-foundation-for-dsls/<p>The release of IronPython is, in and of itself, A Good Thing. But <em>maybe</em> the best thing is that it's a <a href="https://archive.codeplex.com/">shared-source release</a> with a very reasonable <a href="https://www.amazon.com/No-Place-to-Hide/dp/B000H3U8S4/sr%3d1-1/qid%3d1157673632/ref%3dsr_1_1/104-3338891-4707968%3fie%3dUTF8%26s%3ddigital-video">license</a>. Not because I'm a utopian about the quality of open source, but because I <em>really</em> quite like the code structure. Apropos my …</p><p>The release of IronPython is, in and of itself, A Good Thing. But <em>maybe</em> the best thing is that it's a <a href="https://archive.codeplex.com/">shared-source release</a> with a very reasonable <a href="https://www.amazon.com/No-Place-to-Hide/dp/B000H3U8S4/sr%3d1-1/qid%3d1157673632/ref%3dsr_1_1/104-3338891-4707968%3fie%3dUTF8%26s%3ddigital-video">license</a>. Not because I'm a utopian about the quality of open source, but because I <em>really</em> quite like the code structure. Apropos my dismay that there is not a compiler-design tutorial that reflects modern techniques, IronPython is as close as anything I've seen to just that.</p>
<p>Hey, how awesome would this be:</p>
<p>Three <em>big</em> problems with understanding compiler techniques are that</p>
<ol>
<li>tutorials traditionally use a single implementation language, and</li>
<li>toy samples (<strong>calc</strong>) morph into complex samples (<strong>mini-C</strong>) morph into esoterica (unification) rather than iterate on a single problem, and</li>
<li>there's a gap between hand-coded tutorials and tutorials based on the use of tools (lex, yacc, bison, antlr, etc.). The two techniques should be shown in parallel, with an emphasis shifting from one to the other as the tutorial gets more advanced.</li>
</ol>
<p>Jim Hugunin wrote the first few iterations of IronPython in Python, then switched to C#.</p>
<p>How <em>rocking</em> would it be to have a tutorial that started with those Python-based prototypes, showing the development of the object structure, strategies for this and that, etc. and then switched to C#, showing the complexities of implementation in a explicitly typed, mainstream language? Meanwhile, you track the development using a tool like Antlrworks:</p>
<p><img alt="" src="http://www.knowing.net/content/binary/image0021.jpg"></p>
<p>While I believe that IronPython is 100% hand-coded, I think that most will want to use tools to automate the process as much as possible.</p>
<p>Oh, man, such a tutorial would be <em>great</em>. Jim should <em>so</em> do it in his copious spare time.</p>40 Quatloos On the Newcomers!2006-09-07T14:10:00-10:002006-09-07T14:10:00-10:00larrytag:knowing.net,2006-09-07:/posts/2006/09/40-quatloos-on-the-newcomers/<p>Amazon has released "Unbox," their video purchase / download service. TV shows are \<span class="math">\(1.99 each and you get \\)</span>1.99 rebate on your first purchase. They've got all 3 seasons of Star Trek and I'm greatly tempted to have <a href="https://www.amazon.com/gp/product/B000HKWL8W/ref%3datv_dp_se_2_16/104-3338891-4707968%3fie%3dUTF8">colorful glowing brains wagering quatloos</a> (until Kirk teaches 'em what <em>real …</em></p><p>Amazon has released "Unbox," their video purchase / download service. TV shows are \<span class="math">\(1.99 each and you get \\)</span>1.99 rebate on your first purchase. They've got all 3 seasons of Star Trek and I'm greatly tempted to have <a href="https://www.amazon.com/gp/product/B000HKWL8W/ref%3datv_dp_se_2_16/104-3338891-4707968%3fie%3dUTF8">colorful glowing brains wagering quatloos</a> (until Kirk teaches 'em what <em>real</em> wagering's all about) just a mouse-click away. On the other hand, "<a href="https://www.amazon.com/gp/product/B000HKWIEY/ref%3datv_dp_se_2_23/104-3338891-4707968%3fie%3dUTF8">The Omega Glory</a>" has what is arguably Shatner's most-Shatneresque monologue ("We! The! People!"). Too, Amazon has <a href="https://www.amazon.com/No-Place-to-Hide/dp/B000H3U8S4/sr%3d1-1/qid%3d1157673632/ref%3dsr_1_1/104-3338891-4707968%3fie%3dUTF8%26s%3ddigital-video"><em>Lost In Space</em></a> which I haven't seen in 30 years, but a part of me remembers this one episode where tiny litle robots worshipped Robot (I think one tiny little robot wore a cape, to indicate his kingly status). That would probably be worth the \$0.</p>
<p>To actually get my business, the killer thing for me would be HDTV content. I'd pay \<span class="math">\(2 an episode for HDTV *Deadwood*. Heck, I'd probably pay \\)</span>5 an episode.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Two Views On Ruby Columns Now Online2006-09-07T10:45:00-10:002006-09-07T10:45:00-10:00larrytag:knowing.net,2006-09-07:/posts/2006/09/two-views-on-ruby-columns-now-online/<p>The September 1st issue of <em>SD Times</em> contains two opinions on Ruby, "It Isn't All A Gem," by Andrew Binstock and my "Crossing the Chasm." Allen Holub's column "Just Say No to XML" is also provocative. As usual, surface disagreements belie underlying agreements: there is nothing that either Andrew or …</p><p>The September 1st issue of <em>SD Times</em> contains two opinions on Ruby, "It Isn't All A Gem," by Andrew Binstock and my "Crossing the Chasm." Allen Holub's column "Just Say No to XML" is also provocative. As usual, surface disagreements belie underlying agreements: there is nothing that either Andrew or Allen says that I think is factually incorrect, but in both cases I disagree (or at least don't fully agree) with their conclusions. Andrew throws up a caution flag on Ruby; I say the time has come to learn it. Allen says that knowing how to build a compiler is is part-and-parcel of being a non-dilettante programmer; I think that today such experience is at least uncommon and borders on esoteric.</p>
<p>Interestingly, both of these disagreements with my colleagues come down to education. Andrew fingers the lack of a great Ruby tutorial as a problem, I think that "what the world needs" is a compiler-design tutorial that reflects what we've learned in the past 15 years about OOP, design patterns, testing, etc. (And I think Allen Holub is the guy to write just such a book. In an email I pointed out the irony of "Mr. OOP" praising tools that churn out procedural state machines and tree-walkers.)</p>Geeks In Paradise: On Being A High-Tech Professional In Hawai'i2006-09-07T09:55:00-10:002006-09-07T09:55:00-10:00larrytag:knowing.net,2006-09-07:/posts/2006/09/geeks-in-paradise-on-being-a-high-tech-professional-in-hawaii/<p>A commenter on a recent post asked a question I get quite a bit, namely, "What's the market in Hawai'i for high-tech professionals?" The short answer is that in Honolulu it's great and that every place else in the state it's poor. Honolulu's a million-person city and has banks and …</p><p>A commenter on a recent post asked a question I get quite a bit, namely, "What's the market in Hawai'i for high-tech professionals?" The short answer is that in Honolulu it's great and that every place else in the state it's poor. Honolulu's a million-person city and has banks and industry and a university and would be a great place for a young person whose interests ranged from high tech to ocean sports (if you're not into the ocean, you probably shouldn't consider living in Hawai'i).</p>
<p>While some jobs exist everywhere (every resort has its own IT infrastructure needs and here on the Big Island we have the small but sophisticated community associated with the <a href="http://www.ifa.hawaii.edu/mko/telescope_table.htm">Mauna Kea telescopes</a>), the sister islands (the islands other than Oahu) have very limited industry. So outside of Oahu it's unlikely that you'll find a job that happens to match your skills, whatever they are.</p>
<p>If, like me, you deliver your work over the Internet, the infrastructure is fine: electricity and Internet service (I use cable broadband) is reliable and because it's tropical, rolling out of bed at 5:30 to start work at 6:00 fits with the environment and lifestyle (it's not cold, you can go for a run before the sun is high, you end work mid-afternoon and have plenty of time to go for a swimm, etc.). Having said that, I have a client who's on the East Coast and conference calls at 10AM <strong>EASTERN</strong> are pretty brutal. (We're 3 hours behind the West Coast during Daylight Savings, 2 hours behind in the Winter.)</p>
<p>I would <strong>love</strong> to start a high-tech business here. The state has an almost 3rd-world-ish desire to leapfrog its economy past an industrial period and into information, so there are incredible tax breaks (including a 100% tax credit for investment. That's right: 100% over 5 years. That's got to make it a little easier to dig up investment, don't you think?). If I were starting a high-tech business and looking to ~~exploit~~... ~~work-to-death~~ ... <em>mentor</em> a couple smart young programmers, this place has a lot of appeal to those not yet settled.</p>
<p>It's very expensive to live here. Food is expensive; if you play around with "free shipping" offers you end up waiting 3 weeks; there's no Fry's Electronics to fulfill your "I need a dual-socket-940 ATX motherboard" whims, etc. The lack of industry, the distance from the mainland, and the abysmal public education system skews the demographics of college-educated people towards post-collegiate and empty nesters, which honestly is one of the hardest things for Tina and I, who fall in the middle.</p>Quit BookMooch Book-Sharing Site2006-09-07T08:55:00-10:002006-09-07T08:55:00-10:00larrytag:knowing.net,2006-09-07:/posts/2006/09/quit-bookmooch-book-sharing-site/<p><a href="http://www.bookmooch.com/">BookMooch</a> is a good idea -- give a book, get a point, get a book, take a point -- but the logistics proved too off-putting for me. Not that they were egregious, but given my life, the last thing I need is another errand on my "to do" list.</p>Folding@Home on the PS3: Networkless XNA Seems Forlorn2006-09-06T05:02:00-10:002006-09-06T05:02:00-10:00larrytag:knowing.net,2006-09-06:/posts/2006/09/foldinghome-on-the-ps3-networkless-xna-seems-forlorn/<p>Sony's written a <a href="mailto:Folding@Home%20client">Folding\@Home client</a> for the PS3 and is getting excellent PR for the power of the Cell processor in the PS3. The various "\@home" distributed computing projects struck me as a good example of the type of coding that was more likely to be possible on the …</p><p>Sony's written a <a href="mailto:Folding@Home%20client">Folding\@Home client</a> for the PS3 and is getting excellent PR for the power of the Cell processor in the PS3. The various "\@home" distributed computing projects struck me as a good example of the type of coding that was more likely to be possible on the XBox360 than amateur game coding.</p>
<p>Sadly, because XNA has locked out networking in its initial release, it doesn't look like an enterprising set of coders can write some optimized protein-folding shaders and get any work done.</p>Turbos Are Here!2006-09-05T17:20:00-10:002006-09-05T17:20:00-10:00larrytag:knowing.net,2006-09-05:/posts/2006/09/turbos-are-here/<p>Wow, what a great day: First, IronPython 1.0 is released and now comes word that Turbo Delphi, C#, and C++ are <a href="http://www.turboexplorer.com/">free for download</a>.</p>IronPython Goes Gold!2006-09-05T13:42:00-10:002006-09-05T13:42:00-10:00larrytag:knowing.net,2006-09-05:/posts/2006/09/ironpython-goes-gold/<p>Alright! Jim Hugunin et al. have shipped IronPython 1.0. You can <a href="https://archive.codeplex.com/">get it at CodePlex</a>.</p>Vista RC Can't Be Installed in VMWare Workstation2006-09-05T08:41:00-10:002006-09-05T08:41:00-10:00larrytag:knowing.net,2006-09-05:/posts/2006/09/vista-rc-cant-be-installed-in-vmware-workstation/<p>Apparently, there's a "known problem" with Vista installing into VMWare Workstation. Kind of reminds me of the days when DOS didn't ship 'til 1-2-3 broke. Grrr....</p>
<p>Apparently you can use VMWare Server to instal Vista and then move the VM to Workstation.</p>Dragon Book, Test Drive Unlimited On The Way: Productivity Estimates Lowered2006-09-05T08:32:00-10:002006-09-05T08:32:00-10:00larrytag:knowing.net,2006-09-05:/posts/2006/09/dragon-book-test-drive-unlimited-on-the-way-productivity-estimates-lowered/<p>The new version of Compilers: Principles, Techniques, and Tools is winging its way toward me, along with <a href="https://www.amazon.com/exec/obidos/ASIN/B000EGEX9Y/thinkinginnet-20">Test Drive Unlimited</a>, a racing game set on the island of Oahu. I wonder which one will have a worse effect on me.</p>Sandwich Isles Communication: Boondogglers2006-09-04T10:01:00-10:002006-09-04T10:01:00-10:00larrytag:knowing.net,2006-09-04:/posts/2006/09/sandwich-isles-communication-boondogglers/<p>Perhaps you've noticed the "Universal Service Fee" on your telephone bill. This is a government-mandated subsidy to support phone access in rural areas. Fair enough, perhaps. Here in Hawaii, SandwichIsles Communications Company receives more than \<span class="math">\(16M dollar per year to service... are you ready? ... 1,238 customers. That's \\)</span>13,345 …</p><p>Perhaps you've noticed the "Universal Service Fee" on your telephone bill. This is a government-mandated subsidy to support phone access in rural areas. Fair enough, perhaps. Here in Hawaii, SandwichIsles Communications Company receives more than \<span class="math">\(16M dollar per year to service... are you ready? ... 1,238 customers. That's \\)</span>13,345 <em>annually per line</em>. Thirteen <em>thousand. Per line. Annually.</em> That's ten times the cost of giving each of those subscribers a satellite phone.</p>
<p>The same company recently received \<span class="math">\(500M to provide broadband to 5,400 homes. That's \\)</span>93,000 per home. All of those homes already have landlines and are eligible for DSL, which even including repeaters, would run around \$600 per home.</p>
<p>This is the sort of thing which makes me shake my head at right-left polarization: getting worked up about theory when nonsense like this is par for the course.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Networking Unavailable in XNA GSE2006-09-03T09:56:00-10:002006-09-03T09:56:00-10:00larrytag:knowing.net,2006-09-03:/posts/2006/09/networking-unavailable-in-xna-gse/<p>In a forthcoming column in <em>SD Times</em>, I predicted that one of the first things written using XNA GSE would be a Bittorrent client for the XBox360. Wrong. The current version of XNA does not allow network access.</p>
<p>Hmm...</p>New Version of The Dragon Book2006-09-02T15:22:00-10:002006-09-02T15:22:00-10:00larrytag:knowing.net,2006-09-02:/posts/2006/09/new-version-of-the-dragon-book/<p>Holy smoke, <a href="https://www.amazon.com/exec/obidos/ASIN/0321486811/thinkinginnet-20">the new version</a> was supposed to have hit the storeshelves 2 days ago. Man, I bet they regret not having had the opportunity to put "the lowest-swinging signifier of programming studliness" on the cover.</p>Joel's "Ruby is Risky, But We Rely on a DSL" Flub2006-09-02T15:12:00-10:002006-09-02T15:12:00-10:00larrytag:knowing.net,2006-09-02:/posts/2006/09/joels-quotruby-is-risky-but-we-rely-on-a-dslquot-flub/<p>Joel Spolsky, one of the ablest commentors on the industry, recently made the mistake of combining advice and self-promotion without realizing that what he was writing combined "do what I say, not what I do," with a flame-baiting slap at non-mainstream languages. He's been hammered in the blogosphere, but the …</p><p>Joel Spolsky, one of the ablest commentors on the industry, recently made the mistake of combining advice and self-promotion without realizing that what he was writing combined "do what I say, not what I do," with a flame-baiting slap at non-mainstream languages. He's been hammered in the blogosphere, but the incident was driven by something commendable: when you walk the walk, sometimes it doesn't accord with the talk you talk.</p>
<p>The <a href="https://www.joelonsoftware.com/2006/09/01/language-wars/">original post</a> begins as advice to someone wondering ".NET or J2EE...Which Web Server?...Which language?" and, as part of that final question, mentioned Ruby and Ruby on Rails. Joel's response begins with the observation that lots of people build lots of systems with .NET, Java, and PHP and "none of them are failing because of the choice of technology." That's not a bad answer, given the <em>implicit context</em> of the question. While there's a slight possibility that the questioner is so experienced that they feel they can adopt "the best" solution without stumbling, it's vastly more likely that the question reveals "Neither I nor my team have experience with the mainstream dominant platforms."</p>
<p>Giving a beginner advice that narrows risk -- "Java or .NET" -- is not foolish. There is a <em>vast</em> array of resources for programmers and teams using Java and .NET. There are lots of libraries, lots of tools, lots of books, lots of consultants ready to come in and lend a hand. It's the software development equivalent of the old "no one was ever fired for buying IBM," phrase of the pre-PC era.</p>
<p>Re-reading the post with this perspective shows that this is Joel's main point: ecosystem and personal/team experience. However, instead of emphasizing the "positive space" of the benefits, he attacks the "negative space," and questions whether non-dominant languages <em>are capable</em> of success. This reminds me of the people who, boosting their own language, invariably make some crack about how C/C++ is "hideously complex" and "error-prone," to which a reasonable person thinks "Yet there are one or two successful programs written in these languages; if he exaggerates the difficulties of C/C++, is he not likely to be exaggerating the benefits of <em>X</em>?"</p>
<p>Just this aspect of the post would have been enough to troll up responses, but Joel then reveals that at <em>his</em> company, they use a domain-specific language that's some derivative of Basic, but that's a functional programming language, and it has closures and lambdas and different initialization syntax and it's "only two months work for a talented person who's read the dragon book" and assorted other things impossible-to-reconcile with risk-minimizing advice to beginners. (Closures "and" lambdas? "Functional programming"? As in, non-mutable assignment? Really? Or did Joel slip into hyperbolic mode?) (The "dragon book" reference is another giveaway that Joel's switched gears. This is the book from which <em>my</em> generation learned compiler theory and implementation. I think it's been out of print for a decade and, if I recall correctly, all the code was in hard-core C. There's not a more low-hanging signifier of programming studliness than a well-worn copy on your shelf.)</p>
<p>So Joel set himself up for a comparison of the risk exposure of Ruby versus that of a proprietary functional derivative of Basic with embedded SQL. No matter how good a debater Joel is, he's gonna' lose that fight. William F. Buckley couldn't finesse his way through <em>that</em> argument.</p>
<p>But the bigger issue is this: many, probably most, people who advise others on software development are <em>not</em> in the business of developing software. They're in the business of advising how to develop software, either as architectural consultants who soar blissfully above the details or as trainers who face the same limited range of problems time-and-time again. In the <em>development</em> business, talent manifests in the use of powerful techniques -- domain-specific languages, meta-programming facilities, rolling up your sleeves and writing assembly language, etc. In the <em>advice</em> business, talent manifests as increasing client's productivity while lowering their risk exposure. Joel accidentally crossed these wires, but in general, he's still one of the best on software development <em>advice</em> because he stays so close actual <em>development</em>.</p>XNA GSE Can Install Side-By-Side with VS20052006-08-31T11:54:00-10:002006-08-31T11:54:00-10:00larrytag:knowing.net,2006-08-31:/posts/2006/08/xna-gse-can-install-side-by-side-with-vs2005/<p>Ah. Although you cannot develop with XNA GSE inside a VM (either VMWare or Virtual PC), you <em>can</em> install Visual C# Express side-by-side with Visual Studio 2005. There's a slight weirdness in that VC# Express can only install to \$PROGRAM FILES, while I normally keep my dev tools on a …</p><p>Ah. Although you cannot develop with XNA GSE inside a VM (either VMWare or Virtual PC), you <em>can</em> install Visual C# Express side-by-side with Visual Studio 2005. There's a slight weirdness in that VC# Express can only install to \$PROGRAM FILES, while I normally keep my dev tools on a separate partition, but that's just a quibble.</p>XNA GSE Won't Render Games Under VMWare2006-08-30T21:01:00-10:002006-08-30T21:01:00-10:00larrytag:knowing.net,2006-08-30:/posts/2006/08/xna-gse-wont-render-games-under-vmware/<p>Oh, bummer! Given that XNA GSE is a beta and given that it requires C# Express, not Visual Studio, I installed it in a VMWare OS, but when I went to run the sample SpaceWar game, I received a "No suitable graphics" message. I think that leaves me out of …</p><p>Oh, bummer! Given that XNA GSE is a beta and given that it requires C# Express, not Visual Studio, I installed it in a VMWare OS, but when I went to run the sample SpaceWar game, I received a "No suitable graphics" message. I think that leaves me out of luck. Maybe I'll install it on one of my laptops, but if anything actually <em>needs</em> the power of my development machine, it's game programming.</p>Meet the new boss...2006-08-30T14:17:00-10:002006-08-30T14:17:00-10:00larrytag:knowing.net,2006-08-30:/posts/2006/08/meet-the-new-boss/<p>Nope, not a clever job-related post. I've been listening to my "5-star" songs on Windows Media Player and, y'know, is there any better minute of rock than the end of "Won't Get Fooled Again"? (Tell it to the hand, Zeppelin fans.)</p>XNA Game Studio Express Available2006-08-30T07:48:00-10:002006-08-30T07:48:00-10:00larrytag:knowing.net,2006-08-30:/posts/2006/08/xna-game-studio-express-available/<p>I'm kicking myself for having two weeks ago written a <a href="https://sdtimes.com/">column</a> on Microsoft's outreach to non-professional programmers. If I had waited until my current deadline, I would have an excuse to spend the day programming a game for the XBox. As it is, I have GSA sitting in my /Downloads …</p><p>I'm kicking myself for having two weeks ago written a <a href="https://sdtimes.com/">column</a> on Microsoft's outreach to non-professional programmers. If I had waited until my current deadline, I would have an excuse to spend the day programming a game for the XBox. As it is, I have GSA sitting in my /Downloads folder and have to spend the day writing about... oh, I dunno' ... Vista pricing or some crap like that.</p>Concurrent Programming in C# Intro2006-08-29T10:05:00-10:002006-08-29T10:05:00-10:00larrytag:knowing.net,2006-08-29:/posts/2006/08/concurrent-programming-in-c-intro/<p>DevX has published my <a href="http://www.devx.com/cplus/">introductory article on concurrent programming in C#</a> (a companion piece to my earlier <a href="http://www.devx.com/">article on C++/CLI and OpenMP</a>). The interesting thing is that OpenMP makes parallel constructs easier to express in C++ than is possible in C#. On the other hand, C#'s memory management …</p><p>DevX has published my <a href="http://www.devx.com/cplus/">introductory article on concurrent programming in C#</a> (a companion piece to my earlier <a href="http://www.devx.com/">article on C++/CLI and OpenMP</a>). The interesting thing is that OpenMP makes parallel constructs easier to express in C++ than is possible in C#. On the other hand, C#'s memory management and reflection make it easier to write a general helper function.</p>Intel Releases New Threading Tools2006-08-28T15:37:00-10:002006-08-28T15:37:00-10:00larrytag:knowing.net,2006-08-28:/posts/2006/08/intel-releases-new-threading-tools/<p>I had a preview last week of Intel's new threading products, including "Threading Building Blocks," a C++ runtime library (template-based) that provides high-performance thread-safe data structures. I was very impressed by the slides showing performance:</p>
<p>I look forward to trying out the tools myself.</p>(Thin) Book Or Article To Convince CEO Of Agility in Develoment?2006-08-28T10:08:00-10:002006-08-28T10:08:00-10:00larrytag:knowing.net,2006-08-28:/posts/2006/08/thin-book-or-article-to-convince-ceo-of-agility-in-develoment/<p>I'm ashamed I don't have an answer for this: a client is a CEO who finds himself, after a successful career in the domain, in charge of a company developing software in that domain. Naturally, he is more familiar with traditional project management and when he thinks about what worked …</p><p>I'm ashamed I don't have an answer for this: a client is a CEO who finds himself, after a successful career in the domain, in charge of a company developing software in that domain. Naturally, he is more familiar with traditional project management and when he thinks about what worked for him in the past, it's what you and I would call "waterfall process." He sees that there are problems with this and when I explained to him that it's now widely agreed that iterative, incremental approaches are more effective, he was receptive and wanted to learn more.</p>
<p>What should he read? Even the highest-level books I know to be excellent (authors like Jim Highsmith, Mary & Tom Poppendieck, DeMarco & Lister) are really for technical managers. What this guy needs is, like, a Harvard Business Review study. He doesn't need to know the details of XP versus Scrum, he needs to see that abandoning the concept of "perfect requirements" can lead to business success.</p>
<p>Thoughts?</p>8 Planets? 12 Planets? Slow News Day2006-08-24T11:04:00-10:002006-08-24T11:04:00-10:00larrytag:knowing.net,2006-08-24:/posts/2006/08/8-planets-12-planets-slow-news-day/<p>So now they're saying that Pluto is going to be demoted. A week ago they were saying that Cedna, etc., were going to be promoted. Is anything official yet? Or have things gotten to the point where even science news is the subject of 24-hour cable news speculation? What does …</p><p>So now they're saying that Pluto is going to be demoted. A week ago they were saying that Cedna, etc., were going to be promoted. Is anything official yet? Or have things gotten to the point where even science news is the subject of 24-hour cable news speculation? What does John Mark Karr (he must be a criminal because they use of his middle name) have to say about the classification of solar orbiting objects?</p>Thinking Parallel Blog2006-08-23T13:29:00-10:002006-08-23T13:29:00-10:00larrytag:knowing.net,2006-08-23:/posts/2006/08/thinking-parallel-blog/<p>I just discovered <a href="http://www.thinkingparallel.com/cgi-sys/suspendedpage.cgi">Michael Sļ's blog</a> on parallel programming. He comments pro and con about my <a href="http://www.devx.com/">DevX article</a>.</p>Article on Using OpenMP with C++/CLI2006-08-23T08:00:00-10:002006-08-23T08:00:00-10:00larrytag:knowing.net,2006-08-23:/posts/2006/08/article-on-using-openmp-with-ccli/<p>My latest <a href="http://www.devx.com/">article on DevX</a> shows how easy it is (in the best case) to use OpenMP with C++/CLI. OpenMP is a low-level library to help create concurrent operations. One of things I talk about in the article is that it is at the finest-grain (loops) and the coarsest-grain …</p><p>My latest <a href="http://www.devx.com/">article on DevX</a> shows how easy it is (in the best case) to use OpenMP with C++/CLI. OpenMP is a low-level library to help create concurrent operations. One of things I talk about in the article is that it is at the finest-grain (loops) and the coarsest-grain (service-orientation) that concurrency is easiest. It's when you get into concurrency while manipulating data structures (including objects) that disaster looms.</p>
<p><strong>Update</strong>: If you like the article and would like to see more like it, consider digging it.</p>Fabian's HDR Photography2006-08-22T08:48:00-10:002006-08-22T08:48:00-10:00larrytag:knowing.net,2006-08-22:/posts/2006/08/fabians-hdr-photography/<p>My friend Fabian Gonzalez is producing some great images with high dynamic range (HDR) photography:</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>
<p>This is a technique that attempts to reproduce the incredible range of light-to-dark that our vision system integrates. After taking 3 photos (over-, under-, and correctly- exposed) of the same subject (in this case, managing …</p><p>My friend Fabian Gonzalez is producing some great images with high dynamic range (HDR) photography:</p>
<p><img alt="" src="https://s.yimg.com/pw/images/en-us/photo_unavailable.png"></p>
<p>This is a technique that attempts to reproduce the incredible range of light-to-dark that our vision system integrates. After taking 3 photos (over-, under-, and correctly- exposed) of the same subject (in this case, managing to freeze the thinking / sad (?) man in the lower left) a program sees how each pixel changes in reaction to the light. From those 3 points, a curve is created and the pixel's "real" brightness is extrapolated (in other words, every pixel in every exposure is assigned one of just 256 values, but by seeing how the pixels shift between those bins depending on the exposure, you can determine many more than 256 absolute brightness levels).</p>
<p>Then, to create an image on a low-dynamic range device (like a screen or even film, apparently), you create a new set of curves to map the floating-point HDR pixels back into just 256 bins (per color channel). This step is where the "darkroom artistry" comes in; colors can be popped dramatically (see Fabian's shot inside the Metreon) but here Fabian's dialed things back, really capturing the feel of a warm San Francisco evening (if that's not an oxymoron).</p>
<p>I've tried to do HDR with my horrible, laggy, jiggly pocket digital camera, but have yet to produce an even moderately decent photo. Oh yeah, and I'm just not much of a photographer, either.</p>Programmers as Commodities2006-08-21T10:20:00-10:002006-08-21T10:20:00-10:00larrytag:knowing.net,2006-08-21:/posts/2006/08/programmers-as-commodities/<p>The answer is \~1.4X. Martin Paulo says it perfectly: "software developers are seen as interchangeable units, with actual hourly cost being the prime driver. The quality of the resultant code, it's correctness and the time taken to deliver it are all intangibles that are left out of the equation …</p><p>The answer is \~1.4X. Martin Paulo says it perfectly: "software developers are seen as interchangeable units, with actual hourly cost being the prime driver. The quality of the resultant code, it's correctness and the time taken to deliver it are all intangibles that are left out of the equation. And the time taken to learn the code to be worked on is never, ever, factored into the equation. People out there simply don't understand software, but do understand hourly rates." James Robertson \<a href="http://www.cincomsmalltalk.com/blog/blogView%3fshowComments%3dtrue%26entry%3d3333613860"" target="_blank" rel="noopener noreferrer">says that I missed his point, that "Smalltalk is simple, and thus easier to pick up. A system built by 2 people probably has fewer areas of oddness than one built by 10." I agree with both those points (with the caveat that "easier to pick up" is in the eyes of the beholder. I am not one of those who believes that there's a universal mental "fit" for programming languages). But I think James <em>misses</em> my point, which is not, I think, that Gary tried to extort the company by attempting to charge more, but rather that Gary had demonstrated something that programmers and experienced managers know: that software development productivity varies greatly (an order of magnitude, the studies tell us) and that Gary, in at least this one situation, seemed clearly more capable than a commodity programmer. Metaphorically, having hit a home-run, free agent Gary expected to make more money next season. Yet that's not how the market plays out (at least in this case and, in my experience, this was more typical than not).</p>
<p>Somewhat tangentially, this raises the interesting issue of being an independent versus working for a consulting firm. It's not unusual for a big consulting firm to charge \<span class="math">\(200-\\)</span>300 / hour for a moderately experienced developer (I'm sure those 200 programmers that SAIC had doing make-work on the \$170M FBI project were in that range). The actual programmers make well under a quarter of that and there's always a Kabuki dance at the end of the month where the client knocks down the bill 10-20% (and thus looks tough to the next layer of management). And big consulting firms actively conspire to increase the client's long-term reliance on the consulting firm.</p>
<p>I was once brought in to a Fortune 500 company in the middle of a software disaster. It was classic: 40 consultant programmers billing out at up to \$400 / hour, 3 project managers, and just absolute paralysis. My recommendation, that they could finish the project in four months if they fired all but 5 programmers and 1 manager, fell on deaf ears. Six months and several million dollars later, they scrapped the project.</p>
<p>This is one of the reasons why surveys of average (or even median) software development costs fail to capture important dynamics of the market: the economics are entirely different for in-house development, independent contractor (generally with a smaller client company) and developing with a big consulting firm (generally with a bigger company). The big consulting firms would have you believe that the types of work they do are so much more complex and distributed and so forth that it justifies their costs. That's a load of crap.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Don't Call A Delegate From Within A Critical Section2006-08-20T16:25:00-10:002006-08-20T16:25:00-10:00larrytag:knowing.net,2006-08-20:/posts/2006/08/dont-call-a-delegate-from-within-a-critical-section/<p>Before talking about value and reference types and delegates/closures, let me point out that Monitor-based locking has a fundamental flaw when working with delegates (the same flaw that it has with virtual method calls on objects): you can never safely call a delegate inside a lock-block that is holding …</p><p>Before talking about value and reference types and delegates/closures, let me point out that Monitor-based locking has a fundamental flaw when working with delegates (the same flaw that it has with virtual method calls on objects): you can never safely call a delegate inside a lock-block that is holding a lock on a resource that is conceivably reachable by the delegate (hint of a return to the issue of "closing over" local variables). This is because it's possible that the delegate will start a thread that attempts to lock the same resource that you've locked, an attempt which will result in deadlock.</p>
<p>In the following program, the <strong>Library</strong> is running in its own thread, spinning on the lines 34-47, which call back to <strong>myDelegate()</strong> on line 42. This callback is in the middle of a critical section, lines 38-44, which have locked <strong>this</strong>.</p>
<p>Now consider the function <strong>LockAndTalk()</strong>, lines 79-97. It, too, has a critical section, beginning at line 86. It attempts to lock a resource, in this case, the <strong>Library</strong> which it is using. If it succeeds, we consider the callback to be a success. And, if the <strong>Library</strong>'s delegate callback is set to <strong>Client</strong>'s <strong>FineCall()</strong>, everything works fine, because the Line 86 lock of the <strong>Library</strong> and the line 38 lock of the same <strong>Library</strong> occur within the same thread.</p>
<p>However, consider what happens when the Library's delegate callback is set to <strong>BadCall()</strong> (lines 58-69), which looks a lot like <strong>FineCall()</strong>, but happens to call the function <strong>LockAndTalk()</strong> in the context of a separate thread. Now, the locks at line 86 and 38 are called within separate threads and deadlock.</p>
<p>As soon as you enclose a callback (virtual method or delegate) within the language-promoted Monitor-based strategies of C# ( <strong>lock</strong> )<strong> </strong>or Java ( <strong>synchronized</strong> ), you've shot yourself in the foot.</p>
<p>I'm late for my Frisbee game, so I guess I'll have to leave an example that produces a deadlock via a captured outer variable for another day...</p>
<p>::: {style="font-size: 10pt; background: white; color: black; font-family: courier new"}
[ 1]{style="color: #2b91af"} [//Never call a delegate inside a lock]{style="color: green"}</p>
<p>[ 2]{style="color: #2b91af"} [using]{style="color: blue"} System;</p>
<p>[ 3]{style="color: #2b91af"} [using]{style="color: blue"} System.Threading;</p>
<p>[ 4]{style="color: #2b91af"} [using]{style="color: blue"} System.Collections;</p>
<p>[ 5]{style="color: #2b91af"} </p>
<p>[ 6]{style="color: #2b91af"} [delegate]{style="color: blue"} [void]{style="color: blue"} [VoidDelegate]{style="color: teal"}();</p>
<p>[ 7]{style="color: #2b91af"} </p>
<p>[ 8]{style="color: #2b91af"} [class]{style="color: blue"} [Library]{style="color: teal"}</p>
<p>[ 9]{style="color: #2b91af"} {</p>
<p>[ 10]{style="color: #2b91af"} [VoidDelegate]{style="color: teal"} myDelegate;</p>
<p>[ 11]{style="color: #2b91af"} [public]{style="color: blue"} [VoidDelegate]{style="color: teal"} MyDelegate</p>
<p>[ 12]{style="color: #2b91af"} {</p>
<p>[ 13]{style="color: #2b91af"} [set]{style="color: blue"} { myDelegate = [value]{style="color: blue"}; }</p>
<p>[ 14]{style="color: #2b91af"} }</p>
<p>[ 15]{style="color: #2b91af"} </p>
<p>[ 16]{style="color: #2b91af"} [Thread]{style="color: teal"} t;</p>
<p>[ 17]{style="color: #2b91af"} </p>
<p>[ 18]{style="color: #2b91af"} [public]{style="color: blue"} [void]{style="color: blue"} Run()</p>
<p>[ 19]{style="color: #2b91af"} {</p>
<p>[ 20]{style="color: #2b91af"} [ThreadStart]{style="color: teal"} ts = [new]{style="color: blue"} [ThreadStart]{style="color: teal"}(ThreadCaller);</p>
<p>[ 21]{style="color: #2b91af"} t = [new]{style="color: blue"} [Thread]{style="color: teal"}(ts);</p>
<p>[ 22]{style="color: #2b91af"} t.Name = ["Library thread"]{style="color: maroon"};</p>
<p>[ 23]{style="color: #2b91af"} t.Start();</p>
<p>[ 24]{style="color: #2b91af"} }</p>
<p>[ 25]{style="color: #2b91af"} </p>
<p>[ 26]{style="color: #2b91af"} [public]{style="color: blue"} [void]{style="color: blue"} Stop()</p>
<p>[ 27]{style="color: #2b91af"} {</p>
<p>[ 28]{style="color: #2b91af"} t.Abort();</p>
<p>[ 29]{style="color: #2b91af"} t.Join();</p>
<p>[ 30]{style="color: #2b91af"} }</p>
<p>[ 31]{style="color: #2b91af"} </p>
<p>[ 32]{style="color: #2b91af"} [void]{style="color: blue"} ThreadCaller()</p>
<p>[ 33]{style="color: #2b91af"} {</p>
<p>[ 34]{style="color: #2b91af"} [while]{style="color: blue"} ([true]{style="color: blue"})</p>
<p>[ 35]{style="color: #2b91af"} {</p>
<p>[ 36]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine([Thread]{style="color: teal"}.CurrentThread.Name +</p>
<p>[ 37]{style="color: #2b91af"} [" asking for lock on "]{style="color: maroon"} + [this]{style="color: blue"}.GetHashCode());</p>
<p>[ 38]{style="color: #2b91af"} [lock]{style="color: blue"} ([this]{style="color: blue"})</p>
<p>[ 39]{style="color: #2b91af"} {</p>
<p>[ 40]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine([Thread]{style="color: teal"}.CurrentThread.Name +</p>
<p>[ 41]{style="color: #2b91af"} [" acquired lock"]{style="color: maroon"});</p>
<p>[ 42]{style="color: #2b91af"} myDelegate();</p>
<p>[ 43]{style="color: #2b91af"} [Thread]{style="color: teal"}.Sleep(1000);</p>
<p>[ 44]{style="color: #2b91af"} }</p>
<p>[ 45]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine([Thread]{style="color: teal"}.CurrentThread.Name +</p>
<p>[ 46]{style="color: #2b91af"} [" released lock"]{style="color: maroon"});</p>
<p>[ 47]{style="color: #2b91af"} }</p>
<p>[ 48]{style="color: #2b91af"} }</p>
<p>[ 49]{style="color: #2b91af"} }</p>
<p>[ 50]{style="color: #2b91af"} </p>
<p>[ 51]{style="color: #2b91af"} [class]{style="color: blue"} [Client]{style="color: teal"}</p>
<p>[ 52]{style="color: #2b91af"} {</p>
<p>[ 53]{style="color: #2b91af"} [internal]{style="color: blue"} [void]{style="color: blue"} FineCall()</p>
<p>[ 54]{style="color: #2b91af"} {</p>
<p>[ 55]{style="color: #2b91af"} LockAndTalk();</p>
<p>[ 56]{style="color: #2b91af"} }</p>
<p>[ 57]{style="color: #2b91af"} </p>
<p>[ 58]{style="color: #2b91af"} [internal]{style="color: blue"} [void]{style="color: blue"} BadCall()</p>
<p>[ 59]{style="color: #2b91af"} {</p>
<p>[ 60]{style="color: #2b91af"} [ThreadStart]{style="color: teal"} ts = [new]{style="color: blue"} [ThreadStart]{style="color: teal"}(LockAndTalk);</p>
<p>[ 61]{style="color: #2b91af"} [Thread]{style="color: teal"} t = [new]{style="color: blue"} [Thread]{style="color: teal"}(ts);</p>
<p>[ 62]{style="color: #2b91af"} t.Name = ["BadClient"]{style="color: maroon"};</p>
<p>[ 63]{style="color: #2b91af"} t.IsBackground = [true]{style="color: blue"};</p>
<p>[ 64]{style="color: #2b91af"} t.Start();</p>
<p>[ 65]{style="color: #2b91af"} [while]{style="color: blue"} (callDone == [false]{style="color: blue"})</p>
<p>[ 66]{style="color: #2b91af"} {</p>
<p>[ 67]{style="color: #2b91af"} [Thread]{style="color: teal"}.Sleep(1000);</p>
<p>[ 68]{style="color: #2b91af"} }</p>
<p>[ 69]{style="color: #2b91af"} }</p>
<p>[ 70]{style="color: #2b91af"} </p>
<p>[ 71]{style="color: #2b91af"} [Library]{style="color: teal"} l;</p>
<p>[ 72]{style="color: #2b91af"} [public]{style="color: blue"} [Library]{style="color: teal"} Library</p>
<p>[ 73]{style="color: #2b91af"} {</p>
<p>[ 74]{style="color: #2b91af"} [set]{style="color: blue"} { l = [value]{style="color: blue"}; }</p>
<p>[ 75]{style="color: #2b91af"} }</p>
<p>[ 76]{style="color: #2b91af"} </p>
<p>[ 77]{style="color: #2b91af"} [protected]{style="color: blue"} [bool]{style="color: blue"} callDone = [false]{style="color: blue"};</p>
<p>[ 78]{style="color: #2b91af"} </p>
<p>[ 79]{style="color: #2b91af"} [public]{style="color: blue"} [void]{style="color: blue"} LockAndTalk()</p>
<p>[ 80]{style="color: #2b91af"} {</p>
<p>[ 81]{style="color: #2b91af"} callDone = [false]{style="color: blue"};</p>
<p>[ 82]{style="color: #2b91af"} [while]{style="color: blue"} (callDone == [false]{style="color: blue"})</p>
<p>[ 83]{style="color: #2b91af"} {</p>
<p>[ 84]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine([this]{style="color: blue"}.GetType() +</p>
<p>[ 85]{style="color: #2b91af"} [" asking for lock on "]{style="color: maroon"} + l.GetHashCode());</p>
<p>[ 86]{style="color: #2b91af"} [lock]{style="color: blue"} (l)</p>
<p>[ 87]{style="color: #2b91af"} {</p>
<p>[ 88]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine([Thread]{style="color: teal"}.CurrentThread.Name +</p>
<p>[ 89]{style="color: #2b91af"} [" acquired lock"]{style="color: maroon"});</p>
<p>[ 90]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine(["Delegate executed"]{style="color: maroon"});</p>
<p>[ 91]{style="color: #2b91af"} [Thread]{style="color: teal"}.Sleep(1000);</p>
<p>[ 92]{style="color: #2b91af"} callDone = [true]{style="color: blue"};</p>
<p>[ 93]{style="color: #2b91af"} }</p>
<p>[ 94]{style="color: #2b91af"} }</p>
<p>[ 95]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine([Thread]{style="color: teal"}.CurrentThread.Name +</p>
<p>[ 96]{style="color: #2b91af"} [" released lock"]{style="color: maroon"});</p>
<p>[ 97]{style="color: #2b91af"} }</p>
<p>[ 98]{style="color: #2b91af"} }</p>
<p>[ 99]{style="color: #2b91af"} </p>
<p>[ 100]{style="color: #2b91af"} </p>
<p>[ 101]{style="color: #2b91af"} [class]{style="color: blue"} [TestingClass]{style="color: teal"}</p>
<p>[ 102]{style="color: #2b91af"} {</p>
<p>[ 103]{style="color: #2b91af"} [static]{style="color: blue"} [Library]{style="color: teal"} l;</p>
<p>[ 104]{style="color: #2b91af"} TestingClass([Client]{style="color: teal"} c, [VoidDelegate]{style="color: teal"} myDelegate)</p>
<p>[ 105]{style="color: #2b91af"} {</p>
<p>[ 106]{style="color: #2b91af"} l = [new]{style="color: blue"} [Library]{style="color: teal"}();</p>
<p>[ 107]{style="color: #2b91af"} c.Library = l;</p>
<p>[ 108]{style="color: #2b91af"} l.MyDelegate = myDelegate;</p>
<p>[ 109]{style="color: #2b91af"} l.Run();</p>
<p>[ 110]{style="color: #2b91af"} </p>
<p>[ 111]{style="color: #2b91af"} [Thread]{style="color: teal"}.Sleep(10000);</p>
<p>[ 112]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine(["Ending test now..."]{style="color: maroon"});</p>
<p>[ 113]{style="color: #2b91af"} l.Stop();</p>
<p>[ 114]{style="color: #2b91af"} }</p>
<p>[ 115]{style="color: #2b91af"} </p>
<p>[ 116]{style="color: #2b91af"} [public]{style="color: blue"} [static]{style="color: blue"} [void]{style="color: blue"} Main()</p>
<p>[ 117]{style="color: #2b91af"} {</p>
<p>[ 118]{style="color: #2b91af"} [Client]{style="color: teal"} c = [new]{style="color: blue"} [Client]{style="color: teal"}();</p>
<p>[ 119]{style="color: #2b91af"} [new]{style="color: blue"} [TestingClass]{style="color: teal"}(c, c.FineCall);</p>
<p>[ 120]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine(["Okay, that went fine."]{style="color: maroon"});</p>
<p>[ 121]{style="color: #2b91af"} </p>
<p>[ 122]{style="color: #2b91af"} [Client]{style="color: teal"} c2 = [new]{style="color: blue"} [Client]{style="color: teal"}();</p>
<p>[ 123]{style="color: #2b91af"} [new]{style="color: blue"} [TestingClass]{style="color: teal"}(c2, c2.BadCall);</p>
<p>[ 124]{style="color: #2b91af"} </p>
<p>[ 125]{style="color: #2b91af"} }</p>
<p>[ 126]{style="color: #2b91af"} }
:::</p>Did I say "outputted"?2006-08-20T10:49:00-10:002006-08-20T10:49:00-10:00larrytag:knowing.net,2006-08-20:/posts/2006/08/did-i-say-quotoutputtedquot/<p>Blogging reminds me constantly of the value of editors. Er... "constantly reminds"...</p>Example of Surprising Closure Behavior2006-08-20T09:59:00-10:002006-08-20T09:59:00-10:00larrytag:knowing.net,2006-08-20:/posts/2006/08/example-of-surprising-closure-behavior/<p>::: {style="font-size: 10pt; background: white; color: black; font-family: courier new"}
What do you expect to be outputted from this program (note that line 19 captures the outer variable "i")?</p>
<p>[ 1]{style="color: #2b91af"} [using]{style="color: blue"} System;</p>
<p>[ 2]{style="color: #2b91af"} [using]{style="color: blue"} System.Collections.Generic;</p>
<p>[ 3 …</p><p>::: {style="font-size: 10pt; background: white; color: black; font-family: courier new"}
What do you expect to be outputted from this program (note that line 19 captures the outer variable "i")?</p>
<p>[ 1]{style="color: #2b91af"} [using]{style="color: blue"} System;</p>
<p>[ 2]{style="color: #2b91af"} [using]{style="color: blue"} System.Collections.Generic;</p>
<p>[ 3]{style="color: #2b91af"} [using]{style="color: blue"} System.Text;</p>
<p>[ 4]{style="color: #2b91af"} [using]{style="color: blue"} System.Threading;</p>
<p>[ 5]{style="color: #2b91af"} </p>
<p>[ 6]{style="color: #2b91af"} [delegate]{style="color: blue"} [void]{style="color: blue"} [VoidDelegate]{style="color: teal"}();</p>
<p>[ 7]{style="color: #2b91af"} </p>
<p>[ 8]{style="color: #2b91af"} [class]{style="color: blue"} [Program]{style="color: teal"}</p>
<p>[ 9]{style="color: #2b91af"} {</p>
<p>[ 10]{style="color: #2b91af"} [public]{style="color: blue"} [static]{style="color: blue"} [void]{style="color: blue"} Main([string]{style="color: blue"}[] args)</p>
<p>[ 11]{style="color: #2b91af"} {</p>
<p>[ 12]{style="color: #2b91af"} [List]{style="color: teal"}\<[VoidDelegate]{style="color: teal"}> closures = [new]{style="color: blue"} [List]{style="color: teal"}\<[VoidDelegate]{style="color: teal"}>();</p>
<p>[ 13]{style="color: #2b91af"} [//Create a bunch of closures]{style="color: green"}</p>
<p>[ 14]{style="color: #2b91af"} [for]{style="color: blue"} ([int]{style="color: blue"} i = 0; i \< 10; i++)</p>
<p>[ 15]{style="color: #2b91af"} {</p>
<p>[ 16]{style="color: #2b91af"} [VoidDelegate]{style="color: teal"} myClosure = [delegate]{style="color: blue"}</p>
<p>[ 17]{style="color: #2b91af"} {</p>
<p>[ 18]{style="color: #2b91af"} [//Capture outer variable]{style="color: green"}</p>
<p>[ 19]{style="color: #2b91af"} [Console]{style="color: teal"}.WriteLine(i);</p>
<p>[ 20]{style="color: #2b91af"} };</p>
<p>[ 21]{style="color: #2b91af"} closures.Add(myClosure);</p>
<p>[ 22]{style="color: #2b91af"} }</p>
<p>[ 23]{style="color: #2b91af"} </p>
<p>[ 24]{style="color: #2b91af"} [foreach]{style="color: blue"} ([VoidDelegate]{style="color: teal"} closure [in]{style="color: blue"} closures)</p>
<p>[ 25]{style="color: #2b91af"} {</p>
<p>[ 26]{style="color: #2b91af"} closure();</p>
<p>[ 27]{style="color: #2b91af"} }</p>
<p>[ 28]{style="color: #2b91af"} [Console]{style="color: teal"}.ReadKey();</p>
<p>[ 29]{style="color: #2b91af"} }</p>
<p>[ 30]{style="color: #2b91af"} }</p>
<p>Contrast with the output of this Ruby program:</p>
<p>closures = Array.new()</p>
<p>#Create a bunch of closures<br>
10.times { | i |<br>
myClosure = lambda {</p>
<p>#Capture outer variable<br>
puts(i)<br>
}<br>
closures.push(myClosure)<br>
}</p>
<p>closures.each { | myClosure |<br>
myClosure.call()<br>
}
:::</p>The Myth of Elite Programmer Employment2006-08-20T09:24:00-10:002006-08-20T09:24:00-10:00larrytag:knowing.net,2006-08-20:/posts/2006/08/the-myth-of-elite-programmer-employment/<p>James Robertson, advocating that people give 1-3 elite Smalltalkers a chance to take on a project that would take "commodity" programmers 6 months, says "Which will cost you more: Those two "cowboys", or the 10 "commodity" developers? Heck, let's say you find yourself 2 really good people, and pay them …</p><p>James Robertson, advocating that people give 1-3 elite Smalltalkers a chance to take on a project that would take "commodity" programmers 6 months, says "Which will cost you more: Those two "cowboys", or the 10 "commodity" developers? Heck, let's say you find yourself 2 really good people, and pay them each \<span class="math">\(175k per year, as opposed to paying each of the 10 commodity guys \\)</span>80k?"</p>
<p>Let me tell you a story: there's this programmer -- let's call him Gary -- who architected a system for a startup company and wrote some of the foundational code. Six years later, the company calls up Gary and says "We're doing \$100M a year in transactions on the system and, without significant alteration of your initial architecture, can handle somewhere in excess of 10,000 simultaneous users. We're interested in 'taking things to the next level' and are looking for someone to help us architect it and write some of the foundational code."</p>
<p>So Gary, who is generally thankful that he can get by making a modest living as an independent contractor, thinks "gee, here's a situation where I am justified in charging an 'elite' consulting rate. <em>Whatever</em> I charge these guys, they will have <em>every reason</em> in the world to pay it." So let's say that <em>X</em> equals the rate that Gary charged these guys six years ago. What's your guess as to the rate at which the company walked away from negotiating a 5-month contact with Gary?</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>$170M FBI Software Failure: 730KLoc * $232.88 / line2006-08-20T08:58:00-10:002006-08-20T08:58:00-10:00larrytag:knowing.net,2006-08-20:/posts/2006/08/170m-fbi-software-failure-730kloc-23288-line/<p><a href="http://www.washingtonpost.com/wp-dyn/content/article/2006/08/17/AR2006081701485.html?noredirect=on">\<span class="math">\(170,000,000 / 730,000 = \\)</span>232.88</a>.</p>
<p>Choice "incompetent software project management" quotes:</p>
<p>"[T]he FBI made a fateful choice: It wanted SAIC to build the new software system from scratch rather than modifying commercially available, off-the-shelf software. Later, the company would say the FBI made that decision independently; FBI …</p><p><a href="http://www.washingtonpost.com/wp-dyn/content/article/2006/08/17/AR2006081701485.html?noredirect=on">\<span class="math">\(170,000,000 / 730,000 = \\)</span>232.88</a>.</p>
<p>Choice "incompetent software project management" quotes:</p>
<p>"[T]he FBI made a fateful choice: It wanted SAIC to build the new software system from scratch rather than modifying commercially available, off-the-shelf software. Later, the company would say the FBI made that decision independently; FBI officials countered that SAIC pushed them into it...."</p>
<p>"Most important, the FBI planned to launch the new software all at once, with minimal testing beforehand...."</p>
<p>"[T]he FBI had few people in house with the expertise to develop the kind of sophisticated information technology systems that it would need. As a result, the agency had been turning increasingly to private contractors for help....In essence, the FBI has left the task of defining and identifying its essential operational processes and its IT concept of operations to outsiders."</p>
<p>"[T]he SAIC software was incomplete, inadequate and so poorly designed that it would be essentially unusable under real-world conditions. Even in rudimentary tests, the system did not comply with basic requirements."</p>
<p>"[SAIC] kept 200 programmers on staff doing "make work," he said, when a couple of dozen would have been enough. The company's attitude was that "it's other people's money, so they'll burn it every which way they want to," he said."</p>
<p>"[SAIC] Executive Vice President Arnold Punaro submitted testimony to Congress .... FBI officials, he said, took a "trial and error, 'we will know it when we see it' approach to development." " <em>[Changing user requirements on a \$170M project? Heaven forfend! -- Larry]</em></p>
<hr>
<p>Daniel Guttman captures the problem: "[T]he legal fiction is that the government knows what it's doing and is capable of taking charge. The contractors are taking advantage of that legal fiction." But thank God <em>that's</em> over: "Azmi and other FBI officials say Sentinel is designed to be everything VCF was not, with specific requirements, regular milestones and aggressive oversight."</p>
<p>I feel so much better now.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Java May Get Closures: Functional Programming on the March!2006-08-20T08:34:00-10:002006-08-20T08:34:00-10:00larrytag:knowing.net,2006-08-20:/posts/2006/08/java-may-get-closures-functional-programming-on-the-march/<p>Gilad Bracha has a substantive proposal to add closures to Java (for those familiar with .NET but not Java, this is generally equivalent to adding delegates and C# 2.0's anonymous delegates). The proposal has slightly cleaner syntax than what is in C# but I believe would reprise an issue …</p><p>Gilad Bracha has a substantive proposal to add closures to Java (for those familiar with .NET but not Java, this is generally equivalent to adding delegates and C# 2.0's anonymous delegates). The proposal has slightly cleaner syntax than what is in C# but I believe would reprise an issue that C# has, in that "captured outer variables" are shallow copies. This means that when an outer object with reference semantics is closed over, you can end up creating a very thread-hostile functional data structure. Monitor-based thread safety, already a very weak model, is weakened further by the proliferation of implicit objects (i.e., closures that use reference semantics on closed-over outer variables).</p>
<p>Not that any design decision that creates implicit deep copies would be without its issues! Adding closures to the JVM/CLR object model is, like generics, a tough nut to crack. One of the problems I had with the addition of generics to the CLR is that they were absorbed into the standard Common Type System before they had a chance to play out in the real world. One of the great advantages that the JVM and CLR had in their early days was that they very pragmatically reflected lessons learned from real-world uses of languages like C++ (e.g., string representation issues), Delphi (e.g., component models), and Smalltalk (e.g., 'everything is an object'). Necessarily, today's VM advances are less road-driven. While there's nothing wrong with that, I think that standardization of such advances and their implementations should be more cautious.</p>
<p>Update: See my post for an example of the surprising behavior resulting from C#'s design.</p>Eric Sink Says Nice Things About Me2006-08-18T10:25:00-10:002006-08-18T10:25:00-10:00larrytag:knowing.net,2006-08-18:/posts/2006/08/eric-sink-says-nice-things-about-me/<p>Eric Sink, who among other things wrote "The Business of Software," <a href="https://ericsink.com/entries/LarryO.html">says</a> I seem to "really understand both technology and business at a deep level." Me? Understand <em>business</em>? Lord, no! The <em>industry</em>, I pay attention to, but I'm an <em>insanely</em> bad businessman. I've flirted with personal bankruptcy, been a VP …</p><p>Eric Sink, who among other things wrote "The Business of Software," <a href="https://ericsink.com/entries/LarryO.html">says</a> I seem to "really understand both technology and business at a deep level." Me? Understand <em>business</em>? Lord, no! The <em>industry</em>, I pay attention to, but I'm an <em>insanely</em> bad businessman. I've flirted with personal bankruptcy, been a VP at two companies that went bankrupt, and been screwed by business partners out of more than ... an amount that's so big that I can't bring myself to say it publicly ...</p>
<p>I drive a '92 Honda Civic. On the other hand, I'm savvy enough so that on a weekday, if I want a break, I can drive it to places like this:</p>
<p>this:</p>
<p>and this:</p>
<p>\<a href="http://www.knowing.net/images/XNARestrictedtoclrsafe_704C/image07.png"" atomicselection="true"></p>
<p>(P.S. Today is Hawai'i Statehood Day.)</p>Windows VPN breaks FTP?!?!?!?!2006-08-18T10:09:00-10:002006-08-18T10:09:00-10:00larrytag:knowing.net,2006-08-18:/posts/2006/08/windows-vpn-breaks-ftp/<p>It isn't just Windows LiveWriter that got broken when I added a VPN connection, it's FTP! Un-be-freakin'-lievable.</p>VPN breaks Windows LiveWriter2006-08-18T07:36:00-10:002006-08-18T07:36:00-10:00larrytag:knowing.net,2006-08-18:/posts/2006/08/vpn-breaks-windows-livewriter/<p>I hooked up to a client site via VPN yesterday and broke Windows LiveWriter. At first, it asked if I wanted to dial a connection to the VPN target. No, of course not (never mind the whole "dial" aspect"). Then, when I deleted the VPN, LiveWriter started producing a "file …</p><p>I hooked up to a client site via VPN yesterday and broke Windows LiveWriter. At first, it asked if I wanted to dial a connection to the VPN target. No, of course not (never mind the whole "dial" aspect"). Then, when I deleted the VPN, LiveWriter started producing a "file transfer error." Oh well. That's what betas are for. </p>SD Times Columnists Disagree On Ruby2006-08-17T13:16:00-10:002006-08-17T13:16:00-10:00larrytag:knowing.net,2006-08-17:/posts/2006/08/sd-times-columnists-disagree-on-ruby/<p>Allen Holub's latest Java Watch column for SD Times says that Ruby is "certainly not" the next big thing in programming languages. He says "scripting systems (I'm reluctant to call them languages) like PHP and Ruby, ... are too Wild West to be trustworthy."</p>
<p>My <em>Windows and .NET Watch</em> column for …</p><p>Allen Holub's latest Java Watch column for SD Times says that Ruby is "certainly not" the next big thing in programming languages. He says "scripting systems (I'm reluctant to call them languages) like PHP and Ruby, ... are too Wild West to be trustworthy."</p>
<p>My <em>Windows and .NET Watch</em> column for the next issue (September 1), is titled "Ruby Read" and says that, to the contrary, Ruby seems to be poised to cross the chasm into the mainstream. Meanwhile, Andrew Binstock tells me his <em>Integration Watch</em> column for the September 1st issue is also about Ruby! (I believe Andrew is bearish on Ruby.)</p>
<p>On the internal reflector, I've suggested that the three of us settle this in some form of Thunderdome: three columnists enter, one columnist leaves. Short of that, we're hoping to try to do some kind of roundtable on the subject.</p>
<p>(Incidentally, aside from his slaps at C# and Ruby, I agree with Allen's column, which basically proposes that domain-specific languages may increase in importance. And, though I haven't read his column yet, Andrew's analyses is always solid, too.)</p>
<p>(Also incidentally, my column in the current issue is a comparison of Safari and Books24x7)</p>XNA Game Studio: Return of the Demo Scene?2006-08-17T08:03:00-10:002006-08-17T08:03:00-10:00larrytag:knowing.net,2006-08-17:/posts/2006/08/xna-game-studio-return-of-the-demo-scene/<p>I'm thrilled that Microsoft is opening up game development to non-professionals. I believe that the destruction of a steady path from enthusiast to power-user to programmer was one of the great tragedies of the 1990s. But the idea that XNA will be "YouTube of video games," conflates "point videocamera at …</p><p>I'm thrilled that Microsoft is opening up game development to non-professionals. I believe that the destruction of a steady path from enthusiast to power-user to programmer was one of the great tragedies of the 1990s. But the idea that XNA will be "YouTube of video games," conflates "point videocamera at self and lip-sync," and "write videogame."</p>
<p>The hobbyist game development language, to the extent that the niche exists, is Flash. Microsoft's XAML/WPF is a heck of a run at Flash, but as far as I know, it's not going to be a part of XNA. So hobbyist developers will use, presumably, the gamut of .NET managed languages: C#, VB.NET, C++/CLI, and, I imagine, will be able to bring in at least assemblies written in other languages like IronPython, Delphi, and so forth.</p>
<p>This is my guess: XNA will appeal to people with a talent and interest in programming, who will quickly discover that gameplay design is an entirely different discipline. They'll become frustrated with that idea and search for an arena in which their programming talents shine without requiring similar investments in gameplay. The result: the return of the demo scene.</p>
<p>Demo programming is programming (generally graphics intensive) that highlights the capabilities of the underlying hardware and the talents of the programmer. Traditionally, demos have involved constraining the program to a fixed size, but XNA for the XBox 360 has the even-better advantage of evening the hardware environment. Since all XBoxes have equivalent computational and graphics power, programming graphics on them is just like "one-design" racing.</p>21,000 out of 51,400,000: Not Bad2006-08-17T07:38:00-10:002006-08-17T07:38:00-10:00larrytag:knowing.net,2006-08-17:/posts/2006/08/21000-out-of-51400000-not-bad/<p>That tail must be l-o-o-o-n-g indeed...</p>
<p>BTW, so here I am in the 99.96 percentile and my AdSense revenue is enough to buy a few lattes per month. Blogging is a marketing cost, not a direct income generator.</p>ParallelApply: Distribute Calculations Over Multicore / Processors2006-08-16T15:02:00-10:002006-08-16T15:02:00-10:00larrytag:knowing.net,2006-08-16:/posts/2006/08/parallelapply-distribute-calculations-over-multicore-processors/<p>This code applies a <strong>BackgroundFunction</strong> to elements of an <strong>IEnumerable</strong> using the <strong>ThreadPool</strong>. If you don't know what that means, it's probably not of interest to you:</p>
<p>::: {style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"}
[ 10]{style="COLOR: #2b91af"} [delegate]{style="COLOR: blue"} [void]{style="COLOR: blue"} [BackgroundFunction …</p><p>This code applies a <strong>BackgroundFunction</strong> to elements of an <strong>IEnumerable</strong> using the <strong>ThreadPool</strong>. If you don't know what that means, it's probably not of interest to you:</p>
<p>::: {style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: Courier New"}
[ 10]{style="COLOR: #2b91af"} [delegate]{style="COLOR: blue"} [void]{style="COLOR: blue"} [BackgroundFunction]{style="COLOR: teal"}([object]{style="COLOR: blue"} memberOfEnumerable);</p>
<p>[ 11]{style="COLOR: #2b91af"} </p>
<p>[ 12]{style="COLOR: #2b91af"} [class]{style="COLOR: blue"} [Program]{style="COLOR: teal"}</p>
<p>[ 13]{style="COLOR: #2b91af"} {</p>
<p>[ 14]{style="COLOR: #2b91af"} [static]{style="COLOR: blue"} [void]{style="COLOR: blue"} Main([string]{style="COLOR: blue"}[] args)</p>
<p>[ 15]{style="COLOR: #2b91af"} {</p>
<p>[ 16]{style="COLOR: #2b91af"} [int]{style="COLOR: blue"}[] nums = [new]{style="COLOR: blue"} [int]{style="COLOR: blue"}[100];</p>
<p>[ 17]{style="COLOR: #2b91af"} [for]{style="COLOR: blue"} ([int]{style="COLOR: blue"} i = 0; i \< 100; i++)</p>
<p>[ 18]{style="COLOR: #2b91af"} {</p>
<p>[ 19]{style="COLOR: #2b91af"} nums[i] = i;</p>
<p>[ 20]{style="COLOR: #2b91af"} }</p>
<p>[ 21]{style="COLOR: #2b91af"} </p>
<p>[ 22]{style="COLOR: #2b91af"} [Random]{style="COLOR: teal"} r = [new]{style="COLOR: blue"} [Random]{style="COLOR: teal"}();</p>
<p>[ 23]{style="COLOR: #2b91af"} [BackgroundFunction]{style="COLOR: teal"} func = [delegate]{style="COLOR: blue"}([object]{style="COLOR: blue"} memberOfEnumerable)</p>
<p>[ 24]{style="COLOR: #2b91af"} {</p>
<p>[ 25]{style="COLOR: #2b91af"} [int]{style="COLOR: blue"} i = ([int]{style="COLOR: blue"}) memberOfEnumerable;</p>
<p>[ 26]{style="COLOR: #2b91af"} [Thread]{style="COLOR: teal"}.Sleep(r.Next(1000));</p>
<p>[ 27]{style="COLOR: #2b91af"} [Console]{style="COLOR: teal"}.WriteLine(i);</p>
<p>[ 28]{style="COLOR: #2b91af"} };</p>
<p>[ 29]{style="COLOR: #2b91af"} </p>
<p>[ 30]{style="COLOR: #2b91af"} ParallelApply(nums, func);</p>
<p>[ 31]{style="COLOR: #2b91af"} [Console]{style="COLOR: teal"}.ReadKey();</p>
<p>[ 32]{style="COLOR: #2b91af"} }</p>
<p>[ 33]{style="COLOR: #2b91af"} </p>
<p>[ 34]{style="COLOR: #2b91af"} [static]{style="COLOR: blue"} [void]{style="COLOR: blue"} ParallelApply([IEnumerable]{style="COLOR: teal"} enumerable, [BackgroundFunction]{style="COLOR: teal"} function)</p>
<p>[ 35]{style="COLOR: #2b91af"} {</p>
<p>[ 36]{style="COLOR: #2b91af"} [ManualResetEvent]{style="COLOR: teal"} done = [new]{style="COLOR: blue"} [ManualResetEvent]{style="COLOR: teal"}([false]{style="COLOR: blue"});</p>
<p>[ 37]{style="COLOR: #2b91af"} [int]{style="COLOR: blue"} doneRefCount = 1;</p>
<p>[ 38]{style="COLOR: #2b91af"} </p>
<p>[ 39]{style="COLOR: #2b91af"} [BackgroundFunction]{style="COLOR: teal"} wrappedBlock = [delegate]{style="COLOR: blue"}([object]{style="COLOR: blue"} state)</p>
<p>[ 40]{style="COLOR: #2b91af"} {</p>
<p>[ 41]{style="COLOR: #2b91af"} function.DynamicInvoke(state);</p>
<p>[ 42]{style="COLOR: #2b91af"} [int]{style="COLOR: blue"} isDone = [Interlocked]{style="COLOR: teal"}.Decrement([ref]{style="COLOR: blue"} doneRefCount);</p>
<p>[ 43]{style="COLOR: #2b91af"} [if]{style="COLOR: blue"} (isDone == 0)</p>
<p>[ 44]{style="COLOR: #2b91af"} {</p>
<p>[ 45]{style="COLOR: #2b91af"} done.Set();</p>
<p>[ 46]{style="COLOR: #2b91af"} }</p>
<p>[ 47]{style="COLOR: #2b91af"} };</p>
<p>[ 48]{style="COLOR: #2b91af"} </p>
<p>[ 49]{style="COLOR: #2b91af"} [WaitCallback]{style="COLOR: teal"} callback = [new]{style="COLOR: blue"} [WaitCallback]{style="COLOR: teal"}(wrappedBlock);</p>
<p>[ 50]{style="COLOR: #2b91af"} [foreach]{style="COLOR: blue"} ([object]{style="COLOR: blue"} o [in]{style="COLOR: blue"} enumerable)</p>
<p>[ 51]{style="COLOR: #2b91af"} {</p>
<p>[ 52]{style="COLOR: #2b91af"} [Interlocked]{style="COLOR: teal"}.Increment([ref]{style="COLOR: blue"} doneRefCount);</p>
<p>[ 53]{style="COLOR: #2b91af"} [ThreadPool]{style="COLOR: teal"}.QueueUserWorkItem(callback, o);</p>
<p>[ 54]{style="COLOR: #2b91af"} }</p>
<p>[ 55]{style="COLOR: #2b91af"} [int]{style="COLOR: blue"} isDoneLate = [Interlocked]{style="COLOR: teal"}.Decrement([ref]{style="COLOR: blue"} doneRefCount);</p>
<p>[ 56]{style="COLOR: #2b91af"} [if]{style="COLOR: blue"} (isDoneLate == 0)</p>
<p>[ 57]{style="COLOR: #2b91af"} {</p>
<p>[ 58]{style="COLOR: #2b91af"} done.Set();</p>
<p>[ 59]{style="COLOR: #2b91af"} }</p>
<p>[ 60]{style="COLOR: #2b91af"} done.WaitOne();</p>
<p>[ 61]{style="COLOR: #2b91af"} }</p>
<p>[ 62]{style="COLOR: #2b91af"} }
:::</p>10 Years Since I Became An Independent2006-08-14T17:27:00-10:002006-08-14T17:27:00-10:00larrytag:knowing.net,2006-08-14:/posts/2006/08/10-years-since-i-became-an-independent/<p>Ten years ago today I quit Miller Freeman, where I was an Editorial Director of the Software Development Unit (that is, a publishing unit that produced magazines on developing software) in order to launch 1711 Software, a company developing middleware for what would become known as massive multiuser role-playing-games.</p>
<p>Yes …</p><p>Ten years ago today I quit Miller Freeman, where I was an Editorial Director of the Software Development Unit (that is, a publishing unit that produced magazines on developing software) in order to launch 1711 Software, a company developing middleware for what would become known as massive multiuser role-playing-games.</p>
<p>Yes, I'm the guy who started a dot-com company in the Bay Area in 1996 and not only didn't get rich, but came within a hair's breadth of bankruptcy.</p>A Little Stymied2006-08-14T16:36:00-10:002006-08-14T16:36:00-10:00larrytag:knowing.net,2006-08-14:/posts/2006/08/a-little-stymied/<p>Unfortunately, I can't figure out how to access the entirety of a blog post within my LiveWriter plugin. It's easy enough to <em>embed</em> an hReview in a post, but it's a harder matter to actually create a template. As far as I can tell, I can only edit the contents …</p><p>Unfortunately, I can't figure out how to access the entirety of a blog post within my LiveWriter plugin. It's easy enough to <em>embed</em> an hReview in a post, but it's a harder matter to actually create a template. As far as I can tell, I can only edit the contents of my generated hReview in the properties pane. That's not acceptable: I want to be able to use the nice editing pane of LiveWriter to edit the code that I generate. Or, for my purposes equivalently, I want to be able to scoop up all the content of an about-to-be-posted blog entry and reformat it (embedding the hReview CSS styles). I can't see a way to do that with the LiveWriter SDK.</p>hReview LiveWriter Plugin: Piece of Cake2006-08-14T10:53:00-10:002006-08-14T10:53:00-10:00larrytag:knowing.net,2006-08-14:/posts/2006/08/hreview-livewriter-plugin-piece-of-cake/<p>::: {#3FBB6C13-79A0-40b8-8A3A-160DEA9C52F3:02883555-b267-4c2f-90d4-6f77fe9f7526 .wlWriterEditableSmartContent contenteditable="false" style="margin: 0px; padding: 0px; display: inline; float: none;"}
::: {.hreview}
8/14/2006 10:48:27 AM by [[Larry O'Brien]{.fn}]{.reviewer .vcard}</p>
<p>::: {.item .fn}
LiveWriter API
:::</p>
<p>[]{.type style="display: none;"} </p>
<blockquote>
<p>????? I take back my criticism. It is easy to write a plugin. (N.B …</p></blockquote><p>::: {#3FBB6C13-79A0-40b8-8A3A-160DEA9C52F3:02883555-b267-4c2f-90d4-6f77fe9f7526 .wlWriterEditableSmartContent contenteditable="false" style="margin: 0px; padding: 0px; display: inline; float: none;"}
::: {.hreview}
8/14/2006 10:48:27 AM by [[Larry O'Brien]{.fn}]{.reviewer .vcard}</p>
<p>::: {.item .fn}
LiveWriter API
:::</p>
<p>[]{.type style="display: none;"} </p>
<blockquote>
<p>????? I take back my criticism. It is easy to write a plugin. (N.B.: This post is hReview microformatted.) I have to work through the editing lifecycle, refactor the code generation, and set up a configuration handler, but I could probably deliver this plugin in a day. Anyone interested? (Note to self: add ping to hReview discovery service.... Note to self: write an hReview discovery service...)</p>
</blockquote>
<p>[0.3]{.version style="display: none;"}
:::
:::</p>Windows Live Writer: Nice Editor, Somewhat Limited API2006-08-14T09:39:00-10:002006-08-14T09:39:00-10:00larrytag:knowing.net,2006-08-14:/posts/2006/08/windows-live-writer-nice-editor-somewhat-limited-api/<p>I downloaded Windows Live Writer last night. It's definitely superior to writing in a browser window and setup -- generally a challenge with offline blog editors -- was okay (it didn't quite diagnose that I used <a href="http://www.dasblog.net">dasBlog</a>, but once I chose it manually, it worked out well. And configuring the FTP upload …</p><p>I downloaded Windows Live Writer last night. It's definitely superior to writing in a browser window and setup -- generally a challenge with offline blog editors -- was okay (it didn't quite diagnose that I used <a href="http://www.dasblog.net">dasBlog</a>, but once I chose it manually, it worked out well. And configuring the FTP upload of images took me two tries.) Hmmm... Don't use the Date/Time property if you're writing for <a href="http://www.dasblog.net">dasBlog</a>.</p>
<p>I also downloaded the SDK. I had two very specific scenarios in mind: scheduling blog posts (that is, write it now, have it upload at a later time/date) and an hReview microformat template. My take is that the API doesn't make either trivial. For scheduling, what you'd want is to hook the posting event; instead, with the API I think you'd have to create an out-of-process local proxy (so, essentially, no help from the API on that one). On the hReview template, you can use the API to open the editor with existing content (e.g., the hReview tags, which are implemented in CSS), so you'd need to... Stand by...</p>XNA Game Studio Express2006-08-13T20:10:00-10:002006-08-13T20:10:00-10:00larrytag:knowing.net,2006-08-13:/posts/2006/08/xna-game-studio-express/<p>Microsoft has announced (well, not announced, but Gamasutra just spilled the beans) <a href="http://www.gamasutra.com/php-bin/news_index.php%3fstory%3d10458">XNA Game Studio Express</a>, a free product which will allow independents and studios to write games for the XBox 360. It will actually cost \$99 to be able to deploy your games to the 360.</p>
<p>Oh, hey and …</p><p>Microsoft has announced (well, not announced, but Gamasutra just spilled the beans) <a href="http://www.gamasutra.com/php-bin/news_index.php%3fstory%3d10458">XNA Game Studio Express</a>, a free product which will allow independents and studios to write games for the XBox 360. It will actually cost \$99 to be able to deploy your games to the 360.</p>
<p>Oh, hey and it's official that MS will <a href="https://com.com/results?q=news">ship a HD-DVD add-on the 360</a> for the holiday season.</p>
<p>Update: Official MSDN link on <a href="https://docs.microsoft.com/en-us/previous-versions/windows/apps/hh452744(v=win.10)">XNA Game Studio</a>. Release slated for August 30.</p>Test from Windows Live Writer2006-08-13T18:40:00-10:002006-08-13T18:40:00-10:00larrytag:knowing.net,2006-08-13:/posts/2006/08/test-from-windows-live-writer/<p>Test. Image upload working?</p>Tufte's "Beautiful Evidence" Looks Great, Lacks Filling2006-08-13T14:30:00-10:002006-08-13T14:30:00-10:00larrytag:knowing.net,2006-08-13:/posts/2006/08/tuftes-beautiful-evidence-looks-great-lacks-filling/<p>::: {.hreview}
[0.2]{.version style="display: none;"} </p>
<h2 class="summary" id="tuftes-beautiful-evidence-looks-great-lacks-filling">Tufte's "Beautiful Evidence" Looks Great, Lacks Filling</h2>
<p>Aug 13, 2006 by [Larry O'Brien]{.reviewer .fn} <a class="item url fn" href="https://www.edwardtufte.com/tufte/books_be">"Beautiful Evidence," by Edward Tufte</a> </p>
<blockquote>
<p>????? There's a sad irony in this book: Tufte is the guru of information density but his latest book contributes little to his previous …</p></blockquote><p>::: {.hreview}
[0.2]{.version style="display: none;"} </p>
<h2 class="summary" id="tuftes-beautiful-evidence-looks-great-lacks-filling">Tufte's "Beautiful Evidence" Looks Great, Lacks Filling</h2>
<p>Aug 13, 2006 by [Larry O'Brien]{.reviewer .fn} <a class="item url fn" href="https://www.edwardtufte.com/tufte/books_be">"Beautiful Evidence," by Edward Tufte</a> </p>
<blockquote>
<p>????? There's a sad irony in this book: Tufte is the guru of information density but his latest book contributes little to his previous work, focusing on topics that he's covered before (chartjunk, the cognitive style of PowerPoint, sparklines) while revisiting examples that are wearing thin through use (Galileo's in-line drawings of Saturn's rings and Jupiter's moons, Minard's chart-map of Napoleon's invasion of Russia, bad presentations from NASA regarding shuttle safety). Then, this book ends with an essay on pedestal sculptures, the point of which I cannot begin to fathom (Tufte himself is a sculptor and a cynic might feel that the essay's point is to provide an excuse for plates of Tufte's work). Of course, the book itself is beautifully produced and filled with attractive images, and I can imagine it sitting as a signifier of taste and intellect on many a coffee-table. But his previous efforts (particularly the truly classic <a href="https://www.amazon.com/exec/obidos/ASIN/0961392142/thinkinginnet-20">Visual Display of Quantitative Information</a> ) were not just attractive, but inspiring and practical. I suppose those not already convinced that PowerPoint's bulletpoints are perverse might be swayed by Tufte's extended essay here (which is, if not identical to, a trivial rehash of his essay "<a href="https://www.amazon.com/exec/obidos/ASIN/0961392150/thinkinginnet-20">The Cognitive Style of PowerPoint</a>"). Buy <a href="https://www.amazon.com/exec/obidos/ASIN/0961392177/thinkinginnet-20">Beautiful Evidence</a> from Amazon.
:::</p>
</blockquote>
<p>This entry is <a href="http://microformats.org/wiki/hReview/">hReview</a> microformatted.</p>Multicore Game Development2006-08-12T08:21:00-10:002006-08-12T08:21:00-10:00larrytag:knowing.net,2006-08-12:/posts/2006/08/multicore-game-development/<p>An anonymous commenter says that recent issues of <em>Game Developer Magazine</em> (*cough* founding editor *cough*) discussed multicore game programming and that, rather than divvying up logical areas like AI and physics, what today's developers are concentrating on is speeding up the world-render pipeline. That makes sense, given the graphical emphasis …</p><p>An anonymous commenter says that recent issues of <em>Game Developer Magazine</em> (*cough* founding editor *cough*) discussed multicore game programming and that, rather than divvying up logical areas like AI and physics, what today's developers are concentrating on is speeding up the world-render pipeline. That makes sense, given the graphical emphasis of most performance-related games. It also makes the difficulty of parallelism all that harder for the programmers, since there are so many dependencies in the data being shuttled between cores and the GPU. I guess my emphasis on things other than the graphical flash reveals what I <em>wish</em> game developers would work on, not the conservative "more triangles, more enemies, bigger levels" that is the truth of too much game design. </p>Happy Birthday, PC!2006-08-11T22:00:00-10:002006-08-11T22:00:00-10:00larrytag:knowing.net,2006-08-11:/posts/2006/08/happy-birthday-pc/<p><img alt="" height="152" src="C:\Documents%20and%20Settings\Larry\Desktop\ibm_pc.jpg" width="131"> On this day, 25 years ago, IBM launched the Personal Computer for \$1,565 in select Computerland stores and Sears & Roebucks. This led to significant things.</p>Jell-o Mold Widget Jiggles On Earthquake Reports2006-08-11T13:30:00-10:002006-08-11T13:30:00-10:00larrytag:knowing.net,2006-08-11:/posts/2006/08/jell-o-mold-widget-jiggles-on-earthquake-reports/<p>I've pretty much given up on the whole Konfabulator / Sidebar widget thing, but I laughed out loud when I saw this:</p>Missed Opportunity: Visual Studio Express Might Have Been Shipped with Vista2006-08-11T11:36:00-10:002006-08-11T11:36:00-10:00larrytag:knowing.net,2006-08-11:/posts/2006/08/missed-opportunity-visual-studio-express-might-have-been-shipped-with-vista/<p>This one just shot through the blogosphere: the idea that VS Express might have been bundled with Vista. Although I do not believe that VB.net is actually a "beginner's" language, that there could have been such a powerful environment broadly available is a sorely missed opportunity.</p>Missed Opportunity: Visual Studio Express Might Have Been Shipped with Vista2006-08-11T11:36:00-10:002006-08-11T11:36:00-10:00larrytag:knowing.net,2006-08-11:/posts/2006/08/missed-opportunity-visual-studio-express-might-have-been-shipped-with-vista-2/<p>This one just shot through the blogosphere: the idea that VS Express might have been bundled with Vista. Although I do not believe that VB.net is actually a "beginner's" language, that there could have been such a powerful environment broadly available is a sorely missed opportunity.</p>Multicore Machines and Games2006-08-11T09:27:00-10:002006-08-11T09:27:00-10:00larrytag:knowing.net,2006-08-11:/posts/2006/08/multicore-machines-and-games/<p>I've abused Jeff Atwood's <a href="https://blog.codinghorror.com/quad-core-desktops-and-diminishing-returns/">comments section</a> enough, but I want to continue ranting about multicore machines.</p>
<p>One of the themes in his comment section is that games don't speed up on multicore machines. This is largely true. Jeff points out, correctly, that most games are video-processor bound and not CPU-bound …</p><p>I've abused Jeff Atwood's <a href="https://blog.codinghorror.com/quad-core-desktops-and-diminishing-returns/">comments section</a> enough, but I want to continue ranting about multicore machines.</p>
<p>One of the themes in his comment section is that games don't speed up on multicore machines. This is largely true. Jeff points out, correctly, that most games are video-processor bound and not CPU-bound and that if you want higher framerates, invest in a newer videoboard, not a dual-core system. Very true.</p>
<p>Additionally, he doesn't mention that the large majority of games are not only not multithreaded, they are aggressively serial. Virtually all games spend the vast majority of their time in a loop that looks very similar to:<br>
</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="k">while</span><span class="ss">(</span><span class="nv">running</span><span class="ss">)</span>{
<span class="w"> </span><span class="nv">UpdateWorld</span><span class="ss">()</span><span class="c1">;</span>
<span class="w"> </span><span class="nv">RenderWorld</span><span class="ss">()</span><span class="c1">; //CPU: CalculateVisible(), GPU: DrawVisible()</span>
<span class="w"> </span>}
</code></pre></div>
<p>That's why framerates vary from machine to machine and framerates matter to gameplay: your framerate is also your input rate, your physics rate, your AI rate, etc.</p>
<p>That gameloop has made absolute sense until the multicore era: threading on a single processor can only provide the <em>illusion</em> of increased performance (aside from IRQ interrupt-related situations) while it introduces problems of synchronization.</p>
<p>Movement towards a concurrent model, where (conceptually) the game runs like:</p>
<p>CPU1: UpdateWorld() -> CPU2: UpdatePhysics(); CPU3: UpdateAI();<br>
CPU4: CalculateVisible() -> GPU: DrawVisible()</p>
<p>has been slow, because other than AI and things like economic models, pretty much everything else in a game is tightly coupled to the rendering pipeline. So to do a concurrent game, you <em>will</em> dance with all of the famously hard issues of multithreading (both logical problems like races and deadlocks, and hardware problems like resource contention).</p>
<p>Even on the XBox 360, which has multiple cores, I believe that none of the launch games utilized more than one: I've heard that Geometry Wars (an arcade game) was the first multicore game for the XBox 360. I believe that the first wave of concurrent games will be coming this holiday season, with Call of Duty 3 (I know is multicore) and maybe Gears of War (?). The interesting thing is that commercial game design is sadly a very conservative area: it's basically "make a sequel to the previous hit," so the first concurent games will apply all the new horsepower to evolve things like AI and physics engines that today are based on minuscule CPU budgets (say, 10%). So I think it will take several generations before those engines "grow up" to effectively consume all of the available horsepower, even on (just) multicore consoles, much less take advantage of the manycore era as it hits.</p>
<p>There's an irony, though: in a very real sense, gaming is already well into the concurrent era. First, performant games expect a system with two chips: a CPU and a GPU. GPUs are every bit (heh) as complex as CPUs and today have 10\^8 transistors. Second, and even more interesting, GPUs today already are beyond the "multi-" level of concurrency (2-4 concurrent operations) and well into the "many-" level. For instance, my graphics card has 16 "pipelines" for calculating pixels. For several hundred dollars, I could add a second card, or buy a higher end board with 24 more-capable pipelines. Meanwhile, my laptops have far fewer pipelines.</p>
<p><strong>GPUs today anticipate the chaos coming to desktops tomorrow</strong>: the market has everywhere from 1 low-capacity shader pipeline to (say) 24 high-capacity pipelines. This is exactly what the situation will be with desktops in 4-5 Moore's generations. And if you look at how radically different a modern GPU is compared to a VGA graphics card, that's how radically different the whole dang box is going to be.</p>
<p>A final point: the only way the game industry can deal with the complexity is to rely on a software abstraction layer (DirectX or OpenGL); many rely on multiple abstraction layers (licensed game engines). The implication is that there will be a similar reliance in the manycore CPU era. And, fascinatingly, many in the game industry <em>are</em> switching to the use of specialized shader languages. These are typically C-like at the gross level (curly brackets and semicolons) but up close have a bit of a scripting language feel: implicit typing, restricted access semantics, etc. This is yet another piece of evidence that the tokens chosen by a language designer are not trivial to the ultimate acceptance of the language.</p>My Colleague Roland Racko Who Runs The Website Voicewizardcom Warns Me That I May B2006-08-11T07:16:00-10:002006-08-11T07:16:00-10:00larrytag:knowing.net,2006-08-11:/posts/2006/08/my-colleague-roland-racko-who-runs-the-website-voicewizardcom-warns-me-that-i-may-b/<p>My colleague Roland Racko, who runs the website <a href="http://www.voicewizard.com/">voicewizard.com</a>, warns me that I may be prematurely enthusiastic about Dragon's capabilities. I've dictated this blog entry on my mobile device, an Axim PDA, whether the transcription works, we'll have to see. [<strong>Note: It</strong> <strong>misspelled Axim and missed "to see"]</strong> </p>Drools (Java-based inference engine) ported to .NET2006-08-10T22:00:00-10:002006-08-10T22:00:00-10:00larrytag:knowing.net,2006-08-10:/posts/2006/08/drools-java-based-inference-engine-ported-to-net/<p>Drools.NET is a port of the Drools library to .NET. I have a bg, big architectural decision coming up for a client and I am debating about whether to tackle the issue with an inference engine or a scripting language. So I've been looking at Drools pretty closely. It's …</p><p>Drools.NET is a port of the Drools library to .NET. I have a bg, big architectural decision coming up for a client and I am debating about whether to tackle the issue with an inference engine or a scripting language. So I've been looking at Drools pretty closely. It's okay. I wouldn't put it in the same league as ILog JRules, but the price is right and it seems to have momentum.</p>
<p>In the .NET front, I've been told there's a Rete-based inference engine inside BizTalk (?), but I never followed up on that. Another tool is mTuitive's xPert Authoring Environment. More to check out....</p>Blown Away by NaturallySpeaking2006-08-10T09:15:00-10:002006-08-10T09:15:00-10:00larrytag:knowing.net,2006-08-10:/posts/2006/08/blown-away-by-naturallyspeaking/<p>Against my better judgment I bought <a href="https://www.amazon.com/exec/obidos/ASIN/B000H2049I/thinkinginnet-20">Dragon NaturallySpeaking 9</a> from Amazon. Over the years I've tried lots of dictation software and have been uniformly disappointed. The new NaturallySpeaking says that it achieves a high level of accuracy out of the box without extensive user training. Many people say that "Gee …</p><p>Against my better judgment I bought <a href="https://www.amazon.com/exec/obidos/ASIN/B000H2049I/thinkinginnet-20">Dragon NaturallySpeaking 9</a> from Amazon. Over the years I've tried lots of dictation software and have been uniformly disappointed. The new NaturallySpeaking says that it achieves a high level of accuracy out of the box without extensive user training. Many people say that "Gee, if you just invest the time in training, a few weeks or so," the voice accuracy a level which is very practical but I've never had that patience.</p>
<p>Since being able to work with dictation would be such an incredible boon to me as a writer I bought the latest version of NaturallySpeaking. I also wanted to show exactly what NaturallySpeaking gave for an out of box experience and so I recorded screencasts of my very initial dictation with NaturallySpeaking. You can judge for yourself.</p>
<p>Oh, and naturally, I dictated this blog entry.</p>Joins: COmega-style Concurrency for All .NET Languages2006-08-10T07:00:00-10:002006-08-10T07:00:00-10:00larrytag:knowing.net,2006-08-10:/posts/2006/08/joins-comega-style-concurrency-for-all-net-languages/<p>I quite liked COmega's model for concurrency. Joins is a library from Microsoft that implements the same model using .NET 2.0 generics. I haven't played with it yet, but it's definitely in the queue.</p>Learning WPF in 5 Days2006-08-10T04:00:00-10:002006-08-10T04:00:00-10:00larrytag:knowing.net,2006-08-10:/posts/2006/08/learning-wpf-in-5-days/<p>I like Karsten Januszweski's 5-day tutorial on WPF (via \<a href="http://www.knowing.net/ct.ashx?id=efab0325-bace-41c3-b0bf-50441130484f&url=http%3a%2f%2ffeeds.feedburner.com%2f%7er%2fAContinuousLearnersWeblog%2f%7e3%2f10102168%2flearn-wpf-in-5-days.html"" target=_blank rel="noopener noreferrer">Steve Pietrek). Instead of writing something himself, he's structured advice on …</p><p>I like Karsten Januszweski's 5-day tutorial on WPF (via \<a href="http://www.knowing.net/ct.ashx?id=efab0325-bace-41c3-b0bf-50441130484f&url=http%3a%2f%2ffeeds.feedburner.com%2f%7er%2fAContinuousLearnersWeblog%2f%7e3%2f10102168%2flearn-wpf-in-5-days.html"" target=_blank rel="noopener noreferrer">Steve Pietrek). Instead of writing something himself, he's structured advice on Internet-available resources (videos, tutorials, etc.) That's a very helpful way to restructure available content; I feel I should do something similar (if only there was something that I knew...)</p>Panorama Stitching: A Solved Problem2006-08-10T01:00:00-10:002006-08-10T01:00:00-10:00larrytag:knowing.net,2006-08-10:/posts/2006/08/panorama-stitching-a-solved-problem/<p>Everyone's buzzing about Photosynth, Microsoft's impressive technology that stitches together photographs and presents them in a 3-D space. However, all that is available today is a video.</p>
<p>In the meantime, though, it turns out that automatically stitching together photos to create panoramas appears to be a solved problem. \<a href …</p><p>Everyone's buzzing about Photosynth, Microsoft's impressive technology that stitches together photographs and presents them in a 3-D space. However, all that is available today is a video.</p>
<p>In the meantime, though, it turns out that automatically stitching together photos to create panoramas appears to be a solved problem. \<a href="http://www.knowing.net/ct.ashx?id=d0920e82-c38f-4d4b-95ef-810e94270b2d&url=http%3a%2f%2fwww.cs.ubc.ca%2f%7embrown%2fautostitch%2fautostitch.html"" target=_blank rel="noopener noreferrer">Autostitch is freely downloadable and does a great job.</p>Compress Wikipedia, Win 20,000 Euros2006-08-09T22:00:00-10:002006-08-09T22:00:00-10:00larrytag:knowing.net,2006-08-09:/posts/2006/08/compress-wikipedia-win-20000-euros/<p>Brilliant! The Hutter Prize for Lossless Compression (<a href="http://www.hutter1.net/prize.htm">http://www.hutter1.net/prize.htm</a>) takes as its challenge the task of compressing 100MB of Wikipedia text into the pre-competition best of \~17MB. The idea is that a chunk of Wikipedia text that big has characteristics relevant to compression that go beyond …</p><p>Brilliant! The Hutter Prize for Lossless Compression (<a href="http://www.hutter1.net/prize.htm">http://www.hutter1.net/prize.htm</a>) takes as its challenge the task of compressing 100MB of Wikipedia text into the pre-competition best of \~17MB. The idea is that a chunk of Wikipedia text that big has characteristics relevant to compression that go beyond statistical analysis (i.e., "meaning"). The deliverable must be entirely self-contained, but it can be near 17MB in size in order to get in the money, so that's a lot of space for generative code (there are no restrictions on runtime speed or memory consumption).</p>Jeff Atwood pooh-poohs quad core systems. I disagree.2006-08-09T13:28:00-10:002006-08-09T13:28:00-10:00larrytag:knowing.net,2006-08-09:/posts/2006/08/jeff-atwood-pooh-poohs-quad-core-systems-i-disagree/<p>Jeff Atwood, of <a href="https://blog.codinghorror.com/quad-core-desktops-and-diminishing-returns/">Coding Horror</a>, says that "the benefits of moving to quad core and beyond are less clear." He produces some numbers to reveal that many of today's processor-intensive applications (media, gaming, databases, etc.) are not multithreaded and, therefore, do not run significantly faster on multicore machines. He observes …</p><p>Jeff Atwood, of <a href="https://blog.codinghorror.com/quad-core-desktops-and-diminishing-returns/">Coding Horror</a>, says that "the benefits of moving to quad core and beyond are less clear." He produces some numbers to reveal that many of today's processor-intensive applications (media, gaming, databases, etc.) are not multithreaded and, therefore, do not run significantly faster on multicore machines. He observes that the infrastructure (OS, disk subsystem, etc.) can automatically get a significant benefit from a second core but then might have a hard time finding stuff to keep it busy with 4 cores and, by the time we get to 8, there will be little "free lunch" performance gain from increasing cores.</p>
<p>So far, he's dead on: your 2005 software suite will not run much faster on your 2012 32-core Dual-Dos-Double-Zwei-Core-Two chip. The <strong>multicore</strong> era (2-4 cores) will show infrastructure benefits. The <strong>manycore</strong> era (8+ cores) will require application support.</p>
<p>He then describes the task of making your program utilize manycores as "<em>Rewrite your entire application in a new language</em> aggressive....It's also not a common optimization, except within very specific application niches." While I agree that this is true today, it <strong>cannot</strong> hold true in the manycore era. <strong>All performance-related programming in the manycore era will require concurrent programming</strong>.</p>
<p>Today, the benefit of multithreading is either negative a few percent or, on a dual-core system, a gain of perhaps 70%. So it's reasonable not to bother, especially since multithreaded programming in mainstream languages is today where memory management was about twelve years ago: an error-prone, manual process involving low-level abstractions. But look at the speedups to be gained from multithreading as we move into the manycore era:</p>
<p>Cores</p>
<p>1</p>
<p>2</p>
<p>4</p>
<p>8</p>
<p>16</p>
<p>32</p>
<p>::: {align="center"}
Multicore
:::</p>
<p>::: {align="center"}
Manycore
:::</p>
<p>Yr. of common availability</p>
<p>2006</p>
<p>2008?</p>
<p>2010?</p>
<p>2012?</p>
<p>Application speed<br>
(Assumes 70% utilization of additional cores)</p>
<p>1</p>
<p>1.7</p>
<p>3 (?)</p>
<p>6 (?)</p>
<p>11 (?)</p>
<p>23 (?)</p>
<p>There is simply no way that any professional can ignore that.</p>
<p>And as a professional, now is the time to learn those skills. In no more than a few years, multithreaded programming is going to be <strong>the</strong> central issue of performance. <strong>No mainstream language is automatically parallelizable.</strong> <strong>No automatically parallelizable language is close to being embraced by the mainstream.<br>
</strong></p>
<p>Wake up and smell the cores: the mainstream is going to get hit by the manycore era like a tsunami. Those who are prepared will prosper. Those who are not prepared will feel like COBOL programmers in 2001.</p>
<p>P.S. If you aren't a regular reader and you see the OpenMP post below, you might think that I'm saying that's a silver bullet. Heck no. A parallel loop isn't going to help Ted Stevens get his Internets through the tubes any faster or, more to the point, overcome disk contention, memory locks, cache corruption, etc. But the systems programmers and hardware manufacturers (e.g., disk drives) won't be able to ignore the manycore era either. Essentially, the whole dang box is going to have to be re-engineered for manycores. This is why Vista has put Microsoft on the edge of a precipice: they lost years in the undoubtedly-painful process of refactoring Windows so that it stood a fighting chance to be put together anew in the manycore era. They said that Vista was a "bet the company" gamble and while that was always hyperbole, it's not a lock that the mainstream OS for the manycore era will be Windows.</p>Insane Guitar Solo2006-08-09T07:00:00-10:002006-08-09T07:00:00-10:00larrytag:knowing.net,2006-08-09:/posts/2006/08/insane-guitar-solo/<p>You just have to watch this guitar solo to believe it. Amazing.</p>
<p><em>via http://feeds.feedburner.com/LessIsBetter.?m=168</em></p>Inflation in the lab?2006-08-09T00:00:00-10:002006-08-09T00:00:00-10:00larrytag:knowing.net,2006-08-09:/posts/2006/08/inflation-in-the-lab/<p>I'm an easy-going guy, but the idea of trying to create a universe in a "bubble" in an accelerator seems like a bad idea.</p>Book Mooch2006-08-08T22:00:00-10:002006-08-08T22:00:00-10:00larrytag:knowing.net,2006-08-08:/posts/2006/08/book-mooch/<p>I joined this book swap site today. Of course, its utility grows with the size of the network.</p>All I Want for Christmas...2006-08-08T18:15:00-10:002006-08-08T18:15:00-10:00larrytag:knowing.net,2006-08-08:/posts/2006/08/all-i-want-for-christmas/<p>Look how natural that looks. Doesn't that look good? Wouldn't you buy that? I'd buy that. My friends would buy that. You'd buy that. Of course you would.</p>Turbo Returns!2006-08-08T17:30:00-10:002006-08-08T17:30:00-10:00larrytag:knowing.net,2006-08-08:/posts/2006/08/turbo-returns/<p><a href="http://www.turboexplorer.com/">Oh yeah</a>.</p>Hardware Woes: Light at the End of the Tunnel2006-08-08T17:19:00-10:002006-08-08T17:19:00-10:00larrytag:knowing.net,2006-08-08:/posts/2006/08/hardware-woes-light-at-the-end-of-the-tunnel/<p>If you've been following my "Offtopic" or "Hawaii" topics, you've been hearing me lament what it's been like assembling a non-standard desktop machine (dual processors, huge hard drives, All-in-Wonder 800XT) by mail order when you live 3,000 miles from the mainland. Well, aside from cleaning up the boxes everywhere …</p><p>If you've been following my "Offtopic" or "Hawaii" topics, you've been hearing me lament what it's been like assembling a non-standard desktop machine (dual processors, huge hard drives, All-in-Wonder 800XT) by mail order when you live 3,000 miles from the mainland. Well, aside from cleaning up the boxes everywhere and re-installing all my software, I've got a fast multiprocessor machine up and running (as you might have guessed from my /openMp /clr post below).</p>
<p>On the other hand, it is <em>loud</em>. Two Zalman CPU fans, 1 fan on the graphics board, power-supply fan, and 5 case fans. And I swear to god, it's making my office uncomfortably hot. I live in the tropics, and this thing's throwing out so many BTUs that it's outperforming the sun. I didn't go with water cooling, because...well...it's expensive and it scares me. </p>Ruby: Rails or the Language?2006-08-08T16:39:00-10:002006-08-08T16:39:00-10:00larrytag:knowing.net,2006-08-08:/posts/2006/08/ruby-rails-or-the-language/<p>My colleague Andrew Binstock, who's always been too busy making money to blog, disagrees with me that Ruby-the-language is crossing the chasm. He think that Rails is great, but is not enamored of Ruby-the-language. I, on the other hand, continue to be skeptical about Rails (has it changed the dialogue …</p><p>My colleague Andrew Binstock, who's always been too busy making money to blog, disagrees with me that Ruby-the-language is crossing the chasm. He think that Rails is great, but is not enamored of Ruby-the-language. I, on the other hand, continue to be skeptical about Rails (has it changed the dialogue about how frameworks should be? Yes. But it's a long way from displacing ASP.NET or even PHP). </p>Firefox hijacks Url opening from IE7 (!?!?!?!)2006-08-08T16:32:00-10:002006-08-08T16:32:00-10:00larrytag:knowing.net,2006-08-08:/posts/2006/08/firefox-hijacks-url-opening-from-ie7/<p>Firefox 1.5.06 is my default browser. It's acting a little strangely with some of the admin facilities on this site, though, so I just opened IE (7, beta 3). OK, but now I discover that when I type a URI into the IE addressbar, a new tab opens …</p><p>Firefox 1.5.06 is my default browser. It's acting a little strangely with some of the admin facilities on this site, though, so I just opened IE (7, beta 3). OK, but now I discover that when I type a URI into the IE addressbar, a new tab opens <em>in Firefox</em> and loads the page! I mean, there's default and then there's <em>default.</em> </p>/clr /openMp2006-08-08T14:43:00-10:002006-08-08T14:43:00-10:00larrytag:knowing.net,2006-08-08:/posts/2006/08/clr-openmp/<p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:6.6312in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:2.5986in"}
/clr /openMp
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.6847in"}
Tuesday, August 08, 2006</p>
<p>2:34 PM
:::</p>
<p>::: {style="direction:ltr;margin-top:.0722in;margin-left:0in;width:6.6312in"}
I've …</p><p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:6.6312in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:2.5986in"}
/clr /openMp
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.6847in"}
Tuesday, August 08, 2006</p>
<p>2:34 PM
:::</p>
<p>::: {style="direction:ltr;margin-top:.0722in;margin-left:0in;width:6.6312in"}
I've been working with C++/CLI and OpenMP lately. OpenMP is a multiprocessing facility for C++ and FORTRAN that is, as such things go, dead simple to use (this is one of those "power to shoot yourself in the foot" things). One line of code (#pragma omp parallel for) changed my CPU utilization from:</p>
<p><img alt="" height="265" src="http://www.knowing.net/content/binary/image00112345678910.png" width="242"></p>
<p>To:</p>
<p><img alt="" height="318" src="http://www.knowing.net/content/binary/image0021234.png" width="244"></p>
<p>Now [that's]{style="font-style:italic"} what I'm talking about! Get those cores cooking!</p>
<p>Anyhow, OpenMP and C++/CLI are a sweet match: C++/CLI makes GUIs and strings and such .NET-easy and OpenMP unleashes the processors. Look for an upcoming article on DevX.
:::
:::</p>
<p>::: {style="text-align:left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>Logos that make you go, 'Hmmmm"2006-08-02T16:56:00-10:002006-08-02T16:56:00-10:00larrytag:knowing.net,2006-08-02:/posts/2006/08/logos-that-make-you-go-hmmmm/<p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:5.3805in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:4.7493in"}
Logos that make you go, 'Hmmmm"
:::</p>
<p>::: {style="direction:ltr;margin-top:.2055in;margin-left:0in;width:5.3805in"}
Is it me, or is this logo for a coffee farm open to negative …</p><p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:5.3805in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:4.7493in"}
Logos that make you go, 'Hmmmm"
:::</p>
<p>::: {style="direction:ltr;margin-top:.2055in;margin-left:0in;width:5.3805in"}
Is it me, or is this logo for a coffee farm open to negative interpretation?</p>
<p><img alt="" height="152" src="http://www.knowing.net/content/binary/image001123456789.png" width="164"></p>
<p>:::
:::</p>
<p>::: {style="text-align:left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>Ruby Read2006-07-28T09:28:00-10:002006-07-28T09:28:00-10:00larrytag:knowing.net,2006-07-28:/posts/2006/07/ruby-read/<p>According to Tim O'Reilly's always interesting quarterly analysis of the book industry, Ruby is doing extraordinarily well, with a 689% quarterly increase in sales and is now approaching Perl in terms of book sales.</p>
<p>Caveats include the (some would say profound) difference between book sales and use. Most Perl programmers …</p><p>According to Tim O'Reilly's always interesting quarterly analysis of the book industry, Ruby is doing extraordinarily well, with a 689% quarterly increase in sales and is now approaching Perl in terms of book sales.</p>
<p>Caveats include the (some would say profound) difference between book sales and use. Most Perl programmers already have accumulated books on the topic. Similarly, C# showed a spike in book sales, but that is almost certainly largely a reflection on the release of VS2005 and not an indicator of a sudden shift towards that language.</p>
<p>Having said that, an important component of programming language popularity is "buzz" and the perception created by a sudden increase in books/seminars/articles. With sites like Digg creating "flash-interest," and increasing the volatility of the marketplace for attention, "buzz" may play an even bigger role in whatever The Next Big Language is than it did in the success of C++ and Java (two languages whose success was <strong>undoubtedly</strong> boosted by the amount of associated teaching / discussion).</p>On Being Dugg2006-07-28T08:30:00-10:002006-07-28T08:30:00-10:00larrytag:knowing.net,2006-07-28:/posts/2006/07/on-being-dugg/<p>On June 19, I posted 3 articles, "15 Exercises to Known a Programming Language," which came to the attention of Digg and was, for a few days, on the front page (and even the top item) in the Programming theme.</p>
<p>I've finally gotten around to reviewing my logs. While the …</p><p>On June 19, I posted 3 articles, "15 Exercises to Known a Programming Language," which came to the attention of Digg and was, for a few days, on the front page (and even the top item) in the Programming theme.</p>
<p>I've finally gotten around to reviewing my logs. While the article got about 8 times as many hits as my next-most-popular article ever (about \~40,000 hits), the click-through to the second and third articles dropped dramatically (5297 and 3919). I'm not disappointed by these click-through rates: each article was several hundred words long.</p>
<p>It's difficult to determine how many people subscribe to your RSS feed, since there is not a 1:1 relationship between hits to your XML file and "eyeballs." My blogging software (<a href="http://www.dasblog.net">dasBlog</a>), like many, puts a Web bug in each post, though, so I use the average number of aggregator-based reads as an indicator of whether my blog is gaining or losing ground. By that standard, it doesn't appear as if being Dugg made a long-term difference. From my baseline rate, I saw a 17% spike in June (the month the article appeared) and a return to the baseline (actually 94%) in July. (Hmm? I should switch that to median rather than average?)</p>
<p>In terms of immediate economic boon, I have a minimal AdSense presence on my Website. AdSense TOS forbids discussion of your actual income, but in the spectrum of latte-book-graphics card-rent, 40K hits from Dugg was in the high-latte / low-book range.</p>
<p>Thoughts:</p>
<p>The article was pretty on-topic for this blog, so I was hoping to pick up some long-term readership. While I may have done that, it's not apparent in the data. I have been having a long-term growth in my aggregator reads, and while there was a spike, July actually fell back a little (on the other hand, my posts in July have been pretty lame, because of my hardware problems).</p>
<p>The 40K direct hits are nothing to sneeze at. I imagine that if I had been pitching something (a book, a tutorial, etc.) and had embedded an ad in the article, that might have led to some income. However, I think in-post contextual ads are beyond the pale, so for me it highlights the fact that ad revenues for a programming related blog are trivial. (Having said that, I am convinced that blogging is easily the most cost-effective form of marketing there is for a consultant. Absolutely worthwhile.)</p>Hardware Woes Continue2006-07-25T08:43:00-10:002006-07-25T08:43:00-10:00larrytag:knowing.net,2006-07-25:/posts/2006/07/hardware-woes-continue/<p>I finally got a dual-processor motherboard that boots (a Tyan S2885) only to discover that I only have 2GB of "registered" DDRAM, making my other 4GB of RAM worthless on this computer. Well, easy enough to deal with later, I think, happily screwing the motherboard down into my case. Now …</p><p>I finally got a dual-processor motherboard that boots (a Tyan S2885) only to discover that I only have 2GB of "registered" DDRAM, making my other 4GB of RAM worthless on this computer. Well, easy enough to deal with later, I think, happily screwing the motherboard down into my case. Now, slide the drive cages into... Now, slide the drive cages into... Wait a second...</p>
<p>While my Antec case technically "fits" an EATX motherboard, the drive cages are perfectly aligned in the airspace above the primary CPU slot. I tried all 3 cooler formfactors I've acquired in the past 3 months: none fit. So now I need to buy another case (\<span class="math">\(170 + \\)</span>50 shipping).</p>
<p>Oh, and I forgot that while the motherboard booted, it didn't with 2 CPUs, so I spent an hour debugging RAM configurations before I noticed that the 8-pin CPU power plug only had wires going to 4-pins. So that was another order (\<span class="math">\(5 for the cable + \\)</span>20 shipping).</p>
<p>I love Hawaii, but boy do I miss Fry's.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Chip week begins: AMD slashes prices2006-07-23T23:00:00-10:002006-07-23T23:00:00-10:00larrytag:knowing.net,2006-07-23:/posts/2006/07/chip-week-begins-amd-slashes-prices/<p>AMD unveiled new chip pricing today, trying to steal some thunder from the outstanding reviews garnered by \<a href="http://www.knowing.net/ct.ashx?id=a33e3e93-f321-4afd-98ec-b909cfed4275&url=http%3a%2f%2fwww.intel.com%2fproducts%2fprocessor%2fcore2%2findex.htm"" target=_blank rel="noopener noreferrer">Intel's Core2Duo chips. Personally, I've got …</p><p>AMD unveiled new chip pricing today, trying to steal some thunder from the outstanding reviews garnered by \<a href="http://www.knowing.net/ct.ashx?id=a33e3e93-f321-4afd-98ec-b909cfed4275&url=http%3a%2f%2fwww.intel.com%2fproducts%2fprocessor%2fcore2%2findex.htm"" target=_blank rel="noopener noreferrer">Intel's Core2Duo chips. Personally, I've got a socket 940 thing going on, so I'm sticking with AMD. I'll probably build an Intel-based desktop when they ship quad-cores, which they claim they'll do by the end of the year.</p>0-60 in 1.67 seconds: Hoax or Just Wicked?2006-07-21T11:37:00-10:002006-07-21T11:37:00-10:00larrytag:knowing.net,2006-07-21:/posts/2006/07/0-60-in-167-seconds-hoax-or-just-wicked/<p><a href="https://leftlanenews.com/2006/07/21/barabus-tkr-takes-over-as-worlds-fastest-car/">This site</a> claims there is a car with powered wheels that can do 0-60 in 1.67 seconds.</p>
<p>You'd have to have wheels made out of glue to do that, but assuming that's possible, I make that out as 1.6 gees as the <em>average</em>! Must be pretty hard to …</p><p><a href="https://leftlanenews.com/2006/07/21/barabus-tkr-takes-over-as-worlds-fastest-car/">This site</a> claims there is a car with powered wheels that can do 0-60 in 1.67 seconds.</p>
<p>You'd have to have wheels made out of glue to do that, but assuming that's possible, I make that out as 1.6 gees as the <em>average</em>! Must be pretty hard to keep straight...</p>Variable Length Arrays (Not) In Visual C++2006-07-21T11:17:00-10:002006-07-21T11:17:00-10:00larrytag:knowing.net,2006-07-21:/posts/2006/07/variable-length-arrays-not-in-visual-c/<p>The C99 language standard added support for variable length arrays (VLAs):</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="n">void</span><span class="w"> </span><span class="n">foo</span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="nf">len</span><span class="p">)</span><span class="err">{</span><span class="w"> </span><span class="nc">float</span><span class="w"> </span><span class="n">myArray</span><span class="o">[</span><span class="n">len</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="err">}</span>
</code></pre></div>
<p>In porting some C# code to C++, I had a method signature like that, so I tried to use a VLA. Sadly, VC++ 2005 produces "error C2057: expected constant expression," "error C2466 …</p><p>The C99 language standard added support for variable length arrays (VLAs):</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="n">void</span><span class="w"> </span><span class="n">foo</span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="nf">len</span><span class="p">)</span><span class="err">{</span><span class="w"> </span><span class="nc">float</span><span class="w"> </span><span class="n">myArray</span><span class="o">[</span><span class="n">len</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="err">}</span>
</code></pre></div>
<p>In porting some C# code to C++, I had a method signature like that, so I tried to use a VLA. Sadly, VC++ 2005 produces "error C2057: expected constant expression," "error C2466: cannot allocate an array of constant size 0," and "error C2133: 'myArray' : unknown size". I've confirmed that this is a compliance thing: the code works with</p>
<div class="highlight"><pre><span></span><code>gcc -std=iso9899:1999
</code></pre></div>
<p>. Pity.></p>Borland's Got a Buyer for DevCo, but Not Saying Who2006-07-21T08:02:00-10:002006-07-21T08:02:00-10:00larrytag:knowing.net,2006-07-21:/posts/2006/07/borlands-got-a-buyer-for-devco-but-not-saying-who/<p>Word is that Borland has come to an agreement with a still-secret savior to purchase and support "DevCo": the former languages and tools division.</p>
<p>Details as they emerge, but that won't be for a few weeks</p>Sloppy: Calibri @ 100%2006-07-21T07:42:00-10:002006-07-21T07:42:00-10:00larrytag:knowing.net,2006-07-21:/posts/2006/07/sloppy-calibri-100/<p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:6.6041in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:3.5229in"}
Sloppy: Calibri @ 100%
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.384in"}
Friday, July 21, 2006</p>
<p>7:36 AM
:::</p>
<p>::: {style="direction:ltr;margin-top:.0722in;margin-left:0in;width:6.6041in …</p><p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:6.6041in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:3.5229in"}
Sloppy: Calibri @ 100%
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.384in"}
Friday, July 21, 2006</p>
<p>7:36 AM
:::</p>
<p>::: {style="direction:ltr;margin-top:.0722in;margin-left:0in;width:6.6041in"}
Microsoft's new font, Calibri, is good-looking, but not at the default size and resolution it's provided in Office 2007. Look at the c-e boundary:</p>
<p><img alt="" height="17" src="http://www.knowing.net/content/binary/image00112345678.png" width="63"></p>
<p>Heck, it looks better at 98%:</p>
<p><img alt="" height="18" src="http://www.knowing.net/content/binary/image002123.png" width="63"></p>
<p>But it looks its best at higher-resolutions (124%):</p>
<p><img alt="" height="17" src="http://www.knowing.net/content/binary/image003123.png" width="76"></p>
<p>I don't know if this is the fault of the font, the display subsystem, or the application, but it's sloppy.
:::
:::</p>
<p>::: {style="text-align:left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>Makers of NaturallySpeaking Raising Expectations for Voice Recognition2006-07-19T08:13:00-10:002006-07-19T08:13:00-10:00larrytag:knowing.net,2006-07-19:/posts/2006/07/makers-of-naturallyspeaking-raising-expectations-for-voice-recognition/<p>NaturallySpeaking 9, coming out in August, <a href="https://www.pcworld.idg.com.au/">claims</a> to dramatically reduce the time it takes to model your voice, achieving the best-possible recognition soon after opening the box.</p>
<p>For some people, that best-possible recognition is said to be 99%. Maybe. I've probably gone throught the "voice training" process a dozen or …</p><p>NaturallySpeaking 9, coming out in August, <a href="https://www.pcworld.idg.com.au/">claims</a> to dramatically reduce the time it takes to model your voice, achieving the best-possible recognition soon after opening the box.</p>
<p>For some people, that best-possible recognition is said to be 99%. Maybe. I've probably gone throught the "voice training" process a dozen or more times over the years. Not only have I never achieved 99%, I've never achieved anything usable.</p>
<p>There are several factors: one is that "tethered to your computer, wearing a noise-cancelling headset, and watching the dictation in realtime," is not appealing to me. The second is that when you make a typo you are off by a coupe letters and then you get back on track. When a voice-reco system fails, the error mode is a parlor-game chain of semi-homonyms "wrecks a beach" == "recognize speech".</p>
<p>I'm ever optimistic, though. As a writer, I'd love to be able to do significant amounts of work using a digital recorder (PDA, smartphone, what-have-you) on the beach. I've even thought of trying out those lost-cost (human) transcription services. Maybe I'll give that a shot this <a href="http://www.nanowrimo.org/">National Novel Writing Month</a>.</p>I HATE Hardware2006-07-18T08:16:00-10:002006-07-18T08:16:00-10:00larrytag:knowing.net,2006-07-18:/posts/2006/07/i-hate-hardware/<p>The last thing I saw last night was something about "Do not turn off or remove the power cord from your computer" for some no-doubt-critical update. This morning, my desktop doesn't POST. It hangs right at the point the RAM count happens.</p>
<p>Now, I don't think an OS upgrade can …</p><p>The last thing I saw last night was something about "Do not turn off or remove the power cord from your computer" for some no-doubt-critical update. This morning, my desktop doesn't POST. It hangs right at the point the RAM count happens.</p>
<p>Now, I don't think an OS upgrade can effect POST, so perhaps it's a bad RAM chip. But I pulled all but one chip this morning and it still didn't boot. Then I replaced that chip and it still failed. So the odds against it being the RAM seem high.</p>
<p>Meanwhile, on my new system that I'm building to replace the motherboard whose hard-drive controller blew 6 weeks ago, the replacement motherboard doesn't POST at all: no BIOS announcement, no nothing.</p>
<p>Power's coming through a UPS, which should condition it adequately.</p>
<p>At the moment, I have no desktop. I _so_ don't need this.</p>
<p>Oh, and you have to be nuts to buy new chips and motherboards before next Thursday, when Intel launches their new chips and AMD will undoubtedly respond with huge price cuts.</p>Dr. Dobb's Changes2006-07-18T07:00:00-10:002006-07-18T07:00:00-10:00larrytag:knowing.net,2006-07-18:/posts/2006/07/dr-dobbs-changes/<p>When <em>Software Development</em> was killed, I predicted that <em>Dr. Dobb's</em> wouldn't change markedly. Boy, was I wrong. Editor-in-Chief Jonathan Erickson and Publisher Stan Barnes clearly decided that the time had come to create what is essentially a new magazine: I don't think Dobb's has changed this much since at least …</p><p>When <em>Software Development</em> was killed, I predicted that <em>Dr. Dobb's</em> wouldn't change markedly. Boy, was I wrong. Editor-in-Chief Jonathan Erickson and Publisher Stan Barnes clearly decided that the time had come to create what is essentially a new magazine: I don't think Dobb's has changed this much since at least the late 80s.</p>
<p>The "new" Dobb's really <em>has</em> taken a page from <em>SD</em>'s playbook and dramatically increased the amount of technical-management-focused editorial. There's a <em>fraction</em> of the source code that used to be Dobb's signature.</p>
<p>They've dramatically changed the column lineups, which is a real surprise given Erickson's loyalty to his long-term writers. Mike Swaine is still there, Scott Ambler and Rick Wayne came over from SD, and Pete Becker is writing the C++ column. This was a bold move must have been a hard one, both for the columnists and for Erickson. But think it was a good choice.</p>
<p>They also redesigned the pages. Note to publishers: Do we really need to go through the whole "the new font is too small," "you're right: we've changed it back!" charade every time? It looks like the new page layouts are more flexible, although at least initially, I think the readability has gone down.</p>
<p>As an old-time competitor to the "old" Dr. Dobb's, they've walked away from some of the things that made them hard to compete against: the "signifiers" of technical depth that came from their source-code and low-level articles. Pages of source code cue programmers "there is immediate value here." When flipping through a magazine, an article on, say, computer security, will be much more eye-catching if there is accompanying source code: the programming reader stops and "checks out" the source code to see what's going on. "Soft" articles, on the other hand, have a harder time catching the eye and coming to mind when the renew / resubscribe decision comes about.</p>
<p>It's gotta' be tough managing the editorial of a programmer's magazine nowadays.</p>"The Core": Worst. Movie. Ever?2006-07-16T11:22:00-10:002006-07-16T11:22:00-10:00larrytag:knowing.net,2006-07-16:/posts/2006/07/the-core-worst-movie-ever/<p>One of the cable channels (FX, I think) has been playing "The Core" in medium rotation lately. I've been trying to expose myself to it in small amounts, to inoculate myself and accept it as cheesy "so bad it's good" fun(ref. "The Fast and the Furious": One of my …</p><p>One of the cable channels (FX, I think) has been playing "The Core" in medium rotation lately. I've been trying to expose myself to it in small amounts, to inoculate myself and accept it as cheesy "so bad it's good" fun(ref. "The Fast and the Furious": One of my favorite movies of the past few years.)</p>
<p>A few years ago, during a bout of business travel, I saw "The Day After Tomorrow," like, 7 times on various airplanes and I really thought that was the worst that could be done, but I just saw the last 10 minutes or so of "The Core" yesterday. OMG. So bad. So very, very bad.</p>"More use of assembly" -- Dubious prediction2006-07-15T02:00:00-10:002006-07-15T02:00:00-10:00larrytag:knowing.net,2006-07-15:/posts/2006/07/more-use-of-assembly-dubious-prediction/<p>InfoWorld's Tom Yager wrote a column on the benefits of native code, but then went off the deep end with:</p>
<blockquote>
<p>Here's a native code prediction that's way under your radar: We'll see more use of assembly language. ...Developers coding for new, controlled deployments can afford to set high requirements that …</p></blockquote><p>InfoWorld's Tom Yager wrote a column on the benefits of native code, but then went off the deep end with:</p>
<blockquote>
<p>Here's a native code prediction that's way under your radar: We'll see more use of assembly language. ...Developers coding for new, controlled deployments can afford to set high requirements that include a 64-bit CPU, OS, and drivers. And if you know you're coding for Opteron and you're ready to write to that architecture, baby, life is a highway.</p>
</blockquote>
<p>[via James Robertson]</p>
<p>I worked with assembly language. I knew assembly language. Assembly language was a friend of mine. And I have this to say: Assembly language isn't coming back to the mainstream.</p>
<p>The point that native-OS code is worthwhile is dead on. The point that native-hardware code is worthwhile is, for numerics and media programming specialists, true: if you're working with huge blocks of 8- and 16-bit integer data, packing the registers and using the wide-data ops is going to be worthwhile (assuming we're talking about code that will be run hundreds or thousands of times). But the only reason to drop that far low-level is parallelism and assembly has very little (if any) advantage for expressing that. Even in the graphics world, where concurrent ops are already the norm, the trend has been towards higher-level languages (relatively speaking: shader languages look like C).</p>
<p>\<</p>
<p>p dir=ltr> The idea that the concurrent revolution is going to be solved by old tools is dead wrong. Low-level C-derived tools? Possibly. (Or possibly not: a higher-level language that did for concurrency what Java did for memory management [solve 90+% of the problem in a relatively performant manner] could very well sweep the industry.)</p>Programming Quantum Computers2006-07-14T23:00:00-10:002006-07-14T23:00:00-10:00larrytag:knowing.net,2006-07-14:/posts/2006/07/programming-quantum-computers/<p>When I feel listless, I sometimes try to whet my brain by rubbing it on quantum mechanics, which requires math that's absurdly difficult for a dilettante to understand. For years I've tinkered at implementing a simulator for programming quantum computers and really haven't gotten anywhere. Well, now I can use …</p><p>When I feel listless, I sometimes try to whet my brain by rubbing it on quantum mechanics, which requires math that's absurdly difficult for a dilettante to understand. For years I've tinkered at implementing a simulator for programming quantum computers and really haven't gotten anywhere. Well, now I can use Andr</p>Genetic Algorithms Outperform Humans In...2006-07-13T02:00:00-10:002006-07-13T02:00:00-10:00larrytag:knowing.net,2006-07-13:/posts/2006/07/genetic-algorithms-outperform-humans-in/<p>The <a href="http://web.mit.edu/varun_ag/www/hc-2006.html">Catalogue of Variable Frequency and Single-Resistance-Controlled Oscillators Employing A Single Differential Difference Complementary Current Conveyor</a> which I imagine is self-explanatory to electrical engineers. Silver went to <a href="http://www.genetic-programming.org/hc2006/Sastry-Paper.pdf">Multiobjective Genetic Algorithms for Multiscaling Excited-State Direct Dynamics in Photochemistry</a>. Bronze prizes went to two things that I could actually understand: <a href="http://www.genetic-programming.org/hc2006/Yao-Paper.pdf">A multi-population …</a></p><p>The <a href="http://web.mit.edu/varun_ag/www/hc-2006.html">Catalogue of Variable Frequency and Single-Resistance-Controlled Oscillators Employing A Single Differential Difference Complementary Current Conveyor</a> which I imagine is self-explanatory to electrical engineers. Silver went to <a href="http://www.genetic-programming.org/hc2006/Sastry-Paper.pdf">Multiobjective Genetic Algorithms for Multiscaling Excited-State Direct Dynamics in Photochemistry</a>. Bronze prizes went to two things that I could actually understand: <a href="http://www.genetic-programming.org/hc2006/Yao-Paper.pdf">A multi-population genetic algorithm for robust and fast ellipse detection</a> and <a href="http://www.genetic-programming.org/hc2006/Olague-Paper-1-GECCO-2006.pdf">Using Evolution to Learn How to Perform Interest Point Detection</a> .</p>When Your Nutshell Gets to 1300 Pages...2006-07-12T23:00:00-10:002006-07-12T23:00:00-10:00larrytag:knowing.net,2006-07-12:/posts/2006/07/when-your-nutshell-gets-to-1300-pages/<p>"Java in a Nutshell" weighs in at 1264 pages. Matt Croyden, sez:</p>
<blockquote>
<p>[Y]our programming language just might be complicated when you have trouble telling the difference between its Nutshell book and a telephone book.</p>
</blockquote>
<p>[<em>via</em> James Robertson]</p>
<p>This is somewhat unfair, as the bulk of "JiaN" is a library …</p><p>"Java in a Nutshell" weighs in at 1264 pages. Matt Croyden, sez:</p>
<blockquote>
<p>[Y]our programming language just might be complicated when you have trouble telling the difference between its Nutshell book and a telephone book.</p>
</blockquote>
<p>[<em>via</em> James Robertson]</p>
<p>This is somewhat unfair, as the bulk of "JiaN" is a library reference, but it's certainly true that Java and C# have grown more complex as they've evolved, while certain other languages (Lisp, Smalltalk) have seen continuing simplicity as a <strong>feature</strong> of the language.</p>
<p>I think that one force in play in the market for programming language popularity is pressure towards a "collapse toward simplicity." It's not the only force, in my opinion it's <strong>not likely</strong> to be <strong>the major</strong> force, but it certainly played a part in the rise of Java. Of course, Java was equally an example of the force towards familiarity: it seemed quite like C++. Similarly, I think one reason why Ruby is currently the belle of the ball is its similarity to Perl.</p>Most Useful UML Diagrams2006-07-11T23:00:00-10:002006-07-11T23:00:00-10:00larrytag:knowing.net,2006-07-11:/posts/2006/07/most-useful-uml-diagrams/<p>According to "How UML Is Used," an article in the May 2006 issue of CACM, the UML diagrams that most commonly "provide new info" above-and-beyond use-case narratives are:</p>
<ol>
<li>Class diagrams</li>
<li>Statechart diagrams</li>
<li>Sequence diagrams</li>
</ol>
<p>Interestingly, "usage rates are not well explained by how much new information is provided." <strong>Statecharts, the …</strong></p><p>According to "How UML Is Used," an article in the May 2006 issue of CACM, the UML diagrams that most commonly "provide new info" above-and-beyond use-case narratives are:</p>
<ol>
<li>Class diagrams</li>
<li>Statechart diagrams</li>
<li>Sequence diagrams</li>
</ol>
<p>Interestingly, "usage rates are not well explained by how much new information is provided." <strong>Statecharts, the 2nd most useful diagram</strong>, are used in most projects by only perhaps 1/4 of practitioners. <strong>Use-case diagrams</strong>, in comparison, are the 2nd most commonly <em>used</em> type of chart, but are <strong>one of the least effective in terms of adding value</strong> to use-case narratives (well, yeah...). Class diagrams are both the most useful and most used, while sequence diagrams are commonly used by about half the practitioners.</p>
<p>Rounding out the studied diagrams (they skipped Object, Component, and Deployment diagrams), Collaboration and Activity diagrams are, when used, considered useful by more than 60% of practitioners.</p>Getting Things Done With OneNote 122006-07-11T10:21:00-10:002006-07-11T10:21:00-10:00larrytag:knowing.net,2006-07-11:/posts/2006/07/getting-things-done-with-onenote-12/<p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:5.0305in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:5.0013in"}
Getting Things Done With OneNote 12
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.5041in"}
Tuesday, July 11, 2006</p>
<p>8:23 AM
:::</p>
<p>::: {style="direction:ltr;margin-top:.0722in;margin-left:0in …</p><p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:5.0305in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:5.0013in"}
Getting Things Done With OneNote 12
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.5041in"}
Tuesday, July 11, 2006</p>
<p>8:23 AM
:::</p>
<p>::: {style="direction:ltr;margin-top:.0722in;margin-left:0in;width:5.0305in"}
A year ago, I wrote about how I used OneNote flags to coordinate tasks according to the "Getting Things Done" philosophy. OneNote 12 goes [worlds]{style="font-style:italic"} beyond the original OneNote as a platform for "GTD," so I thought I'd write about how I've adapted my original system.</p>
<p>One of the essential ideas in "GTD" is maintaining as few "collection buckets as you can get by with." Within Office 12, the two programs that are most likely to be used as collection buckets are Outlook and OneNote; my premise is that while Outlook has "tasks," OneNote is by far the superior program for managing them. In my system, Outlook is used for its Inbox, Calendar, and Contacts list, while OneNote is the central organizing tool.</p>
<p>The key to using OneNote as a GTD tool is that OneNote can instantly gather and summarize flagged items and group them by name, and filter them so that only unchecked items are visible. Once set up, this gives you immediate access to your "next action" items:</p>
<p><img alt="" height="388/" src="http://www.knowing.net/content/binary/image0011234567.png" width="110"></p>
<p>To do this, you have to customize your OneNote flags, a simple process that is marred only by the fact that instead of acting on the underlying notebook (which you'll share between computers, as we'll discuss later), customization is on a per-machine basis. So you have to perform this process on every machine.</p>
<p>In "GTD" every multistep task is a "project," every single task is an "action," and the next physical action you need to do is the "next action." The heart of GTD is breaking projects down into actions and next actions, so that your[ ]{style="mso-spacerun:yes"}to-do list is a set of achievable tasks "Buy 10 pounds of nails at Home Depot" rather than overwhelming things like "Build the house."</p>
<p>Additionally, I break down my projects into 3 categories: "Urgent" projects on which I should be concentrating, "Ongoing" projects, and "Deferred" projects (some people call these "Fallow" projects).</p>
<p>With that in mind, I customize my note flags. I use open checkboxes for actions, and starred checkboxes to indicate projects. I use green, blue, and yellow to indicate urgent, ongoing, and deferred categories:</p>
<p><img alt="" height="293/" src="http://www.knowing.net/content/binary/image00212.png" width="195"></p>
<p>You'll notice that I additionally have a "Waiting" flag assigned to Ctl-9 and that the "Next Action" and "To Do" flags have an @ prepended so that they "sort" to the top of my "Note Flag Summary" view. Another important keyboard shortcut is Ctl-0, which clears all notes on an item. So now, you have assignment of actions and projects near at hand.</p>
<p>Organizing Projects</p>
<p>The original OneNote had a design philosophy of using a single notebook, with many sections, many pages, and many subpages. OneNote 2007 has a much more flexible philosophy, with multiple notebooks and hierarchical sections. One of the biggest decisions you can make in a OneNote-based GTD system is how you will organize projects -- with notebooks, sections, or pages/subpages?</p>
<p>To be clear, you can make a project just using a hierarchy and note flags:</p>
<p><img alt="" height="87/" src="http://www.knowing.net/content/binary/image00312.png" width="243"></p>
<p>But generally, "real" projects involve gathering data and thoughts and meeting people and lots of sub-projects: in other words, they typically involve gathering all the [other]{style="font-style:italic"} stuff OneNote excels at. And this is really the key reason why OneNote is perfect for "Getting Things Done": it's not just a "To Do List" manager or an outliner. Unlike dedicated outliners, it doesn't impose an outline or hierarchy on everything you do. That's very important: to be able to take the note, capture the thought, etc. [before]{style="font-style:italic"} it's categorized / placed within a hierarchy.</p>
<p>For me, projects are best organized as either page/subpage combinations or as sections/subsections. Do not [create]{style="font-style:italic"} a section for every project: it clutters your notebooks too quickly. Currently, I primarily use page/subpage combinations for personal projects and ongoing themes (blog entries, exercise goals, shopping lists, etc.) and use section/subsections to organize clients and projects (as a contractor, I create a subsection for each billable contract, and use "Print to OneNote" to keep convenient copies of the estimate / invoice / payment process.</p>
<p>I use a minimum of notebooks: Personal, Work, and Archive for my GTD-oriented activities and then a couple of others dedicated to my creative outlets and hobbies. When a task is checked completed, it is filtered out of the "Note Flag Summary," but during the Weekly Review, I delete completed trivial tasks and move finished projects / sections to the Archive notebook. (Of course, I visit and re-prioritize my projects and tasks.)</p>
<p>Perhaps my favorite feature in OneNote 12 is sharing notebooks between machines. With 7 machines, including 3 Tablet PCs, I may be an outlier, but even if you just have two machines, shared notebooks are an incredible boon. Essentially, this is one of those "it just works" facilities -- when you create a notebook, say that you are going to share it between machines, and, bang!, OneNote keeps them synchronized -- [even when both are open simultaneously! ]{style="font-weight:bold"}It's fantastic, I can be writing on my Tablet out on the porch, get stuck, go inside and do some keyboard-intensive research, pasting into OneNote, go back outside, and everything is synched perfectly.</p>
<p>Special bonus productivity program:</p>
<p>The other essential program to keep me productive is <a href="http://sciral.com/">Sciral Consistency</a>, which is almost perfect for tracking repeating tasks with soft deadlines.</p>
<p><img alt="" height="352/" src="http://www.knowing.net/content/binary/image0041.png" width="467"></p>
<p>As you can probably infer, you create a task and set "minimum" and "maximum" days for each cycle: do the bills every 10 to 15 days, exercise every 1-2 days, download Website logs every 20-40 days, etc. Here, you can see that I haven't been exercising enough and that I should haul trash and sweep the driveway in the next couple of days.</p>
<p>There are only two improvements I'd desperately love for Consistency: a version for my PDA (synchronized, of course) and the ability to attach a note to a "check," which would make Consistency an awesome training log.
:::
:::</p>
<p>::: {style="text-align:left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>.2% of Patents Earn Out2006-07-11T00:00:00-10:002006-07-11T00:00:00-10:00larrytag:knowing.net,2006-07-11:/posts/2006/07/2-of-patents-earn-out/<p>According to an article in the May 2006 CACM?quoting Peter Drucker, "no more than one in 100 patents earn enough to pay back its development costs and patent fees, and no more than one in 500 recover all its expenses."</p>The Language-Action Perspective: AI is Impossible?2006-07-10T22:00:00-10:002006-07-10T22:00:00-10:00larrytag:knowing.net,2006-07-10:/posts/2006/07/the-language-action-perspective-ai-is-impossible/<p>With all my AI posts lately, I'm sorry I hadn't realized that the May 2006 issue of the CACM had a theme on the language-action perspective, a critique by Terry Winograd and Fernando Flores that dates from 1986 whose essential point the CACM summarizes neatly:</p>
<blockquote>
<p>[S]killful action always occurs …</p></blockquote><p>With all my AI posts lately, I'm sorry I hadn't realized that the May 2006 issue of the CACM had a theme on the language-action perspective, a critique by Terry Winograd and Fernando Flores that dates from 1986 whose essential point the CACM summarizes neatly:</p>
<blockquote>
<p>[S]killful action always occurs in a context set by conversations, and in the conversations people perform speech acts by they commit to and generate the action. <strong>Expert behavior requires an extensive sensitivity to context</strong> and an ability to know what to commit to. <strong>Computing machines,</strong> which <strong>are purposely designed to process symbols independent of their context,</strong> have no hopes of becoming experts.</p>
</blockquote>
<p>It's a cutting insight and goes, I think, to why expert systems, for instance, initially seem very exciting but, in the real world, generally fail to provide a lot of value. (They're great for training operators, though!)</p>Darn. Limitations in dasBlog Macros2006-07-09T23:00:00-10:002006-07-09T23:00:00-10:00larrytag:knowing.net,2006-07-09:/posts/2006/07/darn-limitations-in-dasblog-macros/<p>I tried to add one of those "action bars" under my posts -- you know "email it! | digg it! | del.icio.us it!" but couldn't get the <a href="http://www.dasblog.net">dasBlog</a> template to work. The \<%permalink%> macro expands, not to a URI, but to HTML.</p>
<p>Update:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="nt"><SCRIPT</span><span class="w"> </span><span class="na">TYPE=</span><span class="s">"TEXT/JAVASCRIPT"</span><span class="nt">></span><span class="w"> </span>function<span class="w"> </span>StripPermalink(pl)<span class="w"> </span>{<span class="w"> </span>pl …</code></pre></div><p>I tried to add one of those "action bars" under my posts -- you know "email it! | digg it! | del.icio.us it!" but couldn't get the <a href="http://www.dasblog.net">dasBlog</a> template to work. The \<%permalink%> macro expands, not to a URI, but to HTML.</p>
<p>Update:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="nt"><SCRIPT</span><span class="w"> </span><span class="na">TYPE=</span><span class="s">"TEXT/JAVASCRIPT"</span><span class="nt">></span><span class="w"> </span>function<span class="w"> </span>StripPermalink(pl)<span class="w"> </span>{<span class="w"> </span>pl.match(/href=\"(.*?)\"/gi);<span class="w"> </span>return<span class="w"> </span>RegExp.$1;<span class="w"> </span>}<span class="w"> </span><span class="nt"></SCRIPT></span>
</code></pre></div>AI in 3 Months2006-07-09T01:00:00-10:002006-07-09T01:00:00-10:00larrytag:knowing.net,2006-07-09:/posts/2006/07/ai-in-3-months/<p>Exploring Artificial Intelligence is an exciting prospect for non-professional programming (it's a quite rare part of professional programming). Rather than criticize others for being <a href="https://www.amazon.com/exec/obidos/ASIN/0805074562/thinkinginnet-20"><strong>On Intelligence</strong></a><strong>) Architecture on Tic-Tac-Toe</strong></p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/B00030096W/thinkinginnet-20">Naturally Speaking 8</a> ), the underlying processing is still realtime (and, last time I checked, single threaded). This is foolish! I would …</p><p>Exploring Artificial Intelligence is an exciting prospect for non-professional programming (it's a quite rare part of professional programming). Rather than criticize others for being <a href="https://www.amazon.com/exec/obidos/ASIN/0805074562/thinkinginnet-20"><strong>On Intelligence</strong></a><strong>) Architecture on Tic-Tac-Toe</strong></p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/B00030096W/thinkinginnet-20">Naturally Speaking 8</a> ), the underlying processing is still realtime (and, last time I checked, single threaded). This is foolish! I would love to take a crack at processor- and database/Internet-intensive voice recognition. For instance, rank every word-pair alternate via their Google distance (the # of Google returns for the word pair); use WordNet to create alternate parse trees from alternates; apply multiple noise filters to the input to see if the recognition changes; use the database of prior recognition for a dictionary, etc.</p>
<p>Note that I'm not talking about the actual transformation of a sound file into a text alternate -- leave that to the existing, pretty easy-to-use APIs. I'm talking about primarily about intense post-processing (and, for the application of filters to the .WAV file, pre-).</p>
<p>For a short project, the focus would have to be very tight. There are two holy grails for this type of voice recognition: voicemail and in-car dictation. My idea would be the recognition of one- to two-sentence task-oriented utterances: "Pick up bacon at the store," and "Call Bob back." </p>
<p><strong>Generating Narratives</strong></p>
<p>My hunch on consciousness is that it is a semi-continuous narrative whose form is generated by relatively hard-coded rules that interact with a "grammar organ" and whose subject is focused by subliminal processes controlling attention and intention. Obviously, I'm hand-waving huge problems relating to these subliminal aspects, but I think that between WordNet, Wikipedia, and Google, there's a real potential for generating complex narratives, even while punting on the underlying intention. In other words, I think that you could at least win the Loebner Prize... <strong>An Evolvable DSL For Poker AI</strong> The program GS2 is favored to win the \<a href="http://www.knowing.net/ct.ashx?id=73f8b834-1171-4917-9d9c-546313e15f05&url=http%3a%2f%2fwww.cs.ualberta.ca%2f%7epokert%2f"" target=_blank rel="noopener noreferrer">AAAI Computer Poker Competition in a few days. GS2 apparently dynamically develops its strategy based on game theory. An evolvable DSL that described poker strategies would be fascinating.</p>
<p><strong>Evolving Teams for Fantasy/Rotisserrie Leagues</strong></p>
<p>One of the nice things about fantasy baseball/football/etc. is that you have a task that's driven essentually by statistics and chance, so you have a good chance at creating a system that could reliably beat poor human players. The task here would be to create a \<a href="http://www.knowing.net/ct.ashx?id=73f8b834-1171-4917-9d9c-546313e15f05&url=http%3a%2f%2fen.wikipedia.org%2fwiki%2fLearning_classifier_system"" target=_blank rel="noopener noreferrer">Learning Classifier System from which you could extract "good" rules.</p>
<p><strong>Autonomous Blimpbot</strong></p>
<p>Robotics are the new personal computers. If I had the soldering skillz, I'd love to create a self-directing robotic blimp: start with a \<a href="http://www.knowing.net/ct.ashx?id=73f8b834-1171-4917-9d9c-546313e15f05&url=http%3a%2f%2fwww.hobbytron.net%2fmach3_rc_blimp.html"" target=_blank rel="noopener noreferrer">remote-controlled blimp with a mounted camera, hack a digital controller ("miracle happens here" for me, but for other people, I'm sure it's do-able), and go forth.</p>Post Korean Missile Test, I Bet Star Wars Comes to Hawaii2006-07-09T00:00:00-10:002006-07-09T00:00:00-10:00larrytag:knowing.net,2006-07-09:/posts/2006/07/post-korean-missile-test-i-bet-star-wars-comes-to-hawaii/<p>Apparently the North Koreans aimed their Taepodong towards Hawaii . I'll bet anything that our congressmen will demand an anti-missile base now. <em>Sigh.</em></p>Shareware authors: Don't embed your password in your code2006-07-08T23:00:00-10:002006-07-08T23:00:00-10:00larrytag:knowing.net,2006-07-08:/posts/2006/07/shareware-authors-dont-embed-your-password-in-your-code/<p>So I decided to register a piece of shareware, but when I went to the publisher's site, their domain had expired. Well, thinks I, I reckon that's a situation for which "cracking" the protection is reasonable. So I open the assembly in Reflector and...</p>
<p>So this is what I want …</p><p>So I decided to register a piece of shareware, but when I went to the publisher's site, their domain had expired. Well, thinks I, I reckon that's a situation for which "cracking" the protection is reasonable. So I open the assembly in Reflector and...</p>
<p>So this is what I want to tell the shareware authors of the world: don't put your machine name in the code as a special debugging case and, really, <em>really</em> don't put the IP address, username, and password of your host in a utility function.</p>Decapitated Horse Pillow2006-07-08T01:00:00-10:002006-07-08T01:00:00-10:00larrytag:knowing.net,2006-07-08:/posts/2006/07/decapitated-horse-pillow/<p>Greatest. Pillow. Ever.</p>
<p><img alt="" height="413" src="http://kropserkel.com/Images/horsehead%20(6).jpg" width="550"></p>Tufte's Newest Book Available on Amazon2006-07-08T00:00:00-10:002006-07-08T00:00:00-10:00larrytag:knowing.net,2006-07-08:/posts/2006/07/tuftes-newest-book-available-on-amazon/<p>Edward Tufte's new book, <em><a href="https://www.amazon.com/exec/obidos/ASIN/0961392177/thinkinginnet-20">Beautiful Evidence</a></em>, is now available on Amazon. As <a href="https://www.amazon.com/exec/obidos/ASIN/020530902X/thinkinginnet-20"><em>The Elements of Style</em></a> is to writing <a href="https://www.amazon.com/exec/obidos/ASIN/0961392142/thinkinginnet-20"><em>The Visual Display of Quantitative Information</em></a> is to visual design. I don't think that Tufte has ever quite reached that level again, but that's a testament to <em>TVDoQI,</em> not a damning …</p><p>Edward Tufte's new book, <em><a href="https://www.amazon.com/exec/obidos/ASIN/0961392177/thinkinginnet-20">Beautiful Evidence</a></em>, is now available on Amazon. As <a href="https://www.amazon.com/exec/obidos/ASIN/020530902X/thinkinginnet-20"><em>The Elements of Style</em></a> is to writing <a href="https://www.amazon.com/exec/obidos/ASIN/0961392142/thinkinginnet-20"><em>The Visual Display of Quantitative Information</em></a> is to visual design. I don't think that Tufte has ever quite reached that level again, but that's a testament to <em>TVDoQI,</em> not a damning of his other work, almost all of which has been worthwhile (<a href="https://www.amazon.com/exec/obidos/ASIN/0961392150/thinkinginnet-20"><em>The Cognitive Style of Power Point</em></a>? Meh).</p>
<p>I've ordered it, review tk...</p>Evolving a Path-Finding Algorithm2006-07-07T23:00:00-10:002006-07-07T23:00:00-10:00larrytag:knowing.net,2006-07-07:/posts/2006/07/evolving-a-path-finding-algorithm/<p>Rick Strom has a nice page showing how he used genetic programming to create a path-finding algorithm. This is real genetic <em>programming</em>, which differs from a genetic <em>algorithm</em> in that GP evolves an actual behavior tree of (potentially) arbitrary size, while a GA evolves the optimal parameters for a complex …</p><p>Rick Strom has a nice page showing how he used genetic programming to create a path-finding algorithm. This is real genetic <em>programming</em>, which differs from a genetic <em>algorithm</em> in that GP evolves an actual behavior tree of (potentially) arbitrary size, while a GA evolves the optimal parameters for a complex but pre-existing function.</p>
<p>GP is generally less accessible than GA programming and virtually all GP code is implemented in LISP. Strom's code is in C++ and thus may be appealing to a broader audience. </p>Copy Source as HTML for VS20052006-07-07T02:00:00-10:002006-07-07T02:00:00-10:00larrytag:knowing.net,2006-07-07:/posts/2006/07/copy-source-as-html-for-vs2005/<p>Colin Coller's "Copy Source as HTML" is, without a doubt, worth the download. It now supports Visual Studio 2005.</p>.NET Parser Roundup2006-07-07T01:00:00-10:002006-07-07T01:00:00-10:00larrytag:knowing.net,2006-07-07:/posts/2006/07/net-parser-roundup/<p>Interested in writing a domain-specific language for the CLR? Explore:</p>
<p>Microsoft DSL Toolkit CTP : This is a step towards Microsoft's Software Factories concept (which seems to be gaining buzz at the marketing level even though I'm not sure that the "factories" being released are actually aligned with the technical concept …</p><p>Interested in writing a domain-specific language for the CLR? Explore:</p>
<p>Microsoft DSL Toolkit CTP : This is a step towards Microsoft's Software Factories concept (which seems to be gaining buzz at the marketing level even though I'm not sure that the "factories" being released are actually aligned with the technical concept). Anyhow, very different from traditional parser construction tools.</p>
<p>ANTLR (my favorite, but perhaps just because I've become familiar with it) \<a href="http://www.knowing.net/ct.ashx?id=3b286e95-4d12-4061-a650-c4e5e7b4d8df&url=http%3a%2f%2fwww.plas.fit.qut.edu.au%2fgppg%2fDefault.aspx"" target=_blank rel="noopener noreferrer">Garden Points Parser Generator (YACC-style, used in the creation of RubyCLR. If I hadn't climbed the ANTLR learning curve, I'd probably turn to this.)</p>
<p>\<a href="http://www.knowing.net/ct.ashx?id=3b286e95-4d12-4061-a650-c4e5e7b4d8df&url=http%3a%2f%2fwww.devincook.com%2fGOLDParser%2findex.htm"" target=_blank rel="noopener noreferrer">GOLD Parser</p>
<p>\<a href="http://www.knowing.net/ct.ashx?id=3b286e95-4d12-4061-a650-c4e5e7b4d8df&url=http%3a%2f%2fjparsec.codehaus.org%2fNParsec%2bTutorial"" target=_blank rel="noopener noreferrer">NParsec</p>
<p>\<a href="http://www.knowing.net/ct.ashx?id=3b286e95-4d12-4061-a650-c4e5e7b4d8df&url=http%3a%2f%2fpdos.csail.mit.edu%2f%7ebaford%2fpackrat%2f"" target=_blank rel="noopener noreferrer">Packrat Parsing and Parsing Expression Grammars</p>With SIGGRAPH Looming, MSR Releases Interesting Papers2006-07-07T00:00:00-10:002006-07-07T00:00:00-10:00larrytag:knowing.net,2006-07-07:/posts/2006/07/with-siggraph-looming-msr-releases-interesting-papers/<p>If it's Summer, it must be SIGGRAPH! All sorts of interesting things over at <a href="https://www.amazon.com/exec/obidos/ASIN/B0009G037A/thinkinginnet-20">Microsoft Digital Image Suite 2006</a>? ... anyway, other stuff they've shown, like automatic erasure of distracting objects, best shot selection, automatic compositing is all very impressive. Something to keep our hex-core processors humming in the year 2016 …</p><p>If it's Summer, it must be SIGGRAPH! All sorts of interesting things over at <a href="https://www.amazon.com/exec/obidos/ASIN/B0009G037A/thinkinginnet-20">Microsoft Digital Image Suite 2006</a>? ... anyway, other stuff they've shown, like automatic erasure of distracting objects, best shot selection, automatic compositing is all very impressive. Something to keep our hex-core processors humming in the year 2016.</p>Monopoly as an Interview Question for Software Developers2006-07-06T23:00:00-10:002006-07-06T23:00:00-10:00larrytag:knowing.net,2006-07-06:/posts/2006/07/monopoly-as-an-interview-question-for-software-developers/<p>Reginal Braithwaite's favorite interview question of programmers is: Sketch out a software design for a game of Monopoly (via Coding Horror). I dunno'. I like it in terms of being open-ended and non-trivial, but it's a real quagmire. I mean, my first reaction was to drop back to OO 101 …</p><p>Reginal Braithwaite's favorite interview question of programmers is: Sketch out a software design for a game of Monopoly (via Coding Horror). I dunno'. I like it in terms of being open-ended and non-trivial, but it's a real quagmire. I mean, my first reaction was to drop back to OO 101 and a simulation architecture ("Well, there's a <strong>Board</strong> and <strong>Spaces</strong> and <strong>Money</strong>...") just to put some stakes in the ground. But many different architectures <em>might</em> produce a solution: Braithwaite mentions a domain-specific language, maybe a "board game rules" inference engine, maybe something entirely different. Honestly, I can't imagine coming to a decision on <em>architecture</em>, much less beginning design, in thirty minutes or so.</p>Active Record as a Rule Engine2006-07-06T22:00:00-10:002006-07-06T22:00:00-10:00larrytag:knowing.net,2006-07-06:/posts/2006/07/active-record-as-a-rule-engine/<p>Snap! Ayende Rahein has shown how Active Record can be used to implement a rules engine. I'd had some thoughts about backward-chaining and LINQ lately as part of a forthcoming post, it's nice to see some groundwork laid.</p>
<p>BTW, this is via Sam Gentile, whose \<a href="http://www.knowing …</p><p>Snap! Ayende Rahein has shown how Active Record can be used to implement a rules engine. I'd had some thoughts about backward-chaining and LINQ lately as part of a forthcoming post, it's nice to see some groundwork laid.</p>
<p>BTW, this is via Sam Gentile, whose \<a href="http://www.knowing.net/ct.ashx?id=4de0b8d1-1158-478b-8c47-6c48975adb9d&url=http%3a%2f%2fcodebetter.com%2fblogs%2fsam.gentile%2fdefault.aspx"" target=_blank rel="noopener noreferrer">blog is very high quality and who's looking to increase his subscriber base. Definitely subscribe if you're looking for high-end advice on agile techniques for advanced .NET development.</p>Tina's cancer-free2006-07-06T22:00:00-10:002006-07-06T22:00:00-10:00larrytag:knowing.net,2006-07-06:/posts/2006/07/tinas-cancer-free/<p>I've mentioned my wife's breast cancer on this blog a few times and now, officially, it's my wife's <em>ex-</em>breast cancer. We're back home after recuperating from her 3rd surgery (if you need to recuperate from a surgery and are looking for a place with a fun view, I highly …</p><p>I've mentioned my wife's breast cancer on this blog a few times and now, officially, it's my wife's <em>ex-</em>breast cancer. We're back home after recuperating from her 3rd surgery (if you need to recuperate from a surgery and are looking for a place with a fun view, I highly recommend the Marriott Waikiki). Her pathology is clear, she's sick and tired of the compression wrap she has to wear for another two weeks, we raided the home-improvement fund, and life is good.</p>Apologies to the "Made in Express" Finalists2006-07-03T23:00:00-10:002006-07-03T23:00:00-10:00larrytag:knowing.net,2006-07-03:/posts/2006/07/apologies-to-the-made-in-express-finalists/<p>In an earlier post, I was thoughtlessly harsh about the finalists in Microsoft's "Made in Express" contest. It's come to my attention that at least several of the contestants felt insulted by the post. To them I apologize: I wish them nothing but the best and envy them their enthusiasm …</p><p>In an earlier post, I was thoughtlessly harsh about the finalists in Microsoft's "Made in Express" contest. It's come to my attention that at least several of the contestants felt insulted by the post. To them I apologize: I wish them nothing but the best and envy them their enthusiasm and involvement with such ambitious projects.</p>The Haar Transform2006-06-24T12:55:00-10:002006-06-24T12:55:00-10:00larrytag:knowing.net,2006-06-24:/posts/2006/06/the-haar-transform/<p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:6.8736in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:3.2243in"}
The Haar Transform
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.5854in"}
Saturday, June 24, 2006</p>
<p>9:52 AM
:::</p>
<p>::: {style="direction:ltr;margin-top:.477in;margin-left:0in;width:6.6902in …</p><p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:6.8736in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:3.2243in"}
The Haar Transform
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.5854in"}
Saturday, June 24, 2006</p>
<p>9:52 AM
:::</p>
<p>::: {style="direction:ltr;margin-top:.477in;margin-left:0in;width:6.6902in"}
In my posts "15 Exercises to Know a Programming Language," I suggested some exercises investigating the Haar wavelet, the simplest wavelet. I intended to leave it as is so that people could discover this fascinating subject on their own, but a couple of questions I've received have made it impossible for me to hold my tongue.</p>
<p>Okay, to review: The Haar transform works by transforming an array of values into an array of average and differences-from-the-average. Thus, [8, 4] becomes [6, 2], since (8 + 4) / 2 = 6 and 8 - (8 + 4) / 2 = 2. Similarly, [8, 4, 3, 9] becomes, first, [6, 6, 2, -3] (1st and 3rd positions as per previous, 2nd and 4th same transform applied to 3 and 9).</p>
<p>What happens when you apply this transform to a real-world signal? For instance, a photo. The left of Figure 1 shows "Lena" in lovely 256x256 grayscale. The right of the figure is a visualization of the very first step of the Haar transform. Cool, huh?
:::</p>
<p>::: {style="direction:ltr;margin-top:.1375in;margin-left:.1645in;width:6.6555in"}
<img alt="" height="960/" src="http://www.knowing.net/content/binary/image001123456.png" width="639"><br>
<img alt="" height="447/" src="http://www.knowing.net/content/binary/image0021.png" width="639"><br>
>
:::</p>
<p>::: {style="direction:ltr;margin-top:.2916in;margin-left:.1645in;width:6.7083in"}
The upper-left-most 64x64 block is now a quarter-resolution image of the original. That makes sense, since it's the average of the previously-created average. Now consider the 64x64 blocks as we move across (or down). First, we have the average of the edge-map: a low-resolution version of the 2-pixel scale edge map. The third block is edge-map of the average and the fourth block is an edge-map of the edge-map: hey! We're gathering data at different resolutions!</p>
<p>Okay, let's quickly revisit the fact that by scaling and clipping we're losing data, but if we just view this is a visualization of an underlying 256 x 256 array, notice how the "significant" data seems to be moving towards the edges: the upper-left (low-resolution version of the whole) is still recognizable, and in the lower-right (the both-directions edge-map of the edge-map) the data is becoming more chaotic: more "static-y." But in the middle we're creating a large area with large swaths of gray (I'm even stretching the grayscale so that there's at least one 0 and one 255 pixel). In other words, large areas where the real data are tending towards 0. If we fully recurse, what do we have?
:::</p>
<p>::: {style="direction:ltr;margin-top:.1944in;margin-left:.2479in;width:2.7083in"}
<img alt="" height="257/" src="http://www.knowing.net/content/binary/image0031.png" width="256">
:::</p>
<p>::: {style="direction:ltr;margin-top:.1062in;margin-left:.1645in;width:6.7083in"}
The upper-left pixel is now the average grayscale value of the entire picture: the ultimate low-resolution version. The rest of the data can't be parsed by our eyes, but is easily compressed. Now, if you're really building a wavelet compressor, you don't [scale]{style="font-style:italic"} and clip (as we did for this), but you clip when detail coefficients go below some epsilon. By experimenting with epsilon (making it dynamic?) you can get some very, very impressive compression results.</p>
<p>Some other interesting things to do with wavelets are scale the detail coefficients [up]{style="font-style:italic"} and reconstruct the signal: this amplifies low-contrast aspects of the original. Implications of that are left as an exercise to those interested in steganography and forensics.</p>
<p>Wavelets can also be used to aide pattern recognition in signals, since minor variations "move" towards the detail coefficients.</p>
<p>Oh, and you should try wavelet processing on sound. Equally fascinating stuff.
:::
:::</p>
<p>::: {style="text-align:left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: The Haar Transform.one</p>TOAD for MySql: Free Must-Have Tool2006-06-23T01:00:00-10:002006-06-23T01:00:00-10:00larrytag:knowing.net,2006-06-23:/posts/2006/06/toad-for-mysql-free-must-have-tool/<p>How did I miss this? The tool TOAD by Quest Software is utterly essential to developers using Oracle (and, I would guess, DB2). It's not quite <em>utterly</em> necessary for SQL Server developers who have access to one of the higher-end Visual Studio SKUs. But... ah hah! ... it is available for …</p><p>How did I miss this? The tool TOAD by Quest Software is utterly essential to developers using Oracle (and, I would guess, DB2). It's not quite <em>utterly</em> necessary for SQL Server developers who have access to one of the higher-end Visual Studio SKUs. But... ah hah! ... it is available for MySQL for free. (Irritating registration required: still worth it though.)</p>This is a review, tagged with hReview microformat2006-06-22T22:00:00-10:002006-06-22T22:00:00-10:00larrytag:knowing.net,2006-06-22:/posts/2006/06/this-is-a-review-tagged-with-hreview-microformat/<p>::: {.hreview}
[0.2]{.version style="DISPLAY: none"} </p>
<h2 class="summary" id="reviewing-the-hreview-microformat">Reviewing the hReview microformat</h2>
<p>Jun 23, 2006 by [Larry O'Brien]{.reviewer .fn} <a class="item url fn" href="http://microformats.org/wiki/hReview">hReview</a> </p>
<blockquote>
<p>???&#x2606&#x2606 Reviews are one of the most valuable pieces of information one could hope for, guiding purchases as they do, and one of the types of information where the …</p></blockquote><p>::: {.hreview}
[0.2]{.version style="DISPLAY: none"} </p>
<h2 class="summary" id="reviewing-the-hreview-microformat">Reviewing the hReview microformat</h2>
<p>Jun 23, 2006 by [Larry O'Brien]{.reviewer .fn} <a class="item url fn" href="http://microformats.org/wiki/hReview">hReview</a> </p>
<blockquote>
<p>???&#x2606&#x2606 Reviews are one of the most valuable pieces of information one could hope for, guiding purchases as they do, and one of the types of information where the Web is, I would argue, noticeably inferior to print (an exception would be the work of Websites like dpreview.com that essentially apply print-style rigor but happen to disseminate their work via the Web). hReview is a microformat for reviews. Interestingly, hReview is implemented as a series of CSS "class" attributes applied to standard HTML \<span>s. For instance, if you were to look at the source of this post, you should see the "stars" above are encapsulated in an element \<ABBR class="rating" title="3" worst="0" best="5">. It appears that this CSS "class" style for encoding is common, at least if my perusal of microformats.org is any indication. Although this is in contrast with RSS, the most successful microformat to date, it seems to me a good design trade-off: instead of creating a world of side-by-side files (as we have with RSS and FOAF) you end up with, at worst, "just" a perfectly readable bit of HTML. On the other hand, spidering is harder (to discover all the hReviews on a site, you have to spider all the HTML on the site, rather than just retrieving the, say, .hreview files). On the other, other hand, perhaps spidering is something best left to others (could you not use the Alexa index?). I give the hReview format 3 stars simply because I have nothing to compare it to. I will be interested in trying to find this review via Technorati microformat search.
:::</p>
</blockquote>WS-* vs. REST: Jigsaw vs. Tangram puzzle2006-06-22T03:00:00-10:002006-06-22T03:00:00-10:00larrytag:knowing.net,2006-06-22:/posts/2006/06/ws-vs-rest-jigsaw-vs-tangram-puzzle/<p>Harry Pierson quotes Nick Gall on the value of using a small set common modular operations (i.e. the REST / WS-Transfer approach):</p>
<blockquote>
<p>Modularity can be open or closed. Closed modularity is like a jigsaw puzzle. There are lots of individual pieces, but they can only be put together one way …</p></blockquote><p>Harry Pierson quotes Nick Gall on the value of using a small set common modular operations (i.e. the REST / WS-Transfer approach):</p>
<blockquote>
<p>Modularity can be open or closed. Closed modularity is like a jigsaw puzzle. There are lots of individual pieces, but they can only be put together one way. Open modularity is like a <a href="https://en.wikipedia.org/wiki/Tangram">tangram puzzle</a>. There are only seven pieces, but they can be put together in hundreds of different combinations.</p>
</blockquote>Novell cans CEO, CFO2006-06-21T23:00:00-10:002006-06-21T23:00:00-10:00larrytag:knowing.net,2006-06-21:/posts/2006/06/novell-cans-ceo-cfo/<p>Novell today terminated CEO Jack Messman and CFO Joseph Tibbetts. Messman is replaced immediately by Ronald Hovsepian, Dana Russell is interim CFO.</p>
<p>Novell has long been the hardest-to-parse of the major OS vendors. To say they "owned" the network market in the early 90s is to understate things. Their fumbles …</p><p>Novell today terminated CEO Jack Messman and CFO Joseph Tibbetts. Messman is replaced immediately by Ronald Hovsepian, Dana Russell is interim CFO.</p>
<p>Novell has long been the hardest-to-parse of the major OS vendors. To say they "owned" the network market in the early 90s is to understate things. Their fumbles have been extraordinary. Lately, I've liked their plan to become a major Linux vendor, but execution is everything, especially in the tricky world of making money by being a corporate supporter of OSS.</p>Solstice Dive: I Love Living in Hawai'i!2006-06-21T22:00:00-10:002006-06-21T22:00:00-10:00larrytag:knowing.net,2006-06-21:/posts/2006/06/solstice-dive-i-love-living-in-hawaii/<p>Yesterday, Tina and I went for a dive off Honokohau Harbor just north of Kailua Kona on the Big Island of Hawai'i, a 10-minute drive from our house. Tina and I mostly freedive; this was the first time we had tanks on our backs in five months. Two eagle rays …</p><p>Yesterday, Tina and I went for a dive off Honokohau Harbor just north of Kailua Kona on the Big Island of Hawai'i, a 10-minute drive from our house. Tina and I mostly freedive; this was the first time we had tanks on our backs in five months. Two eagle rays cruised the margin at 70', where the coral slope changed to sand. We went out onto the sand flats to watch a flashing school of scads and stalk a plain of garden eels. Coming back, we saw our friends the eagle rays again, this time at a cleaning station, where we could watch them easily.</p>
<p>Then, in unusually shallow water I saw a school of Heller's barracuda coming towards me. The usually shy species swirled around me. Wow! I thought, not realizing that I was missing the main show. Suddenly, further away, I saw a giant trevally thrashing a barracuda like a terrier with a rat. It was big: probably a 50# fish. I hooted in my regulator and pointed so Tina would see it.</p>
<p>When we surfaced, Tina told me that the reason the barracuda had swirled around me was because the trevally was herding them, cutting back and forth at lightning speed, only a few feet away from me. She had seen the whole thing.</p>
<p>Freediving's nice, but we've decided to go back for another dive at that spot this weekend!</p>Column on SOAs and Windows Vista2006-06-21T05:00:00-10:002006-06-21T05:00:00-10:00larrytag:knowing.net,2006-06-21:/posts/2006/06/column-on-soas-and-windows-vista/<p>My latest SD Times column is now available online.</p>Rise & Fall of CORBA: Very Good Article2006-06-21T03:00:00-10:002006-06-21T03:00:00-10:00larrytag:knowing.net,2006-06-21:/posts/2006/06/rise-fall-of-corba-very-good-article/<p>Michi Henning's article on the history of CORBA in the latest <em>Queue</em> is very good indeed. Henning has biases (he's got his own middleware solution) but the article never strays too far. It's opinionated, but accurate. Some of the timeline discussion is a little overblown but not too much (CORBA's …</p><p>Michi Henning's article on the history of CORBA in the latest <em>Queue</em> is very good indeed. Henning has biases (he's got his own middleware solution) but the article never strays too far. It's opinionated, but accurate. Some of the timeline discussion is a little overblown but not too much (CORBA's popularity didn't have quite the triumphant ballooning and deflating that he describes; there were critics and hesitation all along). Very worthwhile read for those interested in Web Services.</p>Jolt Award: Considering Dynamic Categorization via Tagging2006-06-21T01:00:00-10:002006-06-21T01:00:00-10:00larrytag:knowing.net,2006-06-21:/posts/2006/06/jolt-award-considering-dynamic-categorization-via-tagging/<p>The Jolt Awards are the major industry award for software development tools (compilers, libraries, etc.). One problem we face every year is proper classification of tools. Traditionally, we try to refine / fine tune the previous year's categories (Development Environments; Libraries, Frameworks, and Components; etc.). Problems arise frequently balancing the number …</p><p>The Jolt Awards are the major industry award for software development tools (compilers, libraries, etc.). One problem we face every year is proper classification of tools. Traditionally, we try to refine / fine tune the previous year's categories (Development Environments; Libraries, Frameworks, and Components; etc.). Problems arise frequently balancing the number of products in a category (20 entries in one category, 3 in another), when clearly competitive products end up in different categories (happens all the time with categories "Web Development Tools" versus "Development Environments"), and when a product cuts across categories.</p>
<p>Brainstorming yesterday, we wondered if it would not be better to generate the categories dynamically. One idea was to use checkboxes for predefined activities ("defect tracking," "code generation," "GIS mapping") and use some form of entropy measure to divvy them up into our 12-or-so categories. Easy enough mathematically. Another, more dramatic idea, was to create a tagging system for software tools and see if we could come up with a more dynamic view. The main challenge we see is that it seems like a small world: there are only a few hundred tool releases every year and it's difficult to imagine many people becoming engaged in the task of tagging them.</p>
<p>Do the Web 2.0 dynamics of distributed collaboration apply to small numbers? A del.icio.us for software development tools?</p>Vista Voice Recognition: Very Nice2006-06-20T23:00:00-10:002006-06-20T23:00:00-10:00larrytag:knowing.net,2006-06-20:/posts/2006/06/vista-voice-recognition-very-nice/<p>Vista has built-in voice recognition capabilities. One of the things that really jumped out in the Tablet PC was that the correction interface makes all the difference when it comes to using alternative input techniques: a service pack released for the Tablet a year or so after the initial launch …</p><p>Vista has built-in voice recognition capabilities. One of the things that really jumped out in the Tablet PC was that the correction interface makes all the difference when it comes to using alternative input techniques: a service pack released for the Tablet a year or so after the initial launch was a landmark in the usability of handwriting for text entry. I've just begun using voice recognition in Vista and am very impressed with the correction interface. It may have reached the tipping point for usability (at least with a sound-cancelling headset).</p>Garden Point Ruby.NET: True Compiler Available for Download2006-06-20T07:00:00-10:002006-06-20T07:00:00-10:00larrytag:knowing.net,2006-06-20:/posts/2006/06/garden-point-rubynet-true-compiler-available-for-download/<p>"[Wayne Kelly is] pleased to announce the preliminary Beta release of the Gardens Point Ruby.NET compiler. Note: this is not just a Ruby/.NET bridge, nor a Ruby Interpreter implemented on .NET, but a true .NET compiler. The compiler can be used to statically compile a Ruby source file …</p><p>"[Wayne Kelly is] pleased to announce the preliminary Beta release of the Gardens Point Ruby.NET compiler. Note: this is not just a Ruby/.NET bridge, nor a Ruby Interpreter implemented on .NET, but a true .NET compiler. The compiler can be used to statically compile a Ruby source file into a verifiable .NET v2.0 assembly or it can be used to directly execute a Ruby source file (compile, load and execute). Our implementation is not yet fully complete, but it is the only Ruby compiler that we know of for either the .NET or JVM platforms that is able to pass all 871 tests in the samples/test.rb installation test suite of Ruby 1.8.2.</p>
<p>Complete source code of our system can be downloaded from: http://plas.fit.qut.edu.au/Ruby.NET/Download.aspx</p>Stock Spam: Sell Signal?2006-06-20T07:00:00-10:002006-06-20T07:00:00-10:00larrytag:knowing.net,2006-06-20:/posts/2006/06/stock-spam-sell-signal/<p>I take it as a given that every stock touted via spam is, in fact, the subject of some sort of pump-and-dump scheme. That is, someone currently owning significant amounts of the stock (or options) is praising it, with the intent of causing upward motion, at which time they will …</p><p>I take it as a given that every stock touted via spam is, in fact, the subject of some sort of pump-and-dump scheme. That is, someone currently owning significant amounts of the stock (or options) is praising it, with the intent of causing upward motion, at which time they will sell their shares. So stock spam should be a reliable leading indicator of a loss of value. Therefore... Oh, you can't sell penny stocks short.</p>
<p>Never mind.</p>Project Glidepath: A Software Factory in Action?2006-06-20T03:00:00-10:002006-06-20T03:00:00-10:00larrytag:knowing.net,2006-06-20:/posts/2006/06/project-glidepath-a-software-factory-in-action/<p>The blog is too cluttered with marketing-speak, but the accompanying 22-minute video is very good in conveying what "Project Glidepath" is about: guidance (including, but not just code templates) for "MicroISVs" (1-10 person SD teams), integrated into the IDE. Too much "software factory" talk has been very rarified; it's nice …</p><p>The blog is too cluttered with marketing-speak, but the accompanying 22-minute video is very good in conveying what "Project Glidepath" is about: guidance (including, but not just code templates) for "MicroISVs" (1-10 person SD teams), integrated into the IDE. Too much "software factory" talk has been very rarified; it's nice to finally have an instantiation of the concept.</p>WS-* vs. Scrapheap2006-06-20T01:00:00-10:002006-06-20T01:00:00-10:00larrytag:knowing.net,2006-06-20:/posts/2006/06/ws-vs-scrapheap/<p>Apropos of yesterday's blog entries (XML: Unix Pipe or ASM? and WS-* vs. REST/POX: Revenge of Worse is Better): the always interesting Peter Coffee paints a picture of how WS-* approaches to SOA lead to success. Contrast with Brian Marick's \<a href="http://www.knowing.net/ct.ashx?id …</p><p>Apropos of yesterday's blog entries (XML: Unix Pipe or ASM? and WS-* vs. REST/POX: Revenge of Worse is Better): the always interesting Peter Coffee paints a picture of how WS-* approaches to SOA lead to success. Contrast with Brian Marick's \<a href="http://www.knowing.net/ct.ashx?id=c6662b33-b934-4107-be6e-2061bcd4d735&url=http%3a%2f%2fwww.testing.com%2fcgi-bin%2fblog%2f2006%2f06%2f06%23three-ages"" target=_blank rel="noopener noreferrer">Three Ages of Programming blog entry.</p>I, For One, Welcome the New Microsoft Robotics Studio2006-06-20T00:00:00-10:002006-06-20T00:00:00-10:00larrytag:knowing.net,2006-06-20:/posts/2006/06/i-for-one-welcome-the-new-microsoft-robotics-studio/<p>If we're to have any defense against the zombie hordes, it will be by the innovative work of a generation of master roboticists. This vanguard of humanity will, perhaps, learn their skills using the new Microsoft Robotics Studio, available for free download . The only excuse to not check this out …</p><p>If we're to have any defense against the zombie hordes, it will be by the innovative work of a generation of master roboticists. This vanguard of humanity will, perhaps, learn their skills using the new Microsoft Robotics Studio, available for free download . The only excuse to not check this out is if you are enrolled in a certified Summer program for ninjas.</p>Architectural Success: Tooting My Own Horn2006-06-19T23:00:00-10:002006-06-19T23:00:00-10:00larrytag:knowing.net,2006-06-19:/posts/2006/06/architectural-success-tooting-my-own-horn/<p>I recently talked to a former client for whom I'd architected a system 4-5 years ago. When I left, they had a technical staff of about 10 and 2 clients using the back-end system we developed. Today, they have the same size technical staff and 900 clients using the system …</p><p>I recently talked to a former client for whom I'd architected a system 4-5 years ago. When I left, they had a technical staff of about 10 and 2 clients using the back-end system we developed. Today, they have the same size technical staff and 900 clients using the system for their back-end. Yeah, baby!</p>Generated or ESL?2006-06-19T07:00:00-10:002006-06-19T07:00:00-10:00larrytag:knowing.net,2006-06-19:/posts/2006/06/generated-or-esl/<p>I screwed up an online order entry and wrote to customer service, saying that I wanted to affirm that I ordered two instead of one. This was how "Josh" began addressing the issue: "I recognize your concern that you want to affirm that you ordered...." Seems rather Eliza-esque to me …</p><p>I screwed up an online order entry and wrote to customer service, saying that I wanted to affirm that I ordered two instead of one. This was how "Josh" began addressing the issue: "I recognize your concern that you want to affirm that you ordered...." Seems rather Eliza-esque to me.</p>The War on Fluff2006-06-19T03:00:00-10:002006-06-19T03:00:00-10:00larrytag:knowing.net,2006-06-19:/posts/2006/06/the-war-on-fluff/<p>Fluffernutters banned from schools. Mmmm.... Fluffernutter. Between Fluff, Necco Wafers, Hoodsies, and Drake's Cakes, my Boston childhood was apparently in line with the "eat locally" value. I wonder where Spaghettios were invented...</p>WS-* vs. REST/POX: The Revenge of Worse is Better2006-06-18T23:30:00-10:002006-06-18T23:30:00-10:00larrytag:knowing.net,2006-06-18:/posts/2006/06/ws-vs-restpox-the-revenge-of-worse-is-better/<p>Richard Gabriel's famous essay "The Rise of Worse is Better" (which, incidentally, I still think was originally published by me when I was editing <em>AI Expert</em>) details the "survival characteristics" of two approaches to software design: the "MIT approach" and the "New Jersey approach" (Bell Labs). He proposes these characteristics …</p><p>Richard Gabriel's famous essay "The Rise of Worse is Better" (which, incidentally, I still think was originally published by me when I was editing <em>AI Expert</em>) details the "survival characteristics" of two approaches to software design: the "MIT approach" and the "New Jersey approach" (Bell Labs). He proposes these characteristics and values:</p>
<hr>
<div class="highlight"><pre><span></span><code> MIT refinement New Jersey refinement
</code></pre></div>
<p>Simplicity: The design must be simple, both in implementation and interface It is more important for the interface to be simple than the implementation. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in design.
Correctness: The design must be correct in all observable aspects. Incorrectness is simply not allowed. It is slightly better to be simple than correct.
Consistency: The design must not be inconsistent. A design is allowed to be slightly less simple and less complete to avoid inconsistency. Consistency is as important as correctness. The design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.
Completeness: The design must cover as many important situations as is practical. All reasonably expected cases must be covered. Simplicity is not allowed to overly reduce completeness. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.</p>
<hr>
<p>Gabriel's greatest leap was to put aside his emotional attachment to the MIT approach and observe that even in the intentionally bad picture presented here, the New Jersey approach (labeled "worse-is-better") has "better survival characteristics" than the MIT approach.</p>
<p>When considering my previous post on whether XML is the assembly language or UNIX pipe of Web 2.0, I realized that this was yet another battleground for these two philosophies, but ironically, the "usual suspects" seem to have reversed positions: it's primarily the large vendors who are promoting the MIT-like WS-* stack and the academics / free-thinkers / entrepreneurs who are promoting the simplicity of REST/POX.</p>
<p>Since, as I made it clear in the previous post, I'm a REST/POX proponent, this is somewhat dismaying. Particularly worth deep consideration is the final part of Gabriel's article, where he discusses how the approaches, once popular, evolve towards reuse and flexibility.</p>XML: The Unix Pipe or the Assembly Language of Web 2.0?2006-06-18T23:15:00-10:002006-06-18T23:15:00-10:00larrytag:knowing.net,2006-06-18:/posts/2006/06/xml-the-unix-pipe-or-the-assembly-language-of-web-20/<p>The sharp and capable Clemens Vaster says that "XML is the assembly language of Web 2.0," drawing a complexity/productivity analogy to higher-level programming languages, which everyone but Steve Gibson thinks are worthwhile tools. The upshot: "[we] have arrived at the point where matters have gotten so complicated that …</p><p>The sharp and capable Clemens Vaster says that "XML is the assembly language of Web 2.0," drawing a complexity/productivity analogy to higher-level programming languages, which everyone but Steve Gibson thinks are worthwhile tools. The upshot: "[we] have arrived at the point where matters have gotten so complicated that a layer of abstraction over pretty much all things XML has become a necessity for everyone who makes their money building customer solutions." Not everyone agrees: James Speer balks andTomas Restrepo \<a href="http://www.knowing.net/ct.ashx?id=244dc338-60ff-412f-bebf-23a1d0de625b&url=http%3a%2f%2fwww.winterdom.com%2fweblog%2f2006%2f06%2f18%2fWCFComplexityAndXML.aspx"" target=_blank rel="noopener noreferrer">says that that Clemens is conflating XML and WS-*.</p>
<p>I disagree even more vehemently. One of my favorite recent quotes was Ray Ozzie's quip that "RSS is the UNIX pipe of the Web." In addition to being encouragingly the sort of quote (technical, insightful, engaged with current trends) to encourage Microsoft watchers, I heartily agree with the implicit emphasis on flexibility.</p>
<p>One of the defining characteristics of assembly language is that it is inflexible: it's hard to write high-abstraction-level code in ASM (possible, but it's not facilitated by the language). Another characteristic is that it is dominated by implementation idioms. What springs to mind is is XOR AX,AX which a generation of x86 programmers used to set a register to 0 because it was mildly faster than MOV. Because \<a href="http://www.knowing.net/ct.ashx?id=244dc338-60ff-412f-bebf-23a1d0de625b&url=http%3a%2f%2fwww.joelonsoftware.com%2farticles%2fLeakyAbstractions.html"" target=_blank rel="noopener noreferrer">all abstractions leak, all "blackbox" systems are fuzzy and imperfect. No matter how worthwhile the aspirations of the WS-* stack, <em>in practice</em> systems using the stack will gather implementation-specific peculiarities. Perhaps no more than any other framework, but when tools are used to generate significant amounts of code, they inevitably produce low-abstraction code. Look at interface designers and the naive way they align controls: not by using a variable or directly referencing a dominant control, but by generating the same code over and over.</p>
<p>Similarly, if the XML moving between our Web 2.0 services is primarily tool-generated and difficult to comprehend, that will stand in the way of intermediaries adding value, which are an essential part of \<a href="http://www.knowing.net/ct.ashx?id=244dc338-60ff-412f-bebf-23a1d0de625b&url=http%3a%2f%2fwww.ics.uci.edu%2f%7efielding%2fpubs%2fdissertation%2ftop.htm"" target=_blank rel="noopener noreferrer">Web architectures. RSS is successful, not in spite of being "really simple," but in large part due to being so. The same is true of HTML. The same will be true of the next major innovation in Web 2.0.</p>Activesync Going Away: Reason Enough to Move to Vista2006-06-18T23:00:00-10:002006-06-18T23:00:00-10:00larrytag:knowing.net,2006-06-18:/posts/2006/06/activesync-going-away-reason-enough-to-move-to-vista/<p>ActiveSync is the worst piece of software I use on a regular basis. I hate it: the way it irregularly wakes up the device, the way it loses profiles, the way it deals with resolving conflicts, its bugs... Vista apparently has device synchronization built in to it, hopefully rewritten from …</p><p>ActiveSync is the worst piece of software I use on a regular basis. I hate it: the way it irregularly wakes up the device, the way it loses profiles, the way it deals with resolving conflicts, its bugs... Vista apparently has device synchronization built in to it, hopefully rewritten from the ground up. Of course, it's more likely just the buggy ActiveSync codebase now cooked in to the OS. Wait a second, maybe it's reason enough <em>not</em> to move to Vista...</p>Digg Homepage: W00t!2006-06-17T13:35:00-10:002006-06-17T13:35:00-10:00larrytag:knowing.net,2006-06-17:/posts/2006/06/digg-homepage-w00t/<p>My "knowing" exercises made the Digg homepage. Now I have to resist the temptation to check the comments every 15 minutes...</p>
<p>Failed...Okay, this time for sure...</p>Minesweeper: It Was the Other One2006-06-17T09:41:00-10:002006-06-17T09:41:00-10:00larrytag:knowing.net,2006-06-17:/posts/2006/06/minesweeper-it-was-the-other-one/<p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:6.5562in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:4.7902in"}
Minesweeper: It Was the Other One
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.5854in"}
Saturday, June 17, 2006</p>
<p>9:33 AM
:::</p>
<p>::: {style="direction:ltr;margin-top:.3013in;margin-left:.0826in …</p><p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:6.5562in"}
::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:4.7902in"}
Minesweeper: It Was the Other One
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.5854in"}
Saturday, June 17, 2006</p>
<p>9:33 AM
:::</p>
<p>::: {style="direction:ltr;margin-top:.3013in;margin-left:.0826in;width:6.4743in"}
<img alt="" height="316/" src="http://www.knowing.net/content/binary/image00112345.png" width="622">
:::
:::</p>
<p>::: {style="text-align:left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: Minesweeper It Was the Other One.one</p>"Start" Stopped2006-06-17T01:30:00-10:002006-06-17T01:30:00-10:00larrytag:knowing.net,2006-06-17:/posts/2006/06/start-stopped/<p>Weird. On one of my Tablets, the "Start" button has stopped working. It changes color when you mouse / pen over, but when you click on it ... nothing. Kind of a problem.</p>15 Exercises to Know a Programming Language: Part 3, Libraries, Frameworks, and Mashups2006-06-16T03:15:00-10:002006-06-16T03:15:00-10:00larrytag:knowing.net,2006-06-16:/posts/2006/06/15-exercises-to-know-a-programming-language-part-3-libraries-frameworks-and-mashups/<p>This is the final post in a series of 3 covering 15 exercises that provide a sense of a programming language's idioms and "feel." For newcomers, if you can't "jump in" and tackle these exercises in a particular programming language, don't embarrass yourself by claiming to know that language. For …</p><p>This is the final post in a series of 3 covering 15 exercises that provide a sense of a programming language's idioms and "feel." For newcomers, if you can't "jump in" and tackle these exercises in a particular programming language, don't embarrass yourself by claiming to know that language. For more experienced developers, these programs should be tough enough to require problem solving: try to embrace the language's idioms.</p>
<p>The first series of exercises dealt with calculations, the second with data structures. This final series is the fun one: exploiting libraries and unique environmental capabilities.</p>
<h2>Libraries</h2>
<ol>
<li>Write a program that outputs the current date and time to a Web page as a reversed ISO 8601-formatted value (i.e.: "2006-06-16T13:15:30Z" becomes "Z03:51:31T61-60-6002"). Create an XML interface (either POX or WS-*) to the same.</li>
</ol>
<p>Educational goals of exercise 11:<br>
"Hello, Web!"</p>
<hr>
<ol>
<li>Write a client-side program that can both scrape the above Web page and the XML return and redisplays the date in a different format.</li>
</ol>
<p>Educational goals of exercise 12:<br>
HTTP get, string parsing.</p>
<hr>
<ol>
<li>Write a daemon program that monitors an email account. When a strongly-encoded email arrives that decrypts to a valid ISO 8601 time, the program sets the system time to that value.</li>
</ol>
<p>Educational goals of exercise 13:<br>
Encryption, Email, OS libraries, daemons<br>
</p>
<hr>
<ol>
<li>Write a program that connects to your mail client, performs a statistical analysis of its contents (see Part 1, Part 2.</li>
</ol>15 Exercises to Know a Programming Language: Part 2, Data Structures2006-06-16T03:00:00-10:002006-06-16T03:00:00-10:00larrytag:knowing.net,2006-06-16:/posts/2006/06/15-exercises-to-know-a-programming-language-part-2-data-structures/<p>This is the 2nd in a series of 3 posts covering 15 exercises that provide a sense of a programming language's idioms and "feel." For newcomers, if you can't "jump in" and tackle these exercises in a particular programming language, don't embarrass yourself by claiming to know that language. For …</p><p>This is the 2nd in a series of 3 posts covering 15 exercises that provide a sense of a programming language's idioms and "feel." For newcomers, if you can't "jump in" and tackle these exercises in a particular programming language, don't embarrass yourself by claiming to know that language. For more experienced developers, these programs should be tough enough to require problem-solving: try to embrace the language's idioms.</p>
<p>The first series of exercises dealt with calculations. Now let's move on to structures: both data structures and trying to get a sense of how programs are structured.</p>
<h2>Data Structures</h2>
<ol>
<li>Write a class (or module or what-have-you: please map OOP terminology into whatever paradigm appropriate) that only stores objects of the same type as the first object placed in it and raises an exception if a non-compatible type is added. Write a program that uses this class, outputting "Store 1 contains n instances of type t and then iterating over the stored objects," and handles the exception. Now refactor the application so that the exception results in the creation of a new instance of your storage class and continues, so that the output would be "Store 1 contains n instance of type t, etc., Store 2 contains 1 instance of type u, etc."</li>
</ol>
<p>Educational goals of exercise 6:<br>
class creation, component structure, type behavior, memory allocation, exception/resumption, environment support for refactoring.</p>
<hr>
<ol>
<li>Using the language's idioms, implement a tree-based datastructure (splay, AVL, or red-black).</li>
</ol>
<p>Educational goals of exercise 7:<br>
In-memory data structures. Algorithm expression. Idioms. Memory and type issues.</p>
<hr>
<ol>
<li>Create a new type that uses a custom comparator (i.e., overrides "Equals"). Place more of these objects than can fit in memory into the datastructure created above as well as into standard libraries, put more objects into it than can fit in memory. Compare performance of the standard libraries with your own implementation.</li>
</ol>
<p>Educational goals of exercise 8:<br>
You should really have a "sense" of the program's memory management by this point. Not complete knowledge, but enough sense to begin work.</p>
<hr>
<ol>
<li>Implement an iterator for your datastructure. Consider multithreading issues.</li>
</ol>
<p>Educational goals of exercise 9:<br>
Refactoring, expressiveness, design patterns, concurrency model.</p>
<hr>
<ol>
<li>Write a multithreaded application that uses your data structure, comparable types, and iterators to implement the type-specific storage functionality as described in Exercise 6. How do you deal with concurrent inserts and traversals?</li>
</ol>
<p>Educational goals of exercise 10:<br>
Understanding of data structures, Concurrency issues (locking, races, etc.).</p>
<h2>Discussion</h2>
<p>Exercise 10 is the sort of problem that I would expect any job applicant or intern to speak to in their interview process and be able to work on productively. Note that I'm not talking about having memorized the tree-balancing algorithms -- I don't give a rat's ass if someone remembers how red-black trees work or even if they remember its Big O characteristics. But they must know how datastructures in language <em>x</em> work -- that's fundamental.</p>
<p>Language-wise, in my opinion, this is a set of exercises where C and C++ shine -- at least until the multithreading stuff. Languages with list-processing idioms will also do well initially, but may have memory-consumption issues (especially functional languages). Ultimately, I think that the managed C-derived language (Java and C#) have the easiest route to Exercise 9 and then face serious shortcomings with Exercise 10, where concurrency issues play the major role. In my opinion, concurrency is going to become the central issue in professional development in the next half-decade, so these shortcomings are very significant.</p>
<p>Part 1. <a href="http://www.knowing.net/index.php/2006/06/16/15-exercises-to-know-a-programming-language-part-3-libraries-frameworks-and-mashups/">Part 3</a></p>15 Exercises to Know A Programming Language: Part 12006-06-16T02:45:00-10:002006-06-16T02:45:00-10:00larrytag:knowing.net,2006-06-16:/posts/2006/06/15-exercises-to-know-a-programming-language-part-1/<p>There's a popular post on Digg right now entitled "<a href="http://smartprogrammer.blogspot.com/2006/04/15-exercises-for-learning-new.html">15 Exercises for Learning a New Programming Language</a>." The list is discouragingly non-structural: calculate a function and print out one thing if it's \<= , another if it's greater, get system time and format it, etc. The exercises, while fine enough for familiarizing …</p><p>There's a popular post on Digg right now entitled "<a href="http://smartprogrammer.blogspot.com/2006/04/15-exercises-for-learning-new.html">15 Exercises for Learning a New Programming Language</a>." The list is discouragingly non-structural: calculate a function and print out one thing if it's \<= , another if it's greater, get system time and format it, etc. The exercises, while fine enough for familiarizing yourself with string formatting, don't really provide a sense of a programming language.</p>
<p>If you applied for a job, or even an internship, using language <em>x</em>, you would embarrass yourself if you did not know considerably more than what's covered in Prashant Mhatre's list. My exercises are harder, but require no more than the minimal level of competence required to claim that one "knows" a programming language.</p>
<p>If you're a more seasoned developer, these exercises will highlight the more salient differences between languages. The hope is that, rather than just getting "the answer," these exercises are hard enough to engage you but simple enough so as to be a place to explore the new language's idioms. If, as I believe, there's no such thing as a universally "better programming language" but only languages that better fit our own personalities and experiences, these exercises should be hard enough to require problem-solving in the new language, but straightforward enough that the problems are language and library related, not algorithmic.</p>
<p>The series has 3 parts: calculations, data structures, and libraries.</p>
<h2>Calculations</h2>
<p>At the end of the first series, you will have implemented a non-trivial CPU-intensive application with a GUI front-end. You will have a good sense of the language's expressiveness for calculations and have seen some corner cases: underflow, stack overflow (probably), GUI behavior during a CPU-intense calc. You'll undoubtedly have made some mistakes and dealt with the debugging experience. Hopefully, you'll have separated model and view and have some idea of how a larger project would be organized. Hopefully, you'll have turned to unit-testing to ratchet your progress and will have a sense of the iterative "feel" of the language and environment.</p>
<ol>
<li>
<p>Write a program that takes as its first argument one of the words 'sum,' 'product,' 'mean,' or 'sqrt' and for further arguments a series of numbers. The program applies the appropriate function to the series.</p>
<p>Educational goals of exercise 1:<br>
Requires basic control flow, basic operators, and the math library. (Complex numbers available?)<br>
What are arrays like?<br>
What about parsing / implicit conversion?<br>
Are functions first-class (availability of Map() and Apply())?<br>
Error handling: What happens on invalid data?</p>
</li>
</ol>
<hr>
<ol>
<li>
<p>Write a program that calculates a Haar wavelet on an array of numbers. The Haar transform works as follows: calculate the average and difference-from-the-average of pairs of input values. Gather averages as the first part of the returned array, "detail coefficients" as the second. Recurse until the first value is the average is the entire series (steps required = log base 2(array length)).</p>
<p>For instance, Haar([8, 5]) -> [6.5, 1.5]<br>
6.5 = (8+5)/2<br>
1.5 = 8 - (8+5)/2)</p>
<p>Haar([8, 5, 7, 3) -> [5.75, 1.75, 0.75, -0.25]<br>
Step 1 -> [6.5, 5, 1.5, 2]<br>
1st and 3rd values as prior example, 2nd and 4th transform applied to 7 and 3<br>
Step 2 -> Recurse, using [6.5, 5] and [1.5, 2] as bases. (N.B.: Average([8,5,7,3]) == 5.75)</p>
<p>Educational goals of exercise 2:<br>
How are functions declared and organized?<br>
What about recursion? What happens when I pipe in a megabyte of data? (Is tail-recursion available?)<br>
How does the environment support unit-testing?<br>
Exception handling: what if the array has an odd-numbered length?<br>
Data representation -- what about rounding errors on very small coefficients?</p>
<hr>
</li>
<li>
<p>Write a program that takes as its arguments a the name of a bitmapped image (Start with images from the Waterloo Repertoire Grayset 2: http://links.uwaterloo.ca/greyset2.base.html) . Apply the Haar wavelet to the pixel values. Save the results to a file.</p>
<p>Educational goals of exercise 3:<br>
File manipulation and binary I/O.<br>
Standard (?) library.<br>
Type-strictness (what's involved in treating a pixel value as a number?)<br>
Emerging sense of program structure / refactoring.</p>
<hr>
</li>
<li>
<p>Using the outputs of the previous exercise file, write a GUI program that reconstitutes the original bitmap (N.B.: The Haar wavelet is lossless).<br>
Educational goals of exercise 4:<br>
GUI behavior, including events, file manipulation, and behavior with long-running calculation (async calcs?).</p>
<hr>
</li>
<li>
<p>Write a GUI program that can:<br>
i. Open bitmapped images in a variety of formats,<br>
ii. Apply the Haar partially (e.g., a "Do a step" button that applies the Haar transform but does not recurse).<br>
iii. Visualize a partial Haar transform (i.e., scale the detail coefficients into the range 0-255 and display them as pixel values)<br>
iv. Clip to 0 coefficients whose absolute values are \< x. (N.B.: This is a lossy-y transform that allows for great compression)<br>
v. Reconstitute a bitmap from values created by the above transform.<br>
vi. Displays the time it takes a bitmap to be transformed, clipped, and reconstituted.<br>
Mental exercises: What could be reused if I wanted to do these exercises with sound? How would a plug-in model for wavelet functions work? How would a purely dynamic wavelet function (i.e., fill a textfield with code) work?<br>
Educational goals of exercise 5:<br>
Performance.<br>
Non-trivial program structure.<br>
Component model, dynamism.<br>
Environment: debugging, iterative development, testing, version control, refactoring, etc.</p>
</li>
</ol>
<h2>Discussion</h2>
<p>These exercises favor functional languages and those with list-processing capabilities. Lisp, Ruby, and Smalltalk programmers would breeze through the coding aspects of these exercises easily, although the GUI exercises might reveal performance issues. Those using imperative non-managed languages (C and C++, possibly Pascal) may find the lack of a standard GUI library troublesome. However, their performance on the bitmap manipulation tasks ought to be high. Those using managed languages such as Java, C#, and VB.NET will find the GUI portions easy, but may find that their program development isn't as smoothly iterative as development in the more dynamic languages have. Such programmers may also see "spikes" in their performance as automatic memory management kicks in.</p>
<p><a href="http://www.knowing.net/index.php/2006/06/16/15-exercises-to-know-a-programming-language-part-2-data-structures/">Part 2</a></p>Ozzie, Mundie up. Ballmer stays.2006-06-15T11:29:00-10:002006-06-15T11:29:00-10:00larrytag:knowing.net,2006-06-15:/posts/2006/06/ozzie-mundie-up-ballmer-stays/<p>Ozzie is going to assume the "chief software architect," role, Mundie is going to become the chief strategist. Stock market reaction forthcoming...</p>Gates Press Release2006-06-15T11:26:00-10:002006-06-15T11:26:00-10:00larrytag:knowing.net,2006-06-15:/posts/2006/06/gates-press-release/<p>http://www.microsoft.com/presspass/press/2006/jun06/06-15CorpNewsPR.mspx</p>As goes Scoble, goes Gates...2006-06-15T11:24:00-10:002006-06-15T11:24:00-10:00larrytag:knowing.net,2006-06-15:/posts/2006/06/as-goes-scoble-goes-gates/<p>Bill Gates is going to step down in August 2008. Details tk.</p>Northwestern Hawaiian Islands Sanctuary2006-06-15T07:00:00-10:002006-06-15T07:00:00-10:00larrytag:knowing.net,2006-06-15:/posts/2006/06/northwestern-hawaiian-islands-sanctuary/<p>Good environmental news is all too rare: The Northwestern Hawaiian Islands have become the world's largest protected oceanic environment.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0792241886/thinkinginnet-20"><img alt="" src="http://images.amazon.com/images/P/0792241886.01.MZZZZZZZ.jpg"></a>A few weeks ago we saw a presentation by the author of "<a href="https://www.amazon.com/exec/obidos/ASIN/0792241886/thinkinginnet-20">Archipelago</a>." Her photos were incredible, but the thing that stuck with me was the statistic that 55% of the …</p><p>Good environmental news is all too rare: The Northwestern Hawaiian Islands have become the world's largest protected oceanic environment.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0792241886/thinkinginnet-20"><img alt="" src="http://images.amazon.com/images/P/0792241886.01.MZZZZZZZ.jpg"></a>A few weeks ago we saw a presentation by the author of "<a href="https://www.amazon.com/exec/obidos/ASIN/0792241886/thinkinginnet-20">Archipelago</a>." Her photos were incredible, but the thing that stuck with me was the statistic that 55% of the biomass off the islands are apex predators: sharks, jacks, and tunas. On the main islands, that number is 5%. I'll never see the Great Plains covered with buffalo, and I may never be able to afford a trip to the Serengeti, but I've been fortunate enough to dive some places before industrialized fishing and the grandeur is beyond description. I'm thrilled that a great oceanic environment has gained protection.</p>Assertions work: Empirical Study2006-06-15T02:00:00-10:002006-06-15T02:00:00-10:00larrytag:knowing.net,2006-06-15:/posts/2006/06/assertions-work-empirical-study/<p>You probably knew that there was a correlation between assertion and defect density, but <a href="ftp://ftp.research.microsoft.com/pub/tr/TR-2006-54.pdf">here's a paper that proves it</a>.</p>
<p><strong>Assert(Use_Assertions)</strong></p>Nick Hodges Becomes Product Manager of Delphi2006-06-14T22:15:00-10:002006-06-14T22:15:00-10:00larrytag:knowing.net,2006-06-14:/posts/2006/06/nick-hodges-becomes-product-manager-of-delphi/<p>Nick Hodges has been named Product Manager of Delphi at "DevCo," the to-be-named, to-be-formalized spin-off of Borland's languages division. His blog.</p>Learning Lisp or Ruby2006-06-14T22:00:00-10:002006-06-14T22:00:00-10:00larrytag:knowing.net,2006-06-14:/posts/2006/06/learning-lisp-or-ruby/<p>My favorite technical book of the past year was <a href="https://www.amazon.com/exec/obidos/ASIN/1590592395/thinkinginnet-20">Practical Common Lisp</a> by Peter Seibel. Believe me, if it could convince me to return to Lisp, it's a well-written book.</p>
<p>However, all the cool kids are learning Ruby. Ruby has some Lisp-like flexibility in comparison to more popular languages like …</p><p>My favorite technical book of the past year was <a href="https://www.amazon.com/exec/obidos/ASIN/1590592395/thinkinginnet-20">Practical Common Lisp</a> by Peter Seibel. Believe me, if it could convince me to return to Lisp, it's a well-written book.</p>
<p>However, all the cool kids are learning Ruby. Ruby has some Lisp-like flexibility in comparison to more popular languages like Java and C#, but it doesn't have Lisp's elegance / terseness of syntax. If you want to learn Ruby, the best book is <a href="https://www.amazon.com/exec/obidos/ASIN/0974514055/thinkinginnet-20">Programming Ruby: The Pragmatic Programmers' Guide, Second Edition</a>.</p>Can't We All Just Interoperate, Part 22006-06-14T02:00:00-10:002006-06-14T02:00:00-10:00larrytag:knowing.net,2006-06-14:/posts/2006/06/cant-we-all-just-interoperate-part-2/<p>Success! I can access Tablet SDK functionality from Java. Rather than use COM, my original tactic, I did what I joked about: used C++/CLI so that the call is Java->Unmanaged C++->C (Win32)->Managed C++! Pretty funny, but not all that hard to follow in the source code …</p><p>Success! I can access Tablet SDK functionality from Java. Rather than use COM, my original tactic, I did what I joked about: used C++/CLI so that the call is Java->Unmanaged C++->C (Win32)->Managed C++! Pretty funny, but not all that hard to follow in the source code. I have to say, I'm going to guess I'm the first person to write code to convert a jstring into a char* and pass that into a gcnew System::String!</p>
<p>Look for an article on DevX by the end of the month.</p>Visual Studio: Database Edition CTP Now Available2006-06-13T23:00:00-10:002006-06-13T23:00:00-10:00larrytag:knowing.net,2006-06-13:/posts/2006/06/visual-studio-database-edition-ctp-now-available/<p>The first CTP drop of the new VS2005 geared for DBAs is now available for download.</p>Morgenstern on Vista Flash Technologies2006-06-13T22:00:00-10:002006-06-13T22:00:00-10:00larrytag:knowing.net,2006-06-13:/posts/2006/06/morgenstern-on-vista-flash-technologies/<p>eWeek's David Morgenstern is skeptical of Microsoft's ReadyBoost and ReadyDrive technologies. These are Vista capabilities that allow flash memory to increase apparent RAM and speed boot times respectively. As far as ReadyBoost goes, I agree: the idea of depending on a USB dongle to increase RAM seems very hinky to …</p><p>eWeek's David Morgenstern is skeptical of Microsoft's ReadyBoost and ReadyDrive technologies. These are Vista capabilities that allow flash memory to increase apparent RAM and speed boot times respectively. As far as ReadyBoost goes, I agree: the idea of depending on a USB dongle to increase RAM seems very hinky to me. There's an enormous step down in access speed from RAM to Flash and Flash memory can wear out (MS surely uses the algorithms that mitigate, but not solve, this issue).</p>
<p>ReadyDrive, on the other hand, I quite like. This is the idea that your hard-drive will have some integrated Flash in which it caches boot information. This time, there's an enormous step <em>up</em> in speed from loading a driver from the hard drive to loading it from Flash (especially if instead of actually loading stuff, you're just bltting the in-memory image from Flash to RAM). Morgenstern points out the orders-of-magnitude disparity in mean-time-to-failure between Flash and hard-drives, which may be valid, but I wonder if both don't exceed the reasonable operational time of a drive.</p>Free Satellite TV2006-06-13T08:00:00-10:002006-06-13T08:00:00-10:00larrytag:knowing.net,2006-06-13:/posts/2006/06/free-satellite-tv/<p>I was reading an article about Libya and it mentioned, as is common in stories from developing nations, the many satellite dishes you see. This is something I can personally vouch for, having seen many satellite dishes in places like Papua New Guinea and Irian Jaya. What I don't get …</p><p>I was reading an article about Libya and it mentioned, as is common in stories from developing nations, the many satellite dishes you see. This is something I can personally vouch for, having seen many satellite dishes in places like Papua New Guinea and Irian Jaya. What I don't get, though, is that they obviously aren't paying DirecTV \<span class="math">\(50 a month for access. I kinda' doubt they're paying \\)</span>10 a month. It seems like the world is awash in free satellite TV channels. How do I get me some of that?</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Google Minesweeper Poised To Dethrone XBox3602006-06-13T05:00:00-10:002006-06-13T05:00:00-10:00larrytag:knowing.net,2006-06-13:/posts/2006/06/google-minesweeper-poised-to-dethrone-xbox360/<p>Well done. <em>via</em> \<a href="http://www.knowing.net/ct.ashx?id=2b24309b-4cf6-414b-b27e-c5a346a93128&url=http%3a%2f%2fswigartconsulting.blogs.com%2ftech_blender%2f"" target=_blank rel="noopener noreferrer">Scott Swigart</p>Wes Moise on Text in GDI+2006-06-13T02:00:00-10:002006-06-13T02:00:00-10:00larrytag:knowing.net,2006-06-13:/posts/2006/06/wes-moise-on-text-in-gdi/<p>Wesner Moise rants about the problems in GDI+. It's a good read and contains a link to a crucial KnowledgeBase article.You wouldn't think that one would fall back to GDI as an example of a "good" text-layout API, but at least it's lightweight. WPF has a vastly improved API …</p><p>Wesner Moise rants about the problems in GDI+. It's a good read and contains a link to a crucial KnowledgeBase article.You wouldn't think that one would fall back to GDI as an example of a "good" text-layout API, but at least it's lightweight. WPF has a vastly improved API for text-layout, but the first comment on the post sent a chill down my spine: "Wait until you try getting performance out of WPF Text."</p>Can't We All Just Interoperate?2006-06-12T22:00:00-10:002006-06-12T22:00:00-10:00larrytag:knowing.net,2006-06-12:/posts/2006/06/cant-we-all-just-interoperate/<p>So I'm trying to write a program to manipulate the Tablet PC Input Panel from within a Java application. So I have to use JNI to interop with a native .DLL written in C++. My DLL uses Win32 to find the handles to the Java application edit windows and then …</p><p>So I'm trying to write a program to manipulate the Tablet PC Input Panel from within a Java application. So I have to use JNI to interop with a native .DLL written in C++. My DLL uses Win32 to find the handles to the Java application edit windows and then uses COM to manipulate the TIP. I dunno': I feel like throwing some gcroot\<String \^>s in there, just to cover all bases.</p>Amazon Reader: Not Recommended2006-06-12T18:29:00-10:002006-06-12T18:29:00-10:00larrytag:knowing.net,2006-06-12:/posts/2006/06/amazon-reader-not-recommended/<p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 6.133in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 6.133in; DIRECTION: ltr"}
<img alt="" height="291" src="http://www.knowing.net/content/binary/image0011234.png" width="562/"></p>
<p>I just bought David Goldberg's "<a href="https://www.amazon.com/exec/obidos/ASIN/1402070985/thinkinginnet-20">The Design of Innovation</a>," (his book "<a href="https://www.amazon.com/exec/obidos/ASIN/0201157675/thinkinginnet-20">Genetic Algorithms in Search Optimization and Machine Learning</a>," is an exemplary piece of technical writing). On checkout from Amazon …</p><p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 6.133in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 6.133in; DIRECTION: ltr"}
<img alt="" height="291" src="http://www.knowing.net/content/binary/image0011234.png" width="562/"></p>
<p>I just bought David Goldberg's "<a href="https://www.amazon.com/exec/obidos/ASIN/1402070985/thinkinginnet-20">The Design of Innovation</a>," (his book "<a href="https://www.amazon.com/exec/obidos/ASIN/0201157675/thinkinginnet-20">Genetic Algorithms in Search Optimization and Machine Learning</a>," is an exemplary piece of technical writing). On checkout from Amazon, I was asked if, for \<span class="math">\(16, I wanted to upgrade and get digital access to the book's content. (It's a \\)</span>68 book.) I said "yes," to investigate this new feature. It is not worth it. Look at this screen shot of the 200% zoom. as you can see, the text is bitmapped and hard to read. (You can even see noise from the page background.)</p>
<p>I am not an e-book fanatic, but am beginning to come around. Certainly, for me Zinio is better than waiting a month for a hard copy (the joys of Hawaii). I feel strongly, though, that you have to have vector fonts, this will be doubly true with Vista's much-improved display model.
:::
:::</p>
<p>::: {style="TEXT-ALIGN: left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: I just bought David Goldberg's \$.one</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>.NET Framework 3.0: Indigo issues2006-06-12T00:00:00-10:002006-06-12T00:00:00-10:00larrytag:knowing.net,2006-06-12:/posts/2006/06/net-framework-30-indigo-issues/<p>The first two versions of Enterprise JavaBeans had a crucial problem: "enterprise" objects had a life-cycle different than that of "plain old Java objects." Types were loaded differently, instantiated differently, and the rules for them going away were different. The justification boils down to "things are different over the network …</p><p>The first two versions of Enterprise JavaBeans had a crucial problem: "enterprise" objects had a life-cycle different than that of "plain old Java objects." Types were loaded differently, instantiated differently, and the rules for them going away were different. The justification boils down to "things are different over the network," which is perfectly true, but ignores the problem that programmers balk at the requirement of juggling different life-cycles within the same solution.</p>
<p>WinFX / .NET Framework 3.0 is flirting with the same issue. Indigo/WCF, while having superior mechanics to EJB, also presents a different life-cycle for "enterprise" objects. As I said in "Should I Stay Or Should I Indigo?" last year, Microsoftian Don Box said WCF "extrud[es] a type system that we can think about independently of our CLR types," the visibility of the "service facade" is independent of the "in-memory facade," and WCF has attribute-based life-cycle control. By saying "it's the .NET Framework 3.0" I think MS is exactly repeating the EJB mistake. It is important that things that <em>are</em> different be packaged / named differently.</p>Target .NET 1.x from Visual Studio 20052006-06-11T22:00:00-10:002006-06-11T22:00:00-10:00larrytag:knowing.net,2006-06-11:/posts/2006/06/target-net-1x-from-visual-studio-2005/<p>"MSBee" is a free MS Build task that allows you to target earlier versions of the .NET Framework from within Visual Studio 2005. Out of the box, VS2005 will only allow you to compile for .NET 2.0.</p>
<p>This is a very helpful utility: just a few months ago I …</p><p>"MSBee" is a free MS Build task that allows you to target earlier versions of the .NET Framework from within Visual Studio 2005. Out of the box, VS2005 will only allow you to compile for .NET 2.0.</p>
<p>This is a very helpful utility: just a few months ago I had a client balk at a project because we said "You'll either have to run side-by-side .NET 1.0 and 2.0 assemblies, or the team will have to downgrade to VS2003, or we'll have to move to command-line compiles."</p>MSDN Wiki - Great Idea2006-06-11T04:00:00-10:002006-06-11T04:00:00-10:00larrytag:knowing.net,2006-06-11:/posts/2006/06/msdn-wiki-great-idea/<p>MSDN has created a Wiki. This is a great idea. Just look at P/Invoke.NET to get a sense of how helpful a Wiki can be for user documentation. <em>via</em> \<a href="http://www.knowing.net/ct.ashx?id=3e526214-11b1-482a-911d-12f3aa8b713d&url=http%3a%2f%2ffeeds.feedburner.com%2fAContinuousLearnersWeblog%3fm …</p><p>MSDN has created a Wiki. This is a great idea. Just look at P/Invoke.NET to get a sense of how helpful a Wiki can be for user documentation. <em>via</em> \<a href="http://www.knowing.net/ct.ashx?id=3e526214-11b1-482a-911d-12f3aa8b713d&url=http%3a%2f%2ffeeds.feedburner.com%2fAContinuousLearnersWeblog%3fm%3d283"" target=_blank rel="noopener noreferrer">Steve Pietrek</p>Zalman Ultra Quiet CPU Cooler: Not So Much2006-06-11T02:00:00-10:002006-06-11T02:00:00-10:00larrytag:knowing.net,2006-06-11:/posts/2006/06/zalman-ultra-quiet-cpu-cooler-not-so-much/<p>I bought a couple Zalman Ultra-Quiet CPU Coolers for my still-unfinished dual-processor system, discovered that I couldn't use them due to space issues with my MSI dual-core motherboard. So I put one on my old system. It's quieter than the stock Intel Pentium fan, but so is a coqui frog …</p><p>I bought a couple Zalman Ultra-Quiet CPU Coolers for my still-unfinished dual-processor system, discovered that I couldn't use them due to space issues with my MSI dual-core motherboard. So I put one on my old system. It's quieter than the stock Intel Pentium fan, but so is a coqui frog (Hawaii reference. Or, apparently, Puerto Rico. Coqui's are loud). I really think water cooling is in my future.</p>I hate this trend towards (not very) contextual ads disguised as links2006-06-10T23:00:00-10:002006-06-10T23:00:00-10:00larrytag:knowing.net,2006-06-10:/posts/2006/06/i-hate-this-trend-towards-not-very-contextual-ads-disguised-as-links/<p>I'm as much a fan of the idea of making some money off my Web writings as the next guy, but I <strong>hate</strong> these new ads that put ads on keywords in the middle of content. The trend seems to be "double underlines mean ads." Totally freaking intrusive and built …</p><p>I'm as much a fan of the idea of making some money off my Web writings as the next guy, but I <strong>hate</strong> these new ads that put ads on keywords in the middle of content. The trend seems to be "double underlines mean ads." Totally freaking intrusive and built to exploit a decade's worth of training in the way the WWW functions.</p>Scoble Leaves Microsoft2006-06-10T22:00:00-10:002006-06-10T22:00:00-10:00larrytag:knowing.net,2006-06-10:/posts/2006/06/scoble-leaves-microsoft/<p>Huh.</p>Assembly Language Programming2006-06-10T04:00:00-10:002006-06-10T04:00:00-10:00larrytag:knowing.net,2006-06-10:/posts/2006/06/assembly-language-programming/<p>Okay, if you're interested in assembly language programming, read <a href="https://www.amazon.com/exec/obidos/ASIN/1886411972/thinkinginnet-20">The Art of Assembly Language</a> and use the included HLA compiler.</p>
<p>But, if you just need to occasionally compile some pre-existing code, MASM 8 is now available for download from Microsoft.</p>
<p>But seriously, read <a href="https://www.amazon.com/exec/obidos/ASIN/1886411972/thinkinginnet-20">The Art of Assembly Language</a>.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/1886411972/thinkinginnet-20"><img alt="" src="http://images.amazon.com/images/P/1886411972.01.MZZZZZZZ.jpg"></a></p>ACM Membership Provides Limited Safari Access2006-06-10T01:00:00-10:002006-06-10T01:00:00-10:00larrytag:knowing.net,2006-06-10:/posts/2006/06/acm-membership-provides-limited-safari-access/<p>I have mixed feelings about <a href="https://www.amazon.com/exec/obidos/ASIN/0596005555/thinkinginnet-20">AI for Game Developers</a>." In the full Safari bookshelf, the AI category has <a href="https://www.amazon.com/exec/obidos/ASIN/0672321386/thinkinginnet-20">Voice Application Development with VoiceXML</a> which is a much more "enterprise-y" type of read.</p>
<p>On the other hand, even in "full Safari" there's only 8 books in the AI category, only 3 …</p><p>I have mixed feelings about <a href="https://www.amazon.com/exec/obidos/ASIN/0596005555/thinkinginnet-20">AI for Game Developers</a>." In the full Safari bookshelf, the AI category has <a href="https://www.amazon.com/exec/obidos/ASIN/0672321386/thinkinginnet-20">Voice Application Development with VoiceXML</a> which is a much more "enterprise-y" type of read.</p>
<p>On the other hand, even in "full Safari" there's only 8 books in the AI category, only 3 of which are <em>really</em> about AI, and all 3 of those are game-focused. To me, the opposite type of approach would be more appealing: access to a large number of academic titles.</p>Elicit Blogging Client Second Impressions2006-06-09T11:13:00-10:002006-06-09T11:13:00-10:00larrytag:knowing.net,2006-06-09:/posts/2006/06/elicit-blogging-client-second-impressions/<p>The blogging client schedules posts according to local time, but <em>timestamps them</em> for GMT. So posts I scheduled for this morning at 8 AM are showing up timestamped last night at 10 PM. That's no good.</p>Risky teen behavior: Study refutes stereotypes2006-06-09T07:00:00-10:002006-06-09T07:00:00-10:00larrytag:knowing.net,2006-06-09:/posts/2006/06/risky-teen-behavior-study-refutes-stereotypes/<p>Here's an interesting graphic associated with <a href="https://www.msn.com/"><img alt="Health Risk Behaviors Among Students" height="224" src="http://www.dailynugget.com/images/AP_HispanicTeens.gif" width="364"></a>What jumps out at me is that, contrary to stereotypes, black teens have, across the board, the lowest rates of risky behavior. Of course, the study might be flawed, it's self-reported behavior, etc., but it's thought provoking.</p>
<p><em>via</em> Fabian</p>WinFX becomes .NET Framework 3.02006-06-09T03:30:00-10:002006-06-09T03:30:00-10:00larrytag:knowing.net,2006-06-09:/posts/2006/06/winfx-becomes-net-framework-30/<p>What is with Microsoft and their naming? Now, WinFX, the not-poorly-named managed framework, has been rebranded the .NET Framework 3.0. Which is kind of strange, considering that Visual Studio and Visual Basic dropped the .NET brand and, if I'm not mistaken, WinFX is going to ship on top of …</p><p>What is with Microsoft and their naming? Now, WinFX, the not-poorly-named managed framework, has been rebranded the .NET Framework 3.0. Which is kind of strange, considering that Visual Studio and Visual Basic dropped the .NET brand and, if I'm not mistaken, WinFX is going to ship on top of version 2.0 of the CLR. Wouldn't it have made more sense to change the name of the Base Class Library (BCL) to WinFX? Oh, and what does this mean for the standardization process?</p>Latest Ruby in Steel IDE Adds Debugging2006-06-09T02:00:00-10:002006-06-09T02:00:00-10:00larrytag:knowing.net,2006-06-09:/posts/2006/06/latest-ruby-in-steel-ide-adds-debugging/<p>The latest beta of the Ruby in Steel IDE has added debugging support. Nice.</p>
<p>Oh, \<a href="http://www.knowing.net/ct.ashx?id=9c88dc07-b246-4a68-871a-e950800d3420&url=http%3a%2f%2fwww.caliban.org%2fruby%2fruby-amazon.shtml"" target=_blank rel="noopener noreferrer">Ruby/Amazon is a cool library to access Amazon Web …</p><p>The latest beta of the Ruby in Steel IDE has added debugging support. Nice.</p>
<p>Oh, \<a href="http://www.knowing.net/ct.ashx?id=9c88dc07-b246-4a68-871a-e950800d3420&url=http%3a%2f%2fwww.caliban.org%2fruby%2fruby-amazon.shtml"" target=_blank rel="noopener noreferrer">Ruby/Amazon is a cool library to access Amazon Web Services from Ruby. Easy to use.</p>Syncing OneNote over Multiple Machines2006-06-08T23:30:00-10:002006-06-08T23:30:00-10:00larrytag:knowing.net,2006-06-08:/posts/2006/06/syncing-onenote-over-multiple-machines/<p>Killer post by Chris Pratley on setting up OneNote 12 so that it stays synchronized across multiple machines. I <em>love</em> OneNote and this makes me love it a little more.</p>
<p>Oh, and something else I just discovered that makes me love it a little more: they've added "section groups" so …</p><p>Killer post by Chris Pratley on setting up OneNote 12 so that it stays synchronized across multiple machines. I <em>love</em> OneNote and this makes me love it a little more.</p>
<p>Oh, and something else I just discovered that makes me love it a little more: they've added "section groups" so now you can have Notebooks | [Section Group]* | Section | Page. So, for instance, I have a Work notebook, a Section Group for a specific Client, a Section Group for each project, and then a Section for, say, Requirements, or Meetings, or Research, etc. Perfect!</p>
<p>Oh, and another another thing that makes me love it a little more: you can now hook an Outlook item directly to a OneNote page. So, for instance, you can schedule, say, a "Weekly Review" in Outlook for Fridays at 1PM and then when it pops up, <em>click</em> and up comes OneNote, all linked back and forth. You could use this as an alternative to the Daily Journal PowerToy.</p>Non-Professionals Using C++2006-06-08T22:00:00-10:002006-06-08T22:00:00-10:00larrytag:knowing.net,2006-06-08:/posts/2006/06/non-professionals-using-c/<p>John Montgomery's revelation that the most commonly used languages of non-professional programmers are HTML, JavaScript, and C++ is worth reflecting on.</p>
<p>First, let's just state the obvious: HTML without JavaScript isn't a programming language, and few people are using Rhino or what-have-you to explore JavaScript as a standalone language, so …</p><p>John Montgomery's revelation that the most commonly used languages of non-professional programmers are HTML, JavaScript, and C++ is worth reflecting on.</p>
<p>First, let's just state the obvious: HTML without JavaScript isn't a programming language, and few people are using Rhino or what-have-you to explore JavaScript as a standalone language, so the first "two slots" in the list mean "I put together Web pages."</p>
<p>The commentors on his blog entry seem to primarily attribute the popularity of C++ to its use in academics. I suspect that, at least as important, is its primacy in game development. The window for being an academic-but-not-professional programmer is only a few years, while the window for harboring a fantasy of being a game programmer extends from age 12 to age I-dunno'.</p>
<p>Modding a game probably provides one of the bigger "bangs for the buck" for a non-pro developer and I think that it remains true that modding generally is done with a C/C++-derived syntax.</p>Teachability Important to Programming Language Success2006-06-08T22:00:00-10:002006-06-08T22:00:00-10:00larrytag:knowing.net,2006-06-08:/posts/2006/06/teachability-important-to-programming-language-success/<p>Eric Gunnerson, discussing "Why so many languages?" makes the key point that "Compactness and simplicity have big benefits as well in programming languages."</p>
<p>Once upon a time, I made a good living teaching Java. Sometimes I taught it to C and C++ developers, sometimes I taught it to COBOL developers …</p><p>Eric Gunnerson, discussing "Why so many languages?" makes the key point that "Compactness and simplicity have big benefits as well in programming languages."</p>
<p>Once upon a time, I made a good living teaching Java. Sometimes I taught it to C and C++ developers, sometimes I taught it to COBOL developers. One way or the other, <em>in a week</em> you could really deliver value: if people understood imperative structured code, you could really move them <em>towards an understanding</em> of object-oriented programming in just a week. Same for C# 1.0.</p>
<p>Even so, you had to talk about "well, not everything's an object," and deal with function-call semantics and equivalence and so forth. Personally, I think that the inclusion of native types was a critically beneficial language-design decision for Java, but it does complicate teaching. In .NET, it's even harder to teach, because you can't say that value types are limited exceptions.</p>
<p>About a year ago, I had a friendly debate with my colleague Allen Holub about the changes in the then-new C# 2.0 and Java 5 languages. One disagreement we have is that Allen doesn't like generics, I do. I tend to \<a href="http://www.knowing.net/ct.ashx?id=d5cf50c2-af54-4f32-b290-db5d345ada27&url=http%3a%2f%2fwww.knowing.net%2fPermaLink%2cguid%2c336.aspx"" target=_blank rel="noopener noreferrer">like explicit typing, my feeling is that 99% percent of the time you have a type intent that you can memorialize with a few finger strokes and gain Intellisense and better comprehension. But Allen cleverly didn't argue the finger-typing issue, he said that what he disagrees with is that generics are not OO, thereby making the language harder to learn.</p>
<p>He's right. Once upon a time, C was relatively easy to learn; learning how pointers work was the big issue. Now, I can't imagine someone "picking up" C++ and not being absurdly non-productive. Never mind the STL, how many freaking ways are there just to represent a string? John Montgomery recently posted the surprising factoid that the most commonly used languages by non-professional programmers are HTML, JavaScript, and C++, more than VB or Java or Perl. One wonders what perception these people gain of the task of professional programming. This is why, when thinking about \<a href="http://www.knowing.net/ct.ashx?id=d5cf50c2-af54-4f32-b290-db5d345ada27&url=http%3a%2f%2fwww.knowing.net%2fPermaLink%2cguid%2caffe9827-10f2-4490-8cd1-fafbe8e6f6d0.aspx"" target=_blank rel="noopener noreferrer">trends in language syntax, I think there's a possibility, although not necessarily a likelihood, of a collapse towards simplicity and the widespread embrace of a LISP-like or Smalltalk-like language.</p>Elicit Blogging Client Schedules Posts2006-06-08T08:00:00-10:002006-06-08T08:00:00-10:00larrytag:knowing.net,2006-06-08:/posts/2006/06/elicit-blogging-client-schedules-posts/<p>This post is written using the "Elicit" blogging client. I somehow stumbled across it this morning and it does the one thing I've been missing in a dedicated blogging client: it allows posts to be scheduled. So I can write this at noon, set its post time for 6PM this …</p><p>This post is written using the "Elicit" blogging client. I somehow stumbled across it this morning and it does the one thing I've been missing in a dedicated blogging client: it allows posts to be scheduled. So I can write this at noon, set its post time for 6PM this evening, and the client will take the appropriate steps at the appropriate time.</p>
<p>I like this because I tend to post in flurries, and when I do that, I'd like to spread such things out over a few days. Or, sometimes I write something that I would like to be the only piece that goes out that day. Or, sometimes I think about something associated with a day or date in the future. I just installed the program, but I imagine that I'm going to register it.</p>Literally bad writing2006-06-07T16:53:00-10:002006-06-07T16:53:00-10:00larrytag:knowing.net,2006-06-07:/posts/2006/06/literally-bad-writing/<p>Powertoys manufactures a hand gyroscope for battling RSI. I was considering buying one until I read this this disturbing claim: "Explosive, dynamic, exciting Powerball! Powerball is a dynamic and completely revolutionary new gyroscope that literally explodes with mind numbing torque and inertia once you activate its internal rotor."</p>
<p>Dang. Guess …</p><p>Powertoys manufactures a hand gyroscope for battling RSI. I was considering buying one until I read this this disturbing claim: "Explosive, dynamic, exciting Powerball! Powerball is a dynamic and completely revolutionary new gyroscope that literally explodes with mind numbing torque and inertia once you activate its internal rotor."</p>
<p>Dang. Guess I won't buy one, then.</p>Job Opening: Explosion-Resistant Skull Required2006-06-07T11:33:00-10:002006-06-07T11:33:00-10:00larrytag:knowing.net,2006-06-07:/posts/2006/06/job-opening-explosion-resistant-skull-required/<p>\<</p>
<p>div style='direction:ltr;margin-top:0in;margin-left:0in;width:6.7083in'></p>
<p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:5.9097in"}
Job Opening: Explosion-Resistant Skull Required
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.7493in"}
Wednesday, June 07, 2006</p>
<p>11:16 AM
:::</p>
<p>\<</p>
<p>div style='direction:ltr;margin-top:.3118in;margin-left …</p><p>\<</p>
<p>div style='direction:ltr;margin-top:0in;margin-left:0in;width:6.7083in'></p>
<p>::: {style="direction:ltr;margin-top:0in;margin-left:0in;width:5.9097in"}
Job Opening: Explosion-Resistant Skull Required
:::</p>
<p>::: {style="direction:ltr;margin-top:.0493in;margin-left:0in;width:1.7493in"}
Wednesday, June 07, 2006</p>
<p>11:16 AM
:::</p>
<p>\<</p>
<p>div style='direction:ltr;margin-top:.3118in;margin-left:0in;width:6.7083in'></p>
<p>\<</p>
<p>p style='mso-outline-level:1;margin:0in;font-family:Calibri;font-size:11.0pt'> Microsoft is looking for a new lead compiler writer for Visual Basic. That's gotta' be a tough nut to crack: VB.NET is a very capable language, but in terms of syntax, it ain't Scheme. It will be interesting to see who they hire: a fresh-from-school kid at \<a href="http://en.wikipedia.org/wiki/Annus" mirabilis Papers">the peak of his cognitive powers or a <a href="https://www.imdb.com/title/tt0066206/">grizzled veteran</a>.</p>
<p>::: {style="text-align:left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: Job Opening Explosion-Resistant.one</p>Table Input in Java2006-06-07T10:16:00-10:002006-06-07T10:16:00-10:00larrytag:knowing.net,2006-06-07:/posts/2006/06/table-input-in-java/<h1>Tablet Input in Java</h1>
<p>Wednesday, June 07, 2006</p>
<p>10:06 AM</p>
<p>Turns out that, contrary to what I'd feared, the Tablet Input Panel for the Tablet PC [does]{style="font-weight:bold"} recognizes SWT components as text labels, and you [can ]{style="font-weight:bold"}use the TIP to add recognized handwriting …</p><h1>Tablet Input in Java</h1>
<p>Wednesday, June 07, 2006</p>
<p>10:06 AM</p>
<p>Turns out that, contrary to what I'd feared, the Tablet Input Panel for the Tablet PC [does]{style="font-weight:bold"} recognizes SWT components as text labels, and you [can ]{style="font-weight:bold"}use the TIP to add recognized handwriting to a Java/SWT application:</p>
<p><img alt="" height="388/" src="http://www.knowing.net/content/binary/image001123.png" width="445"></p>
<p>So now, the challenge of programming forms in Java for the Tablet PC reduces to the problem of setting the TIP context dynamically from Java so that you can command it to bias the handwriting towards the expected entry type (a date or a phone number or what-have-you). The difficulty with [that]{style="font-weight: bold"} is that as far as the TIP is concerned, all java.exe executables look alike. So I'll have to figure out some way, within Java, to register for a[ ]{style="mso-spacerun:yes"}callback when the TIP gets activated. Then, use JNI to set the TIP context. Stay tuned?</p>
<p>::: {style="text-align:left"}
Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: Table Input in Java.one</p>Zalman CPU Coolers Don't Play Well With MSI K8T Dual-Processor ATX Motherboard2006-06-03T11:53:00-10:002006-06-03T11:53:00-10:00larrytag:knowing.net,2006-06-03:/posts/2006/06/zalman-cpu-coolers-dont-play-well-with-msi-k8t-dual-processor-atx-motherboard/<p>I bought two Zalman "Ultra Quiet CPU Coolers" for my new dual-processor system (which I'm building because, in a classic example of bad timing, my old motherboard blew right at the beginning of this extremely deadline-driven month). They don't work (at least two won't) with an MSI ATX motherboard. Not …</p><p>I bought two Zalman "Ultra Quiet CPU Coolers" for my new dual-processor system (which I'm building because, in a classic example of bad timing, my old motherboard blew right at the beginning of this extremely deadline-driven month). They don't work (at least two won't) with an MSI ATX motherboard. Not only do the vanes of the cooler completely cover the graphics slot, the vanes interfere with each other. ~~I'm going to still try to use one on the "first" CPU and on the second~~ For clearance reasons, I have to use the no-doubt-insanely-loud coolers that came with the motherboard. Darn it, I really wanted to have a quiet system. Liquid cooling is too extreme for me, but I may have to go that route on my next system.</p>Article on personas2006-06-01T10:42:00-10:002006-06-01T10:42:00-10:00larrytag:knowing.net,2006-06-01:/posts/2006/06/article-on-personas/<p>My latest SD Times column argues that it's time to retire Mort, Elvis, and Einstein.</p>New Visual Studio Edition for Database Work2006-05-31T11:22:00-10:002006-05-31T11:22:00-10:00larrytag:knowing.net,2006-05-31:/posts/2006/05/new-visual-studio-edition-for-database-work/<p>Microsoft today announced a new <a href="https://visualstudio.microsoft.com/">version of VS "for database professionals."</a> It seems that the emphasis is on maintaining database integrity while evolving the data model: a worthy first goal. Perhaps as significant as the release itself is the way in which the SKU has been developed: the team was …</p><p>Microsoft today announced a new <a href="https://visualstudio.microsoft.com/">version of VS "for database professionals."</a> It seems that the emphasis is on maintaining database integrity while evolving the data model: a worthy first goal. Perhaps as significant as the release itself is the way in which the SKU has been developed: the team was only formed in September '05, promises to deliver by the end of this year, and "agile techniques" are supposedly part of the process. And who's in the midst of all this excitement, but my old friend Thomas Murphy, who was the Product Review Editor of [Computer Language]{style="font-style: italic;"} back in the early '90s.</p>An Old Neural Net Programmer on Jeff Hawkins' Model of Intelligence2006-05-29T09:22:00-10:002006-05-29T09:22:00-10:00larrytag:knowing.net,2006-05-29:/posts/2006/05/an-old-neural-net-programmer-on-jeff-hawkins-model-of-intelligence/<p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 8.73in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0.084in; WIDTH: 6.604in; DIRECTION: ltr"}
An Old Neural Net Programmer on Jeff Hawkins' Model of Intelligence
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0.084in; WIDTH: 1.54in; DIRECTION: ltr"}
Monday, May 29, 2006</p>
<p>7:07 …</p><p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 8.73in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0.084in; WIDTH: 6.604in; DIRECTION: ltr"}
An Old Neural Net Programmer on Jeff Hawkins' Model of Intelligence
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0.084in; WIDTH: 1.54in; DIRECTION: ltr"}
Monday, May 29, 2006</p>
<p>7:07 AM
:::</p>
<p>::: {style="MARGIN-TOP: 0.159in; MARGIN-LEFT: 0in; WIDTH: 8.73in; DIRECTION: ltr"}
<img alt="" height="960" src="http://www.knowing.net/content/binary/image00112.png" width="838/"><br>
<img alt="" height="262" src="http://www.knowing.net/content/binary/image002.png" width="838/"><br>
>
:::</p>
<p>::: {style="MARGIN-TOP: 0.504in; MARGIN-LEFT: 0.084in; WIDTH: 6.708in; DIRECTION: ltr"}
<img alt="" height="90" src="http://www.knowing.net/content/binary/image003.png" width="644/"></p>
<p><img alt="" height="72" src="http://www.knowing.net/content/binary/image004.png" width="634/"></p>
<p><img alt="" height="72" src="http://www.knowing.net/content/binary/image005.png" width="644/"></p>
<p><img alt="" height="36" src="http://www.knowing.net/content/binary/image006.png" width="634/"></p>
<p>There's one big issue with the simplest possible 3-layer artificial neural network:</p>
<p>:::</p>
<p>::: {style="MARGIN-TOP: 0.135in; MARGIN-LEFT: 0.084in; WIDTH: 8.089in; DIRECTION: ltr"}
<img alt="" height="960" src="http://www.knowing.net/content/binary/image007.png" width="777/"><br>
<img alt="" height="783" src="http://www.knowing.net/content/binary/image008.png" width="777/"><br>
>
:::
:::</p>
<p>::: {style="TEXT-ALIGN: left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: An Old Neural Net Programmer on.one</p>AI for Poker2006-05-28T22:19:00-10:002006-05-28T22:19:00-10:00larrytag:knowing.net,2006-05-28:/posts/2006/05/ai-for-poker/<p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 2.445in; DIRECTION: ltr"}
AI for Poker
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0in; WIDTH: 1.486in; DIRECTION: ltr"}
Sunday, May 28, 2006</p>
<p>9:28 PM
:::</p>
<p>Daniel Crenna, one of the finalists in the "Made in Express" contest, felt I went too far in dismissing …</p><p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 2.445in; DIRECTION: ltr"}
AI for Poker
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0in; WIDTH: 1.486in; DIRECTION: ltr"}
Sunday, May 28, 2006</p>
<p>9:28 PM
:::</p>
<p>Daniel Crenna, one of the finalists in the "Made in Express" contest, felt I went too far in dismissing the entrants when I said their projects were unrealistically ambitious.[ ]{style="mso-spacerun: yes"}One of his co-finalists is a professor of robotics, Daniel is confident of his approach, etc. Okay. Why someone capable of writing, in a month or two, a realtime 3-D vision system in C# from scratch is looking to win a \$10,000 prize is beyond me, but bully for them for doing it.</p>
<p>[Crenna is developing a domain-specific (visual) language for poker robots. He says that he doesn't intend to "]{style="FONT-SIZE: 11pt"}[advance the state of the art (not in this competition, anyway), but I will do my best to make what is currently available more accessible," with a drag-and-drop interface. This is a worthy goal and not in the same realm of ambition that the 3-D vision system is. I think that it still lies in the realm of "if you can do this, you shouldn't be giving it up for a \$10K prize," but that's his business, not mine. ]{style="FONT-SIZE: 12pt"}</p>
<p>Modeling poker is a fascinating problem. I have just subscribed to Crenna's blog and look forward to reading on his progress: I hope he'll forgive me kibbutzing.</p>
<p>The thing about Poker, and Texas Hold-Em in particular, and Tournament Texas Hold-Em in double-particular, is that it brings the forefront the problem of modeling intentionality. First-order intentionality is when you look at your cards and say "I believe I have a strong hand," (and therefore, I will play). That's easy. The great thing about Texas Hold-Em is that while there's variability in what cards will come up, the variability in what cards you have is very small and the importance of first-order intentionality is minimal.</p>
<p>A "poker intelligence" based on first-order intentionality would have a table of starting hands that are "likely to win" and bet on, say, A-7 or better, fold anything else. After that, it would be driven by pot odds. It would ignore other players betting patterns and would be very easy to beat.</p>
<p>Second-order intentionality is (he played and, therefore,) "I think he has a strong hand," and would be necessary for any non-trivial poker intelligence. So, for instance, if the other player opened, the poker intelligence might "put him" on an A-7 or better and compare the pot odds against various predictions of what the other player might do. Obviously, people play differently, but you should get some results if you had a parameterized model ("Aggressive player," "Passive player," etc.).</p>
<p>Poker betting signals third-order intentionality: (I bet aggressively out of position so) "I think he thinks I have a strong hand." And even the lamest poker player understands bluffing "I think (if I bluff) he will think that I think I have a strong hand." To call a bluff requires a decision about fourth-order intentionality: "He thinks I think he thinks I have a good hand," and, just to take things to what is generally considered the human limit, [tournament ]{style="FONT-STYLE: italic"}texas hold 'em happens so fast that you have to model your opponent's model for dealing with bluffing: fifth-order intentionality.</p>
<p>By the time you get to fifth-order intentionality, you're verging on comic territory -- "Only a fool would put poison in the cup in front of him!" I don't think that fifth-order intentionality is necessary for a non-trivial poker intelligence, but I do assert that third-order intentionality [is]{style="FONT-WEIGHT: bold"} necessary, since that's the level at which bluffing takes place.</p>
<p>Another possibility is to collapse the model into statistics: model your opponent as "10% of the time, he's betting over his card's true odds (aka bluffing)," but putting such a parameter to an opponent's play is very difficult since it is difficult to get enough data about your opponent's real situation versus the evolving pot odds. Again, especially in tournament hold 'em.</p>
<div>
</div>
<p>::: {style="TEXT-ALIGN: left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information</p>
<p>Download: AI for Poker.one
:::</p>Unpredictability and recognition systems2006-05-28T14:38:00-10:002006-05-28T14:38:00-10:00larrytag:knowing.net,2006-05-28:/posts/2006/05/unpredictability-and-recognition-systems/<p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 6.708in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 5.333in; DIRECTION: ltr"}
Unpredictability and recognition systems
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0in; WIDTH: 1.486in; DIRECTION: ltr"}
Sunday, May 28, 2006</p>
<p>12:18 PM
:::</p>
<p>::: {style="MARGIN-TOP: 0.311in; MARGIN-LEFT: 0in; WIDTH: 9 …</p><p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 6.708in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 5.333in; DIRECTION: ltr"}
Unpredictability and recognition systems
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0in; WIDTH: 1.486in; DIRECTION: ltr"}
Sunday, May 28, 2006</p>
<p>12:18 PM
:::</p>
<p>::: {style="MARGIN-TOP: 0.311in; MARGIN-LEFT: 0in; WIDTH: 9.416in; DIRECTION: ltr; HEIGHT: 288px"}
In reading Jeff Hawkins book <a href="https://www.amazon.com/exec/obidos/ASIN/0805078533/thinkinginnet-20">On Intelligence</a> I came upon this great anecdote about developing Graffiti:</p>
<p>"I recognized that people were willing to learn a difficult task (typing) because it was a [reliable]{style="FONT-WEIGHT: bold"} and fast way to enter text into a machine. Therefore if we could create a new method of entering text with a stylus that was fast and reliable, people would use it even though it required learning. So I designed an alphabet that would reliably translate what you write into computer text; we called it Graffiti. With traditional handwriting recognition systems, when the computer misinterprets your writing you don't know why. But the Graffiti system always produces a correct letter unless you make a mistake in writing. [Our brains hate unpredictability, which is why people hate traditional handwriting recognition systems]{style="FONT-WEIGHT: bold"}." ([Emphasis ]{style="FONT-WEIGHT: bold"}added)</p>
<p>To this day, I prefer Graffiti for PDA input, although I would [love ]{style="FONT-STYLE: italic"}Shark/Shapewriter (which bolsters Hawkins' point even further). On the other hand, I prefer the TabletPC's TIP and correction UI to Graffiti; I'm not sure it's faster, but the correction UI is good enough that using it is predictable. Voice recognition systems, though, definitely produce the "unpredictable == hateful" reaction in me.
:::
:::</p>
<p>::: {style="TEXT-ALIGN: left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: Unpredictability and recognition.one</p>On "On Intelligence"2006-05-28T14:28:00-10:002006-05-28T14:28:00-10:00larrytag:knowing.net,2006-05-28:/posts/2006/05/on-on-intelligence/<p>On [On Intelligence]{style="FONT-STYLE: italic"}
Sunday, May 28, 2006</p>
<p>9:11 AM
On the suggestion of John Lam, I bought Jeff Hawkins' book <a href="https://www.amazon.com/146-1828515-0010052?ie=UTF8&%2AVersion%2A=1&%2Aentries%2A=0">On Intelligence</a> and pretty much read it through in one sitting. That was possible because it's a very accessible book and also because, to a large …</p><p>On [On Intelligence]{style="FONT-STYLE: italic"}
Sunday, May 28, 2006</p>
<p>9:11 AM
On the suggestion of John Lam, I bought Jeff Hawkins' book <a href="https://www.amazon.com/146-1828515-0010052?ie=UTF8&%2AVersion%2A=1&%2Aentries%2A=0">On Intelligence</a> and pretty much read it through in one sitting. That was possible because it's a very accessible book and also because, to a large extent, I was already exposed and sympathetic to the grand themes: minds are what brains do; pattern recognition, association, and prediction is close, if not indistinguishable, from "intelligence;"and the brain's mechanisms for doing such things are based on highly interconnected hierarchies of localized neuronal structures that exhibit "fire together, wire together," reinforcement / learning. (For those interested in such things, it should be noted early that Hawkins punts on the problems of [qualia]{style="FONT-STYLE: italic"}, so as far as I am aware, that debate still ends with Dennett and Searle.)</p>
<p>Hawkins biggest hypothesis, though, is one that I find intriguing but far from self-evident: that a single algorithm that produces "predictive ability [from] a hierarchical memory," is sufficient to achieve intelligence. Hawkins was a founder of Palm and Handspring and I was surprised that [On Intelligence]{style="FONT-STYLE: italic"} is rested on the structure of the neocortex and not on computational structures. Of course, a premise is that the neural structures he talks about [are]{style="FONT-STYLE: italic"} computational, and he presents his theory in terms of a few block diagrams, but the book is several steps away from presenting the source code, as it were. </p>
<p>This is a little disappointing, because Hawkins' hypothesis could be tested with relatively easy computational experiments. That the human brain has a gazillion neurons and a bazillion interconnections is largely irrelevant [if ]{style="FONT-WEIGHT: bold"}the phenomena that Hawkins claims arise from relatively small collections of neurons. A testbed that maps well into Hawkins theories is the world of "complete information, zero-sum, binary placement gridded games." Tic-Tac-Toe, Reverise/Othello, and Go are all this type of game: they all take place on a grid and involve sequential placement of opposing symbols. Unlike Poker, there's no hidden knowledge or probability issues; winning is binary; and unlike Chess or Checkers, you don't have to understand movement. A "play" is the changing of a position from an indeterminate state to a determinate one and the consequences of that play. Helpfully, Tic-Tac-Toe is close to trivial and Go is computationally more difficult than Chess. Any [model]{style="FONT-WEIGHT: bold"} that could solve Tic-Tac-Toe and simple be scaled to Go would be an incredible triumph.</p>
<p>And although we probably don't have much insight into what Hawkins' theories predict for the form of a Go-solving intelligence, they are testable with Tic-Tac-Toe. It should be straightforward to create a "cortextlike memory system" whose "sensory inputs" are Tic-Tac-Toe placement sequences. So, for instance, a blank grid followed by an X in the upper-left and then an O in the lower-right might be encoded as: "??? ??? ???, X?? ??? ???, X?? ??? ??O". [If ]{style="FONT-WEIGHT: bold"}Hawkins' model is correct, then one would expect certain things to be [emergent ]{style="FONT-WEIGHT: bold"}in the [self-organizing ]{style="FONT-WEIGHT: bold"}higher-levels of his hierarchies. Note that [we are not testing the ability of a connectionist system to play Tic-Tac-Toe]{style="FONT-WEIGHT: bold"} (Tic-Tac-Toe is possible to "solve" with a traditional neural net approach, Go is almost certainly not). Specifically, it follows from Hawkins' theories that in Tic-Tac-Toe, if the first play is to a corner then a [single]{style="FONT-WEIGHT: bold"} high-level component should be responsible for "expecting" play to the opposite corner -- [no matter which corner ]{style="FONT-WEIGHT: bold"}is initially played[ ]{style="mso-spacerun: yes"}-- [even if]{style="FONT-WEIGHT: bold"} the system has never been exposed to play from a particular corner. Optimal play in Tic-Tac-Toe is very straightforward and recognizable, rotational equivalence is trivial compared to the types of sensory interpolation the book asserts are explainable, and yet, it is not self-evident that Hawkins' model will pass such a test.</p>
<p>The book has a companion site at OnIntelligence.org -- I just posted a similar comment to the above paragraph, we'll have to see if anything comes of it.</p>Editing and State Transitions2006-05-27T15:52:00-10:002006-05-27T15:52:00-10:00larrytag:knowing.net,2006-05-27:/posts/2006/05/editing-and-state-transitions/<p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 6.863in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 4.046in; DIRECTION: ltr"}
Editing and State Transitions
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0in; WIDTH: 1.573in; DIRECTION: ltr"}
Saturday, May 27, 2006</p>
<p>8:58 AM
:::</p>
<p>::: {style="MARGIN-TOP: 0.146in; MARGIN-LEFT: 0.164in; WIDTH …</p><p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 6.863in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 4.046in; DIRECTION: ltr"}
Editing and State Transitions
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0in; WIDTH: 1.573in; DIRECTION: ltr"}
Saturday, May 27, 2006</p>
<p>8:58 AM
:::</p>
<p>::: {style="MARGIN-TOP: 0.146in; MARGIN-LEFT: 0.164in; WIDTH: 6.698in; DIRECTION: ltr"}
I absolutely love <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d1103">this research pape</a>r from Microsoft that describes a UI for a recording application. The great thing is that "all" they did was rethink the classic recorder interface of "rewind, play/record, fast forward" with a new state transition for "re-record that last thought." The UI tells the story:</p>
<p><img alt="" height="287" src="http://www.knowing.net/content/binary/image0011.png" width="576/"></p>
<p>Isn't that great? The results are significant, too: content creators uniformly preferred the interface and, even more significantly, 84% [of listeners ]{style="FONT-STYLE: italic"}preferred freeform recordings made with this interface to recordings made with a traditional UI. I love that [delivered quality]{style="FONT-WEIGHT: bold"} depends on [editing interface]{style="FONT-WEIGHT: bold"} -- something I've noticed when trying to write high-quality software for the Tablet PC.</p>
<p>I've actually thought of similar (though not as elegant) approaches to pen-written passages: accumulate short sections of expressive thought and assemble them using an interface different than the cursor-based WYSIWYG of a Word / classic keyboard editor.
:::
:::</p>
<p>::: {style="TEXT-ALIGN: left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: Editing and State Transitions.one</p>Blogged from OneNote2006-05-25T12:04:00-10:002006-05-25T12:04:00-10:00larrytag:knowing.net,2006-05-25:/posts/2006/05/blogged-from-onenote/<p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 5.094in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 1.31in; DIRECTION: ltr"}
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0in; WIDTH: 5.094in; DIRECTION: ltr"}
<img alt="" height="204" src="http://www.knowing.net/content/binary/image001.png" width="489/">
:::</p>
<p>::: {style="MARGIN-TOP: 0.342in; MARGIN-LEFT: 0.164in; WIDTH: 5.046in; DIRECTION: ltr; HEIGHT: 72px"}
Sweet. The simple trick is …</p><p>::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 5.094in; DIRECTION: ltr"}
::: {style="MARGIN-TOP: 0in; MARGIN-LEFT: 0in; WIDTH: 1.31in; DIRECTION: ltr"}
:::</p>
<p>::: {style="MARGIN-TOP: 0.049in; MARGIN-LEFT: 0in; WIDTH: 5.094in; DIRECTION: ltr"}
<img alt="" height="204" src="http://www.knowing.net/content/binary/image001.png" width="489/">
:::</p>
<p>::: {style="MARGIN-TOP: 0.342in; MARGIN-LEFT: 0.164in; WIDTH: 5.046in; DIRECTION: ltr; HEIGHT: 72px"}
Sweet. The simple trick is to use OneNote's "send email" capablity
:::
:::</p>
<p>::: {style="TEXT-ALIGN: left"}
</p>
<p>Created with Microsoft Office OneNote 2007 (Beta)<br>
One place for all your information
:::</p>
<p>Download: One Note Blogged from.one</p>VS2005 Add-In Project Doesn't Appear in "Tools" Menu: Workaround2006-05-25T08:56:00-10:002006-05-25T08:56:00-10:00larrytag:knowing.net,2006-05-25:/posts/2006/05/vs2005-add-in-project-doesnt-appear-in-tools-menu-workaround/<p>For me, the VS2005 "Extensibility Project"|"Visual Studio Add-In" wizard doesn't produce the expected result -- the add-in doesn't register itself with VS. I've tried this on two machines and it fails on both. Registering an add-in is done via an XML file with a .AddIn extension that (documentation indicates) should …</p><p>For me, the VS2005 "Extensibility Project"|"Visual Studio Add-In" wizard doesn't produce the expected result -- the add-in doesn't register itself with VS. I've tried this on two machines and it fails on both. Registering an add-in is done via an XML file with a .AddIn extension that (documentation indicates) should be placed in \Documents and Settings\\<User>\My Documents\Visual Studio 2005\Addins and that's where the Wizard copies the file.</p>
<p>Well, on <em>my</em> machines, files in that directory are not picked up by VS2005. However, copying the file to \Documents and Settings\All Users\Application Data\Microsoft\MSEnvShared\Addins works like a charm: debug works, the whole bit.</p>Office 12 / 2007 Tied to MS Desktop Search2006-05-25T06:45:00-10:002006-05-25T06:45:00-10:00larrytag:knowing.net,2006-05-25:/posts/2006/05/office-12-2007-tied-to-ms-desktop-search/<p>When you start the beta versions of Outlook or OneNote, you get a dialog box that says "<em>Blah blah blah</em> functionality requires Microsoft Desktop Search. Download now?" That seems dangerously close to using the Office monopoly to "tie" Microsoft's offering in personal search. Not only that, you don't even have …</p><p>When you start the beta versions of Outlook or OneNote, you get a dialog box that says "<em>Blah blah blah</em> functionality requires Microsoft Desktop Search. Download now?" That seems dangerously close to using the Office monopoly to "tie" Microsoft's offering in personal search. Not only that, you don't even have an option of "Don't tell me again." It's either "Download now" or "Remind me later."</p>
<p>Personally, I use X1 for personal search and don't want to change. But for the sake of OneNote, I'd do anything. To add insult to injury, though, MS Desktop Search doesn't install on test machine! I just get an "access denied" dialog and the install quits, even when run in Safe Mode.</p>Windows Media Player SDK 10 in C# or VB.NET2006-05-24T08:39:00-10:002006-05-24T08:39:00-10:00larrytag:knowing.net,2006-05-24:/posts/2006/05/windows-media-player-sdk-10-in-c-or-vbnet/<p>The WMPlayer10SDK does not contain the expected primary interop assembly (PIA) so that Windows Media Player can be programmed from .NET languages such as Visual Basic and C#. The WMP 9 SDK puts a PIA in the /redist directory. However, the WMP10 SDK <em>can</em> be programmed in a managed language …</p><p>The WMPlayer10SDK does not contain the expected primary interop assembly (PIA) so that Windows Media Player can be programmed from .NET languages such as Visual Basic and C#. The WMP 9 SDK puts a PIA in the /redist directory. However, the WMP10 SDK <em>can</em> be programmed in a managed language: you can just copy the files <strong>AxInterop.WMPLib.dll</strong> and <strong>Interop.WMPLib.dll</strong> from the /samples directory. Or, you can still download the WMP9SDK and use the old PIA.</p>
<p>Okay, hopefully this post now contains enough keywords to be found via search engines...</p>Darn it -- dasBlog Posting from Word / OneNote not supported yet2006-05-23T11:11:00-10:002006-05-23T11:11:00-10:00larrytag:knowing.net,2006-05-23:/posts/2006/05/darn-it-dasblog-posting-from-word-onenote-not-supported-yet/<p>Oh well. Being able to blog from OneNote is a dream. I had a whole bunch of posts using graphics and ink all set to go.</p>Office, Vista Betas2006-05-23T07:30:00-10:002006-05-23T07:30:00-10:00larrytag:knowing.net,2006-05-23:/posts/2006/05/office-vista-betas/<p>Well, there goes my bandwidth for the next few hours... Office Beta 2 is available for all comers and Vista Beta 2 is available on MSDN for subscribers.</p>ReSharper 2.0 Released2006-05-22T07:58:00-10:002006-05-22T07:58:00-10:00larrytag:knowing.net,2006-05-22:/posts/2006/05/resharper-20-released/<p>I get 'em all for free: this is one I pay for out of my own pocket.</p>I Hate Hardware2006-05-18T16:38:00-10:002006-05-18T16:38:00-10:00larrytag:knowing.net,2006-05-18:/posts/2006/05/i-hate-hardwareeom/Learning Darts2006-05-17T09:56:00-10:002006-05-17T09:56:00-10:00larrytag:knowing.net,2006-05-17:/posts/2006/05/learning-darts/<p>I bought a dartboard a month ago to give me something to fidget with while thinking. Rather than struggle with cricket or any "real" dart game, I've been training myself with a game I call "golf." I go around the numbers in the board, and if I hit the target …</p><p>I bought a dartboard a month ago to give me something to fidget with while thinking. Rather than struggle with cricket or any "real" dart game, I've been training myself with a game I call "golf." I go around the numbers in the board, and if I hit the target number in 3 throws, that's "par." If I hit two targets in 3 throws, that's "a birdie," 3 targets with 3 is an "eagle," and if I miss in 3 throws, that's a "bogey" (yes, this is asymmetrical. I said I was a beginner, didn't I?) Today I went around the board and made "par." Hurray for me.</p>
<p>We will now return to our regular programming...</p>Spammers Using My Domain In Reply-To. I Hate Spammers.2006-05-17T09:42:00-10:002006-05-17T09:42:00-10:00larrytag:knowing.net,2006-05-17:/posts/2006/05/spammers-using-my-domain-in-reply-to-i-hate-spammers/<p>Recently, I've seen a huge jump in "Undeliverable mail" messages coming through my mail server. I've double-checked that I'm not relaying and checked a couple return path IPs, so I know that it's just jerks spoofing the "Reply-To" header, but it makes me sick to have my domains in any …</p><p>Recently, I've seen a huge jump in "Undeliverable mail" messages coming through my mail server. I've double-checked that I'm not relaying and checked a couple return path IPs, so I know that it's just jerks spoofing the "Reply-To" header, but it makes me sick to have my domains in any way associated with this crap.</p>Speeding up the C# Source Code Editor2006-05-16T11:06:00-10:002006-05-16T11:06:00-10:00larrytag:knowing.net,2006-05-16:/posts/2006/05/speeding-up-the-c-source-code-editor/<p>::: {.Section1}
[Apparently, the “code navigation bar” in VS2005 is a performance drain. I never rely on it, so I’ll be implementing <a href="https://weblogs.asp.net/rweigelt/446536">this change</a> on my own system. <em>Via</em> Steve Pietrek ]{style="font-size:11.0pt;font-family:Calibri; color:#1F497D"}
:::</p>I, Patent Troll2006-05-16T10:04:00-10:002006-05-16T10:04:00-10:00larrytag:knowing.net,2006-05-16:/posts/2006/05/i-patent-troll/<p>In the dot-com days, my work led to three, count 'em, three patent applications. In all cases, I'd signed over the IP rights to the company. Both companies went bankrupt before the patents went through, leaving me to understand that the IP is now the property of creditors, who were …</p><p>In the dot-com days, my work led to three, count 'em, three patent applications. In all cases, I'd signed over the IP rights to the company. Both companies went bankrupt before the patents went through, leaving me to understand that the IP is now the property of creditors, who were free to auction it off or use it to create their own chimerical success story or, most likely, throw the CD in the bottom-drawer and wait for it to oxidize.</p>
<p>Anyway, I'm kind of jealous that I don't have a patent. My brother has a great one -- you know when they use a cotton swab on your laptop at the airport? Thank Steve O'Brien.</p>
<p>So I've been thinking that, in my copious spare time, I should get myself a patent. Sure, if they go through on the first pass (doubtful), it'll cost around \$1,000 in filing fees. But, hey, which would give me more pleasure, a patent or two-thirds of a cheap HDTV? Of course, I could spend thousands of dollars on a patent attorney, but while I'm sure there are good patent attorneys that are worth every penny, I strongly suspect that a cheap patent attorney is like a cheap tax-preparer: you still do the same amount of work explaining and checking as you'd do if you file yourself. (That was certainly my experience previously.)</p>
<p>The nice thing about patents is that the full text of granted patents are available. It's not that hard to parse out the specialized syntax and, while it's unquestionable that I could misuse a term of art, the patent office has given patents to combovers ; is it really likely to ding me on my sloppiness with the word "whereby"?</p>
<p>Coming up with patentable ideas is easy. (30-second pause.) Automatic ranking of dart-throwing skill by means of a neural net. A lava-escape device consisting of a highly heat-resistant snowboard. A means of swinging from a substantially horizontal tree branch. (Oops)</p>
<p>Of course, I'll probably never spend the time to actually write a patent, but if I <strong>do</strong>, I'll blog the process here.</p>Ultra-ambitious "Made in Express" Finalists Reveal Newbie Programmer Expectations of AI2006-05-16T08:52:00-10:002006-05-16T08:52:00-10:00larrytag:knowing.net,2006-05-16:/posts/2006/05/ultra-ambitious-made-in-express-finalists-reveal-newbie-programmer-expectations-of-ai/<p>Microsoft is running a contest called "Made in Express" that will pay out \$10,000 to the best application written in Microsoft's entry-level version of Visual Studio. The proposals chosen as <a href="https://www.madeinexpress.com/">finalists</a> are, to put it kindly, ambitious: an AI psychotherapist (assuming that the person doesn't just cut-and-paste <a href="http://www-ai.ijs.si/eliza/eliza.html">Eliza</a>); an …</p><p>Microsoft is running a contest called "Made in Express" that will pay out \$10,000 to the best application written in Microsoft's entry-level version of Visual Studio. The proposals chosen as <a href="https://www.madeinexpress.com/">finalists</a> are, to put it kindly, ambitious: an AI psychotherapist (assuming that the person doesn't just cut-and-paste <a href="http://www-ai.ijs.si/eliza/eliza.html">Eliza</a>); an autonomous robot capable of traversing rough terrain; a poker bot simulator with drag-and-drop AI. There are others that are more feasible (the one I like is the "absurd comparisons" calculator: how many hummingbirds weigh as much as a blue whale?).</p>
<p>Lately, I've been thinking about how people learn programming, and it's very interesting to note how these programmers (who know enough about programming to find and enter the contest) have, let's say "unrealistic" understandings of AI and machine sensing. If you think about it, it's not absurd for someone to say "Hey, I hear Tablet PCs understand handwriting, I hear speech recognition is almost there, therefore, how hard could it be to include '3D stereo vision' in my contest entry?" Except, sadly, it <em>is</em> absurd.</p>
<p>Once upon a time, I did AI "technology transfer" work: basically, translating LISP-based algorithms into (primarily) C and C++-based algorithms (it's one reason I believe <a href="https://en.wikipedia.org/wiki/Sapir-Whorf_hypothesis">Sapir-Whorf</a> applies to programming languages). I haven't in a long time, but I try to track development and I have a fair understanding of progress in the field. <strong>We are so friggin' far from a computational model of mental states that it's laughable (alternately, it's humbling).</strong></p>
<p>AI is decades behind genetics in terms of a model. At least we know how DNA codes. And, until recently, we believed that there was something approaching a 1:1 correspondence between genes and functions. Until we starting sequencing genomes a few years ago and discovered that there are many, many fewer genes in a genome than there are traits in an organism. Even with DNA-based genetics, which is an incredible natural computational abstraction, it turns out that reality is complex. Even chaotic in the sense of depending on environmental starting conditions. (The idea that "well, the genome didn't explain as much as we thought, but the proteome (our protein complement) will," is equally hubristic and short-sighted.)</p>
<p>And just as we can assemble certain helpful drugs based on biologics, even with our incredibly limited understanding of how those biologics came to be, we can compute certain helpful functions (handwriting, speech) with a vastly more limited understanding how we do it natively. But at least with DNA we have a (limited) model of how things move from small to large. With cognition and perception, we have <strong>nothing</strong> even close, just very, very general theories.</p>
<p>For instance, there seems to be widespread agreement that "minds are what brains do." Further, I think most researchers would probably more-or-less agree that mental states are the work of specialized, individually non-accessible subsystems working in parallel, whose complex (and chaotic) interactions construct higher-level systems. I hope that's enough for that guy to create the Web-based psychotherapist.</p>
<p>Then we have this mechanistic understanding of neurons which, just like DNA, have these features which can be modeled computationally. And a lot of fascinating research is coming from functional imaging, so we're beginning to understand the physical structures associated with mental states. But, I guarantee you, the way that mental states arise from neurons will turn out to be far, far more messy and complex and contingent and filled with feedback loops and dependent on environmental conditions than the way living organisms arise from DNA.</p>
<p>And don't even get me started on consciousness.</p>Writing means Killing Your Best Lines2006-05-15T10:16:00-10:002006-05-15T10:16:00-10:00larrytag:knowing.net,2006-05-15:/posts/2006/05/writing-means-killing-your-best-lines/<p>"Vista has a beautiful face but poor bone structure. She's lovely now, but I'm worried about how she'll age."</p>
<p>That's too vivid to slip into a column that uses <em>another</em> metaphor throughout. Darn it.</p>Patrick Logan's Email2006-05-15T07:45:00-10:002006-05-15T07:45:00-10:00larrytag:knowing.net,2006-05-15:/posts/2006/05/patrick-logans-email/<p>Does anyone know Patrick Logan's email (patricklogan.blogspot.com)? If so, can you forward a note to him that I want to <a href="http://patricklogan.blogspot.com/2006/05/dup-or-ref.html">reference this post</a> in a column and need his title.</p>SIGEvolution newsletter, interesting for two reasons2006-05-14T08:47:00-10:002006-05-14T08:47:00-10:00larrytag:knowing.net,2006-05-14:/posts/2006/05/sigevolution-newsletter-interesting-for-two-reasons/<p>::: {.Section1}
The first issue of SIGEVOlution, the newsletter of SIGEVO, the ACM Special Interest Group for Genetic and Evolutionary Computation, is now available for you to <a href="http://home.deib.polimi.it/redirect.php?id=/lanzi/SIGEVOlution/Issues/SIGEVOlution">download</a>. Via http://feeds.feedburner.com/illigal?m=493</p>
<p>Obviously, if you’re interested in the subject matter, it’s a good read. It …</p><p>::: {.Section1}
The first issue of SIGEVOlution, the newsletter of SIGEVO, the ACM Special Interest Group for Genetic and Evolutionary Computation, is now available for you to <a href="http://home.deib.polimi.it/redirect.php?id=/lanzi/SIGEVOlution/Issues/SIGEVOlution">download</a>. Via http://feeds.feedburner.com/illigal?m=493</p>
<p>Obviously, if you’re interested in the subject matter, it’s a good read. It’s also interesting because the newsletter, although in PDF form, is laid out for on-screen reading. It’s well-done.</p>
<div>
</div>
<p>:::</p>USPS Tracking Stinks2006-05-13T12:42:00-10:002006-05-13T12:42:00-10:00larrytag:knowing.net,2006-05-13:/posts/2006/05/usps-tracking-stinks/<p>Living in Hawaii makes you aware of the shortcomings of the USPS. I received a Christmas present on April 17 (and yes, it was sent in December). A few weeks ago, we Express Mailed some x-rays to Oahu, a distance of about 80 miles as the sooty shearwater flies. It …</p><p>Living in Hawaii makes you aware of the shortcomings of the USPS. I received a Christmas present on April 17 (and yes, it was sent in December). A few weeks ago, we Express Mailed some x-rays to Oahu, a distance of about 80 miles as the sooty shearwater flies. It took 6 days. Now, I've got an important shipment on the way and have been "tracking" it at the USPS Web site.</p>
<p>USPS tracking is terrible. When the Express Mail didn't show up in Oahu, I waited through interminable customer-service calls to try to get a tracer going. What I found is that, even if the tracer began (they wouldn't even begin a trace until, I think, 7 days had passed), they don't have detailed information -- there was no way to know where the missing package went astray, whether in the Kona office, in transit, or in Oahu. To me, that means that no one would ever be accountable. UPS and FedEx tracking marks the packages as they move in and off trucks and warehouses.</p>
<p>Unfortunately, USPS is <em>vastly</em> cheaper than UPS or FedEx to the islands.</p>ANTLRWorks Seems an Incredible Tool for Domain-Specific Languages2006-05-13T08:00:00-10:002006-05-13T08:00:00-10:00larrytag:knowing.net,2006-05-13:/posts/2006/05/antlrworks-seems-an-incredible-tool-for-domain-specific-languages/<p>::: {.Section1}
Via a comment by Gregg Irwin, here's a REBOL-based control language \< ?xml:namespace prefix = o />for Excel by Robert Muench. (Wow, REBOL: There's a blast from the past!). Sample code:</p>
<div class="highlight"><pre><span></span><code>goto cell "B6"
change to "Testing"
select "B7"
set to "=B4 \* B5"
select "A5:A9"
change to "=\$B\$5 …</code></pre></div><p>::: {.Section1}
Via a comment by Gregg Irwin, here's a REBOL-based control language \< ?xml:namespace prefix = o />for Excel by Robert Muench. (Wow, REBOL: There's a blast from the past!). Sample code:</p>
<div class="highlight"><pre><span></span><code>goto cell "B6"
change to "Testing"
select "B7"
set to "=B4 \* B5"
select "A5:A9"
change to "=\$B\$5 \* PI()"
</code></pre></div>
<p>Nice!</p>
<p>I also cruised on over to the <a href="https://www.antlr.org/">ANTLR</a> homepage to download the latest version of what I consider the best tool for DSL work and found the beta of ANTLRWorks. Holy moley! This is one of the best <em>advances</em> in development tools I've seen in many years: it's a GUI for developing grammars. It has an integrated interpreter and debugger. Check out the screenshots for a taste. The only thing I could dream of being better would be a testing framework to compare inputs to abstract syntax trees!</p>
<p>ANTLR 3.0 (the version in beta) doesn't seem to yet have its output templates integrated, so I think <em>at the moment</em> you can only generate Java-based parsers. Check out the screenshots for a taste:</p>
<p><img alt="img" src="http://www.knowing.net/content/binary/image0011234567891011.jpg"></p>
<p><img alt="img" src="http://www.knowing.net/content/binary/image0021.jpg"></p>Excel#: A Teaching Language2006-05-11T09:10:00-10:002006-05-11T09:10:00-10:00larrytag:knowing.net,2006-05-11:/posts/2006/05/excel-a-teaching-language/<p>What with all the talk about language directions, I was thinking about a hobbyhorse of mine that spreadsheets are proven to be something that a lot of people "get" and that it behooves language designers to pay attention to them. Usually, I speculate about a spreadsheet-like development environment, but in …</p><p>What with all the talk about language directions, I was thinking about a hobbyhorse of mine that spreadsheets are proven to be something that a lot of people "get" and that it behooves language designers to pay attention to them. Usually, I speculate about a spreadsheet-like development environment, but in the past couple days I realized that now that Excel has a fully defined XML format, you could do the opposite and write a compiler that produced fully-functioning Excel spreadsheets from a program something like, say:</p>
<p>s = new Spreadsheet();<br>
s.[A1] = 2;<br>
s.[A2] = 2;<br>
s.[A3] = Plus([A1],[A2]);</p>
<p>And stuff like:</p>
<p>foreach(day in myYear){<br>
s.ActiveCell.Row++;<br>
s.ActiveCell = day;<br>
}</p>
<p>It's interesting to think about how to simplify the Excel object model. For interest, what the cell addressing form should be. Something like s.Cells["A"]["1"] would be easiest to implement, but burdensome. Ditto specifying contents. You don't want to say "= Excel.Formulas.Plus, [ ref s.Cells["a"]["1"], etc...."</p>
<p>Further, such a programming language might appeal to newcomers in that it's domain-specific nature allows early production of significant results.</p>Microsoft .NET LINQ Preview (May 2006)2006-05-10T11:13:00-10:002006-05-10T11:13:00-10:00larrytag:knowing.net,2006-05-10:/posts/2006/05/microsoft-net-linq-preview-may-2006/<p>::: {.Section1}</p>
<div>
[\< ?xml:namespace prefix = o /\>New preview of LINQ now available on MSDN downloads: ]{style="COLOR: #1f497d"}
http://www.microsoft.com/downloads/details.aspx?familyid=1e902c21-340c-4d13-9f04-70eb5e3dceea&displaylang=en
[More on this **tk** ]{style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: Calibri"}
</div>
<p>:::</p>Journalism and Memory2006-05-09T06:52:00-10:002006-05-09T06:52:00-10:00larrytag:knowing.net,2006-05-09:/posts/2006/05/journalism-and-memory/<p>We received a letter on the SD Times reflector with lines such as "you guys mindlessly regurgitating the marketing hype of the self-congratulatory <strong>X</strong> committees....<strong>X</strong> is essentially nothing but a tacit admission...that the previous 4 versions of the spec were nothing but an incredibly expensive series of mistakes …</p><p>We received a letter on the SD Times reflector with lines such as "you guys mindlessly regurgitating the marketing hype of the self-congratulatory <strong>X</strong> committees....<strong>X</strong> is essentially nothing but a tacit admission...that the previous 4 versions of the spec were nothing but an incredibly expensive series of mistakes....How about you do some journalism for a change? Now *that* would be revolutionary."</p>
<p>First, it's not really important what <strong>X</strong> is (you can guess, can't you?). The thing I'm thinking about is, to what extent should the <em>news</em> side of the paper cover the past? In the columns, absolutely: we're paid to have memories and doubt people. But to what extent should a news story say "They say they're going to do this, or that it means this, but we doubt it?" In MSM, the standard way to do that is to find a skeptic who expresses the doubts. But that's just tactics. There's this old journalistic ideal of objectivity, but especially when it comes to new initiatives, you really can't be objective. Maybe the Administration really will consult with Congress this time, maybe <strong>X</strong> really solves big problems. Maybe Lucy won't pull out the football this time.</p>Ironically, this is the checkout screen of my Ruby host2006-05-08T10:04:00-10:002006-05-08T10:04:00-10:00larrytag:knowing.net,2006-05-08:/posts/2006/05/ironically-this-is-the-checkout-screen-of-my-ruby-host/<p><img alt="" src="http://www.knowing.net/content/binary/rails_irony.PNG"></p>
<p>Ouch.</p>Uh... Are Continuations Really Easy Once You Have Anonymous Delegates?2006-05-06T11:13:00-10:002006-05-06T11:13:00-10:00larrytag:knowing.net,2006-05-06:/posts/2006/05/uh-are-continuations-really-easy-once-you-have-anonymous-delegates/<p>Can you just transform the scope subsequent to the callcc into a delegate, store it in your Continuation object, and then execute the delegate when it's called? Yes, you need compiler support (since you need to transform callcc() from a keyword or method <em>call</em> into the beginning of a new …</p><p>Can you just transform the scope subsequent to the callcc into a delegate, store it in your Continuation object, and then execute the delegate when it's called? Yes, you need compiler support (since you need to transform callcc() from a keyword or method <em>call</em> into the beginning of a new delegate and you need to find the ending spot of that delegate appropriately). And anonymous delegates aren't a part of the CLR, but there's a sample implementation in "The C# Programming Language."</p>
<p>I bet I'm missing some obvious semantic issue.</p>DIY Augmented Reality Windshield HUD2006-05-05T09:59:00-10:002006-05-05T09:59:00-10:00larrytag:knowing.net,2006-05-05:/posts/2006/05/diy-augmented-reality-windshield-hud/<p><a href="http://www.brains-n-brawn.com/">casey</a> mentioned that he wants to investigate augmented reality. Having played with the accelerometers on my M200, I'm leary of the challenge of maintaining orientation over many integrations in a handheld or head-mounted device. On a car, though, you can auto-orient using the GPS and a roadmap and there'd be …</p><p><a href="http://www.brains-n-brawn.com/">casey</a> mentioned that he wants to investigate augmented reality. Having played with the accelerometers on my M200, I'm leary of the challenge of maintaining orientation over many integrations in a handheld or head-mounted device. On a car, though, you can auto-orient using the GPS and a roadmap and there'd be generally more slop for output angles. Finally, I imagine the hardware for painting a display on a windshield would be easier to build yourself than the hardware for painting a display on the inside of a pair of glasses.</p>
<p><a href="http://elm-chan.org/works/vlp/report_e.html">This guy's even done all the work</a>.</p>
<p>I have <strong>zero </strong>competence in hardware, though. <strong>Sigh</strong>. I was a charter subscriber to <strong>Make</strong>: maybe in another couple years I'll work my way through their primers...</p>Tablet Context Tagging Tool and Java/SWT?2006-05-05T09:26:00-10:002006-05-05T09:26:00-10:00larrytag:knowing.net,2006-05-05:/posts/2006/05/tablet-context-tagging-tool-and-javaswt/<p>Anyone have experience using specialized input contexts with Java/SWT?</p>Videogames Don't Get "Darkest Before the Dawn"2006-05-04T15:41:00-10:002006-05-04T15:41:00-10:00larrytag:knowing.net,2006-05-04:/posts/2006/05/videogames-dont-get-darkest-before-the-dawn/<p>I was thinking about buying the videogame "Star Wars: Empire at War" (not that I have any spare time). Anyway, I decided against it because I was sure, like most games, I'd abandon it after a few hours. And I realized that one reason I do that is because, unlike …</p><p>I was thinking about buying the videogame "Star Wars: Empire at War" (not that I have any spare time). Anyway, I decided against it because I was sure, like most games, I'd abandon it after a few hours. And I realized that one reason I do that is because, unlike thrilling movies (like "Star Wars") or books, videogames very rarely make things worse and worse before handing you a great triumph. Generally, videogames go like this: Prologue: Trains you. Act I: Simple levels acquaint you with the games capabilities. Act II: Bigger levels, with more enemies. Act III: Tons of enemies. And then you're done. But it's essentially the same damn thing over and over. Even the ones that change, because of technology trees and so forth, the gameplay doesn't change much. You have Mark V lasers instead of Mark I lasers. Your units move faster. But it's still building up a stack of chips and measuring them up against the computers. It's not like a thrilling narrative, where the protagonists <strong>loose</strong> for a long time, slowly learning new things, and then everything comes together in a pitched battle (which the good guys win).</p>I Don't Understand How "Insurance Adjustments" Work2006-05-04T11:31:00-10:002006-05-04T11:31:00-10:00larrytag:knowing.net,2006-05-04:/posts/2006/05/i-dont-understand-how-insurance-adjustments-work/<p>I have a high-deductible PPO medical plan: if I go to a Doctor, I pay the bill directly. It's not unusual for there to be a discount "If you pay at the time of services." Generally, it's around 25%, but sometimes it goes as high as 50%. I interpret this …</p><p>I have a high-deductible PPO medical plan: if I go to a Doctor, I pay the bill directly. It's not unusual for there to be a discount "If you pay at the time of services." Generally, it's around 25%, but sometimes it goes as high as 50%. I interpret this to mean that the work and "insurance adjustment" associated with processing an insurance claim works out about the same. And it makes sense to me that insurance companies pay a little less than the Doctor's "walk in" charge in exchange for access to patients and the assurance that, even if the amount is lower, the HMO is going to cut the check at the end of the month.</p>
<p>Tina, on the other hand, is in an HMO. We just received one of those "This is not a bill" statements of insurance behavior. Tina's surgery was billed by the doctor as <strong>X</strong>. The insurance adjustment was -78%! I'm baffled. The premium (as it were) being paid by the surgeon to participate in the HMO is incredibly out of whack with the "walk in" rate. I feel that there must be an economic reason for the surgeon to keep their nominal rate out of whack with their expectation.</p>
<p>Now, it may be that the Doctor knows that they can charge <strong>X</strong> to a walk-in and that the more specialized the Doctor, the greater the disparity between <strong>X</strong> and the insurance payment. But just from a bookkeeping standpoint, I would think the Doctor would attempt to bill the insurance company something in the realm of what is expected (more than what is expected, to pressure the company to raise its payments, sure -- but not 4x the expected payment!).</p>
<p>I wonder if they can write off on their taxes the insurance adjustment.</p>Borland Re-Org Includes Questionable Decisions2006-05-04T10:26:00-10:002006-05-04T10:26:00-10:00larrytag:knowing.net,2006-05-04:/posts/2006/05/borland-re-org-includes-questionable-decisions/<p>Alan Zeichick, in today's SD Times News on Thursday, observes two aspects of Borland's re-org that are troubling: "The first is combining sales and professional services together into one field operations group. The other is folding customer support into research & development."</p>
<p>Zeichick says: "Knowing that the goal of a sales …</p><p>Alan Zeichick, in today's SD Times News on Thursday, observes two aspects of Borland's re-org that are troubling: "The first is combining sales and professional services together into one field operations group. The other is folding customer support into research & development."</p>
<p>Zeichick says: "Knowing that the goal of a sales department is to increase revenue and meet quotas, do you think that Borland's professional services?ahem, now field operations?team is going to be looking for ways to offer you advice on how to save money, or on how to spend more money with Borland? I can see why Borland thinks it's a good idea to turn consultants into salespeople, but I don't think it's good for customers."</p>
<p>He's less troubled about the customer service / R&D combination, but it seems to me equally troublesome. They are vastly different services, one focused on what's shipped and one focused on what's (at least) one release away. R&D requires a mindset that, to a certain extent, waves its hands ("if every developer had dual monitors running at 1600 x 1200, you could have an environment that looked like this"). Customer service requires a mindset that is all about the specifics ("they're running at 800 x 600 and they don't have accelerated graphics. How do they make the project window visibile?").</p>
<p>It's hard for me to imagine a combined environment providing the focus that both vital services require.</p>Marco Cantu Ably Defends Delphi2006-05-04T10:02:00-10:002006-05-04T10:02:00-10:00larrytag:knowing.net,2006-05-04:/posts/2006/05/marco-cantu-ably-defends-delphi/<p>Marco Cantu (hi, Marco!) notes <a href="http://blog.marcocantu.com/blog/Delphi_past_its_peak.html">my posts on Delphi</a> and makes some very well-taken points, notably:</p>
<ul>
<li>Delphi's "class helpers" are equivalent (or at least similar) to C# 3.0's "extension methods," so Delphi itself could be used as an example of my "trend away from structural explicitness";</li>
<li>There's nothing inherent …</li></ul><p>Marco Cantu (hi, Marco!) notes <a href="http://blog.marcocantu.com/blog/Delphi_past_its_peak.html">my posts on Delphi</a> and makes some very well-taken points, notably:</p>
<ul>
<li>Delphi's "class helpers" are equivalent (or at least similar) to C# 3.0's "extension methods," so Delphi itself could be used as an example of my "trend away from structural explicitness";</li>
<li>There's nothing inherent in Delphi preventing it from evolving towards a language that embraces a more flexible structure;</li>
<li>What's with this emphasis on C-style syntax, when half of Larry's examples are about Ruby?</li>
</ul>
<p>The "C-style syntax" thing comes from the simple observation that Java and C# are two languages that have come onto the scene and, more than other languages in the past decade, have clearly "achieved orbit": although it's hard to separate them from their libraries and environments and corporate promotion, I don't believe that millions of programmers were "duped" or "ignorantly stumbled" into learning those languages. I just make the observation that the market has voted several times for languages that use curly brackets and semicolons.</p>
<p>I've speculated that perhaps a language with a C-style syntax and LISP- and Smalltalk- influenced semantics might be The Next Big Thing. In that same post, I also said that another possibility is a "collapse" towards a more simple syntax (I did a fair amount of Lisp programming this Winter and Spring and found myself liking the parentheses). And, just to cover the bases, I also said that C++ showed that a hybrid syntax, even if complex, may be embraced as a "bridge" between two different eras.</p>Domain Cookies: Microsoft's Obvious Patent2006-05-04T09:08:00-10:002006-05-04T09:08:00-10:00larrytag:knowing.net,2006-05-04:/posts/2006/05/domain-cookies-microsofts-obvious-patent/<p>Microsoft was granted patent <strong>7,039,699</strong> today, which on reading the claims appears to be: use a GUID as a database ID, send it back as a cookie, and share usage data between computers within the domain with access to the central database. The entire claim (that's the important …</p><p>Microsoft was granted patent <strong>7,039,699</strong> today, which on reading the claims appears to be: use a GUID as a database ID, send it back as a cookie, and share usage data between computers within the domain with access to the central database. The entire claim (that's the important part) is obvious "to one of ordinary skill in the art." The only things conceivably unique about this are:</p>
<ol>
<li>the choice of a GUID as a database ID, and</li>
<li>the limiting of database sharing to machines within a single domain, and</li>
<li>the use of Web bugs to break out of the domain</li>
</ol>
<p>1 is not just a well-known practice, it was discussed in print (in <em>Software Development</em>, if nowhere else) prior to 2000. The second -- limiting access of a database to a sub-network -- is so absurdly trivial that it <strong>may not</strong> appear in previous patents. The 3rd was done, by the company I worked for, in 1999 (at least 5 months before the time the patent was orginally submitted) <strong>and</strong> when I considered patenting it (yes, I considered patenting the Web bug: sorry.) I discovered it was already a somewhat-known practice within the Web development community.</p>
<p><strong>Bad patent.</strong></p>Microsoft, Ruby, and War2006-05-03T13:46:00-10:002006-05-03T13:46:00-10:00larrytag:knowing.net,2006-05-03:/posts/2006/05/microsoft-ruby-and-war/<p>In response to a post by Don Box complimenting Ruby, <a href="http://patricklogan.blogspot.com/2006/05/losing-war-no-not-that-war.html">Patrick Logan</a> says: "If Microsoft looks at Ruby as competition> then Microsoft has already lost the war."</p>
<p>I take two possible meanings from Logan's post:</p>
<ol>
<li>If Microsoft thinks Ruby is important, they're ignoring the threat to them posed by <strong><em>X …</em></strong></li></ol><p>In response to a post by Don Box complimenting Ruby, <a href="http://patricklogan.blogspot.com/2006/05/losing-war-no-not-that-war.html">Patrick Logan</a> says: "If Microsoft looks at Ruby as competition> then Microsoft has already lost the war."</p>
<p>I take two possible meanings from Logan's post:</p>
<ol>
<li>If Microsoft thinks Ruby is important, they're ignoring the threat to them posed by <strong><em>X</em></strong> (where, I suspect, X = LISP), or</li>
<li>If Microsoft thinks Ruby is <strong>competition</strong>, they will not implement it and therefore be doomed</li>
</ol>
<p>Not long ago, Microsoft posted a job opening for a developer "<a href="http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons">continuations</a>, which are not modeled within the CLR. This isn't just laziness on the part of langauge implementors. The CLR presents a machine architecture different than the wide-open architecture in which most compiler experience has been gathered. The CLR architecture is safer, but more restrictive, when it comes to manipulating the stack, which is central to continuations. It may be that the CLR will one day gain continuations. It <a href="http://publications.csail.mit.edu/abstracts/abstracts05/jsd_angelee_cel/jsd_angelee_cel.html">may be that continuations can be implemented using exceptions</a>. Or there may be other clever ways to implement continuations. <a href="https://www.international-lisp-conference.org/2005/media/clinger-slides/control2.html">Or maybe not</a>.</p>
<p>In my opinion, to "cross the chasm" Ruby needs either:</p>
<ul>
<li>implementation on at least one of the two major managed environments; <strong>or</strong></li>
<li>a native-code implementation combined with a killer, fully-supported IDE</li>
</ul>
<p>Of course, "and" would be better.</p>Sapphire in Steel: Ruby Programming in VS20052006-05-03T11:28:00-10:002006-05-03T11:28:00-10:00larrytag:knowing.net,2006-05-03:/posts/2006/05/sapphire-in-steel-ruby-programming-in-vs2005/<p><a href="http://www.bitwisemag.com/">Huw Collingbourne</a> turned me on to <a href="http://www.sapphiresteel.com/">Sapphire in Steel</a>, a Ruby programming environment implemented as a VS2005 plug-in: "Ruby In Steel 0.5.12 provides syntax sensitive code colouring and collapsing; a fully integrated interactive console which can be docked within the Visual Studio environment; integrated syntax error handling - click …</p><p><a href="http://www.bitwisemag.com/">Huw Collingbourne</a> turned me on to <a href="http://www.sapphiresteel.com/">Sapphire in Steel</a>, a Ruby programming environment implemented as a VS2005 plug-in: "Ruby In Steel 0.5.12 provides syntax sensitive code colouring and collapsing; a fully integrated interactive console which can be docked within the Visual Studio environment; integrated syntax error handling - click on the error message to locate the problem line in your source code; automatic bracket highlighting; bracket matching to move your cursor between brackets; a project management pane in which you can arrange groups of Ruby projects as branches in a tree; auto-commenting and uncommenting of Ruby code; plus many of the same editing features you would expect in any Visual Studio project such as multi-level undo/redo, split-window editing; toggle-bookmark and find/replace with regular expressions."</p>
<p>It's not an implementation of Ruby on the CLR, but maybe once John Lam gets his hands on it...</p>Borland Canning 300 (20%): Implications for DevCo?2006-05-03T10:57:00-10:002006-05-03T10:57:00-10:00larrytag:knowing.net,2006-05-03:/posts/2006/05/borland-canning-300-20-implications-for-devco/<p>The other shoe is dropping.</p>
<p>This was inevitable; one of the "hard decisions" that Borland and DevCo had to face. Still no word on a buyer for DevCo.</p>
<p>"Most of the layoffs will come from a restructuring of Borland's international operations," says the wire and I don't take the news …</p><p>The other shoe is dropping.</p>
<p>This was inevitable; one of the "hard decisions" that Borland and DevCo had to face. Still no word on a buyer for DevCo.</p>
<p>"Most of the layoffs will come from a restructuring of Borland's international operations," says the wire and I don't take the news to be immediately devastating to the fortunes of either DevCo or Borland.</p>
<p>However, layoffs are <strong>always</strong> demoralizing and often shake loose the very people a company can least afford to lose.</p>Martyrdom Denied: Life for Moussaoui2006-05-03T10:41:00-10:002006-05-03T10:41:00-10:00larrytag:knowing.net,2006-05-03:/posts/2006/05/martyrdom-denied-life-for-moussaoui/<p><a href="https://www.msn.com/">Rot in peace.</a></p>How I Learned To Program, Part 22006-05-03T08:52:00-10:002006-05-03T08:52:00-10:00larrytag:knowing.net,2006-05-03:/posts/2006/05/how-i-learned-to-program-part-2/<p>It's probably not shocking to hear that as a teen I played Dungeons & Dragons. Rob, the <strong>super-cool</strong> guy who worked at "Games People Play" (he wore leggings, a buck knife on his belt, and occasionally carried a bo staff. We worshipped him), told me there were some good DMs at …</p><p>It's probably not shocking to hear that as a teen I played Dungeons & Dragons. Rob, the <strong>super-cool</strong> guy who worked at "Games People Play" (he wore leggings, a buck knife on his belt, and occasionally carried a bo staff. We worshipped him), told me there were some good DMs at MIT's D&D club. So one weekend I wandered down Mass Ave to the appointed building and tried to find the club.</p>
<p>So, there was this room that was a computer lab and of course I had to check it out. The big thing I remember was that it had CRT terminals. Man, was that cool. There were a couple guys hanging out and one guy was showing off how he'd calculated the distribution curve of 3 6-sided dice and had printed them out in asterisks.</p>
<p>One of the things about D&D is that it provides an intimate knowledge of odds relating to the distribution curves of 4-, 6-, 8-, 12-, and 20-sided dice. Being an insufferable snot, I said he was "wrong" and that I could calculate the correct odds of the distribution faster than he could read them. Well, of course, I just had it memorized how many ways you could get 13 or whatever, but I think they mistook this as evidence that I was an MIT Freshman and they decided that I sufficiently nerdy to hang out in the lab on weekends and after school.</p>
<p>And that's how I learned LISP!</p>
<p>(And I really, <strong>really</strong> wish that I knew what that room was and who was in it in the 1981-1982 school year.) </p>How I Learned To Program2006-05-03T08:15:00-10:002006-05-03T08:15:00-10:00larrytag:knowing.net,2006-05-03:/posts/2006/05/how-i-learned-to-program/<p>John Montgomery is wondering how people learned to program, especially non-professional programmers. Well, some years I make more money writing than programming, so here's my story:</p>
<p>My desire to learn programming was sparked by my Dad bringing home Ted Nelson's "Computer Lib/Dream Machines" -- an oversized paperback that contained cartoons …</p><p>John Montgomery is wondering how people learned to program, especially non-professional programmers. Well, some years I make more money writing than programming, so here's my story:</p>
<p>My desire to learn programming was sparked by my Dad bringing home Ted Nelson's "Computer Lib/Dream Machines" -- an oversized paperback that contained cartoons, LISP and Basic listings, and low-contrast photos of minicomputers. What do I remember about it?</p>
<ul>
<li>It conveyed that computers were cool (well, actually that they were "groovy"), and</li>
<li>It explained this program:<br>
43 PRINT "HELP, I AM CAUGHT IN A PROGRAM LOOP<br>
67 GOTO 43<br>
68 END</li>
</ul>
<p>I'm sure it had other programs, but it explained <strong>that</strong> program (<strong>so</strong> better than "Hello, World!") in enough detail that a 5th grader could "get it."</p>
<p>A few years later, for Christmas I got a Radio Shak "computer" that consisted of a plastic tray in which plastic rods could slide up and down. You could attach metal clips to the rods and plug in wires such that when the rod was in one position or another, a circuit would be completed and, ultimately, one of the 10 or 12 lights along the top would glow. It came with a book of "programs" (wiring diagrams) that you could build, and the back of the book had a bunch of blank schematics so you could write your own. <strong>Man,</strong> did I love that stupid thing. I think they had one program that essentially overflowed and "when light 12 goes on" you had to pull the wires and wire the next part of the circuit. Strangely, I think it was this piece of hardware that made me understand the plasticity of software: all that mattered was the arrangement of the wires and the position of the rods. And you could see there were <strong>literally</strong> repeating patterns in the wires and eventually I got to the point where most things I wrote (concentrating on sports "simulations") would take 2 or 3 rewirings that I only did to debug the program: the joy was in the logic.</p>
<p>Then came High School, which had a PDP-8 that was free to use for an hour or two after school. My Dad had given me a book of BASIC games that you could type in and run (Hammurabi, Artillery, etc.) and that was how I started. Around that time, I read Martin Gardner's "Mathematical Recreations" enthusiasms about Conway's Game of Life. By the end of my first semester in High School, I had programmed a BASIC version that ran in (I think) a 10 x 10 grid and burned up reams of teletype paper.</p>
<p>The summer of my 16th year, I was hired by C. Behrens Machinery to write a BASIC program that generated CNC codes to control the XY-table of a LASER cutting machines. The program I wrote cut mathematically perfect saw blades. The first one cut from metal hangs outside my door (you can no longer feel the one perceptible flaw, which was accumulated error after 36 rotations of the tooth shape). The first one we cut from titanium was acquired by the New York Museum of Modern Art for its industrial design collection. A photo of the laser cutting a saw appeared in National Geographic. I was paid \$3,000.</p>
<p>My programming career has been pretty much downhill from that ever since.</p>Top 10 Things I've Learned About Computers From The Movies and Any Episode of "24"2006-05-02T14:54:00-10:002006-05-02T14:54:00-10:00larrytag:knowing.net,2006-05-02:/posts/2006/05/top-10-things-ive-learned-about-computers-from-the-movies-and-any-episode-of-24/<ol>
<li><strong>Megapixels aren't important</strong>: What determines the resolution of a photograph or audio recording is the "enhancement" algorithm run on it. Any image, when run through the proper enhancement, will reveal sufficient detail to recognize a face, read a license plate, etc.</li>
<li><strong>Computer screens output text at 4800 baud and make …</strong></li></ol><ol>
<li><strong>Megapixels aren't important</strong>: What determines the resolution of a photograph or audio recording is the "enhancement" algorithm run on it. Any image, when run through the proper enhancement, will reveal sufficient detail to recognize a face, read a license plate, etc.</li>
<li><strong>Computer screens output text at 4800 baud and make chirping sounds while doing so:</strong> Sometimes, computers can be revved up to 9600 baud, and sometimes, for instance when printing the names of conspirators, slow to 300 baud. There is a great deal of variety in the sound computers make when outputting text, though. It used to be a sound reminiscent of a lineprinter, but modern computers seem to implement a more "boop boop boop" approach. Oh, and most computers output in a 16 x 9 font.</li>
<li><strong>All computer systems have backdoors:</strong> Hackers can get into any system by way of "backdoors" that are left by the people who originally designed the system. The password of the backdoor is generally the name of the programmer's daughter.</li>
<li><strong>There are wireframe schematics of every building on Earth</strong>: These schematics interface with a wide variety of sensor and alarm systems. They can be manipulated in realtime and are infinitely zoomable (see #1 above).</li>
<li><strong>Decryption works one character at a time, while the other characters cycle quickly through all possibilities</strong>: Face detection algorithms work the same way, as do most search algorithms. Oh, and every time a detail is revealed, the computer makes a beep. You know, really, <strong>most</strong> times a computer makes a partial computation, it makes a beep.</li>
<li><strong>It takes 10 minutes to break into a system</strong>: A computer expert will first play coy, saying that they don't know how long it will take. Then, in a few minutes, they'll reveal that they can get in, but they'll need a few minutes more (damn it).</li>
<li><strong>The US government surveils the entire planet, in realtime, and keeps the tapes</strong>: At first, this seemed implausible to me, but then I realized that they probably have a couple dozen Webcams in orbit amd use enhancement.</li>
<li><strong>People generally keep incriminating evidence in folders organized by codename</strong>: However, they often encrypt them (see #5). Oh, and computers erase data at 300 baud, in reverse (see #2).</li>
<li><strong>Powerful people have Webcams that record from the middle of their displays</strong>: You and I dart our eyes back and forth between the Webcam and our own screen. Powerful people have intense video conversations while staring straight into the camera and, therefore, the Webcams must be recording from the middle of their screen.</li>
<li><strong>Powerful people have access to very powerful PDAs</strong>: The mobile computers used by powerful people not only support full video, they have acces to the realtime wireframe schematics, decryption and enhancement algorithms, and so forth. Oh, and they can read any data in any device. Oh, and as phones? They have awesome coverage.</li>
</ol>Lost my PDA, Going Paper-Based...2006-05-02T11:55:00-10:002006-05-02T11:55:00-10:00larrytag:knowing.net,2006-05-02:/posts/2006/05/lost-my-pda-going-paper-based/<p>I'm not a forgetful person, but in the four days before Tina's first surgery, I forgot at various times: my jacket, my credit card (x2), and my Pocket PC Phone Edition PDA. Must have had something else on my mind. I got the jacket and credit cards back, but my …</p><p>I'm not a forgetful person, but in the four days before Tina's first surgery, I forgot at various times: my jacket, my credit card (x2), and my Pocket PC Phone Edition PDA. Must have had something else on my mind. I got the jacket and credit cards back, but my PDA is now the property of some kid <a href="https://www.alohacondos.com/travel/">living the dream in Haleiwa</a>.</p>
<p>A decade ago, the Palm Professional utterly changed my working life. I was dedicated to the Palm until a few years ago, when I switched to a Pocket PC Phone Edition. The PPC-PE was a good PDA, but not a great phone. Then I bought a Smartphone, thinking it would give me the best of both worlds. It didn't and when it died (like, a <strong>week</strong> after the warranty ran out) I switched back to the PPC-PE.</p>
<p>There are 4 things that I want to carry around:</p>
<ul>
<li>a phone</li>
<li>music and podcasts</li>
<li>my "next tasks" to-do list</li>
<li>something into which I can enter notes quickly</li>
</ul>
<p>The first two can obviously be satisfied with existing devices, but digitizing the last two are debatable. True, I would <strong>love</strong> it if I could (a) take notes quickly and (b) have those notes synchronize with my OneNote-based notebooks (which is how I <strong>now </strong>guide my working life). Unfortunately, there are 2 downsides:</p>
<ul>
<li>Pen-based PDA input is slower than normal handwriting (absent SHARK / ShapeWriter) and is more error-prone than handwriting on the Tablet PC. Phone-based T9 input is a non starter for note-taking.</li>
<li>When you have a \$300+ device, you fret about it -- you don't want to take it the beach, you worry if it will fall out of your pocket, you don't want to scratch the screen, etc. And, well, when you forget it in a Mexican restaurant in Oahu 5 days after synchronizing, you're really screwed (lost software, lost notes, lost time records, lost phone, etc.)</li>
</ul>
<p>I had hoped that a phone with audio recording would give me a solution (I wrote a prototype that did voice recognition on the recorded note and added a link to OneNote, but the quality of the transcription was so poor that I abandoned the project).</p>
<p>I'm tempted by a PDA/Phone with a thumb-keyboard, but they still seem to be very expensive. For the moment, I'm using a 7" x 5" notebook. Not a fancy Moleskine for me -- they're too gorgeous to abuse: I favor Sherbert Notes 80 pages. Good ruling, good binder, low emotional content.</p>Premature Non-Functional Programming the Root of All Evil?2006-05-02T10:00:00-10:002006-05-02T10:00:00-10:00larrytag:knowing.net,2006-05-02:/posts/2006/05/premature-non-functional-programming-the-root-of-all-evil/<p>This post by Wesner Moise reminded me of my own post a few weeks back. Basically, the observation is that the "functional programming" paradigm, in which variables are immutable once bound, really seems to have something going for it.</p>
<p>In functional programming, the context necessary to achieve a function is …</p><p>This post by Wesner Moise reminded me of my own post a few weeks back. Basically, the observation is that the "functional programming" paradigm, in which variables are immutable once bound, really seems to have something going for it.</p>
<p>In functional programming, the context necessary to achieve a function is passed in and the results are returned. Anything that changes that isn't explicitly returned is a "side-effect" and one strives to minimize such things (as a practical matter, things like IO are necessarily (?) implemented as side-effects). Strings in Java or the CLR are immutable (although in use you often have <strong>s = s.Trim()</strong> or what-have-you).</p>
<p>Contrast:</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="n">OopFoo</span>{
<span class="n">int</span> <span class="n">bar</span>;
<span class="n">void</span> <span class="n">Func1</span>(<span class="n">int</span> <span class="n">i</span>){
<span class="n">bar</span> = <span class="n">i</span> * <span class="mi">2</span>;
}
<span class="n">int</span> <span class="n">Func2</span>(){
<span class="k">return</span> <span class="n">bar</span> * <span class="mi">3</span>;
}
}
<span class="n">vs</span>.
<span class="k">class</span> <span class="n">FunctionalFoo</span>{
<span class="n">int</span> <span class="n">Func1</span>(<span class="n">int</span> <span class="n">i</span>){
<span class="k">return</span> <span class="n">i</span> * <span class="mi">2</span>;
}
<span class="n">int</span> <span class="n">Func2</span>(<span class="n">int</span> <span class="n">i</span>){
<span class="k">return</span> <span class="n">i</span> * <span class="mi">3</span>;
}
}
</code></pre></div>
<p>In <strong>OopFoo</strong>, the results of <strong>OopFoo.Func1(int)</strong> are stored in an instance variable <strong>bar</strong> and calls to <strong>OopFoo.Func2() </strong>use that instance variable to perform their calculation. <strong>FunctionalFoo</strong> on the other hand, uses no instance variables: the behavior of <strong>FunctionalFoo.Func2(int)</strong> is entirely dependent on the parameter.</p>
<p>Traditional OOP design principles don't provide a lot of guidance on selecting between these two interfaces but tends to favor the <strong>OopFoo</strong> approach, especially if the amount of context starts to get large (that is, if there were 10 variables necessary to calculate <strong>Func2</strong>, you'd likely store them in as instance variables). On the other hand, once you start unit-testing, there's an automatic tendency to start favoring the functional approach, since unit tests generally have to construct and pass in context anyway. On the other other hand, if <strong>Func1()</strong>'s calculation is logically internal to the implementation of the class, you certainly don't want it visible, returning semi-logical values to external users (for instance, a function that validates the city portion of an address, but not the whole address). (Incidentally, the lack of <strong>internal</strong> visibility in modules is one of the things you note in the code of journeyman programmers: they "get" <strong>public</strong> and <strong>private</strong>, but the benefits of <strong>internal</strong> and to some extent <strong>protected</strong> are less used.)</p>
<p>Werner's hesitancy about functional programming relates to another issue: resource consumption. Allocating a new data structure everytime you manipulate the structure seems fraught with peril. But one thing we learn from optimization is that programmers are poor at guessing how resource consumption plays out in the whole context of a program. Further, in some situations one can use design patterns (notably, <strong>Flyweight</strong>) to help actual, as opposed to logical, resource consumption.</p>
<p>I can't say that excessive resource consumption can <strong>always</strong> be refactored away, but more and more, I find myself developing behavior in a functional manner and refactoring towards a more stateful interface over time.</p>Laterooms, GC, and Mono2006-04-28T15:52:00-10:002006-04-28T15:52:00-10:00larrytag:knowing.net,2006-04-28:/posts/2006/04/laterooms-gc-and-mono/<p>::: {.Section1}
[Ouch. A company called Laterooms.com gave up on Mono, saying that it’s GC was essentially non-existent (maybe because it didn’t pack memory?). Via [<a href="http://www.cookcomputing.com/blog/archives/000536.html">Cook Computing</a>]]{style="font-size:11.0pt;font-family:Calibri; color:#1F497D"}
:::</p>Predicate Dispatch2006-04-28T15:28:00-10:002006-04-28T15:28:00-10:00larrytag:knowing.net,2006-04-28:/posts/2006/04/predicate-dispatch/<p>Okay, since I've spent the whole damn day talking about other people's languages, let me tell you something that I would give a lot of thought to if <strong>I</strong> were designing a language. Consider C# 3.0 extension syntax:</p>
<p>static void Foo(this String s){ ... }<br>
static void Foo(this Int32 …</p><p>Okay, since I've spent the whole damn day talking about other people's languages, let me tell you something that I would give a lot of thought to if <strong>I</strong> were designing a language. Consider C# 3.0 extension syntax:</p>
<p>static void Foo(this String s){ ... }<br>
static void Foo(this Int32 i) { ... }</p>
<p>s = "hello";<br>
i = 42;<br>
s.Foo(); //resolves to Foo(this String s)<br>
i.Foo(); //resolves to Foo(this Int32 i)</p>
<p>Now consider:</p>
<p>static List Sort(this List where this.Length \< 1000000) { ... }<br>
static List Sort(this List where this.Length >= 1000000) { ... }</p>
<p>Or:</p>
<p>static Double SquareRoot(this Double i where i >- 0) { ... }<br>
static Complex SquareRoot(this Double i where i \< 0) { ... }</p>
<p>Or:</p>
<p>static int Minimum(this TreeNode where treeNode.left.InstanceOf(EmptyNode){ return this.data; }<br>
static int Minimum(this TreeNode) { return this.left.Minimum(); }</p>
<p>This idea of dispatching not just on the type of <strong>this</strong>, but on more complex (and dynamic) conditions, is called "<a href="ftp://publications.ai.mit.edu/ai-publications/2001/AITR-2001-006.pdf">predicate dispatch</a>." Putting aside the specifics of syntax, I think that predicate dispatch is to object dispatch what unit testing is to explicit typing: a more general and more domain-specific alternative that provides more flexibility, although with potentially serious runtime implications. But maybe not as much as you'd think.</p>
<p>Note the similarity to COmega's chords:</p>
<p>public class Buffer { <br>
public async Put(string s); <br>
public string Get() & Put(string s) { return s; }<br>
} </p>
<p>Calls to <strong>Buffer.Get()</strong> block until at least one call to <strong>Buffer.Put()</strong> has concluded, and then <strong>Get()</strong> actually has access to the <strong>s</strong> parameter of <strong>Put()</strong>.</p>
<p>An abstraction that increases structural flexibility, allows domain-specific flexibility a la unit testing, <strong>and</strong> might address concurrency? Me likey.</p>Trends in language syntax2006-04-28T14:16:00-10:002006-04-28T14:16:00-10:00larrytag:knowing.net,2006-04-28:/posts/2006/04/trends-in-language-syntax/<p>Who said I wasn't fond of Delphi? Look: Delphi is a great tool. I wish absolutely nothing but the best for DevCo and the Delphi development community. </p>
<p><strong>[However... ]</strong></p>
<p>I have yet to hear an argument that makes me think that the Delphi language is going to experience a rennaissance in …</p><p>Who said I wasn't fond of Delphi? Look: Delphi is a great tool. I wish absolutely nothing but the best for DevCo and the Delphi development community. </p>
<p><strong>[However... ]</strong></p>
<p>I have yet to hear an argument that makes me think that the Delphi language is going to experience a rennaissance in popularity that will make it anywhere near as influential as, say, Turbo Pascal. </p>
<p>A correspondent who tells me that C# is more a descendant of Delphi than C++ argues my point for me. Let's take a look at how Anders Hejlsberg's languages have differed from their immediate predecessors:</p>
<ul>
<li>Turbo Pascal : IDE</li>
<li>Delphi : Visual builders, components</li>
<li>J++ : C-style syntax, delegates, declarative interop</li>
<li>C# 1.0 : attribute metadata, Common Language Runtime, relaxed exception specificity (no checked exceptions)</li>
<li>C# 2.0 : generics, partial classes, anonymous delegates </li>
<li>C# 3.0 : type inference, relational operators including projection and selection (i.e.,dynamic classes), full closures, extension methods</li>
</ul>
<p>So if you were to say "trends in Anders Hejlsberg's work," I think it would certainly be fair to say that, aside from the obvious switch to a C-style syntax, you also see a trend <strong>away from</strong> Niklaus Wirth's philosophy of an explicit nested structuring of programmatic components. It's absolutely true that Microsoft's imprimatur is a major part of C#'s popularity, but let's also give credit to Anders Hejlsberg for having a pretty darn good sense of the market (as both a reflection of what is needed and as a thought-leader in advocating what he believes). </p>
<p>Two more examples of the trend away from structural explicitness: In C# 3.0, there are extension methods, which allow an instance method to be specified independently of the file(s) in which the class was originally declared. For instance, <strong>static void Foo(this String s){ ? body ? }</strong> makes it possible to call <strong>Foo()</strong> from all instances of type <strong>String</strong> (in other words, <strong>string s = "hello"; s.Foo();</strong> becomes legal code). </p>
<p>Similarly, here's a simple class in Ruby:</p>
<p>Simple enough, right? Class <strong>Foo</strong> has instance variable <strong>\@bar</strong> that's assigned in method <strong>Baz().</strong> But because Ruby has syntax to indicate that a symbol is an instance variable (the @ prefix), the above class can be equivalently declared as:</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="n">Foo</span>
<span class="n">def</span> <span class="n">Baz</span>(<span class="nb">x</span>)
</code></pre></div>
<p>Why is an explicit declaration of instance variables necessary? The instance variable <strong>\@bar</strong> is part of the programmatic structure that is <strong>Foo</strong>, but it's declaration (to the extent that it has one at all) is in implicit in the use of that instance variable within methods.</p>
<p>Now, let's talk about files. In the days when C and Turbo Pascal were very influential, there was a close correspondence between a compilation unit, a file, and programmatic components. The matching up of symbolic names between compilation units was a big deal ? in the world of C, this link stage is often the lengthiest stage. The associated language syntax <strong>actively</strong> worked against the <strong>design-time</strong> experience of the programmer, since the programmer has a very dynamic set of interests that span multiple (what today we'd call) namespaces. You still see remnants of this in IDEs today: a parser used to provide Intellisense / code completion is much more complex and fragile than a parser used to generate code (the Intellisense parsers in Visual Studio 2005 seem to be a primary source of bugs reported for that product). </p>
<p>The correspondence between files, compilation units, and programmatic components made a lot of sense in the days before capacious hard-drives and RAM. Nowadays, the correspondence makes far less sense: we can keep windows open with however many buffers we need (buffers? Hah! Not only do I date myself, I show how the file / RAM false dichotomy still part of me). When we search for a symbol, we expect the IDE to resolve across files and namespaces. The main justification for files today is as units of source control!</p>
<p>Templates / generics and components (especially GUI-related) cracked, within the mainstream, the file-compilation unit-programmatic component correspondence. GUI builders inherently provide a <strong>design-time</strong> view of structures under construction. We increasingly expect the same type of design-time access to data, XML representations, object graphs, etc.</p>
<p>Why would anyone think that this trend towards increasing design-time views of programmatic components will stop at the class boundary? Surely mainstream languages will evolve to have an increasingly blurry distinction between design-time and run-time programatic structures. </p>
<p>Smalltalk-80 (as in 1980, mind you) anticipated all of this. </p>
<p>Put aside the Smalltalk syntax and just look at this browser (well, it's Squeak, but it's the first image returned by Google). The panes along the top are, I think, self-explanatory and the pane at the bottom is the pane in which you edit. Note the absence of a "project view" or a file / class correspondence. Are they missed? Only a little, in that your classes and code can have a tendency to disappear into the forest of library functions. But in general, this browser remains a view of the mainstream future.</p>
<p>The other relevant aspect of Smalltalk's model is the non-distinction between program construction and execution. In Smalltalk, the view of your program (whether as part of construction or delivered to the customer) is not necessarily built from first principles when you run a program. During program construction, this means that you can shut things down in the middle of debugging and return at a later date to the exact same situation. When the program is deployed, it means that there's much more flexibility about how to approach issues like customization. </p>
<p>Any edits to classes made in one view will propagate automatically to other views, not due to machinations of a separate IDE, but due to the fact that the IDE is <em>part of</em> the image in which you are working (you have the flexibility to strip down the image for deployment, if desired). </p>
<p>Darn it, I can't find a picture that communicates how the Workspace / Image work. Perhaps a Smalltalker can offer something in the comments?.</p>
<p>Although a solid argument can be made that Smalltalk (and Lisp, as well) may enjoy a rennaissance based on these types of structural advantages ("Smalltalk is the next big thing: always has been, always will be"), I want to move on away from languages entirely and talk about two <strong>really</strong> important trends that will, undoubtedly, influence future language design: unit testing and concurrence.</p>
<p>A major argument of those who favor implicitly-typed languages is that "unit testing replaces type information," that <strong>double SquareRoot(uint i){ ? }</strong> has no advantages over <strong>def SquareRoot(i){ ? }</strong> so long as the compilation process includes executing something along the lines of { <strong>i = -1; SquareRoot(i) ? }</strong> and that execution results in the appropriate condition (whether that's returning <strong>NaN</strong> or throwing an exception or whatever). </p>
<p>Today, unit tests are invariably developed as components external to the class being tested. The existence or non-existence of a unit test is not reflected in the tested class. The obvious problem is that possibility of absence: not only are non-comprehensive test suites a possibility, it takes considerable effort to ensure the existence of an even trivially comprehensive test suite (simple coverage, much less comprehensive coverage of corner cases). It is <strong>inevitable</strong> that there will rise a metadata-based connection between unit tests and classes under test. I can imagine a language that looks something like:</p>
<div class="highlight"><pre><span></span><code><span class="k">[Fit(pre = { i = 0}, post = { result = 0 })]</span>
<span class="w"> </span><span class="k">[Fit(pre = { i = 4}, post = { result = 2 })]</span>
<span class="w"> </span><span class="k">[Fit(pre = { i = -1}, post = { throws ArgumentException} )]</span>
<span class="w"> </span><span class="na">?etc?</span>
<span class="w"> </span><span class="na">def SquareRoot(i) { ? }</span>
</code></pre></div>
<p>Now, my syntax just violated the trend away from structural explicitness, so maybe it would be, instead: <strong>Fit(Library.SquareRoot, pre = { i = 0}, post = { result = 0 })</strong>, but the upshot would be that the method <strong>Library.SquareRoot</strong> would always carry the association of its preconditions, postconditions, and invariants. The Eiffel language already has this design-by-contract metadata association, although it doesn't (I believe) support Fit-style pre-post value pairings.</p>
<p>[I find it amusing when implicit typing / unit-testing advocates say explicit typing doesn't have benefits. What are unit tests but explicit constraints on the behavior and range of variables? Unit tests <strong>are</strong> type information. Very detailed, very domain-specific type information. Implicit typers often try to have it both ways: praising in one breath for the speed of implicit typing and then speaking of the confidence resulting from a "green bar" comprehensive test suite, but those are two diametrically opposed different development scenarios. Developing a comprehensive test suite in an implicitly typed language is faster than developing such a suite in an explicitly typed language, but a thorough test suite takes longer than "finger-typing" explicit type information. (I think there's a happy medium in a test suite that is comprehensive on publicly visible components and not necessarily so with internally visible components. This is why I hesitate to advocate test-<strong>driven</strong> development.) </p>
<p>On to concurrence. The coming era of manycore machines is going to hit us like a tsunami. <strong>The</strong> major impediment to the historical success of Lisp and Smalltalk was relative performance. I'm not at all saying that Lisp and Smalltalk couldn't be "fast enough" for their programmers, but they always faced scenarios where they consumed many times the resources of code written in lower-level languages (Ruby today faces the same problem: it will be interesting to see if enough Moore's generations have passed so no one notices). In the future, when we get past 2 or 4 cores, performance will be dependent on concurrency abstractions that <strong>must be in syntax</strong>. You can't library your way out (well, you can, but only in the sense that you need a library plus you have to <strong>not</strong> do a bunch of things that are in your language. If you want to know how successful that type of approach is, talk to someone who knows the history of J2EE).</p>
<p>I don't have a strong opinion about the form of the concurrency abstractions that will succeed, but I guarantee you that by 2016, any language that <strong>doesn't</strong> have such abstractions will not be considered professional quality.</p>
<p>For the past 18 months, during which I've been writing quite a few columns on trends in language syntax, I've been expecting someone to challenge me to explain the state of JavaScript (yeah, yeah: ECMAScript. Blech.): a C-derived syntax, implicit typing, a flexible object model, Web aware, and essentially universally deployed. By my logic, JavaScript should be much more popular than it is. I gotta' admit, it's a head scratcher. Sure, there's not a great JavaScript IDE, but to me that's a cart-before-the-horse thing: if a lot of people were slavering to code JavaScript, a good IDE would have emerged by now.</p>
<p>Further, JavaScript is the language for Flash and, aside from Macromedia's incompetent marketing, why Flash doesn't absolutely own the professional "rich Internet application" market is utterly beyond me. Which touches on AJAX. If I were in a debating club, I could say "JavaScript <strong>is</strong> successful, it's the language of AJAX, and AJAX is the cool new thing." </p>
<p>But I don't think that's the truth, I don't think you can look at JavaScript and say, "yeah, in the world of professional programming, that's a tool that people embrace." I think people kind of begrudgingly say "Yeah, okay, if we need to do that in the browser I'll do it in JavaScript," and then they sigh and check the NBA finals (hey, the Larry O'Brien Trophy!). </p>
<p>Is it the lack of an IDE? The association of JavaScript with the browser and the resulting ugliness of all that \<script> tag, single-quote / double-quote stuff? The libraries? The lack of marketing? </p>
<p>Hey, it's a blog entry. I don't have to come to any kind of conclusion.</p>Mort/Elvis/Einstein: The Humpty Dumpty Personae2006-04-27T15:12:00-10:002006-04-27T15:12:00-10:00larrytag:knowing.net,2006-04-27:/posts/2006/04/mortelviseinstein-the-humpty-dumpty-personae/<p>There's <a href="http://www.panopticoncentral.net/2006/04/26/i-hate-mort-sort-of/">been</a> a rash of <a href="http://www.winterdom.com/">criticism</a> about Microsoft's Mort/Elvis/Einstein personas. A few months ago, I swiped at M/E/E and triggered some correspondence. Part of that was the surprising lack-of-results for a search for a document <strong>that defines the Mort/Elvis/Einstein personas!</strong> One certainly justifiable criticism …</p><p>There's <a href="http://www.panopticoncentral.net/2006/04/26/i-hate-mort-sort-of/">been</a> a rash of <a href="http://www.winterdom.com/">criticism</a> about Microsoft's Mort/Elvis/Einstein personas. A few months ago, I swiped at M/E/E and triggered some correspondence. Part of that was the surprising lack-of-results for a search for a document <strong>that defines the Mort/Elvis/Einstein personas!</strong> One certainly justifiable criticism of M/E/E is that they (especially Mort) seem to mean whatever the speaker wishes them to mean, just as for Humpty Dumpty. Does Mort program in more than one language? Is a former C++ programmer who's now a product manager a "Mort"? Would Mort use a DSL if one was available? I think the answer to these questions is, "whichever answer furthers your argument."</p>David Intersimone on DevCo, the viability of Delphi, and Turbo Ruby2006-04-26T15:36:00-10:002006-04-26T15:36:00-10:00larrytag:knowing.net,2006-04-26:/posts/2006/04/david-intersimone-on-devco-the-viability-of-delphi-and-turbo-ruby/<p>I just got off the phone with David Intersimone. My recent SD Times column on "DevCo," (the codename for the spin-off of Borland's languages and database teams) ruffled some feathers, particularly when I described the Delphi language as "well past its peak, and with its Pascal roots ? on the wrong …</p><p>I just got off the phone with David Intersimone. My recent SD Times column on "DevCo," (the codename for the spin-off of Borland's languages and database teams) ruffled some feathers, particularly when I described the Delphi language as "well past its peak, and with its Pascal roots ? on the wrong side of trends in syntax."</p>
<p>\< ?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /></p>
<p>To address that line specifically, David I said that was "like saying that BASIC died in 1968?.Languages don't die unless [language designers] stop innovating in them." Which is true. But I wasn't speaking of missing features, I was speaking primarily about the trend away from structural explicitness and secondarily about the prevalence of C-language syntax. [ ]{style="mso-spacerun: yes"}Is Delphi something that a lot of people are intrigued by? Not if this treemap of sales of books about programming languages (taken from Tim O'Reilly) reflects broad trends (and I think it does). Perhaps I'm holding Borland / DevCo to too high a standard, but I think it speaks poorly to the language that there are more people reading about Vbscript than Delphi (I take the response as given that: "they don't read books because they're too busy making money." Sure.)</p>
<p>I highly doubt that the addition of features such as generics, closures, or even LINQ to Delphi will be sufficient to cause a resurgence in popularity (although they'll undoubtedly be welcomed by existing users). A resurgence in the popularity of LISP or Smalltalk is unlikely but to my mind either is more likely than a resurgence in popularity of Delphi. I just don't see this decade's market embracing the explicitness of Pascal-like language design. It's possible to imagine, though, a language that was backwards-compatible with today's Delphi but which supported looser styles of creating program entities (just as VB's "option explicit" essentially supports two different philosophical approaches). Such a language is what I meant by a "Delphi-in-name-only."</p>
<p>We talked briefly about the Classhelper technology, which is exactly the sort of thing that I see as being important to future growth.</p>
<p>The growth of Delphi aside, David I shared several interesting points about the spin-off that may provide some food for thought:</p>
<p>"DevCo" consists of the development tools, the database technologies, and some "legacy products." Obviously Delphi, JBuilder, and C++Builder, but also Interbase, JDataStore, Kylix, Turbo Assembler, and some others.</p>
<p>They have a .NET embeddable SQL database they've shown but not announced as a product.</p>
<p>"DevCo" has licenses for a number of Borland products (Together, RequisitePro, etc.) so that they can continue to sell the IDE in an integrated manner.</p>
<p>"Borland Developer Studio" has been the internal name for that which is installed by the DVD. In some places, they've marketed this as BDS, in other places as Delphi. This was the source of a little confusion on my part in the article, as I thought "Delphi" had become the overarching brand. One way or the other, the name for "DevCo"s products has not been determined and may even be determined by a contest among users! (Cute.)</p>
<p>David I says that Borland has a vested interest in the success of DevCo, as failure of DevCo would reflect poorly on Borland.</p>
<p>The leadership team of DevCo includes: Nigel Brown, Michael Swindell, Steve Todd, Alan Bauer, Ben Netick, and David I plus an internal Board of Directors.</p>
<p>They have 3-year roadmaps for Delphi, JBuilder, and Interbase.</p>
<p>Sarbanes-Oxley has lots of implications for software and other high-tech companies. It may be that under SOX you cannot add features in an update. (If this is the case, wow.)</p>
<p>The size of DevCo will be \~250-300 at the start.</p>
<p>DevCo will be headquartered in Scotts Valley. Borland will be HQ'ed in Cupertino. "That's the plan" (but investors / buyers might overrule).</p>
<p>Delphi: generics coming, eventually will support LINQ.</p>
<p>David I doesn't like referring to VCL as cross-platform. Likes to say "leveraging skills across implementations?...NET is not a platform, it's a layer on top of Win32."</p>
<p>In response to question about VCL on the Mac: "We're looking into that." Not on the roadmap. Time will tell; first and foremost is supporting existing customers. With bootcamp, will people develop in Windows on Mac hardware? Wondered David I.</p>
<p>"Wouldn't be surprised" if DevCo eventually supported more languages than are currently supported. (Didn't bite hard on my "Turbo Ruby" enthusiasms.) Mentioned</p>
<p>Interbuilder, a before-its-time JavaScript & Data tool. "Some of that DNA is still in DevCo."</p>
<p>Sees a "healthy market" for "the JBuilder experience," no matter on what technology that experience is built (originally, JBuilder was built on Delphi, then on Primetime, and in the future, on Eclipse).</p>
<p>We talked a little bit about the tension between spending resources on languages / IDEs and on databases. Traditionally, this has been a problem for Borland. David I is more on the languages side and didn't really have an opinion on whether the world was looking for a new dBase / Paradox.</p>
<p>Finally, we heartily agreed that "developers matter" and that there were golden opportunities for bold companies producing great development tools.</p>Fucking Shit2006-04-25T17:33:00-10:002006-04-25T17:33:00-10:00larrytag:knowing.net,2006-04-25:/posts/2006/04/fucking-shit/<p>We just found out that the fucking margins on Tina's <strong>second</strong> fucking lumpectomy aren't clear, meaning that she either has to get another fucking lumpectomy or a fucking mastectomy. Total fucking shit. And today's our fourteenth fucking wedding anniversary.</p>
<p>This is the type of situation for which I keep swearing …</p><p>We just found out that the fucking margins on Tina's <strong>second</strong> fucking lumpectomy aren't clear, meaning that she either has to get another fucking lumpectomy or a fucking mastectomy. Total fucking shit. And today's our fourteenth fucking wedding anniversary.</p>
<p>This is the type of situation for which I keep swearing in reserve.</p>Learning to Program2006-04-25T11:33:00-10:002006-04-25T11:33:00-10:00larrytag:knowing.net,2006-04-25:/posts/2006/04/learning-to-program/<p>John Montgomery wonders what would be good non-traditional ways to learn to program (where "traditional == text-based tutorial"). This is a subject dear to my heart and I started to write a post, but it looks like that's turning into an article, so here I'll just make the observation that the …</p><p>John Montgomery wonders what would be good non-traditional ways to learn to program (where "traditional == text-based tutorial"). This is a subject dear to my heart and I started to write a post, but it looks like that's turning into an article, so here I'll just make the observation that the expectation of what is intriguing / cool about computers has dramatically changed in the past 20 years and this has created a greater tension between opposing desires: the desire to give power to the student and the desire to teach the <strong>key to computing power</strong> which is the utter plasticity of Turing machines.</p>LaPlante leaving Microsoft, Replaced by Outsider Andrew Kass2006-04-25T11:08:00-10:002006-04-25T11:08:00-10:00larrytag:knowing.net,2006-04-25:/posts/2006/04/laplante-leaving-microsoft-replaced-by-outsider-andrew-kass/<p>Rick LaPlante, who was largely responsible for Microsoft's strategic embrace of Application Lifecycle Management and the "super-sizing" of the IDE into VSTS, is <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">leaving Microsoft and turning over the keys to Andrew Kass</a>. Kass is most recently SVP of Product Development at an Atlanta company called S1 that "delivers customer …</p><p>Rick LaPlante, who was largely responsible for Microsoft's strategic embrace of Application Lifecycle Management and the "super-sizing" of the IDE into VSTS, is <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">leaving Microsoft and turning over the keys to Andrew Kass</a>. Kass is most recently SVP of Product Development at an Atlanta company called S1 that "delivers customer interaction software for financial and payment services."</p>
<p>Kass has also held positions with Oracle, PeopleSoft and Living.com. As far as I can tell, he's basically an expert in CRM development. He got some notice for writing a caching mechanism for ATG Dynamo, presumably in Java.</p>
<p>I don't know Kass, so it's hard to say how much of a change this represents, but certainly it seems like a significant shakeup.</p>Sun Pops Stack: Turnaround Unlikely2006-04-25T08:11:00-10:002006-04-25T08:11:00-10:00larrytag:knowing.net,2006-04-25:/posts/2006/04/sun-pops-stack-turnaround-unlikely/<p>Scott McNealy, co-founder and long-time CEO of Sun, is <a href="https://com.com/results?q=news">stepping aside</a> in the wake of a miserable financial quarter, elevating Jonathan Schwartz to the top spot at the company. "Stepping aside" may be a euphemism for "shown the door" by a frustrated board, but my take is that, directionally, there …</p><p>Scott McNealy, co-founder and long-time CEO of Sun, is <a href="https://com.com/results?q=news">stepping aside</a> in the wake of a miserable financial quarter, elevating Jonathan Schwartz to the top spot at the company. "Stepping aside" may be a euphemism for "shown the door" by a frustrated board, but my take is that, directionally, there doesn't appear to be any shakeup: Schwartz and Papadopoulos move up a level and that's about it. Alan Zeichick suggests that McNealy's exit may foreshadow a sale. May be, although I have a hard time figuring out for whom Sun would be a good investment.</p>
<p>Sun's always been difficult to parse. There have been two eras when I thought they were going to take over the world (the early 90s and the late 90s) and other eras where I thought they were entirely irrelevant. With IBM clearly the most influential corporate entity in the Java world, now is one of those "irrelevant" periods. On the other hand, Sun has some <strong>brilliant</strong> people working for them, the type of people who can create industry-changing technologies. I thought that clockless CPUs might be that type of technology for Sun, but it was AMD, not Sun, that emerged as Intel's major competitor (and, incidentally, showed yet again how conservative the market is about CPU instruction sets).</p>Notes on Sharks, Written While Waiting for My Wife to Emerge from Cancer Surgery2006-04-21T14:00:00-10:002006-04-21T14:00:00-10:00larrytag:knowing.net,2006-04-21:/posts/2006/04/notes-on-sharks-written-while-waiting-for-my-wife-to-emerge-from-cancer-surgery/<p>With sharks, there is no theme music. Between Hollywood and The Discovery Channel, you can become familiar with sharks: their grace, their lethality, their cartilaginous skeletal systems. An actual encounter, as far as detail or knowledge goes, is largely superfluous. The sinuous way they move and the apparent lack of …</p><p>With sharks, there is no theme music. Between Hollywood and The Discovery Channel, you can become familiar with sharks: their grace, their lethality, their cartilaginous skeletal systems. An actual encounter, as far as detail or knowledge goes, is largely superfluous. The sinuous way they move and the apparent lack of effort in currents that forces others to retreat, the frame of open ocean around the shark ? perhaps you don't get that without getting in the water.</p>
<p>The major impression one gets from a shark encounter is, in fact, that there is no background music, no Mantovani by way of John Williams, no escalating narrative. No overarching theme of death, or science, or stalking. There's just, suddenly, a shark ? more often, two ? invariably closer than one expects and moving in utter silence. Not that SCUBA diving itself is quiet; the bubbles from your regulator are surprisingly loud. But fish -- even large, deadly fish ? move in silence. This is, perhaps, the most unnerving aspect of a shark encounter. Not the confrontation with a dangerous animal, but the appearance, so close, with no announcement. It is a failure of our senses and this, more than the vanishingly small potential of a bite, causes us fear.</p>
<p>Once, in the Sea of Cortez, my wife and I were diving in the open ocean off a seamount. It was late Summer and the water was thick with plankton. We were deep, too, with no reference to the bottom and a plankton layer above us that made the surface invisible. It was as dark, I suppose, as evening.</p>
<p>Afterwards, we both described the same experience. The wall of hammerheads, hundreds strong, as far up, as far down, as far left and right as could be seen. We had both seen it for some seconds before it sorted out in our minds. And then in four or five breaths ? the metronome of diving ? each hammerhead in the wall changed direction, turned their tails to us, and moved effortlessly into the dark. We never saw the school again.</p>
<p>Another time, we were surfacing at the end of a dive ? again, a deep dive far from shore ? and again we had lost the bottom. This time it was a current and poor air management that had forced us to surface in blue water, with no references and far, far from the boat. We were shallow, perhaps fifteen feet below the surface, dawdling for the mandatory adjustment of partial pressures necessary to avoid "the bends." I don't remember why, I certainly don't remember any "sense of being watched" or rising hairs, but I suddenly twisted around very fast. A shark was swimming towards me, with deliberate intention.</p>
<p>Since, I've been menaced by sharks three times (the dive boat joke is to parse the difference between "threatened" and "menaced," with the punch line being that "menaced means: regardless of the facts, I was scared"). Each time, the eventual turning away, filled with grace and disinterest, was the most fearsome moment. The shark turns and swims away, no faster, no slower, no acknowledgement of the current that pulls you. At some point, the shark has been gone from sight for some breaths and your mind sorts it out and there's only again the frame of the blue ocean.</p>Tablet PC Programming Articles: Gaming and Smart Clients2006-04-19T13:27:00-10:002006-04-19T13:27:00-10:00larrytag:knowing.net,2006-04-19:/posts/2006/04/tablet-pc-programming-articles-gaming-and-smart-clients/<p>My two latest articles on Tablet PC programming are up on DevX:</p>
<p><a href="https://www.developer.com/">The first details the development of Arcs of Fire and the Mobile PC Game SDK</a>.</p>
<p><a href="https://www.developer.com/">The second discusses the brand-new smart client sample application for Mobile PC development</a>.</p>Lang.NET Conference: Seattle, Here I Come!2006-04-19T08:41:00-10:002006-04-19T08:41:00-10:00larrytag:knowing.net,2006-04-19:/posts/2006/04/langnet-conference-seattle-here-i-come/<p>Microsoft is hosting the <a href="http://lambda-the-ultimate.org/node/1416">The .NET Programming Languages And Compilers Symposium</a> in August. 10 minute lightning talks on type systems, domain-specific languages, and code generation? Oh, you <strong>know</strong> I'm going.</p>Continuations in Mono: Good News for Language Implementors2006-04-19T08:36:00-10:002006-04-19T08:36:00-10:00larrytag:knowing.net,2006-04-19:/posts/2006/04/continuations-in-mono-good-news-for-language-implementors/<p>According to Miguel de Icaza, Mono, the cross-platform implementation of the .NET CLR, now has continuations thanks to the work of Tomi Valkeinen. The work is <a href="http://bat.org/%7etomba/monoco.html" title="http://bat.org/~tomba/monoco.html">here</a>. Continuations are significant to a number of programming languages that have been hard to implement on the CLR. Valkeinen's work may help a …</p><p>According to Miguel de Icaza, Mono, the cross-platform implementation of the .NET CLR, now has continuations thanks to the work of Tomi Valkeinen. The work is <a href="http://bat.org/%7etomba/monoco.html" title="http://bat.org/~tomba/monoco.html">here</a>. Continuations are significant to a number of programming languages that have been hard to implement on the CLR. Valkeinen's work may help a number of compiler developers.</p>Games on Rails2006-04-17T17:13:00-10:002006-04-17T17:13:00-10:00larrytag:knowing.net,2006-04-17:/posts/2006/04/games-on-rails/<p>So, I have the opportunity to help design a game SDK. On the one hand, I can go "sprites, sounds, physics," etc. And on the other hand, I can say <a href="https://rubyonrails.org/">Ruby on Rails</a>. Which is to say, I can look to RoR as an inspiration of a very successful framework …</p><p>So, I have the opportunity to help design a game SDK. On the one hand, I can go "sprites, sounds, physics," etc. And on the other hand, I can say <a href="https://rubyonrails.org/">Ruby on Rails</a>. Which is to say, I can look to RoR as an inspiration of a very successful framework. What does Rails tell us about designing frameworks and SDKs and how can it be applied to the domain of "casual games"?</p>Virtual methods are thread unsafe2006-04-17T12:50:00-10:002006-04-17T12:50:00-10:00larrytag:knowing.net,2006-04-17:/posts/2006/04/virtual-methods-are-thread-unsafe/<p>In my February 15th SD Times column on the future of concurrent programming models, I wrote "[A] basic rule for thread safety is 'either write objects with no fields or write objects with no virtual method calls'...." I received an email today from someone asking about why virtual method calls …</p><p>In my February 15th SD Times column on the future of concurrent programming models, I wrote "[A] basic rule for thread safety is 'either write objects with no fields or write objects with no virtual method calls'...." I received an email today from someone asking about why virtual method calls are unsafe. Here's an excerpt from my book:</p>
<p>Creating a safe multithreaded library is considerably more difficult than creating a single multithreaded application. Not only do you have to try to avoid deadlock in all the scenarios in which your library is used logically, you must never expose a virtual method that is called within a critical section. The problem is that if you declare a method as <strong>virtual</strong> and call it within a critical section (that is, a section in which you've acquired a <strong>Monitor</strong>), it is possible that the client programmer will override it in a way that creates a new thread and attempts to acquire the same <strong>Monitor</strong>. For this deadlock scenario to play out, the client must create a new thread since, as discussed on page 753, a call to acquire the <strong>Monitor</strong> within the same thread's call stack will succeed. This is a subtle-enough requirement that this object-oriented deadlock can sneak by a lot of unit tests and code reviews.</p>
<p>The injunction goes against all virtual calls: those marked <strong>virtual</strong>, interfaces, abstract classes, and delegate calls are all vulnerable to this object-oriented deadlocking. In the following program, a <strong>Library</strong> object executes the method <strong>Client.VirtualCall( )</strong>. This works alright for <strong>FineClient</strong>, but <strong>BadClient</strong> deadlocks:</p>
<p>//VirtualCritical.cs</p>
<p>//Never expose a virtual method inside a lock</p>
<p>using System;</p>
<p>using System.Threading;</p>
<p>using System.Collections;</p>
<p>\< ?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /></p>
<p>class Library {</p>
<p>[Client client;]{lang="FR" style="mso-ansi-language: FR"}</p>
<p>[ public Client MyClient{]{lang="FR" style="mso-ansi-language: FR"}</p>
<p>[ ]{lang="FR" style="mso-ansi-language: FR"}set { client = value;}</p>
<p>}</p>
<p>Thread t;</p>
<p>public void Run(){</p>
<p>ThreadStart ts = new ThreadStart(ThreadCaller);</p>
<p>t = new Thread(ts);</p>
<p>t.Name = "Library thread";</p>
<p>t.Start();</p>
<p>}</p>
<p>public void Stop(){</p>
<p>t.Abort();</p>
<p>t.Join();</p>
<p>}</p>
<p>void ThreadCaller(){</p>
<p>while (true) {</p>
<p>Console.WriteLine(Thread.CurrentThread.Name +</p>
<p>" asking for lock");</p>
<p>lock(this){</p>
<p>Console.WriteLine(Thread.CurrentThread.Name +</p>
<p>" acquired lock");</p>
<p>client.VirtualCall();</p>
<p>Thread.Sleep(1000);</p>
<p>}</p>
<p>Console.WriteLine(Thread.CurrentThread.Name +</p>
<p>" released lock");</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>abstract class Client{</p>
<p>public abstract void VirtualCall();</p>
<p>Library l;</p>
<p>public Library Library{</p>
<p>set { l = value;}</p>
<p>}</p>
<p>protected bool callDone = false;</p>
<p>public void LockAndTalk(){</p>
<p>callDone = false;</p>
<p>while (callDone == false) {</p>
<p>Console.WriteLine(this.GetType() +</p>
<p>" asking for lock");</p>
<p>lock(l){</p>
<p>Console.WriteLine(Thread.CurrentThread.Name +</p>
<p>" acquired lock");</p>
<p>Console.WriteLine("Virtual call executed");</p>
<p>Thread.Sleep(1000);</p>
<p>callDone = true;</p>
<p>}</p>
<p>}</p>
<p>Console.WriteLine(Thread.CurrentThread.Name +</p>
<p>" released lock");</p>
<p>}</p>
<p>}</p>
<p>class FineClient: Client {</p>
<p>public override void VirtualCall(){</p>
<p>LockAndTalk();</p>
<p>}</p>
<p>}</p>
<p>class BadClient: Client {</p>
<p>public override void VirtualCall(){</p>
<p>ThreadedLockAndTalk();</p>
<p>}</p>
<p>public void ThreadedLockAndTalk(){</p>
<p>ThreadStart ts = new ThreadStart(LockAndTalk);</p>
<p>Thread t = new Thread(ts);</p>
<p>t.Name = "BadClient";</p>
<p>t.IsBackground = true;</p>
<p>t.Start();</p>
<p>while (callDone == false) {</p>
<p>Thread.Sleep(1000);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>class TestingClass {</p>
<p>Library l;</p>
<p>TestingClass(Client c){</p>
<p>Console.WriteLine("Testing " + c.GetType());</p>
<p>l = new Library();</p>
<p>l.MyClient = c;</p>
<p>c.Library = l;</p>
<p>l.Run();</p>
<p>Thread.Sleep(10000);</p>
<p>Console.WriteLine("Ending test now...");</p>
<p>l.Stop();</p>
<p>}</p>
<p>public static void Main(){</p>
<p>new TestingClass(new FineClient());</p>
<p>new TestingClass(new BadClient());</p>
<p>}</p>
<p>}</p>
<p>The <strong>Library</strong> class contains a reference to a <strong>Client</strong> object, whose <strong>VirtualCall( )</strong> method is called within a <strong>lock</strong> block inside of <strong>Library.ThreadCaller( )</strong>. The two methods <strong>Library.Run( )</strong> and <strong>Library.Stop( )</strong> use previously discussed techniques to begin and end the <strong>ThreadCaller( )</strong> loop.</p>
<p>In addition to the <strong>abstract</strong> method <strong>VirtualCall( )</strong>, the <strong>abstract</strong> class <strong>Client</strong> specifies a method called <strong>LockAndTalk( )</strong>, which acquires a lock on the <strong>Library</strong> object, outputs something to the screen, waits a second, and then releases the lock. (This violates our preference to <strong>lock(this)</strong>, but it's the easiest code to demonstrate the danger of virtual method calls.)</p>
<p><strong>FineClient</strong> just calls <strong>LockAndTalk( )</strong>. When <strong>LockAndTalk( )</strong> is called in <strong>FineClient</strong>, it is being executed in the same thread that executed <strong>Library.ThreadCaller( )</strong> and that owns the <strong>Library</strong> monitor. Therefore, <strong>FineClient( )</strong> works just fine.</p>
<p><strong>BadClient( )</strong> implements <strong>VirtualCall( )</strong> in a way that the <strong>Library</strong> author did not anticipate: it starts a new <strong>Thread</strong> whose <strong>ThreadStart( )</strong> delegate, a method called <strong>ThreadedLockAndTalk( )</strong>, calls <strong>LockAndTalk( )</strong> from within a new thread. Notice that there is no explicit attempt on the part of the <strong>BadClient</strong> programmer to lock anything; the <strong>BadClient</strong> programmer is not doing anything obviously prone to failure. However, when <strong>ThreadedLockAndTalk( )</strong> calls <strong>LockAndTalk( )</strong> and that method attempts to acquire the lock on the <strong>Library</strong> object, the <strong>lock</strong> attempt is being executed from a <em>different</em> thread than the original thread in <strong>Library.ThreadCaller( )</strong>, which of course already has the lock on the <strong>Library</strong> object. The result is that although the <strong>BadClient</strong> programmer has done nothing obviously wrong, the <strong>Library</strong> deadlocks.</p>
<p>Writing a multithreaded library that is <em>reentrant</em>, that is, can be safely invoked from multiple threads, concurrently, and in a nested manner, is difficult enough at the best of times, but it is much harder if your library makes a virtual method call while holding onto a lock. Critical sections must be as controlled as possible; a virtual method call cedes that control and makes disaster all too likely.</p>
<p>></p>Sudoku source code available on MSDN2006-04-16T14:08:00-10:002006-04-16T14:08:00-10:00larrytag:knowing.net,2006-04-16:/posts/2006/04/sudoku-source-code-available-on-msdn/<p>::: {.Section1}</p>
<div>
Source code for Sudoku game like that in the Microsoft Touch Pack for UMPCs has been released on MSDN.
"This article closely examines Stephen Toub's Tablet PC-based implementation of Sudoku. It is the same implementation in the Touch Pack, a software package that comes preinstalled on ultra-mobile PCs (UMPCs …</div><p>::: {.Section1}</p>
<div>
Source code for Sudoku game like that in the Microsoft Touch Pack for UMPCs has been released on MSDN.
"This article closely examines Stephen Toub's Tablet PC-based implementation of Sudoku. It is the same implementation in the Touch Pack, a software package that comes preinstalled on ultra-mobile PCs (UMPCs). The article details the algorithmic aspects of implementing a Sudoku game, in addition to the specific details that help you implement other applications designed for Tablet PC and UMPC."
[…And don’t forget the Hexoduko challenge, with a prize of \$200 in programming books…]{style="font-size:11.0pt;font-family:Calibri;color:#1F497D"}
</div>
<p>:::</p>Breast cancer and taxes2006-04-16T12:25:00-10:002006-04-16T12:25:00-10:00larrytag:knowing.net,2006-04-16:/posts/2006/04/breast-cancer-and-taxes/<p>Instead of blogging about what's really going on in my life, I'll just say that I'm always surprised at the amount of whining I hear from computer professionals about doing taxes. Not whining about <strong>taxes</strong>, which is more than understandable, especially for the self-employed, but whining about <strong>doing</strong> taxes. Doing …</p><p>Instead of blogging about what's really going on in my life, I'll just say that I'm always surprised at the amount of whining I hear from computer professionals about doing taxes. Not whining about <strong>taxes</strong>, which is more than understandable, especially for the self-employed, but whining about <strong>doing</strong> taxes. Doing taxes takes me less than a workday and a good portion of that day is very mechanical double-checking of line items and categories.</p>
<p>The key to efficient taxes is tracking expenses <strong>during the year</strong>. As far as I'm concerned, there are only two keys to making tax preparation trivial:</p>
<ol>
<li>Use Quicken / Money all year round</li>
<li>Keep and use a separate credit card for tax-related expenditures.</li>
</ol>
<p>Both Quicken and Money allow you to assign tax-lines to specific categories. Every time you balance your accounts, you just assign the expenditures to the proper line-item (I also have a "Tax:Perhaps" category for ones that I'll eventually check). And it's not like it's <em>that</em> hard to figure out what is and isn't deductible -- business expenses, yes; movie tickets, no. The things that are hard to figure are the mixed-use things: computers, cell phones, home office. To make that easy, I just draw the boundaries in bold red lines: I have a home computer and my business computers, a business cell phone, and my office is all business.</p>
<p>I've only had a tax pro do my taxes one year and he gave me a list of questions and forms to fill out and it was <strong>at least</strong> as hard as using TurboTax.</p>
<p>Maybe preparing taxes is harder if you're rich.</p>Functional vs. OOP2006-04-05T12:47:00-10:002006-04-05T12:47:00-10:00larrytag:knowing.net,2006-04-05:/posts/2006/04/functional-vs-oop/<p>::: {.Section1}
Something I’ve been finding myself doing:</p>
<p>[class Foo{]{style="font-family:\"Courier New\""}</p>
<p>[ int someState;]{style="font-family:\"Courier New\""}</p>
<p>[ ]{style="font-family:\"Courier New\""}</p>
<p>[ static int Bar(int state)]{style="font-family:\"Courier New\""}</p>
<p>[ {]{style="font-family:\"Courier New\""}</p>
<p>[ return state * state;]{style="font-family:\"Courier New\""}</p>
<p>[ }]{style="font-family:\"Courier New\""}</p>
<p>[ ]{style="font-family …</p><p>::: {.Section1}
Something I’ve been finding myself doing:</p>
<p>[class Foo{]{style="font-family:\"Courier New\""}</p>
<p>[ int someState;]{style="font-family:\"Courier New\""}</p>
<p>[ ]{style="font-family:\"Courier New\""}</p>
<p>[ static int Bar(int state)]{style="font-family:\"Courier New\""}</p>
<p>[ {]{style="font-family:\"Courier New\""}</p>
<p>[ return state * state;]{style="font-family:\"Courier New\""}</p>
<p>[ }]{style="font-family:\"Courier New\""}</p>
<p>[ ]{style="font-family:\"Courier New\""}</p>
<p>[ public int Bar()]{style="font-family:\"Courier New\""}</p>
<p>[ {]{style="font-family:\"Courier New\""}</p>
<p>[ return Foo.Bar(someState);]{style="font-family:\"Courier New\""}</p>
<p>[ }]{style="font-family:\"Courier New\""}</p>
<p>[}]{style="font-family:\"Courier New\""}</p>
<p>[ ]{style="font-family:\"Courier New\""}</p>
<p>Essentially, developing my code in a functional manner (easier for unit-testing) and then refactoring a simpler public interface. Waddya’ think?
:::</p>"Meltdown expected"? Fetch me my cattle prod!2006-04-05T11:28:00-10:002006-04-05T11:28:00-10:00larrytag:knowing.net,2006-04-05:/posts/2006/04/meltdown-expected-fetch-me-my-cattle-prod/<p>A cab rider was detained for singing along to the Clash song "London Calling." Geez, lucky he wasn't singing "Guns of Brixton"</p>
<p>Gawd. I am so happy I'm not a teenager today. Given the <a href="https://uniregistry.com/market/domain/slf.com?d=slf.com">bands</a> I <a href="http://www.notgreatmen.com/">liked</a>, I'd probably be in Guantanamo by now. I know that some of the …</p><p>A cab rider was detained for singing along to the Clash song "London Calling." Geez, lucky he wasn't singing "Guns of Brixton"</p>
<p>Gawd. I am so happy I'm not a teenager today. Given the <a href="https://uniregistry.com/market/domain/slf.com?d=slf.com">bands</a> I <a href="http://www.notgreatmen.com/">liked</a>, I'd probably be in Guantanamo by now. I know that some of the stuff I wrote would have got me expelled.</p>
<p>I've always felt fortunate that I wasn't caught doing a bunch of stuff I did as a teenager, because instead of just working things out and becoming a pretty darn mellow guy, I know that it would have been like hooking a fish and I just would have rebelled much more ... well, I dare not say "violently" or "extremely" lest I risk extraordinary rendition ... so let's just say that I would have been <strong>even more</strong> of an insufferable know-it-all rebellious teenager.</p>
<p>I mean, I was just mad at Reagan and nonsense like missile defense, invading Grenada, and supply-side economics. Small beans compared to today's hypocrisy, corruption, value destruction, and delusional foreign policy.</p>Crossing the Chasm: Programming Languages Edition2006-04-05T08:57:00-10:002006-04-05T08:57:00-10:00larrytag:knowing.net,2006-04-05:/posts/2006/04/crossing-the-chasm-programming-languages-edition/<p>::: {.Section1}
[Geoffrey Moore's <a href="https://www.amazon.com/exec/obidos/ASIN/0060517123/thinkinginnet-20/002-1064678-9669613">Crossing the Chasm</a> is the best explanatory text of why tools succeed in the software development world (its scope is broader than SD, but SD is smack in the middle of its explanatory power). The basic idea is that dividing the world into a bell curve of …</p><p>::: {.Section1}
[Geoffrey Moore's <a href="https://www.amazon.com/exec/obidos/ASIN/0060517123/thinkinginnet-20/002-1064678-9669613">Crossing the Chasm</a> is the best explanatory text of why tools succeed in the software development world (its scope is broader than SD, but SD is smack in the middle of its explanatory power). The basic idea is that dividing the world into a bell curve of innovators, early adopters, early majority, late majority, and laggards is useful, but misses a crucial "chasm" that exists between early adopters and early majority:]{style="font-size:10.0pt;font-family:Verdana;color:#003300"}</p>
<p><img 13 alt="" height="208" id="Picture" src="http://www.knowing.net/content/binary/image001123456.gif" width="625" x0020></p>
<p>The gap exists for many reasons, but the major one is that what innovators and early adopters value and expect (with development tools, such things as expressiveness and high productivity but at the cost of learning something new) differs from what the majority values and expects (ease of use, integration). Java crossed the chasm, Smalltalk didn’t.</p>
<p>Will Ruby? Well, it’s going to be a challenge. If my theory is right, the “rapid inflation” that Ruby is currently undergoing is indicative that it’s broken out of “innovators” and is in the “early adopters” phase. So “the chasm” is looming. Right now, Ruby doesn’t have the toolset to appeal to early majority and, equally importantly, the Ruby community does not currently “speak to” the concerns of the majority (“Who else is using this?” “What about my existing investments?” “You mean, I have to train everyone in a new language and standard library?”). A <strong>huge</strong> problem in terms of “the chasm” is that Ruby interoperability with the CLR and the JVM is “early adopter”-style via bridges/interop. That’s not going to cut it with the majority – if it’s not integrated into Visual Studio or Eclipse, with full Intellisense, it’s not going to make it across the chasm.</p>
<p>This is one reason why I think there’s such a golden opportunty for “DevCo” – the ex-Borland languages division -- with Ruby. “DevCo” has expertise with “majority” issues: IDEs, integration, support, databases, etc.
:::</p>Use Eiffel for OSS, Get The IDE for free2006-04-05T08:09:00-10:002006-04-05T08:09:00-10:00larrytag:knowing.net,2006-04-05:/posts/2006/04/use-eiffel-for-oss-get-the-ide-for-free/<p>Eiffel Software, makers of the Eiffel programming language, have made their IDE <a href="https://www.eiffel.com/">EiffelStudio</a> available under a "dual license." Use it for commercial software, pay; use it for OSS, get it for free. Interesting idea and a good opportunity to see why Eiffel is a well-respected language.</p>
<p>Well-respected, but never very …</p><p>Eiffel Software, makers of the Eiffel programming language, have made their IDE <a href="https://www.eiffel.com/">EiffelStudio</a> available under a "dual license." Use it for commercial software, pay; use it for OSS, get it for free. Interesting idea and a good opportunity to see why Eiffel is a well-respected language.</p>
<p>Well-respected, but never very popular. It's interesting to look at Eiffel as an example of a language that's failed to gain more than niche attention. Not that niches are necessarily bad -- ISE / Eiffel Software has been around since the early 90s and is based in Santa Barbara, which is certainly one of the nicest places in the world to live.</p>
<p>But why is Ruby (say) increasing in popularity while Eiffel doesn't show any signs of groundswell? It's not that Ruby's new -- it's been around for more than decade now. While programming languages often take several years to achieve popularity, Ruby is quite long in the tooth. I don't see in Ruby any particular features "whose time has come" the way that C++ and Smalltalk blossomed at the turn of the 90s as OOP came roaring into the mainstream.</p>
<p>There are 3 things that I think you could propose as reasons to explain Ruby's increase and Eiffel's "failure to achieve orbit":</p>
<ul>
<li>explicit / implicit typing. I don't think this has much to do with it, but I'd be remiss not to mention it;</li>
<li>Rails. The console world had "Hello, World," the GUI world had the Rolodex form, and Rails has "scaffolding." While none of these are typical of day-to-day programming in that world, each is a heartening quick start that lifts the spirits of those immersed in that world. The Rolodex form was most impressive to people who hadn't mastered Win16 and led to the success of Visual Basic. Rails' "scaffolding" code is not going to get you through your project, but the impression it gives is much better than the impression of Visual Studio opening a blank Web page and saying "Drag components onto the form."</li>
<li>Pragmatic Programmers LLC. Bertrand Meyers "Object-Oriented Software Construction," is a book I keep as a definitive reference. But it's hardly a "fun" book to read and it wasn't followed up by a stream of other Eiffel-touting books. I think that Pragmatic Programmers and Ruby are in a feedback loop: the release of more Ruby books gives the impression of rapid growth which, in turn, attracts the attention of early adopters and younger programmers. You need a period of "rapid inflation" for a language to make it to the next level and I don't think Eiffel ever had that.</li>
</ul>
<p>\<</p>
<p>p dir=ltr style="MARGIN-RIGHT: 0px"> Saying that a flurry of books is important to language popularity flies against the common wisdom that dead-tree publishing has become a lame duck. But if you went back two years, what would make you think that success would come to Ruby and not, say, Haskell (another language with a vocal Internet fanbase)? I don't think the answer is in the syntax of the languages.</p>"Benchmarking inside a Virtual PC is wrong at every possible level" : Really?2006-04-04T12:01:00-10:002006-04-04T12:01:00-10:00larrytag:knowing.net,2006-04-04:/posts/2006/04/benchmarking-inside-a-virtual-pc-is-wrong-at-every-possible-level-really/<p>Is this true? I was under the impression that virtualization technology had gotten to the point where this kind of work was fine. If not, I'll try things out on real hardware.</p>
<p>Update: Trying out the n-queens problem (which I think is probably a pretty close match) with n = 14 …</p><p>Is this true? I was under the impression that virtualization technology had gotten to the point where this kind of work was fine. If not, I'll try things out on real hardware.</p>
<p>Update: Trying out the n-queens problem (which I think is probably a pretty close match) with n = 14 I get these results</p>
<hr>
<p>Native VMWare VPC
29.187 31.656 30.183
28.984 31.375 30.023
29.000 31.344 30.083
29.046 31.406 30.153
29.062 31.156 30.073</p>
<hr>
<p>It seems to me that the virtual machines <strong>do</strong> have a measurable overhead. On the other hand, the standard deviation is less than 1/2 of 1 percent in all cases (.2% for Native and VPC, .5% for VMWare). That makes me think that virtual machines are probably okay for this kind of benchmarking (because, despite the overhead, they seem to have stable performance). Remember, one of the rules of the contest is that there's no file io and these are console apps.</p>
<p>On the other other hand, the problem with my hexodoku benchmark (like most short benchmarks) is that program loading time is likely to be a very significant portion of solving order 4 Sudoku ("Hexoduko"). It would certainly make sense that virtualized overhead is greater with file access / loading and so that weighs against using a VPC.</p>Motorized inflatable pool lounger2006-04-04T09:01:00-10:002006-04-04T09:01:00-10:00larrytag:knowing.net,2006-04-04:/posts/2006/04/motorized-inflatable-pool-lounger/<p>::: {.Section1}
What is with the press releases today?</p>
<p><a href="http://www.excaliburelectronics.net/Merchant2/merchant.mv%3fScreen%3dMEDIA14%26Store"><img 6 alt="" height="391" id="Picture" src="http://www.knowing.net/content/binary/image00112345678910.jpg" width="450" x0020></a>
:::</p>Funny Team System Commercial2006-04-04T08:50:00-10:002006-04-04T08:50:00-10:00larrytag:knowing.net,2006-04-04:/posts/2006/04/funny-team-system-commercial/<p>The short commercial at the beginning of <a href="http://www.drdobbs.com/architecture-and-design">Dr. Dobb's TV</a> made me laugh.</p>Press releases unclear on the concept2006-04-04T08:48:00-10:002006-04-04T08:48:00-10:00larrytag:knowing.net,2006-04-04:/posts/2006/04/press-releases-unclear-on-the-concept/<p>::: {.Section1}
This press release for a MIME filtering antispam product is attached as a Word document file, one of the primary vectors for viruses.</p>
<p><img 31 alt="" height="331" id="Picture" src="http://www.knowing.net/content/binary/image00112345.gif" width="483" x0020></p>
<p>:::</p>Hexodoku Programming Contest: Win $200 Worth of The Year's Best Books2006-04-04T08:37:00-10:002006-04-04T08:37:00-10:00larrytag:knowing.net,2006-04-04:/posts/2006/04/hexodoku-programming-contest-win-200-worth-of-the-years-best-books/<p>My Hexodoku Programming Contest is live: the challenge is to generate 16 x 16 Sudoku grids. If multiple entries can consistently beat 1 second, the winner will be the program with best Big O behavior as the order of the grid scales (4\^4, 5\^4, 6\^4, etc.). The …</p><p>My Hexodoku Programming Contest is live: the challenge is to generate 16 x 16 Sudoku grids. If multiple entries can consistently beat 1 second, the winner will be the program with best Big O behavior as the order of the grid scales (4\^4, 5\^4, 6\^4, etc.). The prize is this year's Jolt Awards Finalists in the "General Books" Tags:</p>
<p><strong>"Prefactoring," by Ken Pugh (winner)</strong></p>
<p>"The Art of Project Management," by Scott Berkun</p>
<p>"Ambient Findability," by Peter Morville</p>
<p>"Producing Open Source Software," by Karl Fogel</p>
<p>"The Best Software Writing I," selected by Joel Spolsky</p>
<p>"Innovation Happens Elsewhere," by Ron Goldman and Richard Gabriel</p>
<p>Contest runs until May 1 2006 or, if I don't have 4 entries by then, until I either receive 4 entries or June 1.</p>
<p>Programs can be in any language that runs in an Windows XP Pro Virtual PC.</p>Back to work at 6 a.m.2006-04-02T09:27:00-10:002006-04-02T09:27:00-10:00larrytag:knowing.net,2006-04-02:/posts/2006/04/back-to-work-at-6-am/<p>Hawaii doesn't have "Daylight Savings Time." In the winter, we're 2 hours behind the West Coast and I work from 7 AM to 3 PM in an attempt to make my location as little of an issue as possible. In the summer, we're 3 hours behind. So I have to …</p><p>Hawaii doesn't have "Daylight Savings Time." In the winter, we're 2 hours behind the West Coast and I work from 7 AM to 3 PM in an attempt to make my location as little of an issue as possible. In the summer, we're 3 hours behind. So I have to get up an hour earlier and start the email processing at 6 AM. The good news is that by now the sky is lightening by 5:30.</p>PC Mag Redesign2006-04-02T09:07:00-10:002006-04-02T09:07:00-10:00larrytag:knowing.net,2006-04-02:/posts/2006/04/pc-mag-redesign/<p>Just got the April 25th edition of PC Mag via <a href="https://www.zinio.com/">Zinio</a>. They've done a redesign and boy, do I not like it. Much more consumerist, big photos, second-class text. Automotive coverage is now a big thing with them: not only do they have a column, but this issue is some …</p><p>Just got the April 25th edition of PC Mag via <a href="https://www.zinio.com/">Zinio</a>. They've done a redesign and boy, do I not like it. Much more consumerist, big photos, second-class text. Automotive coverage is now a big thing with them: not only do they have a column, but this issue is some "drive tech" awards bullcrap.</p>
<p>I still think PC Mag is the best general-audience computer magazine, but this is step away from what I look to them for.</p>
<p>Oh, and they put Dvorak on the backpage.</p>Wahoo!2006-04-02T07:47:00-10:002006-04-02T07:47:00-10:00larrytag:knowing.net,2006-04-02:/posts/2006/04/wahoo/<p>::: {.Section1}
<img 3 alt="" height="728" id="Picture" src="http://www.knowing.net/content/binary/image001123456789.jpg" width="546" x0020></p>
<p>Some friends took us fishing yesterday and we hooked up 32 pounds of <em>Acanthocybium solandri</em> aka wahoo aka ono. "Ono" is the Hawaiian word for "delicious." It's one of my favorite fishes, but I think I'm going to get tired of it in the coming weeks!</p>
<p>P.S. Troll …</p><p>::: {.Section1}
<img 3 alt="" height="728" id="Picture" src="http://www.knowing.net/content/binary/image001123456789.jpg" width="546" x0020></p>
<p>Some friends took us fishing yesterday and we hooked up 32 pounds of <em>Acanthocybium solandri</em> aka wahoo aka ono. "Ono" is the Hawaiian word for "delicious." It's one of my favorite fishes, but I think I'm going to get tired of it in the coming weeks!</p>
<p>P.S. Troll the 40 fathom line, especially at high slack.
:::</p>Microsoft Hiring Ruby Implementor2006-03-28T15:17:00-10:002006-03-28T15:17:00-10:00larrytag:knowing.net,2006-03-28:/posts/2006/03/microsoft-hiring-ruby-implementor/<p>Microsoft is looking for a developer whose "first task will be to drive the exploration of other dynamic languages such as Ruby and JavaScript on the CLR". Dang. If only they allowed people to work remotely...</p>Tablet PC Honesty2006-03-28T14:38:00-10:002006-03-28T14:38:00-10:00larrytag:knowing.net,2006-03-28:/posts/2006/03/tablet-pc-honesty/<p>Rob Bushway data-mined the buzz about Origami to reveal that a lot of Tablet PC users don't carry their existing Tablets around as much as they might claim. It's a good catch. I have 3 Tablets (how ridiculous is that?) and have to admit in all honesty that somewhere over …</p><p>Rob Bushway data-mined the buzz about Origami to reveal that a lot of Tablet PC users don't carry their existing Tablets around as much as they might claim. It's a good catch. I have 3 Tablets (how ridiculous is that?) and have to admit in all honesty that somewhere over 90% of my work on them is done in desktop mode. For something to be carryable requires an incredible fine-tuning of features. I <strong>never</strong> carry around my Toshiba Portege M200 (a convertible) -- that's the role of my Motion Computing M1400 slate (which shares the form-factor of my third tablet, an M1200, which is gathering dust, quite honestly). It's not that the M200 weighs a few more ounces (although it does), but the balance. The Motion Computing slates are really, really appealing for carrying around -- the M200 just doesn't feel the same way.</p>
<p>On the other hand, what <strong>do</strong> I carry around all the time? My Pocket PC Phone Edition PDA (an O2 XDA) which I like much more than my now-bricked SMT5600 Smartphone. Its got instant-on and battery life long enough not to worry about it. If only it had Shapewriter / Shark text input I'd be in heaven. (By the way, the "coming soon" version of Shapewriter has been that way for a year and a half: could IBM be holding back because Microsoft has so much to gain from a great mobile text input technology?)</p>
<p>On the other hand, the view-anywhere screen on the M1400 is better than that of even my PDA. But it's only 1024 x 768, while my M200 is 1400 x 1050.</p>
<p>In other words, there are a million (or at least a dozen) tiny little things: balance, screen readability, resolution, accessories, battery life, text input speed, etc... that weigh into the decision to carry a computer at all times. It seems to me that it's more a case of time and luck than anything else, that eventually there's going to be some piece of hardware that really hits the sweet spot. Whether the Origami / UMPC is it, I don't know -- the base resolution of 800 x 480 makes me doubt I'll be using it to compose articles.</p>Permalinks fixed (?)2006-03-27T13:23:00-10:002006-03-27T13:23:00-10:00larrytag:knowing.net,2006-03-27:/posts/2006/03/permalinks-fixed/<p>I have had a problem with <a href="http://www.dasblog.net">dasBlog</a> by which the first load of a page on this site (via permalinks) would serve up a 404, but if you refreshed, you'd get the page. The solution <strong>appears</strong> to be at hand: by <a href="https://www.hanselman.com/blog/ACTIONREQUIREDDasBlogAlertReferralBlackListHasChanged.aspx">turning off the Movable Type blacklist in the configuration …</a></p><p>I have had a problem with <a href="http://www.dasblog.net">dasBlog</a> by which the first load of a page on this site (via permalinks) would serve up a 404, but if you refreshed, you'd get the page. The solution <strong>appears</strong> to be at hand: by <a href="https://www.hanselman.com/blog/ACTIONREQUIREDDasBlogAlertReferralBlackListHasChanged.aspx">turning off the Movable Type blacklist in the configuration,</a> all is well (I think).</p>The 60 Percent Solution2006-03-27T07:46:00-10:002006-03-27T07:46:00-10:00larrytag:knowing.net,2006-03-27:/posts/2006/03/the-60-percent-solution/<p>So first a writer in Australia says that "Up to 60% of the code in the new consumer version of Microsoft new Vista operating system is set to be rewritten," and the blogosphere goes crazy. Then Scoble wigs out\< ?xml:namespace prefix = o /> and says:</p>
<ol>
<li>It's not true;</li>
<li>It's absurd …</li></ol><p>So first a writer in Australia says that "Up to 60% of the code in the new consumer version of Microsoft new Vista operating system is set to be rewritten," and the blogosphere goes crazy. Then Scoble wigs out\< ?xml:namespace prefix = o /> and says:</p>
<ol>
<li>It's not true;</li>
<li>It's absurd to the point of being non-credible; and</li>
<li>If you link to the original article, Scoble won't link to you.</li>
</ol>
<p>Let's start at the last point: here's the original article. For a guy whose great theme is PR as "conversation," the threat is unseemly at best, hypocritical at worst. Because, to move on to point #2, the assertion is <strong>not absurd on its face</strong>. Amazing, incredible, disastrous: yes. Prima facie absurd? No. The development of Vista has been extremely rocky and huge projects with troubled histories often end up in a quagmire. Even if the proposition that Vista is in a horrid quagmire is an extraordinary claim requiring extraordinary sourcing, given the lack of technical precision in mainstream tech publications, the assertion could be an overly dramatic statement of the not-absurd premise that up to 60% of the subsystems unique to the consumer version need refactoring. If that were the case, it would mean a delay in schedule for Vista, but at this point, it's not like that is unthinkable.</p>
<p>Perhaps it is unthinkable internally at Microsoft and that's part of the reason that Microsoft is so angry ? "We've finally turned the corner on this, and they say we're still in trouble! Bastards!" But Scoble seems to think that journalists should know that the story couldn't be possible true. While journalists know tons of beta-level non-public stuff, for major announcements, we typically only get a few days notice. On real surprises, especially bad news, we will often only get news that news is coming ? when Microsoft calls <strong>you</strong> to schedule an interview with a VP, you know something's bad. On the other hand, those of us who've been around a long time, know tons of people who work inside of Microsoft or who used to work at Microsoft and, one way or the other, end up knowing lots of secret stuff. Microsoft has internal politics and strong personalities and a surprising amount of invisible or below-the-radar projects.</p>
<p>Now, to point #1: Is there any truth to it? Given Microsoft's vociferous denials and the enormous schedule risk of a major refactoring of <em>anything</em> in Vista at this point, I doubt it. But I'll still keep my ears open.</p>LISP macros versus C macros2006-03-24T11:05:00-10:002006-03-24T11:05:00-10:00larrytag:knowing.net,2006-03-24:/posts/2006/03/lisp-macros-versus-c-macros/<p>::: {.Section1}
[Ted Neward also laments the lack of LISP-style macros in mainstream programming languages. Damn straight. LISP macros allow you to <strong>extend the syntax</strong> of your programming language. You know how modern IDEs allow you to type 'for' and then hit some key and it expands into a complete for …</p><p>::: {.Section1}
[Ted Neward also laments the lack of LISP-style macros in mainstream programming languages. Damn straight. LISP macros allow you to <strong>extend the syntax</strong> of your programming language. You know how modern IDEs allow you to type 'for' and then hit some key and it expands into a complete for loop and even knows, within the generated code, where the "blank spots" are that you need to fill in, and even moves the cursor to where you start typing in (in Visual Studio 2005, these are called "snippets")? So if you had a snippet/macro that generated, let's say, the scaffolding to instantiate a DirectX surface and another snippet that generated the scaffolding to, say, load a mesh and add it to the surface, your typing might be reduced to "]{style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: Calibri"}[GameSurface{expand-key} LoadMesh{expand-key}room.mesh;" and you might end up with 1,000 lines of code and you'd code before and after and in the "blank spots" with your normal coding language. Now imagine that the expansion of the snippet occurred at compile or runtime. So you'd have a whole bunch of normal programming code, but in the middle, instead of 1,000 lines of code, you'd just have "`GameSurface `LoadMesh room.mesh" and the back-quote (say) would indicate "expand this." And, of course, it might be hard at first for someone to understand what goes on when GameSurface or LoadMesh is expanded. But once they were convinced that it was robust and flexible, they'd probably start using the LoadMesh snippet/macro themselves and, in doing so, would be using what is in effect a Domain-Specific Language. And, of course, it's hard to write a robust and flexible snippet/macro. But it's still []{.underline} simpler than any other way I've seen to write DSLs. ]{style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: Calibri"}</p>
<p>Uh... Now that I think about it... With today's VS2005 macro capabilities, could you write a macro that expands other macros and then run the "expanding" macro as a custom pre-build step? Gee, how much more would I like to explore that this weekend than debugging the dang broken permalinks on my site?</p>
<p>>
:::</p>Should programmers fear offshoring?2006-03-24T10:33:00-10:002006-03-24T10:33:00-10:00larrytag:knowing.net,2006-03-24:/posts/2006/03/should-programmers-fear-offshoring/<p>Ted Neward argues that "programmers shouldn't fear offshoring."</p>
<p>He has two theses:</p>
<ul>
<li>Unlike previous industrial revolutions, the demands in the software industry are such that there'll be plenty of work for all; and</li>
<li>Best practices seem to indicate that physical proximity is important to software success</li>
</ul>
<p>I'd like to agree …</p><p>Ted Neward argues that "programmers shouldn't fear offshoring."</p>
<p>He has two theses:</p>
<ul>
<li>Unlike previous industrial revolutions, the demands in the software industry are such that there'll be plenty of work for all; and</li>
<li>Best practices seem to indicate that physical proximity is important to software success</li>
</ul>
<p>I'd like to agree, but I can't. Neward's first point is argued in terms of productivity, and he says "Because what's expected of software is constantly on the same meteoric rise as what productivity gains provide us, the need for programmer time remains pretty close to constant." Putting aside the premise that there has been a "meteoric rise" in productivity, the argument only speaks to the total size of the market; there's no reason to think that the domestic market will stabilize relative to the international market.</p>
<p>His second point is definitely more substantive. We <strong>absolutely</strong> know the importance of communication in evolving requirements. We <strong>absolutely</strong> know that the waterfall model of a document of perfectly accurate and unambiguous requirements that can be handed to a development team to implement is <strong>not just mythical, but a harmful myth</strong>. Quality issues are definitely an Achilles' Heel of outsourcing projects (if this were an article, I'd dig up supporting citations from CACM, ACM Queue, and Software Development).</p>
<p>However, the large majority of U.S. domestic software teams <strong>do not exploit their advantages</strong> of proximity and communication. Sure, team leaders and analysts work with stakeholders and, in a domestic team, then work directly with programmers and there's definitely some advantage there. But how many coders see communication as their competitive edge? How many programmers say "Well, yeah, I could spend the morning learning this API that will be used, but it's more important that I spend the morning in a meeting with users"?</p>
<p>A lot of programmers feel more comfortable ? more productive, more fulfilled -- working with code than with people. That's not a value judgment, it's an observation (including, yeah, the way I sometimes feel myself). My point is that physical proximity is not a substitute for communication.</p>
<p>Look, <strong>I'm offshore</strong>, but I stay busier than I can handle because I can talk very clearly about software, not just when I'm writing articles, but when I'm developing software for clients. It's no substitute for face-to-face communication and whiteboards, but I do have an advantage in that I can discuss my code (over the phone or in writing or if I travel) in terms of higher-level things, like design patterns and OO design and systems analysis and risk analysis, etc. That knowledge and clarity about non-coding issues is the advantage that allows me to be an offshore coder. And, when I look at newsgroups and forums and other resources, it looks to me that interest in these type of issues is, if anything, more common among non-US programmers than among US programmers.</p>XNA, Managed Code, and XBox Live Arcade2006-03-21T10:25:00-10:002006-03-21T10:25:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/xna-managed-code-and-xbox-live-arcade/<p>The <a href="http://www.gamasutra.com/">February '06 issue</a> of Game Developer Magazine (hey -- the last magazine I founded that is still in publication) has an article on "Casual Games and the Mass Market." They mean games like those of PopCap and PlayFirst: you know, Bejeweled and the like. Okay, so first of all, it's …</p><p>The <a href="http://www.gamasutra.com/">February '06 issue</a> of Game Developer Magazine (hey -- the last magazine I founded that is still in publication) has an article on "Casual Games and the Mass Market." They mean games like those of PopCap and PlayFirst: you know, Bejeweled and the like. Okay, so first of all, it's a \<span class="math">\(240 million a year industry, projected to go to \\)</span>900M by 2009 (but on the other hand "projected to grow to..." means "someone made up this number").</p>
<p>Greg Canessa, group manager of XBox Live Arcade: "The conversion rates, from free to paid, were staggering. The industry average for PC-downloadable games is under 1 percent, and we were getting <strong>a sustained average conversion rate</strong> across our 20 titles of <strong>almost 12 percent</strong>." (emphasis added).</p>
<p>I've been there, I know: Game development is the worst freaking subset of the software development industry you can imagine. But holy cow, with Microsoft's preview of XNA that was just released at the <a href="https://www.gdconf.com/">Game Developer's Conference</a>, you can now use C# or VB.NET to write the next Tetris / Bejeweled / PacMan. Man, is that a tempting market. Man. I mean... Man.</p>
<p>And if you don't want to learn DX, PopCap has released the engine <strong>they use</strong> under a no-fee, Open Source, must-give-credit license.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Pandora vs. Last.fm2006-03-21T09:42:00-10:002006-03-21T09:42:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/pandora-vs-lastfm/<p>::: {.Section1}
[I haven't tried Last.fm, which is a music recommendation service based on what other people listening to <em>X</em> []{.underline} also listen to. But I like Pandora quite a bit, so this article comparing them was worth reading. On the other hand, I still prefer <a href="http://www.kexp.org/">KEXP</a> to both.]{style …</p><p>::: {.Section1}
[I haven't tried Last.fm, which is a music recommendation service based on what other people listening to <em>X</em> []{.underline} also listen to. But I like Pandora quite a bit, so this article comparing them was worth reading. On the other hand, I still prefer <a href="http://www.kexp.org/">KEXP</a> to both.]{style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: Calibri"}\< ?xml:namespace prefix = o />
:::</p>Scott Hanselman has diabetes: Sponsor Team Hanselman2006-03-21T09:42:00-10:002006-03-21T09:42:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/scott-hanselman-has-diabetes-sponsor-team-hanselman/<p>::: {.Section1}
[<a href="https://www.hanselman.com/blog/TeamHanselmanAndDiabetesWalk2006.aspx">Scott is walking in the Diabetes Walk and is only halfway to his fund-raising goal</a>. C'mon, give him a \$20.]{style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: Calibri"}\< ?xml:namespace prefix = o />
:::</p>Tracepoints: Debugger controlled printf() debugging2006-03-21T09:42:00-10:002006-03-21T09:42:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/tracepoints-debugger-controlled-printf-debugging/<p>::: {.Section1}
[A "tracepoint" is a breakpoint that doesn't "break" you into the debugger, it outputs a trace to the Debug console. Apparently, VS2005 has them. <em>Via</em> [Chris Anderson\< ?xml:namespace prefix = o />] ]{style="FONT-SIZE: 11pt; COLOR: #1f497d; FONT-FAMILY: Calibri"}
:::</p>Software engineer salaries in India and China2006-03-21T09:41:00-10:002006-03-21T09:41:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/software-engineer-salaries-in-india-and-china/<p>::: {.Section1}</p>
<div>
According to a survey conducted by [Mercer Human Resource Consulting LLC](https://www.mercer.com/ "http://www.mercerhr.com/"), a software engineer in Beijing makes \$13,400 per year. In India, a software engineer makes \$10,300 per year. Salaries in India are growing at 11.5% per year …</div><p>::: {.Section1}</p>
<div>
According to a survey conducted by [Mercer Human Resource Consulting LLC](https://www.mercer.com/ "http://www.mercerhr.com/"), a software engineer in Beijing makes \$13,400 per year. In India, a software engineer makes \$10,300 per year. Salaries in India are growing at 11.5% per year (over the past 5 years) and 7.5% per year in China in the same period. The survey also said that software engineering wages in Beijing, Shanghai, and Guangzhou are higher by approximately 20% versus jobs in other Chinese cities.[ *Via* \[David Intersimone\]]{style="COLOR: #1f497d"}\< ?xml:namespace prefix = o /\>
</div>
<p>:::</p>A wiki where every page is a literate program2006-03-21T09:40:00-10:002006-03-21T09:40:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/a-wiki-where-every-page-is-a-literate-program/<p>::: {.Section1}
I am interested by Literate Programming, in which both human-readable discussion and compiler-readable code are combined. Not only does such a system allow a document to be unit-tested, it generally allows code samples to be more expressive, because you can re-order code sections to fit the discussion. I’ve …</p><p>::: {.Section1}
I am interested by Literate Programming, in which both human-readable discussion and compiler-readable code are combined. Not only does such a system allow a document to be unit-tested, it generally allows code samples to be more expressive, because you can re-order code sections to fit the discussion. I’ve written a literate programming system for Word and .NET, but this is even cooler: <a href="http://en.literateprograms.org/LiteratePrograms:Welcome">a Wiki whose markup supports literate programming</a>. Every page has a “download code” button that generates both a listing and even a .ZIP file!
:::</p>Software Development *Is* Program Transformation2006-03-21T09:40:00-10:002006-03-21T09:40:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/software-development-is-program-transformation/<p>::: {.Section1}
[Ralph Johnson makes the point that since the majority of work on code is subsequent to its initial creation, the idea that transforming one program into another is not a theoretical exercise, but a fundamental reality of the way things already work. <em>Via</em> [<a href="http://patricklogan.blogspot.com/2006/03/software-development-is-program.html">Patrick Logan</a>] ]{style="font-size:11.0pt …</p><p>::: {.Section1}
[Ralph Johnson makes the point that since the majority of work on code is subsequent to its initial creation, the idea that transforming one program into another is not a theoretical exercise, but a fundamental reality of the way things already work. <em>Via</em> [<a href="http://patricklogan.blogspot.com/2006/03/software-development-is-program.html">Patrick Logan</a>] ]{style="font-size:11.0pt;font-family:Calibri; color:#1F497D"}</p>
<p>[ ]{style="font-size:11.0pt;font-family:Calibri; color:#1F497D"}</p>
<p>:::</p>When to build a DSL2006-03-21T09:40:00-10:002006-03-21T09:40:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/when-to-build-a-dsl/<p>::: {.Section1}
This is a technical paper that contains good advice on domain-specific languages. <em>Via</em> [<a href="http://lambda-the-ultimate.org/node/1345">Lambda the Ultimate</a>]
:::</p>High-speed binary file reading in C#2006-03-21T09:39:00-10:002006-03-21T09:39:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/high-speed-binary-file-reading-in-c/<p>::: {.Section1}
Another good article on C#. This one on how to use <a href="https://weblogs.asp.net/ralfw/440575">interop to speed file reading</a>. [<em>via</em> Steve Pietrek]
:::</p>Ray Ozzie's LiveClipboard: Another Elevation of Cut & Paste2006-03-21T09:39:00-10:002006-03-21T09:39:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/ray-ozzies-liveclipboard-another-elevation-of-cut-paste/<p>::: {.Section1}
Ray Ozzie’s “Clipboard for the Web” is also (partially) based on the premise that “cut and paste” / copying is something that is inherently productive. A microtrend?
:::</p>Jonathan Edwards on Programming By Copy & Paste2006-03-21T07:25:00-10:002006-03-21T07:25:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/jonathan-edwards-on-programming-by-copy-paste/<p>::: {.Section1}
[I have been very intrigued by Jonathan Edwards’ work on “Subtext,” a spreadsheet-like programming language that elevates “copy and paste” to be the primary means by which programs are constructed. He’s already put up some prototypes and casual discussions, but now he’s posted <a href="https://alarmingdevelopment.org/?p=36">a draft of a …</a></p><p>::: {.Section1}
[I have been very intrigued by Jonathan Edwards’ work on “Subtext,” a spreadsheet-like programming language that elevates “copy and paste” to be the primary means by which programs are constructed. He’s already put up some prototypes and casual discussions, but now he’s posted <a href="https://alarmingdevelopment.org/?p=36">a draft of a more formal definition</a> of what he’s doing. ]{style="font-size:11.0pt;font-family:Calibri; color:#1F497D"}
:::</p>Nice article on templating and generics2006-03-21T06:51:00-10:002006-03-21T06:51:00-10:00larrytag:knowing.net,2006-03-21:/posts/2006/03/nice-article-on-templating-and-generics/<p>::: {.Section1}
This is a nice article demonstrating a programming style that has become possible in C# 2.0. Update: Fixed broken link.
:::</p>Truck Dismount2006-03-20T15:42:00-10:002006-03-20T15:42:00-10:00larrytag:knowing.net,2006-03-20:/posts/2006/03/truck-dismount/<p><a href="https://jet.ro/dismount/">This game</a> perfectly captures how I feel right now:</p>
<p>Movie</p>Is the UMPC not the "XBoy" IPod Killer?2006-03-20T09:49:00-10:002006-03-20T09:49:00-10:00larrytag:knowing.net,2006-03-20:/posts/2006/03/is-the-umpc-not-the-xboy-ipod-killer/<p>This article reports on Microsoft's rumored 'iPod killer' and is filled with enough details to make me think that this is a different project from Origami/UMPC. That's interesting, because when the rumors of an "XBoy" started a few months ago, I mentally said "Oh, that's the Origami." (Yes, I …</p><p>This article reports on Microsoft's rumored 'iPod killer' and is filled with enough details to make me think that this is a different project from Origami/UMPC. That's interesting, because when the rumors of an "XBoy" started a few months ago, I mentally said "Oh, that's the Origami." (Yes, I knew about Origami for months before launch.)</p>Assurances from CMP: DDJ to change, Jolts to continue2006-03-20T09:09:00-10:002006-03-20T09:09:00-10:00larrytag:knowing.net,2006-03-20:/posts/2006/03/assurances-from-cmp-ddj-to-change-jolts-to-continue/<p>Apparently, DDJ has had a redesign (which doesn't necessarily mean new editorial direction, but could be...) and wants to continue the Jolt Awards going forward (although it's a little confusing, as the Jolts will apparently continue as a project tasked to CMP's Events groups).</p>
<p>Rosalyn Lum, SD's Technical Editor, is …</p><p>Apparently, DDJ has had a redesign (which doesn't necessarily mean new editorial direction, but could be...) and wants to continue the Jolt Awards going forward (although it's a little confusing, as the Jolts will apparently continue as a project tasked to CMP's Events groups).</p>
<p>Rosalyn Lum, SD's Technical Editor, is moving to the Events group, so to the extent that DDJ evolves its content, it won't be with her help. That's too bad, as Rosalyn should get most of the credit for SD's improvement in surveys and quantitative numbers, which I think has grown to be one of SD's key strengths.</p>Site issues2006-03-19T08:09:00-10:002006-03-19T08:09:00-10:00larrytag:knowing.net,2006-03-19:/posts/2006/03/site-issues/<p>I've heard from several people that permalinks to this site fail initially, but if you reload the page, they work (but, of course, most people just click away at the first 404). The site is hosted with <a href="https://www.gearhost.com/">Gearhost</a>, with whom I'm generally pleased, but I don't have access to the …</p><p>I've heard from several people that permalinks to this site fail initially, but if you reload the page, they work (but, of course, most people just click away at the first 404). The site is hosted with <a href="https://www.gearhost.com/">Gearhost</a>, with whom I'm generally pleased, but I don't have access to the actual OS, all I can do is work with web.config.</p>
<p>I'm running <a href="http://www.dasblog.net">dasBlog</a>, with which I'm generally happy, but the documentation sucks. There's no sign of this in the defect tracker on SourceForge. Naturally, I suspect some kind of caching issue.</p>
<p>I'm going to try to take a run at the problem today, but ony have a few hours to look at it.</p>
<p><strong>Update</strong>: Grr... It's not a caching issue, it seems to be a defect / bug in <a href="http://www.dasblog.net">dasBlog</a> relating to session state. Haven't been able to get a debug version of <a href="http://www.dasblog.net">dasBlog</a> to compile and run (it's interacting with .NET 2.0 in a weird way). So much for my Sunday morning... The problem will have to wait.</p>
<p>Oh, by the way, the "technical refresh" of Office 12 Beta 1 is <em>vastly</em> improved. Outlook stability seems much better and I can actually understand at least some aspects of the "task-based" UI, of which my initial impression was utter shock and disapproval.</p>Why DDJ Won't Change2006-03-17T13:47:00-10:002006-03-17T13:47:00-10:00larrytag:knowing.net,2006-03-17:/posts/2006/03/why-ddj-wont-change/<p><a href="https://www.joelonsoftware.com/2006/03/16/software-development-productivity-awards/">Joel Spolsky incorrectly read the announcement as SD taking over the Dobb's name</a>. <a href="http://www.developerdotstar.com/community/node/444">Dan Read </a> hopes this might mean a hybrid magazine that combines the best of both. At the risk of alienating my future potential editors, almost certainly not. So far, what we've got looks like the pro forma …</p><p><a href="https://www.joelonsoftware.com/2006/03/16/software-development-productivity-awards/">Joel Spolsky incorrectly read the announcement as SD taking over the Dobb's name</a>. <a href="http://www.developerdotstar.com/community/node/444">Dan Read </a> hopes this might mean a hybrid magazine that combines the best of both. At the risk of alienating my future potential editors, almost certainly not. So far, what we've got looks like the pro forma assurances that are typical of an all-out acquisition. Software Development's Editor, <a href="http://www.alexawebermorales.com/">Alexa Weber-Morales</a>, was laid off in December (when she was six months pregnant, to boot). The magazine's being folded in the June timeframe, which means that the "change" will coincide with the build-up to the announcement of the 2007 advertising rates (at least, if the calendars are the same as they were when I left the company 10 years ago). In other words, even with what I imagine is considerable overlap in their subscription lists, Dr. Dobb's will get a circulation boost of 30-50K readers which will allow them to raise their advertising rates. Aside from a bug on the cover for a six months or a year, and perhaps a 16-page internal supplement, that's probably all they will take from SD.</p>
<p>At the most basic level, Dr. Dobb's probably sees no reason to change a winning formula -- they know what they like and they execute it. If Jon Erickson and the editorial team wanted the softer, more management-oriented articles that characterized Software Development, they would have already incorporated that type of writing. As for columnists, I think SD has some writers who are clearly at the very top of their craft -- you may have heard of this <a href="http://www.ambysoft.com/">Scott Ambler</a> kid -- but DDJ already has a full boat of writers to whom they've always tended to be loyal.</p>
<p>I may be wrong and, facing the travails of the industry, this might be an epochal shift in content. I doubt it, though. There's no new blood.</p>The Imminent Death of Developer's Magazines2006-03-17T10:09:00-10:002006-03-17T10:09:00-10:00larrytag:knowing.net,2006-03-17:/posts/2006/03/the-imminent-death-of-developers-magazines/<p>Eric Sink had an incredibly timely post on "<a href="https://ericsink.com/entries/Magazines_Dying.html">The Eventual Death of Developer Magazines</a>" in which he noted that print publications such as Dr. Dobb's, Software Development, and Visual Studio were becoming thinner and thinner. Things were even worse than he noted, though, since the magazines held a certain portfolio …</p><p>Eric Sink had an incredibly timely post on "<a href="https://ericsink.com/entries/Magazines_Dying.html">The Eventual Death of Developer Magazines</a>" in which he noted that print publications such as Dr. Dobb's, Software Development, and Visual Studio were becoming thinner and thinner. Things were even worse than he noted, though, since the magazines held a certain portfolio length and devoted more and more "advertising pages" to unpaid ads for in-house projects such as conferences and other magazines.</p>
<p>Of course, the major issue with developer magazines is that they have not adapted to the Web. There are all sorts of reasons for this, but one that has gone largely unremarked is that the developer magazines (except Code Magazine) are all put together by old folk like me. At 42, I don't consider myself particularly old unless I'm playing Ultimate Frisbee, but when I took over Computer Language, I was 26 and I was taking over from J.D. Hildebrand, who I think was 29. Our competitors at Dr. Dobb's, Jeff Duntemann's company, and R&D, were a little older, but not much.</p>
<p>The thing about young editors is that they create magazines that have a feeling of discovery, because the staff is not convinced that they know everything. They don't know how the magazine "must be," they don't keep columns out of nostalgia and inertia, and they haven't gotten over the passion for creativity and the thrill of power when a technique is explained clearly.</p>
<p>In the particular case of developer magazines, there is a myth that what makes a magazine popular is that it's an "invaluable aide to the business of developing software." (That's not a direct quote from anyone, but it's so absurd that I can't write it without sarcastic quotes.) Dr. Dobb's Journal, which launched with the boast of "Running light without overybyte" has long changed to "Software Tools for the Professional Programmer." From the day I took over Computer Language, the advertising side pushed towards the momentous day when the magazine had not a line of code, a day which thankfully came to pass long after I'd left the top of the masthead.</p>
<p>What makes a magazine popular is ... well, I could write a bunch of stuff about "shared passion" and "personal but authoritative voices" but that would just be old-farty of me -- what makes a magazine successful is exactly what makes blogging successful. Same thing, different era.</p>SD Magazine: R.I.P.2006-03-15T11:03:00-10:002006-03-15T11:03:00-10:00larrytag:knowing.net,2006-03-15:/posts/2006/03/sd-magazine-rip/<p>Oh well. The writing had been on the wall, but today it's official: Software Development magazine, which I founded in 1992, has been absorbed by Dr. Dobb's Journal and will cease publication. Ironically, SD was born when Dr. Dobb's absorbed Computer Language after Miller Freeman (now CMP) bought DDJ. Between …</p><p>Oh well. The writing had been on the wall, but today it's official: Software Development magazine, which I founded in 1992, has been absorbed by Dr. Dobb's Journal and will cease publication. Ironically, SD was born when Dr. Dobb's absorbed Computer Language after Miller Freeman (now CMP) bought DDJ. Between the two events, that means more than 150,000 subscribers who signed up for Computer Language or Software Development and winded up with DDJ. Just saying.</p>Is it because of the actor Jim Beaver?2006-03-05T12:46:00-10:002006-03-05T12:46:00-10:00larrytag:knowing.net,2006-03-05:/posts/2006/03/is-it-because-of-the-actor-jim-beaver/<p>I've said I "love Deadwood" before, but a <a href="https://www.amazon.com/gp/search/ref%3dbr_ss_hs/002-6057121-7236868%3fsearch-alias%3daps%26keywords%3ddeadwood%2520season%25202">search on Amazon for the 2nd season of Deadwood</a> returns "<a href="https://www.amazon.com/exec/obidos/tg/detail/-/B00069E6FU/sr%3d8-2/qid%3d1141598396/ref%3dpd_bbs_2/002-6057121-7236868%3f%255Fencoding%3dUTF8%26v%3dglance">Female Masturbation - Clitoris: The Key to a Woman's Pleasure</a>". Huh. That's a whole 'nother level of fan.</p>Turing Award winner announced2006-03-05T11:35:00-10:002006-03-05T11:35:00-10:00larrytag:knowing.net,2006-03-05:/posts/2006/03/turing-award-winner-announced/<p>::: {.Section1}</p>
<div>
ACM just announced that this year they are giving the Turing Award to Peter Naur for his pioneering award on the Algol 60 programming language.[ *Via* ]{style="color:navy"}Kevin Schofield
</div>
<p>:::</p>Oscars, Sopranos, & Babylon 52006-03-04T11:44:00-10:002006-03-04T11:44:00-10:00larrytag:knowing.net,2006-03-04:/posts/2006/03/oscars-sopranos-babylon-5/<p>Having just watched "Junebug" (so far, my favorite movie released in 2005, but Hawaii being what it is, I haven't yet seen some others that I expect to like a lot), we were reflecting on how over-rated "Crash" is. At this point, if you want to see characters that have …</p><p>Having just watched "Junebug" (so far, my favorite movie released in 2005, but Hawaii being what it is, I haven't yet seen some others that I expect to like a lot), we were reflecting on how over-rated "Crash" is. At this point, if you want to see characters that have truly complex moral struggles, you're far better off television than movies. It's no insight that many shows now have multi-episode and even multi-season story arcs that are too complex to understand on first viewing (oh, how I love "Deadwood"). With a new season of "The Sopranos" about to debut, I was reflecting on how supremely disappointed I'll be if the series does not end with a conclusive end for Tony (Christopher killing him and taking his place would be the classical ending, but I could accept anything that leaves that house of his empty (oh, and has a final shot of ducks flying with the guns of unseen hunters banging in the distance)....Where was I?) </p>
<p>But, I was thinking "What was first show that was designed to center around a multi-year story arc?" and, as far as I can recall, the answer is "Babylon 5."</p>
<p>We also watched "The Island" this week -- not nearly as bad as I had expected. Not great, but not bad at all. On the other hand, they've been playing "The Core" on one of the cable channels and I've caught about half an hour of it: where is "Mystery Science Theatre 3000" when you need them? There's a scene where the scientist is explaining the composition of the Earth and he holds up a sliced avocado (or perhaps a pear) and says "Say this is the Earth--" at which point I immediately guessed that the next line was "-- of course, the Earth is very much larger, but you knew that."</p>Wikipedia is ripe for AI Exploitation2006-03-03T18:50:00-10:002006-03-03T18:50:00-10:00larrytag:knowing.net,2006-03-03:/posts/2006/03/wikipedia-is-ripe-for-ai-exploitation/<p>Researchers have already begun using Google to help with AI tasks. For instance, if you search Google for two words, you can get a sense of their relatedness by comparing the relative number of links returned (e.g., "cat and dog" vs. "cat and politics"</p>
<p>Wikipedia is an even greater …</p><p>Researchers have already begun using Google to help with AI tasks. For instance, if you search Google for two words, you can get a sense of their relatedness by comparing the relative number of links returned (e.g., "cat and dog" vs. "cat and politics"</p>
<p>Wikipedia is an even greater potential source of data for AI techniques. With more than 1,000,000 articles now, I am sure the cross-links and statistical frequencies of words and phrases within Wikipedia could be put to startling effect.</p>C# & VB: Peer Pressure vs. Random Walk2006-03-01T09:35:00-10:002006-03-01T09:35:00-10:00larrytag:knowing.net,2006-03-01:/posts/2006/03/c-vb-peer-pressure-vs-random-walk/<p>Programming language <strong>popularity</strong> is a fascination of mine and has been since (at least) I joined "Computer Language" magazine "back in the day." Note that this is a different fascination than programming language <strong>capability</strong>, which goes all the way back to the time I read my Dad's copy of "<a href="http://www.digibarn.com/collections/books/computer-lib/">Computer …</a></p><p>Programming language <strong>popularity</strong> is a fascination of mine and has been since (at least) I joined "Computer Language" magazine "back in the day." Note that this is a different fascination than programming language <strong>capability</strong>, which goes all the way back to the time I read my Dad's copy of "<a href="http://www.digibarn.com/collections/books/computer-lib/">Computer Lib/Dream Machines</a>" because it had pictures.</p>
<p>My recent article on C#'s popularity on the CLR has brought some good commentary here and elsewhere, but one perspective really rankles. This is the dismissal of the popularity of the C language family as resulting from ignorance. Every programmer in the world knows that there are languages whose advocates claim significant productivity benefits over the C family. Yet in the past decade, we've seen two languages, Java and C#, come into existence and become very popular. Dismissing those millions of choices as "ignorant" is willfully ... uh ... not greatly insightful.</p>
<p>Bill Mill, a commentor who felt forced to move from VB to C#, says in email:</p>
<blockquote>
<p>My most important point in C#'s favor was actually my third one: the third parties we work with want to use C#. They'll use VB, but at higher cost, and they keep trying to push us to C# anyway. Why fight them when C# a) seems to be the only real first-class citizen of the CLR and b) has the most resources for learning?</p>
<p>Basically, VB.Net is enough of a new language for us that it's not worth it to push against the grain to use it over C# - easier just to learn a (different) new language.</p>
</blockquote>
<p>The centrality of network effects / peer pressure is the "stumbling into" argument made insightful. Historical contingency gave C an edge and resulted in a world where communication of programming pragmatics favors the forms in the C family. Okay, maybe.</p>
<p>But the implication is that language designers <strong>ought</strong> to create variations on C's syntax. By this logic, a C-like LISP (Lots of Irritating Superfluous Curly Brackets?), a C-like Smalltalk, a C-like Ruby, etc. would succeed more than their current designs.</p>
<p>Now, I'm highly skeptical of that conclusion, but I think it follows from the premise, doesn't it?</p>
<p>To anticipate at least one objection, there's an argument about syntax complexity: at some point, the mainstream throws up its hands at the complexity that needs to be added to the C language family in order to achieve mainstream goals and turns to languages whose syntax can be described in a very concise manner. You can point to the crest of C++ popularity and the rise of Java and C# as, perhaps, a minor earthquake of this sort.</p>
<p>But then the question becomes, Is a Big One possible? Is a wholesale shift of the mainstream away from C-derived syntax going to happen? To me, the answer is undoubtedly "yes." It's only a question of how long the pressure will build and then what the trigger will be: a tool, a particular type of application, a new abstraction, a hardware shift? (I also don't think that a "collapse" to a very concise syntax is necessarily inevitable or even likely. Look at the rise of C++: the coexistence of paradigms was more important than syntactical elegance)</p>
<p>I believe that the manycore era may well be a "window" in which there is an opportunity for a major shift in programming sensibilities (oh, what the heck, "paradigms").</p>Smalltalkers sneer at my LINQ-thusiasm2006-02-28T15:32:00-10:002006-02-28T15:32:00-10:00larrytag:knowing.net,2006-02-28:/posts/2006/02/smalltalkers-sneer-at-my-linq-thusiasm/<p>James Robertson thinks that I'm too breathless about LINQ in my recent article about C#'s popularity on the CLR. For some reason, I can't post to his comment section, so I'll just respond here and shoot him a trackback:</p>
<p>What got through the asbestos was the comment that I …</p><p>James Robertson thinks that I'm too breathless about LINQ in my recent article about C#'s popularity on the CLR. For some reason, I can't post to his comment section, so I'll just respond here and shoot him a trackback:</p>
<p>What got through the asbestos was the comment that I "confused s-expressions with function pointers." C'mon, be fair to the context. I think that paragraph is pretty good for, what? 80 words?, making the point about code-data equivalence while trying to acknowledge languages like LISP and Smalltalk. Feel free to abhor C#, my code, or my conclusions, but please don't ignore the fact that I'm one of the few industry analysts who bends over backwards to talk about languages outside the C family.</p>
<p>As to the issues of type, perhaps my statement on explicit-implicit vs. static-dynamic was not as clear as it could be. (Clear or not, though, I note that some commentors taking potshots at my accuracy perpetuate the static-dynamic confusion on their own blogs.) I think James took my point in his OP, where he acknowledges that the mainstream has voted for explicitness. He then goes on to (essentially) say "Look how much verbiage results!" Further, LINQ introduces type inference, but you still have to (finger-)type these as <strong>var</strong>. Implicit-typers feel free to roll your eyes. However, in contrast with what I take to be the popular sentiment [@ James' blog], I don't believe implicit vs. explicit typing plays <strong><em>the central role</em></strong> i****n language popularity. Some role, yes, but not nearly as dominant in practice as its presented by advocates.</p>
<p>The article is about why C# is the most popular language for the CLR. I tried to write that I felt there were 3 main issues: the popularity of the C language family, the evolution of the CLR from a technology with relatively narrow goals to one that aims to be a platform for broad developmentand the role of Anders Hejlsberg in the evolution of the CLR. I suggested that the role of Hejlsberg is the most intriguing, because one can clearly see an alignment between his interests and opinions and the evolution, not just of C#, but of the CLR. Therefore, I would think fans of languages other than C# would do well to pay attention to Hejlsberg's latest work, precisely because it likely foreshadows the evolution of a very important platform.</p>
<p>Finally, the comment that the industry "blindly stumbled into" a preference for the C family is very disappointing. I hope <a href="http://patricklogan.blogspot.com/">Patrick Logan</a> isn't so tired of fighting the good fight that's the best he can muster. C# is all of 5 years old, Java 10, the old excuse that they are languages of Moore's Generations distant in the past has entirely lost its persuasiveness.</p>
<p>A question for those who believe explicit-implicit typing is central to language popularity: on the CLR, why has C# grown to be more popular than VB?</p>Origami: Textbook viral marketing2006-02-28T10:59:00-10:002006-02-28T10:59:00-10:00larrytag:knowing.net,2006-02-28:/posts/2006/02/origami-textbook-viral-marketing/<p>Apparently, <a href="http://www.downloadsquad.com/2006/02/27/microsofts-origami-project-revealed/">"it's been pretty much established as fact that Origami is a new "ultramobile lifestyle PC" from Microsoft."</a></p>
<p>This fits a couple other data points, but we'll just have to see. One way or the other, though, <strong>whoever organized this "mystery" sure earned their pay.</strong> I suspect that 90% of …</p><p>Apparently, <a href="http://www.downloadsquad.com/2006/02/27/microsofts-origami-project-revealed/">"it's been pretty much established as fact that Origami is a new "ultramobile lifestyle PC" from Microsoft."</a></p>
<p>This fits a couple other data points, but we'll just have to see. One way or the other, though, <strong>whoever organized this "mystery" sure earned their pay.</strong> I suspect that 90% of the bloggers linking to the origami project knew the truth.</p>
<p>What this reminds me of is the yearly pre-MacWorld speculation. It's been the type of thing Microsoft has not, traditionally, been very good at.</p>
<p>On the other hand, if it turns out the Origami project is a COBOL compiler, a lot of people will be disappointed.</p>www.origamiproject.com2006-02-23T11:03:00-10:002006-02-23T11:03:00-10:00larrytag:knowing.net,2006-02-23:/posts/2006/02/wwworigamiprojectcom/<p>hmmm....</p>The myth of better programming languages2006-02-22T11:03:00-10:002006-02-22T11:03:00-10:00larrytag:knowing.net,2006-02-22:/posts/2006/02/the-myth-of-better-programming-languages/<p>I like Andy Hunt, and I like Ruby, but his post at perpetuates a myth that I think is harmful. He says of Ruby, "First, more than any other language I've used, it stays out of your way. You don't have to spend any effort 'satisfying the compiler'.... I can …</p><p>I like Andy Hunt, and I like Ruby, but his post at perpetuates a myth that I think is harmful. He says of Ruby, "First, more than any other language I've used, it stays out of your way. You don't have to spend any effort 'satisfying the compiler'.... I can type in an absurd amount of code in Ruby and have it work the first time. Not 2-3 passes .... It just works"</p>
<p>What I object to is a small thing: his use of the word "you" in the first sentence ("out of your way...You don't..."). I have no problem with the second part of the quote ("I can type..."). The myth is that programmers share a psychology and therefore, the tool that "fits" my mind will "fit" your mind if only you give it a try. Now, that may prove the case for particular instances of "I" and "you," and I applaud reasoned advocacy of whatever-the-heck you love in life, but I've come to believe that there is <strong>not</strong> a shared psychology of computer programming.</p>
<p>Please don't reduce my point to Microsoft's insulting "Mort, Elvis, Einstein," scheme, which combines the same sweeping generality I'm condemning with a heap of condescension (do you think anyone working in Redmond classifies themselves as "Mort"?). I'm talking about programmers perfectly capable of tackling the same problems with the same productivity.</p>
<p>What I'm suggesting is that there is not a "best" programming language, nor perhaps are there even "better" programming languages once you get beyond a certain level of functionality. Certain programming languages are better at certain tasks, without a doubt (If you want to scrape a Web page, use a language in the Perl family. If you want to keep your CPU toasty-warm, use C++ and assembler).</p>
<p>Are there languages that "stay out of [my] way," and in which my code "works the first time...It just works"? Absolutely. In my career, I've felt that way about Basic, Prolog, PAL, C++, Java, and, lately, C# (although I had this anonymous delegate thing the other day I <strong>still</strong> can't parse). I used to write lengthy Prolog programs on the bus and type them in when I got to work. For a brief while, I thought that would be true for everyone, if only they gave the language a chance. In retrospect, I was fortunate to fall for a language that so few loved.</p>
<p>Lisp is the king of languages touted as "if only you gave it a chance." But what Lisp advocates fail to acknowledge is that Lisp was given a chance by virtually everyone exposed to computer science in the 70s and 80s. Lisp and Basic are the most abandoned languages in the field. Lisp was the second or third language I learned (after Basic, and pretty much simultaneously with Fortran) and I worked with it professionally in the late 80s and early 90s. Back then, it didn't fit my psychology. Now, though, in the Jolt Awards, my vote for best book of the year will go to Peter Seibel's "Practical Common Lisp" and I've caught myself thinking about burying a Lisp interpreter in an upcoming project.</p>
<p>Ruby is the belle of the ball currently, largely because of Rails. It's a recurring theme in programming language popularity that the differences between languages, which are very real, are masked by libraries and toolsets. Smalltalk, for instance, may or may not "fit" your mind, but the Smalltalk browser and workspace were, without a doubt, years beyond other IDEs. Ruby may or may not "fit" your mind, but Rails is without a doubt the most influential framework in several years. Java brought unit-testing into the mainstream, VB brought GUI builders, etc.</p>
<p>The shame is that when advocates conflate the benefits of their libraries and tools with the psychological aspects of their language, they focus attention incorrectly. What you get is "Hey, let's port Rails to .NET," or whatever, when what is needed is more discussion of what makes Ruby "fit" in certain approaches. Especially frustrating is that we don't even have a decent vocabulary for discussing language differences. People talk about "dynamic languages" and that, to many, means "dynamic typing," which, to many, means "implicit typing." And implicit vs. explicit typing so dominates the discussion of programming languages that IT MAKES ME WANT TO F***ING SHOOT MYSELF!!!!! THERE ARE OTHER ISSUES, PEOPLE!!!!!!</p>
<p>Okay, sorry.</p>
<p>But, for instance, Prolog relies on sequences of predicates: true, true, false ... oh, back up, try something else ... true, true, true, etc. Is that something that "fits" your mind or not? I haven't tried any languages that implement predicate dispatch, but I'm thoroughly convinced such languages would appeal to me.</p>
<p>Another example: As I've been reinvestigating Lisp, I've found myself actively <strong>liking</strong> Lots of Irritating Superfluous Parentheses. Now, I'm like "Yeah, why should I type a ')' to end a call, a ';' to end a statement, and a '}' to end a block? They're not 'superfluous,' there are rarely more parentheses than there would be operators-or-punctuators." But is seeing different operators important to <strong>you</strong> to quickly understand structure? (For me, I think a major reason for my change in attitude is that after 17 years of OO, flow-control in my programs is now much more governed by the structure of the object-graph, not the values of local variables.)</p>
<p>[...Wow. I didn't intend to rant like this... Okay, finishing it off abruptly...]</p>
<p>The important thing is to realize that different languages engage your mind in different ways. There <strong>are</strong> languages that you will find allow you to be profoundly more productive solving certain problems. Search for those languages, and do not conflate tool and environmental benefits (equally interesting, equally worth pursuing) with language benefits. Also realize that your own mental approach to programming is always evolving and may change the way that a certain language strikes you.</p>
<p>Okay. Off to walk the dog.</p>MyHeritage: Inspiring Leader2006-02-21T12:19:00-10:002006-02-21T12:19:00-10:00larrytag:knowing.net,2006-02-21:/posts/2006/02/myheritage-inspiring-leader/<p>Oh, you have to try My Heritage. It diagnosed my temperament perfectly:</p>Refactoring vs. Procedural Code: Would you refactor this?2006-02-21T09:34:00-10:002006-02-21T09:34:00-10:00larrytag:knowing.net,2006-02-21:/posts/2006/02/refactoring-vs-procedural-code-would-you-refactor-this/<p>When my application starts, it sets in motion a process by which an event is received back at the main form. It's an event that's common enough (let's say, "Maximize Window") but the first time I receive it, I have to process it in a special manner. So, I have …</p><p>When my application starts, it sets in motion a process by which an event is received back at the main form. It's an event that's common enough (let's say, "Maximize Window") but the first time I receive it, I have to process it in a special manner. So, I have code like this:</p>
<div class="highlight"><pre><span></span><code> <span class="k">class</span> <span class="n">MyMainForm</span>{ ... <span class="n">big</span> <span class="nb">long</span> <span class="n">complex</span> <span class="nb">code</span> ... <span class="n">bool</span> <span class="n">firstTimeThroughEventHandler</span> = <span class="n">true</span>; <span class="n">void</span> <span class="n">MyEventHandler</span>(<span class="n">object</span> <span class="n">o</span>, <span class="n">EventArgs</span> <span class="nb">e</span>){ <span class="nb">lock</span>(<span class="n">this</span>){ <span class="k">if</span>(<span class="n">firstTimeThroughEventHandler</span> == <span class="n">true</span>) { <span class="n">firstTimeThroughEventHandler</span> = <span class="n">false</span>; ... <span class="nb">one</span> <span class="n">time</span> <span class="nb">code</span> ... } } } ... <span class="n">lots</span> <span class="n">more</span> <span class="nb">code</span> ... }
</code></pre></div>
<p>So this is just begging for refactoring, right? You have one-time behavior, an instance variable used as a flag, a (slight) performance hit that is not needed 99.9% of the time, etc.</p>
<p>But the thing is, I can't shake the feeling that anything I do to refactor it will make the code less clear. Of course I can refactor a new class to hold the event handler, and attach and detach it to the event, and, y'know, yeah, fine. But, geez, adding a class to a project introduces a mental burden, too, one that seems to me at least as great as "oh, that variable's a flag that's used by that event handler. It doesn't mean anything anywhere else."</p>
<p>Also, note that I don't have any other behavior in the event handler. If it were "if firstTimeThrought { code }else{ other code}" the decision to refactor would be easy. But this is trivial cyclomatic complexity: 1 entry point, 1 decision, 1 exit point.</p>
<p>What do you think?</p>Cheney. Dick Cheney.2006-02-12T17:03:00-10:002006-02-12T17:03:00-10:00larrytag:knowing.net,2006-02-12:/posts/2006/02/cheney-dick-cheney/<p>What's troubling about this is that the press, in reporting <a href="https://www.msn.com/">this incident</a>, jeopardizes the plan by which Cheney poses as a geriatric heart patient, lures terrorists into range, and then blasts them to hell.</p>Take That, Options Scalper!2006-02-10T18:11:00-10:002006-02-10T18:11:00-10:00larrytag:knowing.net,2006-02-10:/posts/2006/02/take-that-options-scalper/<p>It's always nice to make a blogroll cut.</p>
<p>But then, optionsScalper gloats about coming in "above" me, so of course I check to see how out-ranked I am.</p>
<p>You'd think that a guy who makes his business in derivatives trading would recognize alphabetical ordering.</p>RIP: Mansour Safai2006-02-10T08:47:00-10:002006-02-10T08:47:00-10:00larrytag:knowing.net,2006-02-10:/posts/2006/02/rip-mansour-safai/<p>Mansour Safai, an important player in the software development tools industry, has died. He was still young and my thoughts are with his family and children.</p>Novell a good fit for ex-Borland Delphi Group2006-02-10T08:44:00-10:002006-02-10T08:44:00-10:00larrytag:knowing.net,2006-02-10:/posts/2006/02/novell-a-good-fit-for-ex-borland-delphi-group/<p>Of all the scenarios being mooted on the purchase of Borland's line of compilers and IDEs, the one that I like the most is Novell.</p>
<p>Novell's Mono project includes an implementation of the .NET CLI that runs on Windows, Linux, OS X, and a number of UNIXes. The Delphi group …</p><p>Of all the scenarios being mooted on the purchase of Borland's line of compilers and IDEs, the one that I like the most is Novell.</p>
<p>Novell's Mono project includes an implementation of the .NET CLI that runs on Windows, Linux, OS X, and a number of UNIXes. The Delphi group has an IDE, compilers and compiler expertise including top optimization quality, and experience with VM development. Technology wise, the two groups are highly complementary.</p>
<p>The only thing I wonder is if Novell has the fire in the belly to recognize that now is a viable time for an alternative to the Visual Studio-Eclipse polarity. Few people realize that the window on the next phase of development is opening now. We're entering a disruptive phase in software development (ref. Windows 3.1 and the rise of OO, the WWW and the rise of Java, the dot-com crash and the rise of agile techniques). The change in programming context to multicore <strong>will</strong> cause a disruption in software development.</p>No-Longer-Borland Folk Seem Confident2006-02-09T11:16:00-10:002006-02-09T11:16:00-10:00larrytag:knowing.net,2006-02-09:/posts/2006/02/no-longer-borland-folk-seem-confident/<p>Every indication is that the people involved in Borland's compilers and IDE are confident that they will carry the products forward.</p>
<p>I talked to a couple people and I still haven't heard of a specific suitor, but there's also a real tone of confidence.</p>
<p>There's already a "Delphi Corporation", but …</p><p>Every indication is that the people involved in Borland's compilers and IDE are confident that they will carry the products forward.</p>
<p>I talked to a couple people and I still haven't heard of a specific suitor, but there's also a real tone of confidence.</p>
<p>There's already a "Delphi Corporation", but there doesn't seem to be a "Turbo Corp." I guess the Turbo brand is a thing of the past, but it was such a great friggin' name -- easy to remember, good connotations, etc. Dropping it always seemed the biggest branding mistake in Borland-Inprise-Borland's history... Oh, wait...</p>Borland Casting Off IDE, Compilers2006-02-08T07:57:00-10:002006-02-08T07:57:00-10:00larrytag:knowing.net,2006-02-08:/posts/2006/02/borland-casting-off-ide-compilers/<p>Today, Borland announced that they are seeking a buyer for their line of IDEs and compilers and will concentrate on their Application Lifecycle Management tools. They also announced that they're buying Segue, which on a normal day would be big news, but, my god, the end of Turbo?</p>
<p>This really …</p><p>Today, Borland announced that they are seeking a buyer for their line of IDEs and compilers and will concentrate on their Application Lifecycle Management tools. They also announced that they're buying Segue, which on a normal day would be big news, but, my god, the end of Turbo?</p>
<p>This really feels like the passing of an era to me. Of course, Borland has been eclipsed (hah!) in every aspect, but Borland was such a huge part of my nascent programming / software development life and the C/C++ wars of the late 80s and early 90s so dominated my formative years in the tech magazines....</p>
<p>Borland is being somewhat cagey if they actually have a buyer lined up. Officially, they're saying "We're seeking..." but David I seems to feel that moving to a new company is a done deal (it may be that David I is simply in a position to retire if no buyer can be found).</p>Tablet-based handhelds around the corner?2006-02-08T07:45:00-10:002006-02-08T07:45:00-10:00larrytag:knowing.net,2006-02-08:/posts/2006/02/tablet-based-handhelds-around-the-corner/<p>::: {.Section1}
TG Daily is reporting that [“Ultra Mobile Lifestyle PCs” will be launched in the 1^st^ Quarter]{style="font-size: 10.0pt;font-family:Arial"} (not much time to make that!). I think there’s <strong>huge</strong> potential for this form factor if the price point can really be brought down to …</p><p>::: {.Section1}
TG Daily is reporting that [“Ultra Mobile Lifestyle PCs” will be launched in the 1^st^ Quarter]{style="font-size: 10.0pt;font-family:Arial"} (not much time to make that!). I think there’s <strong>huge</strong> potential for this form factor if the price point can really be brought down to the \$500 level. <em>Via</em> JK On The Run
:::</p>Outlook's Fatal Flaw as an RSS Aggregator: Desktop Search2006-02-05T09:23:00-10:002006-02-05T09:23:00-10:00larrytag:knowing.net,2006-02-05:/posts/2006/02/outlooks-fatal-flaw-as-an-rss-aggregator-desktop-search/<p>I use NewsGator as my aggregator, but I think I'll have to change. The problem is that when RSS posts flow into your system as email items, desktop search for real email becomes much less useful.</p>
<p>For instance, searching your real email archive for words like "schedule" or "deadline" would …</p><p>I use NewsGator as my aggregator, but I think I'll have to change. The problem is that when RSS posts flow into your system as email items, desktop search for real email becomes much less useful.</p>
<p>For instance, searching your real email archive for words like "schedule" or "deadline" would likely result in a very relevant set of returns. If, though, your RSS reader is integrated in Outlook, that same search will turn up a hundred RSS posts for every real email message to you.</p>
<p>Ironically, you can search <em>within</em> Outlook based on folder structure, but none of the Desktop Search tools allow you to control indexing / searching. So we're back to where we were 5 years ago: One tool for searching your hard-drives, another tool for searching within Outlook.</p>Programming OneNote 122006-02-05T09:08:00-10:002006-02-05T09:08:00-10:00larrytag:knowing.net,2006-02-05:/posts/2006/02/programming-onenote-12/<p>I've confirmed that, as one of them thar jour-nye-lists, I can actually write about my experiences with the Office 12 Beta (I'm allowed to talk about client-side stuff only). I have much to say about the new task-based interface, but for my first post I have to talk about OneNote …</p><p>I've confirmed that, as one of them thar jour-nye-lists, I can actually write about my experiences with the Office 12 Beta (I'm allowed to talk about client-side stuff only). I have much to say about the new task-based interface, but for my first post I have to talk about OneNote.</p>
<p>Whoa, baby, does this have potential. Add a reference to the Interop library in Visual Studio and you have trivially simple read-write access to XML-encoded OneNote content. How easy is it to read the pages in your Notebook? Is three lines too much work?:</p>
<div class="highlight"><pre><span></span><code> ApplicationClass ac = new ApplicationClass(); string strXml; ac.GetHierarchy(String.Empty, HierarchyScope.hsPages, out strXml); Clipboard.SetText(strXml);
</code></pre></div>
<p>Preliminary investigation shows that you get back all the needed valuable information (note flags, binary content [requires two calls,which is fine]). I haven't yet started <em>writing</em> new data, but expect it to be equally straightforward.</p>
<p><strong>OneNote is a platform</strong> for innovation. I really think this is one of the best chances for MicroISV development we've had in years.</p>Low on brains2006-02-03T15:05:00-10:002006-02-03T15:05:00-10:00larrytag:knowing.net,2006-02-03:/posts/2006/02/low-on-brains/<p>When I'm struggling with a hard problem, I often find myself subvocalizing the logic. It's surprising how often thinking "And therefore.." results in shaking free an elusive conclusion.</p>
<p>But not always. Today, as I tried to figure out some Win32 IPC problem, I found myself thinking the following thought: "And …</p><p>When I'm struggling with a hard problem, I often find myself subvocalizing the logic. It's surprising how often thinking "And therefore.." results in shaking free an elusive conclusion.</p>
<p>But not always. Today, as I tried to figure out some Win32 IPC problem, I found myself thinking the following thought: "And if that works, then <strong>undoubtedly</strong> that works." Big help.</p>"Ultramobile Lifestyle PCs" Coming Soon2006-02-01T12:48:00-10:002006-02-01T12:48:00-10:00larrytag:knowing.net,2006-02-01:/posts/2006/02/ultramobile-lifestyle-pcs-coming-soon/<p>Rob Bushway, blogging from Microsoft's Mobile Partner Briefing says that <a href="http://robbushway.blogspot.com/2006/02/ultramobile-lifestyle-pcs-coming.html">Ultramobile Lifestyle PCs"</a> with a \$500 MSRP, pen-based, all-day batteries, and a full OS (not CE) are coming real soon now.</p>
<p>Wouldn't that be nice?</p>Jolt Awards and Some Worthy Non-Finalists2006-01-31T14:58:00-10:002006-01-31T14:58:00-10:00larrytag:knowing.net,2006-01-31:/posts/2006/01/jolt-awards-and-some-worthy-non-finalists/<p>As always, the last weeks of January are present-time for those of us who are judges in the Jolt Awards, which I launched 16 years ago (how old I am. How very old.)</p>
<p>This year, two books that I thought were exceptional didn't make the final ballot: Vincent Maraia's <a href="https://www.amazon.com/exec/obidos/ASIN/0321332059/thinkinginnet-20">The …</a></p><p>As always, the last weeks of January are present-time for those of us who are judges in the Jolt Awards, which I launched 16 years ago (how old I am. How very old.)</p>
<p>This year, two books that I thought were exceptional didn't make the final ballot: Vincent Maraia's <a href="https://www.amazon.com/exec/obidos/ASIN/0321332059/thinkinginnet-20">The Build Master</a> and Michael Scott's <a href="https://www.amazon.com/exec/obidos/ASIN/0126339511/thinkinginnet-20">Programming Language Pragmatics</a>. Maraia's book is a look into the problems of operating an automated build system in medium- to large- settings (essentially, if the software takes more than a few minutes to compile and link) and, from the discussions of the judges mailing list, its absence from the finalist list is a real surprise. Scott's book is more academic, but is a great discussion of a topic near and dear to my heart, which is programming languages as a worthy subject of study in and of themselves. Usually, such studies are integrated into discussions of compiler design and implementation, but Scott rightly sees these as two different subjects.</p>
<p>Of the books that did make the finalist cut, so far I'm most impressed by Peter Seibel's <a href="https://www.amazon.com/exec/obidos/ASIN/1590592395/thinkinginnet-20">Practical Common Lisp</a>. I haven't programmed in Lisp since I edited AI Expert magazine back in the early 90s and I've never been tempted to pick it up again -- until I read Seibel's book. He does an exceptional job of introducing (or reminding) readers to Lisp's unique expressive power.</p>Stream DivX to XBox3602006-01-14T10:28:00-10:002006-01-14T10:28:00-10:00larrytag:knowing.net,2006-01-14:/posts/2006/01/stream-divx-to-xbox360/<p>casey chesnut has solved the issue of streaming DivX to the XBox360, apparently even getting decent framerates over 802.11g. Since I recently upgraded to a "pre-N" wireless network (<a href="https://www.amazon.com/exec/obidos/ASIN/B000AXU76E/thinkinginnet-20">Linksys wrt54gx2</a> ? highly recommended), I am totally psyched.</p>Geometry Wars Is A Multicore Program?!2006-01-14T10:16:00-10:002006-01-14T10:16:00-10:00larrytag:knowing.net,2006-01-14:/posts/2006/01/geometry-wars-is-a-multicore-program/<p>I love Geometry Wars on XBox360; it's a great arcade-style game that's perfect for killing a couple of minutes. Amazingly, though, it's apparently one of the few games that distributes its computation across the XBox's three cores.</p>
<p>I find it wildly amusing that something that is essentially an updated "Asteroids …</p><p>I love Geometry Wars on XBox360; it's a great arcade-style game that's perfect for killing a couple of minutes. Amazingly, though, it's apparently one of the few games that distributes its computation across the XBox's three cores.</p>
<p>I find it wildly amusing that something that is essentially an updated "Asteroids" is using three times the computational power of Project Gotham Racing 3.</p>GetDelegateForFunctionPointer() across process boundaries?2006-01-13T18:28:00-10:002006-01-13T18:28:00-10:00larrytag:knowing.net,2006-01-13:/posts/2006/01/getdelegateforfunctionpointer-across-process-boundaries/<p>::: {.Section1}
[O Lazy Web, I Invoke Thee:]{style="font-size:10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size:10.0pt;font-family:Arial;color:navy"}</p>
<p>[I am trying to call a function in a DLL that I’ve injected into an arbitrary number of processes. ]{style="font-size:10.0pt;font-family:Arial;color …</p><p>::: {.Section1}
[O Lazy Web, I Invoke Thee:]{style="font-size:10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size:10.0pt;font-family:Arial;color:navy"}</p>
<p>[I am trying to call a function in a DLL that I’ve injected into an arbitrary number of processes. ]{style="font-size:10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size:10.0pt;font-family:Arial;color:navy"}</p>
<div>
[I need to call a function **on that instance** of the DLL running in the target process. So, I tried…]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[//hookedProcesses == List\<ProcessModule\> as you’d expect]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[//myDll == string initialized to path of my injected DLL, as you’d expect]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[//delegate void VoidDelegate() as you’d expect ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[foreach(ProcessModule process in hookedProcesses)]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[{]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ if(module.FileName == myDll) ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ { ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ IntPtr dllHandle = Interop.GetModuleHandle(filename); //Interop to Win32 GetModuleHandle()]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ IntPtr funcPtr = Interop.GetProcAddress(dllHandle, “MyFunction”); //Interop to Win32 GetProcAddress()]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ VoidDelegate func = (VoidDelegate) Marshall.GetDelegateForFunctionPointer(funcPtr, typeof(VoidDelegate));]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ // EVERYTHING WORKS TO THIS POINT. ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ func(); //]{style="font-size:10.0pt;font-family:Arial;color:navy"}
</div>
<p>:::</p>I've got a docking cradle in my pants2006-01-10T15:44:00-10:002006-01-10T15:44:00-10:00larrytag:knowing.net,2006-01-10:/posts/2006/01/ive-got-a-docking-cradle-in-my-pants/<p>Because "I've got a joystick in my pocket" is way too obvious to describe Levi Strauss' iPod-ready jeans.</p>Time to buy a second-hand Mac?2006-01-10T10:03:00-10:002006-01-10T10:03:00-10:00larrytag:knowing.net,2006-01-10:/posts/2006/01/time-to-buy-a-second-hand-mac/<p>Apple announced the first Intel-based Macs today. Presumably, this will drive down the eBay-arbitrated fair market value of second-hand Macs, especially the FMV of what had previously been higher-end machines but which would now be "good enough to develop on," machines. Hmmm...</p>Windows More Secure?2006-01-10T10:00:00-10:002006-01-10T10:00:00-10:00larrytag:knowing.net,2006-01-10:/posts/2006/01/windows-more-secure/<p>::: {.Section1}</p>
<div>
[Via Joe Mayo](https://joemayo.wordpress.com/ "http://spaces.msn.com/members/jmayo/Blog/cns!1pnsGXz0ond3crCyV5P0C6Ig!314.entry"), [Via Sam Gentile ]{style="color:navy"}"Reported by [CNET](http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk …</div><p>::: {.Section1}</p>
<div>
[Via Joe Mayo](https://joemayo.wordpress.com/ "http://spaces.msn.com/members/jmayo/Blog/cns!1pnsGXz0ond3crCyV5P0C6Ig!314.entry"), [Via Sam Gentile ]{style="color:navy"}"Reported by [CNET](http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A167598125652378149829586852436176585195%26anid%3D167598125652378149829586852436176585195&u=167598125652378149829586852436176585195&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553657127358&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A167598125652378149829586852436176585195%26anid%3D167598125652378149829586852436176585195&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0<=1<w=200<wmn=50&spa=&spt=&spc=&dvid= "http://news.com.com/2061-10794 3-6020030.html"), of all the CERT security vulnerabilities of the year 2005, 218 belonged to the Windows OS. But get this - ther[e]{style="color:navy"} were 2,328 CERT security vulnerabilities for UNIX/Linux systems."
[ ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[My initial reaction to this was that it was apples to oranges, but after examining the original CERT bulletin, it seems to be a fair comparison. Both lists include vulnerabilities that are not in the core OS and both lists include multiple "distros" of the core OS (e.g., Win2000 & Win XP, Apple OS X & FreeBSD). While there are *more* UNIX/Linus distros than Windows distros, it's also true that there are more Windows 3^rd^-party apps, so I think that's a wash. ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
[ ]{style="font-size:10.0pt;font-family:Arial;color:navy"}
</div>
<p>:::</p>C for C# and Java Programmers2006-01-07T11:06:00-10:002006-01-07T11:06:00-10:00larrytag:knowing.net,2006-01-07:/posts/2006/01/c-for-c-and-java-programmers/<p>From the MAKE newsletter:</p>
<blockquote>
<p>there's a need for a Java-to-C guide--not just the language, but how it's really used in major apps, how to account for everything you're importing, best practices like unit testing, packaging, exception handling, etc.</p>
</blockquote>
<p>It seems perverse at first, but the more I think about it …</p><p>From the MAKE newsletter:</p>
<blockquote>
<p>there's a need for a Java-to-C guide--not just the language, but how it's really used in major apps, how to account for everything you're importing, best practices like unit testing, packaging, exception handling, etc.</p>
</blockquote>
<p>It seems perverse at first, but the more I think about it...</p>IronPython 1.0 Beta 1 Is Released2006-01-03T08:40:00-10:002006-01-03T08:40:00-10:00larrytag:knowing.net,2006-01-03:/posts/2006/01/ironpython-10-beta-1-is-released/<p>Huzzah! IronPython 1.0 Beta 1 is released: http://www.microsoft.com/downloads/details.aspx?FamilyID=94082d26-e689-4f7f-859b-fec6dacf3ae8&displaylang=en</p>Only 1% of JBoss / Eclipse code from unpaid developers2006-01-02T14:09:00-10:002006-01-02T14:09:00-10:00larrytag:knowing.net,2006-01-02:/posts/2006/01/only-1-of-jboss-eclipse-code-from-unpaid-developers/<p>Andrew Binstock , my colleague at SD Times has a fantastic column on the realities of OSS development. The idea of a community that contributes code (as opposed to contributing bug reports) is largely a myth.</p>IE7 Warns That This Site Might Be Phishing (It Isn't)2006-01-02T12:28:00-10:002006-01-02T12:28:00-10:00larrytag:knowing.net,2006-01-02:/posts/2006/01/ie7-warns-that-this-site-might-be-phishing-it-isnt/<p>So a second ago I brought up my homepage and was surprised to see a little "Suspicious Website" button beside the address bar. A phishing site? Moi? So, the good news is that you click on it and right away there's a link that says "I'm the owner, and I …</p><p>So a second ago I brought up my homepage and was surprised to see a little "Suspicious Website" button beside the address bar. A phishing site? Moi? So, the good news is that you click on it and right away there's a link that says "I'm the owner, and I want to correct this report." Okay, good points for that. The resulting form, though, is filled with "Why do you collect personal information?" "Link to your privacy statement," etc. questions that assume guilt. To top it off, they give you the hardest damn CAPTCHA I've ever seen -- something like 6 or 7 totally obfuscated letters and numbers.</p>
<p>In addition to being irritating, this is pretty damning of IEs antiphish technology. This is a very straightforward site that is not on a dynamic IP, runs a well-known piece of software (<a href="http://www.dasblog.net">dasBlog</a>), and the domain is directly registered by me. If <em>this</em> site gets flagged as suspicious, I can't imagine how many legitimate business sites are going to be flagged.</p>
<p><strong>Update</strong>: I received an "after review, it seems you are not a phish site" email in just over an hour. Was it an automatic process or a very efficient person? Hard to say, but I suspect that an automatic "closer scrutiny" gave me a pass and then a human approved it. Still, good response to a bad situation.</p>Monetizing A Programming Blog2005-12-30T09:32:00-10:002005-12-30T09:32:00-10:00larrytag:knowing.net,2005-12-30:/posts/2005/12/monetizing-a-programming-blog/<p><a href="https://dondemcsak.com/">Don Demsak</a> brings up the question of making money off blogging. This is appealing to me, not so much because I like blogging but because I make, in most years, the majority of my money by writing. So, although you wouldn't know it from the quality of the writing on …</p><p><a href="https://dondemcsak.com/">Don Demsak</a> brings up the question of making money off blogging. This is appealing to me, not so much because I like blogging but because I make, in most years, the majority of my money by writing. So, although you wouldn't know it from the quality of the writing on this blog, I can actually write a sentence that doesn't begin with the word 'So,' and a paragraph that conveys a complete thought without just petering out in ellipses, and so forth and so on...</p>
<p>I blog for several reasons, but already for a primarily professional one -- blogging games the search engines which, in turn, are now the de facto first step in finding "experts" to hire. If you blog about one topic (programming) regularly and you blog about another, esoteric, topic (e.g., the Sabre Global Distribution System) irregularly, you will <strong>still</strong> get an unusually high response for a search for "programming and Sabre." That's money in the bank, my friends. Honestly, being the #1 Google return for "programming Sabre" has directly earned me more money than I have made in 15 years of writing for magazines and speaking at conferences.</p>
<p><strong>Even for no other reason, this is enough to make blogging essential to being an independent technologist / programmer.</strong></p>
<p>We're forbidden from speaking of our AdSense revenues, but we can speak in general terms:</p>
<ol>
<li>A couple lattes per month</li>
<li>A couple lattes per day</li>
<li>A monthly car payment (for those who don't drive paid-off '92 Honda Civics. For those who do, let's say 'a health insurance premium.')</li>
<li>Your mortgage</li>
<li>A new car</li>
</ol>
<p>I've been blogging for 3 1/2 years now and, while having flirted with category 2 for a few specific weeks, have otherwise always been in category 1. I haven't fretted about moving ads around on the page, so much, as I tend to think that might make a difference, but not a categorical difference (am I wrong?). Instead, I've tried various strategies that I thought <strong>might</strong> make categorical differences: a rigorous publishing schedule (twice daily posting for a month), longer posts, short link-oriented posts, permanent articles, etc. Short link-oriented posts <strong>do</strong> seem to have a positive effect and might suffice to move from one category to another.</p>
<p>What I wonder, though, is:</p>
<h2>Can a blog centered on programming or the programming industry be a category 3 (Car Payment) or higher revenue source?</h2>
<h3>Reviewing Software Development Tools? Nope.</h3>
<p>For instance, let's say I wanted to monetize a professional-level comparison of Visual Studio, Eclipse, and IDEA. What are my options?</p>
<ul>
<li>Blog about the topic</li>
<li>Directly sell a, say, 1500-word review as a PDF, or an Amazon "short"</li>
<li>Sell a 1500-word review to a magazine</li>
<li>Public whitepaper it -- sell a 5,000 word analysis to one of the major "analyst" companies, who in turn, sell it to vendors and F500 companies</li>
<li>Private whitepaper it -- sell the analysis directly to vendors and Fortune 500 companies</li>
</ul>
<p>Of those, a magazine review is a solid category 3, subcontracting a whitepaper is a solid 4, and a private whitepaper could be a 5 (but requires an infrastructure that includes a sales force, not blogging about driving a Honda Civic, no t-shirts, etc.). (Also note that the effort increases and not just by word count. A whitepaper analysis is both broader and deeper than a published review.)</p>
<p>If I were to blog such a comparison, I have no reason to believe it would make me change from a Category 1 to Category 2 because, for blog advertising, traffic == money and traffic must be built over time. I find it likely a <strong>monthly</strong> comparison of products could create at least a Category 2 blog, but on the other hand, it's still competing with the Category 3 "write reviews and sell them to magazines."</p>
<p>The problem with reviews is that they don't have a "<a href="https://www.wired.com/2004/10/tail/">long tail</a>," and the long tail is the only alternative to high traffic for making money off advertising.</p>
<h4>Are books an exception?</h4>
<p>As we sit here, I'm surrounded by stacks of books that are contending to be shortlisted for this year's "<a href="http://www.drdobbs.com/architecture-and-design">Jolt Awards</a>." There are a lot of good books that won't make the shortlist. As an Amazon affiliate, I could write reviews and get a cut of positively-reviewed books that are purchased due to a click-through from this site. This is a more direct pay-off than advertising and, when I've done such things in the past, I've had at least one month of Category 2 (couple lattes a day). Programming books have a long(-er) tail and I am in the fortunate position of receiving review copies of far, far more books than I can possibly mention in my column. On the other hand, taking an affiliate cut directly from a review is against the quaint ethics that were taught me when I first doing this stuff professionally. By today's publishing standards, though, it's a laughably minor infraction (... fighting temptation to vent on sordid industry ... must ... fight .... )</p>
<p>However, even very worthy books like Michael Scott's <a href="https://www.amazon.com/exec/obidos/ASIN/0126339511/thinkinginnet-20">Programming Language Pragmatics</a> (yes, it's an affiliate link) are highly unlikely to sell 10,000 copies total. Wouldn't I be smarter to say that Harlan Coben (<a href="https://www.amazon.com/exec/obidos/ASIN/0440236703/thinkinginnet-20">Tell No One</a>) writes very tight plots, has the very rare gift of infusing genre thrillers with just a touch of detached humor, but suffers slightly from the "one more twist" disease? Or to say that <a href="https://www.amazon.com/exec/obidos/ASIN/B0009S4UOA/thinkinginnet-20">Call of Duty 2</a> is clearly superior to Perfect Dark Zero?</p>
<p>Assuming that affiliate-link reviews are a route towards monetization, wouldn't it be smarter to review popular books, movies, video games, etc., rather than programming books? Of course, this assumes that one can build authority as a reviewer in a mass-market media, but the upside of doing so is vastly greater than the upside of having authority in the programming niche.</p>
<h3>Other routes to traffic...</h3>
<p>You despise dotnet247, don't you? You Google for an API and, without checking the link, you click through to that d***ed newsgroup scraper (hey, what about a Greasemonkey script that nukes those returns?). However, the idea of a Website with user-donated content that covers a programming topic in depth ... could that achieve Category 2 or even Category 3, do you think? A Wiki on programming the Tablet PC, or Language Integrated Query, or Indigo or something like that?</p>
<p>Unfortunately, while I think you could grow traffic, you're still challenged by the relative unattractiveness of the programming market for advertisers (I think). Wouldn't you do better creating a Wiki on digital cameras, or XBox 360 games, or DVDs, or whatever online-purchased mass-market product you happen to have an interest in? Wouldn't <strong>I</strong> be better advised, for instance, to create a "GPS User's Guide to Visiting Hawai'i" Wiki than producing one on Language Integrated Query?</p>
<h4>Or you can sell bits...</h4>
<p>"Write an Amazon short," has been sitting in "Deferred projects" list since I heard about the service. Has anyone done this? I think I'll shoot them an email right now...</p>
<p>(done)</p>
<p>...Or, it's trivial to write a PayPal callback to your own PDF...</p>
<p>...Or, you can pursue the MicroISV path...</p>
<p>Well, one way or the other, it's time for me to sign off, walk the dog, and then go for a swim.</p>
<p>Drive safe and hau'oli makahiki hou!</p>Selling Bits Independently: A Cautionary Tale2005-12-29T14:29:00-10:002005-12-29T14:29:00-10:00larrytag:knowing.net,2005-12-29:/posts/2005/12/selling-bits-independently-a-cautionary-tale/<p>Once upon a time, I wrote a book about C#. More accurately, I talked to a friend who had written a Java book that I thought was proven to be a good way to teach that language and I said "Hey, can I license the content of your book and …</p><p>Once upon a time, I wrote a book about C#. More accurately, I talked to a friend who had written a Java book that I thought was proven to be a good way to teach that language and I said "Hey, can I license the content of your book and port it to C#, which, since you hate Microsoft, you have no interest in?" And he said yes and, nine months later, I had this 1,100-page book on the verge of being published. Now, my friend had, in the days when publishers really had <strong>no</strong> idea of what the Internet was, secured the electronic distribution rights to his work and, as a matter of fact, he gave away his Java book for free. His publisher was eager to publish the C# book and, lo and behold, my contract ended up with the same electronic rights. So I said to him "I know that having given it away for free for years, you've said you can't do this, but I'm thinking of charging \$5 for the download via PayPal. Waddya' think?" And he said "Yeah, sounds like a good experiment."</p>
<p>So I wrote a little thing that hooked up to PayPal and when the postback happened, sent out the obfuscated but totally un-encrypted URI of a PDF version of the book (complete with trim marks for the printer, etc.). Oh, and just for fun, I hooked it up so that every time I sold a book, a little "ka-ching" wav file would play. And for a couple of days I hung out in the NetNews C# group and answered a bunch of questions and ended all my posts with "If you found this helpful, you might be interested in..." and linked them to the \$5 download.</p>
<p>Well, let me tell ya', it's a really good feeling to be watching TV and to be bothered because every minute or so you make \<span class="math">\(5. And, within a week, it was being traded on the filesharing networks because, despite what utopians say, it's not really about affordability or the "cut" that the media companies take. Someone paid \\)</span>5 for an 1,100-page book and then turned around and said "Yeah, I'll put this up for sharing." But y'know, what can you do? I was certainly making enough off the PayPal to consider the experiment a roaring success.</p>
<p>Now comes the sad part. Very shortly after the money started rolling in, I made the incredibly foolish mistake of mentioning my system on a mailing list that was read, not only by computer book authors, but by computer book publishers. Including <em>my own</em> publisher, who was in the process of finalizing the cover design and getting everything nice and tidy for the print run.</p>
<p>Well, let me tell ya', it's a really <em>bad</em> feeling when your own publisher feels thwarted. You see, as far as <em>giving away for free</em> the Java book, the accountants at the publisher couldn't quantify their losses (dividing by zero, the lack of download statistics, etc.). By charging \<span class="math">\(5 for the download, all of a sudden their spreadsheets became unstuck and all of a sudden they weren't being nearly as nice to me as they had been the previous week. One of the things that they said was "Sign over the electronic rights to us or we won't publish the book." And I said "Why would I do that? My per-unit profit on electronic sales is greater than the royalty" (For a \\)</span>50 cover price! Don't get me started). And they said "Poof! You don't have the right to publish <em>any</em> version of your book. It is derived from our property and you cannot create a derivative work." And I said "Hah! I'll change the title and any text that directly quotes the Java book!"</p>
<p>And they said... And here's a point of copyright law for all you kids out there ... "The majority of your 400 sample programs are <strong>structured</strong> the same as the Java samples. You can't use the <strong>structure</strong> without infringing." At which point, I started paying a lawyer \$300 to do my speaking for me. I would have been much better served to just bend over and grab my ankles.</p>
<p>The worst part of it is that if I hadn't immediately complied with their first informal request to cease selling the electronic version (back when I was under the impression we were all on the same side and just needed to work out this kink), I probably would have made enough money in a couple weeks to at least pay the lawyer's bills.</p>
<p>I swore that if I were going to write another book for no monetary gain, it sure as heck wasn't going to be a <em>programming</em> book, it would be a novel, thank you very much.</p>
<p>So, this year, I wrote a novel. Well, a really bad first draft. But still.</p>
<p>And no, I'm not selling it online. Who in their right mind would buy a novel online?</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Closing Out 2005 As An Independent2005-12-29T13:54:00-10:002005-12-29T13:54:00-10:00larrytag:knowing.net,2005-12-29:/posts/2005/12/closing-out-2005-as-an-independent/<p>I just posted my three final invoices for 2005, my first full year of living in Hawai'i. The good news is that I beat my budget targets by 16%. The bad news is that, because of the move, I reduced those targets by 15%! The other bad news is that …</p><p>I just posted my three final invoices for 2005, my first full year of living in Hawai'i. The good news is that I beat my budget targets by 16%. The bad news is that, because of the move, I reduced those targets by 15%! The other bad news is that the cost of living in Hawai'i is higher even than in the Bay Area, so when I calculate our budget for next year, I'm going to have to ratchet up my income targets, which means either charging my clients more or taking on more work. <em>Sigh</em>. The other good news, though, is that it does seem possible to live on a tropical island and make a living wage as a programmer and writer.</p>
<p>I've long felt that it is impossible to get rich if the only thing you sell is your own time, and although we're doing okay, our lifestyle is quite modest (I drive a '92 Honda Civic that we bought new and which just passed 100,000 miles). I make the large majority of our money -- Tina works part-time in a plant nursery and hasn't sold any paintings this year. I'm not particularly interested in "advancing" in my career. I've done lots of stuff and, like <a href="https://www.amazon.com/exec/obidos/ASIN/B00003CXCW/thinkinginnet-20">Nora Desmond</a>, I feel I <strong>am</strong> big, it's the pictures that got small. (Microsoft and Mozilla agreed on an RSS icon ? I take back everything!)</p>
<p>I can't justify charging people \<span class="math">\(200 an hour. More truthfully, I can't justify it to myself. I know a few people who charge \\)</span>200 or more an hour and the thing is: if you just do it, you can do it. You have to travel a lot, though, and you probably shouldn't put pictures of yourself wearing a t-shirt on your blog and you <strong>certainly</strong> don't tell people you drive a '92 Honda Civic. I used to think that when I taught, for which I generally charged \<span class="math">\(2,500 to \\)</span>3,000 a day, I made good money, but the problem is that you have to amortize your development and practice time, which, for me, is about a 20:1 ratio. For me the worst thing is that I have a strong novelty-seeking personality and I cannot stand to give the same lecture more than four or five times. Including practice run-throughs. Which means that, essentially, I've <em>never</em> amortized the cost of developing a talk. Not even close.</p>
<p>I think to make more than a living wage, you have to sell a product.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>A Tale of Two Micro-ISVs2005-12-28T08:30:00-10:002005-12-28T08:30:00-10:00larrytag:knowing.net,2005-12-28:/posts/2005/12/a-tale-of-two-micro-isvs/<p>::: {.Section1}
[Gus Mueller, developer of Voodoo, a desktop Wiki application for the Mac, <a href="http://www.gusmueller.com/blog/archives/2005/12/25.html">has been able to quit his day job</a> based on the sales of his two applications. Eric Sink, who developed a guaranteed-winnable version of Windows Solitaire, made \$215 in 15 months and has sold off the app …</p><p>::: {.Section1}
[Gus Mueller, developer of Voodoo, a desktop Wiki application for the Mac, <a href="http://www.gusmueller.com/blog/archives/2005/12/25.html">has been able to quit his day job</a> based on the sales of his two applications. Eric Sink, who developed a guaranteed-winnable version of Windows Solitaire, made \$215 in 15 months and has sold off the app. The difference(s)? It seems to me that Mueller was:]{style="font-size:10.0pt;font-family:Arial"}</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style="font-size:10.0pt;font-family:Symbol"}\< ![endif]>[More compelled to pursue monetary goals]{style="font-size:10.0pt;font-family:Arial"}</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style="font-size:10.0pt;font-family:Symbol"}\< ![endif]>[“Write something people are willing to buy” – but this is tricky. <em>Everyone</em> has played Windows Solitaire, people buy games, and “there is a way to win every game” is a clear value proposition. A desktop Wiki, on the other hand, has the advantage of being something that people could grow reliant on, but has a huge disadvantage in terms of people understanding what it is. ]{style="font-size:10.0pt;font-family:Arial"}</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style="font-size:10.0pt;font-family:Symbol"}\< ![endif]>[Mueller wrote for the Mac]{style="font-size:10.0pt;font-family:Arial"}</p>
<p>[Although I’m sure that there are more independent ISVs for Windows than for Mac, in the past couple of years I’ve gotten the impression that the <em>percentage</em> of successful ISVs for the Mac is definitely higher. I think that if you’re writing an application that purports to increase productivity, as Mueller does, you’ll definitely find marketing and selling to the Macintosh community easier than to the Windows community. ]{style="font-size:10.0pt;font-family:Arial"}
:::</p>Review: Pandora vs. MusicMatch "Artist Match"2005-12-23T12:37:00-10:002005-12-23T12:37:00-10:00larrytag:knowing.net,2005-12-23:/posts/2005/12/review-pandora-vs-musicmatch-artist-match/<p>I have a subscription MusicMatch's "On Demand" service, which includes the ability to put in an artist and say "Music like this." I loved this when I first experienced it, but <a href="https://www.pandora.com/">Pandora</a> is much better.</p>
<p>Compare these two results for a seed of "Jesus & Mary Chain":</p>
<p>MusicMatch "Artist Match"</p>
<ol>
<li>"Situation …</li></ol><p>I have a subscription MusicMatch's "On Demand" service, which includes the ability to put in an artist and say "Music like this." I loved this when I first experienced it, but <a href="https://www.pandora.com/">Pandora</a> is much better.</p>
<p>Compare these two results for a seed of "Jesus & Mary Chain":</p>
<p>MusicMatch "Artist Match"</p>
<ol>
<li>"Situation" by Yaz</li>
<li>"Blue Monday" by New Order</li>
<li>"Love & Peace or Else" by U2</li>
<li>"Some Girls Are Bigger Than Others" by The Smiths</li>
<li>"Cities" by The Talking Heads</li>
</ol>
<p>Okay, fair enough recreation of a 1982 New Wave commercial radio playlist...</p>
<p>Pandora:</p>
<ol>
<li>"Eric's Trip" by Sonic Youth</li>
<li>"Stand Guard" by Bob Mould</li>
<li>"Pig Knuckled Clown" by Flour</li>
<li>"Sometimes" by Firehose</li>
<li>"Soft Signals" by Limblifter</li>
</ol>
<p>Now <em>that's</em> like what you'd expect from a college DJ! With Pandora, you can actually fine-tune what you want to hear considerably, but even with just the seed there's no question that Pandora "gets" the <em>sound</em> of Jesus & Mary Chain and MusicMatch "gets" the era and that its "New Wave."</p>
<p>Between KEXP.ORG, ReplayRadio, MusicMatch On Demand, and Pandora, I actually feel like I'm hearing as much musical diversity as I ever did on the mainland.</p>Boot Windows XP off a USB flash drive2005-12-23T12:17:00-10:002005-12-23T12:17:00-10:00larrytag:knowing.net,2005-12-23:/posts/2005/12/boot-windows-xp-off-a-usb-flash-drive/<p>::: {.Section1}</p>
<div>
[It would be a really good idea to do this as a basic safety process: ]{style="font-size:10.0pt;font-family:Arial;color:navy"}[installing XP on your 256MB-or-bigger USB flash drive](https://www.tomshardware.com/articles/ "http://www.tomshardware.com/howto/20050909/index.html")
</div>
<p>:::</p>XBox 360 Makes Me Want HDTV2005-12-23T07:56:00-10:002005-12-23T07:56:00-10:00larrytag:knowing.net,2005-12-23:/posts/2005/12/xbox-360-makes-me-want-hdtv/<p>I have what was considered a great TV in its day (the year 2000) -- a 27" Sony Trinitron. There are no over-the-air HD signals here on the slopes of Hualalai Volcano, I have basic cable, and my Tivo doesn't record in HD. Project Gotham Racing totally makes me want to …</p><p>I have what was considered a great TV in its day (the year 2000) -- a 27" Sony Trinitron. There are no over-the-air HD signals here on the slopes of Hualalai Volcano, I have basic cable, and my Tivo doesn't record in HD. Project Gotham Racing totally makes me want to go out and spend \$1,000 on an HDTV. (With better visual cues, I'm sure I could shave 10 seconds off my Nurburgring times -- I'm just <em>sure</em> of it!) Not gonna' happen, but all the HD manufacturers ought to send Bill Gates a box of chocolate or flowers or something...</p>Turbo Ruby2005-12-22T09:17:00-10:002005-12-22T09:17:00-10:00larrytag:knowing.net,2005-12-22:/posts/2005/12/turbo-ruby/<p>::: {.Section1}
[Wouldn't it be awesome if Borland released a complete Ruby development environment that could target native Windows, Linux, the JVM, and .NET? Plus, of course, Rails? ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>Energy levels: MSFT vs GOOG2005-12-22T09:10:00-10:002005-12-22T09:10:00-10:00larrytag:knowing.net,2005-12-22:/posts/2005/12/energy-levels-msft-vs-goog/<p>::: {.Section1}
[I guess a bit of a theme is emerging today, check out <a href="http://minimsft.blogspot.com/2005/12/comment-report-markl-nee-of-microsoft.html">this account</a> from an ex-Microsoftian on the energy levels at Google:]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<div>
<div>
A little over a year ago I left Microsoft and went to work for Google. During the interview process …</div></div><p>::: {.Section1}
[I guess a bit of a theme is emerging today, check out <a href="http://minimsft.blogspot.com/2005/12/comment-report-markl-nee-of-microsoft.html">this account</a> from an ex-Microsoftian on the energy levels at Google:]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<div>
<div>
A little over a year ago I left Microsoft and went to work for Google. During the interview process, one of the things that really impressed me was the energy in the work places. There were people everywhere coding, talking, obviously engaged in solving problems. Every engineer is sitting in front of dual 24" monitors cranking out code, exploring ideas, etc[?..]{style="COLOR: navy"}Those of you in the trenches writing code, there is virtually no incentive to work hard, crank out code ahead of schedule, invent and implement innovative new ideas, etc. Microsoft is just a safe place to collect a paycheck...[.]{style="COLOR: navy"}this kind of energy is what we thrive on, and whats needed from time to time to create great products[?.]{style="COLOR: navy"}This is the kind of energy that I think is missing from Microsoft. It was definitely there in the old days.
[ ]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}
</div>
</div>
<p>:::</p>das Blog developer joins MS2005-12-22T08:57:00-10:002005-12-22T08:57:00-10:00larrytag:knowing.net,2005-12-22:/posts/2005/12/das-blog-developer-joins-ms/<p>::: {.Section1}
[Clemens Vaster, the original developer of my preferred blogging engine (<a href="http://www.dasblog.net">dasBlog</a>), has joined Microsoft as a Program Manager for WCF (Indigo). ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[If the past is any guide, the next six months will have a significant uptick in moves in …</p><p>::: {.Section1}
[Clemens Vaster, the original developer of my preferred blogging engine (<a href="http://www.dasblog.net">dasBlog</a>), has joined Microsoft as a Program Manager for WCF (Indigo). ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[If the past is any guide, the next six months will have a significant uptick in moves in and out of Redmond. While MS is always hiring and people are always moving on, there is usually a significant "inhalation" when Microsoft emerges from a heads-down shipping mode such as they've been in with the VS 2005 / Whidbey wave of technologies. What makes this a little different is that the WinFX / Vista wave of technologies is right at the verge of that heads-down phase itself, so it'll be interesting to see if the "inhalation" is cut short. The influx of PM-level talent is one of the most important components of Microsoft's struggle to maintain leadership in the development marketplace. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>van Rossum goes Google?2005-12-22T08:29:00-10:002005-12-22T08:29:00-10:00larrytag:knowing.net,2005-12-22:/posts/2005/12/van-rossum-goes-google/<p>::: {.Section1}
O'Reilly's Jeremy Jones is reporting that Guido van Rossum, creator and lead developer of the Python programming language, is now <a href="https://www.oreilly.com/?path=/pub/wlg/8821">working for Google</a>\< ?xml:namespace prefix = o />.</p>
<p>My immediate reaction was "Not Heinemeir Hansson?" (The creator of Ruby on Rails, the much more buzzword-y framework for Web apps).</p>
<p>Seriously …</p><p>::: {.Section1}
O'Reilly's Jeremy Jones is reporting that Guido van Rossum, creator and lead developer of the Python programming language, is now <a href="https://www.oreilly.com/?path=/pub/wlg/8821">working for Google</a>\< ?xml:namespace prefix = o />.</p>
<p>My immediate reaction was "Not Heinemeir Hansson?" (The creator of Ruby on Rails, the much more buzzword-y framework for Web apps).</p>
<p>Seriously though, it's long been known that Google extensively uses Python (and other, proprietary domain-specific languages and tools) internally. This is one of those practices that signal Google's sophistication. In most organizations, you'll find that all work is done with the "production" language ? the language that is used to deliver value to the end-user. More sophisticated organizations recognize that exploration and exploitation often require different toolsets.</p>
<p>Personally, my favorite tool for exploration is Mathematica, which has a unique "notebook" interface that allows you to record your thoughts, embed pictures and media, <em>and</em> develop functionality.
:::</p>King Kong: Good Movie, But the FX Aren't The Best2005-12-21T15:39:00-10:002005-12-21T15:39:00-10:00larrytag:knowing.net,2005-12-21:/posts/2005/12/king-kong-good-movie-but-the-fx-arent-the-best/<p>I liked <em>King Kong</em> quite a bit, and I'll say that the special effects of Kong's face are the best I've ever seen. But in <em>most</em> of the action scenes, I thought the effects were a notch below <em>Lord of the Rings</em>. The dinosaur chase scene I thought was really …</p><p>I liked <em>King Kong</em> quite a bit, and I'll say that the special effects of Kong's face are the best I've ever seen. But in <em>most</em> of the action scenes, I thought the effects were a notch below <em>Lord of the Rings</em>. The dinosaur chase scene I thought was really poor, with no real sense that the actors and dinosaurs were in the same space.</p>
<p>Oh, and Kong can handle three T. Rex but can be brought down by a couple of grappling hooks? Puh-lease.</p>Getting Sacked The Week Before Christmas2005-12-19T11:16:00-10:002005-12-19T11:16:00-10:00larrytag:knowing.net,2005-12-19:/posts/2005/12/getting-sacked-the-week-before-christmas/<p>CMP, a major trade publisher, laid off a bunch of people in their software development publishing group on Friday, including blindsiding a five-month pregnant editor who'd worked there for more than a decade. Ah, corporate America!</p>
<p>I suspect that at least two well-known but ad-challenged magazines are going to shut …</p><p>CMP, a major trade publisher, laid off a bunch of people in their software development publishing group on Friday, including blindsiding a five-month pregnant editor who'd worked there for more than a decade. Ah, corporate America!</p>
<p>I suspect that at least two well-known but ad-challenged magazines are going to shut down. Stay tuned...</p>Logic programming with Iterators2005-12-13T21:02:00-10:002005-12-13T21:02:00-10:00larrytag:knowing.net,2005-12-13:/posts/2005/12/logic-programming-with-iterators/<p>::: {.Section1}
[Wesner Moise has a fantastic blog post on how iterators and Expressions can be used to implement backtracking:]</p>
<div>
It turns out that it is possible to implement logic programming in C\# natively through the use of iterators.
<div class="highlight"><pre><span></span><code>grandparent(x, z) :– parent(x, y), parent(y, z).
parent(jebbush, gpbush …</code></pre></div></div><p>::: {.Section1}
[Wesner Moise has a fantastic blog post on how iterators and Expressions can be used to implement backtracking:]</p>
<div>
It turns out that it is possible to implement logic programming in C\# natively through the use of iterators.
<div class="highlight"><pre><span></span><code>grandparent(x, z) :– parent(x, y), parent(y, z).
parent(jebbush, gpbush).
parent(ghwbush, gwbush).
parent(ghwbush, jebbush).
</code></pre></div>
The above rules in [Prolog](https://www.amazon.com/gp/product/0262193388 "http://www.amazon.com/exec/obidos/redirect?path=ASIN/0262193388&link code=as2&camp=1789&tag=netundocume-20&creative=9325") could be translated into following C\# code[: ]http://wesnerm.blogs.com/net undocumented/2005/12/iterators and n.html
</div>
<p>:::</p>The Dismal Failure of XSLT2005-12-12T09:12:00-10:002005-12-12T09:12:00-10:00larrytag:knowing.net,2005-12-12:/posts/2005/12/the-dismal-failure-of-xslt/<p>XSLT is used to transform one XML document into another. The canonical example is the transformation of a data-oriented XML document into a XHTML document formatted for reading in a browser. However, the evolution of dynamic Web sites has clearly favored procedural programming to get the data (ASP, PHP, etc …</p><p>XSLT is used to transform one XML document into another. The canonical example is the transformation of a data-oriented XML document into a XHTML document formatted for reading in a browser. However, the evolution of dynamic Web sites has clearly favored procedural programming to get the data (ASP, PHP, etc.) and CSS as the formatting model. But I, like some others, originally thought that XSLT's great potential was as the <em>linguage franca</em> for transforming documents in a data-driven world. But here we are, on the eve of 2006 seven years after I first worked with XSL, and I am looking with utter dismay at a project that (potentially) involves the development of a custom XSLT transform.</p>
<p>The dismay comes from the idea of configuring my system for XSLT debugging, clearing a space beside my keyboard for Michael Kay's <a href="https://www.amazon.com/exec/obidos/ASIN/0764569090/thinkinginnet-20">XSLT Programmers Reference</a> (which is the <strong>only</strong> way to get through a major XSLT job), and plunging into the darkness. <em>Or</em>, I think to myself, <em>Load the DOM, walk the tree, and write the nodes</em>. A part of me finds this thought a betrayal -- XSLT solves this problem, darn it, and it's just a matter of figuring out the templates and then you write nice declarative transforms, as opposed to doing it in code, where you'll confuse transformation and declaration, mess up your responsibilities, shroud the transform in the fog of infrastructure, etc.</p>
<p>But when I've done major XSLT jobs before, I get the sense that I might as well have been delivering PROLOG source code -- it works (for now), it has theoretical advantages, if you immerse yourself in it it eventually clicks and makes sense, but... No one ever will. Expertise in XSLT? Hah!</p>
<p>I'm going to talk it over with my client, but I doubt that I will end up doing this in XSLT. It's a technology that's failed.</p>Too Twisted: Text Entry via Tilting Toshiba!2005-12-10T12:04:00-10:002005-12-10T12:04:00-10:00larrytag:knowing.net,2005-12-10:/posts/2005/12/too-twisted-text-entry-via-tilting-toshiba/<p>Seb Wills has <a href="http://www.inference.org.uk/saw27/dasher/toshtilt/">hooked the accelerometers in the Toshiba M200 to control the Dasher text-input system</a> (in which letters gradually slide from right-to-left and your vertical motion selects them). Fantastic!</p>
<p>One of the most interesting things about the Tablet PC is all the ways we search for alternate input techniques …</p><p>Seb Wills has <a href="http://www.inference.org.uk/saw27/dasher/toshtilt/">hooked the accelerometers in the Toshiba M200 to control the Dasher text-input system</a> (in which letters gradually slide from right-to-left and your vertical motion selects them). Fantastic!</p>
<p>One of the most interesting things about the Tablet PC is all the ways we search for alternate input techniques. Personally, I find that <a href="https://developer.ibm.com/community/">SHARK has</a> the highest rate of entry (better than FITALY, better than Dasher, <em>way</em> better than handwriting), but there are aspects of the Java-based input panel that are really frustrating.</p>
<p>For my next DevX article, I'm working on a voice-input correction system that is based on the Tablet PC Input Panel, which is a tremendous piece of UI engineering for correcting hand-writing. My premise is that it's acceptable to use a mixed-mode editing panel, where a pen / mouse is used to navigate the recognized text and its alternates. I'm having some trouble understanding the SAPI object model -- I'm requesting alternates but getting identical outputs, which is strange.</p>IronPython in Visual Studio CTP available2005-12-09T12:27:00-10:002005-12-09T12:27:00-10:00larrytag:knowing.net,2005-12-09:/posts/2005/12/ironpython-in-visual-studio-ctp-available/<p>Microsoft has just released a CTP with the first version of IronPython / Visual Studio integration: http://affiliate.vsipmembers.com/downloads/41/UserFileDownload.ashx</p>MSBuild tasks for Subversion access2005-12-09T08:33:00-10:002005-12-09T08:33:00-10:00larrytag:knowing.net,2005-12-09:/posts/2005/12/msbuild-tasks-for-subversion-access/<p>The msbuildtasks project at <a href="http://msbuildtasks.tigris.org/">http://msbuildtasks.tigris.org/</a> has written tasks for MSBuild that include Subversion commit, update, checkout, etc. Also, they have an FTPUpload that double definitely come in handy. Fantastic!</p>MSBuild: Determine Available Tasks and Outputs2005-12-08T14:17:00-10:002005-12-08T14:17:00-10:00larrytag:knowing.net,2005-12-08:/posts/2005/12/msbuild-determine-available-tasks-and-outputs/<p>It can be hard, when using MSBuild, to know what <strong>Tasks</strong> (aka Targets aka functions) are available, especially when using the built-in .targets files associated with the compilers. So, I wrote a custom <strong>Task</strong> that iterates over all the <em>other</em> <strong>Tasks</strong> that are currently loaded and outputs their <strong>[Output]</strong> properties …</p><p>It can be hard, when using MSBuild, to know what <strong>Tasks</strong> (aka Targets aka functions) are available, especially when using the built-in .targets files associated with the compilers. So, I wrote a custom <strong>Task</strong> that iterates over all the <em>other</em> <strong>Tasks</strong> that are currently loaded and outputs their <strong>[Output]</strong> properties. To use it, just drop the .DLL so that MSBuild can find it, open your existing MSBuild project file, and add the following:</p>
<p>\<UsingTask AssemblyFile="TasksAndOutputs.dll" TaskName="TasksAndOutputs"/><br>
\<Target Name="AfterBuild"><br>
\<TasksAndOutputs/><br>
\</Target></p>
<p>And run <strong>MSBuild</strong>.</p>
<p>Binary and Source-Code Download.</p>
<p>Oh, it's also a decent-enough sample of extending MSBuild with a custom task.</p>Saddam "refuses to appear"? WTF?2005-12-07T08:57:00-10:002005-12-07T08:57:00-10:00larrytag:knowing.net,2005-12-07:/posts/2005/12/saddam-refuses-to-appear-wtf/<p>Okay, <em>totally</em> off-topic, but how can a <em>prisoner</em> refuse to appear at his own trial? And then he gets a two-week delay of the trial? This does not bode well for establishing the supremacy of the rule of law. Talk about "contempt of court."</p>Sunsets growing later...2005-12-06T17:47:00-10:002005-12-06T17:47:00-10:00larrytag:knowing.net,2005-12-06:/posts/2005/12/sunsets-growing-later/<p>Since the Earth orbits the sun elliptically and therefore a) accelerates and b) has to turn about a degree more than a full circle to bring the sun into the same position, sunrise and sunset are not symmetrical around local noon. Here in Hawaii, the sun set today at 5 …</p><p>Since the Earth orbits the sun elliptically and therefore a) accelerates and b) has to turn about a degree more than a full circle to bring the sun into the same position, sunrise and sunset are not symmetrical around local noon. Here in Hawaii, the sun set today at 5:45, a minute later than it was setting a few days ago. Of course, it's still rising later, too, so the total daylight will continue to shorten until the 21st. But the afternoons are getting longer!</p>
<p>You can generate your own sunrise and sunset tables <a href="https://aa.usno.navy.mil/data/docs/RS_OneYear.html">here</a>.</p>How Many Lines of Code in Windows?2005-12-06T11:22:00-10:002005-12-06T11:22:00-10:00larrytag:knowing.net,2005-12-06:/posts/2005/12/how-many-lines-of-code-in-windows/<p>In Vincent Maraia's <a href="https://www.amazon.com/exec/obidos/ASIN/0321332059/thinkinginnet-20">The Build Master</a> (recommended) there's a helpful little chart on the size in lines of code for Windows NT:</p>
<hr>
<p>Ship Date Product Dev Team Size Test Team Size Lines of code (LoC)
Jul-93 NT 1.0 (released as 3.1) 200 140 4-5 million
Sep-94 NT 2 …</p><p>In Vincent Maraia's <a href="https://www.amazon.com/exec/obidos/ASIN/0321332059/thinkinginnet-20">The Build Master</a> (recommended) there's a helpful little chart on the size in lines of code for Windows NT:</p>
<hr>
<p>Ship Date Product Dev Team Size Test Team Size Lines of code (LoC)
Jul-93 NT 1.0 (released as 3.1) 200 140 4-5 million
Sep-94 NT 2.0 (released as 3.5) 300 230 7-8 million
May-95 NT 3.0 (released as 3.51) 450 325 9-10 million
Jul-96 NT 4.0 (released as 4.0) 800 700 11-12 million
Dec-99 NT 5.0 (Windows 2000) 1,400 1,700 29+ million
Oct-01 NT 5.1 (Windows XP) 1,800 2,200 40 million
Apr-03 NT 5.2 (Windows Server 2003) 2,000 2,400 50 million</p>
<hr>Motion Computing Wireless Keyboard Replaced2005-12-05T14:41:00-10:002005-12-05T14:41:00-10:00larrytag:knowing.net,2005-12-05:/posts/2005/12/motion-computing-wireless-keyboard-replaced/<p>At the PDC, I bought a bluetooth "Freedom" keyboard, unaware that at the time there were no drivers available for the Tablet PC. Although Freedom eventually released a driver, the keyboard is unacceptable for typing.</p>
<p>I then purchased a wireless keyboard from Motion (reduced to \$89). It arrived promptly but …</p><p>At the PDC, I bought a bluetooth "Freedom" keyboard, unaware that at the time there were no drivers available for the Tablet PC. Although Freedom eventually released a driver, the keyboard is unacceptable for typing.</p>
<p>I then purchased a wireless keyboard from Motion (reduced to \$89). It arrived promptly but I could not get it to install correctly in Bluetooth (the exchange of passkeys did not work). After a few calls with Motion tech support, they sent me a replacement. It installed flawlessly and I am writing this entry with it. It seems to be quite a nice keyboard -- I would say it's about average laptop size and has very nice key motion with good audio feedback. Yeah, I think I quite like it.</p>I Want To Know What (Windows) Live Is2005-12-05T07:39:00-10:002005-12-05T07:39:00-10:00larrytag:knowing.net,2005-12-05:/posts/2005/12/i-want-to-know-what-windows-live-is/<p>My latest column for SD Times discusses Windows Live.</p>33 Ad Impressions == $1 in revenue?2005-12-03T09:28:00-10:002005-12-03T09:28:00-10:00larrytag:knowing.net,2005-12-03:/posts/2005/12/33-ad-impressions-1-in-revenue/<p><a href="https://www.russellbeattie.com/blog/1008693.html">According to Russ Beattie</a>, an average of 3,700 "ad unit impressions" per day results in around \$111.79 in revenue. I recently added Google AdSense text ads on my Web pages, and will be interested in seeing the results, since I know that most people read this site in …</p><p><a href="https://www.russellbeattie.com/blog/1008693.html">According to Russ Beattie</a>, an average of 3,700 "ad unit impressions" per day results in around \$111.79 in revenue. I recently added Google AdSense text ads on my Web pages, and will be interested in seeing the results, since I know that most people read this site in their aggregators.</p>
<p>Beattie generally talks about cellphones, which is probably a more income-generating topic than programming Tablet PCs and the ins-and-outs of the software development tools industry, but if just one person buys a Tablet via a click-through, I would imagine I could make a buck or two.</p>PGR3 Undocumented Splitscreen Mode2005-12-01T18:30:00-10:002005-12-01T18:30:00-10:00larrytag:knowing.net,2005-12-01:/posts/2005/12/pgr3-undocumented-splitscreen-mode/<p><a href="https://www.amazon.com/exec/obidos/ASIN/B000B6ML28/thinkinginnet-20">Project Gotham Racing 3</a> has an undocumented (as in, not in the documentation, not as in "unknown") split screen mode that allows head-to-head racing on a single XBox360 with multiple controllers. At the opening screen select "More" and then "Change Profile" and, start hitting "A" on the other controllers to …</p><p><a href="https://www.amazon.com/exec/obidos/ASIN/B000B6ML28/thinkinginnet-20">Project Gotham Racing 3</a> has an undocumented (as in, not in the documentation, not as in "unknown") split screen mode that allows head-to-head racing on a single XBox360 with multiple controllers. At the opening screen select "More" and then "Change Profile" and, start hitting "A" on the other controllers to link up. Sweet.</p>What's wrong with being a hairdresser?2005-11-30T09:19:00-10:002005-11-30T09:19:00-10:00larrytag:knowing.net,2005-11-30:/posts/2005/11/whats-wrong-with-being-a-hairdresser/<p>OptionsScalper's kid got a 3.93GPA on her report card and he feels relieved she won't be a hairdresser. I once heard a computer programmer testifying in his bankruptcy hearing that his ex-as-of-last-month-wife was a hairdresser in Palo Alto and made \$160,000 per year. (I was there under the …</p><p>OptionsScalper's kid got a 3.93GPA on her report card and he feels relieved she won't be a hairdresser. I once heard a computer programmer testifying in his bankruptcy hearing that his ex-as-of-last-month-wife was a hairdresser in Palo Alto and made \$160,000 per year. (I was there under the mistaken belief that the bankruptcy hearing was for his company, which owed me pay for three months worth of consulting.)</p>
<p>Great pay. Probably pretty challenging days ("Make me look like Britney!") but I doubt it's the kind of stress you take home. Make your own hours. No chance of being stiffed for 1/4 year's worth of work (and don't pretend that you refuse clients who don't pay Net 30). No chance of being outsourced to India.</p>
<p>There are a lot of chemicals, though.</p>XBox360 as a media extender: Failed to stream DivX2005-11-30T08:43:00-10:002005-11-30T08:43:00-10:00larrytag:knowing.net,2005-11-30:/posts/2005/11/xbox360-as-a-media-extender-failed-to-stream-divx/<p>Tina's been a little, <em>errr ...</em> <em>skeptical</em> ... about how enjoyable it is that our living room now reverberates to the sound of up to 8 Ferraris simultaneously trying to negotiate a corner in downtown New York City (in surround sound!). So I thought I'd investigate XBox360 as a media extender.</p>
<p>First …</p><p>Tina's been a little, <em>errr ...</em> <em>skeptical</em> ... about how enjoyable it is that our living room now reverberates to the sound of up to 8 Ferraris simultaneously trying to negotiate a corner in downtown New York City (in surround sound!). So I thought I'd investigate XBox360 as a media extender.</p>
<p>First, I installed "<a href="https://support.xbox.com:443/en-US/browse/xbox-360/windows-media-center">Media Connect</a>" on one of my XP boxes and was able to send pictures and music to the XBox. Very nice, although the XBox360 interface is not nearly as nice as the Windows Media Player interface for Vista.</p>
<p>Then, to see if it would work, I installed XP Media Edition in a Virtual PC (works, with some fidgeting). You then install a software package that <a href="https://support.xbox.com:443/en-US/browse/xbox-360/windows-media-center">allows the Media Center to use the XBox as a media extender</a> (that is, the delivery point for the Media Center PC's functionality. Of course, one of the first things originally said of media extenders is "they don't have fans," which the XBox360 certainly does). Now, I could stream pictures, music, <em>and</em> video to the XBox.</p>
<p>Except when I tried to send video, the MCE said that my network link wasn't sufficient to handle it. This isn't a surprise, as I have only 802.11g connectivity (MIMO may be my Christmas present to myself). Nonetheless, I overrode the warning for the sake of the experiment. If I could really create a single media hub that could stream to the living room, I'd be willing to run a wire along the baseboard....</p>
<p>But the key question is whether I could stream DivX to the living room. So, knowing that the DivX codecs don't ship with Windows, I wasn't surprised to have to go to <a href="https://www.divx.com/">divx.com</a> and download the free codecs (you download the 6-month "Creator" and uncheck the trial software -- it's perfectly legitimate, it's basically a brilliant way for DivX folk to market their commercial products). Ta-Da! I could view DivX in Media Player.</p>
<p>I fired up Media Center and tried to stream DivX to the XBox360. On the 360 it said "Codec unavailable." Since there's no way to install the DivX codec to the 360, that seemed to be the end of it.</p>
<p>However, while Googling around looking for fellow DivX streamers, I noticed a persistent "Use Windows Media Encoder to transcode DivX to .WMV and stream that," suggestion. Well, WME is <a href="https://www.microsoft.com/en-us/windows">just a download away</a>, so I tried that. Six hours later, I had transcoded an hour of DivX video. It wouldn't stream to the XBox. Codec issue? Network issue?</p>
<p>Before I debugged that, I wanted to check one thing that has consistently driven me crazy. It actually is what this whole issue is about: although DivX synchronizes perfectly when watched on the PC, there's something about transcoding it for display on a TV that throws the sound synchronization off. This whole project is essentially to free about 12 hours of video I archived in DivX and have been unable to use in DVD projects. So I took my transcoded-to-WMV video, burned a DVD (took 3 hours to transcode <em>that</em> into MPEG-2 for DVD) and put it in the 360. I forwarded to 30 minutes into it and, sure enough, the sound was off by 4 or 5 seconds.</p>
<p>The experiment seemed to be over. Since I can transcode non-DivX-originating WMVs to DVD without a sound problem, but any transcoding of DivX-originating to DVD seems to introduce a sound problem, I assume that there's some mojo about DivX-originating streams.</p>
<p>The XBox360 doesn't seem to be a solution. As far as I can tell, what happens in DivX, stays in DivX.</p>Stream Music via FM2005-11-29T14:08:00-10:002005-11-29T14:08:00-10:00larrytag:knowing.net,2005-11-29:/posts/2005/11/stream-music-via-fm/<p>A few weeks ago I bought a <a href="https://www.amazon.com/exec/obidos/ASIN/B0007NWM06/thinkinginnet-20">Griffin RocketFM Transmitter</a>, a super-clever USB gadget that allows me to stream music from my desktop machine (in my office) to my living room stereo system. It works perfectly -- I can listen to <a href="http://www.kexp.org">KEXP</a>, podcasts, what-have-you. The fidelity, I'm sure, isn't what you'd …</p><p>A few weeks ago I bought a <a href="https://www.amazon.com/exec/obidos/ASIN/B0007NWM06/thinkinginnet-20">Griffin RocketFM Transmitter</a>, a super-clever USB gadget that allows me to stream music from my desktop machine (in my office) to my living room stereo system. It works perfectly -- I can listen to <a href="http://www.kexp.org">KEXP</a>, podcasts, what-have-you. The fidelity, I'm sure, isn't what you'd get from a dedicated media hub, but for \$29, it's a heck of a bargain. Recommended.</p>XBox 360 Experiences2005-11-25T10:04:00-10:002005-11-25T10:04:00-10:00larrytag:knowing.net,2005-11-25:/posts/2005/11/xbox-360-experiences/<p>So my determination "not to open the XBox 360 until I finished my month's work" lasted about 24 hours. Yesterday was Thanksgiving, for heaven's sake! A holiday! Heck, I wrote 700 words in the morning. Only 3,500 to go before next Wednesday. I'm cruising, for heaven's sake.</p>
<p>The first …</p><p>So my determination "not to open the XBox 360 until I finished my month's work" lasted about 24 hours. Yesterday was Thanksgiving, for heaven's sake! A holiday! Heck, I wrote 700 words in the morning. Only 3,500 to go before next Wednesday. I'm cruising, for heaven's sake.</p>
<p>The first thing about the XBox 360 experience is that it really, <em>truly is</em> <em>the</em> <strong><em>ultimate culmination</em></strong> of really annoying plastic sealing material. I thought that the finger-slicing material on the box itself was the pinnacle, but then when I got to the wireless controllers? Oh man! Unbelievable! The plastic, with its scissor-defying ridges and turns is <em>right next</em> to the controller, so there is just no angle of approaching this they haven't thought of, and defeated!!!!!</p>
<p>And what they do is seal a piece of cardboard inside, too, so you can't use a "cut a slice with an exacto and then run the razor along," trick! They've totally outfoxed that!</p>
<p>Then there's the famous power transformer, which is big enough to place a cushion against and lean against. But boy, wait until you turn this puppy on! It's <strong><em>unbelievable!!!!!!</em></strong></p>
<p>You really can't get that kind of white noise without dedication. The roar of the fan reminds me of the time me and Sharon Sibley did it in between the air conditioning units on the roof of the Boston Museum of Science! (Good times.)</p>
<p>So then you press the button on the front and it makes that "clunking" sound that CD players make when they die. You know the one I'm talking about. And you do that a couple times in increasing panic before you realize that they've got a strip of transparent sticky tape over the tray in order to fake you out. Oh those guys!</p>
<p>Then, when you pop out the tray, it's like the most feeble-looking array of "oh, you'll be breaking this soon" struts and rails. I haven't broken it yet, but I'll get it soon!!!!!</p>
<p>And then you play some really great-looking game, like Project Gotham Racing 3.</p>
<p>And so then, you go online to XBox Live, because they have this thing called "TruRank" that matches you against people of similar skill -- killer feature. And because they have "zones" where players with different 'tudes are supposed to hang out. And because the thing's been out for, like, 24 hours, so how good can <em>anyone</em> be in the game?</p>
<p>Oh man!!!! In my first race, the TruRank puts me up against the guy ranked 21st overall. And I don't know if it was him or the other people, but they were all, like, swearing at each other and me, which was great, because when you play a game for the very first time online it's <strong><em>[super]{.underline}</em></strong> motivating to have Al Swearengen on the other end of the line.</p>
<p><em>Ay yi yi.</em></p>
<p>XBox tag: KonaKoder. See you online.</p>Hardcore throwaway line of the day2005-11-24T10:28:00-10:002005-11-24T10:28:00-10:00larrytag:knowing.net,2005-11-24:/posts/2005/11/hardcore-throwaway-line-of-the-day/<p>::: {.Section1}
[“]{style="font-size:10.0pt; font-family:Arial"}[so I had to author my own handwriting recognition engine to distinguish between "X" and "O"... ” ]{style="font-family:Arial"}</p>
<p>[ ]{style="font-family:Arial"}</p>
<p>[Shawn van Ness discussing his WinFX Ink-enabled Tic Tac Toe game. ]{style="font-family:Arial"}[ ]{style="font-size:10.0pt;font-family:Arial"}
:::</p>Scored an Xbox3602005-11-22T10:51:00-10:002005-11-22T10:51:00-10:00larrytag:knowing.net,2005-11-22:/posts/2005/11/scored-an-xbox360/<p>Much to my surprise, my local Costco had 23 units. When I arrived an hour before opening, I was 9th in line and, when I left the store they still had at least 4 units sitting in the cage. (Ah, the joys of living in a small town!)</p>
<p>Now, in …</p><p>Much to my surprise, my local Costco had 23 units. When I arrived an hour before opening, I was 9th in line and, when I left the store they still had at least 4 units sitting in the cage. (Ah, the joys of living in a small town!)</p>
<p>Now, in an unmatched exhibition of self-control, I won't open it until I finish the 20-30 more hours of work I have scheduled for the month. Argh!</p>I bricked my SMT5600 Smartphone2005-11-15T07:27:00-10:002005-11-15T07:27:00-10:00larrytag:knowing.net,2005-11-15:/posts/2005/11/i-bricked-my-smt5600-smartphone/<p>I decided to switch to an official Cingular calling plan now that it's been a year since AT&T Wireless went away. I took in my year-and-change-old \$300 SMT5600 Smartphone and was told I'd have to get it unlocked before it would work with Cingular. (But it already works with …</p><p>I decided to switch to an official Cingular calling plan now that it's been a year since AT&T Wireless went away. I took in my year-and-change-old \$300 SMT5600 Smartphone and was told I'd have to get it unlocked before it would work with Cingular. (But it already works with Cingular...)</p>
<p>So I went a-Googling, installed a couple programs, did the steps, and everything seemed fine. I had an unlocked Smartphone. For 48 hours. Then... bam! ... a brick. Doesn't boot. The signal light doesn't blink. Tried a different battery, that doesn't work.</p>
<p>I hate computers.</p>
<p>So I put the SIM card my new Cingular account into my old Pocket PC Phone Edition XDA and started carrying that around. You know what? I forgot how useful a real PDA was. You can actually enter tasks and calendar appointments and jot down numbers. It's twice as big as a phone, but so what? It's not like it's <em>heavy</em>. No bluetooth, but I've yet to find bluetooth important.</p>The Multicore Revolution And Language Design2005-11-10T09:01:00-10:002005-11-10T09:01:00-10:00larrytag:knowing.net,2005-11-10:/posts/2005/11/the-multicore-revolution-and-language-design/<p>The software development community is about the fall off a cliff.</p>
<ul>
<li><strong>Single-threaded programs will never run faster than they run today</strong></li>
</ul>
<p>Think about it: clock speeds have maxed out and no mainstream programming language is automatically parallelizable. Pissing matches about Java versus CLI generics are irrelevant. The Intel and AMD …</p><p>The software development community is about the fall off a cliff.</p>
<ul>
<li><strong>Single-threaded programs will never run faster than they run today</strong></li>
</ul>
<p>Think about it: clock speeds have maxed out and no mainstream programming language is automatically parallelizable. Pissing matches about Java versus CLI generics are irrelevant. The Intel and AMD roadmaps show that for the next decade, any real advances in speed will come from programs that can exploit multicore chips. Sure, there'll be incremental improvements, but exploiting Moore's Law will require programs that can split themselves up into fragments.</p>
<p>This will be the theme of the next decade of programming.</p>
<p>I'm utterly convinced of this, as convinced as I was in 1989 that <em>Computer Language</em> magazine needed to embrace object-orientation and event-driven GUI programming and as convinced as I was in 1995, when I was so impressed by the first beta of Java that I quit the publishing industry to develop Internet software.</p>
<p><strong>Every high-paying programming job is going to require exploiting multicore chips</strong>. There will certainly be maintenance jobs, there will certainly be niches for low-performing vertical apps, but <strong>justifying a six-figure salary as a programmer, designer, or architect will require a mastery of multithreaded application development.</strong></p>
<p>So in terms of analyzing language design for the mainstream, parallelization has to become <em>the</em> central concern, because parallelization is <em>what</em> productivity is going to be about. I started writing this intending to talk about C#'s anonymous delegates and that language's use of references for outer-variable capture. It's an interesting topic, but I wanted to put down the stake on the whole multithreading thing. <strong>More tk...</strong></p>Waiting for other technologies to rev to 2.0 release...2005-10-31T12:27:00-10:002005-10-31T12:27:00-10:00larrytag:knowing.net,2005-10-31:/posts/2005/10/waiting-for-other-technologies-to-rev-to-20-release/<p>The recent release of Visual Studio 2005, SQL Server, and .NET 2.0 is all good news, but it seems to cripple me a little. My next two articles on Avalon / WPF and Tools for Domain Specific Languages, neither of which can I get to install on top of the …</p><p>The recent release of Visual Studio 2005, SQL Server, and .NET 2.0 is all good news, but it seems to cripple me a little. My next two articles on Avalon / WPF and Tools for Domain Specific Languages, neither of which can I get to install on top of the new .NET release. <em>sigh</em></p>Programming the Realtime Stylus2005-10-31T12:25:00-10:002005-10-31T12:25:00-10:00larrytag:knowing.net,2005-10-31:/posts/2005/10/programming-the-realtime-stylus/<p><a href="https://www.developer.com/">My latest article</a> on DevX implements a packet filter and custom selection tool using the Tablet PC RealTime Stylus APIs.</p>MSDN Subscriptions Overloaded By VS2005 Downloads?2005-10-30T14:24:00-10:002005-10-30T14:24:00-10:00larrytag:knowing.net,2005-10-30:/posts/2005/10/msdn-subscriptions-overloaded-by-vs2005-downloads/<p>Trying to download VS2005 or SQL Server, I get "Error Code = 11001" on MSDN Subscriber Downloads. That's "Host Not Found" in SQL Server, according to the search engines.</p>Hawaii Jumps 1,000 Miles Closer To The Mainland2005-10-30T12:46:00-10:002005-10-30T12:46:00-10:00larrytag:knowing.net,2005-10-30:/posts/2005/10/hawaii-jumps-1000-miles-closer-to-the-mainland/<p>Since Hawaii doesn't have Daily Savings Times, in the Winter I can start working at 7 AM in order to maintain West Coast hours... Mmmm... Sleep until dawn....</p>Sutter's excellent PDC talk on concurrency online2005-10-29T10:57:00-10:002005-10-29T10:57:00-10:00larrytag:knowing.net,2005-10-29:/posts/2005/10/sutters-excellent-pdc-talk-on-concurrency-online/<p>::: {.Section1}
[Herb Sutter has in the past year made a convincing case that "<a href="http://www.gotw.ca/publications/concurrency-ddj.htm">the free lunch is over</a>" for performance and that languages cannot ignore concurrency and remain relevant. His PDC talk introduces his thoughts for "Concur:" a set of conforming extensions to C++ that provides high-level abstractions ("active" objects …</p><p>::: {.Section1}
[Herb Sutter has in the past year made a convincing case that "<a href="http://www.gotw.ca/publications/concurrency-ddj.htm">the free lunch is over</a>" for performance and that languages cannot ignore concurrency and remain relevant. His PDC talk introduces his thoughts for "Concur:" a set of conforming extensions to C++ that provides high-level abstractions ("active" objects and "future" results). In my opinion, the best talk of the PDC and it's available online\< ?xml:namespace prefix = o />. ]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<p>[He also briefly mentions C++/LINQ, which is the first I've heard about a commitment towards providing that capability in C++. ]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<p>[(I'm confused how it can be "conforming" though, since at the very least it seems to require <strong>[active ]{style="FONT-WEIGHT: bold"}</strong>as a keyword, but?)]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"}</p>
<p>:::</p>Why aren't IDEs incredibly fun?2005-10-22T09:22:00-10:002005-10-22T09:22:00-10:00larrytag:knowing.net,2005-10-22:/posts/2005/10/why-arent-ides-incredibly-fun/<p>::: {.Section1}</p>
<div>
[Ted Leung (]{style="FONT-SIZE: 12pt"}[http://www.sauria.com/blog/2005/10/20\#1406]{style="COLOR: windowtext; TEXT-DECORATION: none"}\< ?xml:namespace prefix = o /\>) wonders "?Where are the incredibly fun programming tools?.... Many \[IDEs\] take out some of the tedious tasks associated with programming, but none of them give me …</div><p>::: {.Section1}</p>
<div>
[Ted Leung (]{style="FONT-SIZE: 12pt"}[http://www.sauria.com/blog/2005/10/20\#1406]{style="COLOR: windowtext; TEXT-DECORATION: none"}\< ?xml:namespace prefix = o /\>) wonders "?Where are the incredibly fun programming tools?.... Many \[IDEs\] take out some of the tedious tasks associated with programming, but none of them give me that feeling that they are enhancing my creativity or thinking?."
[To me, the features of programming languages are what give me that buzz. The language is what you think in, after all, so its connection to enhancing your thoughts is more direct.]{style="FONT-SIZE: 12pt"}
[But Ted's phrase "incredibly fun" resonates with me. I really enjoy programming, but is it incredibly fun the way it could be? It used to be that programming was the most fun thing you could do with computers. Into the DOS age, programming was more fun than any computer game. ]{style="FONT-SIZE: 12pt"}
[Now, I would say that programming is "just" gratifying. It allows you to extend the capabilities of your computer, it allows you to make things work the way you think they should. It's incredibly engaging ? it's still easy to lose hours and hours to a programming task. But is it incredibly fun? ]{style="FONT-SIZE: 12pt"}
</div>
<p>:::</p>Vista CTP 5231 Installed and Running2005-10-19T11:26:00-10:002005-10-19T11:26:00-10:00larrytag:knowing.net,2005-10-19:/posts/2005/10/vista-ctp-5231-installed-and-running/<p>Ah hah! The latest Vista CTP installed very cleanly. The first thing I noticed was that it took me minutes and minutes to figure out how to add files to Windows Media Player.</p>
<p>As I post this, I am surprised to see that the HTML-editing \<textarea> is not the WYSIWYG-style …</p><p>Ah hah! The latest Vista CTP installed very cleanly. The first thing I noticed was that it took me minutes and minutes to figure out how to add files to Windows Media Player.</p>
<p>As I post this, I am surprised to see that the HTML-editing \<textarea> is not the WYSIWYG-style of IE6 on XP. The Games also don't work because they say they can't find a Direct3D Device to render to.</p>
<p>The Shell changes seem nice: the Search right in the Start, the thumbnails on ALT-TAB or hovering over the Taskbar.</p>
<p>I think I saw that programming for WinFX on this build might have some version issues, which is a bummer. I'm anxious to give Avalon / WPF a go.</p>
<p>But...<strong>handwriting recognition is available</strong>! Anyone with a cheap digitizer can now get a glimpse of the joy that is the Tablet PC!</p>IronPython + WPF (Avalon)2005-10-18T09:06:00-10:002005-10-18T09:06:00-10:00larrytag:knowing.net,2005-10-18:/posts/2005/10/ironpython-wpf-avalon/<p>Greg Kerr just posted a WPF app written in IronPython to the mailing list. Very, very cool.</p>
<blockquote>
<blockquote>
<p>></p>
</blockquote>
</blockquote>Ward Cunningham Abandons Microsoft, Joins Eclipse2005-10-17T08:00:00-10:002005-10-17T08:00:00-10:00larrytag:knowing.net,2005-10-17:/posts/2005/10/ward-cunningham-abandons-microsoft-joins-eclipse/<p>::: {.Section1}
[Via http://www.peterprovost.org/archive/2005/10/17/8707.aspx: …<a href="https://www.eclipsezone.com//eclipse/forums/t52526.html" title="http://www.eclipsezone.com/eclipse/forums/t52526.html">this link from EclipseZone.com</a> announcing that Ward is going to be joining the Eclipse Foundation…]{style="font-size:10.0pt;font-family:Arial;color:navy"}</p>
<p>[Ward Cunningham’s joining Microsoft was (rightly) touted by that company as a bit …</p><p>::: {.Section1}
[Via http://www.peterprovost.org/archive/2005/10/17/8707.aspx: …<a href="https://www.eclipsezone.com//eclipse/forums/t52526.html" title="http://www.eclipsezone.com/eclipse/forums/t52526.html">this link from EclipseZone.com</a> announcing that Ward is going to be joining the Eclipse Foundation…]{style="font-size:10.0pt;font-family:Arial;color:navy"}</p>
<p>[Ward Cunningham’s joining Microsoft was (rightly) touted by that company as a bit of a coup. Cunningham is univerally admired for his ability to conceive of and implement simple yet powerful concepts, including the <a href="http://www.c2.com/">Wiki and FIT</a> and was a prime early mover in the promotion of software pattern languages. He was touted, at Microsoft, as bringing credibility towards their efforts to improve their programming-in-the-large experience. Seemingly, all that came of that was the MSDN <a href="http://pnp.azurewebsites.net/">Patterns & Practices</a> section, which is almost certainly not the culmination of Cunningham’s hopes and dreams for working at Redmond . ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}
:::</p>Ironman + Geeking Out On Mauna Kea: A nice day in Hawaii2005-10-16T13:43:00-10:002005-10-16T13:43:00-10:00larrytag:knowing.net,2005-10-16:/posts/2005/10/ironman-geeking-out-on-mauna-kea-a-nice-day-in-hawaii/<p>::: {.Section1}
[\< ?xml:namespace prefix = o />We went down to the start of the Ironman yesterday morning. It's a great spectacle: 1800 athletes all of whom intend to do something that I couldn't possibly accomplish. The race begins at 7:00 and the cut-off for finish is midnight, so you have …</p><p>::: {.Section1}
[\< ?xml:namespace prefix = o />We went down to the start of the Ironman yesterday morning. It's a great spectacle: 1800 athletes all of whom intend to do something that I couldn't possibly accomplish. The race begins at 7:00 and the cut-off for finish is midnight, so you have 17 hours in which to: swim 2.4 miles, bike 112 miles, and run a full marathon. Along a course that runs through a vast lava field, so not only do you have in-the-shade temperatures in the 80s, but incredible black-body radiation (I mean, imagine biking 112 miles through a parking lot). ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p><img alt="" height="240" src="http://www.knowing.net/content/binary/image001123456.jpg" width="320">\< ?xml:namespace prefix = w /> [An <em>[80-year-old ]{style="FONT-STYLE: italic"}</em>did it with about :45 minutes to spare. Which I thought was impressive until I saw that he had been beaten by a 76-year-old nun. Other especially impressive athletes include Sarah Reinertsen, a full-leg amputee and Johnny Blais, who has ALS (Lou Gehrig's disease). Not that anyone who does it deserves anything but total respect. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[\< ?xml:namespace prefix = st1 />Then, to get out of town, we went up to the summit of Mauna Kea (13,796 feet) to get a tour of the telescopes. Serious geekery. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[The hour or so before sunset on Mauna Kea is incredibly beautiful. The strong inversion layer which gives the mountain such exceptional seeing means that you're looking down on a sea of clouds and, as the sun lowers, you see an incredible effect where the mountain's shadow becomes visible, projected into the sky and clouds to the East. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[The sunset itself has deep colors but at least last night was not really better than what we get every night from our lanai. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[As soon as the colors started to fade we scampered out of the <em>[freezing ]{style="FONT-STYLE: italic"}</em>air (it was probably high 30s) down to the visitor's center at 9,000 feet where there was a Hula Kahiko performance ("ancient" hula: very different and to me vastly better than modern hula and nothing like the skirt-shaking stuff you get at a resort luau). What a rocking day, although by the time we got home we were all dog-tired. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}<img alt="" height="240" src="http://www.knowing.net/content/binary/image002.jpg" width="320"> [ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>CTP Madness Part Eleventy Gazillion2005-10-16T13:14:00-10:002005-10-16T13:14:00-10:00larrytag:knowing.net,2005-10-16:/posts/2005/10/ctp-madness-part-eleventy-gazillion/<p>::: {.Section1}
[I needed to install Visual Basic on my development Tablet but the VS2005 RC installer blew up when I tried to do that, so I ended up uninstalling Whidbey, but before I could install the RC, I also had to uninstall SQL Server 2005. And then, when everything gets …</p><p>::: {.Section1}
[I needed to install Visual Basic on my development Tablet but the VS2005 RC installer blew up when I tried to do that, so I ended up uninstalling Whidbey, but before I could install the RC, I also had to uninstall SQL Server 2005. And then, when everything gets finally re-installed (after, like 8 hours of the machine of uninstall, install fails, uninstall something else, reinstall, etc.) my defect tracking software isn’t working anymore, since apparently it was connecting by way of my now-uninstalled Yukon . ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[G[aw]{style="color:navy"}d, I can’t wait for this stuff to ship. ]{style="font-size:10.0pt; font-family:Arial"}
:::</p>Googlieve: v. tr. To have faith in a Google return2005-10-10T12:40:00-10:002005-10-10T12:40:00-10:00larrytag:knowing.net,2005-10-10:/posts/2005/10/googlieve-v-tr-to-have-faith-in-a-google-return/<p>To accept as true the results of a prominent Google return: <em>I googlieve the wavelength of red light to be 650nm.</em> See also: googlief.</p>
<p>Googlief has a complex relationship with belief, as one might accord a googlief of something like wavelengths a higher belief than one's vague recollections, but on …</p><p>To accept as true the results of a prominent Google return: <em>I googlieve the wavelength of red light to be 650nm.</em> See also: googlief.</p>
<p>Googlief has a complex relationship with belief, as one might accord a googlief of something like wavelengths a higher belief than one's vague recollections, but on the other hand, one might accord low credibility to a googlief that "the most famous man who ever lived" is former FEMA director Michael Brown (a googlief I doubt will survive the month).</p>
<p>(Historical note: 10/10/05 12:24 Hawaii Standard Time, Google says there are no documents with the word "googlief" or "googlieve" in it.)</p>Julie Lerman's "Persisting Ink on the Web" article is a must-read2005-10-09T10:13:00-10:002005-10-09T10:13:00-10:00larrytag:knowing.net,2005-10-09:/posts/2005/10/julie-lermans-persisting-ink-on-the-web-article-is-a-must-read/<p>::: {.Section1}
["Persisting Ink on the Web" walks through each of the following tasks: ]{style="font-size:12.0pt"}</p>
<ul>
<li>[Transferring Ink to another Ink-Enabled Control on the Same Page]{style="font-size:12.0pt"}</li>
<li>[Transferring Ink to an Ink Control on Another Page in a New Browser Window]{style="font-size:12.0pt"}</li>
<li>[Moving …</li></ul><p>::: {.Section1}
["Persisting Ink on the Web" walks through each of the following tasks: ]{style="font-size:12.0pt"}</p>
<ul>
<li>[Transferring Ink to another Ink-Enabled Control on the Same Page]{style="font-size:12.0pt"}</li>
<li>[Transferring Ink to an Ink Control on Another Page in a New Browser Window]{style="font-size:12.0pt"}</li>
<li>[Moving Ink to Another Page in the Same Browser Window]{style="font-size:12.0pt"}</li>
<li>[Transferring Ink to Another Page as a GIF]{style="font-size:12.0pt"}</li>
<li>[Storing Ink in an XML File on the Web Server to Be Used at a Later Time]{style="font-size:12.0pt"}</li>
<li>[Storing and Retrieving Ink from a SQL Server Database]{style="font-size:12.0pt"}</li>
<li>[Sending Ink to a Web Service]{style="font-size:12.0pt"}</li>
<li>[Surviving a Postback]{style="font-size:12.0pt"}
:::</li>
</ul>
<blockquote>
<blockquote>
<p>Don't Forget: www.acehaid.org</p>
</blockquote>
</blockquote>Animated icons in Visual Studio / WinForms using GIFs2005-10-07T08:30:00-10:002005-10-07T08:30:00-10:00larrytag:knowing.net,2005-10-07:/posts/2005/10/animated-icons-in-visual-studio-winforms-using-gifs/<p>::: {.Section1}
[I just found out you can use animated GIFs in Windows Forms applications – “it just works” when you set the <strong>[Image]{style="font-weight:bold"}</strong> property of a <strong>[PictureBox]{style="font-weight:bold"}</strong> to an animated GIF. Good to know. ]{style="font-size:10.0pt; font-family:Arial"}
:::</p>New music2005-10-06T11:45:00-10:002005-10-06T11:45:00-10:00larrytag:knowing.net,2005-10-06:/posts/2005/10/new-music/<p>I'm not surprised that I like Neil Young's Prairie Wind and Beck's Guero.</p>Things I've Been Noticing About Spam2005-10-06T09:51:00-10:002005-10-06T09:51:00-10:00larrytag:knowing.net,2005-10-06:/posts/2005/10/things-ive-been-noticing-about-spam/<p>Looks like either they've broken the CAPTCHA methods used by das Blog, or people are hand-posting comment spam.</p>
<p>I think that email spam may be using keywords derived from my blog as part of their randomly generated subject lines. That's a clever way to get around any Bayesian filter.</p>
<p>I …</p><p>Looks like either they've broken the CAPTCHA methods used by das Blog, or people are hand-posting comment spam.</p>
<p>I think that email spam may be using keywords derived from my blog as part of their randomly generated subject lines. That's a clever way to get around any Bayesian filter.</p>
<p>I assume that when not randomly generated, if you see the same or very similar spam subject lines, they're effective at producing click-throughs. If so, that's depressing.</p>Tablet to Flash: A "Chalk Talk" Application for Diagramming Plays2005-10-06T09:20:00-10:002005-10-06T09:20:00-10:00larrytag:knowing.net,2005-10-06:/posts/2005/10/tablet-to-flash-a-chalk-talk-application-for-diagramming-plays/<p><a href="https://www.developer.com/">My latest article for DevX was a fun one</a>, a Tablet application that records pen strokes of a sports play and <a href="https://www.developer.com/?supportItem=1">plays them back in synchrony</a>, to illustrate a sports play.</p>Sun and Google misfire2005-10-04T10:21:00-10:002005-10-04T10:21:00-10:00larrytag:knowing.net,2005-10-04:/posts/2005/10/sun-and-google-misfire/<p>::: {.Section1}</p>
<div>
[What? All the buzz was about [[ Google Toolbar being an optional part of the downloadable Java Runtime Environment]{style="color:windowtext"}](https://www.oracle.com/sun/ "http://www.sun.com/smi/Press/sunflash/2005-10/sunflash.20051004.1.html")? I wonder if an actually significant announcement fell apart. ]{style="font-size …</div><p>::: {.Section1}</p>
<div>
[What? All the buzz was about [[ Google Toolbar being an optional part of the downloadable Java Runtime Environment]{style="color:windowtext"}](https://www.oracle.com/sun/ "http://www.sun.com/smi/Press/sunflash/2005-10/sunflash.20051004.1.html")? I wonder if an actually significant announcement fell apart. ]{style="font-size:10.0pt; font-family:Arial"}
</div>
<p>:::</p>casey calls BS on 'go code something' as a way to employment2005-10-04T09:11:00-10:002005-10-04T09:11:00-10:00larrytag:knowing.net,2005-10-04:/posts/2005/10/casey-calls-bs-on-go-code-something-as-a-way-to-employment/<p>::: {.Section1}
[casey chesnut, whose propensity for lower-casing his name ticks off Word auto-correction, says that it is a myth that the best way to be hired as a programmer is to code something cool. casey's right. He’s proved by his Web postings that he can write: neural nets to …</p><p>::: {.Section1}
[casey chesnut, whose propensity for lower-casing his name ticks off Word auto-correction, says that it is a myth that the best way to be hired as a programmer is to code something cool. casey's right. He’s proved by his Web postings that he can write: neural nets to defeat CAPTCHA, machine vision applications, speech-based interfaces, mobile code, etc. At the very least, it’s clear that when given a problem he’s not going to be sitting around, stumped and discouraged. ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[Cool doesn’t work: once upon a time, I wrote a column called “Expert’s Toolbox” for a magazine called “AI Expert.” I published stuff like the first genetic algorithm in C++, the first fuzzy logic engine in C++, and the second C++ neural network (missed being first by 3 months! Darn it!). At the time, this was considered cool stuff. I can’t quite say it never made me a dime because my neural network code was used in a <em>[mumble mumble ]{style="font-style:italic"}</em>developed by <em>[mumble mumble ]{style="font-style:italic"}</em>and apparently used until at least the late-90s. But essentially, the cool stuff was worthless. Then, in the mid-90s, I programmed what was probably the first profitable non-pornographic Website (a registration system for the Software Development conference – one of the first 10,000 sites on the Web), wrote the first technical article on Java, the first article on servlets, and developed the first XML-driven Web site. Did I make any money off of that stuff? A little, but not much.]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[You want to know what made me money? Any of this cool stuff? Oh no. Reservation systems. Several years ago, when XML expertise was still relatively rare, I was hired to do what we’d now call the “Web Service” portion of an airline / hotel / car reservation engine targetting medium-sized corporations. Once I got a reputation in that field, the phone rang off the hook. ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<ul>
<li>[Every business in the world must have a computerized inventory-management system. ]{style="font-size:10.0pt;font-family:Arial"}</li>
<li>[Inventory control is domain-specific. If your inventory is seats, you can’t use a system designed to sell books. If your inventory is pencil leads, you can’t use a system designed to sell slots in a marina.]{style="font-size:10.0pt;font-family:Arial"}</li>
<li>[The best way for an individual or small company to make money in software is to develop inventory control software for a niche. You’ll make money selling it, but you’ll make a ton more customizing and supporting it.]{style="font-size:10.0pt;font-family:Arial"}</li>
</ul>
<p>[ ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[The problem with that is that from a coding standpoint, it’s insanely boring. Believe me, once you’ve solved all the variations of “What if the employee wants to add a lay-over in the middle of the trip and bring a companion along using frequent flyer points and upgrade using their credit card?” you really, <em>[really]{style="font-style:italic"}</em> miss watching genetic algorithms co-evolving. <em>[ ]{style="font-style:italic"}</em>]{style="font-size: 10.0pt;font-family:Arial;color:navy"}
:::</p>Query refinement generation via neural nets2005-10-03T11:38:00-10:002005-10-03T11:38:00-10:00larrytag:knowing.net,2005-10-03:/posts/2005/10/query-refinement-generation-via-neural-nets/<p>::: {.Section1}
[Scoble laments that when asked “new york hotels” search engines do not know the difference between “hotels named new york ” and “hotels in new york ” (or, to some extent, “new hotels in york ”). Scoble wants the initial search-engine return to include questions intended to refine the search. Danny Sullivan …</p><p>::: {.Section1}
[Scoble laments that when asked “new york hotels” search engines do not know the difference between “hotels named new york ” and “hotels in new york ” (or, to some extent, “new hotels in york ”). Scoble wants the initial search-engine return to include questions intended to refine the search. Danny Sullivan agrees, saying that Ask Jeeves had such a thing, but the cost of humans creating relevant questions was difficult. ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[Here’s the solution, I think. You just throw a bunch of question templates “Are you looking for the history of X?” “Are you looking for reviews of X?” etc., hook them up with random Bayesian connections, and update them as necessary.]{style="font-size:10.0pt; font-family:Arial"}
:::</p>:Ong Bak / Jonathan Strange & Mr. Norrell reviews2005-10-02T14:26:00-10:002005-10-02T14:26:00-10:00larrytag:knowing.net,2005-10-02:/posts/2005/10/ong-bak-jonathan-strange-mr-norrell-reviews/<p>::: {.Section1}
[What I did this weekend:]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ “Ong Bak: The Thai Warrior” has a lot of buzz about introducing the “next Jackie Chan.” Tony Jaa has amazingly spring-y legs and the movie has a couple of sequences that show …</p><p>::: {.Section1}
[What I did this weekend:]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ “Ong Bak: The Thai Warrior” has a lot of buzz about introducing the “next Jackie Chan.” Tony Jaa has amazingly spring-y legs and the movie has a couple of sequences that show off his talents pretty well – 720 reverse roundhouse kicks, twisting barrel kicks, sliding under trucks while doing full splits, etc. – and there are a few nice imaginings (a trove of looted Buddha heads floating serenely in cargo nets beneath a crowded harbor), but the plot and dialogue are dreadful even by the most forgiving standards. Also, every fight seems to move towards the same ridiculous “finishing move:” a flying elbow delivered not to the temple nor the jaw nor the ear nor any other place remotely vulnerable, but downward to the crown of the head. Very disappointing.]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ “Jonathan Strange & Mr. Norrell” ought to be subtitled “Get to the point already!” It[ i]{style="color:navy"}s 840 pages of clear, often delightful, occasionally enchanting prose. A few things happen around page 500, and then some other stuff occurs in the mid-600s, and then the last 60-pages are chock-a-block full of action. Unfortunately, these last scenes are filled with characters suddenly revealing capabilities and weaknesses and modes of action which are unsupported by the gazillion preceding words. Not entirely, to be fair, but enough so that one rather resents having attended to them for several hundred pages and having achieved so little insight. Clearly published with the hope of being received as “Harry Potter for adults,” it’s definitely worth reading, but could have been twice as good at half the length.]{style="font-size:10.0pt; font-family:Arial"}
:::</p>Digital physics vs. Pi2005-09-28T08:43:00-10:002005-09-28T08:43:00-10:00larrytag:knowing.net,2005-09-28:/posts/2005/09/digital-physics-vs-pi/<p>::: {.Section1}
[Nova Spivack posted this praise of digital physics and Julie Lerman reports that Stephen Wolfram is coming to her neck of the woods. Digital physics, of which Wolfram’s book <a href="https://www.wolframscience.com/nks/">A Kind of Science</a> hopes to be the <a href="https://www.wolframscience.com/nks/">Principia</a>, posits the idea that the universe is computational in nature …</p><p>::: {.Section1}
[Nova Spivack posted this praise of digital physics and Julie Lerman reports that Stephen Wolfram is coming to her neck of the woods. Digital physics, of which Wolfram’s book <a href="https://www.wolframscience.com/nks/">A Kind of Science</a> hopes to be the <a href="https://www.wolframscience.com/nks/">Principia</a>, posits the idea that the universe is computational in nature, which is to say that behavior over time (gravity, mass, etc.) comes from repeated application of a (relatively) small set of rules to a matrix of state changing automata. <a href="https://en.wikipedia.org/wiki/Cellular">Cellular automata</a> are used as their model. CA are a fascinating topic, but to me digital physics has always seemed a non-starter: Buckminster Fuller anticipated my objection with this quote: "To how many places does nature carry out PI when she makes each successive bubble in the white-cresting surf of each successive wave before nature finds out that PI can never be resolved?... And at what moment in the making of each separate bubble in the Universe does nature decide to terminate her eternally frustrated calculating and instead turn out a fake sphere?" ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>:::</p>WSJ Article on MSFT Processes / Longhorn Reset2005-09-24T14:23:00-10:002005-09-24T14:23:00-10:00larrytag:knowing.net,2005-09-24:/posts/2005/09/wsj-article-on-msft-processes-longhorn-reset/<p>The Wall Street Journal has a good article on what they call a cultural change at Microsoft, which they essentially credit to Jim Allchin and Amitabh Srivastava. Hmmm... Srivastava is certainly respected technically, but Allchin's impending retirement seems to have triggered more glee than tears in the blogosphere. The criticism …</p><p>The Wall Street Journal has a good article on what they call a cultural change at Microsoft, which they essentially credit to Jim Allchin and Amitabh Srivastava. Hmmm... Srivastava is certainly respected technically, but Allchin's impending retirement seems to have triggered more glee than tears in the blogosphere. The criticism against Allchin seems to be that "he can't ship," but whether that's accurate or whether it's indicative of the cultural resistance that the WSJ speaks of is difficult for an outsider to parse. Any Microsoftians want to give me their perspective? (Email me at lobrien -at- knowing -dot- net)</p>CTP Madness Solved (at least momentarily)2005-09-24T10:06:00-10:002005-09-24T10:06:00-10:00larrytag:knowing.net,2005-09-24:/posts/2005/09/ctp-madness-solved-at-least-momentarily/<p>::: {.Section1}
[All week I’ve been trying to synch up Visual Studio versions with SQL Server versions. I finally got the right combo: first intall SQL Server 2005 September CTP (en SQL2005 STD Servers Sept2005.iso and en SQL2005 STD Tools Sept2005.iso) and then VS 2005 Team Suite Release …</p><p>::: {.Section1}
[All week I’ve been trying to synch up Visual Studio versions with SQL Server versions. I finally got the right combo: first intall SQL Server 2005 September CTP (en SQL2005 STD Servers Sept2005.iso and en SQL2005 STD Tools Sept2005.iso) and then VS 2005 Team Suite Release Candidate (en vs 2005 team suite dvd rc.iso). Works for me. ]{style="font-size:10.0pt; font-family:Arial"}
:::</p>Could a mobile phone be a consumer's only computer?2005-09-24T09:18:00-10:002005-09-24T09:18:00-10:00larrytag:knowing.net,2005-09-24:/posts/2005/09/could-a-mobile-phone-be-a-consumers-only-computer/<p>::: {.Section1}
[Philip Greenspun suggests the use of the mobile phone as identity and storage and an “appliance” into which the phone plugs as the general purpose computer used to perform “home” computing tasks (email, browsing, playing games, etc.) Having used Sun’s SunRay thin clients back in the dot-com days …</p><p>::: {.Section1}
[Philip Greenspun suggests the use of the mobile phone as identity and storage and an “appliance” into which the phone plugs as the general purpose computer used to perform “home” computing tasks (email, browsing, playing games, etc.) Having used Sun’s SunRay thin clients back in the dot-com days, I can attest to the user-friendliness of “plug and play” computing – put your smart card into any computer in the company and get your desktop. Very, very nice experience. However, I think the idea of a dumbed-down appliance-based OS has been tried and failed – WebTV springs to mind, Audrey, all of those things. ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[Having praised the SunRay experience, I must also share why I think thin clients are the worst idea ever. At a trade show critical to our company’s success, we uncrated a dozen SunRay’s into the room in which we would be demonstrating our technology. We hooked up the server and booted the system. Every SunRay booted. Every SunRay got to some driver. Every SunRay said “Oh, updated driver. Install and reboot.” Every SunRay shut down. Every SunRay booted. Every SunRay got to some driver. Every SunRay said “Oh, updated driver. Install and reboot.” And so the loop continued. ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[Our IT guys worked for hours trying to resolve the problem. We had Sun on the phone. We had Oracle on the phone. How could we get a different server? Apparently there were SunRay’s in that town where they filmed The Truman Show and there was some discussion of commandeering their hardware. Eventually, the CEO gave our IT his American Express and said “Go to Office Depot and buy 20 PCs.” And at the end of the show he said “Go to Office Depot and return the 20 PCs.” (An edict typical of our CEOs moral sense.) ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[Thin clients suck.]{style="font-size: 10.0pt;font-family:Arial;color:navy"}
:::</p>OneNote 12 Screenshots from Owen Braun2005-09-24T08:51:00-10:002005-09-24T08:51:00-10:00larrytag:knowing.net,2005-09-24:/posts/2005/09/onenote-12-screenshots-from-owen-braun/<p>::: {.Section1}
[Owen Braun discusses one of the new organizational features of OneNote 12 (multiple folders) and has a couple of screenshots. ]{style="font-size:10.0pt; font-family:Arial"}
:::</p>Microsoft's usability archive: What does it reveal about the Tablet?2005-09-23T09:16:00-10:002005-09-23T09:16:00-10:00larrytag:knowing.net,2005-09-23:/posts/2005/09/microsofts-usability-archive-what-does-it-reveal-about-the-tablet/<p>::: {.Section1}
[Kevin Schofield tells of Microsoft’s “central archive of reports from usability tests and user studies on ts products. The reports date all the way back to 1989.” Oh, wouldn’t I love to be able to read what that has to say about Tablet PC user interfaces!]{style …</p><p>::: {.Section1}
[Kevin Schofield tells of Microsoft’s “central archive of reports from usability tests and user studies on ts products. The reports date all the way back to 1989.” Oh, wouldn’t I love to be able to read what that has to say about Tablet PC user interfaces!]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size: 10.0pt"}</p>
<p>:::</p>Choosing Community Server, DotNetNuke, FlexWiki, Zope, or other?2005-09-23T07:27:00-10:002005-09-23T07:27:00-10:00larrytag:knowing.net,2005-09-23:/posts/2005/09/choosing-community-server-dotnetnuke-flexwiki-zope-or-other/<p>::: {.Section1}
[I grabbed the domain languageintegratedquery.com and languageintegratedquery.info (don’t surf – the DNS isn’t set up yet!) and would like to build a community-oriented site that: ]{style="font-size:10.0pt; font-family:Arial"}</p>
<ol>
<li>[Serves as a language-inclusive repository for LINQ examples,]{style="font-size:10.0pt;font-family:Arial"}</li>
<li>[Provides …</li></ol><p>::: {.Section1}
[I grabbed the domain languageintegratedquery.com and languageintegratedquery.info (don’t surf – the DNS isn’t set up yet!) and would like to build a community-oriented site that: ]{style="font-size:10.0pt; font-family:Arial"}</p>
<ol>
<li>[Serves as a language-inclusive repository for LINQ examples,]{style="font-size:10.0pt;font-family:Arial"}</li>
<li>[Provides a forum for discussing LINQ techniques and patterns, ]{style="font-size:10.0pt;font-family:Arial"}</li>
<li>[Provides technical information on LINQ infrastructure (e.g., implementation, performance, etc.), and]{style="font-size:10.0pt;font-family:Arial"}</li>
<li>[Provides an entry point to LINQ related news (i.e., a LINQ linkblog)]{style="font-size:10.0pt;font-family:Arial"}</li>
</ol>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[The most important technical requirement I have is that the site infrastructure support multiple “timespans” for articles: ]{style="font-size:10.0pt; font-family:Arial"}</p>
<ol>
<li>[Long-lived articles (worked-out examples, technical information),]{style="font-size:10.0pt;font-family:Arial"}</li>
<li>[Transient news (i.e., blog-style FIFO, “recent news” / calendar-oriented “archives”), and]{style="font-size:10.0pt;font-family:Arial"}</li>
<li>[Discussion forums ]{style="font-size:10.0pt;font-family:Arial"}</li>
</ol>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[Nowhere near as important, but the lack of which really bugs me about blog software: I’d like to be able to schedule articles for posting (i.e., “Sunday at 3AM, post the week’s new articles). ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[Anyway, I currently use <a href="http://www.dasblog.net">dasBlog</a> for this Website, which works great for transient, but poor for articles and discussion. I’ve got FlexWiki already installed on this server for other purposes, and it works for articles, but not for transient news and I don’t think Wiki-based discussions are very effective. Any suggestions would be welcome.]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>:::</p>Happy Equinox!2005-09-22T13:00:00-10:002005-09-22T13:00:00-10:00larrytag:knowing.net,2005-09-22:/posts/2005/09/happy-equinox/<p>::: {.Section1}
[Partially cloudy and 80 degrees here in Hawaii . Hurricane Jova seems to be safely slicing towards the North. Another day in paradise!]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[<img alt="" height="242" i1027 id="" src="http://www.knowing.net/content/binary/image00112345.jpg" width="706" x0000> ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>LINQ Questions, Some Answers2005-09-22T07:37:00-10:002005-09-22T07:37:00-10:00larrytag:knowing.net,2005-09-22:/posts/2005/09/linq-questions-some-answers/<p>::: {.Section1}
[In comments, Mark Mehelis asked some good questions re. LINQ: ]{style="font-size:10.0pt; font-family:Arial"}</p>
<ul>
<li>[As far as I can tell <strong>[the syntax between VB and C# is not the same]{style="font-weight:bold"}</strong>. Do you know why this is? Would it not be better to have this …</li></ul><p>::: {.Section1}
[In comments, Mark Mehelis asked some good questions re. LINQ: ]{style="font-size:10.0pt; font-family:Arial"}</p>
<ul>
<li>[As far as I can tell <strong>[the syntax between VB and C# is not the same]{style="font-weight:bold"}</strong>. Do you know why this is? Would it not be better to have this be consistent accross the languages?]{style="font-size:10.0pt;font-family:Arial"}</li>
</ul>
<p>[The syntax does indeed vary between languages. A consistent query <strong>[language ]{style="font-weight:bold"}</strong>would definitely have been easier to learn, but what LINQ provides is a set of consistent query <strong>[operators]{style="font-weight:bold"}</strong> that can be incorporated into languages in whatever way the language designer sees fit. This makes LINQ slightly less teachable (it will vary from language to language) but perhaps more appealing to language designers, since they aren’t forced to accept a query language that differs from their own language design philosophy. Vick (VB) is emphasizing familiarity and a SQL-like syntax, Hejlsberg (C#) is emphasizing functional-style programming forms. This is also a good place to point out that languages can use the underlying APIs even if they do not implement language extensions. []{.underline} ]{style="font-size:10.0pt; font-family:Arial"}</p>
<ul>
<li>[Is there some way to have all your <strong>[LINQ based access through a repository of some type]{style="font-weight:bold"}</strong>. It would be to easy to pepper queries throughout your code making it a string pulling excersize when your application gained some size.]{style="font-size:10.0pt;font-family:Arial"}</li>
</ul>
<p>[This is an interesting idea. I haven’t worked with actual LINQ code enough to actually wrap my head around how it affects coupling and cohesion, so I don’t know. We don’t yet know what patterns are productive in LINQ-using programs. Obviously, you could put all your queries in a single class behind a façade and even put that class into its own namespace / assembly. Would that be a good idea? Not sure.]{style="font-size:10.0pt; font-family:Arial"}</p>
<ul>
<li>[Also what happens when the <strong>[underlying data structure in the DB changes?]{style="font-weight:bold"}</strong> Must you re-compile your code? recreate your classes and then change your LINQ queries?]{style="font-size:10.0pt;font-family:Arial"}</li>
</ul>
<p>[You definitely should <em>[not]{style="font-style:italic"}</em> have to recompile on a DB change, you almost certainly do if you’re querying objects. ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt;font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>:::</p>Microsoft re-org: Profitability versus bureaucracy?2005-09-21T09:36:00-10:002005-09-21T09:36:00-10:00larrytag:knowing.net,2005-09-21:/posts/2005/09/microsoft-re-org-profitability-versus-bureaucracy/<p>::: {.Section1}
[<a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Microsoft's reorganization</a>\< ?xml:namespace prefix = o /> will apparently lump the existing seven divisions:]{style="FONT-SIZE: 10pt; COLOR: #003300; FONT-FAMILY: Verdana"}</p>
<ul>
<li><strong><em>*[Information Worker,]{style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"}</em></strong>*[ including Microsoft Office, Microsoft Publisher, Microsoft Visio]{style="FONT-SIZE: 10pt; FONT-FAMILY: Verdana"}
:::</li>
</ul>And by "simple" we mean "spaghetti-like"2005-09-21T08:42:00-10:002005-09-21T08:42:00-10:00larrytag:knowing.net,2005-09-21:/posts/2005/09/and-by-simple-we-mean-spaghetti-like/<p>My new clients have responded to our shockingly complex architecture by specifying, get this, the <em>names</em> of the source code files we are to deliver. So, apparently if we can't negotiate this away, our class structure will be memorialized in the specification contract! Oh, Lordy. Why does the phrase "<a href="https://en.wikipedia.org/wiki/Sunk_cost_fallacy">sunk …</a></p><p>My new clients have responded to our shockingly complex architecture by specifying, get this, the <em>names</em> of the source code files we are to deliver. So, apparently if we can't negotiate this away, our class structure will be memorialized in the specification contract! Oh, Lordy. Why does the phrase "<a href="https://en.wikipedia.org/wiki/Sunk_cost_fallacy">sunk cost fallacy</a>" come to mind?</p>LINQ: The Compiler Does Not Generate SQL!2005-09-21T08:30:00-10:002005-09-21T08:30:00-10:00larrytag:knowing.net,2005-09-21:/posts/2005/09/linq-the-compiler-does-not-generate-sql/<p>Already I'm seeing people falling into the interface vs. implementation mistake with LINQ. Because I think LINQ is a big deal, I'm going to put up a LINQ Wiki RSN, but I had to post this because it got under my skin so: The compiler does <em>not</em> translate your query …</p><p>Already I'm seeing people falling into the interface vs. implementation mistake with LINQ. Because I think LINQ is a big deal, I'm going to put up a LINQ Wiki RSN, but I had to post this because it got under my skin so: The compiler does <em>not</em> translate your query into SQL! The compiler translates your query into an expression tree that is resolved by an <em>appropriate implementation</em> of LINQ. In other words, DLINQ will resolve the query into native SQL and use all the appropriate database indices and execution plan optimization and so forth, XLINQ will resolve the query appropriately for its new document object model, and LINQ will resolve it for native objects (I think in naming they made a mistake -- Microsoft should make it clearer that the "native object" implementation is just Yet Another Implementation of the interface).</p>
<p>I am looking forward to <em>different</em> implementations of the interface, perhaps with constraint-programming or fuzzy logic implementations. As to other database vendors, whether Oracle will implement DLINQ efficiently is a business, not technical, question. As for MySQL, that, too, I would imagine that the Open Source community will rise to the opportunity!</p>Expression bluetooth keyboard not compatible with Tablet PC2005-09-20T10:52:00-10:002005-09-20T10:52:00-10:00larrytag:knowing.net,2005-09-20:/posts/2005/09/expression-bluetooth-keyboard-not-compatible-with-tablet-pc/<p>::: {.Section1}
<em>[Grrr]{style="font-size:10.0pt; font-family:Arial;font-style:italic"}</em>[… Despite the assurances of the salesmen at the PDC, the “Expression bluetooth keyboard” is <em>[not]{style="font-style:italic"}</em> compatible with the Tablet PC. So now I have a portable keyboard that only works with my cellphone. Like <em>[that’s]{style …</em></p><p>::: {.Section1}
<em>[Grrr]{style="font-size:10.0pt; font-family:Arial;font-style:italic"}</em>[… Despite the assurances of the salesmen at the PDC, the “Expression bluetooth keyboard” is <em>[not]{style="font-style:italic"}</em> compatible with the Tablet PC. So now I have a portable keyboard that only works with my cellphone. Like <em>[that’s]{style="font-style:italic"}</em> an important feature. Anyone know of a decent note-taker / outliner for the Smartphone? ]{style="font-size:10.0pt;font-family:Arial"}
:::</p>PDC final thought: Nice t-shirt2005-09-20T08:24:00-10:002005-09-20T08:24:00-10:00larrytag:knowing.net,2005-09-20:/posts/2005/09/pdc-final-thought-nice-t-shirt/<p>::: {.Section1}
[For all my concern about the session depths, I will say this: the PDC05 t-shirt is made from a very nice cotton. ]{style="font-size:10.0pt; font-family:Arial"}
:::</p>And by "architecture," we mean "big ball of mud"2005-09-19T17:08:00-10:002005-09-19T17:08:00-10:00larrytag:knowing.net,2005-09-19:/posts/2005/09/and-by-architecture-we-mean-big-ball-of-mud/<p>::: {.Section1}
<em>[Sigh]{style="font-size:10.0pt; font-family:Arial;font-style:italic"}</em>[. I’m just ramping up on a project. Client sez all the right things: “best practices,” “do the right thing,” etc. We develop an architectural proposal; they sign off on it. We develop our first prototype, they say “Whoa, nelly …</p><p>::: {.Section1}
<em>[Sigh]{style="font-size:10.0pt; font-family:Arial;font-style:italic"}</em>[. I’m just ramping up on a project. Client sez all the right things: “best practices,” “do the right thing,” etc. We develop an architectural proposal; they sign off on it. We develop our first prototype, they say “Whoa, nelly! What’s with all them thar interfaces and patterns and whatnot? Couldn’t you just… you know… simplify things?” It drives me crazy: this idea that fewer classes (or, what they really mean, fewer source code files) means “easy to understand.” I’m not talking about “you ain’t gonna’ need it,” either – I’m talking about people complaining about separating interfaces from implementation. Why are all the good clients taken?]{style="font-size:10.0pt;font-family:Arial"}
:::</p>Hardcore enough for casey2005-09-19T11:05:00-10:002005-09-19T11:05:00-10:00larrytag:knowing.net,2005-09-19:/posts/2005/09/hardcore-enough-for-casey/<p>::: {.Section1}
[<a href="http://www.brains-n-brawn.com/">casey chesnut</a>, who does things like integrate machine vision into videogames and <a href="http://www.brains-N-brawn.com/default.aspx?vDir=aicaptcha">writes neural nets that defeat CAPTCHAs</a>, says that the PDC was the best conference he’s ever been to, so I guess I’m in the minority in thinking that it wasn’t hardcore enough. ]{style="font-size …</p><p>::: {.Section1}
[<a href="http://www.brains-n-brawn.com/">casey chesnut</a>, who does things like integrate machine vision into videogames and <a href="http://www.brains-N-brawn.com/default.aspx?vDir=aicaptcha">writes neural nets that defeat CAPTCHAs</a>, says that the PDC was the best conference he’s ever been to, so I guess I’m in the minority in thinking that it wasn’t hardcore enough. ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}
:::</p>Today's Fun Comparison: Katrina : H5N1 :: Bad : ?2005-09-18T18:07:00-10:002005-09-18T18:07:00-10:00larrytag:knowing.net,2005-09-18:/posts/2005/09/todays-fun-comparison-katrina-h5n1-bad/<p>If "hurricane flooding New Orleans" is "utterly predictable disaster with shocking lack of preparation, especially regarding the poor," then how do we feel about the news that <a href="http://news.trust.org//humanitarian/">bird flu is breaking out in Jakarta's main zoo</a>?</p>Geek Acres Home Coffee Roast: Well, That's Nasty2005-09-18T08:39:00-10:002005-09-18T08:39:00-10:00larrytag:knowing.net,2005-09-18:/posts/2005/09/geek-acres-home-coffee-roast-well-thats-nasty/<p>A little more than a year ago, I moved to the Kona side of the Big Island of Hawaii and moved into a house that, among other things, has coffee plants growing like weeds. I was too late to the game to do anything last year, but for the past …</p><p>A little more than a year ago, I moved to the Kona side of the Big Island of Hawaii and moved into a house that, among other things, has coffee plants growing like weeds. I was too late to the game to do anything last year, but for the past year, I've been pruning and tending in hopes of getting enough beans to take care of Christmas and birthdays. (Actually, if I actually got the plants producing anything like commercial yields, I'd be coffee self-sufficient, but I don't think I have any chance of realizing that.)</p>
<p>So I picked the very first cherries of the season in late August, separated the pulp from the bean by hand, dried them on the lanai, and hand-peeled away the "parchment" (a fingernail-hardness shell) from the actual, khaki-green bean that is roasted. Experimenting with various milling techniques (rolling pins, etc.) in a so-far-vain attempt to discover something even remotely practical, I ended up with enough green coffee for 1 pot (after, probably, 4 hours of accumulated labor).</p>
<p>Well, I couldn't resist <em>that</em>, so I did my first roast yesterday, using the oven. This morning, with the full moon setting over the predawn Pacific, we ground and brewed the first pot.</p>
<p>The worst coffee I've ever had came from a shop-floor dispenser at an electronics manufacturer in Cambridge, Massachusetts, in November of 1984. The taste was so bad that the moment is imprinted in my memory as indelibly as the memory of the first time I got my nose broken. The dispenser over there, the administrative trailer to my left, the poorly-lit racks of components stretching to left and right, and that taste, combining as it did staleness, acidity, styrofoam, and (I think) toluene...</p>
<p>The coffee this morning wasn't <em>that</em> bad. But I suspect I'll remember it for awhile.</p>PDC Vista Installation troubles2005-09-18T08:17:00-10:002005-09-18T08:17:00-10:00larrytag:knowing.net,2005-09-18:/posts/2005/09/pdc-vista-installation-troubles/<p>::: {.Section1}
[First, I tried in a VPC. That didn't work because it wouldn't accept the activation code. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[Second, I used PartitionMagic to add a new 20GB partitition on my boot drive. Still wouldn't accept the activation code. <strong>[Solved]{style="FONT-WEIGHT: bold"}</strong>: Realized that I was …</p><p>::: {.Section1}
[First, I tried in a VPC. That didn't work because it wouldn't accept the activation code. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[Second, I used PartitionMagic to add a new 20GB partitition on my boot drive. Still wouldn't accept the activation code. <strong>[Solved]{style="FONT-WEIGHT: bold"}</strong>: Realized that I was trying to install PDC disk 1<strong>[ ]{style="FONT-WEIGHT: bold"}</strong>instead of PDC disk 5. Disk 1 is the public beta of Vista , but at least my copy of "The Details" gives the same activation key for both ? in other words, the activation key only works for the Disk 5 PDC build, not the Disk 1 public beta build.]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[So, began to install PDC build on my new partition, but the "Choose where to install" dialog refused to recognize my boot drive as a valid place; only my data drive. Rebooted into XP, and BootMagic wouldn't recognize my data drive as a valid place to install a new OS, only my boot drive. So I put a new partition on my data drive and figured I'd figure it out later. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[Installed the PDC Vista build on the new partition in my data drive (which apparently is seen by Vista as the valid boot drive). Install went okay. When the system boots, I see the Microsoft boot manager, giving me a choice between Vista and XP. Choosing Vista gives me a classic DOS prompt saying that HAL.DLL is corrupt or missing. Booting into XP brings me back into my normal system and in fact I can see that my Vista install (on drive E: or somesuch) doesn't have a HAL.DLL at all. Copying the XP HAL.DLL to my Vista \Windows\System32 doesn't help. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[I actually suspect that the Vista boot is not going to the Vista drive at all, that some weird combination of cables and boot managers has screwed things up. Now my debate is whether I should:]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<ol>
<li>[Swap cables and see if I boot off my data drive, or]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</li>
<li>[Try to install under VPC, or]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</li>
<li>[Delete the partitions and wait 'til next year]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</li>
</ol>PDC05: You call that hardcore?2005-09-17T09:35:00-10:002005-09-17T09:35:00-10:00larrytag:knowing.net,2005-09-17:/posts/2005/09/pdc05-you-call-that-hardcore/<p>::: {.Section1}
[I loved the first day of PDC, felt a little antsy by the second, and by the time my flight climbed into the early-morning smog of LA yesterday, I was positively muddled. Speaking in a darkened room to a crowd of strangers is the most inefficient means of communication …</p><p>::: {.Section1}
[I loved the first day of PDC, felt a little antsy by the second, and by the time my flight climbed into the early-morning smog of LA yesterday, I was positively muddled. Speaking in a darkened room to a crowd of strangers is the most inefficient means of communication imaginable, but it used to be that conferences were the only place to learn topics that were insufficient in and of themselves to justify a book and too complex or too esoteric to earn a spot in one of the handful of trade magazines. Now, though, blogging and screencasts have thoroughly risen to the challenge of delivering introductory discussions as well as "tips and tricks." By the third day of the PDC I was attending 300-level classes and furiously thinking "Go on! Go on! Get to the hard stuff!"]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[In particular, I couldn't find sessions that gave me <em>[insight]{style="FONT-STYLE: italic"}</em> into LINQ or Workflow which, along with Atlas, were the major technologies introduced at the conference. Did I <em>[see ]{style="FONT-STYLE: italic"}</em>LINQ and Workflow? Yes. Did I see <em>[more ]{style="FONT-STYLE: italic"}</em>in the sessions than I saw in the keynotes? Barely. I saw the equivalent of "Hello, World" over and over and in almost every case, I noted sleight-of-hand ? a declaration of great capacity bolstered by a demo that, in fact, was without the slightest complexity. I come away from PDC05 feeling that I'm ready to download and install these technologies, but I don't feel that I have a competitive advantage over developers who chose not to attend the PDC05. I don't feel that I can go to customers and advise them on these technologies in a way that justifies charging them for that advice. Do the technologies look cool? Sure. Do I have a personal feeling on their worth? Sure. Do I come away from PDC05 knowing where are the corners and sweetspots of the technologies? Absolutely not, despite that type of knowledge being one of the few things that justify the time and expense of traveling to a conference.]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[These issues and this criticism of the conference structure is not peculiar to the PDC. "Conference sessions" are to the Internet Age what buggy-whips were to the Automotive Age. I just wished that I realized that prior to fastening my seatbelt for the flight home.]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>OneNote 12 to search voice and video!2005-09-15T05:14:00-10:002005-09-15T05:14:00-10:00larrytag:knowing.net,2005-09-15:/posts/2005/09/onenote-12-to-search-voice-and-video/<p>::: {.Section1}
[Talk about burying the lede! Chris Pratley is beginning to reveal the capabilities of OneNote 12. He starts with import of printed and scanned documents, which they’ll OCR, and only then does he reveal that OneNote will do phonetic <strong>[voice-search!]{style="font-weight:bold"}[ ]{style="font-weight:bold"}</strong>]{style="font-size …</p><p>::: {.Section1}
[Talk about burying the lede! Chris Pratley is beginning to reveal the capabilities of OneNote 12. He starts with import of printed and scanned documents, which they’ll OCR, and only then does he reveal that OneNote will do phonetic <strong>[voice-search!]{style="font-weight:bold"}[ ]{style="font-weight:bold"}</strong>]{style="font-size: 10.0pt;font-family:Arial;color:navy"}
:::</p>Lifebook P1500 can run Vista GLASS2005-09-14T18:13:00-10:002005-09-14T18:13:00-10:00larrytag:knowing.net,2005-09-14:/posts/2005/09/lifebook-p1500-can-run-vista-glass/<p>::: {.Section1}
[I can't tell you who got it to work, but in the hallways I saw one of these tiny touchscreen tablets not only running Vista , but running with the "glass" UI effects. Awesome! ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[<img alt="" height="193" i1025 id="" src="http://www.knowing.net/content/binary/image0011234.jpg" width="420" x0000> ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>PDC phone deal a false flag or a f***up?2005-09-14T18:01:00-10:002005-09-14T18:01:00-10:00larrytag:knowing.net,2005-09-14:/posts/2005/09/pdc-phone-deal-a-false-flag-or-a-fup/<p>::: {.Section1}
[Scoble is saying that the phone deal at the PDC (a super-high-end phone for \$149) was a real screw-up and not the trickle-feed that I was sure it was. At JavaOne, they always play the same game of saying on the first day “Oh, we ran out!” and then …</p><p>::: {.Section1}
[Scoble is saying that the phone deal at the PDC (a super-high-end phone for \$149) was a real screw-up and not the trickle-feed that I was sure it was. At JavaOne, they always play the same game of saying on the first day “Oh, we ran out!” and then on the second day saying “Well, we found another couple hundred,” and then on the last day “You know what? We love you guys so much, we’re going to give you all one!” I was absolutely certain that it was the same with the phone deal, but Scoble says, nope, it was a screwup. If so, it’s a really, really stupid one.]{style="font-size:10.0pt; font-family:Arial"}<em>[ ]{style="font-style:italic"}</em></p>
<p>[ ]{style="font-size: 12.0pt"}</p>
<p>:::</p>Contention at "Future of the user experience" panel2005-09-14T17:54:00-10:002005-09-14T17:54:00-10:00larrytag:knowing.net,2005-09-14:/posts/2005/09/contention-at-future-of-the-user-experience-panel/<p>::: {.Section1}
[They have these special presentations in the press room in which certain topics are presented to a group vastly smaller than the general sessions. Generally, these are pretty mellow. At one this afternoon, though, the press made it clear that they are very skeptical that the Avalon / Windows Presentation …</p><p>::: {.Section1}
[They have these special presentations in the press room in which certain topics are presented to a group vastly smaller than the general sessions. Generally, these are pretty mellow. At one this afternoon, though, the press made it clear that they are very skeptical that the Avalon / Windows Presentation Foundation technologies are in any way “the right thing.” Jerry Pournelle pulled a total Zell Miller, going on at length about the way that help works in Windows and then, having made his point, stomped out of the room. Other questioners were more sane, but still, it was clear that most journalists remember the early days of desktop publishing, Websites, etc… and the pain that happens before new standards are established.]{style="font-size:10.0pt; font-family:Arial"}
:::</p>Sam Gentile calls it the "Release Candidate" of Visual Studio 2005 Team Suite2005-09-14T17:47:00-10:002005-09-14T17:47:00-10:00larrytag:knowing.net,2005-09-14:/posts/2005/09/sam-gentile-calls-it-the-release-candidate-of-visual-studio-2005-team-suite/<p>::: {.Section1}
[It’s my understanding that <a href="https://login.microsoftonline.com/common/oauth2/authorize?client_id=499b84ac-1321-427f-aa17-267ca6975798&site_id=501446&response_mode=form_post&response_type=code+id_token&redirect_uri=https%3A%2F%2Fapp.vssps.visualstudio.com%2F_signedin&nonce=5ce49a45-7840-44a2-8fb2-551a4b4d8844&state=realm%3Dapp.vssps.visualstudio.com%26allow_passthrough%3DTrue%26reply_to%3Dhttps%253A%252F%252Fmy.visualstudio.com%253A443%252F%253Fwt.mc_id%253Do%25257emsft%25257emsdn%25257eoldPortal%2526utm_source%253DMSDNPortal%2526auth_redirect%253Dtrue%26nonce%3D5ce49a45-7840-44a2-8fb2-551a4b4d8844&resource=https%3A%2F%2Fmanagement.core.windows.net%2F&cid=5ce49a45-7840-44a2-8fb2-551a4b4d8844&wsucxt=1&prompt=select_account">this is the RC of VS2005</a>, but Sam Gentile is the first place I actually saw someone else use the phrase…]{style="font-size: 10.0pt;font-family:Arial;color:navy"}
:::</p>Plug in Memory Stick - Expand Memory2005-09-14T17:33:00-10:002005-09-14T17:33:00-10:00larrytag:knowing.net,2005-09-14:/posts/2005/09/plug-in-memory-stick-expand-memory/<p>::: {.Section1}
[At yesterday’s keynote Allchin demonstrated a forthcoming capability that allows a Flash-RAM memory stick to be used for system memory. Tom Murphy pointed out the killer application for this capability: “gen up VPC images that could just boot on install. You would jack in the memory, it would …</p><p>::: {.Section1}
[At yesterday’s keynote Allchin demonstrated a forthcoming capability that allows a Flash-RAM memory stick to be used for system memory. Tom Murphy pointed out the killer application for this capability: “gen up VPC images that could just boot on install. You would jack in the memory, it would boot the image and use that memory for all the VPC memory leaving your machine OS running in the machine ram.” Yeah, that’d rock.]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>[ ]{style="font-size: 10.0pt;font-family:Arial;color:navy"}</p>
<p>:::</p>Google blog search2005-09-14T13:36:00-10:002005-09-14T13:36:00-10:00larrytag:knowing.net,2005-09-14:/posts/2005/09/google-blog-search/<p>::: {.Section1}
[Check it out: <a href="https://www.google.com/?gws_rd=ssl">http://blogsearch.google.com/blogsearch?hl=en&q=linq</a>\< ?xml:namespace prefix = o /> ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>Workflow is the second big announcement at PDC2005-09-14T13:27:00-10:002005-09-14T13:27:00-10:00larrytag:knowing.net,2005-09-14:/posts/2005/09/workflow-is-the-second-big-announcement-at-pdc/<p>::: {.Section1}
[Yesterday belonged to LINQ, today belongs to Workflow. This is a new namespace / API within WinFX that provides a fundamental atom of <strong>[Activity]{style="FONT-WEIGHT: bold"}</strong>. An <strong>[Activity ]{style="FONT-WEIGHT: bold"}</strong>\< ?xml:namespace prefix = o />can be:]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[<img alt="\<handwritten content/>" height="297" src="http://www.knowing.net/content/binary/image001123.gif" width="953"> ]{style="FONT-SIZE …</p><p>::: {.Section1}
[Yesterday belonged to LINQ, today belongs to Workflow. This is a new namespace / API within WinFX that provides a fundamental atom of <strong>[Activity]{style="FONT-WEIGHT: bold"}</strong>. An <strong>[Activity ]{style="FONT-WEIGHT: bold"}</strong>\< ?xml:namespace prefix = o />can be:]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[<img alt="\<handwritten content/>" height="297" src="http://www.knowing.net/content/binary/image001123.gif" width="953"> ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[Additionally, <strong>[Activity]{style="FONT-WEIGHT: bold"}</strong>s can be combined into composite activities. With that, and an underlying execution engine, they can model control-flow. With that, <strong>[and a graphical deisgn surface]{style="FONT-WEIGHT: bold"}</strong>, they suddenly have a visual programming high-level programming language. Naturally, they call this <strong>[Windows <em>[X]{style="FONT-STYLE: italic"}<em> Foundation ]{style="FONT-WEIGHT: bold"}</em>*where, in this case, </em></strong>[X = Workflow]{style="FONT-WEIGHT: bold; FONT-STYLE: italic"}***. It's very cool. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>Build a managed compiler in less than an hour2005-09-13T12:09:00-10:002005-09-13T12:09:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/build-a-managed-compiler-in-less-than-an-hour/<p>::: {.Section1}
[Very much enjoyed Joe Duffy and Joel Pobar’s session on “Build a compiler for managed code in less than an hour.” Basically, they stepped through the classic compiler stages (scanner, parser, code gen), but then went into how, in the .NET world, the System.Reflection.Emit libraries work …</p><p>::: {.Section1}
[Very much enjoyed Joe Duffy and Joel Pobar’s session on “Build a compiler for managed code in less than an hour.” Basically, they stepped through the classic compiler stages (scanner, parser, code gen), but then went into how, in the .NET world, the System.Reflection.Emit libraries work. It might have been a little too ambitious in scope – if you carefully go over “what a scanner is,” then you might not even mention type coercion or autoboxing half-an-hour later. But it was a very well-attended session, they had good energy, and I think it was probably really good for many, many people. Heck, <em>[I’ve]{style="font-style:italic"}</em> never seen all the .NET pieces in a single, easy-to-digest place before.]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size: 12.0pt"}</p>
<p>:::</p>WPF/E: Avalon graphics on devices?2005-09-13T12:05:00-10:002005-09-13T12:05:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/wpfe-avalon-graphics-on-devices/<p>::: {.Section1}
[WPF/E was also shown at the PDC. This is a XAML + JavaScript (!) solution for delivering Avalon-like graphics on devices. I’m scanning the catalog to see if there are classes available on this, which seems like a startlingly odd combination of technologies.]{style="font-size:10.0pt; font-family:Arial …</p><p>::: {.Section1}
[WPF/E was also shown at the PDC. This is a XAML + JavaScript (!) solution for delivering Avalon-like graphics on devices. I’m scanning the catalog to see if there are classes available on this, which seems like a startlingly odd combination of technologies.]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size: 12.0pt"}</p>
<p>:::</p>200 million PCs per year are shipped2005-09-13T12:02:00-10:002005-09-13T12:02:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/200-million-pcs-per-year-are-shipped/<p>::: {.Section1}
[According to Bill Gates, 200 million PCs were shipped last year (are going to be shipped this year?). +12% growth. This builds into the point that in the few years after Vista ships, 500 million PCs will be purchases, 200 million of which will be “capable of being upgraded …</p><p>::: {.Section1}
[According to Bill Gates, 200 million PCs were shipped last year (are going to be shipped this year?). +12% growth. This builds into the point that in the few years after Vista ships, 500 million PCs will be purchases, 200 million of which will be “capable of being upgraded to Vista .” (Note they didn’t lay down an estimate as to what % will <em>[ship ]{style="font-style:italic"}</em>with Vista installed.) ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size: 12.0pt"}</p>
<p>:::</p>Superfetch will use flash drives as virtual memory2005-09-13T12:00:00-10:002005-09-13T12:00:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/superfetch-will-use-flash-drives-as-virtual-memory/<p>::: {.Section1}
[Superfetch is Vista ’s an enhancement to the virtual memory manager that handles the swapping of application RAM in and off the disk. Superfetch looks like a good idea, it basically seems to look at usage patterns over time and use this knowledge to pre-cache the most commonly-used DLLs …</p><p>::: {.Section1}
[Superfetch is Vista ’s an enhancement to the virtual memory manager that handles the swapping of application RAM in and off the disk. Superfetch looks like a good idea, it basically seems to look at usage patterns over time and use this knowledge to pre-cache the most commonly-used DLLs. A surprising part of the demo was when Jim Allchin plugged in a flashdrive, which became usable as virtual memory! Is flash memory over the USB bus really faster than disk access or was that just an attention-getter?]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size: 12.0pt"}</p>
<p>:::</p>Office 12 reactions2005-09-13T11:55:00-10:002005-09-13T11:55:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/office-12-reactions/<p>::: {.Section1}
[Microsoft showed Office 12 for the first time in public during the keynotes. The most obvious thing is that they’ve gotten rid of dropdown menus; choosing a high-level menu now puts a taskbar in a tabbed interface (I think is how it works – it was difficult to comprehend …</p><p>::: {.Section1}
[Microsoft showed Office 12 for the first time in public during the keynotes. The most obvious thing is that they’ve gotten rid of dropdown menus; choosing a high-level menu now puts a taskbar in a tabbed interface (I think is how it works – it was difficult to comprehend). No sign of ink, as a matter of fact, the only sign was that the “ink comments” button in Word is still there, hinting that there’s not any further suport. ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[Outlook will have built-in support for RSS reading, including synchronizing content for offline viewing (additionally, of course, in Vista there will be a unified RSS store). Outlook will automatically preview attached files – let’s see how long <em>[that]{style="font-style:italic"}</em> lasts before some hacker figures out how to use it as a route towards hacking the system! ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>:::</p>Eric Meijer gets super-low-level about LINQ2005-09-13T11:49:00-10:002005-09-13T11:49:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/eric-meijer-gets-super-low-level-about-linq/<p>::: {.Section1}
[<a href="http://lambda-the-ultimate.org/node/967">Eric Meijer is posting over at Lambda the Ultimate on LINQ</a>. Look for a flamewar to start.]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size: 12.0pt"}</p>
<p>:::</p>Paul Vick posts first VB LINQ examples2005-09-13T11:48:00-10:002005-09-13T11:48:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/paul-vick-posts-first-vb-linq-examples/<p>::: {.Section1}
[Looks like Paul Vick is willing to show <a href="http://www.panopticoncentral.net/2005/09/13/introducing-linq/">what LINQ looks like for VB developers</a>. This is a helpful post because most of the talks so far seem to be concentrating on the C# syntax.]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size: 12.0pt"}</p>
<p>:::</p>Visual Studio 2005 Release Candidate Available2005-09-13T11:46:00-10:002005-09-13T11:46:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/visual-studio-2005-release-candidate-available/<p>::: {.Section1}</p>
<div>
[Visual Studio 2005 Team Suite and SQL Server 2005 Sept CTP are now available in [MSDN Subscriber downloads](https://login.microsoftonline.com/common/oauth2/authorize?client_id=499b84ac-1321-427f-aa17-267ca6975798&site_id=501446&response_mode=form_post&response_type=code+id_token&redirect_uri=https%3A%2F%2Fapp.vssps.visualstudio.com%2F_signedin&nonce=5ce49a45-7840-44a2-8fb2-551a4b4d8844&state=realm …</div><p>::: {.Section1}</p>
<div>
[Visual Studio 2005 Team Suite and SQL Server 2005 Sept CTP are now available in [MSDN Subscriber downloads](https://login.microsoftonline.com/common/oauth2/authorize?client_id=499b84ac-1321-427f-aa17-267ca6975798&site_id=501446&response_mode=form_post&response_type=code+id_token&redirect_uri=https%3A%2F%2Fapp.vssps.visualstudio.com%2F_signedin&nonce=5ce49a45-7840-44a2-8fb2-551a4b4d8844&state=realm%3Dapp.vssps.visualstudio.com%26allow_passthrough%3DTrue%26reply_to%3Dhttps%253A%252F%252Fmy.visualstudio.com%253A443%252F%253Fwt.mc_id%253Do%25257emsft%25257emsdn%25257eoldPortal%2526utm_source%253DMSDNPortal%2526auth_redirect%253Dtrue%26nonce%3D5ce49a45-7840-44a2-8fb2-551a4b4d8844&resource=https%3A%2F%2Fmanagement.core.windows.net%2F&cid=5ce49a45-7840-44a2-8fb2-551a4b4d8844&wsucxt=1&prompt=select_account). (*[via Sam Gentile ]{style="font-style:italic"}*]{style="font-size:10.0pt; font-family:Arial"}http://samgentile.com/blog/archive/2005/09/12/31932.aspx[)]{style="color:navy"}
</div>
<p>:::</p>Touch-Screen Tablets2005-09-13T11:41:00-10:002005-09-13T11:41:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/touch-screen-tablets/<p>::: {.Section1}
[Hilton Locke has revealed that Microsoft is okaying OEM’s to ship Windows XP Tablet PC Edition with touch-screens rather than active digitizers. (Not that active digitizers will die, not that active digitizers aren’t infinitely better than touch-screens, but touch-screens are cheaper.)]{style="font-size: 10.0pt;font-family:Arial …</p><p>::: {.Section1}
[Hilton Locke has revealed that Microsoft is okaying OEM’s to ship Windows XP Tablet PC Edition with touch-screens rather than active digitizers. (Not that active digitizers will die, not that active digitizers aren’t infinitely better than touch-screens, but touch-screens are cheaper.)]{style="font-size: 10.0pt;font-family:Arial;color:navy"}
:::</p>LINQ Download2005-09-13T11:38:00-10:002005-09-13T11:38:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/linq-download/<p>::: {.Section1}
[The direct link to the C# LINQ preview is http://msdn.microsoft.com/netframework/future/linq/ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[The VB preview is http://download.microsoft.com/download/2/a/4/2a405b66-1b1c-4fca-bfbf-007aad63d307/LINQ%20VB%20Preview.msi]{style="font-size:10.0pt …</p><p>::: {.Section1}
[The direct link to the C# LINQ preview is http://msdn.microsoft.com/netframework/future/linq/ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[The VB preview is http://download.microsoft.com/download/2/a/4/2a405b66-1b1c-4fca-bfbf-007aad63d307/LINQ%20VB%20Preview.msi]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size: 12.0pt"}</p>
<p>:::</p>LINQ: Query is Search, and Search is Everything2005-09-13T11:35:00-10:002005-09-13T11:35:00-10:00larrytag:knowing.net,2005-09-13:/posts/2005/09/linq-query-is-search-and-search-is-everything/<p>::: {.Section1}
[Today Microsoft went public with Language Integrated Query (LINQ), which builds on top of a just-announced.NET 2.0 library called the Integrated Query Framework. At its most basic level, LINQ is the ability to apply SQL-like operators to arbitrary. NET collections. The operators provided are "relationally complete" meaning …</p><p>::: {.Section1}
[Today Microsoft went public with Language Integrated Query (LINQ), which builds on top of a just-announced.NET 2.0 library called the Integrated Query Framework. At its most basic level, LINQ is the ability to apply SQL-like operators to arbitrary. NET collections. The operators provided are "relationally complete" meaning that they not only support selection, but projection (joins), and identity semantics based on overriding Equals() and hashcodes in LINQ (objects) and in the manner appropriate to the XML and relational domains in XLINQ and DLINQ.]{style="font-size:10.0pt;font-family:Arial"}</p>
<p>[This is a big deal.]{style="font-size:10.0pt;font-family:Arial"}
:::</p>Pete Coffee correctly points out importance of hardware knowledge2005-09-12T10:27:00-10:002005-09-12T10:27:00-10:00larrytag:knowing.net,2005-09-12:/posts/2005/09/pete-coffee-correctly-points-out-importance-of-hardware-knowledge/<p>::: {.Section1}
[<a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Peter Coffee’s pre-PDC column</a> correctly points out that truly compelling apps such as eBay, Google, and videogames are built, not in the abstract realms of virtual machines but with painstaking attention to hardware capabilities. This is one reason why <strong>[knowing C++ is the most important qualification for those …</strong></p><p>::: {.Section1}
[<a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Peter Coffee’s pre-PDC column</a> correctly points out that truly compelling apps such as eBay, Google, and videogames are built, not in the abstract realms of virtual machines but with painstaking attention to hardware capabilities. This is one reason why <strong>[knowing C++ is the most important qualification for those wishing to be professional programmers]{style="font-weight:bold"}</strong>. Peter hooks this observation to the abstraction of Indigo / Windows Communication Foundation, which I think is a bit of a conflation – I don’t really see the software abstraction of Indigo being the same thing as the hardware abstraction of .NET / Java. But as always, worth reading.]{style="font-size:10.0pt; font-family:Arial"}
:::</p>Line-fitting in ink article on DevX2005-09-12T08:49:00-10:002005-09-12T08:49:00-10:00larrytag:knowing.net,2005-09-12:/posts/2005/09/line-fitting-in-ink-article-on-devx/<p>::: {.Section1}
[My latest <a href="https://www.developer.com/">article on line-fitting in ink is up on DevX</a> ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[This was a tough one, with a failed attempt to port the Levenberg-Marquadt algorithm to C#, so finally I just did a very basic solver. ]{style …</p><p>::: {.Section1}
[My latest <a href="https://www.developer.com/">article on line-fitting in ink is up on DevX</a> ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[This was a tough one, with a failed attempt to port the Levenberg-Marquadt algorithm to C#, so finally I just did a very basic solver. ]{style="font-size:10.0pt; font-family:Arial"}
:::</p>eBay buys Skpe; Oracle buys Siebel2005-09-12T08:06:00-10:002005-09-12T08:06:00-10:00larrytag:knowing.net,2005-09-12:/posts/2005/09/ebay-buys-skpe-oracle-buys-siebel/<p>::: {.Section1}
[The rumor had been floating for a week, but [eBay purchased Skype for \<span class="math">\(2.6B](https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments) + \\)</span>1.5B in future performance-based payments (that’s clever!). They kind of contort it into “Voice over IP will help our high-end auctions,” (used cars, antiques, etc.) but …</p><p>::: {.Section1}
[The rumor had been floating for a week, but [eBay purchased Skype for \<span class="math">\(2.6B](https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments) + \\)</span>1.5B in future performance-based payments (that’s clever!). They kind of contort it into “Voice over IP will help our high-end auctions,” (used cars, antiques, etc.) but you gotta’ think that they’ll keep it a separate division, slug it out with Vonage and Microsoft, and see if they can’t maintain a big chunk of the VoIP pie. ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[ ]{style="font-size:10.0pt; font-family:Arial"}</p>
<p>[In other news, Oracle buys out Siebel for \$5.9B. Sobering to realize that one of the most high-flying players in the enterprise software industry is only valued around twice as much as the still-in-shortpants Skype. ]{style="font-size:10.0pt; font-family:Arial"}
:::</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>MindMap Blog Test Post2005-09-11T16:09:00-10:002005-09-11T16:09:00-10:00larrytag:knowing.net,2005-09-11:/posts/2005/09/mindmap-blog-test-post/<p>::: {.Section1}
<img alt="" height="192" i1025 id="" src="http://www.knowing.net/content/binary/image001123.jpg" width="372/" x0000></p>
<p>\< ?xml:namespace prefix = o /></p>
<p>[--------------------------------------------------------------------------------------------------------]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}<br>
[To open the attached map(s) you can download the free MindManager X5 Viewer ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}<br>
[from http://www.mindjet.com/viewer. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[ ]{style="FONT-SIZE: 12pt"}</p>
<p>:::</p>
<p>Download: Map11.mmap</p>Airplane reading2005-09-11T11:39:00-10:002005-09-11T11:39:00-10:00larrytag:knowing.net,2005-09-11:/posts/2005/09/airplane-reading/<p>Darn it. My designated "airplane read" for the PDC was John Sandford's "Rules of Prey." Unfortunately, it's proved too good and I'm now halfway through it, which means that I'll polish it off by the time my flight is halfway to LA. The next 2 books in my queue are …</p><p>Darn it. My designated "airplane read" for the PDC was John Sandford's "Rules of Prey." Unfortunately, it's proved too good and I'm now halfway through it, which means that I'll polish it off by the time my flight is halfway to LA. The next 2 books in my queue are Umberto Eco's "The Mysterious Flame of Queen Loanna" and Susanna Clarke's "Jonathan Strange & Mr. Norrell," which just came out in paperback. Unfortunately, even in paperback, it weighs in at 838 pages. Eco's a favorite author of mine, but not really amenable for reading in-between services of drinks and pretzels. I need a Harlan Coben / Michael Connolly type read -- tight plotting, suspenseful but not that CSI forensics-fetish thing that seems so popular nowadays, 350 pages that'll keep me occupied from buckling in to unfolding myself at the gate.</p>Monad / WSH beta public download2005-09-11T11:25:00-10:002005-09-11T11:25:00-10:00larrytag:knowing.net,2005-09-11:/posts/2005/09/monad-wsh-beta-public-download/<p>::: {.Section1}
[A new beta of Monad has just ~~\< ?xml:namespace prefix = o />become publicly available~~]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[http://www.microsoft.com/downloads/details.aspx?familyid=2ac59b30-5a44-4782-b0b7-79fe2efd1280&displaylang=en]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[Update: Looks like they yanked it. Probably a slip-up of a release intended for …</p><p>::: {.Section1}
[A new beta of Monad has just ~~\< ?xml:namespace prefix = o />become publicly available~~]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[http://www.microsoft.com/downloads/details.aspx?familyid=2ac59b30-5a44-4782-b0b7-79fe2efd1280&displaylang=en]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}</p>
<p>[Update: Looks like they yanked it. Probably a slip-up of a release intended for the PDC. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"}
:::</p>Tablet PC Gathering at PDC2005-09-11T10:42:00-10:002005-09-11T10:42:00-10:00larrytag:knowing.net,2005-09-11:/posts/2005/09/tablet-pc-gathering-at-pdc/<p>::: {.Section1}</p>
<div>
*[Via Loren: ]{style="font-size:12.0pt;font-style:italic"}*Going to PDC? Be sure to drop by the [Tablet PC gathering between 3PM and 6PM on Tuesday](https://www.tuxreports.com/whatisnew/ "http://www.whatisnew.com/blogs/dailynews/archive/2005/09/10/1742.aspx"). (Los Angeles Convention Center Room 512 …</div><p>::: {.Section1}</p>
<div>
*[Via Loren: ]{style="font-size:12.0pt;font-style:italic"}*Going to PDC? Be sure to drop by the [Tablet PC gathering between 3PM and 6PM on Tuesday](https://www.tuxreports.com/whatisnew/ "http://www.whatisnew.com/blogs/dailynews/archive/2005/09/10/1742.aspx"). (Los Angeles Convention Center Room 512).[ ]{style="color:navy"}
[Also of ink-y note: 10:15 Tuesday night is the Tablet BoF and Wednesday at 5 is Shawn van Ness and Jamie Wakeam on “Windows Vista Tablet PC: Advances in Creating Tablet Enabled Applications” (Room 501 ABC) ]{style="font-size:12.0pt"}
[ ]{style="font-size:12.0pt"}
[ ]{style="font-size:10.0pt; font-family:Arial"}
</div>
<p>:::</p>Ink-Enabling Office2005-09-11T09:44:00-10:002005-09-11T09:44:00-10:00larrytag:knowing.net,2005-09-11:/posts/2005/09/ink-enabling-office/<p>There's been a deafening silence regarding ink support in Office 12, leading me to suspect that Tom Clarkson's ink in Excel, Loren Heiny's ink in Word, and Josh Einstein's Outlook support may prove a great success for years to come. Perhaps they'll band together to create a virtual ink "suite …</p><p>There's been a deafening silence regarding ink support in Office 12, leading me to suspect that Tom Clarkson's ink in Excel, Loren Heiny's ink in Word, and Josh Einstein's Outlook support may prove a great success for years to come. Perhaps they'll band together to create a virtual ink "suite."</p>Katrina Dismay Turning to Anger2005-09-02T06:44:00-10:002005-09-02T06:44:00-10:00larrytag:knowing.net,2005-09-02:/posts/2005/09/katrina-dismay-turning-to-anger/<p>Although I know that the first priority still has to be aid, I'm having a hard time keeping the bile down at the government response. Any disaster will involve chaos and bungled plans, but concentrating on preparations for civil emergencies, including the possibility of evacuating a major city, is supposed …</p><p>Although I know that the first priority still has to be aid, I'm having a hard time keeping the bile down at the government response. Any disaster will involve chaos and bungled plans, but concentrating on preparations for civil emergencies, including the possibility of evacuating a major city, is supposed to be what the U.S. government's been <em>doing</em> for the past 4 years.</p>
<p>And allowing looting to begin and establishing a tone of anarchy? Can't we learn <em>anything</em>?</p>
<p>Coming hard on the heels of the ridiculous pork in July's transportation bill, with its \<span class="math">\(223 million "bridge to nowhere" in Ketchikan, Alaska, it's hard to forgive the water-removal budget for New Orleans being [cut from \\)</span>75 million in '99 to \$31 million last year](https://www.newsday.com/news/nation). </p>
<p>Okay...okay... just spleen venting... I've got to go swimming and look at pretty fish...</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>NDA-Cloaked Posts Hint At Next Big Thing2005-08-30T18:02:00-10:002005-08-30T18:02:00-10:00larrytag:knowing.net,2005-08-30:/posts/2005/08/nda-cloaked-posts-hint-at-next-big-thing/<p>Given the sudden spontaneous emergence of "Gee, this doesn't have anything to do with anything, but have you thought about how helpful query statements are?" posts going around, I think Friday, September 16 1:00 PM- 2:30 PM <strong>Room:</strong> 152/153 (Hall F) is going to be the most …</p><p>Given the sudden spontaneous emergence of "Gee, this doesn't have anything to do with anything, but have you thought about how helpful query statements are?" posts going around, I think Friday, September 16 1:00 PM- 2:30 PM <strong>Room:</strong> 152/153 (Hall F) is going to be the most interesting :90 minutes at the PDC.</p>Zero Blog Bounce Harder Zero Email Bounce2005-08-30T07:25:00-10:002005-08-30T07:25:00-10:00larrytag:knowing.net,2005-08-30:/posts/2005/08/zero-blog-bounce-harder-zero-email-bounce/<p>After an initial sweep to clear the spam and no-further-reading-required blog posts, I've got 92 emails in my Inbox and 193 posts in my RSS folder after ten days on the road. Getting to zero email bounce (ZEB) looks to be a lot easier since the next action on individual …</p><p>After an initial sweep to clear the spam and no-further-reading-required blog posts, I've got 92 emails in my Inbox and 193 posts in my RSS folder after ten days on the road. Getting to zero email bounce (ZEB) looks to be a lot easier since the next action on individual items is generally obvious (reply, file, or delete). Unfortunately, RSS items are almost all interesting-but-not-urgent; the <em>urgent</em> action is to clear out my aggregator so that I have a clear working space.</p>
<p>Not that I'm close to achieving either a ZEB or a ZBB soon...</p>Knee Pain On Long Flights Solved With Ace Bandage2005-08-30T06:59:00-10:002005-08-30T06:59:00-10:00larrytag:knowing.net,2005-08-30:/posts/2005/08/knee-pain-on-long-flights-solved-with-ace-bandage/<p>Just in (to Hawaii) from the East Coast. In the past few years, my left knee has become excruciating on long flights from fluid accumulating due to a combination of long periods of sitting erect and (perhaps) lower air pressure. Yesterday, I wrapped my knee in an ace bandage (not …</p><p>Just in (to Hawaii) from the East Coast. In the past few years, my left knee has become excruciating on long flights from fluid accumulating due to a combination of long periods of sitting erect and (perhaps) lower air pressure. Yesterday, I wrapped my knee in an ace bandage (not tightly, just enough to press in slightly) moments before getting on the plane in Boston. Worked like a million bucks -- hardly a twinge of pain the whole flight. (I know, off-topic, but perhaps one day someone will Google this article and save themselves some pain.)</p>Art Historians Want Side-By-Side PowerPoint, Lament the End of Kodak Carousels2005-08-28T11:19:00-10:002005-08-28T11:19:00-10:00larrytag:knowing.net,2005-08-28:/posts/2005/08/art-historians-want-side-by-side-powerpoint-lament-the-end-of-kodak-carousels/<p>My friend the Art Historian tells me that Kodak has announced that they will cease manufacture of slide carrousels, much to the chagrin of thousands of museums and colleges. He also says that there is a multimillion-dollar market for a presentation program that can show, side-by-side, two randomly-accessed images (i …</p><p>My friend the Art Historian tells me that Kodak has announced that they will cease manufacture of slide carrousels, much to the chagrin of thousands of museums and colleges. He also says that there is a multimillion-dollar market for a presentation program that can show, side-by-side, two randomly-accessed images (i.e., "Let's compare a Manet on the left with a Monet on the right"). He says it would be dead-simple to market, since the art-history world is so small. I'm long past the days of being tempted by speculative programming, no matter how trivial the application or lock-sure the profit. If you want to program such an app, let me know and I'll put you in touch with him.</p>Photo Annotation and EXIF Metadata Editing With Ink2005-08-12T09:25:00-10:002005-08-12T09:25:00-10:00larrytag:knowing.net,2005-08-12:/posts/2005/08/photo-annotation-and-exif-metadata-editing-with-ink/<p>My latest article for DevX shows <a href="https://www.developer.com/">how to add ink annotations to photos</a>, both on the image itself and within the EXIF metadata headers.</p>Interactive WMI Queries with WMI Code Creator Toy2005-08-09T08:42:00-10:002005-08-09T08:42:00-10:00larrytag:knowing.net,2005-08-09:/posts/2005/08/interactive-wmi-queries-with-wmi-code-creator-toy/<p>The WMI Code Creator freeware tool is an absolute godsend for anyone trying to plumb the depths of WMI. It allows for interactive exploration of all the namespaces on your computer and even generates C#, VB, or VBScript code to retrieve the value or attach to the events you find …</p><p>The WMI Code Creator freeware tool is an absolute godsend for anyone trying to plumb the depths of WMI. It allows for interactive exploration of all the namespaces on your computer and even generates C#, VB, or VBScript code to retrieve the value or attach to the events you find.</p>Einstein's Riddle in C#2005-08-08T14:35:00-10:002005-08-08T14:35:00-10:00larrytag:knowing.net,2005-08-08:/posts/2005/08/einsteins-riddle-in-c/<p>Inspired by Edi Weitz' solution to Einstein's Riddle in Common Lisp (via <a href="http://radar.oreilly.com/">O'Reilly Radar</a>), I used <a href="http://www.cs.cityu.edu.hk/%7ehwchun/nsolver/">Andy Chun's NSolver</a> constraint programming library to solve the program using .NET.</p>
<p>Here's a sense of what C# / NSolver looks like:</p>
<p>//The green house's owner drinks coffee<br>
>Post(greenHouse.Eq(coffee));<br>
//The person who …</p><p>Inspired by Edi Weitz' solution to Einstein's Riddle in Common Lisp (via <a href="http://radar.oreilly.com/">O'Reilly Radar</a>), I used <a href="http://www.cs.cityu.edu.hk/%7ehwchun/nsolver/">Andy Chun's NSolver</a> constraint programming library to solve the program using .NET.</p>
<p>Here's a sense of what C# / NSolver looks like:</p>
<p>//The green house's owner drinks coffee<br>
>Post(greenHouse.Eq(coffee));<br>
//The person who smokes Pall Mall rears birds<br>
Post(pallMall.Eq(birds));<br>
//The owner of the yellow house smokes Dunhill<br>
Post(yellowHouse.Eq(dunhill));</p>
<p>On my 1.5Ghz, 768MB RAM Tablet PC, NSolver can solve the problem 100 times in .79 seconds. C# source code (165 lines).</p>
<blockquote>
<p>></p>
</blockquote>Test Geotagged Entry2005-08-07T15:55:00-10:002005-08-07T15:55:00-10:00larrytag:knowing.net,2005-08-07:/posts/2005/08/test-geotagged-entry/<p>Two-step (geotags in the HTML)</p>
<p>::: {style="display:none" geo="http://www.w3.org/2003/01/geo/wsg84_pos#"}
19.423791 -155.91163
:::</p>Phighting Phish With Honeypot techniques?2005-08-05T07:59:00-10:002005-08-05T07:59:00-10:00larrytag:knowing.net,2005-08-05:/posts/2005/08/phighting-phish-with-honeypot-techniques/<p>Dan Gillmor wonders if there's an effective way to battle scam e-mails. Here's a thought: banks, eBay, CC companies, etc. provide a Web site or Web Service that provides an array of fake userids and passwords that are identified in their back end as “fraudulent.”</p>
<ul>
<li>A savvy person receiving a …</li></ul><p>Dan Gillmor wonders if there's an effective way to battle scam e-mails. Here's a thought: banks, eBay, CC companies, etc. provide a Web site or Web Service that provides an array of fake userids and passwords that are identified in their back end as “fraudulent.”</p>
<ul>
<li>A savvy person receiving a phish goes to, say, honeypot.ebay.com (the service provided by the <strong>real</strong> eBay) and says “Gimme' a traced id.”</li>
<li>eBay responds with “JohnSmith78“ “87htims“</li>
<li>Savvy person clicks through to the phish site and “logs in“ as “JohnSmith78“</li>
<li>The phisher passes through the traced id and eBay says “Hi, John, you have \$25,213,123 in your account“</li>
<li>The phisher says “Oh, wire that to Russia Federal Credit Union account #1234“</li>
<li>Standard wire fraud techniques are used thereafter</li>
</ul>
<p>Of course, the use of offshore accounts by phishers is a challenge, but that's a matter for law enforcement, not gullible Internet users. </p>SyncToy Not Network-Smart, Doesn't Sync Devices2005-08-03T06:36:00-10:002005-08-03T06:36:00-10:00larrytag:knowing.net,2005-08-03:/posts/2005/08/synctoy-not-network-smart-doesnt-sync-devices/<p>Well, that's a little disappointing. Microsoft's new SyncToy is 3/4 of a great utility, but it requires manual intervention to run, rather than syncing every <em>x</em> minutes or on reconnection to a wireless network. It also does not synchronize directories with PDAs or SmartPhones.</p>TIP for Vista Now Available2005-08-02T16:27:00-10:002005-08-02T16:27:00-10:00larrytag:knowing.net,2005-08-02:/posts/2005/08/tip-for-vista-now-available/<p>Well, that was quick. According to <a href="https://docs.microsoft.com/en-us/collaborate/connect-redirect?SiteID=4&ContentID=103">Hilton Locke</a>, the TIP is now available for installation in the Vista beta. Maybe I will install Vista on the M1400 after all...</p>SyncToy Now Available2005-08-02T15:52:00-10:002005-08-02T15:52:00-10:00larrytag:knowing.net,2005-08-02:/posts/2005/08/synctoy-now-available/<p>SyncToy Beta 1 is now available:</p>
<p>http://www.microsoft.com/downloads/details.aspx?FamilyID=e0fc1154-c975-4814-9649-cce41af06eb7&displaylang=en&Hash=4GB5TM</p>IntelliSense Doesn't Get Generics2005-08-02T07:59:00-10:002005-08-02T07:59:00-10:00larrytag:knowing.net,2005-08-02:/posts/2005/08/intellisense-doesnt-get-generics/<p>Boy, I hope by November 7 the IntelliSense parser doesn't “helpfully” replace “T” with “ThreadStaticAttribute” all the time.</p>Planarity: Addictive Game For the Non-Addictive Gaming Sort2005-08-01T12:20:00-10:002005-08-01T12:20:00-10:00larrytag:knowing.net,2005-08-01:/posts/2005/08/planarity-addictive-game-for-the-non-addictive-gaming-sort/<p>I'm not prone to game “addiction,” but I lost 2 hours to Planarity yesterday and am trying to keep myself from clicking through right now...</p>Indigo == WCF && Avalon == WPF? WTF?2005-07-28T06:58:00-10:002005-07-28T06:58:00-10:00larrytag:knowing.net,2005-07-28:/posts/2005/07/indigo-wcf-avalon-wpf-wtf/<p>One wonders what the rationale is for changing the names of programmer-level layers from fairly memorable brands to utterly forgettable TLAs.</p>Vista on a Tablet? Check Back Soon...2005-07-27T12:13:00-10:002005-07-27T12:13:00-10:00larrytag:knowing.net,2005-07-27:/posts/2005/07/vista-on-a-tablet-check-back-soon/<p>Well, there's a nice coincidence -- a brand-new (well, used, but not by me) M1400 and the Longhorn / Vista beta. In the words of the immortal James Doohan, “How do they mix? I'll let you know...”</p>
<p>Update: Microsoftian Hilton Locke warns “many of the user interface items (read: Tablet PC Input …</p><p>Well, there's a nice coincidence -- a brand-new (well, used, but not by me) M1400 and the Longhorn / Vista beta. In the words of the immortal James Doohan, “How do they mix? I'll let you know...”</p>
<p>Update: Microsoftian Hilton Locke warns “many of the user interface items (read: Tablet PC Input Panel, Journal, et al) are not in this release. We will be making an interim version of the Input Panel available for installation on Vista Beta 1, but I do not have final details on that just yet.”</p>
<p>Update: I chickened out. I need the M1400 to be fully functional for a project I'm starting on the 1st.</p>Computing With A Pen Is Natural2005-07-27T10:23:00-10:002005-07-27T10:23:00-10:00larrytag:knowing.net,2005-07-27:/posts/2005/07/computing-with-a-pen-is-natural/<p>Loren speaks of hardware driving the success of the Tablet PC, and Iggy agrees, going so far as to say that “computing with a pen is unnatural.”</p>
<p>“Computing with a pen is unnatural.” Okay, I can agree with the words, but only to the extent that it's tied to “computing …</p><p>Loren speaks of hardware driving the success of the Tablet PC, and Iggy agrees, going so far as to say that “computing with a pen is unnatural.”</p>
<p>“Computing with a pen is unnatural.” Okay, I can agree with the words, but only to the extent that it's tied to “computing with a keyboard is unnatural,” “computing with a mouse is unnatural,” “computing with a 4-function calculator is unnatural.”</p>
<p>The very idea of “natural” computing is off-base; the computers that we have today are quite unlike any natural form: they are neither static objects nor responsive animals. They have internal state, they react, they generally transfer data to us in high-level abstractions (words, images), but they lack even fundamental awareness of their environment, much less the reactive capacity of any work animal (much less human). Someday, certainly, we'll be able to interact with computers in a “natural” way -- computers will watch and listen to us and their environment and intuit our intent for them. <strong>Several breakthroughs will be required before that day.</strong></p>
<p>Iggy's sentiment, though, is not “computing today is in its infancy,” but rather “computing with a pen is less intuitive than computing with mouse and keyboard.” With this sentiment I whole-heartedly disagree. I hammered on the preliminary nature of computing today precisely because the view that a keyboard and mouse is “natural” is incredibly myopic. In the late 80s, I bought a mouse, from Microsoft, for use with my spanking new 286 running DOS. You could use it with Microsoft Word and a small set of DOS-based windowing tools. The mouse was \$99 and was no bargain. Word was inferior to WordPerfect and when programs did use windows (the Turbo IDEs, for instance), it was <em>always</em> faster to use the keyboard (and function keys. Does anyone remember function keys? You know, they're still on the keyboards...).</p>
<p>So in 1989 (say), it would have been totally parallel to say “look, you have to pay a premium for a DOS mouse, it's slow for input, there's no software... Computing with a mouse is unnatural.” And, believe me, there <em>were</em> plenty of people who expressed such sentiments, even with the Macintosh sitting there and telling the story:</p>
<p><strong>To be useful, a hardware innovation (mouse) must be coupled with software innovation (bitmapped windows)</strong></p>
<p>And then along came Desqview 386 (software innovation to exploit the hardware innovation of the 386 and the mouse) and Windows 3.0 & 3.1 and here we are 15 years later with a software ecosystem that has co-evolved with the mouse and keyboard. It is true that it is hard to use a non-mouse pointing device with existing software, even with drawing software where the pen is fundamentally easier to control than a mouse.</p>
<p><strong>It's not that the pen is unnatural, it's that the software has evolved with a bias towards mouse and keyboard</strong></p>
<p>It's true that new form factors, longer battery life, better screens, perhaps more ruggedness -- all of those affect the “the change of scale or pace or pattern" that [the Tablet] "introduces into human affairs" and thus are important to the medium. But there <strong>must be software specifically created for the Tablet PC's hardware innovations</strong>. Just as applications evolved to exploit the mouse and keybard, so too can they evolve to exploit the pen. And <strong>such software will feel natural</strong>.</p>
<p>Case in point: Arcs of Fire. While a game with a single-screen and a static background is hardly going to take sales from Half Life 2, there has never been a game that “feels” more like the act of throwing, which is a behavior that's hard-wired into our genes to be pleasurable. Arcs of Fire “feels natural” for that type of game, much more “natural” than the old DOS-based games where you typed in muzzle velocity and angle, or mouse-based games requiring a diagonal motion that's hard to do accurately with a mouse.</p>
<p><strong>The success of the Tablet, at this point, is much, much more reliant on software than hardware.</strong></p>Yahoo Poker Coming To Cellphones2005-07-27T08:41:00-10:002005-07-27T08:41:00-10:00larrytag:knowing.net,2005-07-27:/posts/2005/07/yahoo-poker-coming-to-cellphones/<p>I can't find any sign of this on Yahoo's Website, but a press release from the <a href="https://www.gdconf.com/">Computer Games Development Conference Europe</a> speaks of “Yahoo! Poker, a multiplayer cross platform title, which lets mobile phone gamers play against those on their PCs.” Man, there's gotta' be some way to cash in …</p><p>I can't find any sign of this on Yahoo's Website, but a press release from the <a href="https://www.gdconf.com/">Computer Games Development Conference Europe</a> speaks of “Yahoo! Poker, a multiplayer cross platform title, which lets mobile phone gamers play against those on their PCs.” Man, there's gotta' be some way to cash in on the poker craze...</p>
<p>You know, you don't make money chasing gold, you make money <em>selling</em> to people chasing gold (Levi's, Wells Fargo). Maybe a Texas Hold 'Em trainer: instead of actually playing out the hands, test the ability to evaluate the odds based on position and pot odds. That's easy to calculate (for a computer) until you get to the challenge of evaluating another player's betting sequence, which is intractable to a simple algorithm.</p>
<p>></p>Amazon's Got My Number2005-07-24T18:50:00-10:002005-07-24T18:50:00-10:00larrytag:knowing.net,2005-07-24:/posts/2005/07/amazons-got-my-number/<p>We recommend How to Become a Professional Con Artist <a href="https://www.amazon.com/o/ASIN/1581602693/ref%3dpe_arr_d_1581602693_6_txt">http://www.amazon.com/o/ASIN/1581602693/ref=pe_arr_d_1581602693_6_txt</a></p>
<p>You are 19,547 times more likely to purchase this item than other customers.</p>
<p><strong>Dang.</strong></p>
<p>></p>Congratulations, you've installed DasBlog!2005-07-19T21:00:00-10:002005-07-19T21:00:00-10:00larrytag:knowing.net,2005-07-19:/posts/2005/07/congratulations-youve-installed-dasblog/<p>Be sure to visit all the options under "Configuration" in the Admin Menu Bar above. There are 16 themes to choose from, and you can also create your own.</p>BizWeek Reports 7.5% Growth In Programmer Jobs2005-07-18T07:32:00-10:002005-07-18T07:32:00-10:00larrytag:knowing.net,2005-07-18:/posts/2005/07/bizweek-reports-75-growth-in-programmer-jobs/<p>Business Week says that <a href="https://www.bloomberg.com/tosv2.html?vid=&uuid=abfad3b0-5062-11e9-bbd9-d9467a7321f2&url=L2J1c2luZXNzd2Vlay9tYWdhemluZS9jb250ZW50LzA1XzMwL2IzOTQ0MDQ4X216MDExLmh0bT9jaGFuPXRj">the outsourcing craze has peaked</a> and demand is increasing for American programmers. It then goes on to warn that “routine programming” is continuing to flow offshore and that programmers wishing to be employed in America have design skills.</p>
<p>The funniest line in the piece is on …</p><p>Business Week says that <a href="https://www.bloomberg.com/tosv2.html?vid=&uuid=abfad3b0-5062-11e9-bbd9-d9467a7321f2&url=L2J1c2luZXNzd2Vlay9tYWdhemluZS9jb250ZW50LzA1XzMwL2IzOTQ0MDQ4X216MDExLmh0bT9jaGFuPXRj">the outsourcing craze has peaked</a> and demand is increasing for American programmers. It then goes on to warn that “routine programming” is continuing to flow offshore and that programmers wishing to be employed in America have design skills.</p>
<p>The funniest line in the piece is on a recent CMU grad who “landed a plum assignment with tech consultancy Accenture Ltd.” Oh, the naivete of youth!</p>Notes on OneNote / SmartPhone / PocketPC Recording Integration and Voice Recognition2005-07-17T14:23:00-10:002005-07-17T14:23:00-10:00larrytag:knowing.net,2005-07-17:/posts/2005/07/notes-on-onenote-smartphone-pocketpc-recording-integration-and-voice-recognition/<p>So I wrote a rough pass for my OneNote PowerToy: it synchronizes voice recordings on a SmartPhone / PocketPC onto a desktop and imports them as links into a OneNote page. After spending some time with a hex editor, I backed off the idea of trying to do a binary edit …</p><p>So I wrote a rough pass for my OneNote PowerToy: it synchronizes voice recordings on a SmartPhone / PocketPC onto a desktop and imports them as links into a OneNote page. After spending some time with a hex editor, I backed off the idea of trying to do a binary edit of the OneNote file to embed the links as native OneNote audio embeds (even though, in fact, OneNote embeds a link to a file, so it ought to be possible to do the binary edit, but not for a Sunday morning project).</p>
<p>Unfortunately, using a file link results in an annoying “Are you sure you want to open this potentially unsafe file?” dialog every time you click on it. I'm pretty sure that this annoyance will drop my PowerToy back at least to the middle of the pack. So I thought, “Well, what can I do that would be slick?” and my thought was “Automatic voice recognition of the voice notes, at least to get a running shot at search / browsability.”</p>
<p>It turns out that voice recognition of a file could hardly be easier: it's literally a 10-line initialization block and then an event-handler for the results. When tried on a .wav file generated from my noise-cancelling Plantronics headset the results are definitely adequate, but the results on the low-fidelity recordings from a phone are so poor that I'm not even going to include the capability in the PowerToy.</p>
<p>Oh, hey, today's our 1-year anniversary of moving to Hawaii. Rockin'. Had a great time at Honaunau yesterday freediving. My freediving has taken a big step in the past couple months -- I'm now really comfortable for about 1:30 on the bottom, which is great, because the reef fish change from being scared to being curious at about 1:00. My goal is 2:00 on the bottom, with :30 of swimming up and down time. I'm also getting more and more confident about taking a shot at the 100' club...</p>Ten _Million_ Dollars To Promote the Tablet PC?2005-07-15T10:30:00-10:002005-07-15T10:30:00-10:00larrytag:knowing.net,2005-07-15:/posts/2005/07/ten-_million_-dollars-to-promote-the-tablet-pc/<p>Loren asks how one would spend various amounts to promote the Tablet PC.</p>
<ul>
<li>\$10 million. I would “bake in“ ink and voice input support to a word processor and spreadsheet. If I didn't happen to have a world-dominating suite of office products, I'd do it in Open Office for heaven's …</li></ul><p>Loren asks how one would spend various amounts to promote the Tablet PC.</p>
<ul>
<li>\$10 million. I would “bake in“ ink and voice input support to a word processor and spreadsheet. If I didn't happen to have a world-dominating suite of office products, I'd do it in Open Office for heaven's sake. And I'm not talking about ink comments or voice notes: I'm talking about multimodal control. I tap my pen and say “Equals Sin B6“ and the spreadsheet cell becomes “=Sin(B6)“ or I say “Equals Sin...“ and then tap my pen in B6 for the same effect. Or I'm dictating a memo and see a word screwed up five spots back, but with my pen I can highlight the wrong word, choose the alternate, and return to the original insertion point very rapidly. <strong>The Tablet PC will never go horizontal until people can create the 3 most important document types: email, spreadsheets, and .docs with a speed comparable to composing them with a keyboard.</strong> (Note I used the word “composing“ and not “entering“) Corollary: <strong>The device that allows such creation in a mobile context will be a breakthrough comparable to the original PC</strong></li>
<li>\$1 million. I would sponsor an X Prize for the above.</li>
<li>\$1. I'd put it towards my blog hosting expenses.</li>
</ul>
<p>UPDATE: Oh, and pictures and diagrams.</p>OneNote File Format Reverse Engineered for PowerToy Competition?2005-07-14T10:08:00-10:002005-07-14T10:08:00-10:00larrytag:knowing.net,2005-07-14:/posts/2005/07/onenote-file-format-reverse-engineered-for-powertoy-competition/<p>I'd like to enter the OneNote PowerToy competition and, since getting a <em>fourth</em>[]{.underline} Tablet PC is not particularly motivating I'll even tell you what I've got -- your voice notes on your Smartphone / PocketPC get automatically changed into OneNote items. I've got it working using file links but I'd like …</p><p>I'd like to enter the OneNote PowerToy competition and, since getting a <em>fourth</em>[]{.underline} Tablet PC is not particularly motivating I'll even tell you what I've got -- your voice notes on your Smartphone / PocketPC get automatically changed into OneNote items. I've got it working using file links but I'd like to add note flags and embed the link a la native OneNote recording, though, and you can't do that with the XML import API. Has anyone reverse-engineered the .one file format at the hex level? You know, like we did when we were kids?</p>
<p>Anyone interested in a little Open Source cooperation?</p>Dontclick.it: Fascinating for Tablet developers2005-07-10T12:24:00-10:002005-07-10T12:24:00-10:00larrytag:knowing.net,2005-07-10:/posts/2005/07/dontclickit-fascinating-for-tablet-developers/<p><a href="http://www.dontclick.it/">http://www.dontclick.it/</a> shows how effective a clickless interface can be.</p>Literate Programming in .NET2005-07-10T10:51:00-10:002005-07-10T10:51:00-10:00larrytag:knowing.net,2005-07-10:/posts/2005/07/literate-programming-in-net/<p>DevX has posted an article that I am really pretty proud of: a literate programming tool for .NET using Microsoft's Visual Studio Tools for Office 2005. By using Word styles and embedding XML tags, you can label your code fragments in a Word document as compilable (including specifying assembly targets …</p><p>DevX has posted an article that I am really pretty proud of: a literate programming tool for .NET using Microsoft's Visual Studio Tools for Office 2005. By using Word styles and embedding XML tags, you can label your code fragments in a Word document as compilable (including specifying assembly targets, compiler options, etc.). Additionally, the code fragments can have references to other code fragments within them, so that your code fragment can say “\<\<using block>>” and you can fill in those details someplace else in the document (in a separate discussion, an appendix, or even in a hidden “boilerplate“ section).</p>
<p>A SmartTag assembles all of the code fragments for a given “compilation unit,“ (think normal source code file) and all the “compilation unit“s for a given “assembly target.“ They source can be placed on the clipboard as an XML tree of fragments, as an assembled compilation unit (ready for pasting into Visual Studio), or can even be compiled directly from within Word. I support C# and VB.NET “out of the box“ but it's a simple matter to support additional languages for compilation.</p>
<p>Normally, I'm content to write a tool for an article and leave it for as inspiration for further exploration by others, but I think this tool has such potential that I'm going to continue developing it, possibly on SourceForge or, more likely, hosted locally. In particular, I'd like to add <a href="http://fit.c2.com/">FIT</a> capabilities so that authors would have the ability to confirm that their code behaves as they expect; macros so that adding code blocks was as easy as “Ctl-C“ (or whatever); and the ability to specify “alternate fragments“ so that you can say “If we replace Listing 12 with Listing 13, you can see the behavior do such-and-so...“</p>
<p>I'm going to reveal a new site on the subject shortly...</p>Loren starts showing ink code comments2005-07-10T10:30:00-10:002005-07-10T10:30:00-10:00larrytag:knowing.net,2005-07-10:/posts/2005/07/loren-starts-showing-ink-code-comments/<p>Loren Heiny is has begun posting screenshots from his work developing IDE plug-ins allowing inked comments to be made on source code. Personally, I think this is a tremendous use of the Tablet. DevX has just put up my article on literate programming in .NET using Word (in other words …</p><p>Loren Heiny is has begun posting screenshots from his work developing IDE plug-ins allowing inked comments to be made on source code. Personally, I think this is a tremendous use of the Tablet. DevX has just put up my article on literate programming in .NET using Word (in other words, a Word document whose code listings are supported by a “compile this!” smart tag). I was able to use Word's ink annotation capabilities in that project, as well (especially when ink comments are set to “float in front” of the text), but Loren's is definitely the more focused effort.</p>Arrggghghhh!!! Motion ships small-factor Tablet PC while my check for a full-size is in the mail!2005-07-07T10:36:00-10:002005-07-07T10:36:00-10:00larrytag:knowing.net,2005-07-07:/posts/2005/07/arrggghghhh-motion-ships-small-factor-tablet-pc-while-my-check-for-a-full-size-is-in-the-mail/<p>Oh, I am freakin' <em>killing myself</em>. I bought an M1400 last <em>freakin'</em> week in order to get a ViewAnywhere screen and Motion ships an 8” diagonal-screen Tablet. I am so severely bummed words can't express...</p>
<p>Not to put too fine a point on it, but I live in Hawaii, see …</p><p>Oh, I am freakin' <em>killing myself</em>. I bought an M1400 last <em>freakin'</em> week in order to get a ViewAnywhere screen and Motion ships an 8” diagonal-screen Tablet. I am so severely bummed words can't express...</p>
<p>Not to put too fine a point on it, but I live in Hawaii, see. And the view from my lanai (what you mainlanders would call a “porch”) is a panoramic view of the Kona coast. My office, on the other hand, has a window that looks at my garage and a stone wall and another that looks at a tree five feet away. I <em>so</em> want to be able to work outside, with a full-fledged computer that I can write on while sipping an ice tea and watching the surf break...</p>tcserver.exe memory leak fixed!2005-07-05T15:28:00-10:002005-07-05T15:28:00-10:00larrytag:knowing.net,2005-07-05:/posts/2005/07/tcserverexe-memory-leak-fixed/<p>The most anticipated patch in Tablet PC OS history is now available!</p>Movie Meme: Enjoyment of Top-Grossing Movies2005-07-05T09:35:00-10:002005-07-05T09:35:00-10:00larrytag:knowing.net,2005-07-05:/posts/2005/07/movie-meme-enjoyment-of-top-grossing-movies/<div>
Via http://www.agileprogrammer.com/dotnetguy/archive/2005/07/05/5488.aspx
*Italicize* the ones you've seen and **Bold** the ones you actually liked.
</div>
<p><em>1. Titanic (1997) - \<span class="math">\(600,779,824
***2. Star Wars (1977) - \\)</span>460,935,665<br>
3. E.T. the Extra-Terrestrial (1982) - \<span class="math">\(434,949,459
***4. Star Wars: Episode …</span></em></p><div>
Via http://www.agileprogrammer.com/dotnetguy/archive/2005/07/05/5488.aspx
*Italicize* the ones you've seen and **Bold** the ones you actually liked.
</div>
<p><em>1. Titanic (1997) - \<span class="math">\(600,779,824
***2. Star Wars (1977) - \\)</span>460,935,665<br>
3. E.T. the Extra-Terrestrial (1982) - \<span class="math">\(434,949,459
***4. Star Wars: Episode I - The Phantom Menace (1999) - \\)</span>431,065,444<br>
</em><strong>5. Spider-Man (2002) - \<span class="math">\(403,706,375
6. Lord of the Rings: The Return of the King, The (2003) - \\)</span>377,019,252<br>
</strong>7. Passion of the Christ, The (2004) - \<span class="math">\(370,025,697
**8. Jurassic Park (1993) - \\)</span>356,784,000<br>
<strong>9. Shrek 2 (2004) - \<span class="math">\(356,211,000
**10. Lord of the Rings: The Two Towers, The (2002) - \\)</span>340,478,898<br>
11. Finding Nemo (2003) - \<span class="math">\(339,714,367
12. Forrest Gump (1994) - \\)</span>329,691,196<br>
13. Lion King, The (1994) - \<span class="math">\(328,423,001
14. Harry Potter and the Sorcerer's Stone (2001) - \\)</span>317,557,891<br>
15. Lord of the Rings: The Fellowship of the Ring, The (2001) - \<span class="math">\(313,837,577
***16. Star Wars: Episode II - Attack of the Clones (2002) - \\)</span>310,675,583<br>
</strong><em>17. Star Wars: Episode VI - Return of the Jedi (1983) - \<span class="math">\(309,125,409
18. Independence Day (1996) - \\)</span>306,124,059<br>
19. Pirates of the Caribbean (2003) - \<span class="math">\(305,411,224
20. Sixth Sense, The (1999) - \\)</span>293,501,675<br>
21. Star Wars: Episode V - The Empire Strikes Back (1980) - \<span class="math">\(290,158,751
**22. Home Alone (1990) - \\)</span>285,761,243<br>
</em>23. Matrix Reloaded, The (2003) - \<span class="math">\(281,492,479
24. Shrek (2001) - \\)</span>267,652,016<br>
<strong><em>25. Harry Potter and the Chamber of Secrets (2002) - \<span class="math">\(261,970,615
**26. How the Grinch Stole Christmas (2000) - \\)</span>260,031,035<br>
</em>*27. Jaws (1975) - \<span class="math">\(260,000,000
***28. Monsters, Inc. (2001) - \\)</span>255,870,172<br>
</strong><em>29. Batman (1989) - \<span class="math">\(251,188,924
30. Men in Black (1997) - \\)</span>250,147,615<br>
31. Toy Story 2 (1999) - \<span class="math">\(245,823,397
32. Bruce Almighty (2003) - \\)</span>242,589,580<br>
33. Raiders of the Lost Ark (1981) - \<span class="math">\(242,374,454
***34. Twister (1996) - \\)</span>241,700,000<br>
35. My Big Fat Greek Wedding (2002) - \<span class="math">\(241,437,427
36. Ghost Busters (1984) - \\)</span>238,600,000<br>
</em><strong>37. Beverly Hills Cop (1984) - \<span class="math">\(234,760,500
***38. Cast Away (2000) - \\)</span>233,630,478<br>
</strong><em>39. Lost World: Jurassic Park, The (1997) - \<span class="math">\(229,074,524
**40. Signs (2002) - \\)</span>227,965,690<br>
</em>41. Rush Hour 2 (2001) - \<span class="math">\(226,138,454
42. Mrs. Doubtfire (1993) - \\)</span>219,200,000<br>
<strong><em>43. Ghost (1990) - \<span class="math">\(217,631,306
**44. Aladdin (1992) - \\)</span>217,350,219<br>
</em>*45. Saving Private Ryan (1998) - \<span class="math">\(216,119,491
***46. Mission: Impossible II (2000) - \\)</span>215,397,30<br>
</strong><em>47. X2 (2003) - \<span class="math">\(214,948,780
48. Austin Powers in Goldmember (2002) - \\)</span>213,079,163<br>
49. Back to the Future (1985) - \<span class="math">\(210,609,762
50. Austin Powers: The Spy Who Shagged Me (1999) - \\)</span>205,399,422<br>
51. Terminator 2: Judgment Day (1991) - \<span class="math">\(204,843,350
52. Exorcist, The (1973) - \\)</span>204,565,000<br>
</em><strong>53. Mummy Returns, The (2001) - \<span class="math">\(202,007,640
54. Armageddon (1998) - \\)</span>201,573,391<br>
</strong><em>55. Gone with the Wind (1939) - \<span class="math">\(198,655,278
***56. Pearl Harbor (2001) - \\)</span>198,539,855<br>
</em><strong>57. Indiana Jones and the Last Crusade (1989) - \<span class="math">\(197,171,806
58. Toy Story (1995) - \\)</span>191,800,000<br>
</strong>59. Men in Black II (2002) - \<span class="math">\(190,418,803
**60. Gladiator (2000) - \\)</span>187,670,866<br>
61. Snow White and the Seven Dwarfs (1937) - \<span class="math">\(184,925,485
62. Dances with Wolves (1990) - \\)</span>184,208,848<br>
<strong><em>63. Batman Forever (1995) - \<span class="math">\(184,031,112
***64. Fugitive, The (1993) - \\)</span>183,875,760<br>
65. Ocean's Eleven (2001) - \<span class="math">\(183,405,771
***66. What Women Want (2000) - \\)</span>182,805,123<br>
67. Perfect Storm, The (2000) - \<span class="math">\(182,618,434
68. Liar Liar (1997) - \\)</span>181,395,380<br>
</em></strong>69. Grease (1978) - \<span class="math">\(181,360,000
***70. Jurassic Park III (2001) - \\)</span>181,166,115<br>
<strong><em>71. Mission: Impossible (1996) - \<span class="math">\(180,965,237
***72. Planet of the Apes (2001) - \\)</span>180,011,740<br>
73. Indiana Jones and the Temple of Doom (1984) - \<span class="math">\(179,870,271
74. Pretty Woman (1990) - \\)</span>178,406,268<br>
</em></strong>75. Tootsie (1982) - \<span class="math">\(177,200,000
76. Top Gun (1986) - \\)</span>176,781,728<br>
77. There's Something About Mary (1998) - \<span class="math">\(176,483,808
**78. Ice Age (2002) - \\)</span>176,387,405<br>
<em>79. Crocodile Dundee (1986) - \<span class="math">\(174,635,000
*80. Home Alone 2: Lost in New York (1992) - \\)</span>173,585,516<br>
</em><em>81. Elf (2003) - \<span class="math">\(173,381,405
82. Air Force One (1997) - \\)</span>172,888,056<br>
</em><strong>83. Rain Man (1988) - \<span class="math">\(172,825,435
***84. Apollo 13 (1995) - \\)</span>172,071,312<br>
85. Matrix, The (1999) - \<span class="math">\(171,383,253
86. Beauty and the Beast (1991) - \\)</span>171,301,428<br>
</strong><em>87. Tarzan (1999) - \<span class="math">\(171,085,177
88. Beautiful Mind, A (2001) - \\)</span>170,708,996<br>
89. Chicago (2002) - \<span class="math">\(170,684,505
*90. Three Men and a Baby (1987) - \\)</span>167,780,960<br>
</em><em>91. Meet the Parents (2000) - \<span class="math">\(166,225,040
***92. Robin Hood: Prince of Thieves (1991) - \\)</span>165,500,000<br>
93. Hannibal (2001) - \<span class="math">\(165,091,464
***94. Catch Me If You Can (2002) - \\)</span>164,435,221<br>
</em><em>95. Big Daddy (1999) - \<span class="math">\(163,479,795
*96. Sound of Music, The (1965) - \\)</span>163,214,286<br>
97. Batman Returns (1992) - \<span class="math">\(162,831,698
***98. Bug's Life, A (1998) - \\)</span>162,792,677<br>
99. Harry Potter and the Prisoner of Azkaban (2004) - \<span class="math">\(161,963,000
100. Waterboy, The (1998) - \\)</span>161,487,252</em>*</p>
<p>\<</p>
<p>p class=ngrelatedlinks align=right> Related...</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Domain-Specific Language for To-Do Items2005-07-04T09:04:00-10:002005-07-04T09:04:00-10:00larrytag:knowing.net,2005-07-04:/posts/2005/07/domain-specific-language-for-to-do-items/<p>So at first you think:</p>
<p><strong>To_Do_Item ::= Done Item<br>
Done ::= boolean<br>
Item ::= String</strong></p>
<p>But then you think:</p>
<p><strong>To_Do_Item ::= Done Item Due<br>
Due ::= DateTime</strong></p>
<p>And then you think:</p>
<p><strong>Due ::= DateTime | RecurrencePattern | DatePattern<br>
DatePattern -- “next Tuesday” “3rd Fridays of the Month” etc...</strong></p>
<p>And you're also thinking:</p>
<p><strong>To_Do_Item …</strong></p><p>So at first you think:</p>
<p><strong>To_Do_Item ::= Done Item<br>
Done ::= boolean<br>
Item ::= String</strong></p>
<p>But then you think:</p>
<p><strong>To_Do_Item ::= Done Item Due<br>
Due ::= DateTime</strong></p>
<p>And then you think:</p>
<p><strong>Due ::= DateTime | RecurrencePattern | DatePattern<br>
DatePattern -- “next Tuesday” “3rd Fridays of the Month” etc...</strong></p>
<p>And you're also thinking:</p>
<p><strong>To_Do_Item ::= ~~Done~~ Status Item<br>
Status ::= Done | Pending | Deferred| Waiting | Overdue | Next Action | Urgent</strong></p>
<p>And what about “Every 3 months or 3,000 miles”? And how to distinguish between "If it's overdue, it's over," ("attend the concert,") "Due any time in a range," ("get a haircut,"), and "If it's overdue, it becomes more urgent."?</p>
<p>And wouldn't a To-Do List DSL be able to describe things like “Your goal is to exercise 40 minutes per day, but 40 minutes every other day is marginally acceptable. But if you don't exercise at all for five days in a row, you've got to get out of the house.”?</p>
<p>There are no easy domains...</p>Panda Ate My Notepad2005-06-30T11:16:00-10:002005-06-30T11:16:00-10:00larrytag:knowing.net,2005-06-30:/posts/2005/06/panda-ate-my-notepad/<p>My antivirus software just deleted notepad.exe, saying it was adware. I went to Panda's Website to complain / alert them and their support site is filled with broken ASP.NET code. Boy, that really ups my faith in my antivirus solution...</p>GooglePal -- Micropayment Breakthrough?2005-06-20T11:50:00-10:002005-06-20T11:50:00-10:00larrytag:knowing.net,2005-06-20:/posts/2005/06/googlepal-micropayment-breakthrough/<p>Now that news of Google Payment Corp is public, it's time for rampant speculation, such as: Will people trust Google to be the infrastructure key to micropayments? They're in an excellent position to provide the technology.</p>Pixies at Dunkin' Donuts Folkfest2005-06-17T10:01:00-10:002005-06-17T10:01:00-10:00larrytag:knowing.net,2005-06-17:/posts/2005/06/pixies-at-dunkin-donuts-folkfest/<p>Doesn't that headline read like computer-generated nonsense? And yet, it's true. <em>via</em> [<a href="https://about.me/bjepson">Jepstone.net</a>]</p>
<p>Dang! Two weeks before I'm doing a NY-Boston trip, too.</p>Dangerous hacker2005-06-16T15:09:00-10:002005-06-16T15:09:00-10:00larrytag:knowing.net,2005-06-16:/posts/2005/06/dangerous-hacker/<p>Funniest IRC transcript <strong>EVER</strong>. <em>via</em> Eric Gunnerson</p>Coolest Thing I've Seen In A Bit2005-06-15T17:58:00-10:002005-06-15T17:58:00-10:00larrytag:knowing.net,2005-06-15:/posts/2005/06/coolest-thing-ive-seen-in-a-bit/<p>I can't talk about it yet, but can you guess what this SmartTag does?</p>Monad pulled from Longhorn? Ok, Now I'm Mad2005-06-09T07:37:00-10:002005-06-09T07:37:00-10:00larrytag:knowing.net,2005-06-09:/posts/2005/06/monad-pulled-from-longhorn-ok-now-im-mad/<p>According to Mary Jane Foley, the Monad shell is being unlinked from Longhorn. Maybe it will debut in Exchange 12, maybe not. <strong>Now</strong> I'm really ticked off. Monad is a command-line shell that, like UNIX shells, is based on a “pipes-and-filters” architecture in which functionality is assembled by recombining a …</p><p>According to Mary Jane Foley, the Monad shell is being unlinked from Longhorn. Maybe it will debut in Exchange 12, maybe not. <strong>Now</strong> I'm really ticked off. Monad is a command-line shell that, like UNIX shells, is based on a “pipes-and-filters” architecture in which functionality is assembled by recombining a large number of relatively small transforms. It has the excellent innovation that instead of piping text from component to component it pipes full-fledged objects. It was probably my single favorite Longhorn feature. But more than 3 years to write a shell? WTF?</p>Visual Studio Tools For Outlook Beta Download2005-06-06T10:50:00-10:002005-06-06T10:50:00-10:00larrytag:knowing.net,2005-06-06:/posts/2005/06/visual-studio-tools-for-outlook-beta-download/<p>VSTO for Outlook Beta just became available on MS Downloads. I can't wait to take a look.</p>Python for Series 60 Phones2005-06-03T16:15:00-10:002005-06-03T16:15:00-10:00larrytag:knowing.net,2005-06-03:/posts/2005/06/python-for-series-60-phones/<p>Oh man, I wish Windows Smartphones had this.</p>David Treadwell On Longhorn, Managed Code, WinFX, IronPython, and VS2005 Whidbey Release Schedules2005-05-26T13:55:00-10:002005-05-26T13:55:00-10:00larrytag:knowing.net,2005-05-26:/posts/2005/05/david-treadwell-on-longhorn-managed-code-winfx-ironpython-and-vs2005-whidbey-release-schedules/<p>Just got off the phone with David Treadwell, Corporate Vice President of the .NET Developer Platform. Naturally, we started and ended the talk with the blogosphere's current buzz about <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">".NET 2.0 Breaks Apps</a>" and "Longhorn Isn't Being Built On Managed Code." Along the way, we touched upon languages, optimization …</p><p>Just got off the phone with David Treadwell, Corporate Vice President of the .NET Developer Platform. Naturally, we started and ended the talk with the blogosphere's current buzz about <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">".NET 2.0 Breaks Apps</a>" and "Longhorn Isn't Being Built On Managed Code." Along the way, we touched upon languages, optimization, and the future of managed code.</p>
<p><em>Warning: This is “I didn't have time to make it shorter“ stream of consciousness.</em></p>
<p>Is it scandalous that Microsoft's next generation OS isn't being built upon a foundation of managed code? Coming out of PDC '03, it seemed like a set of boxes neatly fitting into each other: Longhorn will be built on top of WinFX, which will be built on top of Managed Code / the .NET CLR. But <strong>that never [really]{style="FONT-STYLE: italic"} could have been the whole story</strong>. Take Avalon, the new display stack: it simply couldn't be the case that you could achieve those levels of graphics achievement (video streams mapped onto objects rotating in 3D space and so forth) within the realm of managed code. The CLR just doesn't abstract the hardware to that extent.</p>
<p>Of course, as Moore's Law marches on, it's natural to think that we [can]{style="FONT-STYLE: italic"} achieve more functionality without necessarily modeling the complexity of the underlying hardware. For instance, maybe we don't have to worry about individual pixels anymore when drawing text, maybe we have enough processing power now that we can draw a good-looking 't' that's really 14 points high without worrying about pixel density. So maybe you could move the operating system's text subsystem into managed code. Maybe, maybe not. Flicker-free text (for instance) is not trivial, but if Microsoft stood up and said "In 5 years, the hardware will have gotten to the point where we can move all logic associated with text rendering into managed code. Of course, the final blt to screen will be handled by an unmanaged device driver, but that's at a level where no non-games application developer will every worry about the unmanaged component." I'd say "Okay." And I think some <strong>people came out of PDC '03 feeling that Microsoft [did say that]{style="FONT-STYLE: italic"} about [everything]{style="FONT-STYLE: italic"}</strong>.</p>
<p><strong>But it never made sense.</strong> You cannot do Avalon-y sorts of graphics in a world where memory is an abstract concept; you can't turn a videostream into a relocatable array of Color structs and map them into a dynamically sized array of Triangle structs while playing a sound constructed from a loop that's calling Math.Sin(). The CLR doesn't model on-board graphics memory and GPU capabilities and bus speeds and interrupts or lots of other things that make a difference when dealing with multimedia.</p>
<p>It's always been a case of "<strong>How thick and how good are the managed abstractions</strong>?" For instance, Windows Forms does a great job of abstracting away Windows' message loops and HWNDs and probably 99% of Windows Forms developers don't have to deal with those unmanaged resources, even though they still exist. Some may not even know they exist and a sizeable percentage certainly don't know the details. As luck would have it, I've been spending a lot of time dealing with Managed DirectX lately, a set of APIs where the abstractions are not nearly as thorough: you need to know about (for instance) message loops and you need to explicitly manage certain resources just as you once had to explicitly manage memory. Managed DirectX is hard. Not as hard as unmanaged DirectX, but hard enough to still be a barrier to some kid with a great idea for a game. To the extent that WinFX / Longhorn exposes APIs that have abstractions as powerful as WinForms, the cause of productivity advances. But if they just slap a managed wrapper around something and say "Ta da!" it's not worth praising. <strong>"Managed" is no guarantee of productivity or comprehensibility nor does it inherently provoke innovation.</strong></p>
<p>So what Treadwell clarified is that there are certain parts of Longhorn that will not even have thin managed wrappers. On the other hand, WinFX is "all about managed code," so to the extent you work with Avalon or Indigo, you ought not to have to worry about P/Invoke or breaking out unmanaged C++. He said that WinFX is "our deepest platform bet on managed code," and compared it to the bet they took with ASP.NET, where they achieved something pretty inarguably great. Of course, <strong>is API design in WinFX great or shabby? Are the unmanaged APIs for those portions of Longhorn that don't have wrappers great or shabby? These are the issues, not whether those APIs are in or out of the CLR.</strong></p>
<p>I used Managed DirectX as an example of a challenging managed API and he said look, WinFX is trying to hide things like unmanaged resource lifecycles but it won't be 100% for 100% of developers in the first incarnation. Over time, <strong>more and more developers will be able to use more and more managed APIs to achieve more and more functionality</strong>. But that's the only promise.</p>
<p>So if the concept coming out of PDC '03 was the nice boxes fitting each other, now you have Longhorn as off to the side, but <strong>WinFX is still a box that holds nothing but managed code</strong>. As Treadwell explained, WinFX's [schedule ]{style="FONT-STYLE: italic"}is coupled to Longhorn's [schedule]{style="FONT-STYLE: italic"}, but technologically, they're not as coupled as they were (I can't believe that Longhorn could be [totally]{style="FONT-STYLE: italic"} uncoupled technologically from WinFX).</p>
<p>I asked about the concern that Avalon and WinForms could create two developer "tracks," each developing in a different paradigm. I wondered if one would be more appealing to corporate developers and the other more appealing to shrinkwrap. He didn't go for it; instead, he insisted that the two are designed to work well together. He said that <strong>the first release of Avalon [will not be ]{style="FONT-STYLE: italic"}as good as WinForms for certain things</strong> (and, of course, vice versa). There's going to be a "longer transition" to Avalon. He said that it's going to be a "case-by-case, capability-by-capability" thing rather than two clearly defined tracks.</p>
<p>"Realistically, <strong>the use of Avalon will be minimal in Office 12</strong>," He said, although he mentioned that, for instance, SharePoint has managed components. He [claimed]{style="FONT-STYLE: italic"} not to know if Office 12 will have killer Tablet PC support. (Dammit. All I want to hear from someone is "Yes, Larry, you can write your novel in ink." Speak to me, secret sources: lobrien\@knowing.net)</p>
<p>Since we were talking about abstraction levels and so forth, I asked if the CLR had gotten to the point where it would begin to be the place where we see major innovations or if those were still strictly in the realm of native code. He said that for the foreseeable future it would "be at both levels." He mentioned <strong>superfetch</strong> (aggressive pre-fetching of files into RAM according to system prediction, presumably using the same general family of algorithms used by CPUs) as something that's <strong>fundamentally native</strong> and contrasting that with JIT technologies. (I asked about <a href="https://www.microsoft.com/en-us/research/academic-programs/?from=http%3A%2F%2Fresearch.microsoft.com%2Fphoenix%2F"><strong>Phoenix</strong></a> and he perked up -- it's <strong>clear that's coming along well</strong> -- although Phoenix is apparently not inherently bound to either a native or CLR environment.)</p>
<p>Finally, I asked about IronPython. He said that Microsoft's strategy for dynamic languages is "a little up in the air," and they "<strong>don't know what our [IronPython] strategy will be</strong>." I said that although I loved IronPython, I would have preferred Ruby. He laughed and said he didn't want to get into religious issues.</p>
<p>\<</p>
<p>p style="FONT-SIZE: 10pt; MARGIN: 0in; FONT-FAMILY: Verdana; mso-outline-level: 1"> Oh yeah: <strong>he promised that Visual Studio 2005 will ship "later this year" and not in 2006</strong>.</p>$46B To Deploy $50B Of Technology2005-05-13T08:53:00-10:002005-05-13T08:53:00-10:00larrytag:knowing.net,2005-05-13:/posts/2005/05/46b-to-deploy-50b-of-technology/<p>Tim Bray <a href="http://www.tbray.org/ongoing/When/200x/2005/05/11/IBM-GS">says that</a> of \<span class="math">\(96B in gross revenue, IBM's consulting services earned \\)</span>46B.</p>
<p>This is one of those datapoints that could fit into a couple of preconceived notions: supporting the OS business model (“The money's in consulting / support, not software sales!“), damning the OS business model (“If they used …</p><p>Tim Bray <a href="http://www.tbray.org/ongoing/When/200x/2005/05/11/IBM-GS">says that</a> of \<span class="math">\(96B in gross revenue, IBM's consulting services earned \\)</span>46B.</p>
<p>This is one of those datapoints that could fit into a couple of preconceived notions: supporting the OS business model (“The money's in consulting / support, not software sales!“), damning the OS business model (“If they used Windows, their TCO would be lower!“), supporting the OS technology model (“If only they used JBoss, it would be better!“), damning the OS technology model (“Linux is hard to deploy!“), etc.</p>
<p>I agree with Bray: What it mostly proves is that our industry is woefully inadequate in providing what is asked of it.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Breaking News - San Jose police link severed finger in Wendy's chili case to suspect2005-05-13T08:32:00-10:002005-05-13T08:32:00-10:00larrytag:knowing.net,2005-05-13:/posts/2005/05/breaking-news-san-jose-police-link-severed-finger-in-wendys-chili-case-to-suspect/<p>Isn't that taking “let the punishment fit the crime,” a step too far?</p>Visual Studio 2005 Pricing and Bundle Changes2005-05-13T08:00:00-10:002005-05-13T08:00:00-10:00larrytag:knowing.net,2005-05-13:/posts/2005/05/visual-studio-2005-pricing-and-bundle-changes/<p>Rick LaPlante just announced that:</p>
<ul>
<li>A version of Team Foundation Server will be included with <em>all</em> role-based SKUs (no additional purchase)</li>
<li>MSDN/U subscribers can upgrade to Team <strong><em>Suite</em></strong> for \$2300 and “Renewals continue at the promotional price for as long as you are an active subscriber.“</li>
</ul>
<p>Once again proving …</p><p>Rick LaPlante just announced that:</p>
<ul>
<li>A version of Team Foundation Server will be included with <em>all</em> role-based SKUs (no additional purchase)</li>
<li>MSDN/U subscribers can upgrade to Team <strong><em>Suite</em></strong> for \$2300 and “Renewals continue at the promotional price for as long as you are an active subscriber.“</li>
</ul>
<p>Once again proving: Larry speaks, Redmond trembles.</p>
<p>(<em>Note to self: Write column on how XBox 360 should be bundled in MSDN Subscription)</em></p>
<p>Instant analysis: This is <em>exactly</em> the right move: they haven't lowered the price on new sales, they're <em>rewarding</em> existing MSDN/U subscribers, the exact “key influencers” hurt by the previous pricing, while hardly dinging their future sales profits. This is <em>such</em> the right move (Microsoft insults loyal customers, loyal customers scream, Microsoft changes behavior and rewards loyal customers, loyal customers feel all warm and glowy) that I'm sure the conspiracy theorists will say the whole thing was a ... what's the word or phrase? ... “feint” isn't quite it ...</p>GC Performance Counters2005-05-06T16:53:00-10:002005-05-06T16:53:00-10:00larrytag:knowing.net,2005-05-06:/posts/2005/05/gc-performance-counters/<p><a href="https://blogs.msdn.microsoft.com/maoni/2004/06/03/gc-performance-counters/">Good article</a> on tracking garbage collection related problems.</p>Whidbey Beta 2 Ate My Newsgator?2005-05-06T09:38:00-10:002005-05-06T09:38:00-10:00larrytag:knowing.net,2005-05-06:/posts/2005/05/whidbey-beta-2-ate-my-newsgator/<p>Anyone else experience sudden Newsgator flakiness after installing Visual Studio 2005 Beta 2? Suddenly, Outlook regularly puts Newsgator into it's “disabled” list (Accessible via “About/Disabled Items”. I then have to restart to get Newsgator back running, but it's prone to disappearing again.) Also, it looks like my posting plug-in …</p><p>Anyone else experience sudden Newsgator flakiness after installing Visual Studio 2005 Beta 2? Suddenly, Outlook regularly puts Newsgator into it's “disabled” list (Accessible via “About/Disabled Items”. I then have to restart to get Newsgator back running, but it's prone to disappearing again.) Also, it looks like my posting plug-in has broken.</p>Microsoft Reverses Stance on Diversity!2005-05-06T09:27:00-10:002005-05-06T09:27:00-10:00larrytag:knowing.net,2005-05-06:/posts/2005/05/microsoft-reverses-stance-on-diversity/<p>Steve Ballmer concluded that: “diversity in the workplace is such an important issue for our business that it should be included in our legislative agenda....Accordingly, Microsoft will continue to join other leading companies in supporting federal legislation that would prohibit employment discrimination on the basis of sexual orientation – adding …</p><p>Steve Ballmer concluded that: “diversity in the workplace is such an important issue for our business that it should be included in our legislative agenda....Accordingly, Microsoft will continue to join other leading companies in supporting federal legislation that would prohibit employment discrimination on the basis of sexual orientation – adding sexual orientation to the existing law that already covers race, sex, national origin, religion, age and disability. Given the importance of diversity to our business, it is appropriate for the company to endorse legislation that prohibits employment discrimination on all of these grounds.”</p>
<p>a) Bravo for Microsoft.</p>
<p>b) The one thing that most impresses me about Microsoft is their ability to recognize mistakes and reverse course. The most stunning technical example, of course, was the Internet turn-around of 96-97, but this is comparable. This decision is <strong>not</strong> going to be painless for Redmond -- they <em>will</em> get grief from the well-organized and vocal hate-mongers (I wish I could draw, because I could get dozens of cartoons from the prospect of evangelical and Linux zealots attempting top band together).</p>
<p>c) Ctl-A, Ctl-Delete on a column that I'd just finished...</p>Getting Things Done With OneNote Flags2005-05-05T14:49:00-10:002005-05-05T14:49:00-10:00larrytag:knowing.net,2005-05-05:/posts/2005/05/getting-things-done-with-onenote-flags/<p>Chris Pratley has a great blog entry on Note Flags in which he discusses “the awesome power of Note Flags Summary.”</p>
<p>I thought I’d supplement that with my “Getting Things Done”-inspired OneNote organization. First, I’ve customized my Note Flags to be color-coordinated and GTD-like:</p>
<p>Second, I organize …</p><p>Chris Pratley has a great blog entry on Note Flags in which he discusses “the awesome power of Note Flags Summary.”</p>
<p>I thought I’d supplement that with my “Getting Things Done”-inspired OneNote organization. First, I’ve customized my Note Flags to be color-coordinated and GTD-like:</p>
<p>Second, I organize my notebook into “areas of concern.“ The idea is that these are things that involve multiple projects, especially if they're concurrent. Sub-notebooks are used when I generate a lot of notes and projects. (“<a href="https://www.amazon.com/exec/obidos/ASIN/0142000280/thinkinginnet-20">Getting Things Done</a>“ defines a 'project' as anything that requires multiple steps to accomplish. Managing a <em>lot</em> of concurrent projects is the essence of the GTD system.) Here, you can see my catch-all “General,” section, my “Arcs of Fire” sub-notebook, and some others:</p>
<p>The first page of each section is an “Overview” page. Every project in a particular area of concern goes on this page (marked with a Note Flag as “Urgent,” “Ongoing,” or “Deferred”). I may also have stand-alone tasks marked with “\@Next Action”, “To Do,” and “Someday / Maybe” here, but in general, stand-alone tasks are placed, as they occur to me, on whatever page I happen to be working in. This is my “Overview” page for this Website (as you can see, big plans, little time):</p>
<p>I use the “Note Flags Summary” taskpane to gather and sort all of my tasks and projects (note that they’re color-coded as well: green means “Urgent Project” / “Next Action, blue means “Ongoing” / “To Do”, yellow means “Deferred” / “Maybe”). Note that tasks can be marked as done directly in the taskpane, a nice touch. Also note that ink shows up in the summary! Here's my current next action list, mostly blurred, but showing my next actions in my “Birding“ and “SCUBA Maintenance“ projects (both part of my “Recreation“ section)</p>
<p>Part of my weekly review is tidying up all of my notebooks and rejiggering all of the projects and to-do’s (Ctrl-0 clears all note flags, so I can typically re-prioritize something with two chords: Ctl-0, Ctl-1 makes a task “Next Action,” for instance). I still haven’t figured out the optimum way to deal with completed actions. Some subnotebooks have a “Recycled” section. Other times, I just delete them. Sometimes, I just leave 'em (since the Note Flags Summary taskpane filters them out).</p>
<p>I’ve been using this as my main organizational tool for about six months now and find it quite effective. Of course, there are improvements I’d love to make, but OneNote doesn’t have a powerful enough API (yet?) for that. One improvement that I know is possible within the constraints of the current API is automatically importing voice notes from my SmartPhone (It’s a “Someday/Maybe” project in my “Sofware Projects” section).</p>
<p>Criticisms and improvements highly encouraged!</p>Moore's Law Footnotes2005-05-05T12:26:00-10:002005-05-05T12:26:00-10:00larrytag:knowing.net,2005-05-05:/posts/2005/05/moores-law-footnotes/<p>I just wrote an article on Moore's Law (it's not available online yet). I ran long and am using this as a “one-to-many” footnote link:</p>
<ul>
<li>“<a href="ftp://download.intel.com/research/silicon/moorespaper.pdf">Cramming More Components Onto Integrated Circuits</a>,” Gordon Moore</li>
<li>“No Silver Bullet: Essence and Accidents of Software Engineering,“ Fred Brooks</li>
<li>“No Silver Bullet Revisited,“ Brad Cox …</li></ul><p>I just wrote an article on Moore's Law (it's not available online yet). I ran long and am using this as a “one-to-many” footnote link:</p>
<ul>
<li>“<a href="ftp://download.intel.com/research/silicon/moorespaper.pdf">Cramming More Components Onto Integrated Circuits</a>,” Gordon Moore</li>
<li>“No Silver Bullet: Essence and Accidents of Software Engineering,“ Fred Brooks</li>
<li>“No Silver Bullet Revisited,“ Brad Cox</li>
<li>“<a href="https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/">The Law of Leaky Abstractions</a>,“ Joel Spolsky</li>
<li>“<a href="http://www.gotw.ca/publications/concurrency-ddj.htm">The Free Lunch Is Over</a>,“ Herb Sutter</li>
<li>“<a href="https://www.microsoft.com/en-us/research/project/comega/?from=http%3A%2F%2Fresearch.microsoft.com%2Fcomega%2Fdoc%2Fcomega_tutorials_concurrency_extensions.htm">COmega Concurrency Extensions Tutorial</a>“</li>
<li>“A Call To Arms,“ Jim Gray and Mark Compton</li>
<li>“<a href="https://www.amazon.com/exec/obidos/ASIN/0471202843/thinkinginnet-20">Software Factories</a>,“ Jack Greenfield and Keith Short</li>
</ul>Stupid Pen Tricks2005-05-02T08:26:00-10:002005-05-02T08:26:00-10:00larrytag:knowing.net,2005-05-02:/posts/2005/05/stupid-pen-tricks/<p>In <a href="https://www.developer.com/">my latest article</a> on Tablet PC programming on DevX, I discuss scaling, reversing, and generally transforming pen data.</p>Microsoft's Craven "Neutrality" On Gay Rights2005-04-26T08:13:00-10:002005-04-26T08:13:00-10:00larrytag:knowing.net,2005-04-26:/posts/2005/04/microsofts-craven-neutrality-on-gay-rights/<p>Microsoft's withdrawal of support a Washington state bill aimed at outlawing discrimination based on sexual orientation is utterly foul. Microsoft wants to charge for its software, it wants to dominate markets, it wants people to use a non-tabbed browser -- all things which some have labeled Evil and I said “eh …</p><p>Microsoft's withdrawal of support a Washington state bill aimed at outlawing discrimination based on sexual orientation is utterly foul. Microsoft wants to charge for its software, it wants to dominate markets, it wants people to use a non-tabbed browser -- all things which some have labeled Evil and I said “eh“. But I am disgusted that a company that utterly relies on the contributions of Computer Science can claim that “the right balance to strike” on (at least) this particular “broad social issue,” is neutrality. Computer Science's greatest genius, Alan Turing, was a gay man who almost certainly committed suicide because of the associated social stigma. Hardly the first, hardly the last gay to be so harried by the righteous certainty of those who would deprive our society of the benefits of diversity.</p>
<p>According to Steve Ballmer, Microsoft's neutral stance on this bill is the consequence of a decision to “focus on a limited number of issues that are more directly related to our business, such as computer privacy, education, and competitiveness.” The assault on rationality being waged by evangelical zealots strikes to each of these issues. Does Microsoft not recognize that anti-gay discrimination is a fundamental judgment on the private activities of consenting adults? Does the active suppression of evolutionary theory cut close enough to the bone to be recognized by Microsoft as a threat to education? And if this judgmental, willfully ignorant, hate-mongering power-grab succeeds, will Microsoft, or any American corporation, remain a place that calls to the best and the brightest? No.</p>
<p>For Microsoft, the corporation, to refuse to stand by the moral principles which, rightly, are shared by Bill Gates, Steve Ballmer (and, not that ethics are a matter of majorities, a vast number of Microsoft employees and shareholders) is foul. This is not a subject, nor even a bill, on which Microsoft has been silent in the pass.</p>
<p>To adopt silence in the face of hatred is not neutrality. It is acquiescence. If there is one thing that the 20th century should have taught society, it is that acquiescence to narrow-mindedness, to certitude, to discrimination and hate, does not lead to compromise, but to extremism and disaster. </p>
<p>Subsequent to the exposure of this issue, the anti-discrimination bill was defeated by a single vote. Further, the purity of Microsoft's neutrality on "broader social issues" has been brought into question by the revelation that Microsoft has re-initiated a <a href="http://americablog.blogspot.com/2005/04/microsoft-paying-religious-right.html">\$20,000-per-month relationship with Ralph Reed's consulting group</a>. Microsoft became silent on this bill because they wanted to avoid controversy. See how that didn't work?</p>Whidbey Beta 2 Available For Download Now2005-04-15T17:54:00-10:002005-04-15T17:54:00-10:00larrytag:knowing.net,2005-04-15:/posts/2005/04/whidbey-beta-2-available-for-download-now/<p>Clearly, I speak and Microsoft responds. Visual Studio 2005 Beta 2 just became available in MSDN subscriber downloads. You're welcome.</p>Basically, It's An Uprising2005-04-15T10:41:00-10:002005-04-15T10:41:00-10:00larrytag:knowing.net,2005-04-15:/posts/2005/04/basically-its-an-uprising/<p>I discuss the VB6 / VB.NET petition in my latest column for SD Times.</p>March 46th and Still No Beta...2005-04-15T10:36:00-10:002005-04-15T10:36:00-10:00larrytag:knowing.net,2005-04-15:/posts/2005/04/march-46th-and-still-no-beta/<p>Eric Rudder: “...even if it's March 38th or 43rd, we will deliver [Whidbey Beta 2] in March....”</p>
<p>I mean, here it is tax day and we're all filled with gloom. Can't anyone do anything to relieve my depression?</p>Open Source Clone of VSTS "Inconceivable"? I don't know if that word means what you think it means...2005-04-12T09:10:00-10:002005-04-12T09:10:00-10:00larrytag:knowing.net,2005-04-12:/posts/2005/04/open-source-clone-of-vsts-inconceivable-i-dont-know-if-that-word-means-what-you-think-it-means/<p>NTeam is a GotDotNet project that aims to integrate, for small- to medium-teals, Open Source alternatives to the features of Microsoft's VSTS. In an <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">EWeek article</a> discussing it, Eric Sink of SourceGear, says that “It is inconceivable that a community project could produce a Team System clone, which is truly …</p><p>NTeam is a GotDotNet project that aims to integrate, for small- to medium-teals, Open Source alternatives to the features of Microsoft's VSTS. In an <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">EWeek article</a> discussing it, Eric Sink of SourceGear, says that “It is inconceivable that a community project could produce a Team System clone, which is truly suitable for enterprise use during this decade."</p>
<p>Highly unlikely, yes. Inconceivable, not at all. The myth that Open Source cannot produce enterprise-quality software has been totally discredited by several projects. The only question is whether a corporate sponsor willing to pay a handful of major contributors is necessary. I tend to think such sponsorship <em>is</em> necessary. Anyone at Borland or JetBrains paying attention?</p>I Get Swept Up In The Unitarian Jihad2005-04-11T08:13:00-10:002005-04-11T08:13:00-10:00larrytag:knowing.net,2005-04-11:/posts/2005/04/i-get-swept-up-in-the-unitarian-jihad/<p><a href="https://www.sfgate.com/entertainment/carroll/article/JON-CARROLL-3324002.php">“Sincerity is not enough.” We have heard from enough sincere people to last a lifetime already. Just because you believe it’s true doesn’t make it true.</a></p>
<p>My <a href="https://www.sfgate.com/entertainment/carroll/article/JON-CARROLL-3324002.php">Unitarian Jihad Name</a> is: <strong>Brother Nail Gun of Warm Humanitarianism</strong>.</p>
<p>Get yours.</p>Helpful VSTS feature breakdown image2005-04-08T08:59:00-10:002005-04-08T08:59:00-10:00larrytag:knowing.net,2005-04-08:/posts/2005/04/helpful-vsts-feature-breakdown-image/<p>This is a helpful image from <a href="http://romsteady.blogspot.com/2005/04/vsts-message-clearer-but-still-priced.html">Michael Russell</a>. I don't like the fundamental concept of “role-based“ IDEs but it looks like that's what we're going to have:</p>Computerworld Developer Survey -- Some Dubious Numbers2005-04-08T08:13:00-10:002005-04-08T08:13:00-10:00larrytag:knowing.net,2005-04-08:/posts/2005/04/computerworld-developer-survey-some-dubious-numbers/<p>The headline in this survey in <a href="https://www.computerworld.com/developmenttopics/development/story/0%2c10801%2c100542%2c00.html">Computerworld</a> is that C# is the most-used corporate development language, but my eye caught on some other numbers:</p>
<p>22% of respondents said they were developing 64-bit applications. 24% said they were developing wireless applications. Both those numbers are total bull. Both those areas require …</p><p>The headline in this survey in <a href="https://www.computerworld.com/developmenttopics/development/story/0%2c10801%2c100542%2c00.html">Computerworld</a> is that C# is the most-used corporate development language, but my eye caught on some other numbers:</p>
<p>22% of respondents said they were developing 64-bit applications. 24% said they were developing wireless applications. Both those numbers are total bull. Both those areas require specialized tools that have <em>nothing</em> like 1/5-1/4 market penetration. Last year I did some work for AMD explaining 64-bit development to <em>game developers</em> and <em>those guys</em> were skeptical. Probably these numbers come from people thinking “Well, our database is supposed to be 64-bits and we develop apps for that. People access their email on their Blackberries and we send email.”</p>
<p>In 16 years of reading such surveys, I've learned corporate development surveys <em>always</em> overstate heterogeneity (and, <em>boy</em>, do they overstate “purchasing influence”).</p>Notes from Gates Knighting2005-04-03T08:15:00-10:002005-04-03T08:15:00-10:00larrytag:knowing.net,2005-04-03:/posts/2005/04/notes-from-gates-knighting/<p>My notes on Bill Gates knighthood ceremony finally were posted on Friday.</p>Note-Taking With InfiNotes2005-04-01T09:50:00-10:002005-04-01T09:50:00-10:00larrytag:knowing.net,2005-04-01:/posts/2005/04/note-taking-with-infinotes/<p><a href="https://www.developer.com/">In which I extoll the power of Agilix InfiNotes and show source code for note-taking applications on the Tablet PC</a>.</p>However, everyone knows if you're a plagiarist2005-03-29T14:17:00-10:002005-03-29T14:17:00-10:00larrytag:knowing.net,2005-03-29:/posts/2005/03/however-everyone-knows-if-youre-a-plagiarist/<p>A comedy writer named Nate Kushner received an IM from a college student, who commissioned him to write her a paper on Hinduism. Because it’s on Hinduism, Kushner could refer to such things as the “Shudahelupta class,” without necessarily alerting the student that she was turning in a patently …</p><p>A comedy writer named Nate Kushner received an IM from a college student, who commissioned him to write her a paper on Hinduism. Because it’s on Hinduism, Kushner could refer to such things as the “Shudahelupta class,” without necessarily alerting the student that she was turning in a patently absurd piece. The funniest thing is actually their exchange of IMs on how to prove that she would pay him (he asked for PayPal, she offered to take a cameraphone image of a check… something like that).</p>
<p>He posted the essay, their IM log, and her real name to his blog. Oh, Laura K. Prahl, you might want to consider changing your name…</p>
<p>P.S. The famous Peter Steiner cartoon appeared in the July 5, 1993 (wow!) episode of <em>The New Yorker</em>. The irony that this blog post is a nail in the coffin for Ms. Prahl's Googlism but itself could be construed as being beyond-the-pale of “fair use” is not lost on me. And yet, the image is not hosted by me...I do nothing but provide an \<img> link to Google's #1 return for the caption... O Brave New World of Intellectual Property Rights!</p>casey chesnut (genius) converts ink to svg2005-03-25T15:16:00-10:002005-03-25T15:16:00-10:00larrytag:knowing.net,2005-03-25:/posts/2005/03/casey-chesnut-genius-converts-ink-to-svg/<blockquote>
<p>Converting Journal Notes to XML, SVG, and OneNote <em>[via ]{style="FONT-STYLE: italic"}</em>[brains-N-brawn.com\< ?xml:namespace prefix = o />]</p>
</blockquote>
<p>This is the kind of ruthless competence that gives a bad name to the rest of us writers.</p>Swimming with Dolphins2005-03-24T13:35:00-10:002005-03-24T13:35:00-10:00larrytag:knowing.net,2005-03-24:/posts/2005/03/swimming-with-dolphins/<p>Yesterday, the ocean was flat as a pancake, so I called pau hana at 2 and Tina and I went down to <a href="https://www.bing.com/maps?FORM=LGCYVD">2-Step</a>. As soon as we got there, we could see a big pod of dolphins in close to the reef edge. Better still, we had our best freediving …</p><p>Yesterday, the ocean was flat as a pancake, so I called pau hana at 2 and Tina and I went down to <a href="https://www.bing.com/maps?FORM=LGCYVD">2-Step</a>. As soon as we got there, we could see a big pod of dolphins in close to the reef edge. Better still, we had our best freediving gear with us -- full wetsuits with weights and longblade fins. That meant that we could go out, drop down to any depth with a minimum of movement, and just hang out. Usually, the way to see dolphins is stay in one place and move as little as possible. Once they've seen you six or seven times and you just move vertically, they realize you're not going to chase them and start to use you as a turning point in their cruising (and so they swim by you every five or ten minutes).</p>
<p>Well, yesterday, the dolphins weren't into that. For some reason, they were approaching all sorts of snorkelers much, much closer than they normally do. I actually swam out to where I normally see them and after fifteen minutes I swam back in to where the other people were because the dolphins were being so amazingly not-just-tolerant but downright interactive. The dolphins were jumping and spinning five feet away from people who were splashing around and screaming and shouting. It was very unusual.</p>
<p>After awhile, Tina and I realized that the dolphins were playing with mango leaves in the water -- dragging them along with their pectoral, dorsal, and caudal fins. We spotted a couple leaves floating and snagged them ourselves, hooking them with our fingers and swimming along with them. Well, holy cow... the dolphins were totally into it. The game was: you'd swim down, drop the mango leaf between 20' and 40' down and surface for a breath of air. Then, as you swam down to get the mango leaf again, the dolphins would suddenly appear and steal the leaf away.</p>
<p>Once I looked down and Tina was surfacing from about 20'. A bunch of dolphins swam up and she stopped her ascent, just hanging out. They circled her once and then one of them -- VOOM! -- straight to the surface and did a triple spin. Unbelievable.</p>
<p>There was a noticeable thermocline in the water and there were a bunch of rainbow runners and a big school of Crocodile Needlefish. Two nights before the first full moon of Spring? I dunno' what it was, but it was incredible. Two hours of swimming with dolphins.</p>WTF: The Responsible Guy2005-03-24T12:16:00-10:002005-03-24T12:16:00-10:00larrytag:knowing.net,2005-03-24:/posts/2005/03/wtf-the-responsible-guy/<p>::: {.Section1}
The Daily WTF is always great, but this Perl script is priceless. I’ve got to come up with something like this to send to my editors when I blow a deadline. (The original post accidentally left the guilty party’s real email in the listing. I obfuscated it …</p><p>::: {.Section1}
The Daily WTF is always great, but this Perl script is priceless. I’ve got to come up with something like this to send to my editors when I blow a deadline. (The original post accidentally left the guilty party’s real email in the listing. I obfuscated it below.): </p>
<blockquote>
<div>
<p><strong><em>*….</em></strong>*Their company runs a fairly important batch process very late at night that this particular coder was responsible for. As it turns out, "responsible" may not have been the appropriate word ...</p>
<div class="highlight"><pre><span></span><code><span class="o">--[</span><span class="n">Begin late.pl</span><span class="o">]-------------</span>
<span class="nv">@titles</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="ss">"Up late..."</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Still watching stuff run"</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Just letting you know..."</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"So you know..."</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Still online"</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Working late"</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"up early this morning"</span><span class="p">);</span>
<span class="nv">@bodies</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="ss">"Hey guys, just letting you know that we are still up with the emailreports so I won't be early this morning."</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Just letting you know that we are watching the emails now, so we will be in the office a little later."</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Steve, I just finished watching the emails go out, and will be in the office as soon as I can this morning."</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Hey, just letting you know that the emails just went out, so I will not be there as scheduled in the morning."</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Steve, I know that you like to know when we are up later watching stuff, so just letting you know that we are."</span><span class="p">,</span>
<span class="w"> </span><span class="ss">"Up late watching stuff run, will be in as soon as possible in the morning."</span><span class="p">);</span>
<span class="n">sendMail</span><span class="p">(</span><span class="s1">'steve@xxxxxxxxx.com'</span><span class="p">,</span><span class="w"> </span><span class="s1">'john@xxxxxxxx.com'</span><span class="p">,</span>
<span class="w"> </span><span class="nv">@titles</span><span class="o">[</span><span class="n">rand($#titles)</span><span class="o">]</span><span class="p">,</span>
<span class="w"> </span><span class="nv">@bodies</span><span class="o">[</span><span class="n">rand($#bodies)</span><span class="o">]</span><span class="p">.</span><span class="ss">"\n\nThanks,\nJohn\n\n"</span><span class="p">,</span><span class="w"> </span><span class="s1">'Steve'</span><span class="p">,</span><span class="w"> </span><span class="s1">'John'</span><span class="p">);</span>
<span class="c1">--[End late.pl]-------------</span>
</code></pre></div>
</div>
<p>[And I thought I was slick using the Delay Send feature in Outlook….. <em>[via ]{style="font-style:italic"}</em>[<a href="http://thedailywtf.com/articles/theInfamousI_and_The_Responsible_Guy">The Daily WTF</a>]]{style=""}
:::</p>
</blockquote>Scoble Collapses Under Weight of 1,500 Blogs2005-03-24T07:50:00-10:002005-03-24T07:50:00-10:00larrytag:knowing.net,2005-03-24:/posts/2005/03/scoble-collapses-under-weight-of-1500-blogs/<p>Spending “three to eight hours per day” on his link blog has overwhelmed Scoble. It's a little unclear how blogging is incorporated into the Microsoft workday; it appears that while Microsoft has a commendable “blogging is good” attitude, I think it's supposed to be done on your own time (I …</p><p>Spending “three to eight hours per day” on his link blog has overwhelmed Scoble. It's a little unclear how blogging is incorporated into the Microsoft workday; it appears that while Microsoft has a commendable “blogging is good” attitude, I think it's supposed to be done on your own time (I suppose I could, you know, actually call someone and find out, but this whole blogging “make up assumptions and then rant about them” thing <em>is</em> easier).</p>
<p>Scoble's been an interesting canary in the coalmine. He's always been the most visible outlier in terms of trying to keep a handle on the blogosphere as it relates to his particular interest and he's been, I would say, largely successful at tracking popular reaction to Microsoft in realtime -- a solidly challenging topic. (As opposed to say, <a href="http://www.divester.com">Divester</a>, which tracks SCUBA blogs and news and consists mainly of “Oh, and here's some pretty photos on this guy's site.“)</p>
<p>So, it looks like even the largest corporation can track and spin online reaction in realtime<em>, if</em> they're willing to make it part of someone's job description. Given the obvious benefits, it's a no-brainer that “chief blogger” is going to become a part of the marketing / PR function. The smallest companies will put it on their most enthusiastic writer, medium-sized companies will outsource it (probably stealthily) to PR firms, and large companies will give it to internal marketing.</p>
<p>Farewell, Scoble's Link Blog! We shan't see your likes again!</p>IronPython Reloaded: Jim Hugunin Not Dead Yet!2005-03-23T08:36:00-10:002005-03-23T08:36:00-10:00larrytag:knowing.net,2005-03-23:/posts/2005/03/ironpython-reloaded-jim-hugunin-not-dead-yet/<p>IronPython 0.7 has been released and placed into a GotDotNet workspace. I spoke with Jim Hugunin yesterday about the release. He says that it is essentially a minor upgrade to IronPython 0.6; the <em>real</em> news is that he is going to become more active in the project. He …</p><p>IronPython 0.7 has been released and placed into a GotDotNet workspace. I spoke with Jim Hugunin yesterday about the release. He says that it is essentially a minor upgrade to IronPython 0.6; the <em>real</em> news is that he is going to become more active in the project. He says that he hopes to provide another update in just a few weeks and that he hopes that IronPython 1.0 will be available by the end of the year.</p>
<p>IronPython 0.7 is <em>not</em> compatible with .NET Framework 1.1! You <em>must</em> use the beta or CTP of 2.0 to compile and run it. Neither is it compatible with .NET Compact Framework, so no Python on Smartphone. Hugunin said (and I agree) that .NET CF support is more important than 1.1 support. Of course, we'll have to see what the community says.</p>
<p>IronPython is released under a “BSD-style” license.</p>Books2005-03-22T11:43:00-10:002005-03-22T11:43:00-10:00larrytag:knowing.net,2005-03-22:/posts/2005/03/books/<p>[Infected by Brad Wilson]{.556184619-22032005}</p>
<blockquote>
<div>
<p><strong>You're stuck inside Fahrenheit 451, which book do you want to be?</strong><br>
[“The idea is you memorize a book and repeat it over and over again until your grandchildren run from the room whenever you open your mouth and start quoting, 'Mr. Popper's Penguins,' or …</p></div></blockquote><p>[Infected by Brad Wilson]{.556184619-22032005}</p>
<blockquote>
<div>
<p><strong>You're stuck inside Fahrenheit 451, which book do you want to be?</strong><br>
[“The idea is you memorize a book and repeat it over and over again until your grandchildren run from the room whenever you open your mouth and start quoting, 'Mr. Popper's Penguins,' or whatever...” Oh, okay. Ummm...Although “Green Eggs and Ham“ was the first thing that sprang to mind, I'll say “Origin of Species.“ If that's taken, I'll go with the insanely important <a href="https://www.amazon.com/exec/obidos/ASIN/0262581116/thinkinginnet-20">Adaptation in Natural and Artifical Systems</a> by John Holland, which established the mathematics of adaptation and thus demolishes the “evolution is an untested theory“ nonsense.]{.556184619-22032005}</p>
<p>[]{.556184619-22032005}<strong>[]{.556184619-22032005}Have you ever had a crush on a fictional character?</strong><br>
[Robert Heinlein's female characters were always brilliant, ruthlessly competent tom-boys who ended up melting for the brilliant, ruthlessly competent nerd-hero. <em>So</em> 1950s. But what can you do?]{.556184619-22032005}</p>
<p><strong>[]{.556184619-22032005}The last book you bought was:</strong><br>
[<a href="https://www.amazon.com/exec/obidos/ASIN/1400032717/thinkinginnet-20">The Curious Incident of the Dog in the Night Time</a>]{.556184619-22032005}</p>
<p><strong>The last book you read was?</strong><br>
[<a href="https://www.amazon.com/exec/obidos/ASIN/1400042755/thinkinginnet-20">Trawler</a> by Redmond O'Hanlon. Just finished it yesterday. Although still funny, the melancholy vein that began to appear in <a href="https://www.amazon.com/exec/obidos/ASIN/0679737324/thinkinginnet-20">No Mercy</a> makes another appearance. The most original O'Hanlon book remains <a href="https://www.amazon.com/exec/obidos/ASIN/0394755405/thinkinginnet-20">Into the Heart of Borneo</a> with <a href="https://www.amazon.com/exec/obidos/ASIN/0679727140/thinkinginnet-20">In Trouble Again</a> perhaps being slightly funnier.]{.556184619-22032005}</p>
<p><strong>What are you currently reading?</strong><br>
[<a href="https://www.amazon.com/exec/obidos/ASIN/0595320856/thinkinginnet-20">Diving The Seamount</a>, by Tom Rapko]{.556184619-22032005}</p>
<p><strong>[]{.556184619-22032005}Five books you'd take to a deserted island?</strong></p>
<p>You know, I just moved to an island six months ago. After decimating my library, I still brought eight boxes of books. Sheesh.</p>
<p>[The Aubrey-Maturin series by Patrick O'Brian (21 volumes, but essentially one work). The best modern fiction worth rereading.]{.556184619-22032005}</p>
<p>[<a href="https://www.amazon.com/exec/obidos/ASIN/0517092948/thinkinginnet-20">The Complete Works of William Shakespeare</a>. The best writing in English.]{.556184619-22032005}</p>
<p>[<a href="https://www.amazon.com/exec/obidos/ASIN/048667164X/thinkinginnet-20">Mathematics of Classical and Quantum Physics</a>. If I had the rest of my life to be at leisure, I'd be tackling <a href="https://en.wikipedia.org/wiki/Complexity_classes_P_and_NP">P != NP</a>. I have what I consider a promising attack, but it depends on the idea that there's a limit to the speed at which information can propagate. I think with stronger math, I could say something definite about that.]{.556184619-22032005}</p>
<p>[<a href="https://www.amazon.com/exec/obidos/ASIN/0201515067/thinkinginnet-20">Complexity Entropy and the Physics of Information</a>. These are conference proceedings, but I think the idea of a <em>deep</em> relationship between physics and information is going to produce a whole slew of Nobels.]{.556184619-22032005}</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0967512395/thinkinginnet-20">US Army Survival Manual FM 2176</a>. I've watched Survivor enough to know that getting enough food to survive on is much harder than it seems.</p>
<p><strong>Who will you pass this stick (3 persons) on to, and why?</strong><br>
They get to self-select. :)</p>
</div>
</blockquote>A Challenge For Amazon's Customer Service2005-03-22T07:27:00-10:002005-03-22T07:27:00-10:00larrytag:knowing.net,2005-03-22:/posts/2005/03/a-challenge-for-amazons-customer-service/<p>So last night I signed up for “Amazon Prime,” which provides “all you can eat” express shipping for a year for \$79. This is a great deal for me now that I live in Hawaii, since media mail to Hawaii can take weeks.</p>
<p>So I dropped a couple books in …</p><p>So last night I signed up for “Amazon Prime,” which provides “all you can eat” express shipping for a year for \$79. This is a great deal for me now that I live in Hawaii, since media mail to Hawaii can take weeks.</p>
<p>So I dropped a couple books in my cart and started the order process, expecting to see a sign-up for the service during checkout. That doesn't exist. You have to go out to the main page, sign in, buy the service, and then turn on “One-Click” ordering. So I did all that, <strong>using the Tablet Input Panel,</strong> went back to my “cart” and checked “Buy all with one-click.”</p>
<p>This morning, I found the Amazon confirmation email in my inbox telling me I was being charged \<span class="math">\(20 in shipping and handling. I fired off an email to customer service (”Wha...?”). Then, I did my morning clear of my “Junk Mail” folder to find a “Your credit card was declined for a prime membership” message from Amazon. Presumably, there was a recognition or typing mistake when I was using my Tablet to sign up, then my Bayesian filter said “Phish on!,” and then I got charged \\)</span>20 for delivery of the paperback version of “The Curious Incident of the Dog in the Night.”</p>
<p>How will this play out? Will Amazon act like an old-fashioned organization and say “your problem, not ours,” or will they say “no one was really <em>wrong</em> here, but we'll refund the shipping charge.”</p>
<p><em>Stay tuned...</em></p>
<p>Update: Amazon promptly contacted me and refunded the shipping charge. They also told me that Prime Membership shipping does not extend to Alaska and Hawaii. But if they can put up “People who bought 'Curious Incident' also bought 'Jonathan Norrell'” on my entrance page, how come for the past month I've been getting a full-page ad for something for which I'm not eligible? I give them a B-. Excellent customer service, but it was only necessary because they didn't apply themselves to the technology on either the ad or the sign-up procedure.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>WW2 Japanese Submarine Aircraft Discovered2005-03-21T12:16:00-10:002005-03-21T12:16:00-10:00larrytag:knowing.net,2005-03-21:/posts/2005/03/ww2-japanese-submarine-aircraft-discovered/<p>University of Hawaii researchers <a href="https://www.khon2.com/">have discovered</a> the wreck of a giant (400 feet long!) Japanese submarine aircraft carrier in 2,500 feet of water off Oahu. Captured at war's end, the I-400 and I-401 carried three float-plane bombers intended to strike targets such as the Panama Canal, San Francisco, and …</p><p>University of Hawaii researchers <a href="https://www.khon2.com/">have discovered</a> the wreck of a giant (400 feet long!) Japanese submarine aircraft carrier in 2,500 feet of water off Oahu. Captured at war's end, the I-400 and I-401 carried three float-plane bombers intended to strike targets such as the Panama Canal, San Francisco, and even New York (the subs had a range of 37,500 miles!). Unwilling to share such advanced technology with the Russians in accord with WW2 treaties, the US scuttled the subs off Oahu.</p>
<p>Man, am I bummed that they're so deep. What an incredible dive those wrecks would be!</p>Microsoft's Rules Engine2005-03-18T14:05:00-10:002005-03-18T14:05:00-10:00larrytag:knowing.net,2005-03-18:/posts/2005/03/microsofts-rules-engine/<p>I was talking with Microsoftian Scott Woodgate yesterday and he let me know of a lacuna in my toolbox: BizTalk 2004 has a forward-chaining RETE-based rules engine. I've never heard of <em>anyone</em> using this technology (BizTalk's implementation, I mean -- I've used (and written) rules engines before). Dang. Not enough hours …</p><p>I was talking with Microsoftian Scott Woodgate yesterday and he let me know of a lacuna in my toolbox: BizTalk 2004 has a forward-chaining RETE-based rules engine. I've never heard of <em>anyone</em> using this technology (BizTalk's implementation, I mean -- I've used (and written) rules engines before). Dang. Not enough hours in the day to check this stuff out, but I've <em>got</em> to make time...</p>Microsoft's Smart Client Move2005-03-18T13:34:00-10:002005-03-18T13:34:00-10:00larrytag:knowing.net,2005-03-18:/posts/2005/03/microsofts-smart-client-move/<p>My latest SD Times column is on Microsoft's Smart Client strategy. Funny story: when I wrote this, the acronym “Ajax” hadn't yet been invented...</p>XML Data Integration Between Office Apps Tutorial2005-03-18T13:33:00-10:002005-03-18T13:33:00-10:00larrytag:knowing.net,2005-03-18:/posts/2005/03/xml-data-integration-between-office-apps-tutorial/<p>The DevX Office portal has opened and, waddya' know?, I've got an <a href="http://www.devx.com/dotnet/">article about using XML to transfer data to/from Office applications</a>.</p>Comedy Bracket2005-03-16T15:13:00-10:002005-03-16T15:13:00-10:00larrytag:knowing.net,2005-03-16:/posts/2005/03/comedy-bracket/<p>MSNBC has <a href="https://www.msn.com/">an interactive Flash app</a> that provides bracketed competition for comedies. My Final Four was “Austin Powers“ vs. “Something About Mary“ and “Spinal Tap“ vs. “Dr. Strangelove,“ with “Something About Mary“ going up against “Strangelove“ for the crown.</p>
<p>Fun, but how did “Pee Wee's Big Adventure” not make the …</p><p>MSNBC has <a href="https://www.msn.com/">an interactive Flash app</a> that provides bracketed competition for comedies. My Final Four was “Austin Powers“ vs. “Something About Mary“ and “Spinal Tap“ vs. “Dr. Strangelove,“ with “Something About Mary“ going up against “Strangelove“ for the crown.</p>
<p>Fun, but how did “Pee Wee's Big Adventure” not make the tournament?</p>WinFX March 2005 CTP is out2005-03-16T08:51:00-10:002005-03-16T08:51:00-10:00larrytag:knowing.net,2005-03-16:/posts/2005/03/winfx-march-2005-ctp-is-out/<p>::: {.Section1}
Ah Ooo Gah! Ah Ooo Gah! Prepare To Download! Prepare to Download! </p>
<blockquote>
<div>
<p>The WinFX March 2005 Community Technology Preview (CTP) is now available for download to MSDN subscribers. The WinFX CTP includes new versions of Avalon, the unified presentation subsystem, and Indigo, the new service-oriented communications infrastructure. …</p>
<p>MSDN subscribers …</p></div></blockquote><p>::: {.Section1}
Ah Ooo Gah! Ah Ooo Gah! Prepare To Download! Prepare to Download! </p>
<blockquote>
<div>
<p>The WinFX March 2005 Community Technology Preview (CTP) is now available for download to MSDN subscribers. The WinFX CTP includes new versions of Avalon, the unified presentation subsystem, and Indigo, the new service-oriented communications infrastructure. …</p>
<p>MSDN subscribers can go to the subscriber download area, navigate to <strong><em>*Platforms | Windows Longhorn Client Preview | WinFX SDK - Community Technology Preview | Avalon and Indigo Community Technology Preview</em></strong>*.</p>
</div>
<p><em>[Via ]{style=";font-style:italic"}</em>[Stuart Celarier] (and, I’m sure, a gazillion others)
:::</p>
</blockquote>Mercury!2005-03-14T08:17:00-10:002005-03-14T08:17:00-10:00larrytag:knowing.net,2005-03-14:/posts/2005/03/mercury/<p>Last night was the first really clear evening in a week. As a matter of fact, it was downright gorgeous -- Mauna Loa was dusted with snow, a few low cumulus clouds gave the horizon some character, the setting sun really lit up Hualalai. And, I saw Mercury for the first …</p><p>Last night was the first really clear evening in a week. As a matter of fact, it was downright gorgeous -- Mauna Loa was dusted with snow, a few low cumulus clouds gave the horizon some character, the setting sun really lit up Hualalai. And, I saw Mercury for the first time in my life! At 7:20, there was only one “star” visible in the low, still dusky, West. I'd been hoping to see Mercury this past week, when the potential was said to be excellent, but I thought it might have already moved back too close to the sun.</p>Is patent-ese really inscrutable?2005-03-11T14:48:00-10:002005-03-11T14:48:00-10:00larrytag:knowing.net,2005-03-11:/posts/2005/03/is-patent-ese-really-inscrutable/<p>::: {.Section1}</p>
<blockquote>
<div>
<p>[Loren writes about Microsoft General Counsel Brad Smith’s talk of patent reform (covered <a href="https://betanews.com/2005/03/11/microsoft-calls-for-patent-law-reform/" title="http://www.betanews.com/article/Microsoft_Calls_for_Patent_Law_Reform/1110549782">here</a> and here). A line in Loren’s post caught my eye:]{style=""}</p>
<p>“it's not the patent fee that's the big issue. You'll still need legal assistance writing and filing the patent.”</p>
<p>[Ever since my …</p></div></blockquote><p>::: {.Section1}</p>
<blockquote>
<div>
<p>[Loren writes about Microsoft General Counsel Brad Smith’s talk of patent reform (covered <a href="https://betanews.com/2005/03/11/microsoft-calls-for-patent-law-reform/" title="http://www.betanews.com/article/Microsoft_Calls_for_Patent_Law_Reform/1110549782">here</a> and here). A line in Loren’s post caught my eye:]{style=""}</p>
<p>“it's not the patent fee that's the big issue. You'll still need legal assistance writing and filing the patent.”</p>
<p>[Ever since my dot-com experiences, which included me signing over a really, really great idea for \$1 and then dealing with an idiot lawyer who introduced all sorts of inaccuracies into the text (and then the company went bankrupt with the patent needing revisions. I still have no idea of the status of the IP…), I’ve questioned the idea that “patent-ese” is impenetrable. I mean, yeah, it’s not English, but we’re <em>[programmers]{style="font-style:italic"}</em>. We’re used to baroque syntax with arcane tangents. Hell, we <em>[like ]{style="font-style:italic"}</em>that stuff.]{style=""}</p>
<p>[Plus, we’ve got examples up for free at uspto.gov. I mean, let <em>[other]{style="font-style:italic"}</em> people pay for the examples of patent-ese and just reverse engineer it. Instead of paying a patent lawyer to do the translation, just pay one to review your draft.]{style=""}</p>
<p></div>
:::</p>
</blockquote>Well, Not "Chief" Exactly...2005-03-11T14:08:00-10:002005-03-11T14:08:00-10:00larrytag:knowing.net,2005-03-11:/posts/2005/03/well-not-chief-exactly/<p>By now you've heard that Microsoft is buying Groove Networks and Ray Ozzie is slated to become a Microsoft CTO. Not <em>the</em> CTO, though. He'll be one of three “Chief” officers, along with David Vaskevitch (CTO, Business Platform) and Craig Mundie (CTO, Advanced Strategies & Policy). As such, he'll report direct …</p><p>By now you've heard that Microsoft is buying Groove Networks and Ray Ozzie is slated to become a Microsoft CTO. Not <em>the</em> CTO, though. He'll be one of three “Chief” officers, along with David Vaskevitch (CTO, Business Platform) and Craig Mundie (CTO, Advanced Strategies & Policy). As such, he'll report direct to Bill Gates (not to Ballmer? Huh. But that's what they say.)</p>Episode III Trailer Torrent2005-03-11T13:57:00-10:002005-03-11T13:57:00-10:00larrytag:knowing.net,2005-03-11:/posts/2005/03/episode-iii-trailer-torrent/<blockquote>
<p>I missed the premiere of the Episode III trailer last night, largely due to the fact that I refuse to watch the OC. However, our fellow netizens have provided a torrent for your downloading pleasure. …. Odds are this film will be just as disappointing, but no matter. The dark side …</p></blockquote><blockquote>
<p>I missed the premiere of the Episode III trailer last night, largely due to the fact that I refuse to watch the OC. However, our fellow netizens have provided a torrent for your downloading pleasure. …. Odds are this film will be just as disappointing, but no matter. The dark side is powerful and I shall succumb to its treachery on May 19. <em>[via ]{style="FONT-STYLE: italic"}</em>[The Daily Nugget\< ?xml:namespace prefix = o />]</p>
</blockquote>
<p>God, it’s horrible. We all <em>[know]{style="FONT-STYLE: italic"}</em> we’re going to be disappointed. But… Vader!</p>How many variables can humans process?2005-03-11T13:47:00-10:002005-03-11T13:47:00-10:00larrytag:knowing.net,2005-03-11:/posts/2005/03/how-many-variables-can-humans-process/<blockquote>
<p>In a new study, cognitive scientists show that humans can usually track just four mental variables when trying to solve a problem…. <a href="https://www.eurekalert.org/pub_releases/2005-03/aps-hmc030805.php" title="http://www.eurekalert.org/pub_releases/2005-03/aps-hmc030805.php">Link</a> <em>[via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</blockquote>
<p>I would definitely suspect that programmers are better than average at tracking variables but I wonder if we have a gift …</p><blockquote>
<p>In a new study, cognitive scientists show that humans can usually track just four mental variables when trying to solve a problem…. <a href="https://www.eurekalert.org/pub_releases/2005-03/aps-hmc030805.php" title="http://www.eurekalert.org/pub_releases/2005-03/aps-hmc030805.php">Link</a> <em>[via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</blockquote>
<p>I would definitely suspect that programmers are better than average at tracking variables but I wonder if we have a gift for this (the ability to track five or six or seven), or are just good at swapping to and from our four registers?</p>Bladerunner lie detector invented...2005-03-11T13:43:00-10:002005-03-11T13:43:00-10:00larrytag:knowing.net,2005-03-11:/posts/2005/03/bladerunner-lie-detector-invented/<p>::: {.Section1}</p>
<blockquote>
<div>
<p>New Scientists reports on the development of a lie detector that works by tracking blood flow through the blood vessels in your face. The system is being developed by (natch) the Us Department of Defense.</p>
</div>
<p>\< ![if !vml]><img alt=" Alt Box Gif Holden" height="150" src="https://boingboing.net/images/_ALT_box_gif_holden.jpg" width="200">\< ![endif]>As I relax into the chair, the questioning begins. An automated …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<div>
<p>New Scientists reports on the development of a lie detector that works by tracking blood flow through the blood vessels in your face. The system is being developed by (natch) the Us Department of Defense.</p>
</div>
<p>\< ![if !vml]><img alt=" Alt Box Gif Holden" height="150" src="https://boingboing.net/images/_ALT_box_gif_holden.jpg" width="200">\< ![endif]>As I relax into the chair, the questioning begins. An automated voice instructs me to answer a series of questions with a simple yes or no. "Is your name Susan?" Yes. "Do you understand that I will not ask any trick questions on this test?" Yes. "Did you stab that woman downstairs this afternoon?" No.</p>
<p>Link<br>
<em>[via]{style="font-style:italic"}</em> [Boing Boing]</p>
<p>:::</p>
</blockquote>IT Hiring Up, Budgets A Mixed Bag2005-03-11T13:38:00-10:002005-03-11T13:38:00-10:00larrytag:knowing.net,2005-03-11:/posts/2005/03/it-hiring-up-budgets-a-mixed-bag/<p>According to the Feb 2005 CACM, IT hiring is expected to grow 1st quarter of '05. Hottest talents are networking, information security, and user-support. Firewall admin and wireless network management are particularly hot. On the other hand, IT budgets are a mixed bag, with 50% of corporate budgets increasing expenditures …</p><p>According to the Feb 2005 CACM, IT hiring is expected to grow 1st quarter of '05. Hottest talents are networking, information security, and user-support. Firewall admin and wireless network management are particularly hot. On the other hand, IT budgets are a mixed bag, with 50% of corporate budgets increasing expenditures, but a significant number (14% for software, 20% for hardware) are planning "sizeable cuts." Factoid: Senior management chose "wireless applications" as their top "wish list" item. (Middle management wanted increased staff salaries and staff wanted training.)</p>Measuring Magazine Success2005-03-10T10:29:00-10:002005-03-10T10:29:00-10:00larrytag:knowing.net,2005-03-10:/posts/2005/03/measuring-magazine-success/<p>In a comment, Scott pointed out that <em>Dr. Dobb's</em> probably has a higher “ad ratio” (advertising space as a percent of total pages printed) than <em>SD Times</em>. I would think so, but it's not necessarily a good measure of magazine success. Pardon the return to days of yore when I …</p><p>In a comment, Scott pointed out that <em>Dr. Dobb's</em> probably has a higher “ad ratio” (advertising space as a percent of total pages printed) than <em>SD Times</em>. I would think so, but it's not necessarily a good measure of magazine success. Pardon the return to days of yore when I was in publishing...</p>
<p>Anyway, ad ratios are controlled by adjusting the number of pages in the magazine. Back in the late 80s, <em>Dr. Dobb's</em> and <em>Computer Language</em> ran well over a hundred pages every month at ad ratios of 40-50% (IIRC). I think <em>Computer Language</em>'s biggest issue was 160 pages and I'm going to guess that Dobb's went over 200 on occasion.</p>
<p>But... <em>Computer Language</em> was <em>much</em> more profitable. <em>Dobb's</em> had a bigger and better paid staff while at <em>Computer Language</em> we had a small staff of people in their mid-20s. Miller Freeman was known in the trade as the place that paid terribly and worked the hell out the staff but had tremendous opportunities (I was hired as Technical Editor of <em>Computer Language</em> when I was a 25-year-old and became Editor-in-Chief less than a year later). Our group did so well in the market that Miller Freeman bought M&T Publishing, the publisher of <em>Dr. Dobb's</em>. (And then, in classic “it's nothing personal, it's business,“ fashion, they gave <em>Dobb</em>'s the entire subscription base of <em>Computer Language</em> to boost its circulation. Thirteen years later and I'm still pissed off about it. 60,000 people who paid to read <em>my</em> magazine got <em>Dobb's</em> instead. Oh, and a subscription form for a new magazine called <em>Software Development</em> “from the team that brought you <em>Computer Language.“</em>) </p>
<p>You also can't judge a magazine's editorial success by circulation numbers, since circulation is essentially bought. Back in the early 90s, it cost about \<span class="math">\(30 in marketing to get a new paid subscriber (at a subscription rate of \\)</span>24 or less!). For “controlled circulation“ magazines (those for which you fill out a form to receive a free subscription) circulation is, of course, even more easily controlled by marketing decisions.</p>
<p>If you want to judge a magazine's <em>editorial</em> success, the number to know is the resubscription rate, which represents a positive judgment of editorial quality (especially in a paid circulation magazine). Of course, that rate is a carefully guarded secret!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Mice with human brains coming?2005-03-09T18:03:00-10:002005-03-09T18:03:00-10:00larrytag:knowing.net,2005-03-09:/posts/2005/03/mice-with-human-brains-coming/<p>::: {.Section1}
<strong><em>*Mark Frauenfelder</em></strong><em>: Researchers at Stanford University are planning to create mice with brains made entirely of human brain cells from aborted fetuses. </em>[Via]{style="font-style:italic"}* [Boing Boing]</p>
<p>Was the name of the grant “Investigations in Pissing Off the Christian Right”?</p>
<p><strong><em>*[ ]{style=""}</em></strong>*
:::</p>SD Times Kicks Ass, Passing Dobb's In Ad Pages2005-03-09T11:35:00-10:002005-03-09T11:35:00-10:00larrytag:knowing.net,2005-03-09:/posts/2005/03/sd-times-kicks-ass-passing-dobbs-in-ad-pages/<p><a href="https://sdtimes.com/">SD Times </a>gained 2nd place in advertising pages among “Technical/Developer“ publications in 2004, behind only MSDN Magazine. MSDN had 669.5 advertising pages, SD Times had 553.25, while Dr. Dobb's (the perennial frontrunner among independent publications) had but 499.08. (Info from Competitive Media Reporting, formerly AdScope).</p>
<p>Does …</p><p><a href="https://sdtimes.com/">SD Times </a>gained 2nd place in advertising pages among “Technical/Developer“ publications in 2004, behind only MSDN Magazine. MSDN had 669.5 advertising pages, SD Times had 553.25, while Dr. Dobb's (the perennial frontrunner among independent publications) had but 499.08. (Info from Competitive Media Reporting, formerly AdScope).</p>
<p>Does this mean a raise for me? You bet it doesn't.</p>Fun with threads2005-03-09T07:35:00-10:002005-03-09T07:35:00-10:00larrytag:knowing.net,2005-03-09:/posts/2005/03/fun-with-threads/<p>::: {.Section1}</p>
<blockquote>
<p>Whenever I run into a programming problem that doesn't have an immediately obvious solution, the first thing I do is put the error into google …. This approach rarely works for tablet problems - there just aren't enough developers operating at an advanced level. ….</p>
<p>One thing that can make working with …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>Whenever I run into a programming problem that doesn't have an immediately obvious solution, the first thing I do is put the error into google …. This approach rarely works for tablet problems - there just aren't enough developers operating at an advanced level. ….</p>
<p>One thing that can make working with the Real-time stylus API challenging is that you need to be very aware of what thread things are happening on… <em>[via]{style="FONT-STYLE: italic"}</em> [Tom Clarkson's Blog]</p>
<p>I’m really enjoying Tom Clarkson’s blog. These two quotes come from two closely-spaced posts that cropped up the day after I added the following comments in my own testing code:</p>
<p>``` {.MsoNormal style="TEXT-ALIGN: justify"}
/*
* When RTS is added to renderMesh, Form.Close() throws COM Exception. KB sez:</p>
<ul>
<li>COM Exception: Automation clients are required by COM to process input-synchronous calls without interruption, </li>
<li>and therefore are prevented from making outgoing Automation calls while processing such messages.</li>
<li>Hmmmm....</li>
<li>Causes redlight in test suite, of course, but functionality is actually still okay.</li>
<li>Hmmm....</li>
<li>Commenting out the addition of plugins to RTS doesn't end the problem.</li>
<li>Setting Enabled = false ends the problem.</li>
<li>Hmmm....</li>
<li>Idiot! frm.Close() was being called from another thread.</li>
<li>Solution as simple as frm.Invoke();
```</li>
</ul>
<p>``` {.ngrelatedlinks style="MARGIN-LEFT: -0.5in"}</p>
<p>```
:::</p>
</blockquote>The JavaOne drinking game!2005-03-09T07:30:00-10:002005-03-09T07:30:00-10:00larrytag:knowing.net,2005-03-09:/posts/2005/03/the-javaone-drinking-game/<p>::: {.Section1}
Well, this’ll kill you: </p>
<blockquote>
<div>
<p>From the Webmink blog:</p>
<blockquote>
<p>Along with Mary and others my session proposal for JavaOne was declined (see, working for Sun isn't the answer, Ted, maybe it's not a conspiracy against you?).</p>
</blockquote>
<p>Never said it was; just means that Sun isn't letting anyone else up …</p></div></blockquote><p>::: {.Section1}
Well, this’ll kill you: </p>
<blockquote>
<div>
<p>From the Webmink blog:</p>
<blockquote>
<p>Along with Mary and others my session proposal for JavaOne was declined (see, working for Sun isn't the answer, Ted, maybe it's not a conspiracy against you?).</p>
</blockquote>
<p>Never said it was; just means that Sun isn't letting anyone else up there to speak, either.</p>
<p>Proposal: <strong>[The JavaOne drinking game!]{style="font-weight:bold"}</strong> Every time...</p>
<ul>
<li>[... a Sun employee gives a talk]{style=""}</li>
<li>[... a JavaOne speaker derides IBM]{style=""}</li>
<li>[... a JavaOne speaker says ".NOT" or derides Microsoft (double if they claim .NET can't run anywhere but Windows, triple if they say that .NET is a proprietary technology that isn't a standard but Java is)]{style=""}</li>
<li>[... there's an EJB 3 reference]{style=""}</li>
<li>[... there's a Hibernate reference]{style=""}</li>
<li>[... there's an "AOP" reference (particularly by somebody who's not really an AOP expert *cough* Bill Burke *cough* Marc Fleury *cough*)]{style=""}</li>
<li>[... a JavaOne speaker gives a talk on J2ME]{style=""}</li>
<li>[... a JavaOne speaker says "Write-Once Run Anywhere"]{style=""}</li>
</ul>
<p>... you have to take a drink.</p>
<p>My guess is every player is smashed by lunchtime on the first day.</p>
<p>(Submit additional suggestions, and somebody reserve www.javaonedrinkinggame.com, quick!)</p>
<p>Related...</p>
</div>
<p>[The Mountain of Worthless Information]
:::</p>
</blockquote>Release Visual Basic 6.0 Source Code2005-03-09T06:51:00-10:002005-03-09T06:51:00-10:00larrytag:knowing.net,2005-03-09:/posts/2005/03/release-visual-basic-60-source-code/<p>::: {.Section1}</p>
<blockquote>
<div>
<p>Peter Provost has proposed that Microsoft react to the group of MVPs who are <a href="https://accounts.google.com/ServiceLogin?service=blogger&hl=en-US&passive=true&continue=https://www.blogger.com/blogin.g?blogspotURL%3Dhttp://rblevin.blogspot.com/2005/03/microsoft-mvps-revolt.html%26zx%3D1n0ia23cm6n27" title="http://rblevin.blogspot.com/2005/03/microsoft-mvps-revolt.html">petitioning Microsoft to re-establish development and support of VB6</a>, by releasing the source code. Microsoft doesn’t want VB6, there’s a vocal fanbase of programmers… why not? It would be epic.</p>
<p>As Peter points …</p></div></blockquote><p>::: {.Section1}</p>
<blockquote>
<div>
<p>Peter Provost has proposed that Microsoft react to the group of MVPs who are <a href="https://accounts.google.com/ServiceLogin?service=blogger&hl=en-US&passive=true&continue=https://www.blogger.com/blogin.g?blogspotURL%3Dhttp://rblevin.blogspot.com/2005/03/microsoft-mvps-revolt.html%26zx%3D1n0ia23cm6n27" title="http://rblevin.blogspot.com/2005/03/microsoft-mvps-revolt.html">petitioning Microsoft to re-establish development and support of VB6</a>, by releasing the source code. Microsoft doesn’t want VB6, there’s a vocal fanbase of programmers… why not? It would be epic.</p>
<p>As Peter points out, at least part of the problem is that both the VB6 compiler (including the compiler of all Microsoft’s languages, including C# and VB.NET) and the environment is written, not in the target language itself, but in C++. Since VB6 represents close to 10 years of code evolution, and the language is explicitly about making the end-users life easier (even if it means work on the compiler-writer’s part), I’m going to guess that the VB6 codebase is <em>[not]{style="font-style:italic"}</em> the several hundred thousand lines of C++ that Microsoft would like to have the world reacting to.</p>
<p>To me, the whole VB6 tempest is interesting because I never could get enthusiastic about VB and then VB.NET came along and I found myself perfectly happy to work in it.</p>
<p></div>
:::</p>
</blockquote>Neat, neat, neat2005-03-07T12:35:00-10:002005-03-07T12:35:00-10:00larrytag:knowing.net,2005-03-07:/posts/2005/03/neat-neat-neat/<p>I love Musicmatch Radio combined with OnDemand. I was just listening to “My Station” and what should come up but a band I loved when I was young but haven't heard since... Well, in the case of the Damned, not since my turntable broke in about '94. I now have …</p><p>I love Musicmatch Radio combined with OnDemand. I was just listening to “My Station” and what should come up but a band I loved when I was young but haven't heard since... Well, in the case of the Damned, not since my turntable broke in about '94. I now have a bunch of Damned songs cued up, followed by a bunch of X-Ray Spex. Sadly, MusicMatch's Stiff Little Fingers selection is pathetic.</p>Dazzled By World Wind2005-03-06T13:52:00-10:002005-03-06T13:52:00-10:00larrytag:knowing.net,2005-03-06:/posts/2005/03/dazzled-by-world-wind/<p>Wow. I'd tried World Wind in an earlier incarnation and had been frustrated by downloading problems. They've cleared those up. <a href="https://worldwind.arc.nasa.gov/">World Wind</a> is the best use of computation I've seen in a long time.</p>
<p>It appears to set itself up as a MIME handler, because when you enter a worldwind …</p><p>Wow. I'd tried World Wind in an earlier incarnation and had been frustrated by downloading problems. They've cleared those up. <a href="https://worldwind.arc.nasa.gov/">World Wind</a> is the best use of computation I've seen in a long time.</p>
<p>It appears to set itself up as a MIME handler, because when you enter a worldwind: protocol in your browser, the application spins appropriately. This can be used to create animations (even before the promised arrival of scripting). It's a .NET app, too, and when I just pointed Visual Studio at it, I got a great big list of interfaces! Sweet! Direct output to videostream here we come!</p>Free Ebooks...2005-03-04T17:51:00-10:002005-03-04T17:51:00-10:00larrytag:knowing.net,2005-03-04:/posts/2005/03/free-ebooks/<blockquote>
<p><a href="https://www.apress.com/us" title="http://www.apress.com/">Apress</a> has decided to make some of their back catalog available as free downloadable e-books. <em>[Via]{style="FONT-STYLE: italic"}</em> [Eric Gunnerson's C# Compendium]</p>
</blockquote>
<p>Andrew Troelsen’s “COM and .NET Interoperability” is the cream of the crop. Other texts are “Programming VB.NET: A Guide for Experienced Programmers,” by Cornell and …</p><blockquote>
<p><a href="https://www.apress.com/us" title="http://www.apress.com/">Apress</a> has decided to make some of their back catalog available as free downloadable e-books. <em>[Via]{style="FONT-STYLE: italic"}</em> [Eric Gunnerson's C# Compendium]</p>
</blockquote>
<p>Andrew Troelsen’s “COM and .NET Interoperability” is the cream of the crop. Other texts are “Programming VB.NET: A Guide for Experienced Programmers,” by Cornell and Morrison; “Writing Perl Modules for CPAN,” by Sam Tregar; “Dissecting A C# Application: Inside SharpDevelop;” and “A Programmer’s Introduction to PHP 4.0”</p>I Want My DeltaVees!2005-03-04T17:45:00-10:002005-03-04T17:45:00-10:00larrytag:knowing.net,2005-03-04:/posts/2005/03/i-want-my-deltavees/<p>::: {.Section1}
Oh, man! These guys have figured out how to tap into the accelerometers inside their Apples! And here, my M200 sits with its accelerometers locked away behind undocumented device drivers…</p>
<blockquote>
<div>
<p>Apple's <a href="https://www.apple.com/mac/" title="Mac laptops.">PowerBook</a> laptops now have a little accelerometer inside that's used to protect the hard drive if you drop …</p></div></blockquote><p>::: {.Section1}
Oh, man! These guys have figured out how to tap into the accelerometers inside their Apples! And here, my M200 sits with its accelerometers locked away behind undocumented device drivers…</p>
<blockquote>
<div>
<p>Apple's <a href="https://www.apple.com/mac/" title="Mac laptops.">PowerBook</a> laptops now have a little accelerometer inside that's used to protect the hard drive if you drop it (it notices the sudden speed increase and parks the drive heads). This guy has found a way to <a href="http://osxbook.com/software/sms/" title="Uses the Mac accelerometer to make stable windows, etc.">tap into the sudden motion sensor</a>, and Timo was just round my house with his brand new PowerBook, so we spent a few minutes of looking at the stuff on that site (a window that rotates so it's always the right way up). Then we saw there was a little tool that gives you the angle of the machine in three dimensions. Aha. (<a href="http://interconnected.org/home/2005/01/05/i_got_the_wave" title="Interconnected archives, 2005-01-05, on my Nokia 3220 phone with wave messaging.">I love accelerometers</a>.)</p>
</div>
<p>After a few more minutes, we had the tilt sensor controlling Timo's music. <em>[Via]{style="FONT-STYLE: italic"}</em> [<a href="http://interconnected.org/home/2005/03/04/apples_powerbook">Interconnected</a>]
:::</p>
</blockquote>My next sport...2005-03-04T17:42:00-10:002005-03-04T17:42:00-10:00larrytag:knowing.net,2005-03-04:/posts/2005/03/my-next-sport/<p>Eric Gunnerson links to a video of “tree-skijumping” in which Norwegians, um, skijump into a tree. Oh, what fond memories of “shrub-skateboardstopping” and “bush-swingleaping” this brings back. When I was a kid, I relied on the gentle stopping power of foliage in all my favorite sports. And I have the …</p><p>Eric Gunnerson links to a video of “tree-skijumping” in which Norwegians, um, skijump into a tree. Oh, what fond memories of “shrub-skateboardstopping” and “bush-swingleaping” this brings back. When I was a kid, I relied on the gentle stopping power of foliage in all my favorite sports. And I have the scars to prove it!</p>
<p>“Shrub-skateboardstopping” was especially fun. I remember the baffled fury on the face of the homeowner when he emerged one day, finally realizing what had been troubling his hedge, which faced our skateboarding hill. </p>Tivo HME SDK, Amazon, and Disappointment2005-03-04T16:07:00-10:002005-03-04T16:07:00-10:00larrytag:knowing.net,2005-03-04:/posts/2005/03/tivo-hme-sdk-amazon-and-disappointment/<p>So I says to myself “You know what would rock?”:</p>
<ol>
<li>You're watching Oprah on Tivo (yeah, I know, but bear with me)</li>
<li>You click your little Thumbs-Up a couple times (still bearing with me, right?)</li>
<li>And the Tivo says “People watching this episode of Oprah have bought: 'My Heroic Struggle …</li></ol><p>So I says to myself “You know what would rock?”:</p>
<ol>
<li>You're watching Oprah on Tivo (yeah, I know, but bear with me)</li>
<li>You click your little Thumbs-Up a couple times (still bearing with me, right?)</li>
<li>And the Tivo says “People watching this episode of Oprah have bought: 'My Heroic Struggle: An Uplifting Story of Deep Inner Spirituality'. Purchase from Amazon.com?“</li>
<li>You click your little Thumbs-Up and:<ol>
<li>Amazon gets the order and,</li>
<li><em>(this is the part that rocks)</em> <strong>I get the affiliate fee</strong> (now you get why the scenario involves Oprah)</li>
</ol>
</li>
</ol>
<p>(Obviously, the <em>first</em> person to buy something associated with an episode uses the little Tivo on-screen keyboard and has a frustrating time. But <em>all subsequent people</em> get the “People watching...bought...” logic, which is a nice win, especially since in Tivoland, “subsequent“ lasts for days and weeks and all repeats forever after.)</p>
<p>Okay, so it's ob-hack, but I thought I'd just spell it out. So I says to myself -- “To the Tivo SDK download site! Before someone else does this!” The Tivo HME SDK is Java-only, so I fired up my favorite IDE in the whole world (JetBrains' IDEA) and wrote a “Hello, World” in five minutes and...</p>
<p>Turns out the Tivo HME SDK is quite limited: it doesn't actually give you any access to data <em>on</em> the Tivo nor does it let you (for instance) put an icon on the screen over a videostream. Essentially, you write server programs that run on your desktop computer and data from these can be served to your Tivo and you can use your Tivo remote to interact with that server-side program. So, for instance, it's easy to put a weather report on your screen or, for that matter, a stand-alone Amazon client. But you can't find out what show the person is currently watching, which is the “killer” in this particular killer app.</p>
<p>Too bad. I wonder if I could do it in XP Media Edition? It would <em>rock</em>.</p>
<p>P.S. Tivo's Desktop component runs as a process called TivoServer and it oftens goes out-of-whack and consumes 99% of CPU time. Bad process! Bad!</p>Tivo HME SDK, Amazon, and Disappointment2005-03-04T15:59:00-10:002005-03-04T15:59:00-10:00larrytag:knowing.net,2005-03-04:/posts/2005/03/tivo-hme-sdk-amazon-and-disappointment-2/<p>Permalink:</p>
<p>http://www.knowing.net/PermaLink.aspx?guid=7b415b24-a006-4f7a-a3c3-91197148e87a</p>Python Love2005-03-04T07:42:00-10:002005-03-04T07:42:00-10:00larrytag:knowing.net,2005-03-04:/posts/2005/03/python-love/<p>::: {.Section1}
Rory picks up on the fact that Python isn’t really object-oriented and wonders if it’s overrated. (But, for Rory, he does so in a very tentative manner. He hardly uses the words “sucks” at all.) Python gets a lot of buzz, but Rory’s criticisms are right …</p><p>::: {.Section1}
Rory picks up on the fact that Python isn’t really object-oriented and wonders if it’s overrated. (But, for Rory, he does so in a very tentative manner. He hardly uses the words “sucks” at all.) Python gets a lot of buzz, but Rory’s criticisms are right on. Ruby is better as a language, but doesn’t have the tools. Since what I’m looking for in a scripting language is purely practical, I’m planning on sticking with Python for the next couple of years. As a matter of fact, I’ve got the Python grammar sitting in one of “Maybe/Someday” folders, right alongside a bunch of OneNote pages about creating an alternative shell for Monad / Windows Shell.
:::</p>I Talk Indigo2005-03-04T07:16:00-10:002005-03-04T07:16:00-10:00larrytag:knowing.net,2005-03-04:/posts/2005/03/i-talk-indigo/<p>My latest column for SD Times praises Indigo's programming model and teachability, but questions some of the areas, such as typing and visibility, where it conflicts with .NET. Did you know that you can expose <strong>private</strong> methods as public Indigo services? Can that be a good idea?</p>Microsoft demos Weasley's clock from Harry Potter2005-03-03T17:02:00-10:002005-03-03T17:02:00-10:00larrytag:knowing.net,2005-03-03:/posts/2005/03/microsoft-demos-weasleys-clock-from-harry-potter/<p>::: {.Section1}</p>
<blockquote>
<div>
<p><strong><em>*[Cory Doctorow]{style=""}</em></strong>*: \< ![if !vml]> <img alt="" height="173" src="https://craphound.com/images/msrweasleyclock.jpg" width="193">\< ![endif]>Simon sez, "At this year's internal Techfest Microsoft Research Cambridge demonstrated a clock surprisingly similar to that on the wall of the Weasley household in the Harry Potter films. I guess it only goes to show: any sufficiently advanced technology is indistinguishable from …</p></div></blockquote><p>::: {.Section1}</p>
<blockquote>
<div>
<p><strong><em>*[Cory Doctorow]{style=""}</em></strong>*: \< ![if !vml]> <img alt="" height="173" src="https://craphound.com/images/msrweasleyclock.jpg" width="193">\< ![endif]>Simon sez, "At this year's internal Techfest Microsoft Research Cambridge demonstrated a clock surprisingly similar to that on the wall of the Weasley household in the Harry Potter films. I guess it only goes to show: any sufficiently advanced technology is indistinguishable from magic!" Link </p>
</div>
<p><em>[Via]{style=";font-style:italic"}</em> [Boing Boing]</p>
<p>[Well, isn’t that clever! The comments on the page discussing it are all huffy about MS “stealing” the idea from JK Rowling. Hmm… how hard would this be to turn into a Konfabulator widget tied into IM?]{style=""}
:::</p>
</blockquote>Catastrophic Success2005-03-01T20:12:00-10:002005-03-01T20:12:00-10:00larrytag:knowing.net,2005-03-01:/posts/2005/03/catastrophic-success/<p>::: {.Section1}</p>
<blockquote>
<p>[If any company spent <strong>5 years</strong> developing a browser, and only managed to capture 5% of the market, I think the industry would be analyzine what went wrong. Firefox, <a href="https://www.informationweek.com/firefox-continues-to-chip-away-at-ies-share/d/d-id/1030704" title="http://www.informationweek.com/story/showArticle.jhtml?articleID=60404066">enjoy the honeymoon</a>... <em>[via]{style="font-style:italic"}</em><br>
[<a href="https://swigartconsulting.blogs.com/tech_blender/2005/02/catastrophic_su.html">Tech Blender</a>]]{style=""}</p>
<p>Heh. Open Source definitely gets a… well, not a “free …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[If any company spent <strong>5 years</strong> developing a browser, and only managed to capture 5% of the market, I think the industry would be analyzine what went wrong. Firefox, <a href="https://www.informationweek.com/firefox-continues-to-chip-away-at-ies-share/d/d-id/1030704" title="http://www.informationweek.com/story/showArticle.jhtml?articleID=60404066">enjoy the honeymoon</a>... <em>[via]{style="font-style:italic"}</em><br>
[<a href="https://swigartconsulting.blogs.com/tech_blender/2005/02/catastrophic_su.html">Tech Blender</a>]]{style=""}</p>
<p>Heh. Open Source definitely gets a… well, not a “free ride,” perhaps…. But a reduced fare.
:::</p>
</blockquote>Why no Microsoft Reader for Smartphone?2005-03-01T20:06:00-10:002005-03-01T20:06:00-10:00larrytag:knowing.net,2005-03-01:/posts/2005/03/why-no-microsoft-reader-for-smartphone/<p>::: {.Section1}
Rory wants Reader for his Audiovox SMT5600. Me, too!
:::</p>Geek Notes 2005-02-232005-03-01T20:02:00-10:002005-03-01T20:02:00-10:00larrytag:knowing.net,2005-03-01:/posts/2005/03/geek-notes-2005-02-23/<p>::: {.Section1}</p>
<blockquote>
<p>[ XSLTO – Wow. This is a much friendlier way to do XSLT – in C#. I’m with Craig on this one… less XML-as-a-programming-language. <em>[Via]{style="font-style:italic"}</em> [Geek Noise]]{style=""}</p>
<p>Suh-weet!
:::</p>
</blockquote>Plasmonics, Schmasmonics!2005-03-01T15:26:00-10:002005-03-01T15:26:00-10:00larrytag:knowing.net,2005-03-01:/posts/2005/03/plasmonics-schmasmonics/<p>Everyone is all abuzz about plasmonic invisibility, which renders things invisible by preventing them from scattering light. But if you actually <a href="https://arxiv.org/abs/cond-mat/0502336">read</a> the preprint it's predictably far from a Romulan cloaking device. First, it only cloaks objects that are about the same size as the wavelength of the radiation hitting …</p><p>Everyone is all abuzz about plasmonic invisibility, which renders things invisible by preventing them from scattering light. But if you actually <a href="https://arxiv.org/abs/cond-mat/0502336">read</a> the preprint it's predictably far from a Romulan cloaking device. First, it only cloaks objects that are about the same size as the wavelength of the radiation hitting it! So, uh, we can cloak objects roughly 400 to 700 nanometers in length! Gee, we can make oxygen atoms invisible! Alright! Oh, but wait a second, limitation number 2 is that what it does is prevent scattering -- if the object is backlit you'll see it. So we can hide atoms in a dark room! Oh, and it only works with a single wavelength (but I bet they can figure out a way around that, so I'm not even going to consider it a problem.)</p>
<p>The paper does not speak to whether cloaked objects can fire energy weapons, which is the traditional shortcoming of these sorts of things.</p>
<p>Oh, but you just <em>know</em> that these guys like to talk loudly in restaurants about “that plasmonic invisibility device we've been working on.”</p>Google Maps Hacking Wiki2005-03-01T09:29:00-10:002005-03-01T09:29:00-10:00larrytag:knowing.net,2005-03-01:/posts/2005/03/google-maps-hacking-wiki/<p>There's a wiki for sharing tricks for hacking Google Maps. Dotted IP for the address, so we'll see how long it stays up, but for now...</p>
<p>God. Ever have one of those weeks when you think <em>one thing</em> is going to take, like half a day, and then there it …</p><p>There's a wiki for sharing tricks for hacking Google Maps. Dotted IP for the address, so we'll see how long it stays up, but for now...</p>
<p>God. Ever have one of those weeks when you think <em>one thing</em> is going to take, like half a day, and then there it is, <em>Tuesday</em> of the next week and you find <em>yet another obstacle?</em></p>Code metric tools2005-03-01T07:43:00-10:002005-03-01T07:43:00-10:00larrytag:knowing.net,2005-03-01:/posts/2005/03/code-metric-tools/<p>::: {.Section1}
Eric Gunnerson is listing tools that provide code metrics for .NET (check the comments, too). As a development manager, I always wanted to like code metrics, thinking they could give me insight into a codebase I couldn’t stay intimately familiar with. However, most developers don’t like them …</p><p>::: {.Section1}
Eric Gunnerson is listing tools that provide code metrics for .NET (check the comments, too). As a development manager, I always wanted to like code metrics, thinking they could give me insight into a codebase I couldn’t stay intimately familiar with. However, most developers don’t like them, fearing they’ll be used as simplistic measures of progress. Another problem that I found using them in practice is that I think they must be integrated into the version control process, and the hooks for that sort of behavior are relatively recent.</p>
<p>While gathering <em>[quality]{style="FONT-STYLE: italic"}</em> metrics is definitely a best practice, I haven’t seen the evidence that gathering <em>[structural]{style="FONT-STYLE: italic"}</em> metrics is similarly beneficial. Still, I do think they <em>[can]{style="FONT-STYLE: italic"}</em> help with comprehension and perhaps give insight into areas of the codebase where problems are likely to occur.</p>
<p>P.S. Eric also links to this incredibly helpful mapping of Win32 to .NET API calls.
:::</p>Classic cartoon themes as MP3s2005-02-28T18:53:00-10:002005-02-28T18:53:00-10:00larrytag:knowing.net,2005-02-28:/posts/2005/02/classic-cartoon-themes-as-mp3s/<blockquote>
<p>Mike's Classic Cartoon Themes and Images has downloadable music from cartoons old and new <a href="http://melaman2.com/cartoons/index2.html" title="http://melaman2.com/cartoons/index2.html">Link</a> <em>[via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</blockquote>
<p>The unbelievable thing is that I remember, like, <em>all</em> of the cartoons that debuted from 5 years before my birth to those that debuted when I was in Junior …</p><blockquote>
<p>Mike's Classic Cartoon Themes and Images has downloadable music from cartoons old and new <a href="http://melaman2.com/cartoons/index2.html" title="http://melaman2.com/cartoons/index2.html">Link</a> <em>[via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</blockquote>
<p>The unbelievable thing is that I remember, like, <em>all</em> of the cartoons that debuted from 5 years before my birth to those that debuted when I was in Junior High. All of them. Wait... “unbelievable” isn't the word...“pathetic.” Yeah, that’s the word.)</p>7 +- 2 Urban Legend2005-02-28T18:19:00-10:002005-02-28T18:19:00-10:00larrytag:knowing.net,2005-02-28:/posts/2005/02/7-2-urban-legend/<p>::: {.Section1}</p>
<blockquote>
<p>One thing that always triggers off a mini-rant in my mind is misuse of 7 +- 2 urban legend... <em>via</em> [<a href="http://www.cookcomputing.com/blog/archives/000431.html">Cook Computing</a>]</p>
</blockquote>
<p>Me too. The part that drives me crazy is that people think it has something to do with menu design. Not even close.
:::</p>Annotating the planet2005-02-27T19:04:00-10:002005-02-27T19:04:00-10:00larrytag:knowing.net,2005-02-27:/posts/2005/02/annotating-the-planet/<p>Jon Udell's walking tour / GPS / Google maps screencast is absolutely stunning. I have GPS / photo montages locked up in proprietary software (DeLorme mapping software), but this is incredibly inspiring. I haven't read his links on how he actually built it -- I can't wait to start doing something similar for the …</p><p>Jon Udell's walking tour / GPS / Google maps screencast is absolutely stunning. I have GPS / photo montages locked up in proprietary software (DeLorme mapping software), but this is incredibly inspiring. I haven't read his links on how he actually built it -- I can't wait to start doing something similar for the Big Island of Hawaii.</p>Good movie for Larry Summers2005-02-23T15:20:00-10:002005-02-23T15:20:00-10:00larrytag:knowing.net,2005-02-23:/posts/2005/02/good-movie-for-larry-summers/<p>::: {.Section1}
Tina and I saw “Aliens of the Deep” when we were in San Francisco. We liked it more than Greenspun, but his description of the climax as “big-eyed snails who’ve built themselves an Indian casino” is perfect:</p>
<blockquote>
<p>James Cameron, director of the movie Titanic, goes 3000' to 10 …</p></blockquote><p>::: {.Section1}
Tina and I saw “Aliens of the Deep” when we were in San Francisco. We liked it more than Greenspun, but his description of the climax as “big-eyed snails who’ve built themselves an Indian casino” is perfect:</p>
<blockquote>
<p>James Cameron, director of the movie Titanic, goes 3000' to 10,000' down into the Atlantic and Pacific oceans to film the unusual forms of life living next to thermal vents. Precious few details are offered about the animals in question…. no math is done and you never learn anything about the phenomenon studied except "this is really cool" or "this is really beautiful". <em>[Via]{style="font-style:italic"}</em> [Philip Greenspun Weblog]
:::</p>
</blockquote>Comparing Collaboration Technologies2005-02-23T15:14:00-10:002005-02-23T15:14:00-10:00larrytag:knowing.net,2005-02-23:/posts/2005/02/comparing-collaboration-technologies/<p>::: {.Section1}</p>
<blockquote>
<p><a href="https://www.opensourcecms.com/" title="http://opensourcecms.com/">This site is a candy store</a>. OpenSourceCMS gathers together a large number of CMS-ish apps (classic CMS, Wikis, Blogs, Forums and more) into one testable site. The server gets rebuilt every two hours, but in that time, you can try out a number of apps, including such fan favourites …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p><a href="https://www.opensourcecms.com/" title="http://opensourcecms.com/">This site is a candy store</a>. OpenSourceCMS gathers together a large number of CMS-ish apps (classic CMS, Wikis, Blogs, Forums and more) into one testable site. The server gets rebuilt every two hours, but in that time, you can try out a number of apps, including such fan favourites as phpBB, WordPress, php-Nuke and many others. <em>[Via]{style="font-style:italic"}</em> [Visual ActiveKent Sharkey .NET SE 3.11]</p>
<p>This could be handy if I ever get around to updating all my sites, like I’ve been trying to do for five months.
:::</p>
</blockquote>How to Sell Your Book, CD, or DVD on Amazon2005-02-23T14:52:00-10:002005-02-23T14:52:00-10:00larrytag:knowing.net,2005-02-23:/posts/2005/02/how-to-sell-your-book-cd-or-dvd-on-amazon/<p>[ This link does a good job of detailing the steps necessary to sell on Amazon, which basically boils down to “get a UPC and a barcode: []{lang="en-us"}<a href="https://kk.org/cooltools/how-to-sell-you-1/">[[Cool Tools]{.underline}]{lang="en-us"}</a>[]]{lang="en-us"}</p>IronPython Resurfacing?2005-02-23T09:59:00-10:002005-02-23T09:59:00-10:00larrytag:knowing.net,2005-02-23:/posts/2005/02/ironpython-resurfacing/<p>\<</p>
<p>blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'></p>
<p>[T]he PyCon 2005 keynote session Python on the .NET Platform on Wednesday March 23rd will hopefully coincide with the release a much more complete implementation. <em>[Via]{style="font-style:italic"}</em> [<a href="Http://www.cookcomputing.com/blog/archives/000429.html">Cook Computing</a>]</p>
<p>Jim Hugunin has been MIA for months. I talked to …</p><p>\<</p>
<p>blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'></p>
<p>[T]he PyCon 2005 keynote session Python on the .NET Platform on Wednesday March 23rd will hopefully coincide with the release a much more complete implementation. <em>[Via]{style="font-style:italic"}</em> [<a href="Http://www.cookcomputing.com/blog/archives/000429.html">Cook Computing</a>]</p>
<p>Jim Hugunin has been MIA for months. I talked to John Montgomery a few weeks back, who swore that Hugunin was still alive and active. (I got so worked up in the discussion with Montgomery that I said “If you don’t put a Python syntax shell together for Monad, I will!” and he responded “Promise?” Yeah, that’ll teach me. On the other hand, I have to say that writing a shell is terribly appealing to me – it’s about the most pragmatic thing a language geek can do.)</p>Referral Spamming2005-02-17T08:08:00-10:002005-02-17T08:08:00-10:00larrytag:knowing.net,2005-02-17:/posts/2005/02/referral-spamming/<p>I was just looking through my server logs to try to see what kind of searches were bringing people on the site. Instead, I saw a whole bunch of inbound links from a particular high-level domain that apparently teaches people how to play poker. Doesn't make sense; I like poker …</p><p>I was just looking through my server logs to try to see what kind of searches were bringing people on the site. Instead, I saw a whole bunch of inbound links from a particular high-level domain that apparently teaches people how to play poker. Doesn't make sense; I like poker, but there's no way this blog should be a poker-player's destination. It turns out that I am being "referral spammed." Some blogs automatically publish lists of referrers (that is, inbound links that have been followed). If I were to be do so, I would be publishing links to this particular poker playing site and thus driving up its PageRank.</p>
<p>I find it interesting that I haven't yet been discovered by the comment spammers, and my referral spam appears to be limited to just this one high-level domain. I imagine that once you get on a "vulnerable" list, it's all over... If so, this would argue <em>for</em> the efficacy of "nofollow." Presumably, if you managed to implement "nofollow" <em>before</em> getting on a list, you might not be marked as vulnerable.</p>Easy way to draw traffic2005-02-17T06:35:00-10:002005-02-17T06:35:00-10:00larrytag:knowing.net,2005-02-17:/posts/2005/02/easy-way-to-draw-traffic/<blockquote>
<p>Engadget columnist Ross Rubin declares the death of pen computing.</p>
<p>The premise of the column is that pen computing doesn't add enough value. There <em>[is]{style="FONT-STYLE: italic"}</em> value the article claims in diagramming and forms--but this just isn't enough to justify the expensive of providing one. Just use a …</p></blockquote><blockquote>
<p>Engadget columnist Ross Rubin declares the death of pen computing.</p>
<p>The premise of the column is that pen computing doesn't add enough value. There <em>[is]{style="FONT-STYLE: italic"}</em> value the article claims in diagramming and forms--but this just isn't enough to justify the expensive of providing one. Just use a separate digitizing pad if you must …. reminds me of a comment Howard Elias made last night at the DEMO Innovation dinner. He was being recognized for his contributions in introducing the first multimedia PC in 1991 at DEMO. At the time he was challenged: Why does a computer need sound? It was a good question at the time. Never much of a gamer myself, that's what I thought at the time too. But ten plus years later it seems out of place….I was still a laggard in terms of having a microphone equipped computer. At the time, I made the mistake of correlating the value of a microphone with speech recognition--which didn't work for me well enough to be useful. But now with VoIP and apps like Skype my view has changed. I want a microphone with all my computers so I can talk with people. No speech recognition required. I wouldn't buy a notebook or Tablet without a microphone--or better yet a microphone array--today…. <em>[Via]{style="FONT-STYLE: italic"}</em> [Incremental Blogger]</p>
</blockquote>
<p>Additional insights in the original post, but the point about the microphone is so spot on that it’s worth highlighting. The delay between early adopters and majority, the difference between the expected use (by the early adopters) and the killer app, the critical mass necessary before the killer app <em>could</em> be created, and even the way that the implementation evolves (the first mike on a computer I ever used was something that came from a Radio Shak tape recorder, then came the era of the cheap plastic mike, and now we're in the era of the noise-cancelling headset and array mike).</p>
<p>At this point, I think we know that <em>writing</em> per se won't be the killer app of the Tablet PC (I've written entire columns on the Tablet and even I <em>mostly</em> write using a keyboard). I'm going to say the same thing is true for drawing, even though I am vastly less competent to talk about what appeals to professional graphics people. I still think that the day Word supports standard proofing marks (not just ink comments, but “Yank this...reverse this order...insert text here”) is the day the Tablet becomes mainstream. (A day that will almost certainly coincide with the day that one can create an Excel formula in ink!)</p>
<p>\<</p>
<p>p class=MsoNormal> On the other hand, I also feel that the real killer app of the Tablet is something that we early adopters haven't anticipated. My current suspicion is that we're too focused on static aspects of “pen and ink,” that the things we think about today are too focused on X and Y coordinates, when the great advantage of the stylus over the mouse may very well be that it provides a much richer data stream -- not just X, Y, and time, but pressure and tilt.</p>TabletPC Wiki Article Up2005-02-17T06:25:00-10:002005-02-17T06:25:00-10:00larrytag:knowing.net,2005-02-17:/posts/2005/02/tabletpc-wiki-article-up/<p>My latest for DevX, on developing an ink-based Wiki, is <a href="https://www.developer.com/">now available</a>.</p>Remote Battery Vampire2005-02-15T10:03:00-10:002005-02-15T10:03:00-10:00larrytag:knowing.net,2005-02-15:/posts/2005/02/remote-battery-vampire/<p>I was thinking about the near-future day when the guy in front of me on the plane not only lowers his seat into my lap five minutes into the flight but does so while <a href="https://com.com/results?q=news">beginning a six-hour conversation on his cell phone</a> or VOIP connection. Are <a href="https://www.amazing1.com/emp.html">small but potent electromagnetic …</a></p><p>I was thinking about the near-future day when the guy in front of me on the plane not only lowers his seat into my lap five minutes into the flight but does so while <a href="https://com.com/results?q=news">beginning a six-hour conversation on his cell phone</a> or VOIP connection. Are <a href="https://www.amazing1.com/emp.html">small but potent electromagnetic pulse generators</a> forbidden on commercial flights? I mean if you can't use them in front of row 10 or whatever lest the compasses in the cockpit point backwards, I would totally understand. But, you know, the cell phone thing is going to be <em>really annoying</em><strong>.</strong></p>Latest SD Times Column Is Up2005-02-15T07:24:00-10:002005-02-15T07:24:00-10:00larrytag:knowing.net,2005-02-15:/posts/2005/02/latest-sd-times-column-is-up/<p>My latest column, on interviewing at Microsoft and laziness, is up at SD Times.</p>Delphi Turns 102005-02-14T07:29:00-10:002005-02-14T07:29:00-10:00larrytag:knowing.net,2005-02-14:/posts/2005/02/delphi-turns-10/<p>According to David Intersimone, Delphi 1.0 launched 10 years ago today at the Software Development conference. We're currently evaluating Delphi 2005 for this year's Jolt Award for "Languages and Development Environments." Other finalists are: CodeRush, Eclipse, IDEA, JBoss AOP, Python, RealBasic, and Sun Java Enterprise Studio.></p>Turing machine built from model railroad2005-02-13T19:57:00-10:002005-02-13T19:57:00-10:00larrytag:knowing.net,2005-02-13:/posts/2005/02/turing-machine-built-from-model-railroad/<p>::: {.Section1}</p>
<blockquote>
<p>[A] group of art-hackers in Vienna's Museumsquartier [has built] a functional Turing machine out of model railway tracks <em>[via]{style="font-style:italic"}</em> [Boing Boing]</p>
<p>Wow. That is just insanely cool.
:::</p>
</blockquote>Arcs of Fire Adds Inkable Forums2005-02-12T09:57:00-10:002005-02-12T09:57:00-10:00larrytag:knowing.net,2005-02-12:/posts/2005/02/arcs-of-fire-adds-inkable-forums/<p>For me, the highlight of MWA was insinuating myself into the <a href="https://www.ageofempires.com/">Arcs of Fire</a> project. I'm not 100% sure that I can start talking about what I'll be doing, but I expect to get some clarification on that soon.</p>
<p>In insanely great coolness, the Arcs of Fire Website contains ink-based …</p><p>For me, the highlight of MWA was insinuating myself into the <a href="https://www.ageofempires.com/">Arcs of Fire</a> project. I'm not 100% sure that I can start talking about what I'll be doing, but I expect to get some clarification on that soon.</p>
<p>In insanely great coolness, the Arcs of Fire Website contains ink-based discussion forums, apparently powered by Community Server. In my opinion, this is a huge step forward in the ink-on-the-Web experience (sorry if I've missed other ink-based forums...).</p>
<p>Oh, and the Tablet PC party at Varnish was excellent. I've been to <em>way</em> too many conventions to get excited about finger-food and an open bar, but the party was filled with really interesting, really positive people. And sake cosmopolitans? Them's tasty!</p>Indigo A-B-C2005-02-12T09:46:00-10:002005-02-12T09:46:00-10:00larrytag:knowing.net,2005-02-12:/posts/2005/02/indigo-a-b-c/<p>In a previous post, I mentioned Indigo's "A-B-C" programming mantra as one of the technology's greatest strengths. "A-B-C" stands for "Addressing, Binding, Contract" and is Microsoft's way of teaching the concerns of connected systems:</p>
<ul>
<li>Addressing: Where can I find the service?</li>
<li>Binding: How is the service expressed across the wire …</li></ul><p>In a previous post, I mentioned Indigo's "A-B-C" programming mantra as one of the technology's greatest strengths. "A-B-C" stands for "Addressing, Binding, Contract" and is Microsoft's way of teaching the concerns of connected systems:</p>
<ul>
<li>Addressing: Where can I find the service?</li>
<li>Binding: How is the service expressed across the wire?</li>
<li>Contract: What is the information exchange of the service?</li>
</ul>
<p>Are there other concerns in connected systems? Of course. But "A-B-C" is a great pedagogical device for approaching the programming model.</p>
<p>“Contract” is the service-oriented version of the API -- the developer's concern. “Addressing” is where the service lives on the network and is the administrator's concern. “Binding” is how the service is configured to show itself outside the process -- will it be over SOAP, MTOM, etc. Most likely the administrator's concern, but not entirely outside the realm of developer concern.</p>
<p>Why do I think this break-down of the model is important? Because it's very, very teachable. I see “A-B-C” as being crucial to one's initial experience with the technology. And I increasingly have come to believe that one's initial experience with a technology is more crucial than generally acknowledged to the technology's long-term acceptance. </p>
<p>My concerns about Indigo stem from the medium- to long-term complexity of the programming model, especially to the extent that the Indigo model conflicts with the CLR model. Did the failure of the EJB model stem from its inherent complexity or its relatively harder learning curve? If the former, then Indigo may face similar challenges. If the latter, Indigo seems to be on firmer legs.</p>Some doubts about Indigo2005-02-11T07:45:00-10:002005-02-11T07:45:00-10:00larrytag:knowing.net,2005-02-11:/posts/2005/02/some-doubts-about-indigo/<p>In general, I'm quite impressed with Indigo. I like all sorts of things about it. <strong>But</strong> I have some doubts...</p>
<p>Indigo presents a programming model that is quite different from that of the CLR. The CLR's programming model is what you might call “classic OOP.” Object's become instantiated with a …</p><p>In general, I'm quite impressed with Indigo. I like all sorts of things about it. <strong>But</strong> I have some doubts...</p>
<p>Indigo presents a programming model that is quite different from that of the CLR. The CLR's programming model is what you might call “classic OOP.” Object's become instantiated with a call to their constructor, and when no longer needed, memory is automatically reclaimed and resources are explicitly reclaimed by the class. Every field has a visibility modifier specifying what other modules can and cannot access that field. There is a Common Type System that promotes interoperability.</p>
<p>These three issues (object lifecycle, visibility, and typing) are all different in Indigo. While there may be additional issues that are also different between the CLR and Indigo, these are the big three. These are very fundamental issues; I think it's fair to say that they represent different programming models.</p>
<p>The great mistake of J2EE was that it presented a different programming model from “plain old Java.” J2EE had needless complexity and that's something that Indigo has clearly avoided (Indigo's greatest strength may be the “A-B-C” programming mantra). Nevertheless, it seems that with Indigo we have one programming model for in-process (CLR) and another model for out-of-process (Indigo). Is this necessary? Is the difference between in-process and out-of-process so fundamental, like the change between single-celled and multi-celled life, that entirely different models <em>must</em> be used?</p>
<p>Or could Indigo have done a better job creating a unified programming model? I'm not saying that the CLR's current model is “right.” In fact, <em>every</em> application faces issues of versioning and external dependencies and these issues, it seems to me, are essentially the same issues as connected systems. It's just that they don't necessarily crop up <em>the very first</em> time the app is run. Perhaps the time has come to evolve the notions embodied by the CLR.</p>
<p>If it develops that “CLR projects” and “Indigo projects” diverge in complexity and approach in the same way that “Java projects” and “J2EE projects” diverged in the late 90s, the .NET programming community could be crippled in the same way that the Java community was.</p>Jonathan Edwards' Thought-Provoking Subtextual Demo2005-02-01T12:37:00-10:002005-02-01T12:37:00-10:00larrytag:knowing.net,2005-02-01:/posts/2005/02/jonathan-edwards-thought-provoking-subtextual-demo/<p>Jonathan Edwards gives a <a href="http://www.subtext-lang.org/demo1.html">demo of subtextual</a> (17 minute stream), a programming language that is very close to the type of graph-structured language that I've been imagining for the Tablet PC. The main difference is that he's figured out how to cleanly allow his language to have cycles, which stymied …</p><p>Jonathan Edwards gives a <a href="http://www.subtext-lang.org/demo1.html">demo of subtextual</a> (17 minute stream), a programming language that is very close to the type of graph-structured language that I've been imagining for the Tablet PC. The main difference is that he's figured out how to cleanly allow his language to have cycles, which stymied me. He has a <a href="https://alarmingdevelopment.org/?p=5">manifesto</a> with which I am in complete agreement, although I'd probably emphasize different things. For instance, he seems to emphasize “copying” while I'd probably emphasize “linking” and he seems comfortable using a tree-like representation of the program while free positioning in X,Y space is an important part of the experience I envision (hinted at in the DAGDraw image).</p>Microsoftian Ponders Turning Tables On The Press2005-02-01T10:03:00-10:002005-02-01T10:03:00-10:00larrytag:knowing.net,2005-02-01:/posts/2005/02/microsoftian-ponders-turning-tables-on-the-press/<p>John Montgomery muses “Every day members of the press get to write about their interactions with Microsoft -- often interactions with me. What would happen if I blogged about my interactions with them?”</p>
<p>Naturally, as a potential target for his evaluations, I’m against it.</p>
<p>Actually, I <em>[wish]{style="font-style:italic …</em></p><p>John Montgomery muses “Every day members of the press get to write about their interactions with Microsoft -- often interactions with me. What would happen if I blogged about my interactions with them?”</p>
<p>Naturally, as a potential target for his evaluations, I’m against it.</p>
<p>Actually, I <em>[wish]{style="font-style:italic"}</em> there were more criticism of the software development press (as in critiquing, not as in “MSDN sucks because it doesn’t cover Linux!” or the knee-jerk reaction from one of John’s commentors that “The press is a bunch of liberal hacks!” – a criticism that really doesn’t seem very relevant to a discussion of InfoWorld, eWeek, and DDJ). You would be amazed at how rare it is to receive a thoughtful consideration of an article, or an editorial theme, or a direction. For instance, those who read my blog know how much I love the Tablet PC. Although I don’t write about the Tablet PC very much in my SD Times column, when I have, I’ve been over-optimistic about its reception. But no one’s ever written a letter to the Editor saying “Come on, Tablet PCs won’t dominate laptops! They’re too expensive, there’s no software, and they don’t have the marketshare to support independent development!” Too bad.</p>
<p>But what a lot of people don’t understand about the press, even the very insular world of the SD press, is that certain things that look stupid are part of the process. For instance, I had a conversation with Jack Greenfield last month about Software Factories where I pushed him to define what he <em>[undoubtedly]{style="font-style:italic"}</em> considered fundamental concepts while he clearly wanted the conversation to be at a higher level. I suspect that if he were to blog my astuteness, I’d come in fairly low. But I’m very comfortable with the questions I asked him, because industry-wide advances in software productivity don’t come from grandiose schemes, they come from details. Similarly, if I were to discuss COmega, I’d definitely circle around the details of “chords” quite a bit, while another journalist might breezily accept “Cù makes concurrent programming easy!” [ … snip an entire rant on concurrency, type systems, and other insanely important areas where there’s a huge gap between platitudes, academic theory, and industry practices…]</p>Second Pynk (Python + Ink) Article Now Available2005-02-01T08:11:00-10:002005-02-01T08:11:00-10:00larrytag:knowing.net,2005-02-01:/posts/2005/02/second-pynk-python-ink-article-now-available/<p>My second article on Pynk (my ink-based Python interactive console) is now <a href="https://www.developer.com/">available on DevX</a>.</p>
<p><img alt="" src="http://www.devx.com/assets/tabletpc/12093.gif"></p>Pen tilt and in-air Z information2005-02-01T08:00:00-10:002005-02-01T08:00:00-10:00larrytag:knowing.net,2005-02-01:/posts/2005/02/pen-tilt-and-in-air-z-information/<p>::: {.Section1}</p>
<blockquote>
<div>
<p>Casey Chesnut wants pen tilt.</p>
<p>Yep, the Tablet PC API already supports pen tilt information, but as of yet none of the hardware does. <em>[Via]{style="font-style:italic"}</em> [Incremental Blogger]</p>
<p>[Additionally, the API support “in-air Z” – how far from the digitizer surface is the stylus. Another unique capability that …</p></div></blockquote><p>::: {.Section1}</p>
<blockquote>
<div>
<p>Casey Chesnut wants pen tilt.</p>
<p>Yep, the Tablet PC API already supports pen tilt information, but as of yet none of the hardware does. <em>[Via]{style="font-style:italic"}</em> [Incremental Blogger]</p>
<p>[Additionally, the API support “in-air Z” – how far from the digitizer surface is the stylus. Another unique capability that immediately presents itself in terms of unique gameplay, but could be useful in a number of places. Oh yeah, and the M200 has freakin’ accelerometers that don’t have an SDK, so the “Tilt-A-Ball” game is not yet feasible either.]{style=""}</p>
<p></div>
:::</p>
</blockquote>Tivo to ship an SDK2005-01-31T14:23:00-10:002005-01-31T14:23:00-10:00larrytag:knowing.net,2005-01-31:/posts/2005/01/tivo-to-ship-an-sdk/<p>Apparently Tivo is <a href="https://www.msn.com/">going to open up the system to third-party development</a>. Very interesting.</p>Casey Chesnut: Genius (AND | OR) Evil ?2005-01-31T14:03:00-10:002005-01-31T14:03:00-10:00larrytag:knowing.net,2005-01-31:/posts/2005/01/casey-chesnut-genius-and-or-evil/<p>Casey Chesnut used a neural network to defeat comment-spam CAPTCHAs and used his software to auto-post a polite “Sorry, you've been 0wned, here's how I did it” comment on 90+ blogs. Apparently, some people have their comment system linked to hairs up their asses and Furor Has Erupted (tm). “He …</p><p>Casey Chesnut used a neural network to defeat comment-spam CAPTCHAs and used his software to auto-post a polite “Sorry, you've been 0wned, here's how I did it” comment on 90+ blogs. Apparently, some people have their comment system linked to hairs up their asses and Furor Has Erupted (tm). “He proved nothing! Everyone knew that this could be done!” Say some. Ummm... not so much. Recognition of pixel-based distorted shapes against a noisy background is not trivial (he says, being a guy who has reason to believe the U.S. is <em>still</em> using some neural net code of his in the latest generation of <em>mumble-mumble-mumble</em>s).</p>
<p>Neural nets, like most AI techniques, are easy to overestimate. A solution based on neural nets always involves creative preprocessing and an error-prone training and refinement process. Casey proved that it was relatively easy to extract trainable features from a particular, but fairly representative, CAPTCHA implementation. (Note to Casey critics: background grids would be trivial to preprocess out.) That seems absolutely praise-worthy to me.</p>
<p>Did he need to post to 90 blogs to prove his point? Nope. Is what he did unethical? Nope. At most, it was rude and I'm not even sure about that (I don't know who he posted to, but it certainly wouldn't be rude to anyone who had blogged about CAPTCHAs or AI or image recognition).</p>
<p>Keep going, Casey! Hey, why don't you take on continual speech recognition in noisy environments next? Everyone knows it can be done!</p>MS Internal Coding Guidelines2005-01-31T11:09:00-10:002005-01-31T11:09:00-10:00larrytag:knowing.net,2005-01-31:/posts/2005/01/ms-internal-coding-guidelines/<p>::: {.Section1}</p>
<blockquote>
<p>Internal Coding Guidelines posted by Brad Abrams <em>[via]{style="font-style:italic"}</em> [<a href="Http://www.cookcomputing.com/blog/archives/000428.html">Cook Computing</a>]</p>
<p>Not completely to my taste (if you reject Hungarian notation, why should interface names be prefixed with an “I”?), but definitely helpful.
:::</p>
</blockquote>Tablet PC Bug Fills Computer With Ink2005-01-31T10:58:00-10:002005-01-31T10:58:00-10:00larrytag:knowing.net,2005-01-31:/posts/2005/01/tablet-pc-bug-fills-computer-with-ink/<p>::: {.Section1}</p>
<blockquote>
<p>[The Register has a good piece on a bug that floods a tablet PC's memory until it conks out. Here's what they said: "The culprit is the application Tabtip.exe <em>[via]{style="font-style:italic"}</em> [Alice and Bill.com]]{style=""}</p>
<p>Sigh. The Tablet PC definitely has … issues … with memory management …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[The Register has a good piece on a bug that floods a tablet PC's memory until it conks out. Here's what they said: "The culprit is the application Tabtip.exe <em>[via]{style="font-style:italic"}</em> [Alice and Bill.com]]{style=""}</p>
<p>Sigh. The Tablet PC definitely has … issues … with memory management and threading.
:::</p>
</blockquote>Beyond the Pale2005-01-31T10:31:00-10:002005-01-31T10:31:00-10:00larrytag:knowing.net,2005-01-31:/posts/2005/01/beyond-the-pale/<p>So there I am, all smug in my 99 Nerd Score and along comes a guy who builds an Apollo Guidance Computer in his basement. Not a software <em>simulator</em>, mind you (a nerdy exercise I can at least imagine), but an actual wire-wrapped reproduction. I am but a smudge of …</p><p>So there I am, all smug in my 99 Nerd Score and along comes a guy who builds an Apollo Guidance Computer in his basement. Not a software <em>simulator</em>, mind you (a nerdy exercise I can at least imagine), but an actual wire-wrapped reproduction. I am but a smudge of Dorito dust on the fingers of His Glorious Nerd Majesty.</p>
<p>Now, there is one way that I can maintain the self-esteem that is essential to a nerd lifestyle, which is to boast of my engagement in nerdy sports like Frisbee and SCUBA diving. Most geekily, recently I've been working on being able to hold my breath for a really, really long time, a "sport" where high perfomance relies on not moving.</p>Frisbee Golf2005-01-31T09:44:00-10:002005-01-31T09:44:00-10:00larrytag:knowing.net,2005-01-31:/posts/2005/01/frisbee-golf/<p>Spent the weekend getting my butt kicked in a <a href="http://www.hcdc.us/">Frisbee Golf Tournament</a> over on the Hilo side. Camped at the gorgeous Mackenzie State Park, where the first two rounds were played in a very tight, forested course (the only two holes that weren't through trees were over the water). Yesterday …</p><p>Spent the weekend getting my butt kicked in a <a href="http://www.hcdc.us/">Frisbee Golf Tournament</a> over on the Hilo side. Camped at the gorgeous Mackenzie State Park, where the first two rounds were played in a very tight, forested course (the only two holes that weren't through trees were over the water). Yesterday the tournament moved to Wailoa State Park in Hilo, which was much more open, but had great water hazards (100 yards over the water, island holes, etc.). I much preferred the Wailoa course, since (a) I'm a strong thrower but unused to golf discs, so I had no touch working through the trees, and (b) I can't stand the “thunk” of a clean disc smacking into a tree at full speed.</p>
<p>Very nice group of people, including some travelling pros (yes, people travel to throw Frisbee golf). To me, though, the actual highlight of the weekend was a humpback that swam by no more than 100 yards offshore at Mackenzie.</p>
<p>Hilo was gorgeous yesterday. It gets a bad rap because it's rainier than Kailua Kona, but it's a really great town.</p>Scoblephones are free at Amazon!2005-01-27T08:48:00-10:002005-01-27T08:48:00-10:00larrytag:knowing.net,2005-01-27:/posts/2005/01/scoblephones-are-free-at-amazon/<p>The hip and wonderful Audiovox SMT-5600 is going for \<span class="math">\(150 with a \\)</span>150 rebate at Amazon. Get 'em while they're in stock: </p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen …</script><p>The hip and wonderful Audiovox SMT-5600 is going for \<span class="math">\(150 with a \\)</span>150 rebate at Amazon. Get 'em while they're in stock: </p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>HOWTO convert TiVo-to-go files to MPEG files2005-01-26T21:31:00-10:002005-01-26T21:31:00-10:00larrytag:knowing.net,2005-01-26:/posts/2005/01/howto-convert-tivo-to-go-files-to-mpeg-files/<p>\<</p>
<p>div class="Section1"></p>
<p>I’ll be using this as soon as the service makes it over here… </p>
<blockquote>
<div>
<p><strong><em>*[Cory Doctorow]{style=""}</em></strong><em>: TiVo's new DRM system allows you to move video from your TiVo to your PC, but not as a plain MPEG file that you can slice and dice and watch …</em></p></div></blockquote><p>\<</p>
<p>div class="Section1"></p>
<p>I’ll be using this as soon as the service makes it over here… </p>
<blockquote>
<div>
<p><strong><em>*[Cory Doctorow]{style=""}</em></strong><em>: TiVo's new DRM system allows you to move video from your TiVo to your PC, but not as a plain MPEG file that you can slice and dice and watch in the player of your choice. Here are step-by-step instructions for converting TiVo-to-Go video to MPEG files. Link (</em>[via <a href="https://waxy.org/category/links/" title="http://waxy.org/links/">Waxy</a>]{style="font-style: italic"}*)</p>
<p>Related...</p>
</div>
<p>[Boing Boing]</p>
</blockquote>Retired From The Toolroll2005-01-26T10:23:00-10:002005-01-26T10:23:00-10:00larrytag:knowing.net,2005-01-26:/posts/2005/01/retired-from-the-toolroll/<p>::: {.Section1}
Here are some programs that I’ve evaluated and recently cleared off my Tablet PC:</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style=";font-family:Symbol"}\< ![endif]> EverNote: Although I really like the idea of a chronologically ordered view of my notes (actually, what I …</p><p>::: {.Section1}
Here are some programs that I’ve evaluated and recently cleared off my Tablet PC:</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style=";font-family:Symbol"}\< ![endif]> EverNote: Although I really like the idea of a chronologically ordered view of my notes (actually, what I really like is the idea of <em>[multiple]{style="font-style:italic"}</em> different views of the same note-base), I just didn’t find EverNote working for me as my single data store (which is critical to <a href="https://gettingthingsdone.com/">Getting Things Done</a>). I’ve switched back to OneNote.</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style=";font-family:Symbol"}\< ![endif]> 3-D Journal: This is an insanely cool concept – sketch a perspective view of an object and the software interprets your sketch as a 3-D object, which you can then rotate and edit and so forth. <a href="https://www.sketchup.com/">SketchUp</a> is a similar, commercial, offering that I believe is much more fully realized. Unfortunately, my lack of artistic skills are apparently beyond the cutting-edge of machine intelligence, because I could barely produce a box, let alone something interesting like a boat hull. This is a fantastic idea, but what I guess I need is a Visio-like interface (3-D for Dummies?).</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style=";font-family:Symbol"}\< ![endif]> <a href="https://hellodotcom.hello.com/en/index.html">Hello</a>: Non-tablet specific, but recently washed off my drive anyway, this photo-sharing application uses P2P technology to enable large-file transfers. I’ve switched to <a href="https://www.flickr.com/">Flickr</a> for getting images onto my friend’s desktops and, if they want a print-out, I’ll upload the originals to <a href="http://www.ofoto.com/">OFoto</a> and they can order prints from there.</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style=";font-family:Symbol"}\< ![endif]> Rome: Total War: You know what this reminds me of? Railroad Tycoon. Absolutely ecstatic reviews and gameplay that left me totally unimpressed. I found battles frustratingly difficult to view and control and the campaign play struck me as no more strategic than Risk. Is it the game or is it me?</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style=";font-family:Symbol"}\< ![endif]> OnFolio: Just doesn’t strike me as worth the registration fee, since OneNote has good data-gathering capabilities and is my primary note-taking bucket anyway.</p>
<p>\< ![if !supportLists]> [[·[ ]{style="font:7.0pt \"Times New Roman\""}]{style="mso-list:Ignore"}]{style=";font-family:Symbol"}\< ![endif]> <a href="http://syncdata.it/smartphonenotes-2-2/">SmartphoneNotes</a>: Haven’t been able to convince myself that my phone is an acceptable note-gathering device. I’m back to carrying around a small notebook and periodically sweeping the notes and to-dos into OneNote.</p>
<p>[ ]{style=""}
:::</p>Casinos? Gyms? Yeah, right.2005-01-19T12:59:00-10:002005-01-19T12:59:00-10:00larrytag:knowing.net,2005-01-19:/posts/2005/01/casinos-gyms-yeah-right/<p>Airbus has unveiled the A380, the biggest freakin' passenger jet evah (261' 10” wingspan. Yoiks.) Here are some images. There's been lots of talk about how the plane will have casinos and gyms and various other fun things. Sure. It's not like any airline would be so heartless as to …</p><p>Airbus has unveiled the A380, the biggest freakin' passenger jet evah (261' 10” wingspan. Yoiks.) Here are some images. There's been lots of talk about how the plane will have casinos and gyms and various other fun things. Sure. It's not like any airline would be so heartless as to configure 840 seats with 31 inches of pitch.</p>Beyond The Pale2005-01-19T12:19:00-10:002005-01-19T12:19:00-10:00larrytag:knowing.net,2005-01-19:/posts/2005/01/beyond-the-pale-2/<p>So there I am, all smug in my 99 Nerd Score and along comes a guy who builds an Apollo Guidance Computer in his basement. Not a software <em>simulator</em>, mind you (a nerdy exercise I can at least imagine), but an actual wire-wrapped reproduction. I am but a smudge of …</p><p>So there I am, all smug in my 99 Nerd Score and along comes a guy who builds an Apollo Guidance Computer in his basement. Not a software <em>simulator</em>, mind you (a nerdy exercise I can at least imagine), but an actual wire-wrapped reproduction. I am but a smudge of Dorito dust on the fingers of His Glorious Nerd Majesty.</p>
<p>Now, there is one way that I can recover high nerd cred, which is that I engage in nerdy sports like Frisbee and SCUBA diving. Most geekily, recently I've been working on being able to hold my breath for a really, really long time, a "sport" where high perfomance relies on not moving.</p>"Fine art" oil painting being outsourced to Russia2005-01-19T08:40:00-10:002005-01-19T08:40:00-10:00larrytag:knowing.net,2005-01-19:/posts/2005/01/fine-art-oil-painting-being-outsourced-to-russia/<p><a href="http://www.tinajensen.org/">My wife</a> is a fine artist (oil painting). She tells me that a huge thing in the art market right now is galleries specializing in Russian art, usually selling canvases in the \<span class="math">\(20-50K price range. Not because there's an important movement coming out of Russia, but because the galleries are …</span></p><p><a href="http://www.tinajensen.org/">My wife</a> is a fine artist (oil painting). She tells me that a huge thing in the art market right now is galleries specializing in Russian art, usually selling canvases in the \<span class="math">\(20-50K price range. Not because there's an important movement coming out of Russia, but because the galleries are paying artists 10% of the sales price! Tina was talking to an acquaintence who used to work in such a gallery who said “Well, \\)</span>2000 is a lot of money in Russia.”</p>
<p>Insanity now reigns over the entire spectrum of the art market, from the highest end to the “hand highlighted” canvasses of Kincade to... well, the bottom end of the art market is actually the most genuine, since it's the place where people honestly strive to express themselves and people buy individual pieces because they want to live with them.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Microsoft Not To Launch Low-Cost Tablet2005-01-19T06:48:00-10:002005-01-19T06:48:00-10:00larrytag:knowing.net,2005-01-19:/posts/2005/01/microsoft-not-to-launch-low-cost-tablet/<p>Scoble has quashed the rumor of a Microsoft-branded Tablet PC that I linked to and discounted yesterday.</p>Iggy's Always In Love2005-01-18T15:57:00-10:002005-01-18T15:57:00-10:00larrytag:knowing.net,2005-01-18:/posts/2005/01/iggys-always-in-love/<p>::: {.Section1}
Iggy Kin is the philosopher-king of the inkerati. He obviously loves to just <em>[think]{style="font-style:italic"}</em> about stuff and how it relates. Although I’m sad to see his “Tablet PC Hep” blog go away, he’s got an interesting new blog that’s actually really firing up …</p><p>::: {.Section1}
Iggy Kin is the philosopher-king of the inkerati. He obviously loves to just <em>[think]{style="font-style:italic"}</em> about stuff and how it relates. Although I’m sad to see his “Tablet PC Hep” blog go away, he’s got an interesting new blog that’s actually really firing up <em>[my]{style="font-style:italic"}</em> brain about smart clients and Tablets. He’s blogging in ink in OneNote, and then he does a kind of “header” in a blogging client I guess he wrote. And then he also includes a Word file, just for the full-text searching, I guess.</p>
<p>What’s just bullet-in-the-head obvious about it, though, is how good OneNote is. And how easy is it to clink a link and open Iggy’s content in OneNote (of course, I’d be much less likely to do this if OneNote had macros). Meanwhile, I’m spending my working hours slaving away on an Ink-based Wiki and just thinking “Man, why can’t I just do a smart client?”</p>
<blockquote>
<p>I am not sorry that I love great technology, I love .NET, Google, Bloglines and the tablet PC</p>
<p>Why I Love great Technology<br>
[W] [O] <em>[ via]{style="font-style:italic"}</em> [Bootstrapped]
:::</p>
</blockquote>Firefox + Acrobat == 100% CPU2005-01-18T14:44:00-10:002005-01-18T14:44:00-10:00larrytag:knowing.net,2005-01-18:/posts/2005/01/firefox-acrobat-100-cpu/<p>Anyone else seeing this? There are a few hundred returns on Google about it, some of which specifically mention Tablet PC processes, so I'm wondering if the "inkerati" are particularly troubled.</p>Rumor: Microsoft to launch low cost Tablet PC2005-01-18T11:47:00-10:002005-01-18T11:47:00-10:00larrytag:knowing.net,2005-01-18:/posts/2005/01/rumor-microsoft-to-launch-low-cost-tablet-pc/<p>::: {.Section1}</p>
<blockquote>
<p>According to ActiveWin, Armin Cremerius-Gunther, Windows division head for Microsoft Germany, announced Tuesday that Microsoft intends to launch its own Tablet PC. The article also states that Microsoft's intention is to sell the Tablet PC for less than 1200 euros. Microsoft realizes that the high costs of current Tablet …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>According to ActiveWin, Armin Cremerius-Gunther, Windows division head for Microsoft Germany, announced Tuesday that Microsoft intends to launch its own Tablet PC. The article also states that Microsoft's intention is to sell the Tablet PC for less than 1200 euros. Microsoft realizes that the high costs of current Tablet PCs... <em>[via]{style="font-style:italic"}</em> [<a href="https://jkontherun.blogs.com/jkontherun/2005/01/microsoft_to_la.html">jkOnTheRun</a>]
:::</p>
</blockquote>
<p>I don’t believe it. The consequences of Microsoft getting into the system hardware space would be so seismic that I just can’t believe they’d do it. Now, a Microsoft digital pen a la the Io, I’d believe in a second. I’d even believe Microsoft subsidizing a digitizer manufacturer or the Tablet OEMs for price control. But a complete system? I just can’t imagine them crossing the Rubicon.</p>Gates defends DRM with specious "Bits is Bits" argument2005-01-15T14:22:00-10:002005-01-15T14:22:00-10:00larrytag:knowing.net,2005-01-15:/posts/2005/01/gates-defends-drm-with-specious-bits-is-bits-argument/<p>In a great interview on Gizmodo, Bill Gates and Joel Johnson (?) squabble about DRM. Despite his disclaimer that he was intimidated, the interviewer challenges Gates boldly. Gates responds (in part), by saying that you have to start from the question "'should there be confidential information?'" (such as for medical records …</p><p>In a great interview on Gizmodo, Bill Gates and Joel Johnson (?) squabble about DRM. Despite his disclaimer that he was intimidated, the interviewer challenges Gates boldly. Gates responds (in part), by saying that you have to start from the question "'should there be confidential information?'" (such as for medical records) and when the interviewer accuses him of shifting the argument, Gates says "It's not different. It's identical technology. It's the same bits!"</p>
<p>Which gives me the opportunity to point out that post-Longhorn and especially post-Palladium, the premise that computers will always have a "bits is bits" loophole, for better or worse, will no longer hold. The idea that a computer's memory could be composed of homogeneous bits whose interpretation was dependent on context was one of the elegant innovations in the Univac, whose architecture was described by Jon von Neumann. The "von Neumann architecture," became virtually universal by the 1970s but <strong>it's not "fundamental" to the concept of computers</strong>.</p>
<p>The abstract virtual machines of managed platforms such as .NET and Java <strong>do not have</strong> homogenous bits that can be interpreted as arbitrary types of data or machine instructions or what have you. True, these abstract VMs are implemented on top of chips that are essentially von Neumann, so there's still a "bits is bits" loophole today. With a sufficiently instrumented machine today, you can still view any piece of main memory on your system, allowing you to compromise (for better or worse) anything that executes within the context of your operating system.</p>
<p>In Longhorn, large portions of the OS are going to migrate from native code to managed code, making it far more difficult to access and interpret the native bits and bytes present in memory (of course, <strong>within</strong> the virtual machines, there are powerful debugging tools, but these do not generally provide insight into the underyling physical memory).</p>
<p>Finally, the Next-Generation Secure Computing Base fully closes the "bits is bits" loophole. The NGSCB provides a combination of hardware and software that makes it possible to create fully secure data pathways, essentially black boxes within your system architecture. Such black boxes could be used to transform encrypted data into a usable form. This could be incorporated at the level of media drivers (sound, video) although doing so would introduce a considerable performance penalty. But between Moore's Law, the RIAA, and the MPAA, it's not at all inconceivable.</p>
<p>Such a system would still have an "analog loophole" in that once transformed for playback, one should be able to intercept and record the bits perfectly. However, this might require specialized drivers or even hardware (depending on how far along the media playback pipeline the NGSCB transforms are incorporated).</p>
<p>Contrary to Gates' assertion, DRM is not a context-free technology that applies equally to all bits. It is entirely likely that DRM advocates will push for design decisions and commitments from commercial OS vendors that make opague large, complex subsystems in computer systems.</p>Dare Obasanjo has an article on COmega2005-01-15T08:30:00-10:002005-01-15T08:30:00-10:00larrytag:knowing.net,2005-01-15:/posts/2005/01/dare-obasanjo-has-an-article-on-comega/<p><a href="https://www.xml.com/pub/a/2005/01/12/comega.html">Introducing COmega</a> is a good overview of what is <em>probably</em> the most obviously startling thing about COmega -- it's attempt to bridge XML / Object / Relational worlds with built-in syntax. I'm not sure that this is going to be COmega's biggest contribution to the mainstream (I suspect that it's threading techniques using …</p><p><a href="https://www.xml.com/pub/a/2005/01/12/comega.html">Introducing COmega</a> is a good overview of what is <em>probably</em> the most obviously startling thing about COmega -- it's attempt to bridge XML / Object / Relational worlds with built-in syntax. I'm not sure that this is going to be COmega's biggest contribution to the mainstream (I suspect that it's threading techniques using “chords” may prove to be more important), but it's certainly interesting. Dare promises to visit E4X, which combines XML handling with JavaScript and is, in my opinion, a better match for many XML processing scenarios, in his next article.</p>Free Widgets2005-01-15T08:12:00-10:002005-01-15T08:12:00-10:00larrytag:knowing.net,2005-01-15:/posts/2005/01/free-widgets/<p>Through this weekend, you can get a free copy of Graphics Server .NET: Widgets Edition</p>
<blockquote>
<p>[]{style="TEXT-DECORATION: none"}</p>
<p>To get your free copy (download only - physical product available for just the shipping charge) just go through our order process. Offer good through January 16, 2005.</p>
<p><em>[Via]{style="FONT-STYLE: italic"}</em> [Johnson's …</p></blockquote><p>Through this weekend, you can get a free copy of Graphics Server .NET: Widgets Edition</p>
<blockquote>
<p>[]{style="TEXT-DECORATION: none"}</p>
<p>To get your free copy (download only - physical product available for just the shipping charge) just go through our order process. Offer good through January 16, 2005.</p>
<p><em>[Via]{style="FONT-STYLE: italic"}</em> [Johnson's Chart Component Blog]</p>
</blockquote>Donald Francis O'Brien, July 3, 1930 - January 3, 20052005-01-03T17:08:00-10:002005-01-03T17:08:00-10:00larrytag:knowing.net,2005-01-03:/posts/2005/01/donald-francis-obrien-july-3-1930-january-3-2005/<p>My father just died after a struggle with cancer. I won't be posting for a bit.</p>Recycled ebook: I Am Charlotte Simmons2005-01-01T14:58:00-10:002005-01-01T14:58:00-10:00larrytag:knowing.net,2005-01-01:/posts/2005/01/recycled-ebook-i-am-charlotte-simmons/<p>I bought Tom Wolfe's "I Am Charlotte Simmons" from http://www.ereader.com/ and enjoyed it well emough, but don't think I'll ever re-read it. I'm willing to pass on the file (in ereaders's proprietary format) to the first person who asks for it. Send me an email -- lobrien -atsign- …</p><p>I bought Tom Wolfe's "I Am Charlotte Simmons" from http://www.ereader.com/ and enjoyed it well emough, but don't think I'll ever re-read it. I'm willing to pass on the file (in ereaders's proprietary format) to the first person who asks for it. Send me an email -- lobrien -atsign- knowing.net.</p>Blink Working!2005-01-01T13:25:00-10:002005-01-01T13:25:00-10:00larrytag:knowing.net,2005-01-01:/posts/2005/01/blink-working/<p>Ah hah! <strong>No leading / on the FTP Path: www/knowing.net/images</strong></p>
<p>></p>Hau'oli Makahiki Hou!2004-12-31T10:57:00-10:002004-12-31T10:57:00-10:00larrytag:knowing.net,2004-12-31:/posts/2004/12/hauoli-makahiki-hou-2/<p>First, the more serious resolutions inspired by the tsunami tragedy:</p>
<ul>
<li>treasure loved ones and the short time we get in this life;</li>
<li>give more;</li>
<li>be more humble about the affairs of Man</li>
</ul>
<p>Second, the fun ones:</p>
<ul>
<li>do a 3 minute free-dive (my personal best is a 2:51 dive in …</li></ul><p>First, the more serious resolutions inspired by the tsunami tragedy:</p>
<ul>
<li>treasure loved ones and the short time we get in this life;</li>
<li>give more;</li>
<li>be more humble about the affairs of Man</li>
</ul>
<p>Second, the fun ones:</p>
<ul>
<li>do a 3 minute free-dive (my personal best is a 2:51 dive in September, but I haven't come close to duplicating it);</li>
<li>get barreled;</li>
<li>grow, harvest, mill, and roast my own coffee;</li>
<li>consistently throw a golf disc 120 yards;</li>
<li>memorize the field marks, common, scientific, and Hawaiian names of the 50 most common reef fish in every developmental phase;</li>
<li>write a distributed genetic algorithm;</li>
<li>write a game for the Tablet PC</li>
</ul>
<p>Third, the professional ones:</p>
<ul>
<li>"Get Things Done" between 6AM and 2PM;</li>
<li>release at least two significant Web-based training resources;</li>
<li>make at least the same amount of money I did this year;</li>
<li>maintain professional competence in in C++ (/CLI!), C#, and Java;</li>
<li>become professionally competent in Python</li>
<li>evolve Pynk to the point where it's a reasonable way to program with a pen;</li>
<li>release Pynk as OSS;</li>
<li>evolve my shape-recognition library;</li>
<li>implement a domain-specific language for mediating between OTA requests, business rules, and at least 2 major Global Distribution Systems (Sabre and To Be Named)</li>
</ul>Ink-Based Wiki: Should I Go Smart Client?2004-12-29T08:57:00-10:002004-12-29T08:57:00-10:00larrytag:knowing.net,2004-12-29:/posts/2004/12/ink-based-wiki-should-i-go-smart-client/<p>I am working on “Weka Wiki”: an ink-based Wiki (”Weka” being the Hawaiian word for “squid ink”). All pages will be rendered on any machine (as bitmaps on mundane machines), but the only way to edit ink-based pages will be with a Tablet PC. My question for the inkernet: when …</p><p>I am working on “Weka Wiki”: an ink-based Wiki (”Weka” being the Hawaiian word for “squid ink”). All pages will be rendered on any machine (as bitmaps on mundane machines), but the only way to edit ink-based pages will be with a Tablet PC. My question for the inkernet: when it comes to editing, is it important to stay within the browser, or is a smart client acceptable? Essentially, there's a lot more flexibility in terms of interface and editing in a smart client. Thoughts?</p>
<p>P.S. No one's even <em>mentioned</em> <a href="https://www.developer.com/">the initial release of Pynk</a>, the ink-based Python IDE? Given the interest in Python in the community, I thought it would cause a little bit of a stir...</p>AdSense revenues to disaster relief -- a no brainer2004-12-28T06:25:00-10:002004-12-28T06:25:00-10:00larrytag:knowing.net,2004-12-28:/posts/2004/12/adsense-revenues-to-disaster-relief-a-no-brainer/<p>Greg Hughes came up with the idea of donating all AdSense revenue pending at the new year to disaster relief.</p>Windows Journal Reader Supplemental Component2004-12-27T14:32:00-10:002004-12-27T14:32:00-10:00larrytag:knowing.net,2004-12-27:/posts/2004/12/windows-journal-reader-supplemental-component/<blockquote>
<p>Journal Reader Component for Tablet PC SDK 1.7 <em>[via]{style="font-style:italic"}</em> [Microsoft Download Center]</p>
</blockquote>
<p>Note that the documentation contains samples that read " Dim jntReader As New Microsoft.Ink.JournalReader()" and similar. In fact, you can't construct a JournalReader object, you'll use the static (shared in VB.NET) method …</p><blockquote>
<p>Journal Reader Component for Tablet PC SDK 1.7 <em>[via]{style="font-style:italic"}</em> [Microsoft Download Center]</p>
</blockquote>
<p>Note that the documentation contains samples that read " Dim jntReader As New Microsoft.Ink.JournalReader()" and similar. In fact, you can't construct a JournalReader object, you'll use the static (shared in VB.NET) method ReadFromStream() to generate the stream. The results are pretty cool, as shown in this screen clipping: the text box contents are in RTF, and you get both the recognition string and alternates on the ink.</p>
<p>></p>COmega and Concurrency: The Next Important Thing2004-12-27T14:28:00-10:002004-12-27T14:28:00-10:00larrytag:knowing.net,2004-12-27:/posts/2004/12/comega-and-concurrency-the-next-important-thing/<p>\<</p>
<p>blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'></p>
<p>Because CPU speeds have topped off recently even though I/O speeds continue to increase, <a href="http://www.gotw.ca/publications/concurrency-ddj.htm" title="http://www.gotw.ca/publications/concurrency-ddj.htm">Herb Sutter posits that the Moore's Law free performance lunch is over</a> <em>[via]{style="font-style:italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
<p>Concurrency is at the stage …</p><p>\<</p>
<p>blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'></p>
<p>Because CPU speeds have topped off recently even though I/O speeds continue to increase, <a href="http://www.gotw.ca/publications/concurrency-ddj.htm" title="http://www.gotw.ca/publications/concurrency-ddj.htm">Herb Sutter posits that the Moore's Law free performance lunch is over</a> <em>[via]{style="font-style:italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
<p>Concurrency is at the stage that memory management was about a decade ago – popularly believed to be intractable at a pragmatic level, but in fact, something where relatively simple language extensions can provide a great deal of relief. COmega’s chords may be a taste of what is to come.</p>Rather Than Post-Christmas Sales, Make A Donation2004-12-26T09:09:00-10:002004-12-26T09:09:00-10:00larrytag:knowing.net,2004-12-26:/posts/2004/12/rather-than-post-christmas-sales-make-a-donation/<p>I've not yet found any links specific to the disaster that's struck around the Indian Ocean, but here is the link to the Red Cross' individual donation page: <a href="https://www.icrc.org/en?OpenForm&ParentUNID=BA9B14845AF1638FC1256E2B00394093&action=Operations%2520most%2520in%2520need">http://www.icrc.org/Web/Forms/webforms.nsf/F_DON?OpenForm&ParentUNID=BA9B14845AF1638FC1256E2B00394093&action=Operations%20most%20in%20need</a></p>Pynk: Programming the Tablet PC With Python article online2004-12-24T14:21:00-10:002004-12-24T14:21:00-10:00larrytag:knowing.net,2004-12-24:/posts/2004/12/pynk-programming-the-tablet-pc-with-python-article-online/<p>My first article on Pynk, my experimental Python IDE, is up on DevX <a href="https://www.developer.com/">http://www.devx.com/TabletPC/Article/26666</a>. The preliminary version of Pynk is available for download and can be used to work interactively with IronPython on the Tablet PC.</p>Cleaning a Tablet2004-12-24T14:13:00-10:002004-12-24T14:13:00-10:00larrytag:knowing.net,2004-12-24:/posts/2004/12/cleaning-a-tablet/<p>What do you clean your Tablet screen with? I have been going with a water-dampened microfiber cloth but as part of my end-of-the-year cleaning spree, I was thinking of going a little stronger. There are no computer stores on the Big Island, so anything I buy gets about a \$10 …</p><p>What do you clean your Tablet screen with? I have been going with a water-dampened microfiber cloth but as part of my end-of-the-year cleaning spree, I was thinking of going a little stronger. There are no computer stores on the Big Island, so anything I buy gets about a \$10 shipping charge tacked on, so if I'm going to buy, I might as well buy the top-of-the-line product. On the other hand, I have rubbing alcohol, vinegar, and water available, so if anyone has a recipe, that'd be better. Oh, by the way, Mele Kalikimaka!</p>A Judge Isn't Sure Spam Is Deceptive2004-12-23T08:24:00-10:002004-12-23T08:24:00-10:00larrytag:knowing.net,2004-12-23:/posts/2004/12/a-judge-isnt-sure-spam-is-deceptive/<p>::: {.Section1}</p>
<blockquote>
<p>[“At issue, the judge said, is whether the actions rose to the level required by a new anti-spam law, which states that spam must be not only annoying but deceptive.”]{style="; font-family:Verdana"} <em>[Via]{style="font-style:italic"}</em> [Alice and Bill.com]</p>
<p>[You can never be sure that a news …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[“At issue, the judge said, is whether the actions rose to the level required by a new anti-spam law, which states that spam must be not only annoying but deceptive.”]{style="; font-family:Verdana"} <em>[Via]{style="font-style:italic"}</em> [Alice and Bill.com]</p>
<p>[You can never be sure that a news report isn’t about some legal “crossing the ts and dotting the is” but the idea that anyone could question the deceptive character of bulk email is amazing. While the online community is busy playa-hating the RIAA and MPAA, they give a free pass to the direct-marketing lobby and credit-card companies that enable this life-clogging plague.]{style=""}
:::</p>
</blockquote>Guido Contemplates Adding Optional Static Typing to Python2004-12-23T08:08:00-10:002004-12-23T08:08:00-10:00larrytag:knowing.net,2004-12-23:/posts/2004/12/guido-contemplates-adding-optional-static-typing-to-python/<p>::: {.Section1}</p>
<blockquote>
<p>Optional static typing has long been requested as a Python feature. It's been studied in depth before (e.g. on the type-sig) but has proven too hard for even a PEP to appear. In this post I'm putting together my latest thoughts on some issues, without necessarily hoping to …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>Optional static typing has long been requested as a Python feature. It's been studied in depth before (e.g. on the type-sig) but has proven too hard for even a PEP to appear. In this post I'm putting together my latest thoughts on some issues, without necessarily hoping to solve all problems. <em>[via]{style="font-style:italic"}</em> [<a href="https://www.artima.com/weblogs/viewpost.jsp?thread=85551">Artima Weblogs</a>]</p>
</blockquote>
<p>Even though I’m a big explicit typing proponent, I don’t like the idea of optional explicit typing. Visual Basic has this and I don’t think it’s a great success. People don’t code implicitly until their projects hit 1,000 lines and then say “Well, it’s getting a little obscure, let’s turn on explicit.” They either go with implicit until the project is so incomprehensible that even the original coder has a hard-time making things explicit, or they go explicit from scratch. I think one’s attitude towards implicit/explicit typing is part of what you bring to language choice – I’ll turn to Python when I want implicit, I’ll turn to C-derived languages when I want explicit.
:::</p>Enabling JavaScript Debugging With Visual Studio2004-12-23T07:46:00-10:002004-12-23T07:46:00-10:00larrytag:knowing.net,2004-12-23:/posts/2004/12/enabling-javascript-debugging-with-visual-studio/<p>Ah. Within Internet Explorer, you go to "Tools | Internet Options | Advanced" and clear the checkbox for "Disable script debugging." Then, within your JavaScript, you add the statement "debugging;" to activate a breakpoint. This should help things considerably...</p>ASP.Net, tag, and Viewstate2004-12-22T21:34:00-10:002004-12-22T21:34:00-10:00larrytag:knowing.net,2004-12-22:/posts/2004/12/aspnet-ltobjectgt-tag-and-viewstate/<p>I'm stumped. If anyone can help me, I'd appreciate a pointer.</p>
<p>In an ASP.NET page, I'm embedding a Windows Forms control by use of an \<object> tag. My challenge is getting the state of the embedded object during postback, and maintaining / restoring the object after postback. Since the object …</p><p>I'm stumped. If anyone can help me, I'd appreciate a pointer.</p>
<p>In an ASP.NET page, I'm embedding a Windows Forms control by use of an \<object> tag. My challenge is getting the state of the embedded object during postback, and maintaining / restoring the object after postback. Since the object tag is not server-side, I can't figure out how to retrieve its state in my Page_Load() event.</p>
<p>The tactic that I was (mostly) pursuing was a client-side event-handler for the onblur() event of the \<object> tag, which would grab the state of the object (by way of reading a property, i.e., document.forms[0].myObject.MyProperty) and write it to a hidden \<INPUT> tag, which I figured I could retrieve on the server-side by looking at the Request object. So, basically, very non-ASP.NET-y in approach.</p>
<p>I don't know if this is the right approach and it certainly seems error-prone (at least, I spent the whole day today trying to watch the process by writing Javascript alert() functions -- a side question is 'how the heck do ASP.NET programmers debug Javascript?' ). Any feedback appreciated.</p>
<p>Am I doomed to handle the state / postback issue by writing separate HTTP POST/GETs <em>within</em> the embedded Windows Forms object?</p>Unleash the mimes!2004-12-22T17:42:00-10:002004-12-22T17:42:00-10:00larrytag:knowing.net,2004-12-22:/posts/2004/12/unleash-the-mimes/<p>Forget the death penalty – if you want to alter people's behavior, sic a mime on them:</p>
<blockquote>
<p>Another innovative idea was to use mimes to improve both traffic and citizens' behavior. Initially 20 professional mimes shadowed pedestrians who didn't follow crossing rules: A pedestrian running across the road would be tracked …</p></blockquote><p>Forget the death penalty – if you want to alter people's behavior, sic a mime on them:</p>
<blockquote>
<p>Another innovative idea was to use mimes to improve both traffic and citizens' behavior. Initially 20 professional mimes shadowed pedestrians who didn't follow crossing rules: A pedestrian running across the road would be tracked by a mime who mocked his every move. Mimes also poked fun at reckless drivers. The program was so popular that another 400 people were trained as mimes. <a href="https://news.harvard.edu/gazette/story/2004/03/academic-turns-city-into-a-social-experiment/" title="http://www.news.harvard.edu/gazette/2004/03.11/01-mockus.html">Link</a> <em>[via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</blockquote>When Self-Selecting Polls Attack2004-12-21T17:46:00-10:002004-12-21T17:46:00-10:00larrytag:knowing.net,2004-12-21:/posts/2004/12/when-self-selecting-polls-attack/<p>Sys-Con is running a poll on “The Top 20 Software People In The World” which is silly but harmless. The funny thing though is that Don Ferguson, head of IBM's Software Group Architecture Board, has garnered more than 3300 votes so far. Oh, okay, so how many does, say, Alan …</p><p>Sys-Con is running a poll on “The Top 20 Software People In The World” which is silly but harmless. The funny thing though is that Don Ferguson, head of IBM's Software Group Architecture Board, has garnered more than 3300 votes so far. Oh, okay, so how many does, say, Alan Turing get? 538. Well, he <em>is</em> dead, so let's say... Tim Berners-Lee? 266. Roy Fielding: 80. Danny Hillis: 30. Nathan Myrrhvold: 13. (Now that's just <em>mean</em>). What do you think -- memo going around IBM, an intern at their PR firm, or an ill-considered afternoon from a advertising sales rep?</p>Happy Solstice!2004-12-21T08:57:00-10:002004-12-21T08:57:00-10:00larrytag:knowing.net,2004-12-21:/posts/2004/12/happy-solstice/<p>I'm <em>so</em> happy to have moved somewhere where I don't get winter blues...</p>MS' Domain Specific Languages Toolkit Updated2004-12-20T13:47:00-10:002004-12-20T13:47:00-10:00larrytag:knowing.net,2004-12-20:/posts/2004/12/ms-domain-specific-languages-toolkit-updated/<p>::: {.Section1}
Via [DevHawk], news that Microsoft has shipped a new release of the DSL toolkit. That’s good news, as the previous version was really just a visual shell. The new version includes the tools for code generation, which is a crucial function.
:::</p>jkontherun suddenly invisible?2004-12-19T19:34:00-10:002004-12-19T19:34:00-10:00larrytag:knowing.net,2004-12-19:/posts/2004/12/jkontherun-suddenly-invisible/<p>I'm still getting jkontherun in my aggregator, but his page's are showing up without content when I click through (doubly troubling since he only aggregates summaries). I can't find a contact link on his site (maybe it's in the missing content). Anyone else having trouble with him? If anyone knows …</p><p>I'm still getting jkontherun in my aggregator, but his page's are showing up without content when I click through (doubly troubling since he only aggregates summaries). I can't find a contact link on his site (maybe it's in the missing content). Anyone else having trouble with him? If anyone knows him, shoot him this post. (I'm using IE 6 on a Tablet, but can't think of any new blocking software or anything like that that I've added recently...)</p>Tablets and kids2004-12-18T12:34:00-10:002004-12-18T12:34:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/tablets-and-kids/<p>::: {.Section1}</p>
<blockquote>
<p>Mike Torres discovers how quickly <a href="https://torres.wordpress.com/" title="http://spaces.msn.com/members/mike/Blog/cns!1pG4qKNdtRA5Nl-UhvZI_1rQ!663.entry">kids catch on to Tablets</a>. Agreed. v<em>[ia]{style="font-style:italic"}</em><br>
[Incremental Blogger]</p>
<p>+1. My nieces and nephews <em>[love]{style="font-style:italic"}</em> my Tablet. I’ve seen a concept drawing from Microsoft on a Tablet ruggedized for child use (tethered pen, ability to survive …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>Mike Torres discovers how quickly <a href="https://torres.wordpress.com/" title="http://spaces.msn.com/members/mike/Blog/cns!1pG4qKNdtRA5Nl-UhvZI_1rQ!663.entry">kids catch on to Tablets</a>. Agreed. v<em>[ia]{style="font-style:italic"}</em><br>
[Incremental Blogger]</p>
<p>+1. My nieces and nephews <em>[love]{style="font-style:italic"}</em> my Tablet. I’ve seen a concept drawing from Microsoft on a Tablet ruggedized for child use (tethered pen, ability to survive a drop, etc.). Probably hard to make profitable, but kids really do “get it.”
:::</p>
</blockquote>Best of the Blogs: VS Tools for Office 20032004-12-18T12:33:00-10:002004-12-18T12:33:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/best-of-the-blogs-vs-tools-for-office-2003/<p>::: {.Section1}</p>
<blockquote>
<p>Kevin Schuler and Drew Robbins have compiled a list of dozens of the best VSTO blog entries in 2003 across seven categories ranging from architecture to troubleshooting. <em>[Via]{style="font-style:italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
<p>Every year for the past several, I’ve thought that Office programming …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>Kevin Schuler and Drew Robbins have compiled a list of dozens of the best VSTO blog entries in 2003 across seven categories ranging from architecture to troubleshooting. <em>[Via]{style="font-style:italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
<p>Every year for the past several, I’ve thought that Office programming was about to flourish. It still hasn’t happened (I mean, there are people who program Office, but there’s not nearly the industry you’d expect for The Most Used Software That Isn’t An OS).
:::</p>
</blockquote>Microsoft is building a managed-code OS2004-12-18T12:31:00-10:002004-12-18T12:31:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/microsoft-is-building-a-managed-code-os/<p>::: {.Section1}</p>
<blockquote>
<p>Singularity is a cross-discipline research project in Microsoft Research building a managed code operating system. <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d810">This technical report</a> describes the motivation and priorities for Singularity. Other technical reports describe the abstractions and implementations of Singularity features. <em>[Via]{style="font-style:italic"}</em> [<a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d810">Microsoft Research Publications</a>]</p>
<p>:::</p>
</blockquote>Microsoft is building a managed-code OS2004-12-18T12:21:00-10:002004-12-18T12:21:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/microsoft-is-building-a-managed-code-os-2/<p>::: {.Section1}</p>
<blockquote>
<p>Singularity is a cross-discipline research project in Microsoft Research building a managed code operating system. <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d810">This technical report</a> describes the motivation and priorities for Singularity. Other technical reports describe the abstractions and implementations of Singularity features. <em>[Via]{style="font-style:italic"}</em> [<a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d810">Microsoft Research Publications</a>]</p>
<p>:::</p>
</blockquote>Code Camp Manifesto2004-12-18T11:49:00-10:002004-12-18T11:49:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/code-camp-manifesto/<blockquote>
<p>My Developer Evangelist Thom Robbins has laid down the Code Camp Manifesto. This is yet another proud example of the NE Area Community leading in the world of .NET and Microsoft related community activities. Bravo. BTW, here is the <a href="https://www.msdncodecamp.com/" title="http://www.msdncodecamp.com/">Code Camp</a> site. <em>[via]{style="FONT-STYLE: italic"}</em> [Sam Gentile's Blog]</p>
</blockquote>
<p>Hmmm …</p><blockquote>
<p>My Developer Evangelist Thom Robbins has laid down the Code Camp Manifesto. This is yet another proud example of the NE Area Community leading in the world of .NET and Microsoft related community activities. Bravo. BTW, here is the <a href="https://www.msdncodecamp.com/" title="http://www.msdncodecamp.com/">Code Camp</a> site. <em>[via]{style="FONT-STYLE: italic"}</em> [Sam Gentile's Blog]</p>
</blockquote>
<p>Hmmm…I wonder if I could organize something like a Code Camp in Hawaii. The Geek Cruises seem to have done alright for themselves, maybe there’s room for a land-based code-and-tan conference.</p>Blogs & Wikis == New Moderated Discussion Possibilities?2004-12-18T11:19:00-10:002004-12-18T11:19:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/blogs-wikis-new-moderated-discussion-possibilities/<p>Hmm, David Ansen of Newsweek is starting a <a href="https://www.msn.com/">monthly moderated dis</a>cussion of his favorite movies. Ansen isn't my favorite movie critic, so I'm not particularly interested in the particulars of his group, but it does seem to me that the explosion of interest in blogs, wikis, and podcasts has …</p><p>Hmm, David Ansen of Newsweek is starting a <a href="https://www.msn.com/">monthly moderated dis</a>cussion of his favorite movies. Ansen isn't my favorite movie critic, so I'm not particularly interested in the particulars of his group, but it does seem to me that the explosion of interest in blogs, wikis, and podcasts has, perhaps, changed the sorts of 'moderated discussions' that one could have.</p>
<p>Might be an interesting way to get feedback on my writing...</p>Microsoft is building a managed-code OS2004-12-18T10:59:00-10:002004-12-18T10:59:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/microsoft-is-building-a-managed-code-os-3/<p>::: {.Section1}</p>
<blockquote>
<p>Singularity is a cross-discipline research project in Microsoft Research building a managed code operating system. <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d810">This technical report</a> describes the motivation and priorities for Singularity. Other technical reports describe the abstractions and implementations of Singularity features. <em>[Via]{style="font-style:italic"}</em> [<a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d810">Microsoft Research Publications</a>]</p>
<p>:::</p>
</blockquote>Code Camp Manifesto2004-12-18T10:47:00-10:002004-12-18T10:47:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/code-camp-manifesto-2/<blockquote>
<p>My Developer Evangelist Thom Robbins has laid down the Code Camp Manifesto. This is yet another proud example of the NE Area Community leading in the world of .NET and Microsoft related community activities. Bravo. BTW, here is the <a href="https://www.msdncodecamp.com/" title="http://www.msdncodecamp.com/">Code Camp</a> site. <em>[via]{style="FONT-STYLE: italic"}</em> [Sam Gentile's Blog]</p>
</blockquote>
<p>Hmmm …</p><blockquote>
<p>My Developer Evangelist Thom Robbins has laid down the Code Camp Manifesto. This is yet another proud example of the NE Area Community leading in the world of .NET and Microsoft related community activities. Bravo. BTW, here is the <a href="https://www.msdncodecamp.com/" title="http://www.msdncodecamp.com/">Code Camp</a> site. <em>[via]{style="FONT-STYLE: italic"}</em> [Sam Gentile's Blog]</p>
</blockquote>
<p>Hmmm…I wonder if I could organize something like a Code Camp in Hawaii. The Geek Cruises seem to have done alright for themselves, maybe there’s room for a land-based code-and-tan conference.</p>Let's hear it for the independents!2004-12-18T10:45:00-10:002004-12-18T10:45:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/lets-hear-it-for-the-independents/<p>::: {.Section1}</p>
<blockquote>
<p>Christopher Hawkins takes on Joel Spolsky. Stands up for independent consultants. <em>[Via]{style="font-style:italic"}</em> [Scobleizer: Microsoft Geek Blogger]</p>
<p>[Apparently, Joel pooh-poohed 1-person consultancies, saying “It's just having a job. Another job like everyone else. You're not independent…” Really? Gee, I took six weeks off this year while I …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>Christopher Hawkins takes on Joel Spolsky. Stands up for independent consultants. <em>[Via]{style="font-style:italic"}</em> [Scobleizer: Microsoft Geek Blogger]</p>
<p>[Apparently, Joel pooh-poohed 1-person consultancies, saying “It's just having a job. Another job like everyone else. You're not independent…” Really? Gee, I took six weeks off this year while I moved to Hawaii. How many companies would let you do that?]{style=""}
:::</p>
</blockquote>Blogs, employment, and personae2004-12-18T09:49:00-10:002004-12-18T09:49:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/blogs-employment-and-personae/<p>::: {.Section1}</p>
<blockquote>
<p>Ellen Simonetti: <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0160535464916602394666935252150228906583%26anid%3D0160535464916602394666935252150228906583&u=0160535464916602394666935252150228906583&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553670237404&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0160535464916602394666935252150228906583%26anid%3D0160535464916602394666935252150228906583&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=" title="http://news.com.com/I%20was%20fired%20for%20blogging/2010-1030_3-5490836.html?part=rss&tag=5490836&subj=news.1030.20">I was fired [from Delta Airlines] for blogging</a>. Michael Gartenberg reacts. <em>[via]{style="font-style:italic"}</em><br>
[Scobleizer: Microsoft Geek Blogger]</p>
<p>[Gartenberg’s reaction boils down to the fact that (a) it’s not as simple as that – Simonetti’s firing seems to have more to do with her …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>Ellen Simonetti: <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0160535464916602394666935252150228906583%26anid%3D0160535464916602394666935252150228906583&u=0160535464916602394666935252150228906583&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553670237404&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0160535464916602394666935252150228906583%26anid%3D0160535464916602394666935252150228906583&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=" title="http://news.com.com/I%20was%20fired%20for%20blogging/2010-1030_3-5490836.html?part=rss&tag=5490836&subj=news.1030.20">I was fired [from Delta Airlines] for blogging</a>. Michael Gartenberg reacts. <em>[via]{style="font-style:italic"}</em><br>
[Scobleizer: Microsoft Geek Blogger]</p>
<p>[Gartenberg’s reaction boils down to the fact that (a) it’s not as simple as that – Simonetti’s firing seems to have more to do with her apparently “semi-provocative” photos of her in her Delta uniform, than blogging per se, and (b) blogging is helping people get hired, too.]{style=""}</p>
<p>[Blogging is a public act and, like any lengthy piece of writing, involves a persona – the “narrator” who has a personality and point of view and style of writing. You have to accept responsibility for the consequences of that public persona, for good or bad. It is nonsense to believe that your blog persona will or should be viewed as non-judgmentally as the way your personal behavior in your own home or the home of your friends will be judged.]{style=""}
:::</p>
</blockquote>Draft Tablet PC Game SDK spec up2004-12-18T09:24:00-10:002004-12-18T09:24:00-10:00larrytag:knowing.net,2004-12-18:/posts/2004/12/draft-tablet-pc-game-sdk-spec-up/<blockquote>
<div>
<p>3Leaf have posted an initial draft of their spec for Arcs of Fire and the Tablet PC SDK:</p>
<p>http://ea.3leafdev.com/2004/12/draft_version_o.html</p>
<p>Check it out here.</p>
</div>
</blockquote>
<p>\<</p>
<p>p class=ngrelatedlinks> The key seems to be the development of pen “trajectory” classes, which will presumably provide …</p><blockquote>
<div>
<p>3Leaf have posted an initial draft of their spec for Arcs of Fire and the Tablet PC SDK:</p>
<p>http://ea.3leafdev.com/2004/12/draft_version_o.html</p>
<p>Check it out here.</p>
</div>
</blockquote>
<p>\<</p>
<p>p class=ngrelatedlinks> The key seems to be the development of pen “trajectory” classes, which will presumably provide high-level abstractions of “fast stroke,” “slow stroke,” “smooth curve starting near this and pointing towards that.”</p>Office Ink Improvement? Anyone See Anything?2004-12-17T08:15:00-10:002004-12-17T08:15:00-10:00larrytag:knowing.net,2004-12-17:/posts/2004/12/office-ink-improvement-anyone-see-anything/<p>According to Microsoft's Frank Gocinski, "Microsoft Office has shipped their context manifests for the Tablet PC Platform [December 16], they are available at http://www.microsoft.com/downloads/details.aspx?FamilyID=31634d79-34ad-494d-8108-80085ace23be&DisplayLang=en</p>
<p>Contextual Awareness is a key part of the Tablet PC 2005 O/S, it enables applications …</p><p>According to Microsoft's Frank Gocinski, "Microsoft Office has shipped their context manifests for the Tablet PC Platform [December 16], they are available at http://www.microsoft.com/downloads/details.aspx?FamilyID=31634d79-34ad-494d-8108-80085ace23be&DisplayLang=en</p>
<p>Contextual Awareness is a key part of the Tablet PC 2005 O/S, it enables applications to hint to the recognizers what the most probable results of the Ink to Text recognition process should be.”</p>
<p>I've downloaded and installed the package but am not sure what difference it makes. Has anyone seen a difference? The thing that's especially confusing to me is that I can't figure out what kind of hint can be given from typical Office apps, since they accept free-form input. Only if this were some kind of dynamic thing (for instance, Excel saying “The first strokes in a cell are likely to be either a cell reference, a number, or the initial characters of a formula... Oh, okay, it's a formula name, so the next character is almost certainly a '(', ...okay... so now they've written what looks like an 'a', so it's a cell reference, so the next characters are likely to be numbers). This kind of dynamic recognition and hinting is very interesting, but I thought it was beyond the current API. Anyone know the lowdown?</p>A Gaggle of Information on Self Publishing2004-12-15T16:28:00-10:002004-12-15T16:28:00-10:00larrytag:knowing.net,2004-12-15:/posts/2004/12/a-gaggle-of-information-on-self-publishing/<p>[<a href="http://scottonwriting.net/sowblog/posts/2775.aspx">Scott on Writing</a>] reports on Brian Bischof and his page on the ins and outs of self-publishing, which Brian calls <a href="http://www.crystalreportsbook.com/SelfPublishing.asp" title="http://www.crystalreportsbook.com/SelfPublishing.asp">Self-Publishing Tips</a>. Along with <a href="https://www.fonerbooks.com/pod.htm">http://www.fonerbooks.com/pod.htm</a> this makes for very interesting reading.</p>
<p>Although I think my book-writing experience was particularly horrible, anecdotal evidence seems to show …</p><p>[<a href="http://scottonwriting.net/sowblog/posts/2775.aspx">Scott on Writing</a>] reports on Brian Bischof and his page on the ins and outs of self-publishing, which Brian calls <a href="http://www.crystalreportsbook.com/SelfPublishing.asp" title="http://www.crystalreportsbook.com/SelfPublishing.asp">Self-Publishing Tips</a>. Along with <a href="https://www.fonerbooks.com/pod.htm">http://www.fonerbooks.com/pod.htm</a> this makes for very interesting reading.</p>
<p>Although I think my book-writing experience was particularly horrible, anecdotal evidence seems to show that more and more tech authors are realizing that dead-tree publishing companies are rip-offs.</p>3d sketching on the Tablet PC2004-12-15T12:47:00-10:002004-12-15T12:47:00-10:00larrytag:knowing.net,2004-12-15:/posts/2004/12/3d-sketching-on-the-tablet-pc/<blockquote>
<p>[This is real cool, Arin pointed us to the work Cornell Computational Synthesis group is doing around freehand sketching. The project is called 3-D Journal and it’s a demonstration of live sketching, written specifically for TablePC in C#.]{style="FONT-FAMILY: Tahoma"}</p>
<p>The site at Cornell is [here]{style="FONT-FAMILY …</p></blockquote><blockquote>
<p>[This is real cool, Arin pointed us to the work Cornell Computational Synthesis group is doing around freehand sketching. The project is called 3-D Journal and it’s a demonstration of live sketching, written specifically for TablePC in C#.]{style="FONT-FAMILY: Tahoma"}</p>
<p>The site at Cornell is [here]{style="FONT-FAMILY: Tahoma"} make sure you check out the [movie tutorial]{style="FONT-FAMILY: Tahoma"}, it’s worth the 3 minutes… <em>[via]{style="FONT-STYLE: italic"}</em> [frankgo's WebLog]</p>
</blockquote>
<p>Downloaded…can’t wait to install it tonight. The movie is stunning.</p>
<blockquote></blockquote>Chris Sells Falls Drinks the Snorkeling Kool-Aid2004-12-15T12:08:00-10:002004-12-15T12:08:00-10:00larrytag:knowing.net,2004-12-15:/posts/2004/12/chris-sells-falls-drinks-the-snorkeling-kool-aid/<blockquote>
<p>…snorkeling rocks!... my first snorkeling expedition ever. At first, I was blown away at the clarity of what I could see under the water and the ease with which I could breath (I expected to swallow a lot of water). Then, I was completely freaked out at the shear number …</p></blockquote><blockquote>
<p>…snorkeling rocks!... my first snorkeling expedition ever. At first, I was blown away at the clarity of what I could see under the water and the ease with which I could breath (I expected to swallow a lot of water). Then, I was completely freaked out at the shear number of fish under the water (thousands!), even in areas with humans inches away…. I was simultaneously part of and not part of this new world I was floating over…. <em>[Via]{style="FONT-STYLE: italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>If you've never been snorkeling on a coral reef, you can't possibly, possibly imagine how vibrant the life is. And equally, if you've only been snorkeling in the Caribbean or Hawaii, you can't possibly, possibly imagine what a reef wall in Palau or New Guinea is like.</p>Lego logic2004-12-15T11:48:00-10:002004-12-15T11:48:00-10:00larrytag:knowing.net,2004-12-15:/posts/2004/12/lego-logic/<blockquote>
<p><strong><em>*David Pescovitz</em></strong><em>: This person assembled mechanical logic gates from Lego </em>[via]{style="FONT-STYLE: italic"}* [Boing Boing]</p>
</blockquote>
<p>\<</p>
<p>p class=MsoNormal style="MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt"> Oh man, I love this. One of the Tablet PC games that I’ve imagine is a Boolean logic game. I think it’d be fun …</p><blockquote>
<p><strong><em>*David Pescovitz</em></strong><em>: This person assembled mechanical logic gates from Lego </em>[via]{style="FONT-STYLE: italic"}* [Boing Boing]</p>
</blockquote>
<p>\<</p>
<p>p class=MsoNormal style="MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt"> Oh man, I love this. One of the Tablet PC games that I’ve imagine is a Boolean logic game. I think it’d be fun, especially if the logic was disguised behind mechanical looking flip-flops.</p>Tables of Contents on the Cover and Printed Bellybands2004-12-15T11:38:00-10:002004-12-15T11:38:00-10:00larrytag:knowing.net,2004-12-15:/posts/2004/12/tables-of-contents-on-the-cover-and-printed-bellybands/<blockquote>
<div>
<p><strong><em>*Advertising Ridiculum</em></strong><em> Does anybody remember when magazines used to put the table of contents just inside the front cover…Is there a limit to how much magazines are willing to annoy their readers to please their advertisers? </em>via* <a href="https://ericsink.com/entries/misc_15dec2004.html">Eric.Weblog()</a></p>
</div>
</blockquote>
<p>The answer is “No, there is not a limit.” The …</p><blockquote>
<div>
<p><strong><em>*Advertising Ridiculum</em></strong><em> Does anybody remember when magazines used to put the table of contents just inside the front cover…Is there a limit to how much magazines are willing to annoy their readers to please their advertisers? </em>via* <a href="https://ericsink.com/entries/misc_15dec2004.html">Eric.Weblog()</a></p>
</div>
</blockquote>
<p>The answer is “No, there is not a limit.” The most egregious development magazine in this sense is JavaWorld. Here’s how they do it: like MSDN, their table of contents <em>[is]{style="FONT-STYLE: italic"}</em> their cover. It’s not exactly newsstand gold, but you can make a case for it. So, a few years ago, they started selling what are called “bellybands” – the magazine is wrapped with a ribbon, the ribbon containing advertising. Bellybands are very popular with advertisers because, well, they allow the advertiser to co-opt the entire magazine. But they cost money to produce and have a tendency to be ripped off in transit and, even in the best of circumstances, the reader rips them off and throws them out the first time they use the magazine. So some genius comes up with the idea of a “printed bellyband” – you buy the back cover as advertisement, pay a premium for your horrific co-opting of the front cover, and ignore the fact that the front cover is supposed to deliver editorial information.</p>
<p>Printed bellybands are whorish and unforgiveable but when you do it on a magazine whose front cover is its table of contents, you’re in a world of disrespect for the reader that is absolutely boggling.</p>Eddie Would Go2004-12-15T07:47:00-10:002004-12-15T07:47:00-10:00larrytag:knowing.net,2004-12-15:/posts/2004/12/eddie-would-go/<p>A giant swell has rolled in and the Eddie Aikau Big Wave Invitational is on, with 20-ft. plus waves (that means wave-faces of 30+') in Waimea Bay! Checkout the action. I'm on deadline, otherwise I would have burned up some Hawaiian Airlines frequent flyer miles to jump over to Oahu …</p><p>A giant swell has rolled in and the Eddie Aikau Big Wave Invitational is on, with 20-ft. plus waves (that means wave-faces of 30+') in Waimea Bay! Checkout the action. I'm on deadline, otherwise I would have burned up some Hawaiian Airlines frequent flyer miles to jump over to Oahu... I'd love to see this in person.</p>Caption Contest2004-12-15T07:19:00-10:002004-12-15T07:19:00-10:00larrytag:knowing.net,2004-12-15:/posts/2004/12/caption-contest/<p>It's the guy in back that makes the photo.</p>NY Times Notable Books2004-12-14T20:25:00-10:002004-12-14T20:25:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/ny-times-notable-books/<p>I'm not even going that I'll get around to reading <a href="https://www.amazon.com/exec/obidos/ASIN/0385503490/thinkinginnet-20">A history of the first multiethnic upwardly mobile society in America</a>, but the NY Times Notable Books of the Year are out. Here are the fiction ones that look good to me (basically, this is just a reminder to myself …</p><p>I'm not even going that I'll get around to reading <a href="https://www.amazon.com/exec/obidos/ASIN/0385503490/thinkinginnet-20">A history of the first multiethnic upwardly mobile society in America</a>, but the NY Times Notable Books of the Year are out. Here are the fiction ones that look good to me (basically, this is just a reminder to myself, but if you've been wondering what to get me for my birthday...):</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0374153892/thinkinginnet-20">Gilead</a> By Marilynne Robinson. A demanding, grave and lucid novel in the form of a long letter from an aging preacher to his young son.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/1582344167/thinkinginnet-20">Jonathan Strange and Mr Norrell</a> By Susanna Clarke. A fantasy, involving a Yorkshire magician (Norrell) who comes to London in 1806 and takes on the handsome Jonathan Strange for a disciple.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0618509283/thinkinginnet-20">The Plot Against America</a> By Philip Roth. Charles Lindbergh is elected president in 1940 on a pro- Nazi platform, and a Jewish family in Newark suffers the consequences.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0375406972/thinkinginnet-20">Snow</a> By Orhan Pamuk. The line between farce and tragedy is drawn in blood where secular and Islamic Turkey seem to explode on contact.</p>
<p>Non-Fiction:</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/1400041767/thinkinginnet-20">At The Tomb of the Inflatable Pig</a> By John Gimlette. An eccentric, hilarious, horrifying — that is to say, utterly faithful — picture of a country as strange as any on earth.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0375423079/thinkinginnet-20">In The Shadow of No Towers</a> By Art Spiegelman. An album, a monograph and an intimate memoir by the author of ''Maus,'' who witnessed the attacks on the World Trade Center at close range.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0393326713/thinkinginnet-20">The 9 11 Commission Report</a> How and why the government failed to protect us from Al Qaeda, with sweeping recommendations for reorganizing American intelligence.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0375415513/thinkinginnet-20">On The Wing</a> By Alan Tennant. An eco-thriller about studying falcons.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0375409017/thinkinginnet-20">Osama The Making of a Terrorist</a> By Jonathan Randal. A reporter's guide to the vain, ascetic, humorless man and the Islamic geography that made him.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0865475814/thinkinginnet-20">The Outlaw Sea</a> By William Langewiesche. A report from the empty three-fourths of the globe, where 40,000 merchant ships operate with virtually no oversight.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0805073396/thinkinginnet-20">Whats the Matter With Kansas</a> By Thomas Frank. How, according to Frank, the rich and powerful have built a cynical alliance with culturally alienated heartlanders.</p>
<p>Read any other good books lately?</p>The Architecture of the World Wide Web2004-12-14T20:02:00-10:002004-12-14T20:02:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/the-architecture-of-the-world-wide-web/<p>[The Mountain of Worthless Information] mentioned this but their link was wrong. <a href="http://www.w3.org/TR/2004/PR-webarch-20041105/">Important paper</a>.</p>Don't Put Wetnotes In Your Laserjet2004-12-14T19:50:00-10:002004-12-14T19:50:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/dont-put-wetnotes-in-your-laserjet/<p>Ritchie WetNotes are fantastic. They're waterproof paper. So waterproof that you can use them SCUBA diving. So there are some reef-fish whose fieldmarks are really hard to remember, and I have computer notes and drawings. So I thinks to myself, “Self,” I thinks, “I wonder if you can use your …</p><p>Ritchie WetNotes are fantastic. They're waterproof paper. So waterproof that you can use them SCUBA diving. So there are some reef-fish whose fieldmarks are really hard to remember, and I have computer notes and drawings. So I thinks to myself, “Self,” I thinks, “I wonder if you can use your Laserjet 1300 to create waterfast id pages.”</p>
<p>Don't do this at home. It took me close to an hour to disassemble the machine and unwind the page from the roller to which it stuck. However, the toner <em>was</em> thoroughly baked on and proved to be waterfast.</p>"I Am Charlotte Simmons," By Tom Wolfe2004-12-14T19:05:00-10:002004-12-14T19:05:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/i-am-charlotte-simmons-by-tom-wolfe/<p>Tom Wolfe's <a href="https://www.amazon.com/exec/obidos/ASIN/0374281580/thinkinginnet-20">I Am Charlotte Simmons</a> is better than I expected. It's not <a href="https://www.amazon.com/exec/obidos/ASIN/0553275976">Bonfire of the Vanities</a> or <a href="https://www.amazon.com/exec/obidos/ASIN/0553381334/thinkinginnet-20">A Man in Full</a>, but below-average Wolfe is still better than 90% of the stuff being passed off for literature nowadays, such as the execrable <a href="https://www.amazon.com/exec/obidos/ASIN/0385337116/thinkinginnet-20">The Rule of Four</a> which would never …</p><p>Tom Wolfe's <a href="https://www.amazon.com/exec/obidos/ASIN/0374281580/thinkinginnet-20">I Am Charlotte Simmons</a> is better than I expected. It's not <a href="https://www.amazon.com/exec/obidos/ASIN/0553275976">Bonfire of the Vanities</a> or <a href="https://www.amazon.com/exec/obidos/ASIN/0553381334/thinkinginnet-20">A Man in Full</a>, but below-average Wolfe is still better than 90% of the stuff being passed off for literature nowadays, such as the execrable <a href="https://www.amazon.com/exec/obidos/ASIN/0385337116/thinkinginnet-20">The Rule of Four</a> which would never have made it into print were it not for the success of the <a href="https://www.amazon.com/exec/obidos/ASIN/0385504209/thinkinginnet-20">best bad book ever</a>.</p>Long's Drugs uses a no-longer-secret code to indicate wholesale price on tags2004-12-14T18:58:00-10:002004-12-14T18:58:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/longs-drugs-uses-a-no-longer-secret-code-to-indicate-wholesale-price-on-tags/<blockquote>
<p>Long's Drugs uses a simple letter/number code to indicate on its price tags the wholesale cost for each item on sale. The code has been cracked <em>[via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</blockquote>
<p>The substitution at Long’s is CHARLESTON (where C = 1, H = 2, etc.). Wal-mart’s code is …</p><blockquote>
<p>Long's Drugs uses a simple letter/number code to indicate on its price tags the wholesale cost for each item on sale. The code has been cracked <em>[via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</blockquote>
<p>The substitution at Long’s is CHARLESTON (where C = 1, H = 2, etc.). Wal-mart’s code is still unbroken. Where’s Alan Turing when you need him?</p>
<p>Update: Wal-mart uses BRUSHCLEAN. No word on the use of a <a href="http://www.jharper.demon.co.uk/bombe1.htm">bombe</a> for decoding.</p>Kasparov revisited2004-12-14T18:55:00-10:002004-12-14T18:55:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/kasparov-revisited/<p>::: {.Section1}</p>
<blockquote>
<p>[Back in 1997, Garry Kasparov played six rounds of chess against IBM's Deep Blue computer. Kasparov is, possibly, the greatest chess player of all time. He won one round, battled to a draw in three... <em>[via]{style="font-style:italic"}</em> [Alice and Bill.com]]{style=""}</p>
<p>Apparently there’s a new …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[Back in 1997, Garry Kasparov played six rounds of chess against IBM's Deep Blue computer. Kasparov is, possibly, the greatest chess player of all time. He won one round, battled to a draw in three... <em>[via]{style="font-style:italic"}</em> [Alice and Bill.com]]{style=""}</p>
<p>Apparently there’s a new movie out that says that the Deep Blue win was a cheat because of the day-to-day tweaking done on the parameters. I disagree. I wasn’t an observer, but I paid fairly close attention to this and as I recall, the thing that Kasparov was most amazed by was not the day-to-day changes in the program’s play, but its ability to adapt to Kasparov’s trademark shifts <em>[within]{style="font-style:italic"}</em> a single game.
:::</p>
</blockquote>VS2005 November CTP (Standard Edition) now available!2004-12-14T16:25:00-10:002004-12-14T16:25:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/vs2005-november-ctp-standard-edition-now-available/<p>::: {.Section1}</p>
<blockquote>
<p>[The Visual Studio 2005 November CTP (Community Technology Preview) drop is now available on MSDN. This is actually the FIRST CTP of the Visual Studio 2005 Standard Edition (which I announced at VSLive! In Orlando back in September to round out the family of VS2005 products. This contains support …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[The Visual Studio 2005 November CTP (Community Technology Preview) drop is now available on MSDN. This is actually the FIRST CTP of the Visual Studio 2005 Standard Edition (which I announced at VSLive! In Orlando back in September to round out the family of VS2005 products. This contains support for all of the languages that we support in Visual Studio and also support for device development along with an updated release of Visual SourceSafe. This can be downloaded off MSDN (MSDN VS2005 Whidbey <a href="https://msdn.microsoft.com/en-us/devlabs/default.aspx" title="http://lab.msdn.microsoft.com/vs2005/">"Home"</a> page) by our MSDN customers. <em>[Via]{style="font-style:italic"}</em>]{style=";font-family:Arial;color:black"} [Somasegar's WebLog]
:::</p>
</blockquote>Improved Ink Recognition in Office2004-12-14T15:29:00-10:002004-12-14T15:29:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/improved-ink-recognition-in-office/<p>Fuhgeddabout desktop search, Microsoft's released improved ink recognition in Office.</p>Sims 2 incompatible with tfswctrl Error Message: "Insert correct cd rom"2004-12-14T13:43:00-10:002004-12-14T13:43:00-10:00larrytag:knowing.net,2004-12-14:/posts/2004/12/sims-2-incompatible-with-tfswctrl-error-message-insert-correct-cd-rom/<p>There are a million people out there struggling with the Sims 2, which has stupid, customer-hostile blocks and guards against all sorts of CD-R software. The symptom is that when you run the program, it tells you to “insert the correct cd rom” (despite, obviously, having the correct cd-rom / dvd …</p><p>There are a million people out there struggling with the Sims 2, which has stupid, customer-hostile blocks and guards against all sorts of CD-R software. The symptom is that when you run the program, it tells you to “insert the correct cd rom” (despite, obviously, having the correct cd-rom / dvd in the drive). By rebooting my system half-a-dozen times, I've determined that (at least one ) cause of the problem is the process tfswctrl, which provides “drive letter access” (DLA) and allows you to drag-and-drop files onto a CD-R.</p>
<p>On my machine, it was installed as “Veritas DLA”.</p>How to prolong the life of your device battery2004-12-13T19:28:00-10:002004-12-13T19:28:00-10:00larrytag:knowing.net,2004-12-13:/posts/2004/12/how-to-prolong-the-life-of-your-device-battery/<p>::: {.Section1}</p>
<blockquote>
<p>[I ran across this article recently and quickly realized this is probably the best article about battery technology as it pertains to mobile devices I have seen in a long time. The article explains the different battery technologies used in devices today and has some excellent tips on how …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[I ran across this article recently and quickly realized this is probably the best article about battery technology as it pertains to mobile devices I have seen in a long time. The article explains the different battery technologies used in devices today and has some excellent tips on how to... <em>[via]{style="font-style:italic"}</em> [<a href="https://jkontherun.blogs.com/jkontherun/2004/12/how_to_prolong_.html">jkOnTheRun</a>]]{style=""}</p>
<p>Remove the battery when running on AC? I had no idea!
:::</p>
</blockquote>Gawdammit2004-12-13T14:48:00-10:002004-12-13T14:48:00-10:00larrytag:knowing.net,2004-12-13:/posts/2004/12/gawdammit/<p>::: {.Section1}
Ever had one of those times when you bust your ass for <em>[days]{style="font-style:italic"}</em> getting a Webinar ready and then, when you go to link up to the site, it turns out their network is locked down too tight and there’s nothing anyone can do, even …</p><p>::: {.Section1}
Ever had one of those times when you bust your ass for <em>[days]{style="font-style:italic"}</em> getting a Webinar ready and then, when you go to link up to the site, it turns out their network is locked down too tight and there’s nothing anyone can do, even if you call in using a freakin’ <em>[dial-up]{style="font-style:italic"}</em> but that’s not enough to handle your demos, so the whole freakin’ thing is cancelled?</p>
<p>Man, I <em>[hate]{style="font-style:italic"}</em> it when that happens.
:::</p>Does this mean they'll finally SHUT UP about it?2004-12-13T08:21:00-10:002004-12-13T08:21:00-10:00larrytag:knowing.net,2004-12-13:/posts/2004/12/does-this-mean-theyll-finally-shut-up-about-it/<p>::: {.Section1}</p>
<blockquote>
<p>[·]{style="; font-family:Symbol"} AP: Oracle, PeopleSoft to merge in \$10.3B deal. The agreement, announced Monday, caps a rancorous Silicon Valley feud marked by churlish exchanges between the companies' management teams and colorful courtroom battles. <em>[Via]{style="font-style:italic"}</em> [Dan Gillmor's eJournal]</p>
<p>[ ]{style=""}</p>
<p>[What this means for the software …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[·]{style="; font-family:Symbol"} AP: Oracle, PeopleSoft to merge in \$10.3B deal. The agreement, announced Monday, caps a rancorous Silicon Valley feud marked by churlish exchanges between the companies' management teams and colorful courtroom battles. <em>[Via]{style="font-style:italic"}</em> [Dan Gillmor's eJournal]</p>
<p>[ ]{style=""}</p>
<p>[What this means for the software development industry:]{style=""}</p>
<p>[\<drumroll/>]{style=""}</p>
<p>[\<analysis>Nothing whatsoever.\</analysis>]{style=""}</p>
<p>[\<Cymbal crash/>]{style=""}</p>
<p>[ ]{style=""}
:::</p>
</blockquote>I Have to Say This ...2004-12-10T20:20:00-10:002004-12-10T20:20:00-10:00larrytag:knowing.net,2004-12-10:/posts/2004/12/i-have-to-say-this/<p>::: {.Section1}</p>
<blockquote>
<p>[ Did I tell you the one where the guy from Microsoft calls Bjarne up at home and tells him that if he doesn't make the language left recursive look ahead 1 they wouldn't go ahead with a c++ compiler… <em>[via]{style="font-style:italic"}</em> [Stan Lippman's BLog]]{style=""}</p>
<p>[Uh… No …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[ Did I tell you the one where the guy from Microsoft calls Bjarne up at home and tells him that if he doesn't make the language left recursive look ahead 1 they wouldn't go ahead with a c++ compiler… <em>[via]{style="font-style:italic"}</em> [Stan Lippman's BLog]]{style=""}</p>
<p>[Uh… No, hadn’t heard that one…]{style=""}
:::</p>
</blockquote>No more apathy2004-12-10T20:10:00-10:002004-12-10T20:10:00-10:00larrytag:knowing.net,2004-12-10:/posts/2004/12/no-more-apathy/<p>::: {.Section1}</p>
<blockquote>
<p>To battle this, I've decided to take up my own cause: Fighting for children's rights by getting "The Factory Act of 1833" repealed. <em>[Via]{style="font-style:italic"}</em> [Neopoleon.com]</p>
<p>What I love about this is that Rory’s decided to reject apathy by repealing an <em>[English]{style="font-style:italic …</em></p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>To battle this, I've decided to take up my own cause: Fighting for children's rights by getting "The Factory Act of 1833" repealed. <em>[Via]{style="font-style:italic"}</em> [Neopoleon.com]</p>
<p>What I love about this is that Rory’s decided to reject apathy by repealing an <em>[English]{style="font-style:italic"}</em> law
:::</p>
</blockquote>Beard = success?2004-12-10T20:08:00-10:002004-12-10T20:08:00-10:00larrytag:knowing.net,2004-12-10:/posts/2004/12/beard-success/<p>::: {.Section1}</p>
<blockquote>
<p>What I want to know about this theory is: what happens if you're someone like me, who cycles between growing a beard and going beardless? Or does it just matter whether your official picture has a beard? I've got one right now, so does that mean I'm doing better …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>What I want to know about this theory is: what happens if you're someone like me, who cycles between growing a beard and going beardless? Or does it just matter whether your official picture has a beard? I've got one right now, so does that mean I'm doing better work than when I didn't have one months ago?</p>
<p><em>[Via]{style=";font-style:italic"}</em> [<a href="http://www.panopticoncentral.net/2004/12/06/beard-success/">Panopticon Central</a>]</p>
<p>I love this theory.
:::</p>
</blockquote>Dynamic Languages in Java2004-12-09T08:49:00-10:002004-12-09T08:49:00-10:00larrytag:knowing.net,2004-12-09:/posts/2004/12/dynamic-languages-in-java/<p>::: {.Section1}
Tim Bray <a href="http://www.tbray.org/ongoing/When/200x/2004/12/08/DynamicJava">reports on a summit</a> that Sun held to better understand the needs of the dynamic languages community. It sounds like Sun is recognizing the strength of the “multiple languages, one platform” value proposition that Microsoft has been pushing with .NET.
:::</p>Lazyweb: Who wrote the gesture-based editor prototype for the Tablet?2004-12-08T10:45:00-10:002004-12-08T10:45:00-10:00larrytag:knowing.net,2004-12-08:/posts/2004/12/lazyweb-who-wrote-the-gesture-based-editor-prototype-for-the-tablet/<p>::: {.Section1}
Someone blogged a prototype of a <strong>[RichTextBox]{style="font-weight:bold"}</strong> that supported various <strong>[ApplicationGesture]{style="font-weight:bold"}</strong>s for inserting and deleting and so forth. I can’t find it on the blogs of the usual suspects, but I know I’m just not using the right keywords. Can …</p><p>::: {.Section1}
Someone blogged a prototype of a <strong>[RichTextBox]{style="font-weight:bold"}</strong> that supported various <strong>[ApplicationGesture]{style="font-weight:bold"}</strong>s for inserting and deleting and so forth. I can’t find it on the blogs of the usual suspects, but I know I’m just not using the right keywords. Can anyone point me to it? (I’m writing an article about integrating gestures into Pynk…)
:::</p>A Little Language Talk2004-12-06T08:00:00-10:002004-12-06T08:00:00-10:00larrytag:knowing.net,2004-12-06:/posts/2004/12/a-little-language-talk/<p>My latest column for SD Times discusses “Little Languages”: a subset of domain-specific languages that can be mastered in a day and implemented in a matter of days or short weeks.</p>If copyeditor != coder...2004-12-04T12:57:00-10:002004-12-04T12:57:00-10:00larrytag:knowing.net,2004-12-04:/posts/2004/12/if-copyeditor-coder/<p>Just pathetic.</p>Sunset is 1 minute later today...2004-12-04T12:27:00-10:002004-12-04T12:27:00-10:00larrytag:knowing.net,2004-12-04:/posts/2004/12/sunset-is-1-minute-later-today/<p>According to the U.S. Naval Observatory, sunset here in beautiful Kailua Kona (Eat your heart out: <a href="https://www.konaweb.com/index.shtml%23WEBCAM">Webcam</a>) will occur today at 5:45 pm, one minute later than yesterday. Hoorah!</p>
<p>But I'm trying to figure out why sunset and sunrise aren't perfectly symmetrical. I mean, I get that local …</p><p>According to the U.S. Naval Observatory, sunset here in beautiful Kailua Kona (Eat your heart out: <a href="https://www.konaweb.com/index.shtml%23WEBCAM">Webcam</a>) will occur today at 5:45 pm, one minute later than yesterday. Hoorah!</p>
<p>But I'm trying to figure out why sunset and sunrise aren't perfectly symmetrical. I mean, I get that local noon isn't at clock noon (except for at one longitude within a time zone) but it all seems like constants to me:</p>
<ul>
<li>local noon = sun hits zenith (by definition)</li>
<li>local noon's offset from clock noon (according to John Harrison)</li>
<li>speed of the sun</li>
<li>distance from sunrise point to zenith == distance from zenith to sunset point</li>
</ul>
<p>So how can it be that (noon - sunrise) != (sunset - noon) ? </p>
<p>Update: Last night was an open house at the <a href="http://www.cfht.hawaii.edu/">Canada France telescope</a> and I got the lowdown from a professional. Noon is defined as when the sun is at the zenith, but because the Earth has moved in its orbit, it has to rotate slightly <em>more</em> than 360 degrees to bring the sun directly overhead. Not only that, because the Earth's velocity in its elliptical path varies based on how far from the sun we are (Kepler's laws of planetary motion), the amount of rotation needed to get from noon-to-noon (in other words, the actual <em>time</em> of a day) varies very significantly -- 15 minutes between the solstices! So those are your two asymmetries.</p>lobrien -atsign- email.com2004-12-04T11:14:00-10:002004-12-04T11:14:00-10:00larrytag:knowing.net,2004-12-04:/posts/2004/12/lobrien-atsign-emailcom/<p>Oh, man! I just discovered that one of my most-used public addresses (from email.com) somehow “forgot” that it's supposed to be forwarding my mail to a real account. And, of course, since it's a public address, my Inbox quickly overflowed with offers of Rolexes and ph\@rm4sootikals. So, if …</p><p>Oh, man! I just discovered that one of my most-used public addresses (from email.com) somehow “forgot” that it's supposed to be forwarding my mail to a real account. And, of course, since it's a public address, my Inbox quickly overflowed with offers of Rolexes and ph\@rm4sootikals. So, if you've sent email to that lobrien address since, apparently, late October, I haven't received it. Please resend: I wasn't ignoring you, promise! (Darn! Now it's too late to get that low rate mortgage!)</p>Tabletvolk Agog Over Custom Recognizers2004-12-03T13:31:00-10:002004-12-03T13:31:00-10:00larrytag:knowing.net,2004-12-03:/posts/2004/12/tabletvolk-agog-over-custom-recognizers/<p>Peter sez:</p>
<blockquote>
<p>Julia really likes Loren's animated demo of his Circuit App…Very few actually venture into the complex yet so exciting world of custom recognizers that work on shapes. That's why Loren's and xThink's applications look so darn impressive - they are the cream of the crop, the ultimate and …</p></blockquote><p>Peter sez:</p>
<blockquote>
<p>Julia really likes Loren's animated demo of his Circuit App…Very few actually venture into the complex yet so exciting world of custom recognizers that work on shapes. That's why Loren's and xThink's applications look so darn impressive - they are the cream of the crop, the ultimate and most natural instance of the digital pen-screen interaction… <em>[via]{style="FONT-STYLE: italic"}</em> [Peter on Tech]</p>
</blockquote>
<p>Oh, this is exciting stuff… I’ve been using Pynk / Python to do some interesting stuff with shape recognition… Gotta’ finish it up and get it into article form before I can talk about it.</p>Holiday Stress Relief: Virtual bubble-wrap2004-12-03T13:23:00-10:002004-12-03T13:23:00-10:00larrytag:knowing.net,2004-12-03:/posts/2004/12/holiday-stress-relief-virtual-bubble-wrap/<p>::: {.Section1}
This is funny. It’s also an example of “So silly and pointless, Flash must be worth looking to for inspiration as a programming tool”:</p>
<blockquote>
<p>\< ![if !vml]><img alt="Virtual Bubble Wrap" height="183" src="https://boingboing.net/images/virtual_bubble_wrap.jpg" width="166">\< ![endif]>Pop your way to a state of bliss with Virtual Bubble Wrap. <em>[Via]{style="font-style:italic"}</em> [Boing Boing]
:::</p>
</blockquote>Finally, a website for Managed DirectX developers!2004-12-03T13:07:00-10:002004-12-03T13:07:00-10:00larrytag:knowing.net,2004-12-03:/posts/2004/12/finally-a-website-for-managed-directx-developers/<p>::: {.Section1}</p>
<blockquote>
<p>Andy "ZMan" Dunn who has created a website, <a href="http://www.thezbuffer.com/" title="http://www.thezbuffer.com/">The Z Buffer</a>, that's completely dedicated to Managed DirectX goodness. <em>[Via]{style="font-style:italic"}</em> [InkBlog: The Random Musings of David Weller]
:::</p>
</blockquote>Yeah, it is at least a little about Text entry speed2004-12-03T12:43:00-10:002004-12-03T12:43:00-10:00larrytag:knowing.net,2004-12-03:/posts/2004/12/yeah-it-is-at-least-a-little-about-text-entry-speed/<blockquote>
<p>Iggy says: I wonder if anybody really cares about text entry speeds in a time when cheap scanners and great OCR technologies are widely available. I doubt there is any relationship between text entry speeds and good writing or good coding which are text intensive activities…Most good writing or …</p></blockquote><blockquote>
<p>Iggy says: I wonder if anybody really cares about text entry speeds in a time when cheap scanners and great OCR technologies are widely available. I doubt there is any relationship between text entry speeds and good writing or good coding which are text intensive activities…Most good writing or coding that i have done involved an iterative process that had some design or outlining (big picture analysis and all that) and then the laying out of text, and then some more design/outlining, and then more text or rearranging of the exisiting text. This process is not enhanced by faster text entry speeds…<em>[via]{style="FONT-STYLE: italic"}</em> [Tablet PC hep!]</p>
</blockquote>
<p>While it’s definitely true that editing and revising are crucial to writing / coding (and this is one of the reasons why the TIP isn’t the sole answer to creating a killer writing app on the Tablet), one of the things that has <em>[really]{style="FONT-STYLE: italic"}</em> struck me while working on Pynk is that it’s really unacceptable to take 30 seconds to get “[io.Ink.Strokes.ToString()]{style="FONT-FAMILY: 'Courier New'"}” into the machine.</p>Delphi is on the TIOBE Programming Community Index for November 2004 with 4 green up arrows!2004-12-03T12:34:00-10:002004-12-03T12:34:00-10:00larrytag:knowing.net,2004-12-03:/posts/2004/12/delphi-is-on-the-tiobe-programming-community-index-for-november-2004-with-4-green-up-arrows/<p>\<</p>
<p>div class="Section1"></p>
<blockquote>
<div>
<p>The <a href="https://www.tiobe.com/tiobe-index/" title="http://www.tiobe.com/tiobe_index/tekst.htm">TIOBE Programming Community monthly index</a> lists the popularity of programming languages… <strong>[The Programming Community Index for November 2004]{style="; font-weight:bold"}</strong></p>
</div>
<p><em>[Via]{style=";font-style:italic"}</em> [Sip from the Firehose - David Intersimone "David I"]</p>
</blockquote>Unit Testing ASP.NET Code2004-12-03T12:33:00-10:002004-12-03T12:33:00-10:00larrytag:knowing.net,2004-12-03:/posts/2004/12/unit-testing-aspnet-code/<p>::: {.Section1}</p>
<blockquote>
<p>Scott Hanselman has a great entry on <a href="https://www.hanselman.com/blog/PermaLink.aspx?guid=944a5284-6b8d-4366-81e8-2e241401e1b3" title="http://www.hanselman.com/blog/PermaLink.aspx?guid=944a5284-6b8d-4366-81e8-2e241401e1b3">unit testing ASP.NET code by using Cassini</a> <em>[via]{style="font-style:italic"}</em> [<a href="http://www.winterdom.com/">Commonality</a>]
:::</p>
</blockquote>The RESTful Web2004-12-03T12:32:00-10:002004-12-03T12:32:00-10:00larrytag:knowing.net,2004-12-03:/posts/2004/12/the-restful-web/<p>::: {.Section1}</p>
<blockquote>
<p>Joe Gregorio has a really nice column up on XML.COM: <a href="https://www.xml.com/pub/a/2004/12/01/restful-web.html" title="http://www.xml.com/pub/a/2004/12/01/restful-web.html">How to create a REST Protocol</a>. <em>[Via]{style="font-style:italic"}</em> [<a href="https://bitworking.org/news/2004/12/The_RESTful_Web">BitWorking</a>]
:::</p>
</blockquote>Generics: .NET vs. Tiger -- Boxing Penalty Is Very Real2004-12-02T15:58:00-10:002004-12-02T15:58:00-10:00larrytag:knowing.net,2004-12-02:/posts/2004/12/generics-net-vs-tiger-boxing-penalty-is-very-real/<p>We're not supposed to publish benchmark numbers on beta code, so I'll just urge you to try this one on your own. A colleague of mine, a noted Java author, recently disparaged .NET's generics, saying they were “based on” work done in Java and that Java 1.5's generics and …</p><p>We're not supposed to publish benchmark numbers on beta code, so I'll just urge you to try this one on your own. A colleague of mine, a noted Java author, recently disparaged .NET's generics, saying they were “based on” work done in Java and that Java 1.5's generics and the forthcoming generics in .NET 2.0 were implemented “the same way.” This guy's pretty prominent, so I bothered to look under the hood to confirm some stuff...</p>
<p>The issue is that when a Java 1.5 generic uses a Java “primitive type,“ it boxes and unboxes the type into an <strong>object</strong>, which is transparent to the programmer but has a significant overhead. .NET 2.0 Generics, on the other hand, does <em>not</em> use <strong>Object</strong>s when working with “value types“. So .NET generics and Java generics should have different runtime characteristics, based on how much boxing and unboxing goes on. The questions are whether there's a significant difference (yes, if the following is an indicator) and whether there's a <em>practical</em> difference (depends on how often data structures working on value types are used -- experience would suggest “pretty often“).</p>
<p>Like I said, we're not supposed to print benchmarks, but try out these two programs (which were <strong>specifically written</strong> to highlight an implementation difference between the two platforms):</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="n">Program</span><span class="p">.</span><span class="n">cs</span><span class="w"> </span><span class="n">#region</span><span class="w"> </span><span class="k">Using</span><span class="w"> </span><span class="n">directives</span><span class="o">></span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="k">System</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="k">System</span><span class="p">.</span><span class="n">Collections</span><span class="p">.</span><span class="n">Generic</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="k">using</span><span class="w"> </span><span class="k">System</span><span class="p">.</span><span class="nc">Text</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="n">#endregion</span><span class="w"> </span><span class="n">namespace</span><span class="w"> </span><span class="n">ConsoleApplication1</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">Program</span><span class="o">></span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="n">void</span><span class="w"> </span><span class="n">Main</span><span class="p">(</span><span class="n">string</span><span class="err">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">RunIt</span><span class="p">();</span><span class="w"> </span><span class="nc">DateTime</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="k">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">DateTime</span><span class="w"> </span><span class="o">></span><span class="p">.</span><span class="n">Now</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">RunIt</span><span class="p">();</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="n">TimeSpan</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">elapsed</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nc">DateTime</span><span class="w"> </span><span class="o">></span><span class="p">.</span><span class="n">Now</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="k">start</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="n">Console</span><span class="w"> </span><span class="o">></span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="ss">"Elapsed time: {0} ms"</span><span class="p">,</span><span class="w"> </span><span class="n">elapsed</span><span class="p">);</span><span class="o">></span><span class="w"> </span><span class="n">Console</span><span class="w"> </span><span class="o">></span><span class="p">.</span><span class="n">ReadLine</span><span class="p">();</span><span class="o">></span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="n">void</span><span class="w"> </span><span class="n">RunIt</span><span class="p">()</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">List</span><span class="w"> </span><span class="o">><</span><span class="nc">int</span><span class="o">></span><span class="err">[]</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">List</span><span class="w"> </span><span class="o">><</span><span class="nc">int</span><span class="o">>[</span><span class="n">5</span><span class="o">]</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">List</span><span class="w"> </span><span class="o">><</span><span class="nc">int</span><span class="o">></span><span class="p">();</span><span class="o">></span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1000000</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">0</span><span class="o">]</span><span class="p">.</span><span class="k">Add</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">List</span><span class="w"> </span><span class="o">><</span><span class="nc">int</span><span class="o">></span><span class="w"> </span><span class="n">newArray</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="n">List</span><span class="w"> </span><span class="o">><</span><span class="nc">int</span><span class="o">></span><span class="w"> </span><span class="n">oldArray</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">i - 1</span><span class="o">]</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="n">foreach</span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">oldArray</span><span class="p">)</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">newArray</span><span class="p">.</span><span class="k">Add</span><span class="p">(</span><span class="n">oldArray</span><span class="o">[</span><span class="n">j</span><span class="o">]</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">.</span><span class="n">Length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">List</span><span class="w"> </span><span class="o">><</span><span class="nc">int</span><span class="o">></span><span class="w"> </span><span class="k">array</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="n">foreach</span><span class="w"> </span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="k">array</span><span class="p">)</span><span class="o">></span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="nc">int</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">j</span><span class="p">;</span><span class="o">></span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="n">vs</span><span class="p">.</span><span class="w"> </span><span class="n">GenericValueArrayListTest</span><span class="p">.</span><span class="n">java</span><span class="w"> </span><span class="n">import</span><span class="w"> </span><span class="n">java</span><span class="p">.</span><span class="n">util</span><span class="p">.</span><span class="o">*</span><span class="p">;</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="n">GenericValueArrayListTest</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="n">void</span><span class="w"> </span><span class="n">main</span><span class="p">(</span><span class="n">String</span><span class="err">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="n">RunIt</span><span class="p">();</span>
<span class="w"> </span><span class="nc">Date</span><span class="w"> </span><span class="k">start</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="nc">Date</span><span class="p">();</span>
<span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="err">{</span>
<span class="w"> </span><span class="n">RunIt</span><span class="p">();</span>
<span class="w"> </span><span class="err">}</span>
<span class="w"> </span><span class="nc">Date</span><span class="w"> </span><span class="n">finish</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="nc">Date</span><span class="p">();</span>
<span class="w"> </span><span class="k">System</span><span class="p">.</span><span class="k">out</span><span class="p">.</span><span class="n">printf</span><span class="p">(</span><span class="ss">"Elapsed time: %d ms"</span><span class="p">,</span><span class="w"> </span><span class="n">finish</span><span class="p">.</span><span class="n">getTime</span><span class="p">()</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="k">start</span><span class="p">.</span><span class="n">getTime</span><span class="p">());</span>
<span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="n">void</span><span class="w"> </span><span class="n">RunIt</span><span class="p">()</span>
<span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="n">ArrayList</span><span class="o"><</span><span class="k">Integer</span><span class="o">></span><span class="err">[]</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o">[</span><span class="n">5</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">.</span><span class="n">length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="err">{</span>
<span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o"><</span><span class="k">Integer</span><span class="o">></span><span class="p">();</span>
<span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">1000000</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">0</span><span class="o">]</span><span class="p">.</span><span class="k">add</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
<span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">.</span><span class="n">length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="err">{</span>
<span class="w"> </span><span class="n">ArrayList</span><span class="o"><</span><span class="k">Integer</span><span class="o">></span><span class="w"> </span><span class="n">newArray</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span><span class="n">ArrayList</span><span class="o"><</span><span class="k">Integer</span><span class="o">></span><span class="w"> </span><span class="n">oldArray</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">i - 1</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="err">:</span><span class="w"> </span><span class="n">oldArray</span><span class="p">)</span><span class="err">{</span>
<span class="w"> </span><span class="n">newArray</span><span class="p">.</span><span class="k">add</span><span class="p">(</span><span class="n">j</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">2</span><span class="p">);</span>
<span class="w"> </span><span class="err">}</span>
<span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">.</span><span class="n">length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="n">ArrayList</span><span class="o"><</span><span class="k">Integer</span><span class="o">></span><span class="w"> </span><span class="k">array</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">n</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span>
<span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="nc">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="err">:</span><span class="w"> </span><span class="k">array</span><span class="p">)</span><span class="err">{</span>
<span class="w"> </span><span class="nc">int</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">j</span><span class="p">;</span>
<span class="w"> </span><span class="err">}</span>
<span class="w"> </span><span class="err">}</span><span class="w"> </span><span class="err">}</span>
<span class="w"> </span><span class="err">}</span>
</code></pre></div>Aw, dammit...2004-12-02T11:52:00-10:002004-12-02T11:52:00-10:00larrytag:knowing.net,2004-12-02:/posts/2004/12/aw-dammit/<p>Argh! One of the drives on my main dev machine just sh*t the brick. Just as I was pondering buying one of those “one-button push” backup systems. Ironically, the drive that died had the /Program Files/ where my backup software lived. So now I'm staring at the machine, trying …</p><p>Argh! One of the drives on my main dev machine just sh*t the brick. Just as I was pondering buying one of those “one-button push” backup systems. Ironically, the drive that died had the /Program Files/ where my backup software lived. So now I'm staring at the machine, trying to figure out what the safest course of action is (thinking that, in situations like this, there is a better-than-normal chance of the system being in some wildly delicate state...)</p>
<p>I got to go to RAID, too.</p>
<p>Plus, I have, like, five deadlines in the next week.</p>Pens of Peril! Rome: Total Ink! Half-Stylus!2004-12-01T16:23:00-10:002004-12-01T16:23:00-10:00larrytag:knowing.net,2004-12-01:/posts/2004/12/pens-of-peril-rome-total-ink-half-stylus/<p>::: {.Section1}</p>
<blockquote>
<div>
<p><strong>"3 Leaf Development is putting together "Arcs of Fire"….</strong></p>
</div>
<p>Check the website of the game - <a href="https://www.ageofempires.com/" title="http://www.arcsoffire.com/">www.arcsoffire.com</a> - for more (well, a <strong>little</strong> more) information…the game is to be based on a forthcoming <strong><em>*Tablet PC Game SDK</em></strong><em>. Very exciting, and I hope more developers will take advantage of …</em></p></blockquote><p>::: {.Section1}</p>
<blockquote>
<div>
<p><strong>"3 Leaf Development is putting together "Arcs of Fire"….</strong></p>
</div>
<p>Check the website of the game - <a href="https://www.ageofempires.com/" title="http://www.arcsoffire.com/">www.arcsoffire.com</a> - for more (well, a <strong>little</strong> more) information…the game is to be based on a forthcoming <strong><em>*Tablet PC Game SDK</em></strong><em>. Very exciting, and I hope more developers will take advantage of such a tool. … </em>[Via]{style="font-style:italic"}* [Peter on Tech]
:::</p>
</blockquote>Tablet PCs help with name recognition2004-12-01T06:54:00-10:002004-12-01T06:54:00-10:00larrytag:knowing.net,2004-12-01:/posts/2004/12/tablet-pcs-help-with-name-recognition/<p>::: {.Section1}</p>
<blockquote>
<p>"It's not going to come up with anything." That's what I thought when <a href="https://www.tuxreports.com/whatisnew/" title="http://www.whatisnew.com">Lora</a> challenged me to Google her <em>[first]{style="font-style:italic"}</em> name. I couldn't have been more wrong. Lora's site, WhatIsNew, is listed as the third item. In disbelief, I had to try my name, Loren. Hmm …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>"It's not going to come up with anything." That's what I thought when <a href="https://www.tuxreports.com/whatisnew/" title="http://www.whatisnew.com">Lora</a> challenged me to Google her <em>[first]{style="font-style:italic"}</em> name. I couldn't have been more wrong. Lora's site, WhatIsNew, is listed as the third item. In disbelief, I had to try my name, Loren. Hmm. This blog is listed 6^th^… I'm guessing it's because of the Tablet PC…. <em>[via]{style="font-style:italic"}</em> [Incremental Blogger]</p>
<p>[What a riot! I’m <a href="https://www.bing.com:443/?toHttps=1&redig=3AB28D45DFDE49CAA3D79DE110C6C428">“Larry” #48</a>! Below Larry King and Lawrence Lessig, but above Larry Ellison (heh)! Most amazingly, in both Google and MSN Search I’m higher than the <em>[real]{style="font-style:italic"}</em> Larry O’Brien.]{style=""}
:::</p>
</blockquote>Ambient Design's ArtRage wins "Think in Ink" $100K Prize2004-12-01T06:36:00-10:002004-12-01T06:36:00-10:00larrytag:knowing.net,2004-12-01:/posts/2004/12/ambient-designs-artrage-wins-think-in-ink-100k-prize/<p>Ambient Design's <a href="https://www.artrage.com/about-us/">ArtRage</a> has won first-place and \$100K in a contest sponsored by Microsoft to boost the TabletPC. The product is a favorite among TabletPC users with any artistic ability at all (and thus, unfortunately, excluding me). I also think it's a pretty good way to boost the platform, a …</p><p>Ambient Design's <a href="https://www.artrage.com/about-us/">ArtRage</a> has won first-place and \$100K in a contest sponsored by Microsoft to boost the TabletPC. The product is a favorite among TabletPC users with any artistic ability at all (and thus, unfortunately, excluding me). I also think it's a pretty good way to boost the platform, a relatively cheap way to inject some cash into the smaller, entrepreneurial companies that are most likely to produce the killer apps for the Tablet.</p>Couple arrested in medical marijuana bust receive $30K apology2004-11-30T13:52:00-10:002004-11-30T13:52:00-10:00larrytag:knowing.net,2004-11-30:/posts/2004/11/couple-arrested-in-medical-marijuana-bust-receive-30k-apology/<p>I would have said “only in Marin” if I still lived there, but a Kona couple has received \$30,000 in a wrongful arrest settlement for being busted for growing pot. They were held for 8 hours. Nice work if you can get it.</p>Clippy returns: *knock knock knock* It looks like you're visiting a porn site. Would you like some help?2004-11-30T11:43:00-10:002004-11-30T11:43:00-10:00larrytag:knowing.net,2004-11-30:/posts/2004/11/clippy-returns-knock-knock-knock-it-looks-like-youre-visiting-a-porn-site-would-you-like-some-help/<p><a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d827"> Predictive Algorithms for Browser Support of Habitual User Activities on the Web</a> on [<a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dtechnical%252breport%2526id%253d827">Microsoft Research Publications</a>]</p>
<p>Yeah, I'm sure most people will happily trade privacy for help browsing known sites and clicking on links.</p>Sciral Consistency2004-11-30T09:35:00-10:002004-11-30T09:35:00-10:00larrytag:knowing.net,2004-11-30:/posts/2004/11/sciral-consistency/<p>I have never registered a piece of shareware faster than I did this morning after trying out Sciral Consistency. This is a to-do manager for repetitive tasks that can occur within a range of days (for instance, you need to do the bills twice a month, but an Outlook repetitive …</p><p>I have never registered a piece of shareware faster than I did this morning after trying out Sciral Consistency. This is a to-do manager for repetitive tasks that can occur within a range of days (for instance, you need to do the bills twice a month, but an Outlook repetitive task scheduling them for “5 o'clock on the 15th and the 1st” is overly rigid. Or, you want to make sure that you keep in touch with old friends at least once a quarter.)</p>
<p>The interface couldn't be more intuitive: a matrix of days versus tasks, with task status color coded, and a simple dot indicating completion (and recalculating the task going forward from that day).</p>Touch Table -- Put Tablet XP On This!2004-11-24T10:59:00-10:002004-11-24T10:59:00-10:00larrytag:knowing.net,2004-11-24:/posts/2004/11/touch-table-put-tablet-xp-on-this/<p>This is something I'd love to see running Tablet XP: a table whose surface is a touch-screen display running at 1600 x 1200. <em>via</em> \<a href="http://radio.weblogs.com/0001011/2004/11/24.html%23a8707" ">Scoble.</p>What's wrong, Flipper, is Bud in trouble?2004-11-23T09:43:00-10:002004-11-23T09:43:00-10:00larrytag:knowing.net,2004-11-23:/posts/2004/11/whats-wrong-flipper-is-bud-in-trouble/<blockquote>
<div>
<p>Reuters reports that a pod of dolphins protected swimmers from an attacking great white shark off the coast of New Zealand's North island:</p>
<p>Link <em>[Via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</div>
</blockquote>
<p>Nice story, but I’m not sure I believe it.</p>Casey Chesnut Unjumps The Shark2004-11-23T08:24:00-10:002004-11-23T08:24:00-10:00larrytag:knowing.net,2004-11-23:/posts/2004/11/casey-chesnut-unjumps-the-shark/<p>Casey Chesnut, who’s my favorite Tablet PC programmer because he does all this stuff apparently without realizing that it’s supposed to be hard, has written a neural network based character recognizer for the Tablet PC (<em>[via]{style="FONT-STYLE: italic"}</em> [<a href="https://swigartconsulting.blogs.com/tech_blender/2004/11/using_ai_for_re.html">Tech Blender</a>]). He normalizes an ink stroke in x …</p><p>Casey Chesnut, who’s my favorite Tablet PC programmer because he does all this stuff apparently without realizing that it’s supposed to be hard, has written a neural network based character recognizer for the Tablet PC (<em>[via]{style="FONT-STYLE: italic"}</em> [<a href="https://swigartconsulting.blogs.com/tech_blender/2004/11/using_ai_for_re.html">Tech Blender</a>]). He normalizes an ink stroke in x,y,and t (time) (a technique I discussed in <a href="https://www.developer.com/">two</a> <a href="https://www.developer.com/">recent DevX</a> articles) and quantizes it into a discrete number of inputs (50) for the NN.</p>
<p>That's actually fairly close to my understanding of how Microsoft's recognizer uses neural nets as well, although for continuous writing you obviously have to deal with letter pairs or even triples (I would think) and use some kind of sliding window across the input.</p>
<p>Post-neural net, you have an activation level per character, which you can feed into a Markov model of letter pairs and triples (if the last letter was a 'q' then the odds of this being a 'u'...). You then feed your letter-based options into a dictionary, which in turn you feed to a language model (the simplest being Markov models again).</p>
<p><strong>Or</strong> post-neural net, you move directly to a BNF-like grammar.</p>
<p>We gotta’ get Casey to Windows Anywhere...</p>Tablet PC Jumps The Shark2004-11-23T07:59:00-10:002004-11-23T07:59:00-10:00larrytag:knowing.net,2004-11-23:/posts/2004/11/tablet-pc-jumps-the-shark/<blockquote>
<p><strong>Time magazine today named the Intel Centrino mobile technology wireless surfboard as one of the Coolest Inventions of 2004…</strong><br>
<strong>[]{style="FONT-WEIGHT: bold"}</strong></p>
<p><strong><em>[Via]{style="FONT-WEIGHT: bold; FONT-STYLE: italic"}</em></strong> [Tablet PC hep!]</p>
</blockquote>
<p>Lordy, lordy, lordy. When <em>[this]{style="FONT-STYLE: italic"}</em> counts as the coolest thing that done with a technology, we …</p><blockquote>
<p><strong>Time magazine today named the Intel Centrino mobile technology wireless surfboard as one of the Coolest Inventions of 2004…</strong><br>
<strong>[]{style="FONT-WEIGHT: bold"}</strong></p>
<p><strong><em>[Via]{style="FONT-WEIGHT: bold; FONT-STYLE: italic"}</em></strong> [Tablet PC hep!]</p>
</blockquote>
<p>Lordy, lordy, lordy. When <em>[this]{style="FONT-STYLE: italic"}</em> counts as the coolest thing that done with a technology, we’re in trouble. BTW, I’m doing a surf report Konfabulator widget (For the logic impaired, it’s usually more important to get a weather and surf update when you’re <em>[not]{style="FONT-STYLE: italic"}</em> already at the beach.)</p>Let the fools have their tartar sauce!2004-11-23T07:53:00-10:002004-11-23T07:53:00-10:00larrytag:knowing.net,2004-11-23:/posts/2004/11/let-the-fools-have-their-tartar-sauce/<p>::: {.Section1}
There’s an early Simpsons where Mr. Burns somehow comes to believe that Homer is a fellow predatory capitalist. When he asks Homer how to improve the working environment, Homer says that he’d like the fish sticks in the cafeteria to come with more tartar sauce. Burns marvels …</p><p>::: {.Section1}
There’s an early Simpsons where Mr. Burns somehow comes to believe that Homer is a fellow predatory capitalist. When he asks Homer how to improve the working environment, Homer says that he’d like the fish sticks in the cafeteria to come with more tartar sauce. Burns marvels at this Machiavellian way to buy the affection of the exploited.</p>
<p>My friend Fabian is consulting at Google and is dazzled by the tartar sauce:</p>
<blockquote>
<div>
<p>This is my fourth day out at Google and I just have to comment on the cafeteria. Like Butthead used to say, "It is the coolest thing I've ever seen!" The menu is outstanding and the price? Free. That's right, after you load up on food there isn't a cash register in sight. It's amazing.</p>
</div>
<p>And if that isn't enough, they just don't serve lunch, they serve dinner too. <em>[Via]{style="FONT-STYLE: italic"}</em> [The Daily Nugget]
:::</p>
</blockquote>Language Oriented Programming2004-11-22T09:34:00-10:002004-11-22T09:34:00-10:00larrytag:knowing.net,2004-11-22:/posts/2004/11/language-oriented-programming/<div>
Via \[[Lambda the Ultimate - Programming Languages Weblog](http://lambda-the-ultimate.org/node/377)\] I found JetBrain’s Sergey Dimitriev’s **[very important]{style="FONT-WEIGHT: bold"}** whitepaper on "[Language Oriented Programming: The Next Programming Paradigm](http://www.onboard.jetbrains.com/articles/04/10/lop/)"
This is the best brief explanation I’ve …</div><div>
Via \[[Lambda the Ultimate - Programming Languages Weblog](http://lambda-the-ultimate.org/node/377)\] I found JetBrain’s Sergey Dimitriev’s **[very important]{style="FONT-WEIGHT: bold"}** whitepaper on "[Language Oriented Programming: The Next Programming Paradigm](http://www.onboard.jetbrains.com/articles/04/10/lop/)"
This is the best brief explanation I’ve seen of the emerging consensus that the software development industry is finally poised to move beyond general-purpose languages. This echoes much of what Microsoft is saying about software factories and domain-specific languages (DSLs): in a recent discussion I had with Jack Greenfield of Microsoft I finally grokked that software factories don’t *reduce* to DSLs, but the rapid creation of DSLs by programming teams within vertical industries is absolutely key.
Dimitriev lays out the practicalities of what he nicely labels Language Oriented Programming (LOP). (I’ve said that I would die happy if there were no more “-Oriented Programming”s, but it’s better than the current fad of “-Driven Programming.”) This paper and JetBrains’ “Meta-Programming System” (MPS) are echoing what happened with refactoring: there was an emerging theoretical and evangelical consensus, JetBrains (then IntelliJ) produced a product that, while perhaps having implementation warts, was half-a-decade ahead of the industry.
I am fully convinced that this is the future of vertical-industry software development.
</div>The Message of the Tablet Medium2004-11-21T10:08:00-10:002004-11-21T10:08:00-10:00larrytag:knowing.net,2004-11-21:/posts/2004/11/the-message-of-the-tablet-medium/<blockquote>
<p>…So here's some homework for the mighty tablet armada: <strong>[sell me on the tablet platform]{style="FONT-WEIGHT: bold"}</strong>…Given all that, convince me. Sell it to me. Design me a suitable demo. Explain to me exactly why I shouldn't go and get some cute little touch-screen sub-notebook, a ThinkPad with …</p></blockquote><blockquote>
<p>…So here's some homework for the mighty tablet armada: <strong>[sell me on the tablet platform]{style="FONT-WEIGHT: bold"}</strong>…Given all that, convince me. Sell it to me. Design me a suitable demo. Explain to me exactly why I shouldn't go and get some cute little touch-screen sub-notebook, a ThinkPad with 7+ hour battery life, or a full-featured Media Center notebook with booming speakers and a gorgeous screen. <em>[Challenges]{style="FONT-STYLE: italic"}</em> [Peter on Tech]</p>
</blockquote>
<p>The last thing that you should do when someone says “Convince me of X” is start talking. “Convince me of X” <em>[means]{style="FONT-STYLE: italic"}</em> “My skepticism of X has increased to the point where my emotions are telling me <em>[Not X]{style="FONT-STYLE: italic"}</em>.” And so when someone says “Convince me…” what you should really do is listen.</p>
<p>I will now ignore what I just said.</p>
<p>The thing about the Tablet PC is that The Medium Is The Message. The Tablet PC will only succeed when software developers:</p>
<p>[[·[ ]{style="FONT: 7pt 'Times New Roman'"}]{style="mso-list: Ignore"}]{style="FONT-FAMILY: Symbol"} See the Tablet PC as a Medium separate from a Laptop; and</p>
<p>[[·[ ]{style="FONT: 7pt 'Times New Roman'"}]{style="mso-list: Ignore"}]{style="FONT-FAMILY: Symbol"} Understand the ["the change of scale or pace or pattern" that [the Tablet] "introduces into human affairs."]{style="FONT-FAMILY: Tahoma"}</p>
<p>[[·[ ]{style="FONT: 7pt 'Times New Roman'"}]{style="mso-list: Ignore"}]{style="FONT-FAMILY: Symbol"} [Address that message in software]{style="FONT-FAMILY: Tahoma"}</p>
<p>Clearly, the use of the pen coupled with the disuse of the keyboard is the most obvious change to pattern, but it’s become fashionable to ignore that since so there’s so little software that engages that message. So there’s lots of discussion about “mobility,” where the Tablet PC’s “message” is that “It’s fully functional even when cradled in the crook of your left arm.” But the Tablet PC’s “mobility” message is inconsistent, since most still have indoor screens and limited battery life, so it’s mobility message is “It’s fully functional when cradled in the crook of your left arm when you’re in a corridor of your workplace,” which is, not surprisingly, <em>[exactly]{style="FONT-STYLE: italic"}</em> what’s conjured up by the “Corridor warrior” persona which was the most-used reference for whom the Tablet PC would be targeted (the medium <em>[is]{style="FONT-STYLE: italic"}</em> the message!).</p>
<p>For <em>[me]{style="FONT-STYLE: italic"}</em>, mobility means outdoor screens, long battery life, instant-on, and rugged enough to be carried in a backpack on a hike or, ideally, used on a diveboat. If I had <em>[that]{style="FONT-STYLE: italic"}</em>, I could do location-aware field guides on the Tablet PC, which you can’t do with a laptop (the “crook of the left-arm” thing is important to field guides).</p>
<p>Another part of the message of the Tablet PC that we fans ignore is that it’s <em>[not]{style="FONT-STYLE: italic"}</em> <em>[nearly]{style="FONT-STYLE: italic"}</em> as non-disruptive as a notepad. I wish it were, but it ain’t. Pulling out a Tablet PC to take notes is <em>[insanely]{style="FONT-STYLE: italic"}</em> disruptive. Once it’s down on the surface and you start writing, it’s more discrete for note-taking than a laptop, but when you turn it on or take it out of the pack, fuhgeddaboutit. So part of the pattern of using a Tablet PC in meetings for me is firing up OneNote, putting the machine in standby, walking in with the Tablet in my hand and getting it down on the table and in note-taking mode as quickly as possible. It’s still disruptive.</p>
<p>Going back to the fundamentals, the <strong>[disuse of the keyboard]{style="FONT-WEIGHT: bold"}</strong> is as much a part of the Tablet PC medium as the use of the pen. I’ve had the experience of having both a Tablet and a traditional laptop in front of me in a technical seminar (actually, a slate and a convertible, but the experience was the same). Let me tell you: fantastic experience. Longer thoughts and code at the speed of typing (technical seminar: keyboard clicks acceptable), drawings, connections, short notes with the stylus. It was such a good experience that I could <em>[well imagine]{style="FONT-STYLE: italic"}</em> an external digitizer attached to a keyboarded laptop running Tablet XP as the best solution for the types of meetings I most often have. That would be a better solution than an external keyboard attached to a Tablet, because for <em>[reading]{style="FONT-STYLE: italic"}</em> a vertical screen is better, while for <em>[writing / drawing]{style="FONT-STYLE: italic"}</em>, a horizontal surface is needed. It’s difficult to use the stylus on a convertible in laptop mode, it’s difficult to use the screen on a slate lying flat.</p>
<p>Having said all this, <strong>[why do I love the Tablet PC medium?]{style="FONT-WEIGHT: bold"}</strong> <strong>[Because I adore the stylus’ direct manipulation, gestures, and fast 2D pointing]{style="FONT-WEIGHT: bold"}</strong>. <em>[Those]{style="FONT-STYLE: italic"}</em>, to me, are the parts of the Tablet PC message that are unappreciated in all software and are only beginning to be addressed in some art programs and OneNote. When I think of what I’d love to be able to create / do with a Tablet PC, it generally involves these things. For instance, I’m convinced that there’s a broad class of outlining-type facilities that can be created in 2D space (a virtual corkboard; code refactoring; etc.). Or, association by pointing -- this, <strong>[not]{style="FONT-WEIGHT: bold"}</strong> that; this, <strong>[and]{style="FONT-WEIGHT: bold"}</strong> that; this, <strong>[in contrast to]{style="FONT-WEIGHT: bold"}</strong> that – these are things we do on notepads and whiteboards with a line, but what if that line were semantically meaningful? And no physical space can be folded, stretched, duplicated, and restructured the way that computer coordinates can be.</p>
<p>\<</p>
<p>p class=Section1 style="MARGIN-TOP: 5pt; MARGIN-BOTTOM: 5pt"> So to me, when I think of the Tablet PC, I think of this product that provides me with everything that the laptop does (in convertible mode) and has an entirely new category of possible software that is unrealized. As an end-user, I can understand why that’s frustrating, but as a developer, it’s what I live for.</p>100GB HD for Your Tablet: $1942004-11-19T15:02:00-10:002004-11-19T15:02:00-10:00larrytag:knowing.net,2004-11-19:/posts/2004/11/100gb-hd-for-your-tablet-194/<blockquote>
<p>Seagate 100GB 2.5" IDE for \<span class="math">\(194: "Amazon.com offers the Seagate 100GB 2.5-inch IDE 5400 rpm drive for notebook computers, model no. 9W3277-556, for \\)</span>193.99 with free shipping, as a reader found. <em>[Via]{style="FONT-STYLE: italic"}</em> [Tablog PC]</p>
</blockquote>
<p>Without an optical drive to boot from, how would …</p><blockquote>
<p>Seagate 100GB 2.5" IDE for \<span class="math">\(194: "Amazon.com offers the Seagate 100GB 2.5-inch IDE 5400 rpm drive for notebook computers, model no. 9W3277-556, for \\)</span>193.99 with free shipping, as a reader found. <em>[Via]{style="FONT-STYLE: italic"}</em> [Tablog PC]</p>
</blockquote>
<p>Without an optical drive to boot from, how would you get the Tablet OS onto the new drive?</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Possibilities for Intellisense(tm) in Pynk...2004-11-19T13:32:00-10:002004-11-19T13:32:00-10:00larrytag:knowing.net,2004-11-19:/posts/2004/11/possibilities-for-intellisensetm-in-pynk/<p>Julie points out that if it ain't got Intellisense, it ain't a productive programming environment. Now,</p>
<ul>
<li>Pynk doesn't even have cut-and-paste yet, so that comes first; and</li>
<li>It *should * be possible to use reflection to get, not quite Intellisense, but something like a list of properties and methods that might …</li></ul><p>Julie points out that if it ain't got Intellisense, it ain't a productive programming environment. Now,</p>
<ul>
<li>Pynk doesn't even have cut-and-paste yet, so that comes first; and</li>
<li>It *should * be possible to use reflection to get, not quite Intellisense, but something like a list of properties and methods that might be applicable to the current object; but</li>
<li>We're back to the PIP dilemma: I would need events firing as the user enters individual characters (at least, when they enter a '.'). Which you don't get with the PIP, but which I might be able to get off the <strong>RecognizerContext</strong> object's <strong>Recognize</strong> event. But, I don't think I can actually get a reference to the PIP's <strong>RecognizerContext</strong>, so I can't use the PIP for input in this scenario. But I want to move towards free-form ink and/or syntax-directed UIs anyway...</li>
</ul>
<p>P.S. I can't do something Intellisense-like within Shark itself, since it runs from static configuration files and Intellisense is inherently dynamic</p>Syntax- directed shark2004-11-19T10:07:00-10:002004-11-19T10:07:00-10:00larrytag:knowing.net,2004-11-19:/posts/2004/11/syntax-directed-shark/<p>James Kendrick nailed it. You can edit the Shark keyboard to use full words:</p>
<p>Making a syntax-directed programming editor that much easier to contemplate.</p>Longhorn to be 64-bits only?!?!?!2004-11-19T08:50:00-10:002004-11-19T08:50:00-10:00larrytag:knowing.net,2004-11-19:/posts/2004/11/longhorn-to-be-64-bits-only/<p><a href="https://swigartconsulting.blogs.com/tech_blender/2004/11/tech_blender_re_1.html">Tech Blender</a> points to this rumor that Longhorn will require 64-bit hardware. You know, one of the fairly easy lessons to draw from the 16- to 32-bit change is that it happened too late, that there was a great deal of pain because everyone tried to live with side-by-side APIs …</p><p><a href="https://swigartconsulting.blogs.com/tech_blender/2004/11/tech_blender_re_1.html">Tech Blender</a> points to this rumor that Longhorn will require 64-bit hardware. You know, one of the fairly easy lessons to draw from the 16- to 32-bit change is that it happened too late, that there was a great deal of pain because everyone tried to live with side-by-side APIs and “sort of” 32-bit versions of Windows etc. So, while I’d not heard this rumor before, it’s not inconceivable that it’s true.</p>TIP hooks would hook developers (and users)2004-11-18T12:23:00-10:002004-11-18T12:23:00-10:00larrytag:knowing.net,2004-11-18:/posts/2004/11/tip-hooks-would-hook-developers-and-users/<blockquote>
<p>What would you do if you had more programmatic access to the Tablet PC TIP? <em>[Via]{style="FONT-STYLE: italic"}</em> [Incremental Blogger]</p>
</blockquote>
<p>I think the general answer to this is that I want to be able to control the TIP via something awfully close to Backus-Naur Form. Here’s a classic …</p><blockquote>
<p>What would you do if you had more programmatic access to the Tablet PC TIP? <em>[Via]{style="FONT-STYLE: italic"}</em> [Incremental Blogger]</p>
</blockquote>
<p>I think the general answer to this is that I want to be able to control the TIP via something awfully close to Backus-Naur Form. Here’s a classic example of how math equation input might be defined:</p>
<blockquote>
<div class="highlight"><pre><span></span><code><span class="nv">input</span><span class="w"> </span><span class="o">::=</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">expr</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">eoi</span><span class="p">;</span>
<span class="nv">expr</span><span class="w"> </span><span class="o">::=</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">powterm</span><span class="w"> </span><span class="p">[{</span><span class="nv">ws</span><span class="w"> </span><span class="o">'^'</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">powterm</span><span class="p">}];</span>
<span class="nv">powterm</span><span class="w"> </span><span class="o">::=</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">factor</span><span class="w"> </span><span class="p">[{</span><span class="nf">ws</span><span class="w"> </span><span class="p">(</span><span class="o">'*'|'/'</span><span class="p">)</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">factor</span><span class="p">}];</span>
<span class="nv">factor</span><span class="w"> </span><span class="o">::=</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">term</span><span class="w"> </span><span class="p">[{</span><span class="nf">ws</span><span class="w"> </span><span class="p">(</span><span class="o">'+'|'-'</span><span class="p">)</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">term</span><span class="p">}];</span>
<span class="nv">term</span><span class="w"> </span><span class="o">::=</span><span class="w"> </span><span class="o">'</span><span class="p">(</span><span class="o">'</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">expr</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="o">'</span><span class="p">)</span><span class="o">'</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="o">'-'</span><span class="w"> </span><span class="nv">ws</span><span class="w"> </span><span class="nv">expr</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="nv">number</span><span class="p">;</span>
<span class="nv">number</span><span class="w"> </span><span class="o">::=</span><span class="w"> </span><span class="p">{</span><span class="nv">dgt</span><span class="p">}</span><span class="w"> </span><span class="p">[</span><span class="o">'.'</span><span class="w"> </span><span class="p">{</span><span class="nv">dgt</span><span class="p">}]</span><span class="w"> </span><span class="p">[(</span><span class="o">'</span><span class="nv">e</span><span class="o">'|'</span><span class="nv">E</span><span class="o">'</span><span class="p">)</span><span class="w"> </span><span class="p">[</span><span class="o">'-'</span><span class="p">]</span><span class="w"> </span><span class="p">{</span><span class="nv">dgt</span><span class="p">}];</span>
<span class="nv">dgt</span><span class="w"> </span><span class="o">::=</span><span class="w"> </span><span class="o">'</span><span class="mi">0</span><span class="o">'|'</span><span class="mi">1</span><span class="o">'|'</span><span class="mi">2</span><span class="o">'|'</span><span class="mi">3</span><span class="o">'|'</span><span class="mi">4</span><span class="o">'|'</span><span class="mi">5</span><span class="o">'|'</span><span class="mi">6</span><span class="o">'|'</span><span class="mi">7</span><span class="o">'|'</span><span class="mi">8</span><span class="o">'|'</span><span class="mi">9</span><span class="o">'</span><span class="p">;</span>
<span class="nv">ws</span><span class="w"> </span><span class="o">::=</span><span class="w"> </span><span class="p">[{</span><span class="o">'</span><span class="w"> </span><span class="o">'|'</span>\<span class="nv">t</span><span class="o">'|'</span>\<span class="nv">n</span><span class="o">'|'</span>\<span class="nv">r</span><span class="o">'</span><span class="p">}];</span>
</code></pre></div>
</blockquote>
<p>That’s really pretty darn comprehensible if you ask me.</p>Shark Programming?2004-11-18T10:35:00-10:002004-11-18T10:35:00-10:00larrytag:knowing.net,2004-11-18:/posts/2004/11/shark-programming/<p>Loren noted that what my video of Pynk programming <em>really</em> demonstrates is that it takes me 1:23 to handwrite “eval(io.Ink.Strokes.ToString())”. Too true. I've been thinking a lot about how to evolve Pynk and, although my first priority is making the “just plain text” interactive console …</p><p>Loren noted that what my video of Pynk programming <em>really</em> demonstrates is that it takes me 1:23 to handwrite “eval(io.Ink.Strokes.ToString())”. Too true. I've been thinking a lot about how to evolve Pynk and, although my first priority is making the “just plain text” interactive console fully functional, the ultimate goal is to make a viable ink-based programming environment, and that's going to take some “outside the box” thinking.</p>
<p>This is what occurred to me on my walk this morning. Shark is an impressive new input technique from IBM:</p>
<p>This image shows some of the important features (short travel between related keys, button density) but not the most striking when it's used: gesture-based recognition (:50 screencast).</p>
<p>I plan on training myself with Shark for several hours and then timing my input against the TabletPC TIP. We'll see.</p>
<p>But it got me thinking of a Shark-like syntax-directed input pad for Pynk, combining keywords, in-scope variables, and perhaps even namespace-available classnames:</p>
<p>What do you think?</p>
<p>P.S. Iggy's recent post that “It's not about text input” is also apropos</p>Oh, _that's_ why he doesn't return my emails...2004-11-18T10:08:00-10:002004-11-18T10:08:00-10:00larrytag:knowing.net,2004-11-18:/posts/2004/11/oh-_thats_-why-he-doesnt-return-my-emails/<p>According to Steve Ballmer, Bill Gates receives 4,000,000 emails <em>per day</em>. (<em>via Alice and Bill)</em></p>
<p>You know, somehow I think that after the fabulous spam-filtering technology of Microsoft Exchange and Outlook, there might, just might, be human eyes between <a href="mailto:billg@microsoft.com">billg@microsoft.com</a> and the man himself.</p>Speech recognition circa 20042004-11-18T08:34:00-10:002004-11-18T08:34:00-10:00larrytag:knowing.net,2004-11-18:/posts/2004/11/speech-recognition-circa-2004/<blockquote>
<p>If you've never tried dictation, you can get a sense of how it works by watching a ~~video~~ screencast I made shortly after I installed Version 8 of NaturallySpeaking. The out-of-the-box experience was dramatically better than before <em>[via]{style="FONT-STYLE: italic"}</em> [Jon's Radio]</p>
<p>Not long ago I had a chat …</p></blockquote><blockquote>
<p>If you've never tried dictation, you can get a sense of how it works by watching a ~~video~~ screencast I made shortly after I installed Version 8 of NaturallySpeaking. The out-of-the-box experience was dramatically better than before <em>[via]{style="FONT-STYLE: italic"}</em> [Jon's Radio]</p>
<p>Not long ago I had a chat with one of Microsoft’s recognition guys (J. Pittmann) and learned some interesting factoids about how voice recognition works. The most interesting is that they throw out <em>[tons]{style="FONT-STYLE: italic"}</em> of data and can’t take advantage of the added horsepower available in offline mode. You see, for me voice dictation would be much, <em>[much]{style="FONT-STYLE: italic"}</em> more useful if I could transcribe notes taken while driving or walking – when I’m at my computer in a quiet environment, I’d just as well use the keyboard or pen. The realtime aspect of recognition is not of much interest to me, but I would be thrilled if I could say “Take the next 18 hours to recognize what I babbled on my two-hour drive.”</p>
<p>Not with today’s algorithms. All speech recognizers began their lives several Moore’s generations ago and all use algorithms that began life in the pre-Pentium era, and were designed for very low sampling rates and bit size. (Today’s recognizers probably use higher-quality signals, but the point is that the algorithmic assumptions are what we’d today consider low-fidelity, low-memory, low-CPU.)</p>
<p>Basically, they quickly throw out everything to try to get to vectors representing sub-phonemes (“codes”) that they template-match to produce phonemes (). They try to match the stream of these to complete words and word-sequences, using probabilistic pattern matching and language models.</p>
<p>This bottom-up approach has gotten to the point where it works pretty well. But at every step up the abstraction chain, they abandon data (raw signal to code, code to phoneme, etc.) so that by the time they get to the language model, they don’t have the ability to revisit their initial data. For instance, if you use the words “C Plus Plus” in a document, what you’ll find is that you break the phrases used <em>[afterwards]{style="FONT-STYLE: italic"}</em>, because the phonemes of “++” are always screwing up the model. And once the language model is screwed up, you get this bizarre semi-phonetic mess that’s virtually impossible to work with. I’d probably <em>[prefer]{style="FONT-STYLE: italic"}</em> a pure phonetic output attached to the original note – the phonetic model would be indexable and searchable. It’s sort of like working with Ink – you learn that translating 100% of your handwriting into text is not necessary, so long as 99% of your handwriting is searchable.</p>
<p>By the way, one thing that really struck me about Jon’s screencast is how differently he approaches voice dictation. When composing text at my computer, words come out of me in a way that is entirely alien from my speech habits. My chief pitfall as a public speaker is that I talk fast. On the other hand, my professional writing comes out of me at the pace of about one phrase every 30 seconds, and that’s when I’m on a roll. One of the interesting things about Jon’s screencast is that he’s actually <em>[talking]{style="FONT-STYLE: italic"}</em>. When I’ve tried to use voice dictation, I’ve always basically voiced the word that I would otherwise type, which makes me sound like a robot with a run-down battery. “Voice dictation is…intriguing…to me…”</p>
</blockquote>Screencast, Tablet PC, C#, Python, and Scoble Doesn't Link To Me: What's A Guy Got To Do?2004-11-17T07:13:00-10:002004-11-17T07:13:00-10:00larrytag:knowing.net,2004-11-17:/posts/2004/11/screencast-tablet-pc-c-python-and-scoble-doesnt-link-to-me-whats-a-guy-got-to-do/<p>Sheesh, I do a screencast (which is just like a podcast, only even more hip and cutting edge) of a Tablet PC program that I wrote in C# of an IDE that allows you to program your Tablet PC in Python and I don't get a traffic bump from Scoble …</p><p>Sheesh, I do a screencast (which is just like a podcast, only even more hip and cutting edge) of a Tablet PC program that I wrote in C# of an IDE that allows you to program your Tablet PC in Python and I don't get a traffic bump from Scoble. How many more keywords does a guy need to get noticed?</p>The Da Vinci Coder2004-11-16T14:04:00-10:002004-11-16T14:04:00-10:00larrytag:knowing.net,2004-11-16:/posts/2004/11/the-da-vinci-coder/<p>When you're struck with writer's block, you're supposed to just write anything. This is what I just churned out instead of my next column:</p>
<blockquote>
<p>I was awakened by my phone. You got used to that living on The Big Island. It's already noon on Wall Street by the time the …</p></blockquote><p>When you're struck with writer's block, you're supposed to just write anything. This is what I just churned out instead of my next column:</p>
<blockquote>
<p>I was awakened by my phone. You got used to that living on The Big Island. It's already noon on Wall Street by the time the rosy fingers of dawn touch the wine-dark seas of Kona. Plus I have narcolepsy, a disease which tends to kick in at particularly inopportune times, as if advancing a plot that otherwise would flounder over flimsy connections . Narcolepsy is a crippling disease, but one which involves no physical deformations and yet is exotic enough so that most people have heard of it; I find it lends me an air of vulnerability that causes men to underestimate me and women to swoon. "How may I be of service?" I said, unconsciously forming the words by which Parsifal proved himself worthy of receiving the Holy Grail from Anfortas, the Fisher King. Or so you'd believe from a mere surface reading of the medieval poet Wolfram von Eschenbach. "Mr. O'Brien? Mr. Lawrence O'Brien?" Came the breathy voice of a woman -- a voice that betrayed her as filled with worry and that further betrayed her as the owner of a cutting intellect that kept lesser men away. And that even further betrayed her as beautiful, a brunette, taller than average, with gray -- no, green -- eyes. "Only my publisher calls me Lawrence," I said, rising from bed and noting that it was a little after 5AM by the position of 'Iwakeli'i, the male frigate bird, the W-shaped constellation known to the West as Casssiopeia, the queen whose insult of the Nereid sea nymphs dictates her constellation never touches the sea. Whose circumpolar orbit allows it, along with The Big Dipper, whose Hawaiian name is irrelevant but happens to be Na Hiku, to serve as utterly reliable timepieces for those who disdain -- or distrust -- the 32,768 oscillations per second of a quartz crystal exposed to an electrical current as well as for those whose quartz watches don't have Indiglo and thus are quite difficult to read in the dark. "Call me Larry." "Well…Larry…I saw you on Larry King and--"</p>
<p>"Stop right there," I said. I was in no mood to let her go further, beautiful leggy brunette or no. Programming legends like myself and, say, Don Box, draw beautiful women to us like moths to flame, which are drawn, not because of the heat, but because they are genetically programmed to maintain a steady orientation to the brightest light in the night sky -- the moon, whose name is Luna and which is paired with Cassiopeia in the easily-confirmable-by-skeptical-readers Web site location[ ]{style="mso-spacerun: yes"}<a href="https://www.pbase.com:443/image/33397294">http://www.pbase.com/image/33397294</a>. Except with us programming legends it wasn't our simulacra of the reflection of the Sun to which beautiful women were compelled to maintain a steady orientation, but to our knowledge of esoterica, which is too close to an anagram of "eroticas" to be a coincidence.</p>
</blockquote>
<p>Hmmm, 59,530 more words like that and you <em>know</em> Tom Hanks is on board. But maybe I should wait to see if <a href="https://movies.disney.com/">National Treasure</a> has legs...</p>
<p>I'm going to go for a swim...</p>Theory of Fun PDF2004-11-16T12:13:00-10:002004-11-16T12:13:00-10:00larrytag:knowing.net,2004-11-16:/posts/2004/11/theory-of-fun-pdf/<p>::: {.Section1}</p>
<blockquote>
<p><strong><em>*[Cory Doctorow]{style=""}</em></strong><em>: I reivewed Raph Koster's brilliant <a href="https://www.amazon.com/exec/obidos/ASIN/1932111972/downandoutint-20" title="http://www.amazon.com/exec/obidos/ASIN/1932111972/downandoutint-20">Theory of Fun</a> book (think of it as an <a href="https://www.amazon.com/exec/obidos/ASIN/006097625X/downandoutint-20" title="http://www.amazon.com/exec/obidos/ASIN/006097625X/downandoutint-20">Understanding Comics</a> for games) here before, and now I'm delighted to see that Raph's posted a tremendous, graphic-rich picture-book in PDF format detailing the notions from the game. 4.7MB PDF Link …</em></p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p><strong><em>*[Cory Doctorow]{style=""}</em></strong><em>: I reivewed Raph Koster's brilliant <a href="https://www.amazon.com/exec/obidos/ASIN/1932111972/downandoutint-20" title="http://www.amazon.com/exec/obidos/ASIN/1932111972/downandoutint-20">Theory of Fun</a> book (think of it as an <a href="https://www.amazon.com/exec/obidos/ASIN/006097625X/downandoutint-20" title="http://www.amazon.com/exec/obidos/ASIN/006097625X/downandoutint-20">Understanding Comics</a> for games) here before, and now I'm delighted to see that Raph's posted a tremendous, graphic-rich picture-book in PDF format detailing the notions from the game. 4.7MB PDF Link (</em>[via <a href="https://crystaltips.typepad.com/wonderland/" title="http://crystaltips.typepad.com/wonderland/">Wonderland</a>]{style="font-style:italic"}<em>) </em>[via]{style="font-style:italic"}* [Boing Boing]</p>
<p>[This is good companion to <a href="http://archive.boston.com/news/globe/editorial_opinion/oped/articles/2004/11/15/dungeons_and_dragons_we_love_you/">this editorial on Dungeons & Dragons</a>. I vowed long ago never to apologize for having spent my teenage afternoons playing D&D (and, for exercise that was appropriately geeky, Ultimate Frisbee). Telling stories is not something to be ashamed of, and learning to collaboratively tell stories is as legitimate a use of one’s teenage energy as learning to play in a bad rock band, finding out which bars card, and learning how to defend against the Berkeley Offense.]{style=""}
:::</p>
</blockquote>Outsourcing to Kona2004-11-16T07:19:00-10:002004-11-16T07:19:00-10:00larrytag:knowing.net,2004-11-16:/posts/2004/11/outsourcing-to-kona/<blockquote>
<p>I love the idea of <a href="https://com.com/results?q=news" title="http://news.com.com/2061-1022-5449083.html?tag=rsspr.5449099">outsourcing to rural parts of the country</a> … <em>[via]{style="FONT-STYLE: italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>As a person who’s “outsourced“ himself, first to :45 minutes from San Francisco and now to 3,000 miles from the mainland, there’s a certain temptation …</p><blockquote>
<p>I love the idea of <a href="https://com.com/results?q=news" title="http://news.com.com/2061-1022-5449083.html?tag=rsspr.5449099">outsourcing to rural parts of the country</a> … <em>[via]{style="FONT-STYLE: italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>As a person who’s “outsourced“ himself, first to :45 minutes from San Francisco and now to 3,000 miles from the mainland, there’s a certain temptation not to mention the downside, but honesty demands acknowledging that while this is an admirable concept, it still has the fundamental disadvantage of outsourcing (the loss of face-to-face communication) that I discussed in my SD Times column.</p>
<p>Having said that, I am extraordinarily tempted to try something similar here in Hawaii.</p>
<blockquote></blockquote>Getting My Hopes Up On Episode 32004-11-16T06:30:00-10:002004-11-16T06:30:00-10:00larrytag:knowing.net,2004-11-16:/posts/2004/11/getting-my-hopes-up-on-episode-3/<blockquote>
<p>Dammit. The trailer for Star Wars 3: The Revenge of the Sith, actually looks good! I just know I'm going to get my heart broken again...<em>[via]{style="FONT-STYLE: italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>Dang, it does look good. Mostly because it features 3 characters from the original …</p><blockquote>
<p>Dammit. The trailer for Star Wars 3: The Revenge of the Sith, actually looks good! I just know I'm going to get my heart broken again...<em>[via]{style="FONT-STYLE: italic"}</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>Dang, it does look good. Mostly because it features 3 characters from the original “Star Wars.” (Call it “Episode 4”? Feh!)</p>Stoplight turns red for speeders2004-11-16T06:26:00-10:002004-11-16T06:26:00-10:00larrytag:knowing.net,2004-11-16:/posts/2004/11/stoplight-turns-red-for-speeders/<blockquote>
<div>
<p><strong><em>*Mark Frauenfelder</em></strong>*: The city of Pleasanton, California has come up with a funny way to punish speeders:</p>
<p>[The] city's traffic engineers have created a traffic signal with attitude. It senses when a speeder is approaching and metes out swift punishment. It doesn't write a ticket. It immediately turns from green …</p></div></blockquote><blockquote>
<div>
<p><strong><em>*Mark Frauenfelder</em></strong>*: The city of Pleasanton, California has come up with a funny way to punish speeders:</p>
<p>[The] city's traffic engineers have created a traffic signal with attitude. It senses when a speeder is approaching and metes out swift punishment. It doesn't write a ticket. It immediately turns from green to yellow to red.</p>
</div>
<p><a href="https://www.sfgate.com/bayarea/article/Stoplight-to-punish-suburban-speeders-2798079.php" title="http://sfgate.com/cgi-bin/article.cgi?file=/c/a/2004/04/07/MNG8N61MGG1.DTL">Link</a> <strong>(Via <a href="http://paulboutin.weblogger.com/" title="http://paulboutin.weblogger.com/">Paul Boutin</a>)</strong> <em>[Via]{style="FONT-STYLE: italic"}</em> [Boing Boing]</p>
</blockquote>
<p>And the damage caused to the speeders after hitting a few pedestrians lured onto the street thereby really dissuades future incidents.</p>DB40 goes open source2004-11-15T15:57:00-10:002004-11-15T15:57:00-10:00larrytag:knowing.net,2004-11-15:/posts/2004/11/db40-goes-open-source/<p>::: {.Section1}</p>
<blockquote>
<p>[Browsing <a href="http://freshmeat.sourceforge.net/" title="http://freshmeat.net/">Freshmeat</a> this morning and I noticed that DB40 has gone open source…. db4objects - native Java and .NET open source object database engine and is well worth a look. <em>[Via]{style="font-style:italic"}</em> [<a href="http://www.mcdowall.com/2004/11/db40-goes-open-source.html">Fast Takes</a>]]{style=""}</p>
<p>Ah! Object databases. Always have been The Next Big Thing. And I’m …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>[Browsing <a href="http://freshmeat.sourceforge.net/" title="http://freshmeat.net/">Freshmeat</a> this morning and I noticed that DB40 has gone open source…. db4objects - native Java and .NET open source object database engine and is well worth a look. <em>[Via]{style="font-style:italic"}</em> [<a href="http://www.mcdowall.com/2004/11/db40-goes-open-source.html">Fast Takes</a>]]{style=""}</p>
<p>Ah! Object databases. Always have been The Next Big Thing. And I’m afraid they always will be.
:::</p>
</blockquote>DSL Tools Now Available2004-11-15T15:55:00-10:002004-11-15T15:55:00-10:00larrytag:knowing.net,2004-11-15:/posts/2004/11/dsl-tools-now-available/<p>::: {.Section1}</p>
<blockquote>
<p>We announced it last week, but the <a href="https://msdn.microsoft.com/en-us/devlabs/default.aspx" title="http://lab.msdn.microsoft.com/vs2005/teamsystem/workshop/dsltools/">DSL Tools home page</a> just went live today. The big thing is the Microsoft Tools for Domain Specific Languages Technology Preview. There's also a <a href="https://msdn.microsoft.com/en-us/devlabs/default.aspx" title="http://lab.msdn.microsoft.com/vs2005/teamsystem/Workshop/DSLTools/walkthrough.aspx">walkthru of the tool</a>, a newsgroup and Jochen's blog. We also published the third article in the Software …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p>We announced it last week, but the <a href="https://msdn.microsoft.com/en-us/devlabs/default.aspx" title="http://lab.msdn.microsoft.com/vs2005/teamsystem/workshop/dsltools/">DSL Tools home page</a> just went live today. The big thing is the Microsoft Tools for Domain Specific Languages Technology Preview. There's also a <a href="https://msdn.microsoft.com/en-us/devlabs/default.aspx" title="http://lab.msdn.microsoft.com/vs2005/teamsystem/Workshop/DSLTools/walkthrough.aspx">walkthru of the tool</a>, a newsgroup and Jochen's blog. We also published the third article in the Software Factories overview series. <em>[Via]{style="font-style:italic"}</em> [DevHawk]</p>
<p>[P.S. I just got my NewsGator to Das Blog plug-in working. Ink integration is next on the list…]{style=""}
:::</p>
</blockquote>"Out of Sight, Out of a Job" Column Now Available2004-11-15T08:47:00-10:002004-11-15T08:47:00-10:00larrytag:knowing.net,2004-11-15:/posts/2004/11/out-of-sight-out-of-a-job-column-now-available/<p>My latest column for SD Times is a bit of spleen-venting about stupid MBAs who believe that the loss of technical expertise is fine: “[F]uture entrepreneurs and great businesspeople will come from the countries where the work is done, not from a country whose 'comparative advantage' is reduced to …</p><p>My latest column for SD Times is a bit of spleen-venting about stupid MBAs who believe that the loss of technical expertise is fine: “[F]uture entrepreneurs and great businesspeople will come from the countries where the work is done, not from a country whose 'comparative advantage' is reduced to making snazzy PowerPoint presentations.”</p>Interpreting Ink as Python Video2004-11-14T14:56:00-10:002004-11-14T14:56:00-10:00larrytag:knowing.net,2004-11-14:/posts/2004/11/interpreting-ink-as-python-video/<p>Jon Udell's recent forays into making movies of software inspired me to take this video of “Pynk,” my interactive Python IDE for the TabletPC, in action. Here then, Ladies & Gentlemen, I give you: “Interpreting Ink as Python code.” Consider this a 1 minute and 20 second teaser for a 2 …</p><p>Jon Udell's recent forays into making movies of software inspired me to take this video of “Pynk,” my interactive Python IDE for the TabletPC, in action. Here then, Ladies & Gentlemen, I give you: “Interpreting Ink as Python code.” Consider this a 1 minute and 20 second teaser for a 2,000-word article forthcoming on DevX.</p>
<p>I didn't narrate except for a happily surprised exclamation at the end, but please feel free to hum “Also Sprach Zarathustra,” while watching.</p>Must-read before going into videogame programming2004-11-11T09:42:00-10:002004-11-11T09:42:00-10:00larrytag:knowing.net,2004-11-11:/posts/2004/11/must-read-before-going-into-videogame-programming/<p><a href="https://ea-spouse.livejournal.com/">This note</a> from the spouse of an Electronic Arts employee, detailing mandatory 80+ hour work weeks with no overtime pay or comp time, rings totally true to me. <em>via</em> \<a href="http://www.brandonfurtwangler.com/index.php%3fp%3d46" ">Brandon Furtwangler</p>Acrobat Reader Speed-Up Utility: Must Use!2004-11-11T08:54:00-10:002004-11-11T08:54:00-10:00larrytag:knowing.net,2004-11-11:/posts/2004/11/acrobat-reader-speed-up-utility-must-use/<p>Holy Cow! I don't think I've ever been happier with a 129K download than with the ARSU utility. It makes a huge improvement in Acrobat Reader start-up time.</p>Not Impressed By "Project PC" Form Factor, But...2004-11-10T08:46:00-10:002004-11-10T08:46:00-10:00larrytag:knowing.net,2004-11-10:/posts/2004/11/not-impressed-by-project-pc-form-factor-but/<p>Scan Computers is touting a new PC specially designed for project managers, but it looks to me like an absolutely standard PC with a special software bundle. What I'm interested in is a “collaborative” form-factor: support for two external displays, two keyboard/mice, a digitizer for sketching... Actually, you could …</p><p>Scan Computers is touting a new PC specially designed for project managers, but it looks to me like an absolutely standard PC with a special software bundle. What I'm interested in is a “collaborative” form-factor: support for two external displays, two keyboard/mice, a digitizer for sketching... Actually, you could build this from a Tablet PC ... Put the Tablet in slate mode, add your keyboards and mice with USB, split the video out to two external monitors (or send it to a projector). I think that would be an interesting way to program.</p>
<p>I read somewhere recently about guys using Remote Desktop Access to a shared workstation that was inches away. Can't find the link, but this gives an idea.</p>Sam Gentile Likes TestDriven.NET2004-11-10T07:44:00-10:002004-11-10T07:44:00-10:00larrytag:knowing.net,2004-11-10:/posts/2004/11/sam-gentile-likes-testdrivennet/<p>Sam Gentile, who's usually right about these things, prefers TestDriven.NET to NUnit. I'll have to check it out on my next project. I'm also planning on trying out CruiseControl.NET next time. Oh, and just to make it topical, maybe I'll write a Konfabulator for Windows widget to show …</p><p>Sam Gentile, who's usually right about these things, prefers TestDriven.NET to NUnit. I'll have to check it out on my next project. I'm also planning on trying out CruiseControl.NET next time. Oh, and just to make it topical, maybe I'll write a Konfabulator for Windows widget to show integration status. (Hmmm... not a bad article idea. But who would publish it?)</p>New Code Generation API for Mono2004-11-10T07:37:00-10:002004-11-10T07:37:00-10:00larrytag:knowing.net,2004-11-10:/posts/2004/11/new-code-generation-api-for-mono/<p>Lluis Sanchez Gual has written a new code-generation API for Mono that is intermediate between the CIL generation of System.Reflection.Emit and generating C# code (which is, naturally, a tactic that limits you to what C# can perform). I've been writing a lot about little languages lately (and in …</p><p>Lluis Sanchez Gual has written a new code-generation API for Mono that is intermediate between the CIL generation of System.Reflection.Emit and generating C# code (which is, naturally, a tactic that limits you to what C# can perform). I've been writing a lot about little languages lately (and in articles that haven't yet been published) and this looks like a nice addition to one's workbench. One thing I really like is that there's a method <strong>CodeClass.PrintCode()</strong> that produces a C# representation of the generated CIL that's not necessarily compilable but gives an easily-readable view of the generated code.</p>Halo 2 Grosses $100M in One Day2004-11-10T07:27:00-10:002004-11-10T07:27:00-10:00larrytag:knowing.net,2004-11-10:/posts/2004/11/halo-2-grosses-100m-in-one-day/<p>Wow. Just 10 years ago, when Sander Antoniades and I were pitching the idea of <a href="http://www.gamasutra.com/"><em>Game Developer</em></a> magazine to our publishing company, we had to have pages of references showing that videogaming was a multibillion industry because no one believed it.</p>
<p>\$100M in a single day is rare air, even …</p><p>Wow. Just 10 years ago, when Sander Antoniades and I were pitching the idea of <a href="http://www.gamasutra.com/"><em>Game Developer</em></a> magazine to our publishing company, we had to have pages of references showing that videogaming was a multibillion industry because no one believed it.</p>
<p>\$100M in a single day is rare air, even for movie blockbusters. The <a href="https://www.bungie.net/">Bungie</a> division of Microsoft only has 65 or so full-time employees (including the guy who wrote that “We are Flintstones Kids...” commercial jingle) and Christmas Bonus time is only a few weeks away. I hope they all get thick envelopes of cash.</p>
<p>By the way, if you're a young programmer and thinking about getting into the videogame programming business, think about this: It's just like Hollywood, but without beautiful women or fame.</p>Pele on the move2004-11-09T14:41:00-10:002004-11-09T14:41:00-10:00larrytag:knowing.net,2004-11-09:/posts/2004/11/pele-on-the-move-2/<p>It's <em>really hot</em> when you get this close to magma.</p>Yes, I AM "everything to everybody"2004-11-09T13:59:00-10:002004-11-09T13:59:00-10:00larrytag:knowing.net,2004-11-09:/posts/2004/11/yes-i-am-everything-to-everybody/<p><a href="http://www.bbspot.com/News/2004/10/extension_quiz.php"><img alt="You are .* You are a wildcard. You are everything to everybody. You can't make up your mind as to what you want to be." height="90" src="http://www.bbspot.com/Images/News_Features/2004/10/file_extensions/star.jpg" width="300"><br>
Which File Extension are You?</a></p>
<p>I started writing a “What Programming Language Are You?” quiz. My stack crashed while trying to come up with clever ways to determine if someone was more recursive or iterative.</p>
<p>Anyhow, if you want to see a silly little “What Programming Language Are You?“ quiz …</p><p><a href="http://www.bbspot.com/News/2004/10/extension_quiz.php"><img alt="You are .* You are a wildcard. You are everything to everybody. You can't make up your mind as to what you want to be." height="90" src="http://www.bbspot.com/Images/News_Features/2004/10/file_extensions/star.jpg" width="300"><br>
Which File Extension are You?</a></p>
<p>I started writing a “What Programming Language Are You?” quiz. My stack crashed while trying to come up with clever ways to determine if someone was more recursive or iterative.</p>
<p>Anyhow, if you want to see a silly little “What Programming Language Are You?“ quiz, please contribute a snarky question and set of answers.</p>Kenneth Iverson Dies2004-11-09T07:29:00-10:002004-11-09T07:29:00-10:00larrytag:knowing.net,2004-11-09:/posts/2004/11/kenneth-iverson-dies/<p>Kenneth Iverson, inventor of <a href="https://en.wikipedia.org/wiki/APL_programming_language">AP</a>L, <a href="https://en.wikipedia.org/wiki/J_programming_language">J</a>, and winner of the 1979 Turing Award (his talk: “<a href="https://dl.acm.org/errorpgs/404.html">Notation as a Tool of Thought</a>“), died last month at the age of 84. Although APL was quite popular, Iverson will be remembered as one who contributed more towards the formal unification of mathematical …</p><p>Kenneth Iverson, inventor of <a href="https://en.wikipedia.org/wiki/APL_programming_language">AP</a>L, <a href="https://en.wikipedia.org/wiki/J_programming_language">J</a>, and winner of the 1979 Turing Award (his talk: “<a href="https://dl.acm.org/errorpgs/404.html">Notation as a Tool of Thought</a>“), died last month at the age of 84. Although APL was quite popular, Iverson will be remembered as one who contributed more towards the formal unification of mathematical notation and computer science. This vein of programming has been less popular, particularly in the past twenty years and their emphasis on programming techniques that are “approachable” and business-oriented. The recent emphasis on heavily incremental, individually testable modules can, at it's best, “feel“ somewhat like this style of programming, with a complete set of functions blossoming from seeds of composable thought. But Iverson insisted that “The utility of a language as a tool of thought increases with the range of topics it can treat, but decreases with the amount of vocabulary and the complexity of grammatical rules which the user must keep in mind,“ and would probably be offended at the suggestion that a C# or Java programmer using test-driven development was experiencing anything <em>like</em> APL or J.</p>Libertarianism2004-11-05T10:03:00-10:002004-11-05T10:03:00-10:00larrytag:knowing.net,2004-11-05:/posts/2004/11/libertarianism/<p>I think that libertarianism (small 'l' anyway) is the sort of natural instinct of programmers. As a group, I'd say we work hard, believe in an entrepreneurial potential, most of us are in the private sector. We don't have the diversity we <em>could</em>, but we all know that smarts aren't …</p><p>I think that libertarianism (small 'l' anyway) is the sort of natural instinct of programmers. As a group, I'd say we work hard, believe in an entrepreneurial potential, most of us are in the private sector. We don't have the diversity we <em>could</em>, but we all know that smarts aren't based on your gender or skin color and, as a group, I think we'd <em>like to believe</em> that our profession is a meritocracy. Similarly, a skeptical viewpoint is such a part of our job that I think we tend to be hesitant of imposing our personal faith (either secular or religious) on others. (Even this blog-thread shows a respectful consideration of other viewpoints that I find typical of high tech workers.)</p>
<p>But for me, Big 'L' Libertarianism is as much an unrealistic Utopian vision as Communism. I'm not sure when I saw it -- maybe '96 -- but I heard the Libertarian candidate for President say that the plan was to retire the national debt by a one-time sale of Federally-owned land. He argued that if the Mississippi River was privately owned, the owner wouldn't allow it to be polluted because that would be ruining his investment. My understanding is that this wasn't a sort of “Libertarianism For Dummies,” explanation of the philosophy but the real platform (correct me if I'm wrong). Let's just sweep aside the political and logistical doubts and say that the sale came about. Is there any doubt that the Federal lands would be bought by corporations who would trade long-term stewardship for short-term returns? It seems to me that big “L” Libertarianism requires not a political transformation (something I'd posit as possible, if barely) but a simultaneous economic transformation and, that, I think is Utopian. In other words, I just don't think you can get There from Here.</p>
<p>Darn it.</p>Dems == welfare state?2004-11-05T09:35:00-10:002004-11-05T09:35:00-10:00larrytag:knowing.net,2004-11-05:/posts/2004/11/dems-welfare-state/<blockquote>
<p>A “Republican from Idaho“ says: “The biggest problem that Dems have over here is that losts of poeple are small buz owners, not employees. The main industry in this state is agriculture and most people live in small towns. Those are all spots where dems have not been able to …</p></blockquote><blockquote>
<p>A “Republican from Idaho“ says: “The biggest problem that Dems have over here is that losts of poeple are small buz owners, not employees. The main industry in this state is agriculture and most people live in small towns. Those are all spots where dems have not been able to reach.</p>
<p>And, out here the consensus is: less government is good government. We support the military, not the welfare state.”</p>
</blockquote>
<p>As a self-employed person who now lives in a small town who believes the best gov is that which governs least and who supports the military and not the welfare state, I honestly have a hard time comprehending how those things add up to Republican support in 2004. In 1968, yeah.</p>
<p>The thing to me about small business and politics is that I've been generic-ramen-noodles-four-days-a-week poor and I've been six-figure-salary comfortable. The idea that our country coddles the poor and the just-getting-by working class is one of the few things I probably can't keep a civil tone about -- it just <em>infuriates</em> me. Being poor <em>sucks</em>. The idea of shifting more of the tax burden onto the just-getting-by working class (and convincing them to ask for it!) is just fucking <em>evil</em>. I don't care <em>what</em> you say about “fairness“ -- if you're grossing more than \<span class="math">\(200K, the financial difficulty of paying your taxes is less than if you're making \\)</span>20K. Period. Most of the just-getting-by probably don't even <em>know</em> that you stop paying additional Social Security taxes once you make...what is it this year? \$90K? That's a huge effective tax-rate decrease for the doing-better-than-average.</p>
<p>The absolute size of the government and the welfare state -- I'm <em>insanely</em> less ambivalent about being liberal now that the Democrats are more economically restrained than the Republicans. As a person who's both been poor and been comfortable, I know how dangerous debt is. <a href="https://www.gao.gov/special.pubs/03frusg.pdf">I look at the national debt</a> and see a credit card statement that says “Minimum payment due“ of \<span class="math">\(350B on \\)</span>1,800B in revenue. When you're paying 1/6 of your income to the credit card companies and you're falling behind really fast, you're in a bad situation. Debt can be used and managed wisely, but we're <em>clearly</em> not doing that right now -- what people are hoping for is cutting the annual <em>increase</em> in our debt in half. In my opinion, we should have a general policy of paying down the debt, which would have huge long-term benefits.</p>
<p>Also, is it fair to point out that Idaho receives \<span class="math">\(1.34 in Federal spending for every \\)</span>1.00 in taxes paid? Another thing I've heard is a lot of indignity about, for instance, the cost of illegal immigrants to the state (this is a big deal in California -- maybe a littl less so in Idaho?). I'd be much more sympathetic to that complaint if ag and service industries were willing to say “And we will not use illegal immigrants to keep our costs down.“ But they aren't, not even close. The entire rhetoric of illegal immigration is pure hypocrisy.</p>
<p>Finally, “supporting the military.“ That might be the one place where my beliefs clash with your characterization of the Idaho perspective. Maybe. I think of the Pentagon as the ultimate Washington bureaucracy and pork trough (although I'm going to guess that Homeland Security is going to give them a run for their money). Clearly, the DoD is third-rail stuff, especially for Democrats (Kerry was excoriated for supporting cuts that came from Cheney!). But if it weren't for that third rail, I'd like to see some real pressure put on the Pentagon to control their budget. And as part of that pressure, I'd like to skew the dollars spent towards personnel and basic equipment rather than weapons systems. Although I'm <em>all for</em> not giving bad guys any kind of target, I think you have to look at things like the Joint Strike Fighter and ask “Do we really need to spend this money to do the job?” And when it comes to armor and artillery, we seem <em>so</em> far ahead of any emerging threat that it just seems like there <em>must</em> be some amount of belt tightening that could be done.</p>
<p>So that's the way that your Idaho perspective looks through my liberal goggles. What am I missing or seeing in a distorted way?</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Spilt Milk2004-11-04T22:28:00-10:002004-11-04T22:28:00-10:00larrytag:knowing.net,2004-11-04:/posts/2004/11/spilt-milk/<p>Well, I avoided political content on this blog for 3 years and just let myself go in the past two weeks, but since I'm actually getting polite discourse, what the heck:</p>
<p>“Libertarian“ asks: .... The people have spoken. The majority of voting Americans sent a message: how out of touch the …</p><p>Well, I avoided political content on this blog for 3 years and just let myself go in the past two weeks, but since I'm actually getting polite discourse, what the heck:</p>
<p>“Libertarian“ asks: .... The people have spoken. The majority of voting Americans sent a message: how out of touch the democratic party (the "liberal elite" mostly) in this country are. If not, how else do you explain the numbers? ....</p>
<p>If I were interested in being an apologist for the Democrats, I'd point out that 58M to 55M is hardly a landslide, it's not a mandate from the American people that, say, Reagan 84 or Nixon 72 was. The Republicans will pretend otherwise, but if you're going to be honest, you should acknowledge that <em>Kerry</em> won more votes than any previous candidate in American history, including more votes than Ronald Reagan won in 84.</p>
<p>So I think it's pretty clear that both parties are out of touch with half the country (plus or minus a few percent). And the thing that really struck me Tuesday night was how “coastal versus interior” doesn't explain it nearly as well as “urban versus rural.” They showed county maps of PA and OH and it didn't seem to reflect a “closeness“ at all -- it was blue dots and then vast ranges of red, just like the national map. I think it was just that those states happened to have a demographic balance, not that they were regions that somehow embodied an ambivalence towards the two parties.</p>
<p>How are the liberals out of touch with America? I don't know. For the past 15 years I lived in the most liberal county in the country! Believe me, you don't get a lot of insight into Bush support by living in Marin! My take on it is that (a) you've got a lot of people who aren't going to look further than abortion and gay rights to know they won't vote Democrat, (b) the Democrats don't have good mouthpieces, and (c) the Democrats <em>don't get</em> that Americans don't consider the Government a benevolent source of services (I think Cheney's line in the 2000 debate about how he grew rich at Halliburton and the “government had absolutely nothing to do with it” perfectly exemplifies how a lot of Americans have a blind spot to the benefits they get from the Government).</p>
<p>But you tell me -- how do <em>you</em> explain how the Democrats have fallen out of touch?</p>Aux Displays2004-11-03T09:07:00-10:002004-11-03T09:07:00-10:00larrytag:knowing.net,2004-11-03:/posts/2004/11/aux-displays/<p>Microsoft is now showing prototypes of tablets with auxiliary displays. The idea is that there's some stuff (at the very least, “your next appointment”) that you want to see all the time. The exact definition of what this stuff might be is <em>extremely fuzzy</em> -- for instance, I've heard people say …</p><p>Microsoft is now showing prototypes of tablets with auxiliary displays. The idea is that there's some stuff (at the very least, “your next appointment”) that you want to see all the time. The exact definition of what this stuff might be is <em>extremely fuzzy</em> -- for instance, I've heard people say “Email” but for laptops that almost certainly involves activating the power-hungry WiFi radio, and I've heard people say “Driving instructions” which would presumably require both an active display and probably some kind of connection to a GPS device. I've also heard people say “MP3 playback,” and a moment later, “Video playback,” and a moment later, “And I want to be able to take a quick note. With my pen.” And while we're at it, I'd like to be able to jot down a quick algorithm and visualize its behavior over time...</p>
<p>Aux displays themselves will be optional components, presumably on high-end laptops. Therefore, developers will not be able to count on the presence of an aux display. Meanwhile, everyone who buys a high-end laptop <em>has</em> an auxiliary display device they already are committed to carry -- their cellphone. I desperately hope that Microsoft's aux display SDK supports “disconnected aux displays,” i.e., Bluetooth-connected cellphones, media players, etc.</p>
<p>I desperately hope for that because the transformation of a powered-down laptop from a brick to a gently-sleeping giant is a very important capability. There are <em>all sorts</em> of scenarios where a low-power-consumption computation can <em>trigger</em> more interesting behavior. For instance, if I have a connected GPS, I can wake up every minute or so and confirm that I'm within, say, a mile of my route and, if not, automatically fire up the computer into full-power for the power-consuming tasks of map display and rerouting. Or, I can benignly “war-drive” -- waking up and trying to sync my email when I'm in a WiFi lilypad.</p>
<p>These sorts of capabilities are much more interesting and valuable than 240 x 170 pixels of auxiliary display space.</p>Gloat away, but please do it right...2004-11-03T08:39:00-10:002004-11-03T08:39:00-10:00larrytag:knowing.net,2004-11-03:/posts/2004/11/gloat-away-but-please-do-it-right/<p>A commentor has accused me of engaging in "sour grapes." However, sour grapes would be if I said "Well, the Kerry Administration would have sucked, too."</p>
<p>What I'm doing is "crying over spilt milk"</p>
<p>But as far as software development goes, Microsoft is developing a new SDK to promote the …</p><p>A commentor has accused me of engaging in "sour grapes." However, sour grapes would be if I said "Well, the Kerry Administration would have sucked, too."</p>
<p>What I'm doing is "crying over spilt milk"</p>
<p>But as far as software development goes, Microsoft is developing a new SDK to promote the use of “Auxiliary displays” or “Aux displays” in laptops. What's interesting about this is that the actual display is the least important aspect: far more important is the transformation of a closed laptop from a brick to a very-low-power-consumption state that has <em>some</em> computational capabilities (REM sleep, if you will...).</p>Okay, it's kind of political still, but it's funny...2004-11-03T08:30:00-10:002004-11-03T08:30:00-10:00larrytag:knowing.net,2004-11-03:/posts/2004/11/okay-its-kind-of-political-still-but-its-funny/<p>”if you are a senior majoring in computer science and are seriously thinking of leaving the country due to the election results, you might be interested in my international English-language Masters program in parallel and distributed computer systems...”</p>
<p>-- Andrew Tanenbaum, the “votemaster” at <a href="https://electoral-vote.com/">www.electoral-vote.com</a> makes the best of …</p><p>”if you are a senior majoring in computer science and are seriously thinking of leaving the country due to the election results, you might be interested in my international English-language Masters program in parallel and distributed computer systems...”</p>
<p>-- Andrew Tanenbaum, the “votemaster” at <a href="https://electoral-vote.com/">www.electoral-vote.com</a> makes the best of things.</p>
<p>(Tanenbaum, by the way, is the developer of Minix and <a href="https://sindominio.net/biblioweb/telematica/open-sources-html/node137.html">way-back-when engaged with Linus in a famous online thread about the design and quality of Linux</a>. I believe Tanenbaum was actually one of Torvalds' professors.)</p>Myopia2004-11-03T08:13:00-10:002004-11-03T08:13:00-10:00larrytag:knowing.net,2004-11-03:/posts/2004/11/myopia/<p>The roughest thing about this election is that, let's face it, this was the Democrats' best shot. Four years ago, you could blame Gore for running away from the Clinton record. Two years ago, you could look at the spineless Republican-Lite strategy of the DNC. But yesterday it came down …</p><p>The roughest thing about this election is that, let's face it, this was the Democrats' best shot. Four years ago, you could blame Gore for running away from the Clinton record. Two years ago, you could look at the spineless Republican-Lite strategy of the DNC. But yesterday it came down to a candidate nominated very much for his “electability,“ a pretty well run campaign (“Gee, if only he'd responded to the Swift Boats stuff five days earlier“?), winning debate performances, a strongly motivated base... I mean, c'mon.</p>
<p>Well, that's not really the roughest thing about this election. The roughest thing about this election is four more years of an administration intent on turning this country into Rome, with Imperialist foreign policies and domestic policies destroying the possibility of working yourself into wealth. Oh, and let me be the first to predict Jeb Bush's victory in '08.</p>
<p>No use crying about it. Back to software development analysis...</p>
<p>How 'bout that <a href="https://rubyonrails.org/">Ruby On Rails</a>?</p>Vote Save Error #92004-11-02T08:35:00-10:002004-11-02T08:35:00-10:00larrytag:knowing.net,2004-11-02:/posts/2004/11/vote-save-error-9/<p>Wonderful. Just f'in wonderful. This happened in Santa Clara, CA. I'm off to vote here on my idyllic tropical isle. Guess I'll bring my digital camera, just in case zany hi-jinx ensue.</p>
<p><img alt="" src="https://boingboing.net/images/votesaveerrror.jpg"></p>Vote2004-11-01T12:56:00-10:002004-11-01T12:56:00-10:00larrytag:knowing.net,2004-11-01:/posts/2004/11/vote/<p>It's inexcusable not to make a decision.</p>
<p>Oh, by the way, you should vote for these guys:</p>Eminem lip synching on SNL2004-10-31T13:22:00-10:002004-10-31T13:22:00-10:00larrytag:knowing.net,2004-10-31:/posts/2004/10/eminem-lip-synching-on-snl/<p>After last week, you'd think that Saturday Night Live would avoid lip synching for, I dunno', a week or two anyway, but Eminem not only was clearly lip synching, he did a terrible job!</p>Proportional electoral voting: if you can't get rid of the college...2004-10-29T16:46:00-10:002004-10-29T16:46:00-10:00larrytag:knowing.net,2004-10-29:/posts/2004/10/proportional-electoral-voting-if-you-cant-get-rid-of-the-college/<p>James Snell is angry that his vote for Bush won't count, because he lives in California. (I mean, it will count, but California is considered a lock for Kerry.) If I still lived in California I'd be angry because my vote for Kerry wouldn't count (I mean, it would, but …</p><p>James Snell is angry that his vote for Bush won't count, because he lives in California. (I mean, it will count, but California is considered a lock for Kerry.) If I still lived in California I'd be angry because my vote for Kerry wouldn't count (I mean, it would, but it would be much less significant than a vote from a person living in Wyoming or Rhode Island.)</p>
<p>Personally, I'd prefer to get rid of the electoral college, but that would require a Constitutional amendment and its ratification would undoubtedly depend entirely on short-term political advantage. In the meantime, proportional electoral voting, as Maine does now and Colorado will either do this election or next (yikes!), seems a clearly good idea.</p>
<p>Now, I'm “lucky” enough to be in what is apparently a swing state, so I'll have a good feeling when casting my ballot on Tuesday.</p>Eclipse that much better than Visual Studio?2004-10-29T10:48:00-10:002004-10-29T10:48:00-10:00larrytag:knowing.net,2004-10-29:/posts/2004/10/eclipse-that-much-better-than-visual-studio/<p>Dave Jaquay is <a href="http://djaquay.blogspot.com/2004/10/leaving-net-world.html">leaving the .NET world</a> and returning to Java. He sees C# and Java as comparable languages (giving the edge to C#) but is excited about switching Visual Studio for Eclipse. It's an interesting read. I'm doing some Java work now and using Eclipse. A few things I …</p><p>Dave Jaquay is <a href="http://djaquay.blogspot.com/2004/10/leaving-net-world.html">leaving the .NET world</a> and returning to Java. He sees C# and Java as comparable languages (giving the edge to C#) but is excited about switching Visual Studio for Eclipse. It's an interesting read. I'm doing some Java work now and using Eclipse. A few things I very much agree with Dave about (rebuild-on-save, JUnit unit-testing integration). Maybe it's just that my fingers know the VS keybindings better, but I still prefer VS to Eclipse.</p>
<p>I have to say that Eclipse is a heck of a platform, though.</p>Creating Ink Programmatically and Unit-Testing of TabletPC Apps2004-10-28T14:02:00-10:002004-10-28T14:02:00-10:00larrytag:knowing.net,2004-10-28:/posts/2004/10/creating-ink-programmatically-and-unit-testing-of-tabletpc-apps/<p>My <a href="https://www.developer.com/">latest article</a> on programming the TabletPC is up on DevX.</p>I Actually Don't Love The Dirty Water, But Otherwise...2004-10-28T07:43:00-10:002004-10-28T07:43:00-10:00larrytag:knowing.net,2004-10-28:/posts/2004/10/i-actually-dont-love-the-dirty-water-but-otherwise/<p><img alt="" height="70" src="http://cache.boston.com/bonzai-fba/Original_Graphic/2004/10/28/1098966474_6386.gif" width="565"></p>
<p>Boston, you're my home</p>SMT5600 Envy2004-10-27T13:50:00-10:002004-10-27T13:50:00-10:00larrytag:knowing.net,2004-10-27:/posts/2004/10/smt5600-envy/<p>Oh, how I wish I had an Audiovox SMT5600. I think it's what I want: an MP3 player and digital voice recorder that I can to use to occasionally make phone calls. Seriously. Hey, Scoble, you said that it was good as a phone-first, data-device second -- what about my scenario …</p><p>Oh, how I wish I had an Audiovox SMT5600. I think it's what I want: an MP3 player and digital voice recorder that I can to use to occasionally make phone calls. Seriously. Hey, Scoble, you said that it was good as a phone-first, data-device second -- what about my scenario?</p>
<p>But I can't bring myself to spend \<span class="math">\(360 for it when I'm three months from qualifying for discounts on a new phone on my rate plan. \\)</span>120 per month? Too steep for this cheapskate.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Microsoft Photo Story 3 For Free2004-10-27T13:34:00-10:002004-10-27T13:34:00-10:00larrytag:knowing.net,2004-10-27:/posts/2004/10/microsoft-photo-story-3-for-free/<p>The new Photo Story 3, which is really pretty good, is freely available for download at http://www.microsoft.com/windowsxp/using/digitalphotography/photostory/default.mspx</p>Design Your Own Domain Specific Language2004-10-27T08:30:00-10:002004-10-27T08:30:00-10:00larrytag:knowing.net,2004-10-27:/posts/2004/10/design-your-own-domain-specific-language/<p>(Back to software development, at least until Game 4 tonight...)</p>
<p>Microsoft has announced a framework and tools for creating Domain Specific Languages in Visual Studio Team System. Your very own DSL will be powered by the same modeling engine that powers the “Whitehorse” Distributed Systems Designer.</p>
<p>Whether this will be …</p><p>(Back to software development, at least until Game 4 tonight...)</p>
<p>Microsoft has announced a framework and tools for creating Domain Specific Languages in Visual Studio Team System. Your very own DSL will be powered by the same modeling engine that powers the “Whitehorse” Distributed Systems Designer.</p>
<p>Whether this will be a big or small deal hinges on two questions:</p>
<ol>
<li>To be useful in software development, do the majority of diagram types need to share a large amount of common semantics?;</li>
<li>Is it a large or small set of software development tasks that can be adequately represented in diagrams?</li>
</ol>
<p>UML proponents argue for the first -- that one basically needs UML-level complexity/richness to create diagrams that are not just used for communication between people but that actively shape the system under development. This is obviously self-serving for those with an investment in the UML process, but may be true nonetheless. </p>
<p>The second question is open. I'm a big fan of UML, but primarily for communicating <em>important subsets</em> of the task in question: “here are the key classes and their relations,” “here are the vital calls in this sequence of actions,” etc. Today's display technologies and graphical tools don't provide the information density that text does and the speed of manipulating a diagram is significantly less than making a comparable change in source code.</p>
<p>The tools announced today will obviously be used to implement various diagrams that are known today -- UML, E-Rs, BPMs, flowcharts no doubt. That's all well and good but won't fundamentally change anything. The key issue is whether the type of person who today might develop a complex library or language to express a domain (say... job-shop scheduling or customized-pricing rules) will find in these tools sufficient power to develop an alternate way of expressing the domain.</p>Geek Politics2004-10-26T09:17:00-10:002004-10-26T09:17:00-10:00larrytag:knowing.net,2004-10-26:/posts/2004/10/geek-politics/<p>Wayne Allen <a href="https://weblogs.asp.net/wallen/archive/2004/10/26.aspx">wonders</a> if there's an assumption that geeks lean left. I've always detected a very strong libertarian streak in geeks: “fiscally conservative, socially liberal.” I think it's because libertarianism is the Simplest Thing That Could Possibly Work -- don't spend money on things you don't need, don't tell people what …</p><p>Wayne Allen <a href="https://weblogs.asp.net/wallen/archive/2004/10/26.aspx">wonders</a> if there's an assumption that geeks lean left. I've always detected a very strong libertarian streak in geeks: “fiscally conservative, socially liberal.” I think it's because libertarianism is the Simplest Thing That Could Possibly Work -- don't spend money on things you don't need, don't tell people what to do.</p>What Is Going Through An Undecided's Mind?2004-10-26T08:27:00-10:002004-10-26T08:27:00-10:00larrytag:knowing.net,2004-10-26:/posts/2004/10/what-is-going-through-an-undecideds-mind/<p>Are the Undecided's thinking about The Big Issues -- Terrorism, Iraq, Economy, Domestic Policy, Foreign Relations -- and failing to come to a conclusion, or do they just lump it all together into a gut feeling as to whether Bush or Kerry will cause more good / less harm?</p>
<p>Terrorism: the thing about …</p><p>Are the Undecided's thinking about The Big Issues -- Terrorism, Iraq, Economy, Domestic Policy, Foreign Relations -- and failing to come to a conclusion, or do they just lump it all together into a gut feeling as to whether Bush or Kerry will cause more good / less harm?</p>
<p>Terrorism: the thing about terrorism is that the Bush administration is all talk, no walk. You can't defend America from small groups of suicidal fanatics with conventional military forces, you need to fund, train, and support a huge number of domestic resources -- from the intelligence services to the local cops. I have a friend who joined and then quit TSA because they only officially hire new recruits as “part-time” (no benefits) but then demand mandatory overtime (60 hours) because they're understaffed.</p>
<p>Iraq: once the Bush administration unilaterally decided to confront Hussein, I supported an invasion because I thought that it was important that neither the U.S. nor the U.N. look like paper tigers (and I was under the impression that Saddam was developing nukes and that he was so crazy, he'd probably use one on Israel). But how can you vote to rehire those responsible for running this totally incompetent post-invasion occupation?</p>
<p>Economy: I don't think Presidents have much to do with economic cycles, but the Bush admin has been extremely effective in passing tax cuts that are running up the national credit card while triggering very little positive economic growth. The Bush admin says “Well, the recession was a short one...” and credit their tax cut, but remember that your kids are going to have to pay off those credit cards. It's not in the economic self-interest of anyone making less than about \$200K to vote for Bush. The Republicans fear-monger about the Democrats passing tax increases, but remember that the Republicans control the Legislature. The truth is that Kerry won't be able to pass tax increases beyond <em>maybe</em> rolling back some of the tax cuts to the highest-end payers. (Of course, that means that he's not going to be able to deliver universal health care and he's not going to be able to fund 100% port inspections, and so forth. Democratic Presidency + Republican Legislature == lack of fundamental change.)</p>
<p>Domestic Policy: this is the one area where I think the Bush administration is most effective (Republican Presidency + Republican Legislature == fundamental change). I don't agree with their domestic policy initiatives, which have mostly been either direct giveaways or ill-advised deregulation for industries. Meanwhile, when asked what to do about out-sourcing, Bush's answer in the debate was “Learn a skill at community college.” Again, from an economic self-interest standpoint, unless you're at the “live-in help“ level, it doesn't make sense.</p>
<p>Foreign Relations: apparently, Bush voters believe that the world secretly approves of what the Bush administration is doing, that we're playing a kind of global “good cop-bad cop“ thing. They don't.</p>
<p>The conservative life-style issue is about the only area where I can understand a person coming to a pro-Bush conclusion. You think the assault-weapon ban was a bad thing, you think it's important that Christian references be explicit in the public sphere, you think gay marriage should be constitutionally forbidden: Bush is your guy. (Although for me, even if I felt that way about those issues, I can't see how I'd let them outweigh the threats to national security and our economy resulting from the other failures of the administration.*) *</p>
<p>Obviously, just about exactly 50% of the electorate disagrees with my conclusion that Kerry <em>must</em> be better for the country than Bush. I'm going to guess that the “conservative life-style” issue accounts for about half of that 50%. I'm going to guess that another 15% fall for the administrations bull about how they're better against terrorism. But I think the reason the election is too close to call is that people fear that Kerry would appear weak, as Carter appeared.</p>
<p>I think the debates probably swayed some of those who had that fear, but obviously things are still on a razor's edge. For that reason, I don't have great confidence that the undecideds will break heavily for Kerry, which is the common wisdom (although everyone admits that it's all too close to call).</p>
<p>I'd love to read something from a true undecided that gives some insight into how someone could not have formed a strong enough opinion about the current administration to know how they'll vote. Anyone?</p>Microsoft Research Making Strides in Video2004-10-25T17:07:00-10:002004-10-25T17:07:00-10:00larrytag:knowing.net,2004-10-25:/posts/2004/10/microsoft-research-making-strides-in-video/<p>MSR has a <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dpublication%2526id%253d1226">paper</a> describing a very clever trick for video. They describe it for automatically creating cartoons, but the applications extend beyond that. Basically, one of the things those clever kids have been paying attention to is looking at video as a 3-D structure and applying algorithms to the …</p><p>MSR has a <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fresearch%2Fpubs%2Fview.aspx%253ftype%253dpublication%2526id%253d1226">paper</a> describing a very clever trick for video. They describe it for automatically creating cartoons, but the applications extend beyond that. Basically, one of the things those clever kids have been paying attention to is looking at video as a 3-D structure and applying algorithms to the resulting “shapes”. In this case, you lay down reference points on two frames, and they tween the reference points not by linearly interpolating between X and Y, but by creating a spline that follows the defined color/shape as it goes through Z (time).</p>Managerial gender equity predicts ROI?2004-10-25T10:13:00-10:002004-10-25T10:13:00-10:00larrytag:knowing.net,2004-10-25:/posts/2004/10/managerial-gender-equity-predicts-roi/<p>According to a study quoted in a recent New Scientist, the companies in the Fortune 500 with the highest number of women in senior management positions had 35% higher return on stockholder investment than those with the fewest. Sounds good, but be aware that the study was done by “Catalyst …</p><p>According to a study quoted in a recent New Scientist, the companies in the Fortune 500 with the highest number of women in senior management positions had 35% higher return on stockholder investment than those with the fewest. Sounds good, but be aware that the study was done by “Catalyst, a 'on-adversarial advocacy organization,'works to advance women in business leadership with a particular focus on placing women on the boards of Fortune 500 companies.”</p>Artificial Hippocampus For Memory Enhancement, plus Replay?2004-10-25T09:59:00-10:002004-10-25T09:59:00-10:00larrytag:knowing.net,2004-10-25:/posts/2004/10/artificial-hippocampus-for-memory-enhancement-plus-replay/<p>Researchers at USC have modeled the transforms associated with production of memory. It's a black-box: they aren't interested in the subjective experience of the transform, just how inputs (short-term memories) are turned into outputs (long-term memories). The article speaks of prosthesis for memory disorders, which is certainly the first market …</p><p>Researchers at USC have modeled the transforms associated with production of memory. It's a black-box: they aren't interested in the subjective experience of the transform, just how inputs (short-term memories) are turned into outputs (long-term memories). The article speaks of prosthesis for memory disorders, which is certainly the first market, but once you've figured out the IO model for <em>memory</em> you're in major-league Philip K. Dick territory. What happens when you record my inputs and play them into your hippocampus? Do you end up with a personalized version of my experiences?</p>Cat on the Vomit Comet2004-10-24T12:55:00-10:002004-10-24T12:55:00-10:00larrytag:knowing.net,2004-10-24:/posts/2004/10/cat-on-the-vomit-comet/<p>Cat. Zero-G. I'll bet anything it's been declawed.</p>HydroOptix mask terrible for freediving2004-10-23T08:41:00-10:002004-10-23T08:41:00-10:00larrytag:knowing.net,2004-10-23:/posts/2004/10/hydrooptix-mask-terrible-for-freediving/<p>Continuing the mini-trend of posts that have nothing to do with the software development industry...</p>
<p>The <a href="http://www.hydrooptix.com/">HydroOptix</a> dive mask seems like an excellent idea: instead of a flat piece of glass, the mask is fronted with what underwater photographers refer to as a “dome port,” eliminating refraction and providing a …</p><p>Continuing the mini-trend of posts that have nothing to do with the software development industry...</p>
<p>The <a href="http://www.hydrooptix.com/">HydroOptix</a> dive mask seems like an excellent idea: instead of a flat piece of glass, the mask is fronted with what underwater photographers refer to as a “dome port,” eliminating refraction and providing a dramatically better field of view that traditional masks. </p>
<p>The admitted downside of this is that you need to focus just a few inches from your eye to see this (essentially, you focus on a “virtual image” on the inside of the mask). But, it so happens that the needed myopia matches my prescription of -4.5 perfectly, so for me, I just take my glasses off, put the mask on, stumble my way towards the big blue blur, and the instant I'm in the water, Bob's my uncle.</p>
<p>The optics are excellent. You get a massive improvement in peripheral vision and if the water is clear, it translates into a noticeably improved vista underwater. Unfortunately, as a <em>mask</em>, the product just plain sucks. It has a tiny skirt and seals onto my honestly-not-abnormal nose so tightly that I literally <em>could not</em> equalize mask squeeze without using my hand to loosen the mask. And everytime I did that, the mask leaked. And since the mask has a <em>huge</em> volume and purge valves, clearing it requires an obscene amount of air.</p>
<p>Yesterday, I tried freediving with the HydroOptix. Horrible. Just absolutely worthless. I couldn't descend past 20', I wasted my lungs clearing it, and on those few occasions I <em>did</em> get to a decent depth, when I ascended the air in the mask expanded, cracked the seal, and once again, the mask flooded.</p>
<p>Worst, a pod of spinner dolphins swam by. Tina dropped down to 40' and hung out while the dolphins swam right past her. I had to bounce along the surface, watching them cruise by beneath.</p>Iowa Electronic Markets were wrong about Dean2004-10-22T16:15:00-10:002004-10-22T16:15:00-10:00larrytag:knowing.net,2004-10-22:/posts/2004/10/iowa-electronic-markets-were-wrong-about-dean/<p>The Iowa Electronic Markets are a real-money trading system that is used to attempt to predict political outcomes. Right now, a \<span class="math">\(1.00 pay-off on the Presidency will cost \\)</span>.58 for Bush. In other words, Bush is favored. There's a strong case to be made that “real money” is a …</p><p>The Iowa Electronic Markets are a real-money trading system that is used to attempt to predict political outcomes. Right now, a \<span class="math">\(1.00 pay-off on the Presidency will cost \\)</span>.58 for Bush. In other words, Bush is favored. There's a strong case to be made that “real money” is a vastly better predictor of the future than polls, but I watched the IEM during the Democratic primaries and Dean, whose “lead” proved absolutely illusory, consistently led in the IEM.</p>
<p>So I'm pretty dubious. I think it'll come right down to the wire and then (got my fingers crossed) the undecideds and un-pollable kids will break strong for Kerry. God, I hope so. I was going to write a polemic about why I like Kerry or, more specifically, why I think that Bush and Co. are cynical betrayers of everything that America stands for, but I was stymied by the idea that this election is going to be based on people who are <em>undecided</em>. I can't for the life of me understand being undecided -- I can understand being a Republican (especially when the alternative is being a Democrat), I can understand valuing conservative principles over liberal ones, I can even understand (barely) interpreting Bush's behavior as “steadfast” and principled.</p>
<p>I can argue respectfully with conservatives. But I just can't for the life of me figure out what to say to someone who's undecided.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>William Shatner's new album rocks2004-10-22T09:52:00-10:002004-10-22T09:52:00-10:00larrytag:knowing.net,2004-10-22:/posts/2004/10/william-shatners-new-album-rocks/<p>Umm... I know you'll think I'm kidding, but <a href="https://www.amazon.com/exec/obidos/ASIN/B0002RUPH4/thinkinginnet-20">Has Been</a> is really good. I mean, really, seriously good. Not ironic good. Like, <em>good</em> good. I mean, Shatner works as essentially a spoken-word poet over the tunes and he's got his distinctive cadence, but, y'know, that's how the majority of hip-hop …</p><p>Umm... I know you'll think I'm kidding, but <a href="https://www.amazon.com/exec/obidos/ASIN/B0002RUPH4/thinkinginnet-20">Has Been</a> is really good. I mean, really, seriously good. Not ironic good. Like, <em>good</em> good. I mean, Shatner works as essentially a spoken-word poet over the tunes and he's got his distinctive cadence, but, y'know, that's how the majority of hip-hop works, too.</p>EverNote: TabletPC + Getting Things Done app enters beta2004-10-22T08:08:00-10:002004-10-22T08:08:00-10:00larrytag:knowing.net,2004-10-22:/posts/2004/10/evernote-tabletpc-getting-things-done-app-enters-beta/<p>EverNote, a note-taking app that supports the TabletPC, has entered public beta. I'm very excited about this app, as it has a couple great things that I've been dreaming about in a note-taking app: a timeline view, the ability to add custom categories, and templates for to-do and shopping lists …</p><p>EverNote, a note-taking app that supports the TabletPC, has entered public beta. I'm very excited about this app, as it has a couple great things that I've been dreaming about in a note-taking app: a timeline view, the ability to add custom categories, and templates for to-do and shopping lists. The result appears <em>very</em> promising for time-management in the “<a href="https://www.amazon.com/exec/obidos/ASIN/0142000280/thinkinginnet-20/">Getting Things Done</a>” manner.</p>Software Development Salary2004-10-21T09:06:00-10:002004-10-21T09:06:00-10:00larrytag:knowing.net,2004-10-21:/posts/2004/10/software-development-salary/<p>Software Development has published their annual salary survey. Essentially, slow growth. The most interesting graphic to me is the one that shows trends to the question “If you're seeking a new job, what is the reason?” which shows a marked shift from passionate reasons (join a startup, new challenges) to …</p><p>Software Development has published their annual salary survey. Essentially, slow growth. The most interesting graphic to me is the one that shows trends to the question “If you're seeking a new job, what is the reason?” which shows a marked shift from passionate reasons (join a startup, new challenges) to defensive ones (job stability, etc.). The acute pain of the dot-com hangover may be over, but now we've entered the “I'll never drink again,” stage.</p>
<p>A word of caution: salaries vary so widely over the country that the overall median numbers are close to worthless. The charts and tables for the various regions are much better. Say... wouldn't it be cool if SD provided a Web Service that allowed you to retrieve relevant data by zip- or area-code? Would you pay \$5 via Paypal for that?</p>Thoughts on Borland's Strategy2004-10-21T08:57:00-10:002004-10-21T08:57:00-10:00larrytag:knowing.net,2004-10-21:/posts/2004/10/thoughts-on-borlands-strategy/<p>My latest column for SD Times discusses Borland's recently announced initiatives...</p>Inking the Web2004-10-21T08:56:00-10:002004-10-21T08:56:00-10:00larrytag:knowing.net,2004-10-21:/posts/2004/10/inking-the-web/<p>My <a href="http://www.devx.com/wireless/">latest on programming the TabletPC</a> is up on DevX. This one talks about putting ink on the World Wide Web.</p>Pynk development semi-funded2004-10-19T10:06:00-10:002004-10-19T10:06:00-10:00larrytag:knowing.net,2004-10-19:/posts/2004/10/pynk-development-semi-funded/<p>DevX is paying me to write a couple of articles about “Pynk”: my Python interactive environment with ink-editing. That means I can spend time on it during the week in a guilt-free manner. Excellent!</p>Edit and Continue in C# in Whidbey: The Joys of Delay...2004-10-15T12:22:00-10:002004-10-15T12:22:00-10:00larrytag:knowing.net,2004-10-15:/posts/2004/10/edit-and-continue-in-c-in-whidbey-the-joys-of-delay/<p>Helping numb the sting of having predicted at this time last year that “Whidbey” would ship by the last day of 2004, the C# team today announced that C# will support “Edit & Continue” in Visual Studio 2005. Not having been a major VB guy, I can't say that I've <em>missed …</em></p><p>Helping numb the sting of having predicted at this time last year that “Whidbey” would ship by the last day of 2004, the C# team today announced that C# will support “Edit & Continue” in Visual Studio 2005. Not having been a major VB guy, I can't say that I've <em>missed</em> E&C, but I'm sure I'll grow to love it.</p>A Transmitter? We Should Be So Lucky!2004-10-13T09:53:00-10:002004-10-13T09:53:00-10:00larrytag:knowing.net,2004-10-13:/posts/2004/10/a-transmitter-we-should-be-so-lucky/<p>Clearly, Bush's “hump“ is not placed specifically for the debate:</p>
<p>Compare and contrast:</p>IronPython Wiki2004-10-13T07:39:00-10:002004-10-13T07:39:00-10:00larrytag:knowing.net,2004-10-13:/posts/2004/10/ironpython-wiki/<p>I'm hosting a Wiki for IronPython, probably until something more official happens.</p>Life dream...2004-10-09T19:06:00-10:002004-10-09T19:06:00-10:00larrytag:knowing.net,2004-10-09:/posts/2004/10/life-dream/<p>About an hour ago I was sitting at my dining room table, working on a piece of fiction and the setting sun got in my eyes. And I realized that I was sitting in my house in Hawaii, writing fiction, and watching the sun set over the Pacific. Which is …</p><p>About an hour ago I was sitting at my dining room table, working on a piece of fiction and the setting sun got in my eyes. And I realized that I was sitting in my house in Hawaii, writing fiction, and watching the sun set over the Pacific. Which is, essentially, what I've worked my whole life to achieve.</p>IronPython and Dynamic Languages in my latest column2004-10-05T12:30:00-10:002004-10-05T12:30:00-10:00larrytag:knowing.net,2004-10-05:/posts/2004/10/ironpython-and-dynamic-languages-in-my-latest-column/<p>My most recent SD Times column, Dynamic Do-Over, is now online. I argue that what makes “dynamic” languages compelling is not implicit vs. explicit typing, but an interactive console. I also drop some quotes from my talk with Microsoft's Jim Hugunin on the future of IronPython.</p>A Math/Physics Word Problem2004-10-04T16:33:00-10:002004-10-04T16:33:00-10:00larrytag:knowing.net,2004-10-04:/posts/2004/10/a-mathphysics-word-problem/<blockquote>
<p>If you are walking from point A to point B in the rain, do you get more or less wet depending on how fast you walk? <em>[Via]{style="FONT-STYLE: italic"}</em> http://www.actsofvolition.com/archives/2004/october/amathphysics </p>
</blockquote>
<p>Pondering this question was the great intellectual challenge of my youth. I …</p><blockquote>
<p>If you are walking from point A to point B in the rain, do you get more or less wet depending on how fast you walk? <em>[Via]{style="FONT-STYLE: italic"}</em> http://www.actsofvolition.com/archives/2004/october/amathphysics </p>
</blockquote>
<p>Pondering this question was the great intellectual challenge of my youth. I believe the “you always ‘run into’ the same amount of rain, so it’s strictly a matter of how much rain hits your head,” argument.</p>Technical Books for Free2004-09-28T12:44:00-10:002004-09-28T12:44:00-10:00larrytag:knowing.net,2004-09-28:/posts/2004/09/technical-books-for-free/<p><a href="http://techbooksforfree.com/">Links to a bunch of free programming books</a>. Nice.</p>"JPEG of Death" spotted -- Patch NOW!2004-09-28T07:35:00-10:002004-09-28T07:35:00-10:00larrytag:knowing.net,2004-09-28:/posts/2004/09/jpeg-of-death-spotted-patch-now/<p>Bad guys have apparently begun exploiting the security hole that can take over a Windows machine simply by displaying an image. This vulnerability requires patching <em>both</em> the OS <em>and</em> Microsoft Office.</p>Casting Blame On The Air-Control Outage2004-09-28T07:29:00-10:002004-09-28T07:29:00-10:00larrytag:knowing.net,2004-09-28:/posts/2004/09/casting-blame-on-the-air-control-outage/<p>Several news sites are beginning to parrot the meme that the root cause of last week's outage of air-control in the Southwest US is Windows Server 2000's “design” to shut down every 49.7 days “<a href="https://www.techworld.com/news/tech-innovation/microsoft-server-crash-nearly-causes-800-plane-pile-up-3577711/">to prevent a data overload.“</a> This isn't true. This is almost certainly referring to the …</p><p>Several news sites are beginning to parrot the meme that the root cause of last week's outage of air-control in the Southwest US is Windows Server 2000's “design” to shut down every 49.7 days “<a href="https://www.techworld.com/news/tech-innovation/microsoft-server-crash-nearly-causes-800-plane-pile-up-3577711/">to prevent a data overload.“</a> This isn't true. This is almost certainly referring to the <strong>GetSysUptime()</strong> function, which returns a 32-bit integer telling how long in milliseconds the system has been up (1000 * 60 * 60 * 24 * 49.710269618055555555555555555556 = 0xFFFFFFFF). Every 50 days or so, the <strong>GetSysUptime()</strong> function rolls over and starts at 0.</p>
<p>“...To avoid this automatic shutdown, technicians are required to restart the system manually every 30 days.” This is an all-too-believable system response to a minor software defect. How long would it take to change even a broad dependence on a 32-bit response? A few tens of work-hours?</p>This V1aKr.A Isn't Doing It For Me2004-09-28T06:26:00-10:002004-09-28T06:26:00-10:00larrytag:knowing.net,2004-09-28:/posts/2004/09/this-v1akra-isnt-doing-it-for-me/<p><a href="https://www.msn.com/">Half the Viagra sold over the Internet is f</a>ake, according to British scientists. In other news, the budget department of the University of London is very gullible when it comes to funding requests. I'm expecting money for my “Correlation of loneliness to sexual desire in Internet-using housewives,” study any …</p><p><a href="https://www.msn.com/">Half the Viagra sold over the Internet is f</a>ake, according to British scientists. In other news, the budget department of the University of London is very gullible when it comes to funding requests. I'm expecting money for my “Correlation of loneliness to sexual desire in Internet-using housewives,” study any day...</p>FlexWiki: Another MS Project Goes Common Public License2004-09-28T06:04:00-10:002004-09-28T06:04:00-10:00larrytag:knowing.net,2004-09-28:/posts/2004/09/flexwiki-another-ms-project-goes-common-public-license/<p>FlexWiki, a Wiki project by Microsoft Program Manager David Ornstein, has moved from GotDotNet to Sourceforge and changed to a Common Public License. This is the third project after <a href="https://sourceforge.net/projects/wix">WiX</a> and <a href="https://sourceforge.net/projects/wtl/">WTL</a> that MS has placed on SourceForge. Clearly, Microsoft lawyers have worked their way through the CPL and found …</p><p>FlexWiki, a Wiki project by Microsoft Program Manager David Ornstein, has moved from GotDotNet to Sourceforge and changed to a Common Public License. This is the third project after <a href="https://sourceforge.net/projects/wix">WiX</a> and <a href="https://sourceforge.net/projects/wtl/">WTL</a> that MS has placed on SourceForge. Clearly, Microsoft lawyers have worked their way through the CPL and found it acceptable. Whether “floodgates will open” or we'll just see a trickle of projects, it's good to see.</p>
<p>I joined the FlexWiki mailing list a while back, wondering if I could add Tablet PC inking to it. My first take is that the document structure isn't quite what you want for an ink-based Wiki. The big wrench in the “Ink Wiki” plan is that text recognition can only occur on machines running the Tablet PC version of Windows XP, making Search significantly more difficult to pull off.</p>Crash Analysis Standards2004-09-27T18:16:00-10:002004-09-27T18:16:00-10:00larrytag:knowing.net,2004-09-27:/posts/2004/09/crash-analysis-standards/<p>Peter Coffee, eWeek's astute analyst, says that Web Services should have <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">a standard for crash analysis</a>. The two biggest benefits to programmer productivity in the past decade are managed memory and exceptions that generate stack traces. I'm coming up to speed on a customer's system for which I have a …</p><p>Peter Coffee, eWeek's astute analyst, says that Web Services should have <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">a standard for crash analysis</a>. The two biggest benefits to programmer productivity in the past decade are managed memory and exceptions that generate stack traces. I'm coming up to speed on a customer's system for which I have a very specific task. My approach is to forego the incredibly poor documentation and write junit tests (yes, that's right -- it's a Java project) that crash the system, generating exceptions as they go. The exceptions that are generated contain stack traces that show me<em>, to the source code</em> line, the state of the system at the junctures critical to the task at hand. This is actually <em>faster</em> than stepping through thousands of lines of source code trying to comprehend the system. Screw comprehension -- tell me where it hurts.</p>
<p>I have yet to see an article in a magazine or journal that gives credit to structured exceptions as the productivity boon that they are. They're essentially a “theory-less” beneficial feature. And yet the benefit is huge. This just goes to show how out-of-touch are most theories of software development.</p>Biggest Organism: Big Honkin' Mushroom v. Great Barrier Reef?2004-09-27T08:26:00-10:002004-09-27T08:26:00-10:00larrytag:knowing.net,2004-09-27:/posts/2004/09/biggest-organism-big-honkin-mushroom-v-great-barrier-reef/<p>There's a Big Honkin' Mushroom in Oregon that covers 2,200 acres and is claimed to be the “largest living organism.” My question is whether a mushroom is a single organism or if it's communal and therefore in the same class as the Great Barrier Reef (which extends for more …</p><p>There's a Big Honkin' Mushroom in Oregon that covers 2,200 acres and is claimed to be the “largest living organism.” My question is whether a mushroom is a single organism or if it's communal and therefore in the same class as the Great Barrier Reef (which extends for more than 2,500 <em>kilometers</em> and has <em>single bommies</em> that cover 250,000 acres!)</p>
<p>(Googling for “mushroom communal organism” is terrifying proof that hippies know HTML.)</p>We know you have a choice of airlines...2004-09-25T18:57:00-10:002004-09-25T18:57:00-10:00larrytag:knowing.net,2004-09-25:/posts/2004/09/we-know-you-have-a-choice-of-airlines/<p>I've been doing way too much flying lately.</p>
<p>Have you ever noticed that the pre-flight safety briefing starts with instructions on “how to buckle a seat belt” and moves without pause through “activating your on-board oxygen mask” to “transforming safety slides into liferafts in the case of a water landing …</p><p>I've been doing way too much flying lately.</p>
<p>Have you ever noticed that the pre-flight safety briefing starts with instructions on “how to buckle a seat belt” and moves without pause through “activating your on-board oxygen mask” to “transforming safety slides into liferafts in the case of a water landing”? I'd like to think that there are people who can step up the plate at the level of not knowing how to work a belt buckle but, by the end of a depressurization and water-crash, detaching the safety slides into 16-person rafts.</p>IronPython + TabletPC == My New Hobby2004-08-30T00:45:00-10:002004-08-30T00:45:00-10:00larrytag:knowing.net,2004-08-30:/posts/2004/08/ironpython-tabletpc-my-new-hobby/<p>Oh yeah, I think I'll continue developing this...</p>The New Standard For Excellence in Software Management2004-08-27T01:09:00-10:002004-08-27T01:09:00-10:00larrytag:knowing.net,2004-08-27:/posts/2004/08/the-new-standard-for-excellence-in-software-management/<p>"Our scheduling and predictability on this project has been better than it was on OS 360." -- <a href="https://com.com/results?q=news">Bill Gates</a>, August 27, 2004</p>Rearranging the Longhorn Pillars2004-08-27T00:31:00-10:002004-08-27T00:31:00-10:00larrytag:knowing.net,2004-08-27:/posts/2004/08/rearranging-the-longhorn-pillars/<p>Just got off the phone with John Montgomery and Bill Schultz of Microsoft regarding today's announcements re. Longhorn. The official word is that they're announcing 3 things:</p>
<ol>
<li>Longhorn client will be "broady available" sometime in 2006;</li>
<li>The Avalon (display) and Indigo (communication) subsystems of Longhorn will become available sometime to …</li></ol><p>Just got off the phone with John Montgomery and Bill Schultz of Microsoft regarding today's announcements re. Longhorn. The official word is that they're announcing 3 things:</p>
<ol>
<li>Longhorn client will be "broady available" sometime in 2006;</li>
<li>The Avalon (display) and Indigo (communication) subsystems of Longhorn will become available sometime to users of Windows XP and Windows Server 2003, although the user experience (e.g., performance) may not be as good as it would be on equivalent hardware running Longhorn; and</li>
<li>WinFS (file metadata) will only be in beta when Longhorn client ships.</li>
</ol>
<p>So, in other words, they're attempting to decouple the various subsystems: the foundation and the user experience (key components of "Longhorn client"); display and communication ("pillars", but not requiring the foundation); and file system metadata (the mountain that's thrown back all attempts to scale it and now, apparently, no longer considered an essential part of the OS known as "Longhorn client").</p>
<p>That Microsoft is <em>able</em> to say "we're decoupling these Longhorn subsystems," is good news, as it implies a confidence in the subsystem architectures and their ability to integrate. The downside is that backwards compatibility is a bitch.</p>
<p>The more subsystems, the greater the late-phase integration challenge is, especially when you're talking about performance-critical subsystems like the display stack. Committing to Avalon on the non-Longhorn device driver model just dictated a couple dozen job positions for the next decade. Similarly, I believe that while network communication has been rumored to be the biggest challenge to WinFS, backwards compatibility is also part of the problem (What's funny is that Linux can get away with stuff like: "Buy a new hard-drive, format it with this brand new technology, and then copy over all your stuff. It should work most of the time.")</p>
<p>What does this mean to developers? Well, I wouldn't bet my company on WinFS <em>ever</em> becoming available. I <em>expect</em> it will ship, but I wouldn't put my job on the line over it. Second, I asked if the decoupling of the subsystems meant that developers would be able to learn the Longhorn pillars in bite-sized chunks (download Avalon, install it on an XP virtual machine, learn it, download Indigo, learn it, etc). Their response was that they haven't figured out how they'll deliver Longhorn pillars on old foundations, but in essence, I got the sense that if you want to learn Longhorn technologies, you should still be looking to the Longhorn beta cycle. Third, backwards compatibility <em>inevitably</em> produces a lot of pressure to change the APIs -- even if you've invested a lot of energy in learning Indigo and Avalon, I expect you'll have some (re-)learning come the beta.</p>Test of das blog2004-08-24T17:50:00-10:002004-08-24T17:50:00-10:00larrytag:knowing.net,2004-08-24:/posts/2004/08/test-of-das-blog/<p>This is now running dasblog.</p>Did You Miss Me You Didnt Even Notice I Was Gone Did You Sniff Well I Now Live In Haw2004-08-24T03:09:00-10:002004-08-24T03:09:00-10:00larrytag:knowing.net,2004-08-24:/posts/2004/08/did-you-miss-me-you-didnt-even-notice-i-was-gone-did-you-sniff-well-i-now-live-in-haw/<p>Did you miss me?</p>
<p>You didn't even notice I was gone, did you?</p>
<p><em>*sniff*</em></p>
<p>Well, I now live in Hawaii, and you don't, so there!</p>
<p>But it's kind of lonely...</p>
<p>... Hey, next time you come to the Big Island, let's have lunch!</p>I love you, man! Here's two billion dollars! -- Sun explains MS relationship2004-07-01T01:10:00-10:002004-07-01T01:10:00-10:00larrytag:knowing.net,2004-07-01:/posts/2004/07/i-love-you-man-heres-two-billion-dollars-sun-explains-ms-relationship/<p>This is a funny flash movie they played at JavaOne explaining the Sun-Microsoft relationship.</p>Visual Studio for hobbyists announcement this week?2004-06-26T23:25:00-10:002004-06-26T23:25:00-10:00larrytag:knowing.net,2004-06-26:/posts/2004/06/visual-studio-for-hobbyists-announcement-this-week/<p>According to Mary Jo Foley, Microsoft is going to announce an "Express" version of Visual Studio this week targetting hobbyists and students. A few months ago, I wrote that such a thing would be a great idea.</p>When Think Tanks Ad Hominem Attack2004-06-25T06:08:00-10:002004-06-25T06:08:00-10:00larrytag:knowing.net,2004-06-25:/posts/2004/06/when-think-tanks-ad-hominem-attack/<p>Tim Lambert's When Think Tanks Attack does a good job of exposing Microsoft attempts at Astroturfing (paying for the appearance of "grassroots" movement). Sure enough, Microsoft hired as their chief lobbyist one of the directors of a particular think-tank that I questioned about three months ago (I'm not going to …</p><p>Tim Lambert's When Think Tanks Attack does a good job of exposing Microsoft attempts at Astroturfing (paying for the appearance of "grassroots" movement). Sure enough, Microsoft hired as their chief lobbyist one of the directors of a particular think-tank that I questioned about three months ago (I'm not going to give their name because, y'know, why whuffie?).</p>
<p>So this press release comes from this "think tank," and I shoot off an email to them, asking about their logic. Nice, civil discourse. And what happens? The president of this particular "think tank," writes me a nasty-gram. So essentially, Microsoft paid for me to be insulted by this crap-weasel. </p>
<p>I hope the other thinking from that particular "tank" is better than "let's gratuitously insult someone with a print column read by 65,000 software development managers."</p>Do computers sell themselves? What about Tablets?2004-06-25T02:59:00-10:002004-06-25T02:59:00-10:00larrytag:knowing.net,2004-06-25:/posts/2004/06/do-computers-sell-themselves-what-about-tablets/<blockquote>
<p>Evan couldn't resist and adds his two cents to the continuing conversation about improving Tablet sales and seeking Tablet nirvana.</p>
<p><em>via</em> [Incremental Blogger]</p>
</blockquote>
<p>A common theme is that, with a slate or a convertible in tablet mode, a Tablet just looks like a screen showing a screen saver. So how …</p><blockquote>
<p>Evan couldn't resist and adds his two cents to the continuing conversation about improving Tablet sales and seeking Tablet nirvana.</p>
<p><em>via</em> [Incremental Blogger]</p>
</blockquote>
<p>A common theme is that, with a slate or a convertible in tablet mode, a Tablet just looks like a screen showing a screen saver. So how hard is it to create a screensaver that shows the Tablet doing tablet fabulousness -- a 60-second montage showing OneNote, ArtRage, MathPractice, MindManager, Grafigo? I just tried to do it myself, but my M1200 doesn't have the horsepower to run Windows Media Encoder and capture ink in realtime. The screensaver itself would be a trivial piece of code.</p>What Happens In Vegas, No Longer Goes On In Vegas2004-06-23T03:04:00-10:002004-06-23T03:04:00-10:00larrytag:knowing.net,2004-06-23:/posts/2004/06/what-happens-in-vegas-no-longer-goes-on-in-vegas/<p>My old buddy Eric Faurot (we used to work together on the Software Development Conferences) <a href="https://com.com/">cancelled Comdex</a>.</p>Gates talks to employees, causes furor2004-06-23T02:59:00-10:002004-06-23T02:59:00-10:00larrytag:knowing.net,2004-06-23:/posts/2004/06/gates-talks-to-employees-causes-furor/<p><em>via</em> [Scobleizer: Microsoft Geek Blogger]</p>
<p>Sara Ford got a four-word email from Bill Gates (in <em>response</em> to an email from her) and apparently this is cause for celebration, skepticism, and general up-roar-ary. That's extremely disturbing. Gates' is the boss\^h\^h\^h\^h ... er... "Chief Software Architect" of a 50 …</p><p><em>via</em> [Scobleizer: Microsoft Geek Blogger]</p>
<p>Sara Ford got a four-word email from Bill Gates (in <em>response</em> to an email from her) and apparently this is cause for celebration, skepticism, and general up-roar-ary. That's extremely disturbing. Gates' is the boss\^h\^h\^h\^h ... er... "Chief Software Architect" of a 50,000-person business. A technology business. Quite frankly, everyone who's worked at the company for (say) more than a year ought to be able to get in touch with him and expect a response. Yes, he's the world's richest man and no doubt has a schedule chock full of calls with Oprah, Bono, and the rest of the Illuminati, but come on, people. Something's wrong if the majority of Microsoft is so isolated from Gates' capabilities that getting an ACK from him is cause for comment.</p>T-shirt air cannon?2004-06-23T01:33:00-10:002004-06-23T01:33:00-10:00larrytag:knowing.net,2004-06-23:/posts/2004/06/t-shirt-air-cannon/<blockquote>
<p>One of the t-shirt hurling contest entrants sent some photos of their entry. <em>via</em> [James Gosling: on the Java road...]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> For those who've never been to JavaOne, the hurling of t-shirts to the audience (and let's face it: that <em>is</em> what keeps the conference industry alive) in …</p><blockquote>
<p>One of the t-shirt hurling contest entrants sent some photos of their entry. <em>via</em> [James Gosling: on the Java road...]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> For those who've never been to JavaOne, the hurling of t-shirts to the audience (and let's face it: that <em>is</em> what keeps the conference industry alive) in ever-more-elaborate ways is a tradition. Last year, they used a trebuchet (tasteless yet compelling images of a cow flung 1/4 mile). The photo linked to above looks to me like an air cannon, which have come to dominate punkin' chunkin' (<a href="http://www.clubmedia.com/punkin/">http://www.clubmedia.com/punkin/</a>)</p>The myth of the Tablet consumer2004-06-22T23:33:00-10:002004-06-22T23:33:00-10:00larrytag:knowing.net,2004-06-22:/posts/2004/06/the-myth-of-the-tablet-consumer/<blockquote>
<p>The "Tablet isn't for consumers" story is a myth. Tell it to the students using Tablets. Tell it to the start ups that leverage the flexibility of the Tablet in their highly fluid states. Tell it to the doctors, lawyers, managers, engineers, and on and on, that purchased a Tablet …</p></blockquote><blockquote>
<p>The "Tablet isn't for consumers" story is a myth. Tell it to the students using Tablets. Tell it to the start ups that leverage the flexibility of the Tablet in their highly fluid states. Tell it to the doctors, lawyers, managers, engineers, and on and on, that purchased a Tablet out of their own pocket--and not as part of an IT deployment strategy--because they saw it could help them. <em>via</em> [Incremental Blogger]</p>
</blockquote>
<p>If I were a Tablet OEM, I'd create an ultra-portable "Clark Kent" edition and ship copies to the first two rows of the White House Press Corps, the Courtroom TV reporters, and the top on-air reporters in NYC, LA, and Chicago. Then, I'd create the leather-clad "Titan of Industry Limited Edition" and advertise it in The New Yorker, Architectural Digest, etc.</p>Loren Laments That Ultraportable Computers Arent Tablet P2004-06-22T23:10:00-10:002004-06-22T23:10:00-10:00larrytag:knowing.net,2004-06-22:/posts/2004/06/loren-laments-that-ultraportable-computers-arent-tablet-p/<p>Loren laments that ultra-portable computers aren't Tablet PCs. Check out the Sony U-70:</p>
<p>Man, I'd buy a Tablet in that form-factor in a microsecond! But I've come to realize that I'm more pen-centric and more note-taking centric than most people (I have dozens of paper notebooks going back to High …</p><p>Loren laments that ultra-portable computers aren't Tablet PCs. Check out the Sony U-70:</p>
<p>Man, I'd buy a Tablet in that form-factor in a microsecond! But I've come to realize that I'm more pen-centric and more note-taking centric than most people (I have dozens of paper notebooks going back to High School, and thousands of index cards). Still, I'm not sure that I'd buy a U-70 with a touchscreen, even if the new Tablet Input Panel was available. Touchscreen's are really mushy and get scratched too easily. It's something that I've noticed between my original Palm PDAs, where writing was on a separate area (that I ended up covering with magic tape), and my PPC.</p>Visual Studio .NET Key Bindings, Chords, and Consistency2004-06-22T06:21:00-10:002004-06-22T06:21:00-10:00larrytag:knowing.net,2004-06-22:/posts/2004/06/visual-studio-net-key-bindings-chords-and-consistency/<blockquote>
<p>There has been a fair amount of discussion about key bindings in VS.NET, and the fact that they seem to be changing yet again in VS.NET 2005....But the thing that bugs me most about the current set of bindings is the amount of arbitrary stuff you have …</p></blockquote><blockquote>
<p>There has been a fair amount of discussion about key bindings in VS.NET, and the fact that they seem to be changing yet again in VS.NET 2005....But the thing that bugs me most about the current set of bindings is the amount of arbitrary stuff you have to remember. <em>via</em> [<a class="ngquotelink" href="http://www.interact-sw.co.uk/iangblog/2004/06/22/vsnetconsistency">IanG on Tap</a>]</p>
</blockquote>
<p>In the glory days of Lotus 1-2-3 and WordPerfect, the key-bindings were what we now call accelerators - so you used to be able to trouble-shoot your sister's computer by saying "/-F-O-S-K-X-Y-Z. Okay, so you just printed out the report, right?" And you could even embed those strings in macros and put them in a loop and that was, essentially, a pretty-darn-complete programming system. It was wonderful. By the time you're debating what <em>chords</em> to use to activate obscure functions, I think you've gone too far. Gimme' 10 (okay, 12) function keys and menu-based accelerators.</p>Favorite Geek Movies2004-06-22T01:44:00-10:002004-06-22T01:44:00-10:00larrytag:knowing.net,2004-06-22:/posts/2004/06/favorite-geek-movies/<p>Richard Callaby's favorite geek movies are:</p>
<ol>
<li>Sneakers</li>
<li>War Games</li>
<li>Hackers</li>
<li>Anti-Trust</li>
<li>Startup.com</li>
<li>Triumph of the Nerds</li>
</ol>
<p>Mine are:</p>
<ol>
<li>Minority Report (I <em>loved</em> that pre-crime interface! Oh, and you <em>must</em> check this probably-not-intended-for-public-consumption page at Microsoft Research: <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2F%257edcr%2Fminority%2Ffunctionality_01.htm">http://research.microsoft.com/\~dcr/minority/functionality_01.htm</a>)</li>
<li>Blade Runner</li>
<li>War Games …</li></ol><p>Richard Callaby's favorite geek movies are:</p>
<ol>
<li>Sneakers</li>
<li>War Games</li>
<li>Hackers</li>
<li>Anti-Trust</li>
<li>Startup.com</li>
<li>Triumph of the Nerds</li>
</ol>
<p>Mine are:</p>
<ol>
<li>Minority Report (I <em>loved</em> that pre-crime interface! Oh, and you <em>must</em> check this probably-not-intended-for-public-consumption page at Microsoft Research: <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2F%257edcr%2Fminority%2Ffunctionality_01.htm">http://research.microsoft.com/\~dcr/minority/functionality_01.htm</a>)</li>
<li>Blade Runner</li>
<li>War Games</li>
<li>Matrix</li>
<li>Lord of the Rings Trilogy</li>
</ol>
<p>Hmmm... Several of mine aren't <em>about</em> geeks per se, but blissed out my inner geek (I wish I <em>didn't</em> look for matchup errors, rendering artifacts, and kinematic mistakes during movies, but I read <em>Starlog</em> far too much as a youth...)</p>"Bill my email" -- Hmmm...2004-06-21T06:16:00-10:002004-06-21T06:16:00-10:00larrytag:knowing.net,2004-06-21:/posts/2004/06/bill-my-email-hmmm/<blockquote>
<p>....Why don't I just bill the user via email using something like PayPal? Think about it, the user enters their email and phone number on their phone, promises to pay the 99 cents when they get to a real computer and that's it. Done. No middle man, no carriers, no …</p></blockquote><blockquote>
<p>....Why don't I just bill the user via email using something like PayPal? Think about it, the user enters their email and phone number on their phone, promises to pay the 99 cents when they get to a real computer and that's it. Done. No middle man, no carriers, no aggregators, no e-wallets, nothing. Just an old fashioned billing system....there will be lots of people who will never pay. Fine....Some will gladly pony up for the convenience, others will try to ditch the cost because they're like that.... If they lie about their email or SMS, then they don't actually receive the answer.... Bill My Email. Quick, easy and simple. <em>via</em> [<a class="ngquotelink" href="https://www.russellbeattie.com/blog/1007888.html">Russell Beattie Notebook</a>]</p>
</blockquote>
<p>Not the first really good idea from Russell.</p>Xbox 2 won't be backwards compatible with original Xbox games2004-06-21T03:16:00-10:002004-06-21T03:16:00-10:00larrytag:knowing.net,2004-06-21:/posts/2004/06/xbox-2-wont-be-backwards-compatible-with-original-xbox-games/<blockquote>
<p>Apparently some top Xbox execs are quietly confirming that the Xbox 2 isn't going to be backwards compatible with original Xbox games. <em>via</em> [Engadget]</p>
</blockquote>
<p>MSDN Magazine: 2, Raymond Chen: 0!!!!</p>On Rereading Joels Article I Think His Argument Boils Down To IMG Srchttpwwwthinkinginnetgems792004-06-21T02:25:00-10:002004-06-21T02:25:00-10:00larrytag:knowing.net,2004-06-21:/posts/2004/06/on-rereading-joels-article-i-think-his-argument-boils-down-to-img-srchttpwwwthinkinginnetgems79/<p>On rereading Joel's article, I <em>think</em> his argument boils down to:</p>
<p>He's not denying the need to rely on "external dependencies," he's advocating that such dependencies be localized. Why? Because when there are several external dependencies, they have a tendency to have internal dependencies, and you tend to need a …</p><p>On rereading Joel's article, I <em>think</em> his argument boils down to:</p>
<p>He's not denying the need to rely on "external dependencies," he's advocating that such dependencies be localized. Why? Because when there are several external dependencies, they have a tendency to have internal dependencies, and you tend to need a very specific set of versions and it's a source of complexity and, therefore, application brittleness.</p>
<p>Hiding multiple dependencies behind a single dependency is <strong>A Good Thing</strong>. This is what I was getting at in my previous post about "touch once, fix everywhere." But I still don't see how this supports his thesis that Microsoft lost the API war, since API dependencies still exist. And it only supports the "Web Apps will rule" conclusion to the extent that the client value really doesn't depend on an external service (API). If you need to make music (which is only a shorthand for "things which, for connectivity, computational, security, or resource issues make sense to execute locally"), you've got to have a local API.</p>"Touch Once, Fix Everywhere" is the big Web App win2004-06-20T23:57:00-10:002004-06-20T23:57:00-10:00larrytag:knowing.net,2004-06-20:/posts/2004/06/touch-once-fix-everywhere-is-the-big-web-app-win/<p>Corporate development choices are driven by the imperative to rapidly deliver customer value. Developers have their own values (language preferences, philosophical agenda, etc.) which sometimes conflict with this imperative but when push comes to shove, a CTO's job is to "get it done."</p>
<p>The great advantage of Web Apps for …</p><p>Corporate development choices are driven by the imperative to rapidly deliver customer value. Developers have their own values (language preferences, philosophical agenda, etc.) which sometimes conflict with this imperative but when push comes to shove, a CTO's job is to "get it done."</p>
<p>The great advantage of Web Apps for corporate development, and to a slightly lesser extent for ISVs, is the "touch once, fix everwhere," deployment model. The hyperlink and button Web UI paradigm has a "<a href="https://www.amazon.com/exec/obidos/ASIN/0789723107/thinkinginnet-20">don't make me think</a>" advantage and is easy to develop, but really, what makes the Web ideal for corporate development is that because corporate apps evolve in a much-less disciplined manner than commercial software, Web-based deployment can get a fix "into the field" in a matter of hours.</p>
<p>Visual Studio Tools for Office gives a hint of how Web-based deployment can be combined with the ultimate fat client: Microsoft's Office suite. The problem is that even VSTO does not yet have an appealing solution for bestowing trust. There needs to be an <em>easy</em> yet completely trustworthy rights-granting process: in a completely trustworthy manner, the publisher identity and a comprehensive list of security requests must be presented to an administrative actor (either a sufficiently trustworthy end-user, a remote operator, or a system process). Basically, .NET's got the publisher-identity stuff down, but the list of security attributes and process by which rights are granted are too obscure.</p>
<p>You need something along the lines of a firewall: I was just configuring a system for my sister and got an alert that something called "Backweb" was trying to access the Internet. I Googled for it and found that it was the result of having just installed a Logitech device: okay. Remove the step of having to manually Google for an explanation and extend the firewall-like "Allow, Allow once, Block once, Block forever" across <em>all</em> security attributes and you've got the type of UI I'm talking about. Modify it so that instead of my sister getting the message I could set up her system to pass the security request to me (her sysadmin) for either manual or automated decision-making.</p>
<p>Short of that type of capability, the fat-client model will always be less appealing than Web Apps on the deployment front.</p>SpaceShipOne2004-06-20T22:27:00-10:002004-06-20T22:27:00-10:00larrytag:knowing.net,2004-06-20:/posts/2004/06/spaceshipone/<p>Those guys rock.</p>mciSendString("Wrong, Joel")2004-06-19T04:34:00-10:002004-06-19T04:34:00-10:00larrytag:knowing.net,2004-06-19:/posts/2004/06/mcisendstringwrong-joel/<p>Joel Spolsky's (why hasn't <em>Software Development</em> hired him as a columnist?) <a href="https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost-the-api-war/">Microsoft Lost the API Wars</a> has a series of solid observations and at least one brilliant construction ("Chen v. MSDN"), but I'm afraid his title and conclusion aren't supported by his arguments.</p>
<p>He hoists himself on his own petard …</p><p>Joel Spolsky's (why hasn't <em>Software Development</em> hired him as a columnist?) <a href="https://www.joelonsoftware.com/2004/06/13/how-microsoft-lost-the-api-war/">Microsoft Lost the API Wars</a> has a series of solid observations and at least one brilliant construction ("Chen v. MSDN"), but I'm afraid his title and conclusion aren't supported by his arguments.</p>
<p>He hoists himself on his own petard when he says "The new API is HTML, and the new winners in the application development marketplace will be the people who can make HTML sing." You need a media API to sing. Maybe not Redmond's mciSendString, but whatever you choose, HTML isn't a complete platform. You still need data access, networking, and threading. Initialization and configuration customization. Error handling and recovery. Logging. File system access. Email. Messaging. Globalization. Security, encryption... Well, I'm just running through namespaces now.</p>
<p>Where have Web Apps and thick clients gone head-to-head? Email. Personal finance and tax software. It seems <em>way</em> premature to announce the thick client dead based on those markets. Anywhere else?</p>
<p>I'm not discounting the benefits of Web Apps, which make form-based UIs as easy to construct as in Visual Basic (you want to say "even more"? Fine, I'll posit it.) and, therefore, vastly easier than with Win32 APIs. Even more importantly, Web Apps are great for occasional use (love that hyperlink!) and are "touch once, fix everywhere." But on the other hand, media clients require fat clients.</p>
<p>You can't get away from the need for lots of APIs when developing applications. That Microsoft APIs must now <em>compete</em> for favor with APIs from Palo Alto, SourceForge, or where-have-you is true, but that's vastly different than <em>losing</em>. The game is barely afoot.</p>Oof I Woke Up This Morning To Find My Inbox Filled With Gotchas My Latest A Hrefhttpwwwsddtimescomcolswinwatch1042004-06-17T23:21:00-10:002004-06-17T23:21:00-10:00larrytag:knowing.net,2004-06-17:/posts/2004/06/oof-i-woke-up-this-morning-to-find-my-inbox-filled-with-gotchas-my-latest-a-hrefhttpwwwsddtimescomcolswinwatch104/<p>Oof! I woke up this morning to find my Inbox filled with "gotchas". My latest SD Times column claims that Microsoft "got the Tablet PC right the first time." Conveniently forgetting PenWindows and WinPad. No way to finesse my way out of this one: just a stupid statement on my …</p><p>Oof! I woke up this morning to find my Inbox filled with "gotchas". My latest SD Times column claims that Microsoft "got the Tablet PC right the first time." Conveniently forgetting PenWindows and WinPad. No way to finesse my way out of this one: just a stupid statement on my part.</p>Unit Testing in all VS 2005 Versions2004-06-14T00:49:00-10:002004-06-14T00:49:00-10:00larrytag:knowing.net,2004-06-14:/posts/2004/06/unit-testing-in-all-vs-2005-versions/<blockquote>
<p>I want everyone who agrees with me to blog the following sentence:</p>
<blockquote>
<p><strong>Unit Testing support should be included with all versions of Visual Studio 2005 and not just with Team System.</strong></p>
</blockquote>
<p><em>via</em> [<a class="ngquotelink" href="https://scottw.com/">ScottWater</a>]</p>
</blockquote>
<ol>
<li>I agree</li>
<li>I think a "blog petition" is pretty damn clever</li>
<li>But what I <em>really</em> want is …</li></ol><blockquote>
<p>I want everyone who agrees with me to blog the following sentence:</p>
<blockquote>
<p><strong>Unit Testing support should be included with all versions of Visual Studio 2005 and not just with Team System.</strong></p>
</blockquote>
<p><em>via</em> [<a class="ngquotelink" href="https://scottw.com/">ScottWater</a>]</p>
</blockquote>
<ol>
<li>I agree</li>
<li>I think a "blog petition" is pretty damn clever</li>
<li>But what I <em>really</em> want is for VSTS to provide a FIT interface, which is a declarative spreadsheet interface to unit-tests. If Microsoft needs to differentiate their unit-testing support in order to justify the different SKUs, they should provide basic unit-testing in all versions, basic programmer-oriented FIT in Professional, and FIT front-ends in Word / Excel for Enterprise and VSTS editions. Everyone wins.</li>
</ol>Ergonomic Tablet PC Holder2004-06-13T02:28:00-10:002004-06-13T02:28:00-10:00larrytag:knowing.net,2004-06-13:/posts/2004/06/ergonomic-tablet-pc-holder/<p>These guys have patented a gadget for stabilizing your Tablet PC in an ergonomically correct way. Not in production, and it doesn't look like it holds the Tablet PC in a natural position (it looks like it requires your elbow to be thrust out too far), but I was thinking …</p><p>These guys have patented a gadget for stabilizing your Tablet PC in an ergonomically correct way. Not in production, and it doesn't look like it holds the Tablet PC in a natural position (it looks like it requires your elbow to be thrust out too far), but I was thinking that there needs to be a solution for writing in hand beyond "grip the far side with your fingers and rest the inner side on your forearm."</p>Faster Blogger! Kill! Kill!2004-06-13T02:17:00-10:002004-06-13T02:17:00-10:00larrytag:knowing.net,2004-06-13:/posts/2004/06/faster-blogger-kill-kill/<p>That's it: I've just unsubscribed from Scoble's link blog (headlines from 1400 feeds). Whatever the solution is to post-linking while maintaining credit / click-through, titles are insufficient. Scoble generally posts in batches of several dozen things he finds interesting. I've said before that I'm skeptical of linking without commenting, but even …</p><p>That's it: I've just unsubscribed from Scoble's link blog (headlines from 1400 feeds). Whatever the solution is to post-linking while maintaining credit / click-through, titles are insufficient. Scoble generally posts in batches of several dozen things he finds interesting. I've said before that I'm skeptical of linking without commenting, but even if I <em>might</em> accept the value of a "human aggregator," without editorial comment, there needs to be some hint beyond the title.</p>Digitizer Wishes2004-06-13T00:57:00-10:002004-06-13T00:57:00-10:00larrytag:knowing.net,2004-06-13:/posts/2004/06/digitizer-wishes/<blockquote>
<p>I had a fascinating lunch with Steve Caldwell (CEO) and Rodney Standage (Major Account Sales) of FinePoint Innovations yesterday....They wanted to know what I thought was important in a Tablet digitizer....They were curious as to what ways people would use tilt information. To them it's not hard supporting …</p></blockquote><blockquote>
<p>I had a fascinating lunch with Steve Caldwell (CEO) and Rodney Standage (Major Account Sales) of FinePoint Innovations yesterday....They wanted to know what I thought was important in a Tablet digitizer....They were curious as to what ways people would use tilt information. To them it's not hard supporting tilt, but it's a matter what it costs....If anyone has some thoughts on what they'd like to see in a Tablet digitizer, post your thoughts here or better yet on your blog. The FinePoint team is reading them. <em>via</em> [Incremental Blogger]</p>
</blockquote>
<p>I would like fast, semi-automatic parallax correction / calibration. Accuracy is all well-and-good, but when held in the hand or rested on a lap, parallax can easily exceed 16 pixels -- bigger than many controls! However, there are only 6 or so likely eye:digitizer geometries:</p>
<ul>
<li>docking station / desktop</li>
<li>held in non-writing arm</li>
<li>bottom resting on desktop, propped up with non-resting arm</li>
<li>bottom resting on lap, propped up with non-resting arm</li>
<li>resting flat on desktop</li>
<li>resting flat on lap</li>
</ul>
<div>
I should be able to store my parallax corrections / calibration for each of these geometries once and then switch between them either automatically (if tilt sensors / accelerometers are available) or with a pen gesture.
</div>
<div>
</div>
<div>
In some situations I want to be able to use my finger for selection, navigation, and occasional text input, and I would be willing to wear a cap on my finger to do so (just as I'm willing to wear a phone headset in certain situations).
</div>Peter Rysavy Sez While Select2004-06-11T01:59:00-10:002004-06-11T01:59:00-10:00larrytag:knowing.net,2004-06-11:/posts/2004/06/peter-rysavy-sez-while-select/<p>Peter Rysavy sez: <em>While selecting with a pen is definitely fast and intuitive, the text editing experience on a tablet is still very lacking. ... only a Microsoft will ultimately bring a decent editing experience to the mass market.</em></p>
<p>I've investigated writing a Tablet PC editing add-in for Word. Unfortunately, ink-collectors …</p><p>Peter Rysavy sez: <em>While selecting with a pen is definitely fast and intuitive, the text editing experience on a tablet is still very lacking. ... only a Microsoft will ultimately bring a decent editing experience to the mass market.</em></p>
<p>I've investigated writing a Tablet PC editing add-in for Word. Unfortunately, ink-collectors must be created in the same process as the Window for which they collect. Thus, using COM Interop is insufficient; you get an exception when you try to add ink to a Word application instance. The next question is whether VSTO could be used to get the process. I don't have VSTO on my Tablet and it's kind of a longshot <em>and</em> even if you could collect ink in Word's window, you're miles from relating it to the underlying text. All of which is to say that I think Peter's right that it will take Microsoft to create a compelling ink editor for Word documents.</p>Microsoft Doesn't Hold All The Cards2004-06-10T23:53:00-10:002004-06-10T23:53:00-10:00larrytag:knowing.net,2004-06-10:/posts/2004/06/microsoft-doesnt-hold-all-the-cards/<p>My latest SD Times column is up.</p>My GPS for the .NET Compact Framework articles are up on Intel2004-06-10T23:51:00-10:002004-06-10T23:51:00-10:00larrytag:knowing.net,2004-06-10:/posts/2004/06/my-gps-for-the-net-compact-framework-articles-are-up-on-intel/<p>I wrote some of the articles in Intel's "mobilized software" series, including one that presents source code for a GPS interface for the .NET Compact Framework. The articles are finally online.</p>My Tablet PC UI Article Is Up On Devx2004-06-10T23:49:00-10:002004-06-10T23:49:00-10:00larrytag:knowing.net,2004-06-10:/posts/2004/06/my-tablet-pc-ui-article-is-up-on-devx/<p>My latest on programming for the Tablet PC is up on DevX. This is part 2 of 3. My next one will be on Tablet PC resources. If you're a Tablet PC developer, where do you turn to for advice and support? Email me: lobrien 'at' thinkingin.net (which, by …</p><p>My latest on programming for the Tablet PC is up on DevX. This is part 2 of 3. My next one will be on Tablet PC resources. If you're a Tablet PC developer, where do you turn to for advice and support? Email me: lobrien 'at' thinkingin.net (which, by the way, isn't my preferred email address -- use 'at' knowing.net for that.)</p>1/3 of Linux Developers Say They'll Use Mono / Dot Gnu2004-06-10T23:41:00-10:002004-06-10T23:41:00-10:00larrytag:knowing.net,2004-06-10:/posts/2004/06/13-of-linux-developers-say-theyll-use-mono-dot-gnu/<p>The latest <em>SD Times</em> has a graphic showing that 31.7% of Linux developers said they planned to develop for Mono or Dot Gnu. The blurb highlights the "Undecided" attitude of 55.9% of the surveyed, but I think that almost 1/3 of Linux developers apparently being eager to …</p><p>The latest <em>SD Times</em> has a graphic showing that 31.7% of Linux developers said they planned to develop for Mono or Dot Gnu. The blurb highlights the "Undecided" attitude of 55.9% of the surveyed, but I think that almost 1/3 of Linux developers apparently being eager to at least try C# is pretty impressive. Survey was by <a href="https://evansdata.com/">Evans Data Corp</a>.</p>"Code Complete 2nd Edition": Worth the Wait2004-06-04T02:06:00-10:002004-06-04T02:06:00-10:00larrytag:knowing.net,2004-06-04:/posts/2004/06/code-complete-2nd-edition-worth-the-wait/<p>In the preface to the first edition of <em><a href="https://www.amazon.com/exec/obidos/ASIN/0735619670/thinkinginnet-20">Code Complete</a></em>, Steve McConnell writes "I was sure when I conceived this book that someone else would already have written a book on effective construction practices .by someone who was knowledgeable enough about the theoretical state of the art but who was …</p><p>In the preface to the first edition of <em><a href="https://www.amazon.com/exec/obidos/ASIN/0735619670/thinkinginnet-20">Code Complete</a></em>, Steve McConnell writes "I was sure when I conceived this book that someone else would already have written a book on effective construction practices .by someone who was knowledgeable enough about the theoretical state of the art but who was also building enough production code to appreciate the state of the practice." That same sentence is in <em><a href="https://www.amazon.com/exec/obidos/ASIN/0735619670/thinkinginnet-20">Code Complete, 2^nd^ Edition,</a></em> and is one of the only falsehoods in the book: the reason that for 10 years <em>Code Complete</em> has been a must-buy is not for lack of would-be competitors but that McConnell set a standard that no one else has come close to matching. <em>Code Complete, 2^nd^ Edition</em> will finally displace <em>Code Complete</em> from the shelves and will become a standard until, I suspect, McConnell writes a third edition sometime in the next decade.</p>
<p>\< ?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /></p>
<p><em>Code Complete</em> achieves its victory on the basis of two dimensions: its scope is vast yet precisely delimited and its advice is bold yet supported by data. Compare it to the other two great software development books of the 90s and the early contenders for this decade's most influential: <em><a href="https://www.amazon.com/exec/obidos/ASIN/0932633439/thinkinginnet-20">Peopleware</a></em>, <em><a href="https://www.amazon.com/exec/obidos/ASIN/0201633612/thinkinginnet-20">Design Patterns</a></em>, <em><a href="https://www.amazon.com/exec/obidos/ASIN/0201616416/thinkinginnet-20">Extreme Programming Explained</a></em>, and <em><a href="https://www.amazon.com/exec/obidos/ASIN/0201485672/thinkinginnet-20">Refactoring</a></em>. All excellent books, but only <em>Peopleware</em> integrates studies into the discussion as ably as <em>Code Complete</em> and is (appropriately) a much "softer" text. Throw in <a href="https://www.amazon.com/exec/obidos/ASIN/0321193687/thinkinginnet-20">UML Distilled</a> and a language-specific reference and you've got the gift bag I'd give to new programmers. (After which, I'd explain why we <em>wouldn't</em> be using XP .)</p>
<p><em>Code Complete</em> is about code construction, the "central activity in software development." It is not about C++ or Java or Visual Basic programming, although its examples are in those languages (a good evolution from the first edition, which featured C and Pascal). Rather, it fills its 862 pages before the end-matter with a comprehensive treatment of the shared concerns of mainstream languages. <em>Code Complete</em> does not cover the construction of code in non-imperative languages, but is appropriate for any language with a heritage in Algol, C, or Pascal.</p>
<p>In the early 90s, focusing on code construction was radical. At the time, concerned software developers were struggling to define an ethic more sophisticated than the so-called "hacker ethic" that emphasized performance and exploitation of limited resources above all else. As part of that movement, which eventually matured into today's laudable emphasis on rapidly delivering customer value, "mere" programming was considered an unfit subject. At <em>Computer Language</em> magazine I declared that we would no longer speak of "programming" and "programmers" but rather of "software development" and "developers" (a fiat which culminated in the relaunch of that magazine as <em>Software Development</em>). The first edition of <em>Code Complete</em> shattered the illusion that lines of code stood in contrast to a sophisticated discussion of quality, productivity, and best practices.</p>
<p>Now, of course, the pendulum has swung to the other extreme and what makes <em>Code Complete, 2^nd^ Edition</em> is not its position that "code construction is important" but its position that code construction is the central <em>but not exclusive</em> activity of developing high-quality software. The discussions in <em>Code Complete, 2^nd^ Edition</em> that I most want to resonate the industry are no longer those from the core chapters on comments and pseudo-code and how to name your variables and so forth (as eager as I am that such discussions find a new generation of readers) but rather the discussions on how metaphors, personal character, and attitudes towards craftsmanship are complemented by a growing body of knowledge about best practices. I think it's premature to use the term "software engineering," for even the most-disciplined approaches to development, but the time has clearly come for our industry to move beyond anecdotes of what works and what doesn't. <em>Code Complete, 2^nd^ Edition</em> is a clarion call: accessible to any programmer and yet not faddish, pragmatic advice on constructing your next line of code and yet bolstered by hundreds if not thousands of references.</p>
<p><em>Code Complete, 2^nd^ Edition'</em>s approach to object-orientation is probably the aspect that will garner the most critique. The rise of object-orientation in the early- to mid-90s was epochal: today's well-written code differs significantly in structure from well-written code circa 1990. For those of us in an older generation, these differences in structure often seem primary: combining data and behavior in a module, replacing conditionals with polymorphism, reducing visibility. <em>Code Complete, 2^nd^ Edition</em> does not share this emphasis in its discussion. Rather, object orientation and its effect on code is essentially assumed as a structural theme, as reflected in the names of core sections of the book: "Creating High-Quality Code" is followed by sections named "Variables," and "Statements," tellingly replacing the original sections "Design," "Data," and "Control." [ ]{style="mso-spacerun: yes"}</p>
<p>McConnell implicitly rejects the fear that object-orientation needs to be continually highlighted lest the reader fall into lazy habits. For instance, McConnell's chapter on conditionals has a cross-reference to, but does not explicitly highlight, the use of polymorphism as an alternative to a <strong>case</strong> statement and his section on "Taming deep nesting" gives "Use a more object-oriented approach" and "Redesign deeply nested code" as alternative, not fundamentally correct, answers.</p>
<p>Pedagogical quibbles aside, <em>Code Complete 2^nd^ Edition</em> deserves to be the most read software development book of the year, a distinction which it almost undoubtedly will achieve. <a href="https://www.amazon.com/exec/obidos/ASIN/0735619670/thinkinginnet-20">Buy it now</a>, because it's going to change the conversation.</p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0735619670/thinkinginnet-20"></a></p>
<p><img alt="Shop at Amazon.com" height="240" src="http://rcm-images.amazon.com/images/G/01/rcm/120x240.gif" width="120"></p>My Article On Programming The Tablet PC Get Up To Speed Quickly Is U2004-05-12T02:57:00-10:002004-05-12T02:57:00-10:00larrytag:knowing.net,2004-05-12:/posts/2004/05/my-article-on-programming-the-tablet-pc-get-up-to-speed-quickly-is-u/<p>My article on <a href="https://www.developer.com/">Programming the Tablet PC -- Get Up To Speed Quickly</a> is up on DevX. Includes source code for a Tablet PC blogging tool.</p>Tablet Love2004-05-11T22:53:00-10:002004-05-11T22:53:00-10:00larrytag:knowing.net,2004-05-11:/posts/2004/05/tablet-love/<p>I love the TabletPC. One reason is that, like many writers, I have an abiding love for the physical act of putting pen to paper (or, for the past 18 months, pen to screen). I have a few "nice" pens, a couple Mont Blancs, two Watermans, and I use those …</p><p>I love the TabletPC. One reason is that, like many writers, I have an abiding love for the physical act of putting pen to paper (or, for the past 18 months, pen to screen). I have a few "nice" pens, a couple Mont Blancs, two Watermans, and I use those for writing letters, not emails, to friends and family. I write my journal with a Waterman. Written expression need not be just in the choice of words, it can be in the looseness of the stroke -- the precision of the lettering -- the addition of arrows and position</p>
<p>Also, the Tablet is a software developers dream. The Tablet PC is proof of the .NET strategy. Ink is a low-level, first-class OS object. It never lags behind a pen moving at full speed. And yet, all ink capabilities are exposed via a clean, well-designed OO api. You can begin coding against the ink API in [minutes]{.underline}. Yet, the [things]{.underline} you can do with the ink are limited only by your creativity.</p>
<p>Need I point out that there will be 1,000,000 Tablet PCs in the field soon and yet there is virtually [no]{.underline} competition for those who would sell software to Tablet PC owners? For those who dream of opportunity in the software field, the Tablet PC should be embraced. A powerful, easy-to-use SDK, a market unserved and a form-factor which [begs for]{.underline} new applications.</p>
<p>What's not to love?</p>
<p><em>Blogged on a Tablet PC</em></p>Thinktecture: Blogs As Micromarketing Tools2004-05-10T08:47:00-10:002004-05-10T08:47:00-10:00larrytag:knowing.net,2004-05-10:/posts/2004/05/thinktecture-blogs-as-micromarketing-tools/<p>I bet that a good 50% of the readers of this blog already know about <a href="https://www.thinktecture.com/">thinktecture</a>, a company that's less than 24-hours old. Because of blogging, I'm the #1 Google return for various queries about programming airline reservation systems, which is how I keep myself in Jolt Cola and Doritos …</p><p>I bet that a good 50% of the readers of this blog already know about <a href="https://www.thinktecture.com/">thinktecture</a>, a company that's less than 24-hours old. Because of blogging, I'm the #1 Google return for various queries about programming airline reservation systems, which is how I keep myself in Jolt Cola and Doritos. I've published somewhere north of 500 technical articles in the past 15 years; blogging absolutely outstrips writing technical articles as a marketing tool. Is it better to be indexed than it is to be read?</p>Julien Dumky Couvreur Comments On My Sonard2004-05-10T08:20:00-10:002004-05-10T08:20:00-10:00larrytag:knowing.net,2004-05-10:/posts/2004/05/julien-dumky-couvreur-comments-on-my-sonard/<p><a href="http://blog.monstuff.com/">Julien (Dumky) Couvreur</a> comments on my sonar-discovery thoughts:</p>
<p>"Some problems for measuring distances: -don't you only measure the distances modulo the wavelength?"</p>
<p>Yes...*scratch on back of envelope*... holy cow, those are much shorter than I realized...So much for pure tones; you'd have to use a complex waveform. Which …</p><p><a href="http://blog.monstuff.com/">Julien (Dumky) Couvreur</a> comments on my sonar-discovery thoughts:</p>
<p>"Some problems for measuring distances: -don't you only measure the distances modulo the wavelength?"</p>
<p>Yes...*scratch on back of envelope*... holy cow, those are much shorter than I realized...So much for pure tones; you'd have to use a complex waveform. Which would seem to bring us into the world of Fourier transforms, which goes beyond my "thoughts while dog walking" capabilities....</p>
<p>Why use sound to bootstrap a networked meeting rather than just use IP-level discovery?</p>
<p>The idea was that sound maps perfectly with "people having a conversation" while IP-level discovery is either a figment of the network or WiFi-based....</p>Bluetooth as a PC mike?2004-05-08T06:04:00-10:002004-05-08T06:04:00-10:00larrytag:knowing.net,2004-05-08:/posts/2004/05/bluetooth-as-a-pc-mike/<p>I lost my Bluetooth phone (actually, I put it in a McDonald's bag for "safe-keeping" at a beach known for car theft and neglected to mention to Tina that she shouldn't toss the bag in the garbage). I have a Jabra bluetooth headset which works(-ed) great and I thought …</p><p>I lost my Bluetooth phone (actually, I put it in a McDonald's bag for "safe-keeping" at a beach known for car theft and neglected to mention to Tina that she shouldn't toss the bag in the garbage). I have a Jabra bluetooth headset which works(-ed) great and I thought I'd use it as a mike for making notes on my Tablet, for which I have a USB Bluetooth dongle. But when I "look for devices" from the PC, it doesn't see the headset. Is there a way to use a bluetooth headset for PC input and output?</p>Sonar-Based Auto-Discovery2004-05-08T01:59:00-10:002004-05-08T01:59:00-10:00larrytag:knowing.net,2004-05-08:/posts/2004/05/sonar-based-auto-discovery/<p>I was thinking about Loren's concept of a virtual array-microphone on my[ ]{style="mso-spacerun: yes"}walk this morning. I was breaking it down into simplest cases and came[ ]{style="mso-spacerun: yes"}up with an interesting software idea.</p>
<p>The simplest case is locating a tone-generator on a straight line between[ ]{style …</p><p>I was thinking about Loren's concept of a virtual array-microphone on my[ ]{style="mso-spacerun: yes"}walk this morning. I was breaking it down into simplest cases and came[ ]{style="mso-spacerun: yes"}up with an interesting software idea.</p>
<p>The simplest case is locating a tone-generator on a straight line between[ ]{style="mso-spacerun: yes"}two mikes, right? The difference between the sine waves is directly[ ]{style="mso-spacerun: yes"}proportional to the relative distance of the mikes to the tone generator:</p>
<p>Add in volume, which is (inversely) proportional to the square of the distance of[ ]{style="mso-spacerun: yes"}the signal from the mike, and it should be pretty easy to get a fix on a[ ]{style="mso-spacerun: yes"}single tone generator. (Oh, excellent, we can make a sniper detector!)</p>
<p>Things get [quite]{style="FONT-STYLE: italic"} harder when you start thinking about "real" noise signals, and get [really ]{style="FONT-STYLE: italic"}hard when you think about overlapping signals. (As a matter of fact, on my walk, I came to suspect that 16-bit volume might be the Achilles heel of the virtual mike array). But leave that aside for now</p>
<p>My [new idea]{style="FONT-STYLE: italic"} was "well, what if the laptops were themselves the tone generators?" Could that be used to locate [laptops]{style="FONT-STYLE: italic"} in physical space?</p>
<p>And then (as my walk ended), I thought " And then the laptops use Morse code to send their IP addresses and initiate meeting software."</p>
<p>Things get a little tougher with multiple laptops in X,Y but it's easy enough to figure out protocols to get around that. Essentially, you'd sit down at a meeting, hit "go", and it would sound like acoustic modem coupling. Either that, or it would have cool WWII submarine sounds, and the software would be called "The Search for Red Toshiba." Anyway, after a few seconds, "participating laptops" would appear on a virtual table and you could match participant names to faces; shared note-taking / agenda things would start to synchronize; etc.</p>
<p>So basically, is a SONAR-based discovery protocol possible? Valuable? Any other ideas on "meeting room" applications?</p>Clippy, User Experiences, and Microsoft Search2004-05-06T23:05:00-10:002004-05-06T23:05:00-10:00larrytag:knowing.net,2004-05-06:/posts/2004/05/clippy-user-experiences-and-microsoft-search/<blockquote>
<p>Chris Pratley blogs of Clippy: ...A big part of the Assistant plan was to use it as the gateway to help. You could click on the Assistant and ask it questions in normal English (or other language depending on your version of Office)....it did not do this as it …</p></blockquote><blockquote>
<p>Chris Pratley blogs of Clippy: ...A big part of the Assistant plan was to use it as the gateway to help. You could click on the Assistant and ask it questions in normal English (or other language depending on your version of Office)....it did not do this as it turned out - people still overwhelmingly type a single word in the hopes that will get them the answer...the Assistant was actually a wash in terms of user acceptance. Many users told us that they really liked it and found it useful, something which technical people have a hard time believing, since they were the ones who pretty much uniformly didn't like the assistant.... <em>via</em> [Chris_Pratley's WebLog]</p>
</blockquote>
<p>One of the things that we're hearing about Microsoft's forthcoming search engine is that it will focus on "natural language queries," as did, say, <a href="https://www.ask.com/">Ask Jeeves</a>. The thing about natural language query is that you need a user-model. For instance, at iMind we could analyze the educational objectives of lesson plans because we knew "this lesson plan for 9th grade American History is from this teacher in this school district" and we had already spent gazillions of cycles preprocessing all of that context into a model that had "just" a couple of hundred dimensions. I don't think you can do relevant English-language query without a user model: "What's the best movie of the year?" "What's the most important news of the day?" "Why is my computer crashing?"</p>
<p>Is general-purpose English-language query achievable or is it destined to be the next Microsoft Bob or, if not Bob, the next Clippy (hated by some, appreciated by some)? If Web search could be dramatically improved by a server-side user model (essentially, "We store every query you ever enter and induce that you're a programming geek") would that be acceptable?</p>Mono Beta 1 Release2004-05-05T00:37:00-10:002004-05-05T00:37:00-10:00larrytag:knowing.net,2004-05-05:/posts/2004/05/mono-beta-1-release/<blockquote>
<p>The Mono team has announced the beta 1 release of Mono. Read the release notes here or download here.</p>
<p><em>via</em> [<a class="ngquotelink" href="Http://www.cookcomputing.com/blog/archives/000357.html">Cook Computing</a>]</p>
</blockquote>
<p>\<</p>
<p>p class=ngrelatedlinks align=left> Have you tried Mono? Do you think that it's an important project, a sideshow, or somehow negative (e.g., "All that effort shouldn't …</p><blockquote>
<p>The Mono team has announced the beta 1 release of Mono. Read the release notes here or download here.</p>
<p><em>via</em> [<a class="ngquotelink" href="Http://www.cookcomputing.com/blog/archives/000357.html">Cook Computing</a>]</p>
</blockquote>
<p>\<</p>
<p>p class=ngrelatedlinks align=left> Have you tried Mono? Do you think that it's an important project, a sideshow, or somehow negative (e.g., "All that effort shouldn't be put into an evil language like C#")?</p>Is the ACM Shilling for Sun?2004-05-04T23:23:00-10:002004-05-04T23:23:00-10:00larrytag:knowing.net,2004-05-04:/posts/2004/05/is-the-acm-shilling-for-sun/<p>As part of the ACM, one receives free unlimited access to the ACM Professional Development Centre. The PD Centre is hosted at the Sun Learning Center (the "centre" at the "center") and to say that it's Sun-centric is an understatement (they have recently added 5 courses on .NET fundamentals, but …</p><p>As part of the ACM, one receives free unlimited access to the ACM Professional Development Centre. The PD Centre is hosted at the Sun Learning Center (the "centre" at the "center") and to say that it's Sun-centric is an understatement (they have recently added 5 courses on .NET fundamentals, but compare that to 77 courses on Solaris, and 30 courses for Sun One Middleware).</p>
<p><strong>Fair or foul? No one's forcing you to take "Solaris 9: Manage Network Printers and System Processes" and, if you wish to be a Sun sysadmin, I'm sure it's a valuable offer. But is it proper for a professional organization to lends its brand to a commercial entity?</strong></p>Should a Weblog just be questions?2004-05-04T23:07:00-10:002004-05-04T23:07:00-10:00larrytag:knowing.net,2004-05-04:/posts/2004/05/should-a-weblog-just-be-questions/<p>For this month, aside from occasional out-link posts, all of my posts will be in the form of questions. I hope to increase the amount of feedback I get, both in my comments and directly to my email address (<a href="mailto:lobrien@thinkingin.net">lobrien@thinkingin.net</a>). More importantly, I hope to break down the …</p><p>For this month, aside from occasional out-link posts, all of my posts will be in the form of questions. I hope to increase the amount of feedback I get, both in my comments and directly to my email address (<a href="mailto:lobrien@thinkingin.net">lobrien@thinkingin.net</a>). More importantly, I hope to break down the "echo chamber" quality of the blogosphere a bit and get some new perspectives on the state of the software development industry.</p>
<p>For instance, I <em>love</em> the Tablet PC. To me it's an exciting form factor, it suggests all sorts of new applications, and the SDK has tremendous bang for the buck. If I were looking to start up a company, we'd be building Tablet software (heck, I've got the application <em>designed</em>!). But obviously, very few people share that view and what can I learn by writing Yet Another Blog Entry on how much I love the Tablet PC? So,</p>
<p><strong>If you had, say, a quarter of a million dollars in angel funding to start your own software company right now, what would you build?</strong></p>Chat with Bruce Schneier May 5, 11 AM PDT2004-05-04T01:27:00-10:002004-05-04T01:27:00-10:00larrytag:knowing.net,2004-05-04:/posts/2004/05/chat-with-bruce-schneier-may-5-11-am-pdt/<p><strong>SOFTWARE DEVELOPMENT NETSEMINAR</strong></p>
<p><strong>Homeland Security and Other So-Called Solutions:</strong></p>
<p><strong>A Conversation with Bruce Schneier</strong></p>
<p>Editor in Chief Alexandra Weber Morales interviews security and cryptography expert Bruce Schneier, author of Applied Cryptography, Secrets and Lies and, most recently, Beyond Fear:</p>
<p>Thinking Sensibly About Security in an Uncertain World.</p>
<p>If you're looking …</p><p><strong>SOFTWARE DEVELOPMENT NETSEMINAR</strong></p>
<p><strong>Homeland Security and Other So-Called Solutions:</strong></p>
<p><strong>A Conversation with Bruce Schneier</strong></p>
<p>Editor in Chief Alexandra Weber Morales interviews security and cryptography expert Bruce Schneier, author of Applied Cryptography, Secrets and Lies and, most recently, Beyond Fear:</p>
<p>Thinking Sensibly About Security in an Uncertain World.</p>
<p>If you're looking for a tech insider's take on homeland security, cryptographer and consultant Bruce Schneier combines an encyclopedic knowledge of security, engineering, history and culture with insight into multiple domains. In this one-hour live interview, Schneier will discuss his five-step process for dissecting security solutions, and then apply that analysis to the FAA's controversial Computer-Assisted Passenger Profiling System, national ID cards, FBI and CIA-level data collection and mining, Terrorist Information Analysis, e-voting and the Department of Homeland Security itself. But that's not all: Schneier will spend much of the program answering your questions in real-time, be they related to application development or geopolitics. Don't miss this special program of fresh and uncompromising insight from the nation's go-to security expert!</p>
<p>May 5, 2004</p>
<p>11 a.m. Pacific</p>
<p>Register [http://w.on24.com/r.htm?e=5965&s=1&k=91116E032B10521F1ED1BCCCE02F99B9]{.underline} ></p>The Pascal String Challenge2004-05-02T23:16:00-10:002004-05-02T23:16:00-10:00larrytag:knowing.net,2004-05-02:/posts/2004/05/the-pascal-string-challenge/<p><strong>The Pascal String Challenge</strong> is to compose a blog entry that is exactly 255 characters and link back to <a href="https://bitworking.org/news/2004/05/The_Pascal_String_Challenge">Joe Gregorio's original post.</a> Markup characters, titles, and permalinks do not count. The joke relies on Pascal's fixed-length string storage strategy.</p>Fantastic Flying Discs2004-04-30T08:13:00-10:002004-04-30T08:13:00-10:00larrytag:knowing.net,2004-04-30:/posts/2004/04/fantastic-flying-discs/<blockquote>
<p>An <a href="http://www.superunit.net/frisbee/" title="http://www.superunit.net/frisbee/">amazing collection</a> of the art of the flying disc or frisbee^tm^. <em>via</em> [Delta Tango Bravo]</p>
</blockquote>
<p>There were only 3000 charcoal HDXs ever made? Sheesh, I had like 10 of 'em; they were my favorite disc when they came out.</p>OPML import for OneNote2004-04-30T06:59:00-10:002004-04-30T06:59:00-10:00larrytag:knowing.net,2004-04-30:/posts/2004/04/opml-import-for-onenote/<blockquote>
<p>If you have OneNote 1.1 preview installed, you can now import OPML outlines. .... The source and executable are located here. <em>via</em> [Better Living Through Software]</p>
</blockquote>
<p>Nice. Works for me.</p>Live on a thumb drive?2004-04-23T10:50:00-10:002004-04-23T10:50:00-10:00larrytag:knowing.net,2004-04-23:/posts/2004/04/live-on-a-thumb-drive/<p>With USB drives of 128-256MB now commodities, is it possible to carry your: Internet Favorites, My Documents, Outlook .pst and Outlook settings on your keychain? The real question is whether its possible to either:</p>
<ul>
<li>set the appropriate user directories to a drive that disappears when the flash drive is removed …</li></ul><p>With USB drives of 128-256MB now commodities, is it possible to carry your: Internet Favorites, My Documents, Outlook .pst and Outlook settings on your keychain? The real question is whether its possible to either:</p>
<ul>
<li>set the appropriate user directories to a drive that disappears when the flash drive is removed, or</li>
<li>use a utility to do this at the press of a button</li>
</ul>
<p>Anyone know? I'm currently splitting my time between 6 computers and keeping "authoritative" files is kind of a hassle (the big deal, of course, is Outlook). And, anticipating the "Use Exchange" suggestion, I use my server-class machines to evaluate OS's; I can't dedicate one to be a W2K3 Server 24x7.</p>
<p>Suggestions?</p>The OneNote API: Hints Only2004-04-21T02:44:00-10:002004-04-21T02:44:00-10:00larrytag:knowing.net,2004-04-21:/posts/2004/04/the-onenote-api-hints-only/<p>Donovan Lange has posted the first concrete info on the OneNote Service Pack API. Unfortunately, he doesn't <em>quite</em> give enough details for even a hacking attempt: we'll need the XML schema that describes import data and how to construct the GUID required by the "navigate to page" function.</p>Microsoft and The World Poker Tour2004-04-21T01:15:00-10:002004-04-21T01:15:00-10:00larrytag:knowing.net,2004-04-21:/posts/2004/04/microsoft-and-the-world-poker-tour/<p>There's a show called <em>World Poker Tour.</em> Every week they show the final table of 9 players from a tournament in which a couple of hundred people compete. Week after week, this is what you see:</p>
<ul>
<li>A small elite of tournament pros who get to the final tables time after …</li></ul><p>There's a show called <em>World Poker Tour.</em> Every week they show the final table of 9 players from a tournament in which a couple of hundred people compete. Week after week, this is what you see:</p>
<ul>
<li>A small elite of tournament pros who get to the final tables time after time</li>
<li>One or two representatives from a larger cadre of professionals who probably end up in the money, but not at the final table, of most tournaments they enter</li>
<li>"Amateurs" who are good poker players, but for whom luck almost certainly played a major role in getting to the table</li>
</ul>
<p>Now, I'm not saying the amateurs are <em>just</em> lucky. For all the "two minutes to learn," premise of the show, it isn't trivial to calculate evolving odds on pots valued at hundreds of thousands of dollars without the slightest tell. And week after week, it's shown that an <strong>a talented amateur with good cards can beat the most fearsome player with bad cards</strong>. </p>
<p>Which brings us to Microsoft.</p>
<p>Scoble is having a blog-versation with Microsoft Monitor's Joe Wilcox centering on Adobe CEO Bruce Chizen's sleeping habits: whether Chizen should "stay awake at night" worrying about Microsoft (Wilcox' stand) or sleep easy and exult in the morning's fresh crop of new Windows customers.</p>
<p>I don't give a hoot about how CEO's of multi-hundred million dollar corporations sleep. I care about how entrepreneurial developers sleep. Or, to go back to our analogy with the <em>World Poker Tour</em>, I care about the amateurs trying to get to the final table.</p>
<p>Microsoft is like one of the tournament pros who appear at the final table time and again. Let's say <a href="http://philhellmuth.com/">Phil Hellmuth</a>, who's a notorious trash-talking egotist who's behavior at the table is calculated to intimidate and irritate people into poor play. Yes, if you're considering "entering the tournament," you should have an idea of how to play when this fearsome competitor has you in the sights. If it comes down to you and this competitor, good luck. If, on the other hand, your goal is simply to end up in the money <strong>you're nuts to let fear keep you out of the game</strong>. Absolutely nuts.</p>
<p><strong>You know Microsoft's hand for years to come! Microsoft will "play" Whidbey, Yukon, Longhorn, and Office</strong>. If you make, say, a 3D modeling tool you will face fierce competition for the pot, but it won't be from Redmond. It's like knowing that Phil Hellmuth will be dealt a straight, a flush, and three of a kind: there may be some doubt as to the exact quality of the hands, but <strong>you will know their cards and their fundamental character and they will not know yours</strong>.</p>
<p>Microsoft will act like a poker pro: they will hint that they might Assimilate You, they will hint that they might Crush You Like A Bug, they will move their chips towards the pot and see if you sweat or smile. They will analyze you. And then you know what they'll do? <strong>They'll offer to buy you out of the tournament</strong>. They don't do this on <em>WPT</em>, but it happens all the time in real gambling tournaments: everyone makes their "expected value" calculation, talks about it rationally, and an arrangement is made.</p>
<p><em>\<Scribbled/></em></p>
<p><em>There was more here, but I decided to cut out the gung-ho stuff. Gambling, whether in a poker tournament or entrepreneurially, isn't for everyone and if you need some geeky Weblog to bolster your courage, it's probably not the right choice for you.</em></p>Cruel and Unusual Music2004-04-18T22:17:00-10:002004-04-18T22:17:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/cruel-and-unusual-music/<blockquote>
<p>From the AP wire:</p>
<blockquote>
<p>FALLUJAH, Iraq - In Fallujah's darkened, empty streets, U.S. troops blast AC/DC's "Hell's Bells" and other rock music full volume from a huge speaker, hoping to grate on the nerves of this Sunni Muslim city's gunmen and give a laugh to Marines along the front …</p></blockquote></blockquote><blockquote>
<p>From the AP wire:</p>
<blockquote>
<p>FALLUJAH, Iraq - In Fallujah's darkened, empty streets, U.S. troops blast AC/DC's "Hell's Bells" and other rock music full volume from a huge speaker, hoping to grate on the nerves of this Sunni Muslim city's gunmen and give a laugh to Marines along the front line.</p>
</blockquote>
<p>...What music would you play to drive an enemy (or cube mate) crazy? I'm thinking that AC/DC, albeit grating and annoying, isn't quite enough to be truly cruel....Some nice Britney Spears, perhaps... <em>via</em> [/\ndy's Weblog]</p>
</blockquote>
<p>I wonder if part of it isn't using music that's grating but culturally acceptable to your own troops as an echo / background. ("Hey, Guns N Roses is next!") But if you just want to drive them insane, I'm thinking a Celine Dion loop ought to do it.</p>NCollection2004-04-18T06:27:00-10:002004-04-18T06:27:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/ncollection/<blockquote>
<p>This is quite interesting. <a href="http://www.tigris.org/servlets/Login?cookieCheck=failed" title="http://ncollection.tigris.org/">Open source Implementations of the missing data structures</a> of the FCL: linked list, doubly linked list, tree, skip list, heap, etc... Focus is made on robustness, standard conformance, documentation and testing of the collections. <em>via</em> [Sam Gentile's Blog]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> So the cool kids have …</p><blockquote>
<p>This is quite interesting. <a href="http://www.tigris.org/servlets/Login?cookieCheck=failed" title="http://ncollection.tigris.org/">Open source Implementations of the missing data structures</a> of the FCL: linked list, doubly linked list, tree, skip list, heap, etc... Focus is made on robustness, standard conformance, documentation and testing of the collections. <em>via</em> [Sam Gentile's Blog]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> So the cool kids have moved away from calling it the Base Class Library and now call it the Framework Class Library, is that right? (Gotta' have the lingo down to run with the cool kids...)</p>Longhorn Sample: RSS Reader (Like, Out Loud)2004-04-18T06:26:00-10:002004-04-18T06:26:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/longhorn-sample-rss-reader-like-out-loud/<blockquote>
<p>Jason Nadal has posted <a href="https://weblogs.asp.net/jnadal/108141" title="http://weblogs.asp.net/jnadal/archive/2004/04/05/108141.aspx">an RSS reader that uses the Longhorn text-to-speech APIs to actually read you the morning news</a> while you do other things. <a href="https://www.restlessdelusions.com/" title="http://www.restlessdelusions.com/projects/archive/getmynewsa1.zip">Includes source</a>. <em>via</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>I love sample code that is actually helpful...</p>Web Wizards, without the mess2004-04-18T06:23:00-10:002004-04-18T06:23:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/web-wizards-without-the-mess/<blockquote>
<p>via William Bartholomew:</p>
<blockquote>
<p>Fritz Onion has posted an interesting article about how to write ASP.NET projects without using Web Projects and the associated bindings to IIS etc.</p>
<p>http://staff.develop.com/onion/Samples/aspdotnet_without_web_projects.htm</p>
</blockquote>
<p>TTFN - Kent</p>
<div>
<p><em>via</em> [Kent Sharkey's blog]</p>
</div>
</blockquote>
<div>
I've had this post in …</div><blockquote>
<p>via William Bartholomew:</p>
<blockquote>
<p>Fritz Onion has posted an interesting article about how to write ASP.NET projects without using Web Projects and the associated bindings to IIS etc.</p>
<p>http://staff.develop.com/onion/Samples/aspdotnet_without_web_projects.htm</p>
</blockquote>
<p>TTFN - Kent</p>
<div>
<p><em>via</em> [Kent Sharkey's blog]</p>
</div>
</blockquote>
<div>
I've had this post in my aggregator for two months.
</div>Win32 to .NET Cross Reference2004-04-18T06:21:00-10:002004-04-18T06:21:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/win32-to-net-cross-reference/<blockquote>
<div>
<p>I haven't seen this referenced before:</p>
<p>Microsoft Win32 to Microsoft .NET Framework API MapMicrosoft Win32 to Microsoft .NET Framework API Map</p>
<p><em>via</em> [Eric Gunnerson's C# Compendium]</p>
</div>
</blockquote>
<div>
Nor have I.
</div>Efficiency of iteration over arrays?2004-04-18T06:20:00-10:002004-04-18T06:20:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/efficiency-of-iteration-over-arrays/<blockquote>
<p>Which one of these three loops is the most efficient? How can I prove the answer?</p>
<p>I've listed the source code below. The three loops are:</p>
<ol>
<li>
<p>::: {.MsoNormal}
Foreach over an int array
:::</p>
</li>
<li>
<p>::: {.MsoNormal}
Simple for over an int array
:::</p>
</li>
<li>
<p>::: {.MsoNormal}
For over an int array, hoisting out the length value …</p></li></ol></blockquote><blockquote>
<p>Which one of these three loops is the most efficient? How can I prove the answer?</p>
<p>I've listed the source code below. The three loops are:</p>
<ol>
<li>
<p>::: {.MsoNormal}
Foreach over an int array
:::</p>
</li>
<li>
<p>::: {.MsoNormal}
Simple for over an int array
:::</p>
</li>
<li>
<p>::: {.MsoNormal}
For over an int array, hoisting out the length value
:::</p>
</li>
</ol>
<p>...</p>
<p>The third option is to be <strong>avoided</strong>. The JIT looks for the pattern in version #2, and knows how to optimize it. If you pull the value out into a temporary, it may not optimize it. Of course, you know that because you've been measuring your important scenarios...</p>
<p><em>via </em>[Eric Gunnerson's C# Compendium]</p>
</blockquote>
<p>\<</p>
<p>p class=ngrelatedlinks align=left> Hoisting the Length value is ill-advised? Surprising; I'll have to change my habits.</p>$14 DIY steady-cam2004-04-18T06:18:00-10:002004-04-18T06:18:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/14-diy-steady-cam/<blockquote>
<p>Some guy managed to build a DIY "steady-cam" for \<span class="math">\(14 (those things which help keep TV crews keep their videocameras from shaking while they're running around shooting reality shows), which might not sound like a big deal until you realize that a professional Steadicam (that's the brand name) costs around …</span></p></blockquote><blockquote>
<p>Some guy managed to build a DIY "steady-cam" for \<span class="math">\(14 (those things which help keep TV crews keep their videocameras from shaking while they're running around shooting reality shows), which might not sound like a big deal until you realize that a professional Steadicam (that's the brand name) costs around \\)</span>1,500. [Via MetaFilter] <em>via</em> [Engadget]</p>
</blockquote>
<p>I swear I'm going to do this as soon as my ear infection clears up.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Jetway's dual-user PC2004-04-18T06:17:00-10:002004-04-18T06:17:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/jetways-dual-user-pc/<blockquote>
<p>Jetway sells a new small form factor PC called the 860Twin that can be used by two people at the same time. <em>via</em> [Engadget]</p>
</blockquote>
<p>Useful for pair programming?</p>Structures and algorithms references2004-04-18T06:16:00-10:002004-04-18T06:16:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/structures-and-algorithms-references/<blockquote>
<p>Quick links for a dictionary of algorithms and data structures and a book on exact string matching algorithms. (via HotLinks) More bedtime reading Update: The memory management reference, via Simon's linklog.... <em>via</em> [<a class="ngquotelink" href="http://blog.monstuff.com/archives/000159.html">Curiosity is bliss</a>]</p>
</blockquote>
<p>Helpful.</p>Why Whitehorse doesn't use UML2004-04-18T06:14:00-10:002004-04-18T06:14:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/why-whitehorse-doesnt-use-uml/<blockquote>
<p>Keith Short has good reasons why Whitehorse is not using UML.<em> via</em> [Christian Nagel's OneNotes]</p>
</blockquote>
<p>Good article, solid arguments.</p>Page 232004-04-18T04:43:00-10:002004-04-18T04:43:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/page-23/<p>"These annotations are then used for performing context checks or are passed on to subsequent modules, for example to aid in code generation." -- <a href="https://www.amazon.com/exec/obidos/ASIN/0471976970/thinkinginnet-20/">Modern Compiler Design, Grune et al.</a></p>
<p>The meme says:</p>
<p><em>Grab the nearest book.<br>
Open the book to page 23.<br>
Find the fifth sentence.<br>
Post the text of …</em></p><p>"These annotations are then used for performing context checks or are passed on to subsequent modules, for example to aid in code generation." -- <a href="https://www.amazon.com/exec/obidos/ASIN/0471976970/thinkinginnet-20/">Modern Compiler Design, Grune et al.</a></p>
<p>The meme says:</p>
<p><em>Grab the nearest book.<br>
Open the book to page 23.<br>
Find the fifth sentence.<br>
Post the text of the sentence in your journal along with these instructions</em></p>
<p>(watch how it is spreading on the blogsphere here or here)</p>
<p><em>via</em> John Shute's Weblog</p>
<p>P.S. I'm not proud to be reading a book on writing compilers on a Sunday.</p>OneNote and Blogging2004-04-18T01:08:00-10:002004-04-18T01:08:00-10:00larrytag:knowing.net,2004-04-18:/posts/2004/04/onenote-and-blogging/<p>Chris Pratley asked for feedback on how blogging from OneNote should appear and my comments became too unwieldy for his comments box:</p>
<p>To dispense with two crucial things: <strong>ink support</strong> and <strong>layout support</strong> (i.e., not just tables but the arbitrary positioning of elements in X-Y space a la "real …</p><p>Chris Pratley asked for feedback on how blogging from OneNote should appear and my comments became too unwieldy for his comments box:</p>
<p>To dispense with two crucial things: <strong>ink support</strong> and <strong>layout support</strong> (i.e., not just tables but the arbitrary positioning of elements in X-Y space a la "real" OneNote). AFAIK, there is no blogging tool right now that allows you to draw a map and type "Bob's House" at the appropriate spot; for all the power of Blogging As It Exists, it basically works with text streams.</p>
<p>Now for the more ruminative stuff: OneNote has the metaphor of pages, tabs, and notebooks. The obvious mapping is to blog entries, categories, and blogs. So I would expect that to "subscribe to a blog" in OneNote, I would get a new notebook that periodically updated itself; new titled pages appearing for every new post. Since page titles have limited screen real-estate, this introduces a navigation problem: perhaps one needs some kind of <strong>automatic Table of Contents</strong> page, essentially providing aggregator services. <strong>Or...</strong> maybe one doesn't subscribe to a blog in OneNote, perhaps aggregation is the role of NewsGator / Outlook and a OneNote "subscribed to" blog represents posts that one wishes to keep around for reference: one still would have a OneNote notebook corresponding to the blog, but the notebook wouldn't update itself, one would <strong>use a SideNote / Snippet sort of capability to shoot entries from the aggregator into the notebook</strong>.</p>
<p>So <em>upstream</em> you must support ink and layout, <em>downstream</em> you must support the blog -> category -> entry hierarchy. <strong>The third leg of the stool is clearly linking</strong>. The feedlink / permalink distinction is the clearest example I know of REST: the feedlink is a <em>permanent</em> resource of "the latest stuff" the permalink is a <em>permanent</em> resource to "this particular thing." I want hyperlinks in OneNote that embrace this distinction and I want those hyperlinks to be able to navigate not only across the World Wide Web (of course) but <em>within</em> my own computer, workgroup, corporation, and social networks. In other words, <strong>I want OneNote notebooks to become transparent to deep linking</strong>: <em>onenote://machinename/mynotebook/mypage#myanchor</em> as a URI (short of <em>onenote</em> as a complete scheme, I'll settle for a transition period where <em>http</em> is shoehorned into service). Creating good RESTian links must be reduced to a trivial service (with my Tablet I want to be able to circle some elements, make a gesture, and those elements become a post, with a permalink and a reference in the feedlink). </p>
<p>I also want to make a slightly different gesture to free the elements for editing. In other words, the "square" gesture makes a post that only I can edit (a traditional blog entry), the "star" gesture makes <strong>a post that anyone can edit (a wiki-like entry</strong>), the "circle" gesture makes a post that only people in the "ninja" group can edit, etc.</p>Dave Winer saves Apple^h^h^h^h^hSun2004-04-17T02:35:00-10:002004-04-17T02:35:00-10:00larrytag:knowing.net,2004-04-17:/posts/2004/04/dave-winer-saves-applehhhhhsun/<p>In a comment on Scoble's "persuasion" post, there's a link to <a href="http://scripting.com/davenet/1996/01/08/gottabearetha.html">this ent</a>ry by Dave Winer in which he dreams of saving Apple by dint of a \$1 billion checkbook and slavish devotion to software developers. sed/Apple/Sun/ and it's a timely read.</p>Persuasion: Best Practices2004-04-17T02:24:00-10:002004-04-17T02:24:00-10:00larrytag:knowing.net,2004-04-17:/posts/2004/04/persuasion-best-practices/<p>Scoble asks "How do you persuade?" in which he poo-poos consistent positive statements and talks up authority. It turns out there are scientific studies. According to Robert B. Cialdini's February 2001 Scientific American article "The Science of Persuasion" (my research library can beat up your research library!) the 6 keys …</p><p>Scoble asks "How do you persuade?" in which he poo-poos consistent positive statements and talks up authority. It turns out there are scientific studies. According to Robert B. Cialdini's February 2001 Scientific American article "The Science of Persuasion" (my research library can beat up your research library!) the 6 keys to reciprocity are: reciprocation, consistency (get people to say "yes"), social validation (many people doing it), liking, authority, and scarcity. Cialdini has a book: "<em><a href="https://www.amazon.com/exec/obidos/ASIN/0688128165/thinkinginnet-20">Influence: The Psychology of Persuasion</a></em>." I guess I found Scoble his Christmas present.</p>.NET Languages: 32, JVM Languages: 1812004-04-17T00:45:00-10:002004-04-17T00:45:00-10:00larrytag:knowing.net,2004-04-17:/posts/2004/04/net-languages-32-jvm-languages-181/<p>Omer van Kloeten speculates that the reason no one's asked me about C# on the JVM as part of the Sun-Microsoft agreement is because the JVM is explicitly the "Java" VM and .NET explicitly decoupled language and VM. Let's see: according to Jason Bock there are 32 compilers available for …</p><p>Omer van Kloeten speculates that the reason no one's asked me about C# on the JVM as part of the Sun-Microsoft agreement is because the JVM is explicitly the "Java" VM and .NET explicitly decoupled language and VM. Let's see: according to Jason Bock there are 32 compilers available for .NET. According to Robert Tolksdorf there are 181 compilers for Java (and I didn't count preprocessors).</p>
<p><em>Obviously</em>, Java's been around for a longer time. <em>Obviously</em>, these are both incomplete pages that have experimental, unfinished, and moribund projects. We can talk about platform strategies and how things might be in the future, but <strong>as things stand today the JVM is a more diverse platform than .NET</strong></p>Smalltalk's Beautiful Image2004-04-16T05:21:00-10:002004-04-16T05:21:00-10:00larrytag:knowing.net,2004-04-16:/posts/2004/04/smalltalks-beautiful-image/<p>Ted Neward has clued in that one major reason why Smalltalkers are so fond of the language (\<troll>not just because they're nuts, like LISP proponents\</troll>) is Smalltalk's <em>image</em>. The <em>image</em> is quite a revelation: it's the in-memory representation of <em>everything you've ever done</em> in Smalltalk. You can reset …</p><p>Ted Neward has clued in that one major reason why Smalltalkers are so fond of the language (\<troll>not just because they're nuts, like LISP proponents\</troll>) is Smalltalk's <em>image</em>. The <em>image</em> is quite a revelation: it's the in-memory representation of <em>everything you've ever done</em> in Smalltalk. You can reset it, and trim it down if you like, but basically, out of the box, the image makes programming Smalltalk more like writing in a notebook and less like rolling a fresh piece of paper into a typewriter. So if one month you write a program to, say, explore genetic algorithms and then the next month you're writing a graph layout program, it's not like you say "Oh, let me open up that genetic algorithm project and see if there's anything I can use," <em>it's just there</em>. </p>
<p>That's the long-term benefit, but even in the short-term, the <em>workspace</em> allows you to write something, grab a chunk out of the middle, execute it in a stand-alone manner, change it, move it back into the "guts" of the big block you wrote (although "doing the right thing" and refactoring it into it's own method is no harder than cut-and-paste). Python and other dynamic languages have a <em>console</em> that's equivalent to the workspace, but I don't think they go the extra step to persist the image over time.</p>
<p>I wish that there were .NET languages that had a console / workspace and an image. I think such a language would be very, very attractive. Since .NET does not require objects to be serializable, is an image fundamentally impossible? If so, is there an 80-20 solution?</p>According To Cringelynbspthanks Chris Suns Jonat2004-04-16T04:58:00-10:002004-04-16T04:58:00-10:00larrytag:knowing.net,2004-04-16:/posts/2004/04/according-to-cringelynbspthanks-chris-suns-jonat/<p>According to <a href="http://www.pbs.org/program/retired-site/">Cringely</a> (thanks, Chris!), Sun's Jonathan Schwartz talks up the Windows API as key to "interoperability" aspects of the MS-Sun agreement. If true (and apparently this is straight from the horse's mouth), Cringely is right to say "...what Sun has actually obtained from Microsoft (beyond the money, of course …</p><p>According to <a href="http://www.pbs.org/program/retired-site/">Cringely</a> (thanks, Chris!), Sun's Jonathan Schwartz talks up the Windows API as key to "interoperability" aspects of the MS-Sun agreement. If true (and apparently this is straight from the horse's mouth), Cringely is right to say "...what Sun has actually obtained from Microsoft (beyond the money, of course) is less than nothing."</p>
<p>Frankly, the thought of a smart guy like Schwartz waxing enthusiastic about Windows APIs as the route to strengthening the Java Desktop is so difficult to believe that if it were anything less than first-hand reporting, I wouldn't give it credence. Much better than I could, Cringely's article gives the business argument against the value of letting Microsoft dictate your business strategy. At a more technical level, this is the <em>exact scenario</em> that Gosling poo-pooed as the work of conspiracy nuts: agreeing to help someone cook by getting together every Friday and deciphering a great big bowl of spaghetti. "Okay, we were talking about this strand last time, right? Picking things up, you can see it goes about another quarter-inch and then it turns here." "Oh, why's that?" "Okay, it's because of this piece over here, isn't it? See how that curves around right here?" "Oh, right! Boy, now we're really getting somewhere!"</p>
<p>I'm not saying that I have advice for what Sun <em>should</em> do, but dicking around with the Win32 APIs clearly ain't it.</p>Taxes, Ear Infection, And The Anal Probe: My Perfect Storm2004-04-16T03:01:00-10:002004-04-16T03:01:00-10:00larrytag:knowing.net,2004-04-16:/posts/2004/04/taxes-ear-infection-and-the-anal-probe-my-perfect-storm/<p>In celebration of my family history and 40th birthday, from now on I get to have a colonoscopy every five years. When the nurse asked "April 15?" I said "Tax day? Seems appropriate!" And then, just to make sure that I was in prime condition, last weekend I came down …</p><p>In celebration of my family history and 40th birthday, from now on I get to have a colonoscopy every five years. When the nurse asked "April 15?" I said "Tax day? Seems appropriate!" And then, just to make sure that I was in prime condition, last weekend I came down with a middle ear infection, for which I couldn't even take aspirin because of the colonoscopy. Ever had an ear infection? Ever time you <em>swallow</em> it feels like you're having acupuncture and they say "Eh, screw it," and just slap the needles home with a brick.</p>
<p>As you can guess, I've been in a <em>swell</em> mood. Ever seen a cat in a vet's office? I've been like that: alternating between fury and misery.</p>
<p>P.S. The colonoscopy came out fine. As I left they gave me a series of photos of my insides, but I'm going to file that under "too much information."</p>
<p>P.P.S. I can understand <em>this whole post</em> might be "too much information," but I thought the confluence of miseries would provide some schadenfreude.</p>James Gosling Blogs About The SunMicrosoft Agreement Its An Interest2004-04-16T02:28:00-10:002004-04-16T02:28:00-10:00larrytag:knowing.net,2004-04-16:/posts/2004/04/james-gosling-blogs-about-the-sunmicrosoft-agreement-its-an-interest/<p>James Gosling blogs about the Sun-Microsoft agreement. It's an interesting read in that Gosling rebuts conspiracy theories that are apparently bouncing around the echo-chamber of the "M\$" mob (as a rule, I don't bother reading discussions where that "witticism" is common currency -- as much as I love the amateur programming …</p><p>James Gosling blogs about the Sun-Microsoft agreement. It's an interesting read in that Gosling rebuts conspiracy theories that are apparently bouncing around the echo-chamber of the "M\$" mob (as a rule, I don't bother reading discussions where that "witticism" is common currency -- as much as I love the amateur programming community, I'm really only interested in people who are mature enough to understand that big companies are big companies, not soap opera characters). Apparently, the fear is that Microsoft has cleverly maneuvered into Sun into aggreeing to an impenetrable thicket of "compatibility" requirements, compliance with which will drain Sun's energy and innovation. (Ironic, huh?)</p>
<p>Gosling naturally says "We're not idiots. We don't blindly trust Microsoft. We're working in the best interests of our company and our clients." He doesn't address the question I've gotten left and right over the past couple weeks: "Does this mean we're going to see Java on .NET?" (Interestingly, no one's yet asked me "Does this mean we'll see C# or Visual Basic on JVM?").</p>
<p>I can't say with 100% certainty, but I've been discouraging people from believing in that. The class libraries are incompatible, and why go to the effort to port <em>your</em> class library to the <em>other</em> platform when <em>your</em> platform is the strategic foundation? (But might the agreement lower barriers to a third-party Open Source port of one class library to the other platform?) My guess is that 90% of the interoperability talk will boil down to WS- specifications: Web Service interop serves the interests of both companies.</p>Phishing For Programmer Interview Questions or Resumes?2004-04-15T00:33:00-10:002004-04-15T00:33:00-10:00larrytag:knowing.net,2004-04-15:/posts/2004/04/phishing-for-programmer-interview-questions-or-resumes/<p>I get recruiting emails and phone calls often, and it's not surprising that my spam filter (the fabulous <a href="http://spambayes.sourceforge.net/">SpamBayes</a>) passes through emails that mention C#, Java, unit testing, and so forth. The other day I received an email that mentioned a programming position and then said, essentially, "Send your resume …</p><p>I get recruiting emails and phone calls often, and it's not surprising that my spam filter (the fabulous <a href="http://spambayes.sourceforge.net/">SpamBayes</a>) passes through emails that mention C#, Java, unit testing, and so forth. The other day I received an email that mentioned a programming position and then said, essentially, "Send your resume and answer these questions: What is the role of unit testing in software development? What are some guidelines for deciding where to place functionality? etc." (I don't remember the exact questions, but they were of the sort you would expect for a "level 1 screen" of a programmer.)</p>
<p>At the bottom was an opt-out link. Since the content seemed legitimate and I'm fortunate enough to be in a position where my response to those sorts of questions is "If you have to ask if I know that, we probably don't need to talk," I whacked the opt-out link. After doing so, I realized that the contact information at the bottom of the email was all bogus.</p>
<p>So, what was that? It was awfully elaborate if it was just confirming a live email address for general spam. Two kinds of phishing occur to me: they might be trying to generate answers that they or their clients might be asked in programming interviews? (Basically, a phishing version of those posts on newsgroups that amount to "Do my homework for me?") The other thought was that they were phishing as a prelude to an identity theft kind of con.</p>
<p>Has anyone else seen this kind of behavior?</p>What Should I ask Danny Thorpe about Delphi?2004-04-14T06:01:00-10:002004-04-14T06:01:00-10:00larrytag:knowing.net,2004-04-14:/posts/2004/04/what-should-i-ask-danny-thorpe-about-delphi/<p>I've arranged to conduct an email interview with Danny Thorpe, Borland's Delphi Architect. What should I ask him? I've never used Delphi commercially, although I reviewed it a couple of times over the years.</p>Well, Maybe WinFS Isn't Being Cut After All...2004-04-14T05:56:00-10:002004-04-14T05:56:00-10:00larrytag:knowing.net,2004-04-14:/posts/2004/04/well-maybe-winfs-isnt-being-cut-after-all/<p>Microsoft's Jeremy Mazner says that BusinessWeek's statement that WinFS network capability will be sacrificed to Longhorn deadline pressure is incorrect. Mazner's post seems pretty unequivocal. Says Mazner: "WinFS hasn't been cut.[ ]{style="mso-spacerun: yes"}WinFS hasn't even really been scoped back....[W]hat [is this talk about] WinFS wouldn't work …</p><p>Microsoft's Jeremy Mazner says that BusinessWeek's statement that WinFS network capability will be sacrificed to Longhorn deadline pressure is incorrect. Mazner's post seems pretty unequivocal. Says Mazner: "WinFS hasn't been cut.[ ]{style="mso-spacerun: yes"}WinFS hasn't even really been scoped back....[W]hat [is this talk about] WinFS wouldn't work over a network? [ ]{style="mso-spacerun: yes"}I'm not entirely sure....Perhaps that line got mangled, or he meant to say something else, or he just misinterpreted some snippet he saw in an email somewhere.[ ]{style="mso-spacerun: yes"}I went back and read the Joe Peterson mail of March 19 that Jay quotes right before his WinFS corporate network quote, and the only instance of the string "WinFS" is in the paragraph where Joe talks about the core pillars of the release remaining the same."</p>
<p>Maznor wonders if the reporter "had some confusing information about Longhorn Server....We recognize that for WinFS to be really interesting in the enterprise, it needs to be able to scale up to a server environment. [ ]{style="mso-spacerun: yes"}And we know that the Longhorn client version of WinFS is not optimized for that kind of scale...."</p>
<p>Okay, so that introduces the question of scale. I wonder if that's a 32-64 bit thing at the enterprise network level? (I've kind of become obsessed with the whole 32-64 bit thing lately.)</p>
<p>Second, there's the question of "legacy" file systems. On the face of it, that would seem to be the single hardest aspect of the WinFS concept. One could certainly anticipate a lack of features in that area in the first release and one would certainly be <em>wise</em> to anticipate that this is an area where one would see Microsoft's classic pattern of pragmatic, stepping-stone approaches that "get it right in version 3."</p>
<p>More from Microsoft as the story develops...</p>O'Brien's Law2004-04-14T03:08:00-10:002004-04-14T03:08:00-10:00larrytag:knowing.net,2004-04-14:/posts/2004/04/obriens-law/<p>O'Brien's Law: <em>Any "Surname's Law" formulation labeled as such by its creator is likely a facile exercise in self promotion.</em></p>Lapjack?2004-04-14T02:56:00-10:002004-04-14T02:56:00-10:00larrytag:knowing.net,2004-04-14:/posts/2004/04/lapjack/<p>Spencer the Katt gives brief mention to a forthcoming device that, like the Lojak car system, gives location information on a lost or stolen laptop. If you accept the premise that a thing that is not obvious but not entirely invisible is a useful anti-theft technology, couldn't equivalent functionality be …</p><p>Spencer the Katt gives brief mention to a forthcoming device that, like the Lojak car system, gives location information on a lost or stolen laptop. If you accept the premise that a thing that is not obvious but not entirely invisible is a useful anti-theft technology, couldn't equivalent functionality be done in software? Essentially, ping a server with your id, and if you don't get an okay, disable the system (yeah, yeah, work in a semi-disconnected model, user-definable lockdown options, virus-writer techniques to mask the driver's "signature," etc.). Of course, short of a BIOS implementation, it would be paved over by a formatting, but you've achieved the primary goal (casual access to your information). Maybe the lockdown could lead to a "No questions asked reward" screen -- giving the theft / janitor who found the thing an incentive to return the hardware in the locked down (but recoverable) state.</p>
<p>I dunno'. Are laptop thieves actively interested in purloining information? If so, putting a software-based obstruction in their way is laughable.</p>Danny Thorpe, Borland's Delphi Architect, Blogs2004-04-13T22:59:00-10:002004-04-13T22:59:00-10:00larrytag:knowing.net,2004-04-13:/posts/2004/04/danny-thorpe-borlands-delphi-architect-blogs/<p>Danny Thorpe has a blog. Definitely worth subscribing to: Borland has a great tradition of out-innovating Microsoft in software development tools. The joke used to be that you bought Borland in even-numbered years and Microsoft in odd-numbered. The market could definitely use that kind of competition again. The first example …</p><p>Danny Thorpe has a blog. Definitely worth subscribing to: Borland has a great tradition of out-innovating Microsoft in software development tools. The joke used to be that you bought Borland in even-numbered years and Microsoft in odd-numbered. The market could definitely use that kind of competition again. The first example? Because the Delphi for .NET language was implemented using 100% managed typesafe code, they can seamlessly move between .NET 1.1 (32-bit), .NET 2.0 32-bit (Whidbey), and .NET 2.0 64-bit (Whidbey / AMD / Itanium). I haven't tested Itanium code, but code compiled for AMD's x86-64 extensions averages about 20% faster than equivalent 32-bit code -- a nice little bump which Delphi will give you for free. <em>Nice</em>. <em>Very nice</em>.</p>Re-Throwing Exceptions2004-04-12T06:40:00-10:002004-04-12T06:40:00-10:00larrytag:knowing.net,2004-04-12:/posts/2004/04/re-throwing-exceptions/<p>A smart tip on throwing exceptions by <a href="http://dotnetguy.techieswithcats.com" title="http://dotnetguy.techieswithcats.com">Brad</a>.<img alt="" height="1" src="https://scottw.com/" width="1/"> via [<a class="ngquotelink" href="https://scottw.com/">ScottWater</a>]</p>WinFS, We Hardly Knew Ye!2004-04-12T00:30:00-10:002004-04-12T00:30:00-10:00larrytag:knowing.net,2004-04-12:/posts/2004/04/winfs-we-hardly-knew-ye/<p>According to BusinessWeek, Microsoft is cutting features in Longhorn in order to achieve a first-half 2006 ship date. BusinessWeek says that the biggest casualty will be WinFS, the metadata store that would go beyond things like size and creation date to track an enormous number of attributes about files. BusinessWeek …</p><p>According to BusinessWeek, Microsoft is cutting features in Longhorn in order to achieve a first-half 2006 ship date. BusinessWeek says that the biggest casualty will be WinFS, the metadata store that would go beyond things like size and creation date to track an enormous number of attributes about files. BusinessWeek says "the current plan calls for [WinFS] to work on PCs but not to extend to files shared over a corporate network," which on the face of it appears a curious "cutting point." If the technology's a go locally, one would think that network capability would simply be slower.</p>
<p>I go back and forth on the inherent value of WinFS: on the one hand, it certainly <em>seems</em> like I want to have all the documents relating to Project X available at a moments notice, but maybe I just want a desktop Google in the sense of a comprehensive index, some activity-based ranking algorithm, and really, really fast implementation.</p>The Viagra Closure: 600 Quintillion Spellins2004-04-07T07:37:00-10:002004-04-07T07:37:00-10:00larrytag:knowing.net,2004-04-07:/posts/2004/04/the-viagra-closure-600-quintillion-spellins/<p>There are <a href="http://cockeyed.com/lessons/viagra/viagra.html">600,426,974,379,824,381,952</a> ways to spell "viagra" using standard spammer substitution techniques. So I thought: "Wow, what a great example for explaining closures in C# 2.0!" but then I realized that some creep would probably use the code to, y'know, generate 600 quintillion …</p><p>There are <a href="http://cockeyed.com/lessons/viagra/viagra.html">600,426,974,379,824,381,952</a> ways to spell "viagra" using standard spammer substitution techniques. So I thought: "Wow, what a great example for explaining closures in C# 2.0!" but then I realized that some creep would probably use the code to, y'know, generate 600 quintillion emails in an elegant manner.</p>
<p>So now I'm just thinking "The Viagra Closure" sounds like a <em>Star Trek</em> episode:</p>
<p>Kirk: Six hundred quintillion, four hundred twenty-six quadrillion?</p>
<p>Spock: Six hundred quintillion, four hundred twenty-six quadrillion, nine hundred seventy-four trillion, three hundred seventy-nine billion, eight hundred twenty-four million, three hundred eighty-one thousand, nine hundred and fifty-two, to be precise.</p>
<p>Scotty: Thet could make every inbox on th' Federation gang aft agley!</p>
<p>McCoy: No one can delete that many emails! They're human beings, not robots!</p>
<p>Kirk: We have no choice but to destroy this society-killing technology. Lock photon torpedoes on relay stations of Spamtonia IV.</p>Barracude 160GB SAT2004-04-06T23:52:00-10:002004-04-06T23:52:00-10:00larrytag:knowing.net,2004-04-06:/posts/2004/04/barracude-160gb-sat/<p><a href="https://www.compusa.com/products/product_info.asp%3f%26ref%3dcj%26pfp%3dcj%26product_code%3d304903">Barracude 160GB SATA drive</a> discounted to \$99 at CompUSA. I post this because it's the first time that I've seen a SATA drive used as a come-on. Okay, a couple of these and I'll <em>finally</em> get my New Guinea video going...</p>Channel 9 Video at 1.4 Speed: Still Not My Thing...2004-04-06T23:45:00-10:002004-04-06T23:45:00-10:00larrytag:knowing.net,2004-04-06:/posts/2004/04/channel-9-video-at-14-speed-still-not-my-thing/<p>I was wrong: you <em>can</em> watch Windows Media video at higher-than-normal speed (1.4x) (thanks Jonathan!). The pitch isn't shifted down, but it's perfectly comprehensible. So I d/l'ed a couple Channel 9 videos, more to judge the general premise of videoblogging than to react to the content in particular …</p><p>I was wrong: you <em>can</em> watch Windows Media video at higher-than-normal speed (1.4x) (thanks Jonathan!). The pitch isn't shifted down, but it's perfectly comprehensible. So I d/l'ed a couple Channel 9 videos, more to judge the general premise of videoblogging than to react to the content in particular. Here's what I noticed:</p>
<ul>
<li>A video link is a slow link</li>
<li>The video clips seem to generally to be more than a minute in length, while blog entries are often read in 20-30 seconds. (I write long blog entries, but that's because I think with my fingers and don't edit them.)</li>
</ul>
<p>The slow link characteristic and the pithy item desire seem to be in contrast. A 5-second delay is one thing with a 2-minute clip, but a 5-second delay for a 20-second snippet seems untenable.</p>
<p>Hmm... still, maybe I'll wire up my Webcam and try videoblogging. On the other hand, I'd have to shave...</p>Channel 9 From Redmond Space2004-04-05T23:01:00-10:002004-04-05T23:01:00-10:00larrytag:knowing.net,2004-04-05:/posts/2004/04/channel-9-from-redmond-space/<p>Microsoft has <a href="http://channel9.msdn.com/">turned on</a> a new marketing ... er ... communications blog called "Channel 9" whose stated goal is to create transparency into Microsoft's internal development processes. There's a Channel 9 doctrine which is basically a restatement of the Cluetrain Manifesto. There's lots of video snippets. Personally, I never download video snippets …</p><p>Microsoft has <a href="http://channel9.msdn.com/">turned on</a> a new marketing ... er ... communications blog called "Channel 9" whose stated goal is to create transparency into Microsoft's internal development processes. There's a Channel 9 doctrine which is basically a restatement of the Cluetrain Manifesto. There's lots of video snippets. Personally, I never download video snippets: even with broadband, they take seconds to load, which seems antithetical to the whole efficient point of blogging. There's a control for Windows Media Player that allows you to speed up audio playback while controlling the pitch, allowing you to listen to spoken word recordings at rates approaching reading; perhaps when someone creates a similar plugin for video, I'll change my tune.</p>
<p>You know, one of the funny aspects of blogging is that people are sniping at Microsoft about "not getting RSS." If you were to compare how marketing techniques have changed in the past year or so at any two large companies in the world, Microsoft's embrace of their developers' voices would have to rank as among the more dramatic changes.</p>
<p>Here's another observation, though: Microsoft bloggers <em>seem</em> to occasionally have coordinated talking points. This week, for instance, there's been a sudden surge in the message "Windows Forms is not threatened by Longhorn." This <em>might</em> be just the "echo chamber" quality of the blogosphere, but <a href="http://www.wagged.com/">Waggener Edstrom</a> is also promoting that message in the traditional PR channels. Coincidence? WaggEd "echoing" the blogosphere? Talking points memos? Not that it really matters, except to point out what should be obvious: the majority of employee blogs from any organization will be <em>more</em> self-censored, <em>more</em> pro-"My Company," <em>more</em> distorted than most professional PR.</p>
<p>The human voice promoted by blogs is absolutely appealing. Specific insights offered by blogs are wonderful. But blogs are not magic truth-telling oracles.</p>Just The Other Day I Was So Damned Sick Of Not Having A Persistent Object Image That I Downloaded A Hrefhttps2004-04-05T12:06:00-10:002004-04-05T12:06:00-10:00larrytag:knowing.net,2004-04-05:/posts/2004/04/just-the-other-day-i-was-so-damned-sick-of-not-having-a-persistent-object-image-that-i-downloaded-a-hrefhttps/<p>Just the other day, I was s<em>o damned sick</em> of not having a persistent object image that I downloaded Cincom Smalltalk. Ah, Smalltalk! It's been years, my old friend... Where were we when last me met? Hmmm... where the heck's the object for a network query?</p>
<p>Anyway, Sean Malloy …</p><p>Just the other day, I was s<em>o damned sick</em> of not having a persistent object image that I downloaded Cincom Smalltalk. Ah, Smalltalk! It's been years, my old friend... Where were we when last me met? Hmmm... where the heck's the object for a network query?</p>
<p>Anyway, Sean Malloy of Cincom serendipitously visited my blog and pointed out that RentACoder might seem like a great thing if you're a decent programmer who values your time at around \<span class="math">\(4 an hour. And indeed, there *are* people filling RentACoder bids and presumably, many of them are living in countries where \\)</span>4 is a good wage. Maybe I'll have to micro-outsource for real.</p>
<p>Oh, and if you've never used Smalltalk (or you have and it's been awhile) download Cincom -- it's free for non-commercial use! Smalltalk is universally lauded as the language that best facilitates an object-oriented mindset. C++, Java, C#: all are compromises of the pure object "vision." (Good compromises, but compromises.)</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Human aggregators: Editors vs. Clipping Services2004-04-05T00:30:00-10:002004-04-05T00:30:00-10:00larrytag:knowing.net,2004-04-05:/posts/2004/04/human-aggregators-editors-vs-clipping-services/<p>Microsoft's Robert Scoble calls himself "a human aggregator": he reads 1400+ Weblogs per day relating to his position as a Microsoft evangelist. (Perhaps everyone reading this blog knows of Scoble, but just in case...)</p>
<p>People who filter hundreds of blogs can provide tremendous value: they relieve readers of a reading …</p><p>Microsoft's Robert Scoble calls himself "a human aggregator": he reads 1400+ Weblogs per day relating to his position as a Microsoft evangelist. (Perhaps everyone reading this blog knows of Scoble, but just in case...)</p>
<p>People who filter hundreds of blogs can provide tremendous value: they relieve readers of a reading burden that few can afford and, by their choice of posts and comments, they foster a worldview. Because they read so much, they can find aspects of that worldview supported and criticized and, in a virtuous cycle, they help establish, grow, and promote that worldview. They can, in short, act as editors.</p>
<p>Or, they can simply post without comment, acting as a clipping service. Clipping services are fine; they still relieve a tremendous reading burden for those who have a need or inclination to monitor a topic. But a clipping service, while filtering for <em>content</em>, should not filter on <em>worldview</em>. Clipping services <em>should not be</em> editorially biased.</p>
<p>Scoble is experimenting with a product that blogposts anything dragged to an Outlook folder and publishing the result as "Interesting stuff found in 1400 feeds." To me, that feed is noticeably less interesting that Scoble's primary feed. With Google, Technorati, and Feedster the day has arrived where we do not need humans to function as clipping services. Even if a feed interjects 1 editorial for every 10 "raw data" posts, that feed has an editorial <em>context</em> for the raw data.</p>
<p>What about <em>Reader's Digest</em>, you say? There's a magazine that speaks entirely via surrogates and yet promotes a worldview. But <em>RD</em>'s editorial is hardly an even-handed reflection of the world of publishing: one does not find many articles from <em>The Nation</em> in RD, even as counterpoints to the more conservative articles that promote that editorial worldview. Similarly, with 1400 blogs, it <em>would be</em> <em>possible</em> to create a "Microsoft Digest" blog or an "Open Source Advocacy" blog; such blogs would <em>not</em> contain raw data, but the best-articulated advocacy of the day. I think blogs of that sort would be quite compelling, but that's not the tactic that our prototype "human aggregator" / "blogosphere editor" has chosen.</p>
<p>Clearly, I advocate the editorial function. Personally, I try not to "Post Selected Item" without some sort of commentary. When I can't do that, I notice that it's usually because the item is some technical snippet that <em>I personally</em> anticipate retrieving some other time. I look forward to trying Kunal's "magic folder" but I don't anticipate making that blog publicly visible.</p>RentACoder more like RipACoder2004-04-03T06:28:00-10:002004-04-03T06:28:00-10:00larrytag:knowing.net,2004-04-03:/posts/2004/04/rentacoder-more-like-ripacoder/<p>There's been a small uptick in mentions of <a href="https://www.freelancer.com/">RentACoder</a>. I subscribed to RentACoder's mailing list and what it primarily establishes is that freelance programming markets are years from maturity. The majority of RFPs are "I need a clone of xyz.com: \<span class="math">\(200," or "I need an email program that automatically …</span></p><p>There's been a small uptick in mentions of <a href="https://www.freelancer.com/">RentACoder</a>. I subscribed to RentACoder's mailing list and what it primarily establishes is that freelance programming markets are years from maturity. The majority of RFPs are "I need a clone of xyz.com: \<span class="math">\(200," or "I need an email program that automatically detects spam: must be a superset of Outlook functionality and implemented flawlessly. Will consider payments as high as \\)</span>250."</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Ted Neward Scooped The MSSun Announcement2004-04-02T00:19:00-10:002004-04-02T00:19:00-10:00larrytag:knowing.net,2004-04-02:/posts/2004/04/ted-neward-scooped-the-mssun-announcement/<p>Ted Neward scooped the MS-Sun announcement.</p>RSI in my middle finger2004-04-01T23:47:00-10:002004-04-01T23:47:00-10:00larrytag:knowing.net,2004-04-01:/posts/2004/04/rsi-in-my-middle-finger/<p>Okay, this sounds like an April Fool's Joke, but it isn't: in the past week or so, the middle knuckle of my middle finger has started hurting. A moment ago, I just flicked the scroll bar on my mouse and had a serious shooting pain as my finger "tented": I …</p><p>Okay, this sounds like an April Fool's Joke, but it isn't: in the past week or so, the middle knuckle of my middle finger has started hurting. A moment ago, I just flicked the scroll bar on my mouse and had a serious shooting pain as my finger "tented": I think I have a repetitive stress injury! Amazing -- typing is such a major part of my life that I have finger strength like a rock climber and I've never had the slightest indication of carpal tunnel syndrome. To have my wickedness felled by a mouse wheel -- What a world! What a world!</p>A Hrefhttpblogsmsdncommichaelplattarchive2004030483704aspx2004-04-01T23:37:00-10:002004-04-01T23:37:00-10:00larrytag:knowing.net,2004-04-01:/posts/2004/04/a-hrefhttpblogsmsdncommichaelplattarchive2004030483704aspx/<p>[Michael Platt sez: "[General purpose, high performance transformation from one domain or space to another is not possible without the algorithm linking those domains."]{style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"}]{style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"}</p>
<p>[[Good point. Does it invalidate my comments on visual programming? I don't think so; I think …</p><p>[Michael Platt sez: "[General purpose, high performance transformation from one domain or space to another is not possible without the algorithm linking those domains."]{style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"}]{style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"}</p>
<p>[[Good point. Does it invalidate my comments on visual programming? I don't think so; I think what it does is appropriately introduce a certain amount of discipline early in the process. "Design the data structures first..." has been a theme of this blog for the past couple weeks and it would certainly need to be applied to the problem of visual programming. ]{style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"}]{style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"}</p>Eric Newcomer Doubts That Visual Programming is Viable2004-04-01T22:45:00-10:002004-04-01T22:45:00-10:00larrytag:knowing.net,2004-04-01:/posts/2004/04/eric-newcomer-doubts-that-visual-programmingnbspisnb/<p>Eric Newcomer doubts that visual programming is viable. I disagree. Visual programming is usually conceived to be executable UML, which is a terrible concept. I've argued against visual programming in the past, pointing out that developers value information density and won't embrace something that takes half a screen to express …</p><p>Eric Newcomer doubts that visual programming is viable. I disagree. Visual programming is usually conceived to be executable UML, which is a terrible concept. I've argued against visual programming in the past, pointing out that developers value information density and won't embrace something that takes half a screen to express "a = (b == c) ? d : e".</p>
<p>But I also just read a eulogy to Hypercard and not long ago I re-read Fielding's <a href="https://www.ics.uci.edu/%7efielding/pubs/dissertation/top.htm">REST thesis</a>. Also, I've long advocated the concept that the spreadsheet is actually a class of computer programming language whose metaphor is so simple to grasp that its potential expressiveness is ignored. I'd argue that if you combined the hyperlink with the spreadsheet so that you could zoom "in" and "out" (essentially, a "cell" could present the results of /traverse to an entirely different spreadsheet) and provide facilities for creating GUIs (by, for instance, providing access to the .NET BCL), you'd be well on your way. If, in addition, intercell dependencies could be generated with mouse / pen gestures, I think you'd have an interesting system. Note that this theoretical hyperlinked spreadsheet language would be <em>programmed</em> using spreadsheet visual metaphors, but wouldn't necessarily have to <em>deliver</em> a spreadsheet-like interface to the end user.</p>
<p>Incidentally, there was at least one compilable spreadsheet for DOS. As I recall, it came out in the late 80s and was a victim of the Windows Software Extinction Event.</p>Microsoft And Sun Have Announced That It Was All A Sad Misunderstanding And That A Hrefhttpwwwinfoworldcomarticle042004-04-01T22:02:00-10:002004-04-01T22:02:00-10:00larrytag:knowing.net,2004-04-01:/posts/2004/04/microsoft-and-sun-have-announced-that-it-was-all-a-sad-misunderstanding-and-that-a-hrefhttpwwwinfoworldcomarticle04/<p>Microsoft and Sun have announced that it was all a sad misunderstanding and that from now on, they're best friends for life. Okay, stop smirking and play along: If Sun and Microsoft were to decide to cooperate closely to serve the needs of the entire development community, what would be …</p><p>Microsoft and Sun have announced that it was all a sad misunderstanding and that from now on, they're best friends for life. Okay, stop smirking and play along: If Sun and Microsoft were to decide to cooperate closely to serve the needs of the entire development community, what would be great possible initiatives? Visual Studio for Java(tm)? J2EE for .NET?</p>
<p>In other news, Scoble and <a href="http://www.tbray.org/ongoing/">Bray</a> have said that photos of them engaging in what is purported to be a secret handshake are fakes. "Illuminati? Never heard of them," Said Scoble.</p>Micro-Outsourcing2004-04-01T00:45:00-10:002004-04-01T00:45:00-10:00larrytag:knowing.net,2004-04-01:/posts/2004/04/micro-outsourcing/<p>I'm very excited to announce that as of today, April 1st 2004, I've become the world's first micro-outsourced developer. I've hired great developers in Bangalore (GMT +4.5), Cameroon (GMT +1), Brazil (GMT -3), and Vanuatu (GMT -7). My job is to write the <a href="http://nunit.org/">unit tests</a>. I post them as …</p><p>I'm very excited to announce that as of today, April 1st 2004, I've become the world's first micro-outsourced developer. I've hired great developers in Bangalore (GMT +4.5), Cameroon (GMT +1), Brazil (GMT -3), and Vanuatu (GMT -7). My job is to write the <a href="http://nunit.org/">unit tests</a>. I post them as binary assemblies to our <a href="https://www.groove.com//">Groove</a> workspace at any time of day or night, "injecting" them into a 24-hour implementation workday. After several low-profile expirements with Rent-A-Coder "open bids," I've determined that this "4/1" configuration provides the best balance of quality, reliability, and cost-effectiveness. I pay piece-rate, but my guys are averaging just over \<span class="math">\(4 an hour, with which they're delighted. Meanwhile, I'm averaging 1230 lines of clean code per day (at 30 lines of code per function point). At this rate, I am anticipating shipping my first application (a game for the Tablet PC) in time to compete for the [\\)</span>100,000 ISV prize](http://www.doesyourappthinkinink.com/), with out-of-pocket expenses totalling around \$8,200.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>No joy installing Whidbey Preview...2004-03-31T23:31:00-10:002004-03-31T23:31:00-10:00larrytag:knowing.net,2004-03-31:/posts/2004/03/no-joy-installing-whidbey-preview/<p>After downloading the gigantic Whidbey Preview (available at <a href="https://msdn.microsoft.com/en-us/">MSDN Subscriber Downloads</a>) and attempting to install it on my sacrificial machine, I reliably get a problem while installing .NET Framework 2.0: "RegSvcs.exe triggers "Memory at 0x00143cb0 tried to write to 0x00143cb0. The memory could not be 'written.'" This happens …</p><p>After downloading the gigantic Whidbey Preview (available at <a href="https://msdn.microsoft.com/en-us/">MSDN Subscriber Downloads</a>) and attempting to install it on my sacrificial machine, I reliably get a problem while installing .NET Framework 2.0: "RegSvcs.exe triggers "Memory at 0x00143cb0 tried to write to 0x00143cb0. The memory could not be 'written.'" This happens whether I use the main installer or try to install the framework from its subdirectory. YMMV, of course.</p>IronPython Doesnt Yet Use Lightweight Code Generation A Forthcoming Facility In The Whidbey CLR But A Hrefhttpweb2004-03-31T23:13:00-10:002004-03-31T23:13:00-10:00larrytag:knowing.net,2004-03-31:/posts/2004/03/ironpython-doesnt-yet-use-lightweight-code-generation-a-forthcoming-facility-in-the-whidbey-clr-but-a-hrefhttpweb/<p>IronPython doesn't (yet?) use lightweight code generation, a forthcoming facility in the Whidbey CLR, but Joel Pobar shows "Hello, World" using LCG.</p>Jim Hugunin Has Posted A Paper On IronPython2004-03-31T22:43:00-10:002004-03-31T22:43:00-10:00larrytag:knowing.net,2004-03-31:/posts/2004/03/jim-hugunin-has-posted-a-paper-on-ironpython/<p>Jim Hugunin has posted a paper on IronPython, a fast Python implementation for .NET. This has triggered <a href="Http://www.cookcomputing.com/blog/archives/000354.html">a cascade of posts</a>.</p>
<p>The money quote: "[A]s I carried out my experiments I found the CLR to be a surprisingly good target for dynamic languages...."</p>
<p>More: "High system performance is the …</p><p>Jim Hugunin has posted a paper on IronPython, a fast Python implementation for .NET. This has triggered <a href="Http://www.cookcomputing.com/blog/archives/000354.html">a cascade of posts</a>.</p>
<p>The money quote: "[A]s I carried out my experiments I found the CLR to be a surprisingly good target for dynamic languages...."</p>
<p>More: "High system performance is the end result of hundreds of small decisions rather than a single large one. Much of IronPython's performance comes from careful consideration of performance in each design choice...."</p>
<p>Essentially, instead of "just" getting the semantics of the language right, Hugunin strove to use native CLR facilities whenever appropriate and provided alternate "fast-paths" for common situations (such as for function calls with a fixed number of arguments) while providing for the more general solution with slower code.</p>
<p>While compiler writing <em>is</em> the rocket-science of computer programming (although game programming comes close...) Hugunin's tactics don't seem unreasonably burdensome.</p>Apple announce iTeach tutoring software2004-03-31T22:36:00-10:002004-03-31T22:36:00-10:00larrytag:knowing.net,2004-03-31:/posts/2004/03/apple-announce-iteach-tutoring-software/<p>No, not really. That's just April 1st shorthand for my point.</p>
<p>Peter <a href="http://www.kstati.com/tabula/archive/2004/04/01/1490.aspx%3fPending%3dtrue">suggests an interactive drawing tutor</a> as a great application for the TabletPC, a more dignified concept than my "Draw Draw Revolution" game. He suggests text and a voice-over, simple animation, some way of evaluating the learner's input, etc …</p><p>No, not really. That's just April 1st shorthand for my point.</p>
<p>Peter <a href="http://www.kstati.com/tabula/archive/2004/04/01/1490.aspx%3fPending%3dtrue">suggests an interactive drawing tutor</a> as a great application for the TabletPC, a more dignified concept than my "Draw Draw Revolution" game. He suggests text and a voice-over, simple animation, some way of evaluating the learner's input, etc...</p>
<p>I was struck by the thought that there's no commodity tutorial-building software. There's Authorware, but Macromedia doesn't even put that on the front page of their Website anymore and it costs \$3000. Meanwhile, we live in PowerPoint Nation. The last time I looked at Authorware (admittedly, probably 3 years ago) it seemed little more than PowerPoint <strong>with test-building tools</strong>. My adventures in educational software led to my conviction that evaluation is a very significant part of education (a pretty amazing conversion for someone who spent untold hours giving and attending professional conferences: when was the last time you took a test at a seminar?). Of course, one <em>can</em> build a tutorial in HTML or Flash or PowerPoint or C# or assembly language, but what I'm getting at is that <em>surely</em> there's a market for software dedicated to tutorial design.</p>
<p>And here's the thing: it has to be <strong>designed</strong> by great teachers and <strong>built</strong> by great programmers.</p>P.J. Plauger lauded in Dr. Dobb's2004-03-31T01:51:00-10:002004-03-31T01:51:00-10:00larrytag:knowing.net,2004-03-31:/posts/2004/03/pj-plauger-lauded-in-dr-dobbs/<p>P.J. Plauger was awarded Dr. Dobb's Excellence in Programming Award. He richly deserves it. There's his tremendous contribution to the C and C++ standardization projects, but I personally feel that his <em><a href="https://www.amazon.com/exec/obidos/tg/detail/-/0137213743/qid%3d1080761784/sr%3d8-1/ref%3dsr_8_xs_ap_i1_xgl14/102-1098949-5164931%3fv%3dglance%26s%3dbooks%26n%3d507846">Programming on Purpose</a></em> column for <em>Computer Language</em> was simply the best programming column ever written. It's the reason …</p><p>P.J. Plauger was awarded Dr. Dobb's Excellence in Programming Award. He richly deserves it. There's his tremendous contribution to the C and C++ standardization projects, but I personally feel that his <em><a href="https://www.amazon.com/exec/obidos/tg/detail/-/0137213743/qid%3d1080761784/sr%3d8-1/ref%3dsr_8_xs_ap_i1_xgl14/102-1098949-5164931%3fv%3dglance%26s%3dbooks%26n%3d507846">Programming on Purpose</a></em> column for <em>Computer Language</em> was simply the best programming column ever written. It's the reason that I fell in love with that magazine, which I went on to join and eventually edit.</p>
<p>So <em>Programming on Purpose</em> is responsible for much of my career. But here's how I stack up to Plauger: a couple of months ago, when I was in Hawaii for the ECMA C# and C++/CLI standards meetings, I mentioned at lunch that there was a chance that my code might have booked the flights of the attendees. Plauger nodded and mentioned another item that was in the news: "Our software just landed on Mars." Point, set, and match to Dr. Plauger.</p>Note to PR: Don't Send Word Docs2004-03-31T01:22:00-10:002004-03-31T01:22:00-10:00larrytag:knowing.net,2004-03-31:/posts/2004/03/note-to-pr-dont-send-word-docs/<p>I receive a lot of press releases via email. Here's a note to PR people: I'm probably not the only writer/editor in the world who doesn't casually open Word documents sent via email. I <em>know</em> that you write the press releases in Word and it makes them look prettier …</p><p>I receive a lot of press releases via email. Here's a note to PR people: I'm probably not the only writer/editor in the world who doesn't casually open Word documents sent via email. I <em>know</em> that you write the press releases in Word and it makes them look prettier than plain text, but if I don't open them, they're not doing you any good, are they?</p>A Pox Upon You, Object-Based Collection Classes!2004-03-31T01:13:00-10:002004-03-31T01:13:00-10:00larrytag:knowing.net,2004-03-31:/posts/2004/03/a-pox-upon-you-object-based-collection-classes/<p>Argh! I am writing an article for publication and need some eye-candy for the application. I was going to use my Amazon product-similarity graphing tool but I just realized that I use C# 2.0 generics throughout! The thought of bowdlerizing it to use object-based collections is ... just ... repugnant. But …</p><p>Argh! I am writing an article for publication and need some eye-candy for the application. I was going to use my Amazon product-similarity graphing tool but I just realized that I use C# 2.0 generics throughout! The thought of bowdlerizing it to use object-based collections is ... just ... repugnant. But I hate the thought of publishing something that requires people to be in a beta to see it running.</p>Action Comics #1 scanned and posted2004-03-31T01:08:00-10:002004-03-31T01:08:00-10:00larrytag:knowing.net,2004-03-31:/posts/2004/03/action-comics-1-scanned-and-posted/<blockquote>
<div>
<p><img alt="" height="160" src="https://craphound.com/images/actioncomicsno1.jpg" width="302"> Someone's posted the whole of June, 1938's Action Comics #1 (including the first funnybook appearance of Superman) to the web as a series of medium-resolution scans. Link (<em>Thanks, Eyes Spies and Lies!</em>)) <em>via</em> [Boing Boing]</p>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
</blockquote>
<div>
I've never been much of a comic book fan, but this is pretty darn great …</div><blockquote>
<div>
<p><img alt="" height="160" src="https://craphound.com/images/actioncomicsno1.jpg" width="302"> Someone's posted the whole of June, 1938's Action Comics #1 (including the first funnybook appearance of Superman) to the web as a series of medium-resolution scans. Link (<em>Thanks, Eyes Spies and Lies!</em>)) <em>via</em> [Boing Boing]</p>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
<div>
</div>
</blockquote>
<div>
I've never been much of a comic book fan, but this is pretty darn great. It's filled with grammatical errors, plot "developments" that take all of two panels to cover, cliffhangers... And I have to say that some of the art is pretty fantastic, too (like the "... Run faster than an express train ..." panel shown here).
</div>Embedded Software Development Conference2004-03-29T00:16:00-10:002004-03-29T00:16:00-10:00larrytag:knowing.net,2004-03-29:/posts/2004/03/embedded-software-development-conference/<p>BZ Media, the clever folk who publish <a href="https://sdtimes.com/">SD Times</a>, have just announced a new conference dedicated to embedded software development. Sayeth the release: "The Embedded Software Development Conference (ESDC) is the only independent, cross-platform conference completely focused on the educational needs of embedded, mobile and wireless developers. The event will …</p><p>BZ Media, the clever folk who publish <a href="https://sdtimes.com/">SD Times</a>, have just announced a new conference dedicated to embedded software development. Sayeth the release: "The Embedded Software Development Conference (ESDC) is the only independent, cross-platform conference completely focused on the educational needs of embedded, mobile and wireless developers. The event will include more than 40 individual conference sessions and full-day tutorials covering applications development using Java 2 Micro Edition, Windows CE, Embedded Linux, Palm OS, BREW, VxWorks and other high-level embedded operating systems."</p>
<p>Hey, they're looking for speakers! I wonder if I could convince them that the Tablet PC is an embedded device...</p>Thanks for the TIP!2004-03-28T22:48:00-10:002004-03-28T22:48:00-10:00larrytag:knowing.net,2004-03-28:/posts/2004/03/thanks-for-the-tip/<p>I uninstalled XPSP2, uninstalled the Lonestar alpha, reinstalled XPSP2 and my TIP came back. Amusingly, I found this by Googling a discussion board from a few months ago where the person asking the question was breaking NDA and a Microsoft representative was very politely, but very insistently, posting "This isn't …</p><p>I uninstalled XPSP2, uninstalled the Lonestar alpha, reinstalled XPSP2 and my TIP came back. Amusingly, I found this by Googling a discussion board from a few months ago where the person asking the question was breaking NDA and a Microsoft representative was very politely, but very insistently, posting "This isn't the appropriate forum for discussing this," while the problem was being discussed by others on the board.</p>
<p>Which raises the question: Do alpha / beta NDAs make sense anymore? Certainly there's a period when products / features must remain "stealthy" but with betas becoming very marketing-oriented and even "technology previews" such as the PDC bits becoming available, does commercial sotware really benefit from the NDA until product release?</p>Tablet XPSP2 -- Disappearing TIP?2004-03-27T23:27:00-10:002004-03-27T23:27:00-10:00larrytag:knowing.net,2004-03-27:/posts/2004/03/tablet-xpsp2-disappearing-tip/<p>Any other Tablet PC users lose access to the TIP after installing XPSP2? I've already filed a report with Microsoft. I don't even see the keyboard TIP during user login.</p>Computers Suck2004-03-27T09:06:00-10:002004-03-27T09:06:00-10:00larrytag:knowing.net,2004-03-27:/posts/2004/03/computers-suck/<p>Today, during my 692nd hour SCUBA diving, my life was jeopardized by a computer malfunction. I was trying out a new piece of equipment, an air-integrated diving computer, that replaces a "conventional" dive computer (used to track safety relating to "the bends") and two analog devices: the depth gauge and …</p><p>Today, during my 692nd hour SCUBA diving, my life was jeopardized by a computer malfunction. I was trying out a new piece of equipment, an air-integrated diving computer, that replaces a "conventional" dive computer (used to track safety relating to "the bends") and two analog devices: the depth gauge and the pressure gauge that tells you how much air is left in the tank. One minute I was enjoying the beautiful <a href="https://www.metridium.com/">metridiums</a> of Monterey Bay, the next I was looking at my computer and thinking "That's not a correct reading," and the next I was looking at that empty grayness that only a dead LCD can achieve. I no longer had any instruments for determining the only thing that really matters: how long you have to safely reach the surface.</p>
<p>Sure, I didn't need a computer to tell me that I was in about 45 of water, that I had at least 30 minutes of air left in the tank, and that getting to the surface would take about 10 minutes, the majority of which would be hanging 15 feet below the surface in an almost-certainly-unneeded precaution against the bends. So, while it's accurate to say my computer put my life in <em>jeopardy</em>, it didn't <em>endanger</em> me. I knew I wasn't in danger. And, because I ignored the fact that I knew all those good things, signaled my buddy that I'd had a malfunction (a signal that involves the middle finger), and called the dive, surfaced, and had a <em>hell</em> of a long surface swim back to the shore, I stayed out of danger (an amazing percentage of dive accidents happen because the first problem is ignored...).</p>
<p>Here's my point: computers suck. They're unreliable, expensive, difficult to use, incomprehensible when functioning, and utterly useless when they fail. I've <em>never</em> had a pressure gauge fail on me. I've <em>never</em> had a depth gauge fail on me. Such things happen with analog gauges, but I wager the rate of computer failures to analog failures is hundreds if not thousands to one. Every time someone talks about lack of innovation or "Where are computers going?" we should keep this in mind: computers are nothing, <em>nothing</em>, compared to what they should, and will, become.</p>
<p>We are marking notches into clay tablets and wondering if innovation in writing is dead. Virtually the <em>entire</em> history of computers lies before us: we exist in a footnote between Alan Turing and God-Knows-Who. Today's hardware is crap. Today's software is crap. Today's tools to build software are crap. Let's change that.</p>Draw Draw Revolution2004-03-27T08:08:00-10:002004-03-27T08:08:00-10:00larrytag:knowing.net,2004-03-27:/posts/2004/03/draw-draw-revolution/<p>Do I have to say anything more to explain my Tablet PC game idea?</p>
<p>For those who haven't been in an arcade for the past few years, "<a href="http://www.ddrfreak.com/">Dance Dance Revolution</a>" is one of <em>the</em> greatest games of all time. You have to move your feet in synchrony with directional arrows …</p><p>Do I have to say anything more to explain my Tablet PC game idea?</p>
<p>For those who haven't been in an arcade for the past few years, "<a href="http://www.ddrfreak.com/">Dance Dance Revolution</a>" is one of <em>the</em> greatest games of all time. You have to move your feet in synchrony with directional arrows on the screen. Simple to describe, doesn't look hard, is hard.</p>
<p>At the Game Developer's Conference, Sony was demoing what I'm sure they're not going to call "Flail Flail Revolution," in which you point a Webcam at yourself and must move your hands into the air in synchrony to screen sectors flashing on your computer.</p>
<p>So <em>my</em> idea is that you must match pen strokes flashed on your screen, building up a line drawing over time. It ain't art, but DDR ain't dancin' either.</p>Simon Phipps Repurposes Yahoo Groups as a blog2004-03-27T07:54:00-10:002004-03-27T07:54:00-10:00larrytag:knowing.net,2004-03-27:/posts/2004/03/simon-phipps-repurposes-yahoo-groups-as-a-blog/<p>Given Yahoo's infrastructure, this is very clever. <em>But</em> I don't think Yahoo Groups yet provides an RSS feed. <em>But</em> surely that's only a matter of time.</p>
<p>P.S. Phipps clarifies that he <em>didn't</em> call OS opponents Luddites or, if he did, he didn't mean it in the popular sense of …</p><p>Given Yahoo's infrastructure, this is very clever. <em>But</em> I don't think Yahoo Groups yet provides an RSS feed. <em>But</em> surely that's only a matter of time.</p>
<p>P.S. Phipps clarifies that he <em>didn't</em> call OS opponents Luddites or, if he did, he didn't mean it in the popular sense of "anti-technology zealot" but in a more refined way. I've asked if he has a link to his argument (I'm a big fan of argument by historical analogy. You can be wrong, of course, but history <em>does</em> place certain constraints on hyperbole.)</p>Equal opportunity FUD from Sun2004-03-26T07:56:00-10:002004-03-26T07:56:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/equal-opportunity-fud-from-sun/<p>Simon Phipps <a href="https://www.techworld.com/news/tech-innovation/live-linux-or-die-a-luddite-says-sun-3578612/">says</a> that those who oppose Open Source are Luddites. So is Simon saying that Jonathan Schwartz is a Luddite when he says that Sun must maintain control of the Java compatibility tests?</p>The sad state of Tablet PC gaming2004-03-26T07:43:00-10:002004-03-26T07:43:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/the-sad-state-of-tablet-pc-gaming/<blockquote>
<p>So there <em>are</em> games for the tablet. The problem is that the majority of them have something to do with words and writing. Granted, since ink is the big thing, it makes sense, but how many Scrabble and crossword clones can you have? Let's see something innovative.</p>
<p>For example, Toshiba's …</p></blockquote><blockquote>
<p>So there <em>are</em> games for the tablet. The problem is that the majority of them have something to do with words and writing. Granted, since ink is the big thing, it makes sense, but how many Scrabble and crossword clones can you have? Let's see something innovative.</p>
<p>For example, Toshiba's M200 has the built-in accelerometers, right? So why not a version of <a href="https://www.microsoft.com/en-us/windows" title="http://www.microsoft.com/Windows/plus/windowsxp/Games.htm">Microsoft Plus! Labyrinth</a> where you control the board by physically moving the tablet? How about strategy games that take advantage of pen and ink? Tablet users don't necessarily need something flashy that runs at 60 fps. Just a nice polished game that really makes use of tablet features. <em>via</em> [Tabula PC]</p>
</blockquote>
<p>I agree that a first-person shooter isn't the route to go. You want something real-time, but with pen strokes about the screen controlling the level. I bet the guys at Pop Cap could dream up something.</p>Laptops making tablets un-cool?2004-03-26T07:20:00-10:002004-03-26T07:20:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/laptops-making-tablets-un-cool/<blockquote>
<p><em>"...a couple of grad students at USC's business school who hate their tablets...it's gotten so laptop-friendly there, that people with tablets never use the inking feature...."</em> .... will the Tablet PC only succeed in a convertible form, sheepishly masquerading as a "laptop with benefits"?... <em>via</em> [Tabula PC]</p>
</blockquote>
<p>According to Microsoft's …</p><blockquote>
<p><em>"...a couple of grad students at USC's business school who hate their tablets...it's gotten so laptop-friendly there, that people with tablets never use the inking feature...."</em> .... will the Tablet PC only succeed in a convertible form, sheepishly masquerading as a "laptop with benefits"?... <em>via</em> [Tabula PC]</p>
</blockquote>
<p>According to Microsoft's Andrew Dixon, with whom I spoke on Tuesday, right now both slates and convertibles are selling equally well / poorly, but the slates are clearly going into vertical markets (medical, insurance) while the general market is going for the convertibles. As the general market outstrips the vertical early adopters, the majority of machines with Tablet technology will undoubtedly be convertibles. That's okay with me. My next Tablet will be a convertible but I bow to no one in my fanaticism for the technology.</p>
<p>There's <em>very</em> little compelling ink-based software today. Essentially, OneNote, <a href="https://www.mindjet.com/">MindManager</a> (which we just gave a Jolt Award to), and <a href="https://www.artrage.com/about-us/">ArtRage</a>. Much, much more is needed. Some is already in the pipeline (<a href="http://www.xthink.com/mathjournal.html">xThink MathJournal</a>, for instance, is no secret), some has hopefully been spurred closer to reality by the <a href="http://www.doesyourappthinkinink.com/">\$100K contest</a>, and much is waiting in the heads of entrepreneurial software developers watching the market develop. It only takes 2 programs to make a platform: one killer app and one killer game. Neither has shipped for the Tablet PC.</p>Oh Man Where Are My Editors When I Need Them I Just Sent An Email That Said That A Polite Conversation Was Markedly Gentil2004-03-26T05:27:00-10:002004-03-26T05:27:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/oh-man-where-are-my-editors-when-i-need-them-i-just-sent-an-email-that-said-that-a-polite-conversation-was-markedly-gentil/<p>Oh man, where are my editors when I need them? I just sent an email that said that a polite conversation was "markedly gentile." Bwahahahahahaha... I blame Mobile, Alabama. (I once pronounced the word "sublime" as "suh-bleem" and was teased by a friend who said "Why in the world would …</p><p>Oh man, where are my editors when I need them? I just sent an email that said that a polite conversation was "markedly gentile." Bwahahahahahaha... I blame Mobile, Alabama. (I once pronounced the word "sublime" as "suh-bleem" and was teased by a friend who said "Why in the world would you think it was pronounced that way?" It took me months to think of a common two-syllable word ending in -ime that is pronounced "-eem.")</p>Tims Chemistry Exam What I Find So Wonderful About This Is That Today I C2004-03-26T02:51:00-10:002004-03-26T02:51:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/tims-chemistry-exam-what-i-find-so-wonderful-about-this-is-that-today-i-c/<p>Tim's Chemistry Exam : What I find so wonderful about this is that today I couldn't do any better even though once upon a time I kicked ass in chemistry lectures (I sucked in chemistry labs because I was too impatient to get the weights / volumes exactly right).</p>Could You Make A Blimp From An Aerogel Created With Helium2004-03-26T02:32:00-10:002004-03-26T02:32:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/could-you-make-a-blimp-from-an-aerogel-created-with-helium/<p>Could you make a blimp from an aerogel created with helium?</p>Who's paying for Open Source FUD-Sowing?2004-03-26T02:09:00-10:002004-03-26T02:09:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/whos-paying-for-open-source-fud-sowing/<p>I just received a press release titled "Why Open Source Can't Meet Mass-Market Demands," from a group called the <a href="https://www.ipi.org/">Institute for Policy Innovation</a> which identifies itself as "a non-partisan, public-policy organization." (It's easy to determine that the IPI was founded by Dick Armey and is primarily a pro-free-trade group, I …</p><p>I just received a press release titled "Why Open Source Can't Meet Mass-Market Demands," from a group called the <a href="https://www.ipi.org/">Institute for Policy Innovation</a> which identifies itself as "a non-partisan, public-policy organization." (It's easy to determine that the IPI was founded by Dick Armey and is primarily a pro-free-trade group, I guess free trade can be argued to be non-partisan.) At first I was confused, because if you <em>really</em> believe in the free market, Open Source is a perfectly legitimate thing: people should be able to charge as much or as little for their work as they want. You have to make second- and third-order arguments to decry the economics of OS (perhaps OS implicitly drives down the perceived value of all programming, thus distorting the trade-offs associated with offshore programming, which in turn might suck the air out of high-value, entrepreneurial programming in the United States).</p>
<p>Then I realized that this was about government procurement: the IPI release is intended to introduce Fear, Uncertainty, and Doubt into state and federal bureaucrats. Clearly, someone paid for this: I assume either Microsoft or the Software Publishing Association. I sent an email to IPI asking who paid for the initiative. I'll let you know what they say (if anything).</p>
<p><strong>Correction: I misidentified the IPI as the "Institute for Policy <em>Information</em>" in an earlier post.</strong></p>64-Bit Windows XP Available For Download2004-03-26T00:09:00-10:002004-03-26T00:09:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/64-bit-windows-xp-available-for-download/<p>Did you know that if you have an 64-bit Athlon chip (or an Opteron server in your closet), you can download XP-64? It's a "customer preview program" but not a closed beta. You're going to want to do this in a dual-boot configuration with a 32-bit OS: although the Windows-on-Windows …</p><p>Did you know that if you have an 64-bit Athlon chip (or an Opteron server in your closet), you can download XP-64? It's a "customer preview program" but not a closed beta. You're going to want to do this in a dual-boot configuration with a 32-bit OS: although the Windows-on-Windows 64-32 emulation layer (WoW64) works in many cases, it doesn't work with .NET CLR's 1.0 or 1.1 or VS.NET 2003.</p>Do not install... and stop asking!2004-03-26T00:03:00-10:002004-03-26T00:03:00-10:00larrytag:knowing.net,2004-03-26:/posts/2004/03/do-not-install-and-stop-asking/<blockquote>
<p>On ActiveX control install prompts:</p>
<blockquote>
<p>there are a few things I love about the work we did here. You can now say "Do not install this control <em>and never ask me again</em>."</p>
</blockquote>
<p>Yes! Now I never need to see a prompt for "Install Gator (click here for more information about …</p></blockquote><blockquote>
<p>On ActiveX control install prompts:</p>
<blockquote>
<p>there are a few things I love about the work we did here. You can now say "Do not install this control <em>and never ask me again</em>."</p>
</blockquote>
<p>Yes! Now I never need to see a prompt for "Install Gator (click here for more information about this fantastic progra..." again. <em>via</em> [KC on Exchange and Outlook]</p>
</blockquote>
<p>All my machines already have popup blockers, firewalls as appropriate, and antivirus software. But this "never ask again" feature will make me install XPSP2 on all my machines immediately. (Oh, I installed it on one of my laptops last weekend -- went fine.)</p>Notes from the Game Developer's Conference2004-03-25T23:37:00-10:002004-03-25T23:37:00-10:00larrytag:knowing.net,2004-03-25:/posts/2004/03/notes-from-the-game-developers-conference/<p>The <a href="http://www.gdexpo.com/">Game Developer's Conference</a> is, without a question, the best programmer's tradeshow going. There's no other show that touches it in terms of technical depth -- introductory-level lectures at the GDC are what other shows would label advanced, and advanced-level lectures are the GDC are generally only comprehensible by excellent programmers …</p><p>The <a href="http://www.gdexpo.com/">Game Developer's Conference</a> is, without a question, the best programmer's tradeshow going. There's no other show that touches it in terms of technical depth -- introductory-level lectures at the GDC are what other shows would label advanced, and advanced-level lectures are the GDC are generally only comprehensible by excellent programmers already working in <em>that particular</em> area. I've heard much more pragmatic and correct things about one of the few areas where I know a thing or two (AI) than I did at the last AAAI meeting I attended!</p>
<p>Some sartorial observations: although a cut above most programming trade shows most attendees are still wearing t-shirts and jeans (but, like me, a <em>black</em> t-shirt and <em>clean</em> jeans) but there's definitely more hair color and piercing than you get at, say, the PDC. There's one fellow sporting a shaved head and a black duster a la Neo; perhaps a fan-boy, perhaps one of the coders of the Burly Brawl. There are a few guys in full metrosexual bloom: I really enjoyed the contrast between one guy in a Euro-cut suit standing beside a more-than-usually shabby guy with a comb-over. I glanced at their badges -- the metrosexual had a show pass, the shlub was a speaker.</p>
<p>I was the founding Editor of <a href="http://www.gamasutra.com/topic/game-developer">Game Developer Magazine</a> 11 years ago and we bought the GDC tradeshow almost immediately. It's a bittersweet memory for me, because the magazine was actually the idea of an intern, Sander Antoniades, who deserved better rewards: we couldn't give him a full-time editorial position right away, so he switched divisions, and then left the company.</p>IT professionals are relatively unhappy2004-03-23T22:40:00-10:002004-03-23T22:40:00-10:00larrytag:knowing.net,2004-03-23:/posts/2004/03/it-professionals-are-relatively-unhappy/<p>According to City and Guilds, only 14% of British IT professionals are "very happy" in their jobs. The most satisfied are "Care Assistants" at 40% and the least are "[Real] estate agents" at 4%. <em>via</em> Good Morning Silicon Valley</p>TabletPC Expanding To New Form Factors2004-03-23T10:13:00-10:002004-03-23T10:13:00-10:00larrytag:knowing.net,2004-03-23:/posts/2004/03/tabletpc-expanding-to-new-form-factors/<p>I don't usually stick my nose into hardware issues, but one of the themes of the talk I had with Microsoft's Tablet PC gang today was that the Tablet PC technology (high-resolution digitizing screen, ink, etc.) is moving into some <em>really</em> interesting form factors -- some smaller than traditional notebooks, some …</p><p>I don't usually stick my nose into hardware issues, but one of the themes of the talk I had with Microsoft's Tablet PC gang today was that the Tablet PC technology (high-resolution digitizing screen, ink, etc.) is moving into some <em>really</em> interesting form factors -- some smaller than traditional notebooks, some in "fixed mount" locations. I have this dream of something a lot like an architect's table that's all display.</p>
<p>This goes to one of my themes of the Tablet PC: it's an <em>exciting</em> form factor, it makes you think about new types of "things" to do with computers. (We got a little silly with this: we were shown a Tablet with built-in accelerometers and we were talking about rebooting by shaking it like an Etch-A-Sketch.)</p>More time to program for TabletPC $100K Contest2004-03-23T10:00:00-10:002004-03-23T10:00:00-10:00larrytag:knowing.net,2004-03-23:/posts/2004/03/more-time-to-program-for-tabletpc-100k-contest/<p>In a meeting with Microsoft, Cory Linton clarified that the big \$100k contest is actually until September, not July, allowing for the possibility of some "from scratch" entries.</p>
<p><em>Blogged on a Tablet PC</em></p>Microsoft's EU Fine Is 1 Weeks Revenue2004-03-22T22:04:00-10:002004-03-22T22:04:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/microsofts-eu-fine-is-1-weeks-revenue/<p><a href="https://www.forbes.com/2004/03/23/cx_da_0323topnews.html">Forbes discusses</a> deterring the rich: In Finland, a man who made 7 million euros per year was given a traffic ticket for 170,000 euros. The expected 487,000,000 euro fine to be levied on Microsoft, while a whopping sum to you and me, works out to the same …</p><p><a href="https://www.forbes.com/2004/03/23/cx_da_0323topnews.html">Forbes discusses</a> deterring the rich: In Finland, a man who made 7 million euros per year was given a traffic ticket for 170,000 euros. The expected 487,000,000 euro fine to be levied on Microsoft, while a whopping sum to you and me, works out to the same ratio: 1 week's pay.</p>
<p>That reminds me of a story: the first time I met Bill Gates was when Microsoft was just about to launch their first C++ compiler. More importantly, they were locked in a very dramatic battle with Borland for the hearts and minds of developers (a battle every bit as heartfelt as the current Windows/Linux battle). I knew that the next day (literally) Microsoft was going to announce their C++ compiler, and it was going to look terrible beside Borland's just-that-day unveiled 2nd or 3rd generation compiler, which had a Windows IDE.</p>
<p>Microsoft had won the Jolt for Windows or Visual Basic 1.0 or whatever, and I was going up to his suite to give the award. I had it all worked out: I'd hand him the award, blah blah blah, and then I'd detail exactly what Borland was doing right and Microsoft was doing wrong in the C++ IDE arena, and <em>then</em> I'd ask him for \<span class="math">\(1,000,000. I'd done the math and worked out that this would be like someone giving a thoughtful critique of my magazine (*Computer Language*) and our hated rivals (*Dr. Dobb's Journal*) and then asking me for \\)</span>1.25. Proportionally, it seemed very reasonable.</p>
<p>Anyway, I get into the elevator and who's there but Gates himself? So I say "Jolt Award, blah blah blah," and hand it to him. Okay, this is the thing: I think the Jolt Award is the best-designed award on Earth -- a can of Jolt Cola embedded in a block of lucite. He looks down at it and I have <em>never</em> seen such a look of utter and unremitting disdain. It was like I'd just handed him a two-pound lump of steaming dog crap. He hands the award, without looking, to someone in his entourage, glances up at the elevator lights, and finally looks at me.</p>
<p>"Yeah. Great." He says, leaving absolutely no room for "Which is all well and good for Visual Basic but Bill, I gotta' tell ya, Borland's kicking your ass in the C++ compiler arena and here's why..."</p>
<p>The elevator ride ends in silence. We get to his floor and the door opens to an immaculately dressed PR handler. "Hi, Bill! Oh and I see you've met Larry!" She chirps happily.</p>
<p>"Yeah," Says Gates, brushing by me. "He gave me an award."</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>I Dont Get Screen Ive Never Used It Can Someone Explain Why2004-03-22T11:02:00-10:002004-03-22T11:02:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/i-dont-get-screen-ive-never-used-it-can-someone-explain-why/<p>I don't get <a href="http://www.kuro5hin.org/story/2004/3/9/16838/14935">screen</a>. I've never used it. Can someone explain why it's cool?</p>Switching Domains2004-03-22T07:10:00-10:002004-03-22T07:10:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/switching-domains/<p>Since "Thinking in C#" is now officially dead, I'm phasing out thinkingin.net, please resubscribe to my blog at http://www.knowing.net/rss.xml</p>The REST Is Salient2004-03-22T07:06:00-10:002004-03-22T07:06:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/the-rest-is-salient/<p>The REST is Salient</p>Michael Flanakin Reacted Tonbsp Of My SDTimes Article Onnbspthenb2004-03-22T07:00:00-10:002004-03-22T07:00:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/michael-flanakin-reacted-tonbsp-of-my-sdtimes-article-onnbspthenb/<p>Michael Flanakin reacted to of my SDTimes article on the (relative) failure of dynamic languages within .NET with an interesting proposal: Perhaps every namespace could have a default "utility" class that hides OO complexity. There's even a tiny bit of a precedent in that .NET attributes named <strong>SomeAttribute</strong> are exposed …</p><p>Michael Flanakin reacted to of my SDTimes article on the (relative) failure of dynamic languages within .NET with an interesting proposal: Perhaps every namespace could have a default "utility" class that hides OO complexity. There's even a tiny bit of a precedent in that .NET attributes named <strong>SomeAttribute</strong> are exposed as <strong>Some</strong> (with the <strong>...Attribute</strong> part of the name hidden away). Similarly, static methods within <strong>MyNamespaceUtil</strong> would be accessible within <strong>MyNamespace</strong> without requiring a type-reference.</p>
<p>Hmmm.... As a guy who likes not only object-orientation but strong-typing it's hard for me to assess the attractiveness of this suggestion to the power-users / sysadmins / hackers (in the good sense!) who find the BCL too much of a burden. My thoroughly subjective reaction is that I don't like naming conventions with semantic meanings (and, yes, that means I've never really liked "getX" and "setX"). Thoughts?</p>In A Comment On A Previous Post Alex Peake Warns That In Searching2004-03-22T05:24:00-10:002004-03-22T05:24:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/in-a-comment-on-a-previous-post-alex-peake-warns-that-in-searching/<p>In a comment on a previous post, Alex Peake warns that in searching for what Jaron Lanier calls "biomimetic" programming metaphors, "we must be careful not to fall into the trap of early flight pioneers - that of trying to emulate birds (too closely) in order to build a flying machine …</p><p>In a comment on a previous post, Alex Peake warns that in searching for what Jaron Lanier calls "biomimetic" programming metaphors, "we must be careful not to fall into the trap of early flight pioneers - that of trying to emulate birds (too closely) in order to build a flying machine. Flapping wings was NOT the algorithm. "</p>
<p>Point taken. The solution hardly lies in creating a two-stranded, base-4 genotype that's transcribed into an intermediate form, which in turn create self-assembling components from a small number of basic building blocks, etc....</p>
<p>What I'm much more interested in is finding powerful abstractions, and whether they disguise the fact that one is programming or not is, to me, irrelevant. Look at the spreadsheet as the great example: whether you label a spreadsheet as a programming language or not, it is one, an immensely powerful one that is better for many, many purposes than the text-based ones that are mostly associated with the word "programming language."</p>
<p>A programming tool / language for evolutionary computation would have built-in constructs for parallelizing runs of populations, monitoring the increase in fitness over time, monitoring the entropy of the genome, choosing among selection strategies, and would have tools for facilitating the encoding strategy (the key and decidedly non-trivial task).</p>
<p>Alex advocates sticking to a particular domain, and that may be wise. But on the other hand, surely most digital "tools for building tools" would do well to keep the door open to complete programmatic control?</p>Structures and algorithms references2004-03-22T03:42:00-10:002004-03-22T03:42:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/structures-and-algorithms-references-2/<blockquote>
<p>Quick links for a dictionary of algorithms and data structures and a book on exact string matching algorithms. (via HotLinks) More bedtime reading ... <em>via </em>[<a class="ngquotelink" href="http://blog.monstuff.com/archives/000159.html">Curiosity is bliss</a>]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> Definitely a data-structure theme going on here lately...</p>Virtual PC 2004 No Help Solving 64-Bit OS Woes2004-03-22T02:49:00-10:002004-03-22T02:49:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/virtual-pc-2004-no-help-solving-64-bit-os-woes/<p>In my continuing quest to install XP-64 on my Athlon laptop, I just tried Virtual PC 2004. I get the message "Attempting to load an X86-64 operating system, however this CPU is not compatible with X86-64 mode." which is misleading at best. There aren't any obvious settings I can change …</p><p>In my continuing quest to install XP-64 on my Athlon laptop, I just tried Virtual PC 2004. I get the message "Attempting to load an X86-64 operating system, however this CPU is not compatible with X86-64 mode." which is misleading at best. There aren't any obvious settings I can change. Anyone know if there's some obscure command-line switch I'm supposed to use?</p>
<p>Meanwhile, I know that my old VMWare Workstation version doesn't support 64-bit OSs, so that's out, too.</p>Programming Stinks2004-03-22T02:11:00-10:002004-03-22T02:11:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/programming-stinks/<blockquote>
<p>As much as I love writing code, I realized long ago that it's really the act of bending my computer to my will that I really love. Programming's just the only way to really do that. After a few decades, you'd have thought we'd have come up with something better …</p></blockquote><blockquote>
<p>As much as I love writing code, I realized long ago that it's really the act of bending my computer to my will that I really love. Programming's just the only way to really do that. After a few decades, you'd have thought we'd have come up with something better. Our industry's pioneers agree that programming is holding us back, but don't really know what we'll use to replace it. Ideas?<em> via</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<div>
For all that Jaron Lanier was the huckster for the egregious over-hyping of "virtual reality" in the early 90s, he's on to something by saying that the extreme specificity needed for software components to interact is a bottleneck. In nature, there are some species (rats, humans, weeds) that are very adaptable -- we prefer conditions like X, but we can adapt to things that aren't too radically different from X. There are other species (corals, rainforest flowers) that are very highly tuned to specific conditions, but can't adapt.
</div>
<div>
</div>
<div>
Right now, our *only* choice is software that's like the latter. I can conceive of software that's more like the former: if you have an automated suite of tests, it's conceivable to create software that explores a solution space broader than what a programmer could. For instance, we now have ample spam/ham concordances. A genetic algorithm generating regular expressions might very well be a fruitful avenue for exploration. The programmer writing the genetic program wouldn't be responsible for writing and evolving the spam-detecting program, the programmer would be writing the program that writes the programs, one of which solves the problem. (Does that make sense?)
</div>
<div>
</div>
<div>
There is no "programming language" to help the human programmer write the genetic program ("Beginners All-purpose Genetic Engineering Language"?). Whether there are *enough* problems that are amenable to computer search and optimization and whether there are appropriate evolutionary abstractions that can be composed in the average programmer's mind, I dunno'.
</div>$100K TabletPC Programming Contest!2004-03-22T01:45:00-10:002004-03-22T01:45:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/100k-tabletpc-programming-contest/<blockquote>
<p>Are you part of an ISV that's been thinking about creating a new product for the Tablet PC or enabling ink in your Tablet PC application? Then check Incremental Blogger]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> Holy Inkstain! Okay, I entered my Outlook plug-in that gives you ink email without using Word in …</p><blockquote>
<p>Are you part of an ISV that's been thinking about creating a new product for the Tablet PC or enabling ink in your Tablet PC application? Then check Incremental Blogger]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> Holy Inkstain! Okay, I entered my Outlook plug-in that gives you ink email without using Word in the previous \<span class="math">\(15K powertoy contest, but \\)</span>100K for an ink-enabled application? That's worth serious time. Dang -- the contest is too short to win with a "Hey, kids, let's put on a show," application (too bad, I've got two viable apps that just need slicker implementation than I can afford to develop on my own). Anyone need an experienced ink programmer to put them over the top in winning the prize?</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Speaking Of MSDN Heres An Article On A Hrefhttpmsdnmicrosoftcomvisualcusingunderstandingperfdefaultaspxpullli2004-03-22T01:18:00-10:002004-03-22T01:18:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/speaking-of-msdn-heres-an-article-on-a-hrefhttpmsdnmicrosoftcomvisualcusingunderstandingperfdefaultaspxpullli/<p>Speaking of MSDN, here's an article on Profile-Guided Optimization, which they claim often delivers a 20% performance boost for the price of a couple instrumented runs.</p>Scott Mitchells MSDN Series On Data Structures Is Quite Good A Hrefhttpmsdnmicrosoftcomvcsharpdefaultaspxpulllib2004-03-22T01:13:00-10:002004-03-22T01:13:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/scott-mitchells-msdn-series-on-data-structures-is-quite-good-a-hrefhttpmsdnmicrosoftcomvcsharpdefaultaspxpulllib/<p>Scott Mitchell's MSDN series on data structures is quite good. His latest, on graphs, is a must-read for those who lament the end of "design the data-structures first."</p>MapPoint WS Free with MSDN2004-03-22T00:25:00-10:002004-03-22T00:25:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/mappoint-ws-free-with-msdn/<blockquote>
<p>[MapPoint Web Service Special Offer<br>
]{style="FONT-WEIGHT: bold; FONT-SIZE: 8pt; COLOR: navy; FONT-FAMILY: Verdana"}MSDN</p>
</blockquote>Buggy Hardware Mystery2004-03-22T00:01:00-10:002004-03-22T00:01:00-10:00larrytag:knowing.net,2004-03-22:/posts/2004/03/buggy-hardware-mystery/<p>I have a brand-new emachines M6805 laptop, perfectly stock, onto which I am trying to install Windows XP-64. I have spoken with colleagues who have the exact same model, exact same bios revision, for whom the install of the exact same build goes perfectly. For me, it freezes solid within …</p><p>I have a brand-new emachines M6805 laptop, perfectly stock, onto which I am trying to install Windows XP-64. I have spoken with colleagues who have the exact same model, exact same bios revision, for whom the install of the exact same build goes perfectly. For me, it freezes solid within a minute of GUI-mode setup (after the character-mode setup has copied the files to the hard-drive). Interestingly, I get identical behavior if I try to install any 64-bit Windows (Server 2K3, Longhorn 64): I suspect that the setup programs share common code at that point.</p>
<p>My <em>guess</em> is that this is a real bug, in the sense of the original moth-in-the-circuit erroneous hardware response. My <em>guess</em> is that some the code does some IRQ-level thing to get an offset, doesn't do a sanity check on the return, and BAM! A hard freeze that requires me to disconnect power. But it's been more than a decade since I've seen such a hardware bug (I had memory parity errors that nuked my system... maybe the first 386 I bought? Maybe even a 286!). I don't even know if I can get an RMA on the machine because all I can say is "The only reason I have this machine is to work with operating systems you don't support. Please give me another piece of hardware to try to do that."</p>
<p>Anyone know anything about what goes on in the early stages of Windows installation?</p>Could we change the line "jack-booted thugs" to "stylish go-getters"?2004-03-21T04:31:00-10:002004-03-21T04:31:00-10:00larrytag:knowing.net,2004-03-21:/posts/2004/03/could-we-change-the-line-jack-booted-thugs-to-stylish-go-getters/<blockquote>
<p>This has to be one of the more interesting "help wanted" ads to surface of late -- Entertainment Liaison for the US Department of Homeland Security. Up to \$136K:</p>
<div>
<p>The Entertainment Liaison Office supports the Office of Public Affairs by influencing how the Department of Homeland Security is portrayed in mass …</p></div></blockquote><blockquote>
<p>This has to be one of the more interesting "help wanted" ads to surface of late -- Entertainment Liaison for the US Department of Homeland Security. Up to \$136K:</p>
<div>
<p>The Entertainment Liaison Office supports the Office of Public Affairs by influencing how the Department of Homeland Security is portrayed in mass entertainment media. It helps to ensure accurate portrayal of the department's mission, policies, and activities, while proactively working to help the American public better identify DHS functions. <em>via</em> [Boing Boing]</p>
</div>
</blockquote>
<div>
"And a solid 83% of electronics checked in carry-on luggage comes through un-harmed. A broken laptop screen is a small price to pay for secure skies!" (I mean, is it just *my* stuff they break? On my last flight, they managed to break a dive flashlight that's rated to withstand 20 freakin' atmospheres of pressure.)
</div>Nerdy Bay Area dream-jobs2004-03-20T05:37:00-10:002004-03-20T05:37:00-10:00larrytag:knowing.net,2004-03-20:/posts/2004/03/nerdy-bay-area-dream-jobs/<blockquote>
<p>Claris sez, "A collection of cool geeky companies located in the greater San Francisco Bay Area, from anime/manga publishers to videogame companies to special effects shops. Best of all? Direct links to the job opening pages of each site, whenever I can find 'em. Might as well work somewhere …</p></blockquote><blockquote>
<p>Claris sez, "A collection of cool geeky companies located in the greater San Francisco Bay Area, from anime/manga publishers to videogame companies to special effects shops. Best of all? Direct links to the job opening pages of each site, whenever I can find 'em. Might as well work somewhere cool, right?" Link (<em>Thanks, Claris!</em>) <em>via</em> [Boing Boing]</p>
</blockquote>
<p>I've had friends who worked at Lucas and ILM. Word is sending your resume in is next to useless -- try to get to know someone. Join Orkut and work your connections!</p>Screen Capture in C#2004-03-18T09:28:00-10:002004-03-18T09:28:00-10:00larrytag:knowing.net,2004-03-18:/posts/2004/03/screen-capture-in-c/<p>Code by Perry Lee. Useful.</p>I just found Rory his Christmas present!2004-03-18T09:24:00-10:002004-03-18T09:24:00-10:00larrytag:knowing.net,2004-03-18:/posts/2004/03/i-just-found-rory-his-christmas-present/<p>This is a little odd thing for people who don't want to touch toilet seats. <em>via</em> [Boing Boing]</p>Design The Data Structures First Is A Practice That Has Dramatically Faded Over The Past Decade Today When Structural Design2004-03-18T01:15:00-10:002004-03-18T01:15:00-10:00larrytag:knowing.net,2004-03-18:/posts/2004/03/design-the-data-structures-first-is-a-practice-that-has-dramatically-faded-over-the-past-decade-today-when-structural-design/<p>"Design the data structures first" is a practice that has dramatically faded over the past decade. Today, when structural design is done at all, it is done in an object-oriented manner, which has different goals than traditional data-structure design. In C++ code, you'll still see complex data structures, but most …</p><p>"Design the data structures first" is a practice that has dramatically faded over the past decade. Today, when structural design is done at all, it is done in an object-oriented manner, which has different goals than traditional data-structure design. In C++ code, you'll still see complex data structures, but most modern code over-relies on standard collection classes. This despite the fact that data structures are the often the key to achieving break-through performance advantages.</p>Dan Bricklin Posts About The Programmers At Work Reunion That H2004-03-18T01:04:00-10:002004-03-18T01:04:00-10:00larrytag:knowing.net,2004-03-18:/posts/2004/03/dan-bricklin-posts-about-the-programmers-at-work-reunion-that-h/<p>Dan Bricklin posts about the "Programmers at Work Reunion" that happened at SD. "Programmers at Work" is a classic book from the mid-80s that interviewed several of the most influential PC programmers of the time, from Bill Gates to Gary Kildall. Many of the profilees were on a panel the …</p><p>Dan Bricklin posts about the "Programmers at Work Reunion" that happened at SD. "Programmers at Work" is a classic book from the mid-80s that interviewed several of the most influential PC programmers of the time, from Bill Gates to Gary Kildall. Many of the profilees were on a panel the other night at SD. What do great programmers of the 80s say is important? Stuff like "design the data structures first" and The really great programs I've written have all been ones that I have thought about for a huge amount of time before I ever wrote them" and here's the money quote: ></p>
<p>"You've got to be willing to read other people's code, and then write your own, then have other people review your code. You've got to want to be in this incredible feedback loop where you get the world-class people to tell you what you're doing wrong..."</p>
<p>::: {align="left"}
:::</p>
<p>::: {style="MARGIN-LEFT: 24px; TEXT-ALIGN: right"}
<em>- Bill Gates, pages 76, 77, 80, 83</em>
:::</p>
<p>></p>Bray resists assimilation: "Hmmm... maybe resistance isn't irrelevant," says Borg2004-03-18T00:03:00-10:002004-03-18T00:03:00-10:00larrytag:knowing.net,2004-03-18:/posts/2004/03/bray-resists-assimilation-hmmm-maybe-resistance-isnt-irrelevant-says-borg/<p>Of course, it's big news that Tim Bray has taken a job with a major software company. But it's <em>bigger</em> news because he chose to join Sun and not Microsoft (I'm not saying Bray chose between competing offers, just that Microsoft has hired a lot of luminaries recently). I wonder …</p><p>Of course, it's big news that Tim Bray has taken a job with a major software company. But it's <em>bigger</em> news because he chose to join Sun and not Microsoft (I'm not saying Bray chose between competing offers, just that Microsoft has hired a lot of luminaries recently). I wonder to what extent <a href="https://www.tbray.org/ongoing/When/200x/2004/03/15/SunnyBoy">the "Java Rocks" portion of his explanation</a> is hyperbole: his first two arguments (.NET never attempted to hit an "80/20" point and Microsoft has a history of focusing on the desktop) are very weak and only his third (Microsoft has an agenda) is inarguable.</p>
<p>Anyway, in "<a href="https://www.startrek.com/database_article/best-of-both-worlds-the-part-i">The Best of Both Worlds, Pt. 1</a>" the Borg said "Resistance is irrelevant," <em>not</em> "Resistance is futile." "Resistance is irrelevant," is <em>vastly</em> better and I trace the decline of the Star Trek franchise to the adoption of the blustery, cliched "resistance is futile," line. I've been wanting to get that off my chest for awhile.</p>C SMTP SendMail Code2004-03-17T02:20:00-10:002004-03-17T02:20:00-10:00larrytag:knowing.net,2004-03-17:/posts/2004/03/c-smtp-sendmail-code/<p><a href="http://blog.axosoft.com/">C# SMTP SendMail Code</a>.</p>My Very Educated Mother Just Showed Us New Planet Sedna2004-03-16T04:59:00-10:002004-03-16T04:59:00-10:00larrytag:knowing.net,2004-03-16:/posts/2004/03/my-very-educated-mother-just-showed-us-new-planet-sedna/<p>It's not a very good mnemonic but it's not every day we get a new planet.</p>In An Anachronistic Bit Of Dotcommery A Bay Area Americas Cup Syndicate Is A HrefhttpwwwmarinijcomStories014132342004-03-15T23:00:00-10:002004-03-15T23:00:00-10:00larrytag:knowing.net,2004-03-15:/posts/2004/03/in-an-anachronistic-bit-of-dotcommery-a-bay-area-americas-cup-syndicate-is-a-hrefhttpwwwmarinijcomstories01413234/<p>In an anachronistic bit of dot-commery, a Bay Area America's Cup syndicate is auctioning it's sponsorship rights on Ebay. Starting bid is \$30,000,000. No word if PayPal will be used for payment.</p>Its Wellknown That America Remains The Leader In Captured Alien Spacecraft Technology Due To Ournbsprelatively Lax Highwa2004-03-15T22:24:00-10:002004-03-15T22:24:00-10:00larrytag:knowing.net,2004-03-15:/posts/2004/03/its-wellknown-that-america-remains-the-leader-in-captured-alien-spacecraft-technology-due-to-ournbsprelatively-lax-highwa/<p>It's well-known that America remains the leader in captured alien spacecraft technology due to our relatively lax highway signage. In England, by contrast, such things as secret nuclear bunkers are well-marked.</p>A nation of polarized programmers2004-03-12T07:25:00-10:002004-03-12T07:25:00-10:00larrytag:knowing.net,2004-03-12:/posts/2004/03/a-nation-of-polarized-programmers/<p>Inspired by Jon Udell's link to a New York Times article on network maps of polarized political books, I wrote a similar program in C# and mapped the polarization between readers of "The C# Programming Language" by Hejlsberg et al. and "The Java Programming Language" by Arnold et al. It's …</p><p>Inspired by Jon Udell's link to a New York Times article on network maps of polarized political books, I wrote a similar program in C# and mapped the polarization between readers of "The C# Programming Language" by Hejlsberg et al. and "The Java Programming Language" by Arnold et al. It's really fun to watch when the network is just a couple of hundred nodes.</p>
<p>Unfortunately.... even with 2000 nodes, the books aren't connected! Amazing. I don't know what to do... maybe work outward from suspected "connectors" like "Design Patterns," and "Design Patterns in C#" and "Design Patterns in Java." Anyway, my SpringEmbedderPanel doesn't zoom out, so it's impossible to generate a readable universe of connected books in a single image. Here are two images, one from early in the run with the complete network in play(with "C# Programming Language" on the left and "Java Programming Language" on the right), and another showing a portion of the display when the network is only around 200 books.</p>
<p>It's a fun program; I can't release it yet because it's all in C# 2.0 (with typesafe generics for which I'm very grateful!).</p>TypeSafe Generics are, too, good2004-03-12T01:39:00-10:002004-03-12T01:39:00-10:00larrytag:knowing.net,2004-03-12:/posts/2004/03/typesafe-generics-are-too-good/<blockquote>
<p>Bruce has an interesting discussion entitled "Generics Aren't". It's primarily about the new support for generics in Java, but it has a lot of "generic generic" material as well. <em>via</em> [Eric Gunnerson's C# Compendium]</p>
</blockquote>
<p>The argument applies to C# generics, but dismisses type-safe data structures as only of concern to …</p><blockquote>
<p>Bruce has an interesting discussion entitled "Generics Aren't". It's primarily about the new support for generics in Java, but it has a lot of "generic generic" material as well. <em>via</em> [Eric Gunnerson's C# Compendium]</p>
</blockquote>
<p>The argument applies to C# generics, but dismisses type-safe data structures as only of concern to collections classes, but that's a narrow view. Using an interface loses type information (<em>pace</em> loose-typing discussion!). Consider the following, in which there's a desire not to allow Cats, Dogs, and Horses to interbreed :</p>
<div class="highlight"><pre><span></span><code>interface BreedingAnimal
{
BreedingAnimal Breed(BreedingAnimal spouse);
}
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="nt">class</span><span class="w"> </span><span class="nt">Dog</span><span class="o">:</span><span class="w"> </span><span class="nt">BreedingAnimal</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="err">public</span><span class="w"> </span><span class="err">BreedingAnimal</span><span class="w"> </span><span class="err">Breed(BreedingAnimal</span><span class="w"> </span><span class="err">spouse)</span>
<span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="err">return</span><span class="w"> </span><span class="err">new</span><span class="w"> </span><span class="err">Dog()</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="err">}</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="nt">class</span><span class="w"> </span><span class="nt">Cat</span><span class="o">:</span><span class="w"> </span><span class="nt">BreedingAnimal</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="err">public</span><span class="w"> </span><span class="err">BreedingAnimal</span><span class="w"> </span><span class="err">Breed(BreedingAnimal</span><span class="w"> </span><span class="err">spouse)</span>
<span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="err">return</span><span class="w"> </span><span class="err">new</span><span class="w"> </span><span class="err">Cat()</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="err">}</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="nt">class</span><span class="w"> </span><span class="nt">Horse</span><span class="o">:</span><span class="w"> </span><span class="nt">BreedingAnimal</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="err">public</span><span class="w"> </span><span class="err">BreedingAnimal</span><span class="w"> </span><span class="err">Breed(BreedingAnimal</span><span class="w"> </span><span class="err">spouse)</span>
<span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="err">return</span><span class="w"> </span><span class="err">new</span><span class="w"> </span><span class="err">Horse()</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="err">}</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="nt">class</span><span class="w"> </span><span class="nt">TypeSafeBreeder</span><span class="o"><</span><span class="nt">T</span><span class="o">></span><span class="w"> </span><span class="nt">where</span><span class="w"> </span><span class="nt">T</span><span class="p">:</span><span class="nd">BreedingAnimal</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="err">public</span><span class="w"> </span><span class="err">T</span><span class="w"> </span><span class="err">Reproduce(T</span><span class="w"> </span><span class="err">aParent,</span><span class="w"> </span><span class="err">T</span><span class="w"> </span><span class="err">anotherParent)</span>
<span class="w"> </span><span class="err">{</span>
<span class="w"> </span><span class="err">return</span><span class="w"> </span><span class="err">(T)</span><span class="w"> </span><span class="err">aParent.Breed(anotherParent)</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="err">}</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="n">TypeSafeGenericsAreUseful</span>
{
<span class="n">public</span> <span class="n">static</span> <span class="n">void</span> <span class="n">Main</span>()
{
<span class="n">Dog</span> <span class="n">lassie</span> = <span class="nb">new</span> <span class="n">Dog</span>();
<span class="n">Dog</span> <span class="n">rintintin</span> = <span class="nb">new</span> <span class="n">Dog</span>();
<span class="n">Cat</span> <span class="n">garfield</span> = <span class="nb">new</span> <span class="n">Cat</span>();
<span class="n">TypeSafeBreeder</span><span class="s"><Dog></span> <span class="n">kennel</span> = <span class="nb">new</span> <span class="n">TypeSafeBreeder</span><span class="s"><Dog></span>();
<span class="n">Dog</span> <span class="n">puppy</span> = <span class="n">kennel</span>.<span class="n">Reproduce</span>(<span class="n">lassie</span>, <span class="n">rintintin</span>); //<span class="n">Isn't</span> <span class="n">that</span> <span class="n">nice</span>?
// <span class="n">Dog</span> <span class="nb">x</span> = <span class="n">kennel</span>.<span class="n">Reproduce</span>(<span class="n">lassie</span>, <span class="n">garfield</span>); //<span class="n">Won't</span> <span class="n">compile</span>. <span class="n">Isn't</span> <span class="n">that</span> <span class="n">nice</span>?
</code></pre></div>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="nx">Horse</span><span class="w"> </span><span class="nx">flicker</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="nx">Horse</span><span class="p">)</span><span class="w"> </span><span class="nx">garfield</span><span class="p">.</span><span class="nx">Breed</span><span class="p">(</span><span class="nx">lassie</span><span class="p">);</span><span class="w"> </span><span class="c1">//<- Compiles clean, runtime error. Darn you, type unsafe code!</span>
</code></pre></div>
<div class="highlight"><pre><span></span><code> }
}
</code></pre></div>
<p>\<</p>
<p>p dir=ltr> (exercise for the reader: as an interface BreedingAnimal.Breed is necessarily public, allowing access to the Breed() method without using a TypeSafeBreeder\<T>. Change the design so that such a threat would only apply to classes in the assembly where these classes are defined.) </p>Beautiful Post By James Roberts2004-03-11T10:01:00-10:002004-03-11T10:01:00-10:00larrytag:knowing.net,2004-03-11:/posts/2004/03/beautiful-post-by-james-roberts/<p>Beautiful post by James Robertson on the Whidbey slip: short release cycles improve quality. This has absolutely become the consensus over the past half-decade.</p>
<p>However, the .NET infrastructure <em>significantly</em> affects this particular release: the CLR itself, the compilers, and the major applications (SQL Server, Visual Studio) boot-strapped with those require …</p><p>Beautiful post by James Robertson on the Whidbey slip: short release cycles improve quality. This has absolutely become the consensus over the past half-decade.</p>
<p>However, the .NET infrastructure <em>significantly</em> affects this particular release: the CLR itself, the compilers, and the major applications (SQL Server, Visual Studio) boot-strapped with those require either a single synchronized release or a series of transitions spread out over months or years (like a long-running transaction in the database world) that would inevitably attract screams of "why is this so complex?" </p>Retraction2004-03-11T09:05:00-10:002004-03-11T09:05:00-10:00larrytag:knowing.net,2004-03-11:/posts/2004/03/retraction/<p>Scoble has a good post on the Whidbey Slip [Scobleizer: Microsoft Geek Blogger]</p>
<p>In it, he says "The idea that Whidbey is being slipped just because it needs to tie up with Yukon isn't wholly correct...." and I have to admit to blogging just that conclusion without having actually, you …</p><p>Scoble has a good post on the Whidbey Slip [Scobleizer: Microsoft Geek Blogger]</p>
<p>In it, he says "The idea that Whidbey is being slipped just because it needs to tie up with Yukon isn't wholly correct...." and I have to admit to blogging just that conclusion without having actually, you know, asked Microsoft for their side of the story. I <em>suspect</em> it to be the case, but I haven't done enough research to <em>conclude</em> it to be true.</p>
<p>Back in September, I thought that Yukon was being slipped because of Whidbey, and now I've blamed Yukon. The truth is, these products are so complex that it's possible that <em>either</em> is the source of showstoppers. But what I <em>do</em> know is that Microsoft values <em>shipping</em> software and that polishing minor features in production-quality components while another team struggles to hit their quality thresholds will not sit well with competitive Redmond spirits.</p>Are libraries the new languages?2004-03-11T08:31:00-10:002004-03-11T08:31:00-10:00larrytag:knowing.net,2004-03-11:/posts/2004/03/are-libraries-the-new-languages/<blockquote>
<p>What is the next step in the evolutionary tree of programming languages...the new languages I have heard of seemed to fall in the existing classifications: it integrates such feature from language A, such other from language B and so on...At the same time, object oriented languages can be …</p></blockquote><blockquote>
<p>What is the next step in the evolutionary tree of programming languages...the new languages I have heard of seemed to fall in the existing classifications: it integrates such feature from language A, such other from language B and so on...At the same time, object oriented languages can be enriched a lot just by creating new libraries. <em>via</em> [<a class="ngquotelink" href="http://blog.monstuff.com/archives/000152.html">Curiosity is bliss</a>]</p>
</blockquote>
<p>No, libraries aren't themselves the future of programming innovation. Yes, the time spent mastering a modern library like the Base Class Library or the Java SDK is much, much larger than the time spent mastering the syntax of C# or Java. Yes, the time spent choosing methods is probably larger than the time spent choosing operations on the results of those methods. BUT...</p>
<p>Most programmers haven't <em>really</em> immersed themselves in non-imperative programming. Different languages facilitate different <em>thoughts</em>, different approaches to problem solving. You don't understand how a programming language solves problems by reading the grammar, any more than you understand Spain by the first chapter of a Spanish tutorial. I'm not going to say that declarative programming is <em>always</em> better than imperative programming, but there are certain problems that are really hard to even understand in an imperative language that just "fall out" when you think about them in Prolog. The reverse is also true.</p>
<p>Recently, I read <a href="http://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/spigot.pdf">this interesting article</a> on generating an unending stream of digits for pi. Five lines of Haskell code. It took me about 50 lines in C#. Now that I get it I could compress the C# code significantly, but if I could "think in" Haskell, a five-line block of code is probably something that could be "grokked" in a single bite. So "generating digits of pi" is something that can be thought much easier in Haskell than in C#. Similarly, thinking about hardware is easier in C than in Visual Basic. Thinking in Web pages is easier in PHP than in Pascal. Etc.</p>
<p>Back in the 80s, I worked in Prolog quite a bit, including Borland's Turbo Prolog dialect. At that time, I could switch between Prolog thoughts and C thoughts very fluidly and did so on a problem-by-problem basis, just as someone might switch between French for romantic thoughts and English for engineering ones (isn't that what they say English is good for?). It's like being twice as smart -- you really bring to bear more of your brain's potential. It's a terrible shame that the world of multi-language programming died away.</p>
<p>.NET provides the possibility for a rebirth of that type of programming. Not only is language interoperability easier than it's ever been, you only have to learn one library! It's really a fantastic opportunity that, sadly, hasn't taken off as quickly as could be hoped.</p>
<p>There <em>is</em> a subtlety to the "class libraries are the new language" argument that I've ignored -- the design of a class library may be such an embodiment of a certain programming approach that it discourages alternate programming approaches. There've been a couple comments saying exactly that about the BCL, but I've asked and haven't been able to get anything concrete from anyone credible, even if I've promised not to reveal names. (If you want to make the case but don't want Microsoft to know who's complaining, you can email me from the homepage at <a href="https://www.buydomains.com/lander/thinkingin.net?domain=thinkingin.net&utm_source=thinkingin.net&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect">http://www.ThinkingIn.NET/</a> and I'll sing it loud and long.)</p>Does Tufte Do Any Online Training Or Have A CD Asked Bro In My Comments Or Maybe It Was My Brother Steve I Do2004-03-11T07:02:00-10:002004-03-11T07:02:00-10:00larrytag:knowing.net,2004-03-11:/posts/2004/03/does-tufte-do-any-online-training-or-have-a-cd-asked-bro-in-my-comments-or-maybe-it-was-my-brother-steve-i-do/<p>Does Tufte do any online training or have a CD? Asked "bro" in my comments (or maybe it was my brother Steve...)</p>
<p>I don't think so and having attended a seminar of his, I can guess why. Tufte treasures "density of information" in representation. One thing he passes around at …</p><p>Does Tufte do any online training or have a CD? Asked "bro" in my comments (or maybe it was my brother Steve...)</p>
<p>I don't think so and having attended a seminar of his, I can guess why. Tufte treasures "density of information" in representation. One thing he passes around at his seminars is what looks like an X-Ray transparency but is, in fact, an image of the universe from some astronomical survey. The resolution on it is microscopic -- I don't remember the numbers, but it's the finest film humanity can make -- and he extolls the wonder of holding the universe in your hand and goes through and comes up with whatever it is -- 10 megabits per square inch, say. Then he says, "And now, I'd like to show you the least dense information display imaginable" -- and he projects a VGA PowerPoint image on the wall. It's a big laugh, but then he goes through the numbers again and it comes out to something pathetic, like a bit every 4 square inches. (And, of course, he's very critical of the PowerPoint "cognitive style.") But a major theme in his class is his disdain for current display technologies and the wastefulness of most user interface design.</p>Mike Schinkel Wants Microsoft To Create A Steppingst2004-03-11T04:04:00-10:002004-03-11T04:04:00-10:00larrytag:knowing.net,2004-03-11:/posts/2004/03/mike-schinkel-wants-microsoft-to-create-a-steppingst/<p>Mike Schinkel wants Microsoft to create a stepping-stone language for .NET -- VBScript.NET.</p>
<p>A couple of thoughts:</p>
<p>There needs to be a language for .NET that presents the user a simplified object and typing model. Mike lays out the case very nicely.</p>
<p>Microsoft doesn't have to be the one to …</p><p>Mike Schinkel wants Microsoft to create a stepping-stone language for .NET -- VBScript.NET.</p>
<p>A couple of thoughts:</p>
<p>There needs to be a language for .NET that presents the user a simplified object and typing model. Mike lays out the case very nicely.</p>
<p>Microsoft doesn't have to be the one to implement it. A great idea followed by "Microsoft, are you listening?" frustrates me. If you want to be a rock-and-roll star, grab yourself an electric guitar... And, yes, that means the options are becoming an advanced programmer yourself or starting your own company and hiring people. (I'd love to get offshore bids on that -- "Here's my grammar. Here's The CLI Annotated Standard. How much will a compiler cost me? Uh huh. And will you sign a fixed bid contract for that?" Heh. ) I know that sucks for people like Mike who are journeymen programmers (("journeyperson"? Yeah, that's probably what the style manual says...) but the payoffs are potentially a lot better than "Microsoft took that idea from me!"</p>
<p>In my opinion, Microsoft isn't likely to bite at Mike's idea. They've got Monad (or, rather, they'll <em>have</em> Monad in the Longhorn timeframe). I spoke with Monad Architect Jeffrey Snover last week. I personally think Monad <em>could</em> be a <em>huge</em> hit. It's too soon to tell whether it will succeed in the marketplace, but I think Monad is a very significant advance in thinking about scripting languages. It combines the advantages (pipes and filters, scriptability, dynamic) of UNIX shells like ksh and bsh with the advances of .NET (objects not text, the Base Class Library, access to stuff like WMI and the Registry using directory-like metaphors).</p>
<p>PDC attendees didn't get the initial Monad bits. Hmm... Actually, Googling for Monad with site:microsoft.com is amazingly unproductive. Are there any Monad blogs...?</p>Murder Most MP3. Plus, Fun With Context-Sensitive Web Ads.2004-03-11T01:59:00-10:002004-03-11T01:59:00-10:00larrytag:knowing.net,2004-03-11:/posts/2004/03/murder-most-mp3-plus-fun-with-context-sensitive-web-ads/<p>I am reminded of the South Park where Cartman tries to kill Stan with a wiffle bat.</p>
<p><em>Blogged on a Tablet PC</em></p>My Latest SD Times Column Contains My Impressions Of A Standards Meet2004-03-10T23:38:00-10:002004-03-10T23:38:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/my-latest-sd-times-column-contains-my-impressions-of-a-standards-meet/<p>My latest SD Times column contains my impressions of a standards meeting (based on my participation in the ECMA C# and C++/CLI meetings last month).</p>Standard Issue2004-03-10T23:37:00-10:002004-03-10T23:37:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/standard-issue/<p>Standard Issue</p>New DARPA Grand Challenge live action website2004-03-10T23:34:00-10:002004-03-10T23:34:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/new-darpa-grand-challenge-live-action-website/<blockquote>
<p>Just launched: a website promising live virtual coverage of this weekend's Grand Challenge race, in which robotic vehicles will race accross the California desert. <em>via</em> [Boing Boing Blog]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> My guess is that this will be the biggest letdown since the last episode of <em>Seinfeld</em>, but on the …</p><blockquote>
<p>Just launched: a website promising live virtual coverage of this weekend's Grand Challenge race, in which robotic vehicles will race accross the California desert. <em>via</em> [Boing Boing Blog]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> My guess is that this will be the biggest letdown since the last episode of <em>Seinfeld</em>, but on the off chance that something interesting happens (like an autonomous truck getting up to 50MPH or, better still, going on an unstoppable rampage)...</p>You Like Me! You Really Like Me!2004-03-10T23:26:00-10:002004-03-10T23:26:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/you-like-me-you-really-like-me/<p>Thanks, Robert and Sam! I'm now in Orkut! But Scoble humiliates me further. If there's one thing more humiliating than begging for an invite, it's begging for an invite and <em>having to clarify who you are</em>.</p>
<p>Actually, this is evidence that Scoble lives in a future not yet distributed. I …</p><p>Thanks, Robert and Sam! I'm now in Orkut! But Scoble humiliates me further. If there's one thing more humiliating than begging for an invite, it's begging for an invite and <em>having to clarify who you are</em>.</p>
<p>Actually, this is evidence that Scoble lives in a future not yet distributed. I live dangerously close to a world where "If it ain't on the first Google results page, it doesn't exist." Scoble, who reads something like 1,000 RSS feeds, is entering a world where "If it ain't one click from the RSS feed, it doesn't exist." If that world becomes common (and it's plausible), there's a wealth of software opportunities -- not having to do with searching large numbers of RSS feeds (a challenge, but last year's war) but with contextualizing individual posts.</p>OK, I'm groveling for an Orkut invite2004-03-10T07:27:00-10:002004-03-10T07:27:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/ok-im-groveling-for-an-orkut-invite/<p>Okay, I'll admit that it's obvious that I'm not a "connector" but surely there's at least 1 reader willing to admit knowing me.</p>
<p><em>Blogged on a Tablet PC</em></p>Yukon and Whidbey officially delayed2004-03-10T02:31:00-10:002004-03-10T02:31:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/yukon-and-whidbey-officially-delayed/<blockquote>
<p>Yukon and Whidbey have slipped to mid-2005, Microsoft has confirmed. <em>via</em> [Microsoft Watch from Mary Jo Foley]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> Ooh, that hurts. This is a big stumble on Microsoft's part. One wonders if they are actively rethinking the linkage of tools and database products... Back in September, it looked …</p><blockquote>
<p>Yukon and Whidbey have slipped to mid-2005, Microsoft has confirmed. <em>via</em> [Microsoft Watch from Mary Jo Foley]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> Ooh, that hurts. This is a big stumble on Microsoft's part. One wonders if they are actively rethinking the linkage of tools and database products... Back in September, it looked like the tools were holding back the database people. <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">Now</a>, it looks like the database is holding back the tools.</p>Print houses from CAD drawings using an adobe-extruding robot2004-03-10T02:24:00-10:002004-03-10T02:24:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/print-houses-from-cad-drawings-using-an-adobe-extruding-robot/<blockquote>
<div>
<p>A USC roboticist has built a robot for "printing" houses that can extrude cement or adobe and shape it using trowel-manipulators to a CAD-represented spec....The key to the technology is a computer-guided nozzle that deposits a line of wet concrete, like toothpaste being squeezed onto a table.... <em>via</em> [Boing …</p></div></blockquote><blockquote>
<div>
<p>A USC roboticist has built a robot for "printing" houses that can extrude cement or adobe and shape it using trowel-manipulators to a CAD-represented spec....The key to the technology is a computer-guided nozzle that deposits a line of wet concrete, like toothpaste being squeezed onto a table.... <em>via</em> [Boing Boing Blog]</p>
</div>
<div>
</div>
</blockquote>
<div>
Excellent. I can finally build myself a Klein bottle house (or would it be impossible to heat?). But isn't a pure concrete (no rebar) house kind of brittle? And if you do the pour slow enough so as not to require forms, do you actually get a *wall* or just a *stack*? In short, does this thing produce houses anywhere near California code?
</div>Tufte's Sparklines sparks discussion on ways to improve visual communications2004-03-10T01:43:00-10:002004-03-10T01:43:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/tuftes-sparklines-sparks-discussion-on-ways-to-improve-visual-communications/<blockquote>
<p><a href="https://www.edwardtufte.com/tufte/" title="http://www.edwardtufte.com/tufte/">Edward Tufte</a> is one of the leading thinkers in how to visually present information. His latest stuff, on Sparklines, is showing up on lots of the feeds I'm reading tonight. <em>vi</em>a [Scobleizer: Microsoft Geek Blogger]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> A "sparkline" is a very compact graph that you inline with …</p><blockquote>
<p><a href="https://www.edwardtufte.com/tufte/" title="http://www.edwardtufte.com/tufte/">Edward Tufte</a> is one of the leading thinkers in how to visually present information. His latest stuff, on Sparklines, is showing up on lots of the feeds I'm reading tonight. <em>vi</em>a [Scobleizer: Microsoft Geek Blogger]</p>
</blockquote>
<p>\<</p>
<p>p dir=ltr> A "sparkline" is a very compact graph that you inline with text. I once attended a 2-day course by Tufte. It was great. The guy just makes you want to go out and design representations of information.</p>using it2004-03-10T01:05:00-10:002004-03-10T01:05:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/using-it/<p>Okay, now I'll have to write a 10-page article with it and see if my hand cramps...</p>
<p><em>Blogged on a Tablet PC</em></p>Cross Pen Arrives!2004-03-10T01:00:00-10:002004-03-10T01:00:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/cross-pen-arrives/<p>My precious...</p>
<p><em>Blogged on a Tablet PC</em></p>Dragons Over Middle-Earth in Flight Simulator?2004-03-10T00:28:00-10:002004-03-10T00:28:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/dragons-over-middle-earth-in-flight-simulator/<blockquote>
<p><a href="http://stronglytyped.com/2004/03/0094.html" title="http://stronglytyped.com/2004/03/0094.html">Over on Richard Caetano's blog</a> I see the Flight Simulator team has an SDK coming out. <em>via</em> [Scobleizer: Microsoft Geek Blogger]</p>
</blockquote>
<p>I'm not going to do it, but I bet you could make a cool add-on.</p>Fawcette says programming has 40% greater unemployment than average2004-03-10T00:24:00-10:002004-03-10T00:24:00-10:00larrytag:knowing.net,2004-03-10:/posts/2004/03/fawcette-says-programming-has-40-greater-unemployment-than-average/<p>In a response to a NYT column on outsourcing, Jim Fawcette <a href="https://visualstudiomagazine.com/Home.aspx">says</a> " Unemployment in programming is 40 percent above the national average, despite the fact that the number of people in that profession has declined rapidly for four years, and salaries are down 15 percent." Nasty numbers, if true (and …</p><p>In a response to a NYT column on outsourcing, Jim Fawcette <a href="https://visualstudiomagazine.com/Home.aspx">says</a> " Unemployment in programming is 40 percent above the national average, despite the fact that the number of people in that profession has declined rapidly for four years, and salaries are down 15 percent." Nasty numbers, if true (and they seem believable to me).</p>
<p>I keep adding more and more to an offshoring rant that I'm writing, but it keeps getting longer. Why? For one thing, everyone's a free-market capitalist until their job goes overseas. So there's a <strong>fundamental dissonance</strong> between sets of beliefs that many programmers share: the belief that <strong>free trade maximizes total wealth</strong> and the belief that <strong>programmers in the U.S. ought to be able to make a living</strong>. I also have to contend with the fact that <em>I'm</em> a "nearshore" resource -- I work out of my house -- but believe that I deliver value to my customers despite the challenges of communication and distance.</p>
<p>Argh... I wanted this to be a brief post, but the subject just sucks me in. The March 8 InfoWorld has an excellent set of columns and articles on offshoring (as a matter of fact, the issue is a prime example of exploiting the advantages of the print medium -- I could give you a whole bunch of links, but it flows so much better on paper). Anyway, here's an observation: Schwartz' column quotes "work with companies that are CMM Level 5," while Dickerson's column says "Any successful project that I've worked on shared two qualities: a high degree of direct interaction between the development team and the end-users, and a high degree of agility in the team's methodology." There's an important point that's a little too subtle for the general business press: <strong>CMM Level 5 stuff is <em>extremely</em> formal, but there's an emerging consensus that non-formal "agile" approaches are much more productive</strong>.</p>
<p><a href="https://visualstudiomagazine.com/Home.aspx"></a> </p>Java as Baby Step2004-03-09T23:51:00-10:002004-03-09T23:51:00-10:00larrytag:knowing.net,2004-03-09:/posts/2004/03/java-as-baby-step/<blockquote>
<p>James Robertson thinks that Java is an interruption in the forward progress of software development....<strong>It is nice to see people returning to serious language research again</strong>. Efforts like the <a href="http://www.dreamsongs.com/Feyerabend/Feyerabend.html" title="http://www.dreamsongs.com/Feyerabend/Feyerabend.html">Feyerabend Project</a> and more practically focused offshoots like OOPSLA’s Onward! track and the Post-Java Workshops (as well as increasing …</p></blockquote><blockquote>
<p>James Robertson thinks that Java is an interruption in the forward progress of software development....<strong>It is nice to see people returning to serious language research again</strong>. Efforts like the <a href="http://www.dreamsongs.com/Feyerabend/Feyerabend.html" title="http://www.dreamsongs.com/Feyerabend/Feyerabend.html">Feyerabend Project</a> and more practically focused offshoots like OOPSLA’s Onward! track and the Post-Java Workshops (as well as increasing grass-roots interest in languages like Ruby, Haskell, Squeak, Oz, and even an ongoing Lisp revival) give me hope that we’ll be ready to take a larger step soon. <em>via</em> [Glenn Vanderburg: Blog] (<strong>emphasis by Larry</strong>)</p>
</blockquote>
<div>
Amen, Brother! The time is ripe! My take is that the most interesting research is on Rotor, but if you want to say no, that's your right.
</div>U.S. Government Purchases World's Largest RAM Disk2004-03-09T23:48:00-10:002004-03-09T23:48:00-10:00larrytag:knowing.net,2004-03-09:/posts/2004/03/us-government-purchases-worlds-largest-ram-disk/<p>JOEL JOHNSON -- The government has purchased a completely solid-state 2.5TB (terabyte) drive array from Texas Memory Systems... </p>
<p>In related news, President Bush received a digital camera for his birthday.</p>Putting the Fun Back In Programming2004-03-09T22:36:00-10:002004-03-09T22:36:00-10:00larrytag:knowing.net,2004-03-09:/posts/2004/03/putting-the-fun-back-in-programming/<blockquote>
<p>I know that I'm no longer untainted because I work in the big house, but <a href="http://www.milbertus.com/archives/2004/03/003100.php" title="http://www.milbertus.com/archives/2004/03/003100.php">I just don't get this</a>. Do developers really want to build the same thing over and over, project to project, app to app or do they want to spend their time building cool, new stuff …</p></blockquote><blockquote>
<p>I know that I'm no longer untainted because I work in the big house, but <a href="http://www.milbertus.com/archives/2004/03/003100.php" title="http://www.milbertus.com/archives/2004/03/003100.php">I just don't get this</a>. Do developers really want to build the same thing over and over, project to project, app to app or do they want to spend their time building cool, new stuff? .... <em>via</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> I almost didn't post this, because it seems to me blindingly obvious that programming is in its infancy. There's <strong>so much more possible</strong> that it defies categorization, let alone justifies wasting time defending the need for progress.</p>Unit of measurement elected head of standards board2004-03-09T22:32:00-10:002004-03-09T22:32:00-10:00larrytag:knowing.net,2004-03-09:/posts/2004/03/unit-of-measurement-elected-head-of-standards-board/<blockquote>
<p>Sometimes I forget that the world is also a place of delightful whimsy. (Via <a href="https://enthusiasm.cozy.org/" title="http://enthusiasm.cozy.org/">Ben Hyde</a>) <em>via</em> [Exploration Through Example]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> Words can't express my delight. I used to count the smoots every day as I rode the Harvard Bridge to get to <a href="https://www.community-boating.org/">Community Boating</a>.</p>Enabling SSL On Your Server For Free2004-03-09T22:28:00-10:002004-03-09T22:28:00-10:00larrytag:knowing.net,2004-03-09:/posts/2004/03/enabling-ssl-on-your-server-for-free/<blockquote>
<p>I have never really understood the machinations that you have to go through to enable SSL, but Scot Gellock has posted a script to simplify part of it, i.e. getting the certificate. And he does it with freely available tools, which is always a nice bonus. <em>via</em> [Marquee de …</p></blockquote><blockquote>
<p>I have never really understood the machinations that you have to go through to enable SSL, but Scot Gellock has posted a script to simplify part of it, i.e. getting the certificate. And he does it with freely available tools, which is always a nice bonus. <em>via</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> This is nice, but no magic bullet. You won't be a trusted certifying agency by people browsing your site and they'll get a certificate error. Training people to ignore certificate errors is a bad thing.</p>Blog Ecosystems: Java vs .NET2004-03-09T22:13:00-10:002004-03-09T22:13:00-10:00larrytag:knowing.net,2004-03-09:/posts/2004/03/blog-ecosystems-java-vs-net/<blockquote>
<p>I read a lot of Java related blogs and a lot of MS related blogs, but very few of the Java blogs are by Sun folks.. ..If I'm looking for thought leadership from the community, in the Java community, I'm looking towards the non Sun bloggers -- these are the folks …</p></blockquote><blockquote>
<p>I read a lot of Java related blogs and a lot of MS related blogs, but very few of the Java blogs are by Sun folks.. ..If I'm looking for thought leadership from the community, in the Java community, I'm looking towards the non Sun bloggers -- these are the folks doing AOP, Groovy, SGen, Prevalence, WebWork, etc. This shows the rich ecosystem that has grown up around Java. If I look at the .NET community, I pretty much look for the MS bloggers. There are some leaders outside of MS, but pretty much the thought leadership resides with folks inside the "big house". From where I sit, this is an accurate characterization of the .NET and Java ecosystems. <em>Via</em> [Ted Leung on the air]</p>
</blockquote>
<p>I think this has more to do with Microsoft's sheer size. Microsoft has, what?, twice as many developers as Sun has employees. And Microsoft is vastly more aligned than Sun, a company which is, after all, a hardware company. And, frankly, Microsoft getting on the Cluetrain and abandoning strict "message control" obviously struck a chord within the company.</p>
<p>\<</p>
<p>p dir="ltr"> Having said all that, there's no doubt that Java's community is more organic and embracing of external thought leaders.</p>Why hasn't Tivo taken off2004-03-07T00:23:00-10:002004-03-07T00:23:00-10:00larrytag:knowing.net,2004-03-07:/posts/2004/03/why-hasnt-tivo-taken-off/<blockquote>
<p>Mark Canter asks "<a href="http://blogs.it/0100198/2004/03/06.html%23a2351" title="http://blogs.it/0100198/2004/03/06.html#a2351">why hasn't Tivo taken off</a>?"</p>
<p>It hasn't taken off because the acquisition and implementation cost are too high for most people. Look at the rats nest of wires behind most AV systems and you'll see just what I mean.</p>
<p>Also, most people are scared of technology. Seriously …</p></blockquote><blockquote>
<p>Mark Canter asks "<a href="http://blogs.it/0100198/2004/03/06.html%23a2351" title="http://blogs.it/0100198/2004/03/06.html#a2351">why hasn't Tivo taken off</a>?"</p>
<p>It hasn't taken off because the acquisition and implementation cost are too high for most people. Look at the rats nest of wires behind most AV systems and you'll see just what I mean.</p>
<p>Also, most people are scared of technology. Seriously. You really gotta get on planes and talk to average users to really understand this one. <em>via</em> [Scobleizer: Microsoft Geek Blogger]</p>
</blockquote>
<p>The first point's right on. The second point ("scared of technology") is only correct as a subset of the first. People aren't scared of the technology in a high-definition plasma screen TV are they? Because (they think) they'll plug it in and get the experience. I don't have a Tivo because (a) I'd have to run a second cable under my house, fish it through my walls to my set-top box, and rewire the A/V routing. And (b) the cost is something like \$400, once you add the service, which I take it is mandatory. For what? A digital VCR. </p>You can lead a programmer to .NET, but you can't make them code2004-03-07T00:14:00-10:002004-03-07T00:14:00-10:00larrytag:knowing.net,2004-03-07:/posts/2004/03/you-can-lead-a-programmer-to-net-but-you-cant-make-them-code/<blockquote>
<p>Jason Haley asks: <a href="http://www.drdobbs.com/windows/" title="http://dotnetjunkies.com/WebLog/jhaley/archive/2004/03/06/8573.aspx">What do you do with people who are still putting off learning .NET</a>?</p>
<p>From my standpoint, you keep improving .NET until they start getting the message that .NET is +the+ platform of the future.</p>
<div>
<p><em>via</em> [Scobleizer: Microsoft Geek Blogger]</p>
</div>
</blockquote>
<div>
But what constitutes "improvement" in a programming platform …</div><blockquote>
<p>Jason Haley asks: <a href="http://www.drdobbs.com/windows/" title="http://dotnetjunkies.com/WebLog/jhaley/archive/2004/03/06/8573.aspx">What do you do with people who are still putting off learning .NET</a>?</p>
<p>From my standpoint, you keep improving .NET until they start getting the message that .NET is +the+ platform of the future.</p>
<div>
<p><em>via</em> [Scobleizer: Microsoft Geek Blogger]</p>
</div>
</blockquote>
<div>
But what constitutes "improvement" in a programming platform turns out to defy common wisdom. Look at the most successful languages in the last 25 years: Java, C++, Visual Basic, dBase, Turbo Pascal, Basic, and C. There are two obvious tracks: ease of use (Basic, dBase, VB) and power (C, C++). But Turbo Pascal and Java balance ease of use and power. And while most will grant C/C++ the crown on the "power" axis, "ease of use" clearly fails to capture elements of the success of Basic, dBase, and VB: if it's ease of use, why didn't Smalltalk achieve mass success? If Turbo Pascal, why not Modula-2? If "powerful programming constructs" why not Oz?
</div>
<div>
</div>
<div>
One of the "common wisdom" sayings is that programming language syntax is no longer as important as it once was, because the behavior of programs are now governed much more by the abstractions embodied in the standard library (in .NET, the Base Class Library). This is true, but programming passion attaches to syntax. Nonsense like "Python is twice as productive as C\# or Java" is taken at face value.
</div>
<div>
</div>
<div>
Improving .NET is not (just) a matter of increasing the power of and introducing more abstractions into the BCL. It's true that making it clear that managed environments like .NET and the JVM are neither fads nor safety wheels for "real programmers" is important, but equally, the ramp between power user and programmer must be repaired.
</div>CAPTCHAS Defeated By Distributed Yanking2004-03-06T23:33:00-10:002004-03-06T23:33:00-10:00larrytag:knowing.net,2004-03-06:/posts/2004/03/captchas-defeated-by-distributed-yanking/<blockquote>
<p>Man's (and woman's) ability to solve problems. <em>via</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>The problem: CAPTCHAs (those visual problems used to defeat registration 'bots). The CACM reports that defeat requires advancing the state-of-the-art of Artificial Intelligence.</p>
<p>\<</p>
<p>p dir="ltr"> The solution: "Solve this CAPTCHA for us and we'll show …</p><blockquote>
<p>Man's (and woman's) ability to solve problems. <em>via</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>The problem: CAPTCHAs (those visual problems used to defeat registration 'bots). The CACM reports that defeat requires advancing the state-of-the-art of Artificial Intelligence.</p>
<p>\<</p>
<p>p dir="ltr"> The solution: "Solve this CAPTCHA for us and we'll show you some porn."</p>I just got kicked by a horse2004-03-06T04:00:00-10:002004-03-06T04:00:00-10:00larrytag:knowing.net,2004-03-06:/posts/2004/03/i-just-got-kicked-by-a-horse/<p>It hurts a lot.</p>Hobbyist programmers matter: A Lot2004-03-03T23:19:00-10:002004-03-03T23:19:00-10:00larrytag:knowing.net,2004-03-03:/posts/2004/03/hobbyist-programmers-matter-a-lot/<p><a href="https://www.neopoleon.com/blog/should-the-hobbyist-programmer-matter-to-microsoft/">Rory sez</a> Microsoft shouldn't cater to hobbyist programmers. Scoble disagrees. I'm really ticked off because I just wrote a column on this, so I can't post that for four weeks, but here are some points...</p>
<p>Hobbyist programmers matter a lot. According to Microsoft, there are 7,000,000 hobbyist programmers …</p><p><a href="https://www.neopoleon.com/blog/should-the-hobbyist-programmer-matter-to-microsoft/">Rory sez</a> Microsoft shouldn't cater to hobbyist programmers. Scoble disagrees. I'm really ticked off because I just wrote a column on this, so I can't post that for four weeks, but here are some points...</p>
<p>Hobbyist programmers matter a lot. According to Microsoft, there are 7,000,000 hobbyist programmers in America. Not "professionals who occasionally contribute to an OS project on the weekend," but people whose sole programming is hobbyist. That's more hobbyist programmers than mountain bikers, or snowboarders, or SCUBA divers. Even if they had no relevance to the rest of the software development profession, that's too big a market not to serve.</p>
<p>But they do have relevance to the marketplace, because tomorrow's programming professional is a hobbyist today. The hobbyist programming zeitgeist is at least as significant as what is taught in undergrad CS -- the minority of professional programmers have CS degrees. So it behooves those who wish to advance the profession to expose hobbyists to techniques and platforms that are both fun and advanced, instead of letting them languish in the squalor of imperative code.</p>
<p>Further, the hobbyist market should matter to Microsoft simply as a matter of strategy. Part of being a hobbyist is becoming a vocal and enthusiastic member of a community. It doesn't take a genius to realize that hobbyists today are being drawn by free-as-in-beer tools into a community that has "anti-Microsoft" (or, should I say, "M\$") as one of its touchstones. A generation of teenage programmers who are reflexively anti-Redmond is a very bad thing for Microsoft's 2012 recruiting efforts. </p>
<p>In a comment on Scoble's site, Rory clarified that he wasn't dissing hobbyists, he was saying that Microsoft shouldn't <em>cater</em> to them at the expense of professionals using VS.NET. Oh geez, yeah. It's not about compromising VS.NET or giving MSDN subscriptions away to every High School in America -- it's about a market whose needs are significantly different than the needs of an ISV. You don't win the hobbyist market by saying "Hey, free-as-in-beer compilers are available in the .NET SDK. Oh, and there's plenty of stuff about DirectX on MSDN." You have to support that market with tools and resources that are specifically geared towards their interests: they want to make their computers do cool stuff. Preferably with graphics. 3-D graphics. And they want languages and libraries and techniques that give them results <em>all the time</em> -- not six hours after they start.</p>AT&T 2256 Cordless Phone not recommended2004-03-03T05:53:00-10:002004-03-03T05:53:00-10:00larrytag:knowing.net,2004-03-03:/posts/2004/03/att-2256-cordless-phone-not-recommended/<p>This is a 2.4GHz cordless answering system with 2 handsets, available for about \$100. We tried it out for 2 days and are returning it. It has a terrible hiss. I don't know if it's the spread spectrum technology, interference with my WiFi, or just the phone, but its …</p><p>This is a 2.4GHz cordless answering system with 2 handsets, available for about \$100. We tried it out for 2 days and are returning it. It has a terrible hiss. I don't know if it's the spread spectrum technology, interference with my WiFi, or just the phone, but its unacceptable.</p>
<p>Any cordless phone recommendations? I need headphone compatibility, decent range, and <strong>good</strong> sound quality.</p>Tom Plum Just Came Up With A Great Idea In The N2004-03-02T10:35:00-10:002004-03-02T10:35:00-10:00larrytag:knowing.net,2004-03-02:/posts/2004/03/tom-plum-just-came-up-with-a-great-idea-in-the-n/<p>Tom Plum just came up with a great idea: In the next 8 months, swap a political book with a personal acquaintance whose philosophy is opposite yours. Then have a civil discussion.</p>Cross TabletPC Pen Finally Ships!2004-03-02T03:00:00-10:002004-03-02T03:00:00-10:00larrytag:knowing.net,2004-03-02:/posts/2004/03/cross-tabletpc-pen-finally-ships/<p>Ordered.</p>And then the Army Corps of Engineers drained it2004-03-02T02:05:00-10:002004-03-02T02:05:00-10:00larrytag:knowing.net,2004-03-02:/posts/2004/03/and-then-the-army-corps-of-engineers-drained-it/<p>Mars was once "drenched in water." Cool.</p>Choosing C# over C++2004-03-01T01:30:00-10:002004-03-01T01:30:00-10:00larrytag:knowing.net,2004-03-01:/posts/2004/03/choosing-c-over-c/<p>In a comment, Josh asks "[Why should] a C++ programmer choose to write industrial programs in C#? Of course you needn't restate the benefits of a 3rd/4th/5th generation language, as much as benefits to someone who is choosing whether or not to port existing C++ code to C …</p><p>In a comment, Josh asks "[Why should] a C++ programmer choose to write industrial programs in C#? Of course you needn't restate the benefits of a 3rd/4th/5th generation language, as much as benefits to someone who is choosing whether or not to port existing C++ code to C#."</p>
<p>Since it's my blog, I'm going to ignore his request and quickly restate that the language C# has productivity benefits over C++. Beyond that, the Base Class Library (BCL) definitely has huge productivity benefits, but you can access the BCL through Managed C++ and, soon, C++/CLI.</p>
<p>But porting existing C++ to C#? That's a tricky one.</p>Jon Udells NET Report Cardnbspis An Ex2004-03-01T01:13:00-10:002004-03-01T01:13:00-10:00larrytag:knowing.net,2004-03-01:/posts/2004/03/jon-udells-net-report-cardnbspis-an-ex/<p>Jon Udell's .NET Report Card is an excellent article, but I'm going to pick a couple nits:</p>
<p>He gives .NET a B in "Advancing the state of the art of Windows programming." I'd disagree: for both the state of the<em> art</em> and state of the <em>practice</em>, I'd give .NET an …</p><p>Jon Udell's .NET Report Card is an excellent article, but I'm going to pick a couple nits:</p>
<p>He gives .NET a B in "Advancing the state of the art of Windows programming." I'd disagree: for both the state of the<em> art</em> and state of the <em>practice</em>, I'd give .NET an A+. The advanced "art" of Windows programming has received a huge boost from Rotor, the BCL, and the CodeDom: Windows is now legitimately a top platform for programming language development. And for the state of the practice, you can argue that .NET and the BCL are just incremental advances over Java, but as an advance over MFC and as a unifier of the C++ / VB worlds? For the Windows platform, .NET is a huge step forward.</p>
<p>Jon accurately nails COM Interop as being trouble-prone (a given project tends to be either trouble-free or agony). He quotes Greg Reinacker on a problem I wasn't aware of: if you're a managed add-in (for Outlook, in the case of Reinacker's NewsGator), you automatically bind to the version of the CLR that the <em>first</em> managed add-in binds to -- a bug in my book.</p>
<p>He enthuses that ".Net's support for Web services wins universal acclaim....The promise of cross-platform XML messaging has become a reality....As a result, we're starting to see the kinds of network effects that justify all the early excitement about Web services," and gives .NET an A in that subject.</p>
<p>To battle grade inflation, I would agree with Jon's criticism on areas like interop (especially because I think that additional tools could have been provided by now), versioning and security. I'd probably also throw in the clear-in-retrospect realization that .NET is not inviting to newcomers, that the benefits of a managed, object-oriented platform are not immediately apparent to many programmers.</p>Why Spoil A Perfect Record Yes Its March No Cross Hasnt Shipped Their Pen For The Table2004-02-29T22:41:00-10:002004-02-29T22:41:00-10:00larrytag:knowing.net,2004-02-29:/posts/2004/02/why-spoil-a-perfect-record-yes-its-march-no-cross-hasnt-shipped-their-pen-for-the-table/<p>Why spoil a perfect record? Yes, it's March. No, <a href="https://www.cross.com/">Cross</a> hasn't shipped their pen for the Tablet PC.</p>IDisposable and Using2004-02-28T06:41:00-10:002004-02-28T06:41:00-10:00larrytag:knowing.net,2004-02-28:/posts/2004/02/idisposable-and-using/<p>In a comment on my last post, Alex Peake points out the <strong>Dispose()</strong> method and the <strong>using</strong> keyword. This is what I referred to in the post as "implementing <strong>IDisposable"</strong>, but I realize that I glossed over that too fast.</p>
<p><strong>IDisposable</strong> is an interface that defines a single method, <strong>Dispose …</strong></p><p>In a comment on my last post, Alex Peake points out the <strong>Dispose()</strong> method and the <strong>using</strong> keyword. This is what I referred to in the post as "implementing <strong>IDisposable"</strong>, but I realize that I glossed over that too fast.</p>
<p><strong>IDisposable</strong> is an interface that defines a single method, <strong>Dispose()</strong>. If you have "valuable resources that have to be put back on the shelf" the recommendation in .NET is that you define your class as <strong>implements IDisposable</strong> and release the resources in the <strong>Dispose()</strong> method.</p>
<p>C# goes a step further and provides a keyword, <strong>using</strong>, that generates a try...finally block and, in the finally block, calls the <strong>Dispose()</strong> method of the <strong>IDisposable</strong> object that the <strong>using</strong> keyword refers to, for instance:</p>
<div class="highlight"><pre><span></span><code>using(myNetworkConnection){
doStuff();
throw new EvenIfItThrowsAnException();
} //when execution reaches here, myNetworkConnection.Dispose() will be called
</code></pre></div>
<p>This is how you <em>should</em> get rid of valuable resources, not wait around for the finalizer to be triggered by a call from the garbage collector.</p>
<p>But that raises the question: if <strong>IDisposable</strong> and <strong>Dispose()</strong> are the .NET-recommended ways to dispose of non-memory resources, what is the <em>purpose</em> of the finalizer? That is, what are the <em>recommended</em> contents of <strong>Object.Finalize()</strong> other than a "last chance" call to: <strong>if(this is IDisposable) this.Dispose()</strong> ? And if those are the intended contents, why not just emit <em>that</em> IL instead?</p>Defending C# (and .NET's) Garbage Collection2004-02-28T05:04:00-10:002004-02-28T05:04:00-10:00larrytag:knowing.net,2004-02-28:/posts/2004/02/defending-c-and-nets-garbage-collection/<p>I read Bryan Flamig's criticism of C# via Loren. Bryan voices a common criticism of C#'s garbage collection (the criticism actually would apply to all languages that don't go beyond the default memory management model of CLR, but let's just continue to use C# as the example): in C …</p><p>I read Bryan Flamig's criticism of C# via Loren. Bryan voices a common criticism of C#'s garbage collection (the criticism actually would apply to all languages that don't go beyond the default memory management model of CLR, but let's just continue to use C# as the example): in C++, the timing of when an objects is "cleaned up" is under program control (it's fully deterministic), while in C#, the default behavior is that the timing is non-deterministic (in fact, reclaiming memory is an aspect of "cleaning up" whose precise timing is very explicitly beyond the control of the developer).</p>
<p>Bryan makes the excellent point that "cleaning up an object" certainly means releasing the memory for reuse but can also mean closing a network socket, database connection, file handle, etc. There are many examples of valuable resources such as these that come from a limited pool, and it's perfectly understandable for a programmer to want to control the timing of when such resources are "put back on the shelf," as it were.</p>
<p>In C++, releasing resources and releasing memory are thought of as one event. In C# and most other .NET languages, the act of cleaning up is thought of as being two events: the release of valuable resources (finalization) and the release of memory (destruction). By default, the CLR's garbage collector guarantees that it will call a "finalizer" function prior to releasing an object's memory. So, if you use the finalizer method to control your valuable resources and do nothing else, "cleaning up" is linked to the non-deterministic garbage collector. That's the chief criticism of C#'s garbage collection. </p>
<p>But, to be fair, these non-memory resources are <em>not</em> what garbage collection aims to solve. Garbage collection aims to solve managing physical memory. Allocating and deallocating memory has unique problems (in that memory can point to other memory) and characteristics (the ratio of memory allocations and deallocations to, let's say, the number of file handles opened and closed is approximately a zillion to one). So relying on an algorithm for garbage collection based on physical memory to time the clean-up of your valuable resources is a questionable strategy. But that doesn't mean that garbage collection (of physical memory) is not a great advantage: the garbage collector is fast, it compacts the heap, and it goes a long way to help the most common types of programming bugs in C and C++. It doesn't solve memory management, but it helps a lot.</p>
<p>So if you don't want to rely on the garbage collector to trigger your finalizer to release your valuable resources, what do you do? You implement IDisposable and put the release of valuable resources entirely under programmatic control. Sure, that's an error-prone burden, just like managing physical memory <em>was</em>. But it's a start.</p>
<p>Now, can one imagine a CLR that had an algorithm that was optimized for managing non-memory resources? Yeah, but it might have poor performance. Or can one imagine some in-language facility that provides "deterministic finalization"? Yeah -- C++/CLI will have such a thing and it's certainly on the radar of the designers of the C# language.</p>
<p>But memory management via garbage collection? .NET provides a great implementation of a great idea.</p>To type or not to type2004-02-27T08:15:00-10:002004-02-27T08:15:00-10:00larrytag:knowing.net,2004-02-27:/posts/2004/02/to-type-or-not-to-type/<blockquote>
<p>My take on the debate of whether typing is needed in a language. Rather than taking sides, I revert to my previous incarnation as a philosopher, and try to see what we are really talking about when we seem to be talking about types. <em>via</em> [<a class="ngquotelink" href="https://www.artima.com/weblogs/viewpost.jsp?thread=36525">Artima Weblogs</a>]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr …</p><blockquote>
<p>My take on the debate of whether typing is needed in a language. Rather than taking sides, I revert to my previous incarnation as a philosopher, and try to see what we are really talking about when we seem to be talking about types. <em>via</em> [<a class="ngquotelink" href="https://www.artima.com/weblogs/viewpost.jsp?thread=36525">Artima Weblogs</a>]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> Jim Waldo says that strong typing advocates spend more time thinking about large systems. Yeah, I agree.</p>All Media Should Be Timeshifted2004-02-26T23:53:00-10:002004-02-26T23:53:00-10:00larrytag:knowing.net,2004-02-26:/posts/2004/02/all-media-should-be-timeshifted/<blockquote>
<p>ReplayTV...I love download into MS lectures and playing them back at 1.5 speed...All media should be timeshifted. *All* *media*. <em>via</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>I don't even have a PVR and I agree. One of my many, many side-projects is writing a .NET CF RSS …</p><blockquote>
<p>ReplayTV...I love download into MS lectures and playing them back at 1.5 speed...All media should be timeshifted. *All* *media*. <em>via</em> [Marquee de Sells: Chris's insight outlet]</p>
</blockquote>
<p>I don't even have a PVR and I agree. One of my many, many side-projects is writing a .NET CF RSS aggregator that displays the articles using RSVP (Rapid Sequential Visual Presentation -- flashing the words at you at a rate that significantly exceeds your regular reading rate). So much software to write, so little time...</p>
<blockquote></blockquote>Peter is floored by InfoPath prerelease2004-02-26T23:46:00-10:002004-02-26T23:46:00-10:00larrytag:knowing.net,2004-02-26:/posts/2004/02/peter-is-floored-by-infopath-prerelease/<blockquote>
<p>Peter just messaged me: "Hands down, InfoPath (prerelease version) is microsoft's coolest ink app, after onenote." I can't wait to read his comments on his blog.</p>
<p>OK. That settles it. I'm downloading the prerelease InfoPath even if that means I have to reinstall everything later. Here goes nothing... <em>via</em> [Incremental …</p></blockquote><blockquote>
<p>Peter just messaged me: "Hands down, InfoPath (prerelease version) is microsoft's coolest ink app, after onenote." I can't wait to read his comments on his blog.</p>
<p>OK. That settles it. I'm downloading the prerelease InfoPath even if that means I have to reinstall everything later. Here goes nothing... <em>via</em> [Incremental Blogger]</p>
</blockquote>
<p>Hmmm... InfoPath isn't really targeted towards an independent contractor like myself, but if it's mad for ink...</p>10 Songs I Didn't Choose2004-02-26T01:27:00-10:002004-02-26T01:27:00-10:00larrytag:knowing.net,2004-02-26:/posts/2004/02/10-songs-i-didnt-choose/<p>As seen at adimiron's place:</p>
<blockquote>
<div>
<p>Step 1: Open your mp3 player. (iTunes here)<br>
Step 2: Put all of your music on random.<br>
Step 3: List the first ten songs it plays, no matter how embarrassing.</p>
<p><em>via</em> [The .NET Guy]</p>
<p>Stuck In A Moment You Can't Get Out Of" -U2</p>
<p>"Get …</p></div></blockquote><p>As seen at adimiron's place:</p>
<blockquote>
<div>
<p>Step 1: Open your mp3 player. (iTunes here)<br>
Step 2: Put all of your music on random.<br>
Step 3: List the first ten songs it plays, no matter how embarrassing.</p>
<p><em>via</em> [The .NET Guy]</p>
<p>Stuck In A Moment You Can't Get Out Of" -U2</p>
<p>"Get Down" - Butthole Surfers</p>
<p>"Sunday Morning Coming Down" - Johnny Cash</p>
<p>"Acetate Prophets" - Jurassic 5</p>
<p>"Smells Like Funk" - Black-eyed Peas</p>
<p>"Baby's Got Sauce"</p>
<p>"Insomniac" - Echobelly</p>
<p>"A Charlie Brown Christmas"</p>
<p>"New Age Girl" - Deadeye Dick</p>
<p>"The Shame of Life" - Butthole Surfers</p>
<p>That's too good to be random (Down-Down name match, Jurassic 5- Black-eyed Peas match, 2 Songs from the "Dumb and Dumber" soundtrack, 2 songs from the Butthole Surfers), but that's why I use Music Match Jukebox. I got to clear that Christmas stuff off my machine, though!</p>
</div>
</blockquote>Strong AI Smackdown -- Seriously, This Time2004-02-26T00:01:00-10:002004-02-26T00:01:00-10:00larrytag:knowing.net,2004-02-26:/posts/2004/02/strong-ai-smackdown-seriously-this-time/<p>The January '04 <a href="https://www.acm.org/">CACM's</a> lead letter is a smackdown of Hans Moravec and the concept that more MIPS is the path to AI. (When really it's spam that will lead to AI.) Anyway, the author tersely makes the excellent points that people such as Moravec are again making the argument …</p><p>The January '04 <a href="https://www.acm.org/">CACM's</a> lead letter is a smackdown of Hans Moravec and the concept that more MIPS is the path to AI. (When really it's spam that will lead to AI.) Anyway, the author tersely makes the excellent points that people such as Moravec are again making the argument that "Someday computers will wake up," with "the same intellectually faulty arguments and foundational quicksand AI has always suffered....Just because you put a picture of a chim and a human on the same graph with a Dell Computer doesn't mean the chimp, or human, capabilities will be meaningfully measured in MIPS...[Moravec leaves] entirely undefined, unspecified, and unaddressed [such questions as]: What is behavior?; What is a mind?; What is consciousness?; What is reasoning?" to which Moravec's lame reply is to pretend that the letter writer is caught up in "Western philosophy, let alone religion."</p>
<p>There's been virtually no progress in AI theory in the past decade. Everyone in AI seems to be crossing their fingers and hoping that some unexpected emergent phenomena will kick in when enough <em>something</em> (data, MIPS, facts, environmental input...) crosses some line. Maybe. I think it's less likely than my joke that spam will lead to the co-evolution of machine intelligence.</p>Nemerle2004-02-25T04:46:00-10:002004-02-25T04:46:00-10:00larrytag:knowing.net,2004-02-25:/posts/2004/02/nemerle/<p><a href="http://www.nemerle.org/About" title="http://www.nemerle.org/"><em>Nemerle</em></a> <em>is a new hybrid (functional, object-oriented and imperative) programming language for the .NET platform.</em></p>
<blockquote>
<div>
<p><em>via</em> [<a class="ngquotelink" href="http://www.nemerle.org/About">Lambda the Ultimate</a>]</p>
</div>
</blockquote>Making sense of ASP.NET Paths2004-02-25T04:44:00-10:002004-02-25T04:44:00-10:00larrytag:knowing.net,2004-02-25:/posts/2004/02/making-sense-of-aspnet-paths/<p><a href="https://weblog.west-wind.com/posts/269.aspx" title="http://west-wind.com/weblog/posts/269.aspx">http://west-wind.com/weblog/posts/269.aspx</a></p>
<blockquote>
<div>
<p>An excellent blogicle (blog article) describing each of the paths in ASP.NET, and what they actually point to. <em>via</em> [Kent Sharkey's blog]</p>
</div>
</blockquote>Office 2003/XP Add-in: Remove Hidden Data2004-02-23T00:36:00-10:002004-02-23T00:36:00-10:00larrytag:knowing.net,2004-02-23:/posts/2004/02/office-2003xp-add-in-remove-hidden-data/<blockquote>
<p>With this add-in you can permanently remove hidden and collaboration data, such as change tracking and comments, from Word 2003/XP, Excel 2003/XP, and PowerPoint 2003/XP files. <br>
<em>vi</em>a [Early Adopter Weblog]</p>
</blockquote>
<p>Everyone needs this add-in. In the past 6 months, I've received 3 Press Releases with embarassing …</p><blockquote>
<p>With this add-in you can permanently remove hidden and collaboration data, such as change tracking and comments, from Word 2003/XP, Excel 2003/XP, and PowerPoint 2003/XP files. <br>
<em>vi</em>a [Early Adopter Weblog]</p>
</blockquote>
<p>Everyone needs this add-in. In the past 6 months, I've received 3 Press Releases with embarassing internal comments and 1 document whose author had gone to significant pains to remain anonymous but who forgot or didn't understand Word's document properties fields.</p>Finalization2004-02-22T23:37:00-10:002004-02-22T23:37:00-10:00larrytag:knowing.net,2004-02-22:/posts/2004/02/finalization/<blockquote>
<p>[Finalization is expensive.[ ]{style="mso-spacerun: yes"} It has the following costs...\<snip of 2, 930 additional words>... [Subject to all of the above, we guarantee that we will dequeue your object and initiate a call to the Finalize method.[ ]{style="mso-spacerun: yes"} We do not guarantee that your Finalize method …</p></blockquote><blockquote>
<p>[Finalization is expensive.[ ]{style="mso-spacerun: yes"} It has the following costs...\<snip of 2, 930 additional words>... [Subject to all of the above, we guarantee that we will dequeue your object and initiate a call to the Finalize method.[ ]{style="mso-spacerun: yes"} We do not guarantee that your Finalize method can be JITted without running out of stack or memory.[ ]{style="mso-spacerun: yes"} We do not guarantee that the execution of your Finalize method will complete without being aborted.[ ]{style="mso-spacerun: yes"} We do not guarantee that any types you require can be loaded and have their .cctors run.[ ]{style="mso-spacerun: yes"} All you get is a "best effort" attempt.[ ]{style="mso-spacerun: yes"}]{style="COLOR: black; FONT-FAMILY: Tahoma; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"}]{style="COLOR: black; mso-bidi-font-family: Tahoma"}</p>
<p><em>via</em><br>
[<a class="ngquotelink" href="https://devblogs.microsoft.com/cbrumme/finalization/">cbrumme's WebLog</a>]</p>
</blockquote>
<p>I'm becoming more and more convinced that the <em>guideline</em> for non-deterministic finalization should be: avoid it. The only thing you need finalization for are non-memory resources: file handles, database connections, etc. You can either exercise a little diligence so as to manually track and clean up these things or you can subject yourself to the complicated algorithms described by Brumme. If I were managing a programming team, there's no way that I'd trust junior programmers to read Brumme's post and then tell them "Okay, make sure we don't run out of database handles." Nuh-uh. I'd say: "Refactor your non-memory resources into <strong><em>xPool</em></strong> objects and deterministically finalize them using <strong>try...finally</strong> or <strong>using</strong> statements and the <strong>IDisposable</strong> pattern." Learning that might be more complex than reading Brumme's post, but the results are much easier to review and duplicate.</p>
<p>\<</p>
<p>p class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"> The people who really get a huge benefit from non-deterministic finalization are library writers, who finally have a guarantee that sometime before the process ends, they'll get a final shot at cleaning up resources. Even they, I think, should strive for explicit deterministic finalization and use the finalizer as a "last chance" effort to trigger clean-up.</p>Speeding XML2004-02-22T23:15:00-10:002004-02-22T23:15:00-10:00larrytag:knowing.net,2004-02-22:/posts/2004/02/speeding-xml/<p>\<</p>
<p>blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> Sun has posted an article claiming that Java is \<a title="http://java.sun.com/performance/reference/whitepapers/XML_Test-1_0.pdf" href="http://java.sun.com/performance/reference/whitepapers/XML_Test-1_0.pdf"" xmlns="http://www.w3.org/1999/xhtml">faster than .NET …</p><p>\<</p>
<p>blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> Sun has posted an article claiming that Java is \<a title="http://java.sun.com/performance/reference/whitepapers/XML_Test-1_0.pdf" href="http://java.sun.com/performance/reference/whitepapers/XML_Test-1_0.pdf"" xmlns="http://www.w3.org/1999/xhtml">faster than .NET for processing XML.... <em>via</em><br>
[Better Living Through Software]</p>
<p>It's quite possible that Sun has achieved <em>major</em> improvements to their XML processing, since it used to be quite poor compared to .NET 1.0's performance. The competitive marketplace in action...</p>Spam Will Lead To Artificial Intelligence2004-02-19T01:02:00-10:002004-02-19T01:02:00-10:00larrytag:knowing.net,2004-02-19:/posts/2004/02/spam-will-lead-to-artificial-intelligence/<p>A recent CACM has an article on CAPTCHAs (those visual problems used to defeat registration 'bots). The article made the point that solving a CAPTCHA requires advancing the state-of-the-art of artificial intelligence and image recognition. Similarly, the spammers have begun using Markov chains to fool spam tools that work at …</p><p>A recent CACM has an article on CAPTCHAs (those visual problems used to defeat registration 'bots). The article made the point that solving a CAPTCHA requires advancing the state-of-the-art of artificial intelligence and image recognition. Similarly, the spammers have begun using Markov chains to fool spam tools that work at the level of the single word. Naturally, the next step for anti-spam will be to apply rudimentary grammatical analysis to the body text, diagram the sentence like a 9th grader, and do Bayesian analysis of the sentence structure. Naturally, the spammers will counter with more sophisticated sentence generators, the anti-spammers will improve their contextual analysis, and the two forces, driven by the ridiculous economics of spam, will co-evolve machine intelligence.</p>
<p>Eventually, the machine intelligence will send a robotic assassin back in time to kill Thomas Bayes and ensure a future in which all humans have low-interest loans, college diplomas, and an herbally-enhanced sex life. Chilling.</p>Resharper is very preliminary2004-02-18T04:52:00-10:002004-02-18T04:52:00-10:00larrytag:knowing.net,2004-02-18:/posts/2004/02/resharper-is-very-preliminary/<p><a href="https://confluence.jetbrains.com/display/ReSharper/ReSharper+Early+Access+Program;jsessionid=59C836AB75A798540FE41DEFA09D291C">ReSharper</a> is <em>very early</em>, the only refactoring this first version supports is "rename..." The license also expires in two days! So you needn't rush to the download site quite yet...</p>RSS Sweep: Interesting Links, No Editorial2004-02-18T01:59:00-10:002004-02-18T01:59:00-10:00larrytag:knowing.net,2004-02-18:/posts/2004/02/rss-sweep-interesting-links-no-editorial/<p>Here are links that I (Larry O'Brien) have been meaning to post (the "I"s and "me" in the following are the original authors):</p>
<p>http://www.netcrucible.com/blog/PermaLink.aspx?guid=6c883fbb-16d3-467f-a028-110e9078132a </p>
<p>If you follow the rumor mill, you may have heard of X# or "Xen", the crazy next-generation …</p><p>Here are links that I (Larry O'Brien) have been meaning to post (the "I"s and "me" in the following are the original authors):</p>
<p>http://www.netcrucible.com/blog/PermaLink.aspx?guid=6c883fbb-16d3-467f-a028-110e9078132a </p>
<p>If you follow the rumor mill, you may have heard of X# or "Xen", the crazy next-generation programming language that was reportedly being cooked up by people on my former team. I won't say what they all are working on now, but some more of them have started blogs....</p>
<hr>
<p><a href="https://bitworking.org/news/2004/02/Cory_Doctorow_s_Eastern_Standard_Tribe" title="http://bitworking.org/news/Cory_Doctorow_s_Eastern_Standard_Tribe">http://bitworking.org/news/Cory_Doctorow_s_Eastern_Standard_Tribe</a></p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/0765307596/bitworking-20%3fdev-t%3dD3HRDIT5RSDFFA%2526camp%3d2025%2526link_code%3dxm2" title="http://www.amazon.com/exec/obidos/ASIN/0765307596/bitworking-20?dev-t=D3HRDIT5RSDFFA%26camp=2025%26link_code=xm2"></a></p>
<p>I just finished reading Cory Doctorow's latest book <a href="https://www.amazon.com/exec/obidos/ASIN/0765307596/bitworking-20%3fdev-t%3dD3HRDIT5RSDFFA%2526camp%3d2025%2526link_code%3dxm2" title="http://www.amazon.com/exec/obidos/ASIN/0765307596/bitworking-20?dev-t=D3HRDIT5RSDFFA%26camp=2025%26link_code=xm2">Eastern Standard Tribe</a>. It was a cool book and the next time I hit a bookstore or Amazon.com I will buy a copy. Because Cory released the book under a <a href="https://creativecommons.org/licenses/by-nd-nc/1.0/" title="http://creativecommons.org/licenses/by-nd-nc/1.0">Creative Commons</a> license people have been transforming it into a variety of formats. The one that caught my eye was "<a href="https://trevor.smith.name:443/EST/index.html" title="http://trevor.smith.name/EST/index.html">speed-reader</a>" by <a href="https://trevor.smith.name:443/" title="http://trevor.smith.name/">Trevor Smith</a>. This is a Java applet that flashes the book up on the screen a word at a time. The single user-interface control it has is for varying the speed at which the words are presented....</p>
<hr>
<p>http://weblogs.asp.net/cnagel/archive/2004/02/15/73297.aspx | Comments</p>
<p>Harald Leitenm</p>Rise Of ServiceOrientation2004-02-17T22:40:00-10:002004-02-17T22:40:00-10:00larrytag:knowing.net,2004-02-17:/posts/2004/02/rise-of-serviceorientation/<p>Rise of Service-Orientation</p>Service Oriented Language2004-02-17T22:39:00-10:002004-02-17T22:39:00-10:00larrytag:knowing.net,2004-02-17:/posts/2004/02/service-oriented-language/<blockquote>
<p>I like Jeff's suggestions for a Service Oriented Lanugage <em>via</em> [DevHawk]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> My latest SD Times article discusses the passing of Object-Orientation and the rise of Service-Orientation.</p>Don't do this with SQL2004-02-17T22:35:00-10:002004-02-17T22:35:00-10:00larrytag:knowing.net,2004-02-17:/posts/2004/02/dont-do-this-with-sql/<blockquote>
<p><a href="http://www.drdobbs.com/windows/" title="http://dotnetjunkies.com/WebLog/dougseven">Doug Seven</a> has a <a href="http://www.drdobbs.com/windows/" title="http://dotnetjunkies.com/WebLog/dougseven/archive/2004/02/16/7329.aspx">list of 26 ideas</a> that shouldn't be done with SQL. You can vote for the top 10. <em>via</em> [Christian Nagel's OneNotes]</p>
</blockquote>
<p>Naturally, the comments section immediately debates whether stored procedures are inherently evil...</p>C# Refactoring plug-in for VS.NET from JetBrains!2004-02-17T22:17:00-10:002004-02-17T22:17:00-10:00larrytag:knowing.net,2004-02-17:/posts/2004/02/c-refactoring-plug-in-for-vsnet-from-jetbrains/<p>Reshaper, a C# refactoring plug-in for Visual Studio .NET 2003, is now available for early access. This is from JetBrains, nee IntelliJ, makers of the IDEA Java IDE.</p>
<p><a href="https://confluence.jetbrains.com/display/ReSharper/ReSharper+Early+Access+Program;jsessionid=614AA4F3621DD5C231F38EE0A8D4D012">http://www.jetbrains.net/resharper</a></p>
<p>User name: eapuser</p>
<p>Password: eapuser</p>Happy 2nd Birthday, .NET!2004-02-16T03:33:00-10:002004-02-16T03:33:00-10:00larrytag:knowing.net,2004-02-16:/posts/2004/02/happy-2nd-birthday-net/<p>Microsoft launched .NET two years ago last Friday. My short take: CLR and C# are unqualified successes; Managed C++ was a failure, but they'll turn that around with C++/CLI; and that the jury's still out on VB.NET. The most disappointing thing to me is the relative dearth of …</p><p>Microsoft launched .NET two years ago last Friday. My short take: CLR and C# are unqualified successes; Managed C++ was a failure, but they'll turn that around with C++/CLI; and that the jury's still out on VB.NET. The most disappointing thing to me is the relative dearth of third-party languages for .NET.</p>
<p>What do you think?</p>K5 Thread Analyzes The Comments In The Leaked W2K Code It Does2004-02-16T01:03:00-10:002004-02-16T01:03:00-10:00larrytag:knowing.net,2004-02-16:/posts/2004/02/k5-thread-analyzes-the-comments-in-the-leaked-w2k-code-it-does/<p><a href="http://www.kuro5hin.org/story/2004/2/15/71552/7795">K5 thread analyzes the comments</a> in the leaked W2K code. It doesn't quote the code at all other than a general comment that the code is quite clean, with most functions fitting on a single screen.</p>Paul Allens Company Vulcan Is Bank2004-02-15T23:26:00-10:002004-02-15T23:26:00-10:00larrytag:knowing.net,2004-02-15:/posts/2004/02/paul-allens-company-vulcan-is-bank/<p>Paul Allen's company <a href="http://old.seattletimes.com/html/businesstechnology/2001856160_halo12.html">Vulcan is bankrolling three competing teams</a> that are attempting to create software that does well on the SATs. Early results show that it's possible to get the computer to deal with quantitative questions like "If you mix these two chemicals, what will the resultant pH be?" but …</p><p>Paul Allen's company <a href="http://old.seattletimes.com/html/businesstechnology/2001856160_halo12.html">Vulcan is bankrolling three competing teams</a> that are attempting to create software that does well on the SATs. Early results show that it's possible to get the computer to deal with quantitative questions like "If you mix these two chemicals, what will the resultant pH be?" but, not surprisingly, common sense is hard: "Why is tap water a better conductor than distilled water?" Common sense is the reef on which all AI has run aground. I haven't heard any compelling theories on changing that; I think there's a general hope that processing power will simply chip away at the problem.</p>
<p>In a somewhat related vein, this week's <em>New Scientist</em> has a cover article on consciousness (or "salience") in fruit flies. A fruit fly brain has only 250,000 neurons (the human brain: 100 billion unless you went drinking Friday night). That complexity is within the range of simulation of a modern desktop (it'd be slow, but you could hold the data structure and move data through it). I'm sure an artificial neural network of 250K nodes would produce interesting data.</p>Outsourcing contracts are economically inefficient2004-02-13T02:06:00-10:002004-02-13T02:06:00-10:00larrytag:knowing.net,2004-02-13:/posts/2004/02/outsourcing-contracts-are-economically-inefficient/<p>An article in the February 2004 <a href="https://www.acm.org/">Communications of the ACM</a> by Yossi Lichtenstein says, in the hedged terms of a small sample size and an academic paper: "current outsourcing practices [contracting, not technical] may fall short of the sophistication prescribed by theories." In other words, outsourcing is being seized on …</p><p>An article in the February 2004 <a href="https://www.acm.org/">Communications of the ACM</a> by Yossi Lichtenstein says, in the hedged terms of a small sample size and an academic paper: "current outsourcing practices [contracting, not technical] may fall short of the sophistication prescribed by theories." In other words, outsourcing is being seized on as a golden bullet, while a more sophisticated analysis of costs and benefits would at least alter the terms of outsourcing if not take it off the table.</p>
<p>Not that this bodes well for programmers competing with cheap offshore labor, as it implies that the managers embracing the practice are those who <em>don't</em> stay abreast of magazines like CACM.</p>Wacom released a new version of their driver2004-02-12T23:03:00-10:002004-02-12T23:03:00-10:00larrytag:knowing.net,2004-02-12:/posts/2004/02/wacom-released-a-new-version-of-their-driver/<blockquote>
<p>Recently Wacom released an updated version of their graphics driver for penabled Tablet PCs. This release apparently solves the problem of ink lines being jagged, which was caused by the previous version. <em>via</em> [Tabula PC]</p>
</blockquote>
<p>Holy palsy, Batman! I thought my digitizer was going!</p>
<p>\<</p>
<p>p dir=ltr> Update: For my …</p><blockquote>
<p>Recently Wacom released an updated version of their graphics driver for penabled Tablet PCs. This release apparently solves the problem of ink lines being jagged, which was caused by the previous version. <em>via</em> [Tabula PC]</p>
</blockquote>
<p>Holy palsy, Batman! I thought my digitizer was going!</p>
<p>\<</p>
<p>p dir=ltr> Update: For my Motion Computing M1200, the update works great. It's a little disconcerting -- the first time you run it, it <em>uninstalls</em> your pen driver with no acknowledgement that this is a temporary step. You reboot, run it again, and it installs the new driver. Reboot again, and the tremors are gone!</p>Cross pens available in Q1 20042004-02-12T23:01:00-10:002004-02-12T23:01:00-10:00larrytag:knowing.net,2004-02-12:/posts/2004/02/cross-pens-available-in-q1-2004/<blockquote>
<div>
<p>Well, that's what the Cross site now says anyway. <em>via</em> [Tabula PC]</p>
</div>
</blockquote>
<p>The greatest saga in the history of the Tablet PC has been the wait for a well-designed digitizing pen. Why Cross has had such a hard time (more than a year delay) wrapping a decent barrel around the …</p><blockquote>
<div>
<p>Well, that's what the Cross site now says anyway. <em>via</em> [Tabula PC]</p>
</div>
</blockquote>
<p>The greatest saga in the history of the Tablet PC has been the wait for a well-designed digitizing pen. Why Cross has had such a hard time (more than a year delay) wrapping a decent barrel around the not-a-lot-o'-stuff required is baffling. I just wish it wasn't Cross, whose aesthetics are kind of ho-hum. I want a Waterman Expert digitizer or an Eberhard Faber American #2 . Sniping aside, I'll be ordering mine the day they become available.</p>Function Point Counting Gets ISO Standard2004-02-12T02:41:00-10:002004-02-12T02:41:00-10:00larrytag:knowing.net,2004-02-12:/posts/2004/02/function-point-counting-gets-iso-standard/<p>Function points are a programming-language-independent way of describing the size of a piece of software. However, a given programming language has a typical amount of lines-of-code per function point, allowing a rough estimate of function points from LOC and vice versa. Even more importantly, a programmer or team tends to …</p><p>Function points are a programming-language-independent way of describing the size of a piece of software. However, a given programming language has a typical amount of lines-of-code per function point, allowing a rough estimate of function points from LOC and vice versa. Even more importantly, a programmer or team tends to generate a characteristic amount of function points per month.</p>
<p>It's not a panacea but I've had good luck with function point counting over the years; it's definitely a good tool to have in your belt. It just got <a href="http://www.ifpug.org/">standardized</a>.</p>My Sudden Loss Of Network Connectivity Was Caused By A Disabled2004-02-11T03:00:00-10:002004-02-11T03:00:00-10:00larrytag:knowing.net,2004-02-11:/posts/2004/02/my-sudden-loss-of-network-connectivity-was-caused-by-a-disabled/<p>My sudden loss of network connectivity was caused by a disabled Norton Internet Security application on my machine. Despite having disabled it after my subscription ran out in August of last year, I manually ran the Symantec "Smart Updater" and my capabilities came back. Grrr... I dedicated 4 3/4 …</p><p>My sudden loss of network connectivity was caused by a disabled Norton Internet Security application on my machine. Despite having disabled it after my subscription ran out in August of last year, I manually ran the Symantec "Smart Updater" and my capabilities came back. Grrr... I dedicated 4 3/4 hours to debugging this problem, not to mention the inconvenience it's caused. <strong>I HATE SYMANTEC!!!!!! </strong></p>
<p>So, to aide Google searches (human readers, feel free to ignore):</p>
<p><strong>Symptoms</strong>: I first noticed that my IE couldn't connect to secure Websites on the road,when I was connecting via WAP. When I got home, I noticed that also redirects weren't working. I installed Mozilla and Opera and was alarmed to find that they can't reach <em>any</em> Websites at all. I wrote a simple HttpGet program and found that my own code couldn't reach outside Websites, failing with a SocketException.</p>
<p>Within my own subnet, though, Mozilla and Opera can access my Websites on other machines, so the problem is not within the IP stack (which I reset, anyway, MS Article Q299357. I also deleted my network card and let it reinstall.).</p>
<p>Other machines on the network can access secure Websites, so the problem is not in my WAP.</p>
<p>I installed netmon.exe on Windows XP following the recommendation at this Web Site (I actually snagged it from my Windows Server 2003 install). I determined that packets weren't leaving my machine at all.</p>
<p>I reset the TCP/IP stack by running "netsh int ip reset c:\ip_reset.log" I deleted my current Winsock registry keys following <a href="http://www.dslreports.com/forum/remark%2c9118600%7emode%3dflat">this advice</a>. I tried running the winsocks repair facility at that same site. </p>Why Do Spammers Bother Being Clever Isnt The Set Of People Who Buy From Spam A Subset Of People Who Arent Trying To Defeat2004-02-10T23:09:00-10:002004-02-10T23:09:00-10:00larrytag:knowing.net,2004-02-10:/posts/2004/02/why-do-spammers-bother-being-clever-isnt-the-set-of-people-who-buy-from-spam-a-subset-of-people-who-arent-trying-to-defeat/<p>Why do spammers bother being clever? Isn't the set of "people who buy from spam" a subset of "people who aren't trying to defeat spam"?</p>Java Community Process Does One Right2004-02-09T22:14:00-10:002004-02-09T22:14:00-10:00larrytag:knowing.net,2004-02-09:/posts/2004/02/java-community-process-does-one-right/<p>Here's <a href="https://jcp.org/en/resources/guide/166-casestudy">an article</a> from Sun that describes a working group that achieved more transparency. The way that Java evolves (the JCP: nice in theory, clumsy in practice) is one of that platform's biggest problems. The article is a bit of a puff piece, but at least it acknowledges that major …</p><p>Here's <a href="https://jcp.org/en/resources/guide/166-casestudy">an article</a> from Sun that describes a working group that achieved more transparency. The way that Java evolves (the JCP: nice in theory, clumsy in practice) is one of that platform's biggest problems. The article is a bit of a puff piece, but at least it acknowledges that major problems exist with the JCP and supports the practices of a working group that avoided them.</p>Is There Some Facility In XP Pro That Filters UDP Or HTTP Messages On A Zonebased Machinewide Basis My Network Connectivi2004-02-08T08:31:00-10:002004-02-08T08:31:00-10:00larrytag:knowing.net,2004-02-08:/posts/2004/02/is-there-some-facility-in-xp-pro-that-filters-udp-or-http-messages-on-a-zonebased-machinewide-basis-my-network-connectivi/<p>Is there some facility in XP Pro that filters UDP or HTTP messages on a zone-based, machine-wide basis? My network connectivity issues (can't use Mozilla, Opera, or .NET programs at all, IE works on HTTP but not HTTPS) fail on both wired and wireless adapters, <em>but</em> I can access sites …</p><p>Is there some facility in XP Pro that filters UDP or HTTP messages on a zone-based, machine-wide basis? My network connectivity issues (can't use Mozilla, Opera, or .NET programs at all, IE works on HTTP but not HTTPS) fail on both wired and wireless adapters, <em>but</em> I can access sites within my Intranet. <strong>TCP/IP | Properties | Advanced... | Options | TCP/IP Filtering</strong> is <em>unchecked</em>. What else could it be?</p>
<p>(P.S. I opened Windows Components and added the "Network Monitoring" options and the install seemed to work, but I don't see an executable called <strong>Netmon</strong> on my system and nothing obvious appeared in my Control Panel or Administrative Tools... Thoughts?)</p>Debugging The Sudden Lack Of Network Connectivity Symptoms I First Noticed That My IE Couldnt Con2004-02-08T03:28:00-10:002004-02-08T03:28:00-10:00larrytag:knowing.net,2004-02-08:/posts/2004/02/debugging-the-sudden-lack-of-network-connectivity-symptoms-i-first-noticed-that-my-ie-couldnt-con/<p>Debugging the sudden lack of network connectivity:</p>
<p><strong>Symptoms</strong>: I first noticed that my IE couldn't connect to secure Websites in Hawaii,when I was connecting via Tom's WAP. When I got home, I noticed that also redirects weren't working. I installed Mozilla and Opera and was alarmed to find that …</p><p>Debugging the sudden lack of network connectivity:</p>
<p><strong>Symptoms</strong>: I first noticed that my IE couldn't connect to secure Websites in Hawaii,when I was connecting via Tom's WAP. When I got home, I noticed that also redirects weren't working. I installed Mozilla and Opera and was alarmed to find that they can't reach <em>any</em> Websites at all. I wrote a simple HttpGet program and found that my own code couldn't reach outside Websites, failing with a SocketException.</p>
<p>Within my own subnet, though, Mozilla and Opera can access my Websites on other machines, so the problem is not within the IP stack (which I reset, anyway, MS Article Q299357. I also deleted my network card and let it reinstall.).</p>
<p>Other machines on the network can access secure Websites, so the problem is not in my WAP.</p>
<p><strong>Therefore:</strong> It seems that the problem probably lies in some kind of security setting. The security setting cannot be IE-specific, since it's affecting external programs. I do not have Microsoft's firewall running on this machine. The problem might be that I'm filtering outgoing packets or it might be that I'm filtering the responses...</p>Mozilla and Opera disabled2004-02-06T07:56:00-10:002004-02-06T07:56:00-10:00larrytag:knowing.net,2004-02-06:/posts/2004/02/mozilla-and-opera-disabled/<p>Oh, that's nice -- Mozilla and Opera cannot connect to anything and even a .NET HttpWebRequest fails; IE works on http connections, but not https. But, I can connect to secure sites from within a VMWare session!</p>
<p><em>Sigh</em>. I've deleted my network adapter and it got automatically re-installed when I rebooted …</p><p>Oh, that's nice -- Mozilla and Opera cannot connect to anything and even a .NET HttpWebRequest fails; IE works on http connections, but not https. But, I can connect to secure sites from within a VMWare session!</p>
<p><em>Sigh</em>. I've deleted my network adapter and it got automatically re-installed when I rebooted, but the problems continue.</p>
<p>When I run a .NET HttpWebRequest on my own domain, the exception I get is the nonsensical</p>
<div class="highlight"><pre><span></span><code><span class="nx">Unhandled</span><span class="w"> </span><span class="nx">Exception</span><span class="p">:</span><span class="w"> </span><span class="nx">System</span><span class="p">.</span><span class="nx">Net</span><span class="p">.</span><span class="nx">WebException</span><span class="p">:</span><span class="w"> </span><span class="nx">The</span><span class="w"> </span><span class="nx">underlying</span><span class="w"> </span><span class="nx">connection</span><span class="w"> </span><span class="nx">was</span><span class="w"> </span><span class="nx">clos</span>
<span class="w"> </span><span class="nx">ed</span><span class="p">:</span><span class="w"> </span><span class="nx">Unable</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">connect</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">remote</span><span class="w"> </span><span class="nx">server</span><span class="p">.</span><span class="w"> </span><span class="o">---></span><span class="w"> </span><span class="nx">System</span><span class="p">.</span><span class="nx">Net</span><span class="p">.</span><span class="nx">Sockets</span><span class="p">.</span><span class="nx">SocketExcept</span>
<span class="w"> </span><span class="nx">ion</span><span class="p">:</span><span class="w"> </span><span class="nx">No</span><span class="w"> </span><span class="nx">connection</span><span class="w"> </span><span class="nx">could</span><span class="w"> </span><span class="nx">be</span><span class="w"> </span><span class="nx">made</span><span class="w"> </span><span class="nx">because</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">target</span><span class="w"> </span><span class="nx">machine</span><span class="w"> </span><span class="nx">actively</span><span class="w"> </span><span class="nx">refused</span><span class="w"> </span><span class="nx">it</span>
<span class="w"> </span><span class="nx">at</span><span class="w"> </span><span class="nx">System</span><span class="p">.</span><span class="nx">Net</span><span class="p">.</span><span class="nx">ServicePoint</span><span class="p">.</span><span class="nx">ConnectSocketInternal</span><span class="p">(</span><span class="nx">Boolean</span><span class="w"> </span><span class="nx">connectFailure</span><span class="p">,</span><span class="w"> </span><span class="nx">Sock</span>
<span class="w"> </span><span class="nx">et</span><span class="w"> </span><span class="nx">s4</span><span class="p">,</span><span class="w"> </span><span class="nx">Socket</span><span class="w"> </span><span class="nx">s6</span><span class="p">,</span><span class="w"> </span><span class="nx">Socket</span><span class="o">&</span><span class="w"> </span><span class="nx">socket</span><span class="p">,</span><span class="w"> </span><span class="nx">IPAddress</span><span class="o">&</span><span class="w"> </span><span class="nx">address</span><span class="p">,</span><span class="w"> </span><span class="nx">ConnectSocketState</span><span class="w"> </span><span class="nx">state</span><span class="p">,</span>
<span class="w"> </span><span class="nx">IAsyncResult</span><span class="w"> </span><span class="nx">asyncResult</span><span class="p">,</span><span class="w"> </span><span class="nx">DecrementTimer</span><span class="w"> </span><span class="nx">timer</span><span class="p">,</span><span class="w"> </span><span class="nx">Exception</span><span class="o">&</span><span class="w"> </span><span class="nx">exception</span><span class="p">)</span>
</code></pre></div>
<p>I have a feeling this is going to suck big time...</p>Redirects & HTTPS Capability Lost in IE -- shenanigans?2004-02-06T01:48:00-10:002004-02-06T01:48:00-10:00larrytag:knowing.net,2004-02-06:/posts/2004/02/redirects-https-capability-lost-in-ie-shenanigans/<p>The weirdest thing has happened: Internet Explorer has lost its ability to access https and URL redirects don't work. Is this a symptom of a known worm / virus / exploit?</p>My Latest Article In SD Times Reflects On The Lack Of Traction For Dynami2004-02-06T01:44:00-10:002004-02-06T01:44:00-10:00larrytag:knowing.net,2004-02-06:/posts/2004/02/my-latest-article-in-sd-times-reflects-on-the-lack-of-traction-for-dynami/<p>My latest article in SD Times reflects on the lack of traction for dynamic languages in .NET.</p>Just Back From KailuaKona And The ECMA Working Groups On The Standardization Of C And CCLI Boy Is That Fun Stuff For A2004-02-05T06:35:00-10:002004-02-05T06:35:00-10:00larrytag:knowing.net,2004-02-05:/posts/2004/02/just-back-from-kailuakona-and-the-ecma-working-groups-on-the-standardization-of-c-and-ccli-boy-is-that-fun-stuff-for-a/<p>Just back from Kailua-Kona and the ECMA Working Groups on the standardization of C# and C++/CLI. Boy, is that fun stuff for a language geek, plus I got to see some friends from the ol' days: <a href="http://www.dinkumware.com">P.J. Plauger</a>, <a href="http://www.thebestweb.com/rex/">Rex Jaeschke</a>, and <a href="http://www.plumhall.com/">Thomas Plum</a>, who was the host of …</p><p>Just back from Kailua-Kona and the ECMA Working Groups on the standardization of C# and C++/CLI. Boy, is that fun stuff for a language geek, plus I got to see some friends from the ol' days: <a href="http://www.dinkumware.com">P.J. Plauger</a>, <a href="http://www.thebestweb.com/rex/">Rex Jaeschke</a>, and <a href="http://www.plumhall.com/">Thomas Plum</a>, who was the host of the meetings. It was actually pretty grueling, with five days of 8:30 - 5 sessions that moved at a remarkable pace. On top of that, there were another 2 days on the CLI standard, which I skipped out on.</p>
<p>Okay, so this is the big joke from the conference: in C++/CLI there's a need to distinguish between allocation on the native heap from allocation on .NET's managed heap. C++ native heap allocation will use the traditional new keyword:</p>
<div class="highlight"><pre><span></span><code>Type* t = new Type;
</code></pre></div>
<p>So everyone started chuckling when it was suggested that allocation of a managed object be specified to use the "new" version of new:</p>
<div class="highlight"><pre><span></span><code>Type^ t = new new Type;
</code></pre></div>
<p>But people were rolling on the floor at the next step:</p>
<div class="highlight"><pre><span></span><code>Type^ t = new improved Type;
</code></pre></div>
<p>Oh, man! We were <em>out of control</em>!</p>Ignoring The Scripts2004-02-05T05:52:00-10:002004-02-05T05:52:00-10:00larrytag:knowing.net,2004-02-05:/posts/2004/02/ignoring-the-scripts/<p>Ignoring the Scripts</p>Standards in Paradise2004-01-31T00:11:00-10:002004-01-31T00:11:00-10:00larrytag:knowing.net,2004-01-31:/posts/2004/01/standards-in-paradise/<p>ECMA Technical Group 5 is charged with standardizing C++ bindings to the CLI. Progress has been slowed by the lack of 200-watt backlights for the laptops.</p>Tivo for $1602004-01-16T01:00:00-10:002004-01-16T01:00:00-10:00larrytag:knowing.net,2004-01-16:/posts/2004/01/tivo-for-160/<p>In other Amazon Friday Sale news, they've got a <a href="https://www.amazon.com/exec/obidos/tg/detail/-/B00008BREC/ref%3dpd_luc_mri/103-7977355-9498202%3fv%3dglance%26s%3delectronics%26me%3dATVPDKIKX0DER%26st%3d*">Tivo Series 2 40 for \<span class="math">\(214 plus a \\)</span>50 rebate</a>. (Hmmm... actually, Tivo.com has refurbished units for \<span class="math">\(150). You still have to pay \\)</span>300 for the service and \$99 if you want to play MP3s.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican …</script><p>In other Amazon Friday Sale news, they've got a <a href="https://www.amazon.com/exec/obidos/tg/detail/-/B00008BREC/ref%3dpd_luc_mri/103-7977355-9498202%3fv%3dglance%26s%3delectronics%26me%3dATVPDKIKX0DER%26st%3d*">Tivo Series 2 40 for \<span class="math">\(214 plus a \\)</span>50 rebate</a>. (Hmmm... actually, Tivo.com has refurbished units for \<span class="math">\(150). You still have to pay \\)</span>300 for the service and \$99 if you want to play MP3s.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>A penny saved...2004-01-16T00:45:00-10:002004-01-16T00:45:00-10:00larrytag:knowing.net,2004-01-16:/posts/2004/01/a-penny-saved/<p>If you've been putting off that decision to jump into non-linear editing, <strong>now is the time!</strong></p>Moving pictures2004-01-15T08:28:00-10:002004-01-15T08:28:00-10:00larrytag:knowing.net,2004-01-15:/posts/2004/01/moving-pictures/<p>I wanted to demonstrate the SpamBayes plug-in for the school, and I realized I ought to try the screen-capture feature of the free Windows Media Encoder 9. The results were stunning. <em>via</em> [Jon's Radio]</p>
<p>I used that codec for a video on programming the Tablet PC I did last year …</p><p>I wanted to demonstrate the SpamBayes plug-in for the school, and I realized I ought to try the screen-capture feature of the free Windows Media Encoder 9. The results were stunning. <em>via</em> [Jon's Radio]</p>
<p>I used that codec for a video on programming the Tablet PC I did last year. It's amazingly compact. I don't think one can dynamically switch codecs in the middle of a video, though, so you can't have a talking- head segment followed by a screenshot video with segment-specific codecs. Pity.</p>'Lonestar' Alpha Now Available on BetaPlace2004-01-15T07:54:00-10:002004-01-15T07:54:00-10:00larrytag:knowing.net,2004-01-15:/posts/2004/01/lonestar-alpha-now-available-on-betaplace/<p>Neowin is reporting that Microsoft has broadened the alpha test of its next-gen Tablet PC operating system, "Lonestar," to all BetaPlace testers. Last week, Microsoft execs told us to expect Lonestar to go beta in late February or early March. The final Lonestar release target is still June.<br>
[Microsoft Watch …</p><p>Neowin is reporting that Microsoft has broadened the alpha test of its next-gen Tablet PC operating system, "Lonestar," to all BetaPlace testers. Last week, Microsoft execs told us to expect Lonestar to go beta in late February or early March. The final Lonestar release target is still June.<br>
[Microsoft Watch from Mary Jo Foley]</p>HP Makes $2.5B in Linux-Based Revenue2004-01-15T05:22:00-10:002004-01-15T05:22:00-10:00larrytag:knowing.net,2004-01-15:/posts/2004/01/hp-makes-25b-in-linux-based-revenue/<p>... this reminds me of a conversation I had with a friend a few days ago in which he asked if I knew of a company that provided technical support for LAMP-based small businesses. "Don't know of any," I said, dollar signs appearing in my eyes. (Which relates to my suspicion …</p><p>... this reminds me of a conversation I had with a friend a few days ago in which he asked if I knew of a company that provided technical support for LAMP-based small businesses. "Don't know of any," I said, dollar signs appearing in my eyes. (Which relates to my suspicion that there's more money to be had in freelance support than there in freelance programming.)</p>Azureus And Sun's Big Mistake.2004-01-08T02:29:00-10:002004-01-08T02:29:00-10:00larrytag:knowing.net,2004-01-08:/posts/2004/01/azureus-and-suns-big-mistake/<p>...It's a common theory that the reason that Apple isn't where Microsoft is today is because of their refusal to license the MacOS during the mid 80s....Sun's refusal to embrace native client side widgets is what allowed Microsoft to catch up to where Java is now with .Net....<em>via …</em></p><p>...It's a common theory that the reason that Apple isn't where Microsoft is today is because of their refusal to license the MacOS during the mid 80s....Sun's refusal to embrace native client side widgets is what allowed Microsoft to catch up to where Java is now with .Net....<em>via</em> [<a href="https://www.russellbeattie.com/blog/1005616.html">Russell Beattie Notebook</a>]</p>
<p>I think Russell's right. <em>The</em> most striking thing to me when I jumped from Java to .NET was how absolutely foolish I felt for having abandoned native OS widgets and integration. One of my most memorable dot-com experiences was bringing on a contract programmer at \$150 / hour to implement a single custom widget in Swing and having him fail to do it in four weeks. Even though it was complex, I'd estimate I could duplicate it in 3-5 days with .NET.</p>The Big 0x282004-01-07T23:20:00-10:002004-01-07T23:20:00-10:00larrytag:knowing.net,2004-01-07:/posts/2004/01/the-big-0x28/<p>On my 30th birthday, I left Tina, whose hair was just beginning to grow back from her bone-marrow transplant, at 7:15 in the morning to commute into San Francisco to a job I'd get back from at 6:30 at night. On my 40th birthday, Tina and I went …</p><p>On my 30th birthday, I left Tina, whose hair was just beginning to grow back from her bone-marrow transplant, at 7:15 in the morning to commute into San Francisco to a job I'd get back from at 6:30 at night. On my 40th birthday, Tina and I went snowboarding in the middle of the week because we can.</p>
<p>I have less money now than I did when I was 30, but I have more fun. No regrets...well, actually, if I never met certain people I ended up in business with I'd be happier, have a more charitable view of human nature, and be significantly richer, against which the added wisdom I gained seems paltry compensation, but for expository purposes: No regrets.</p>
<p>My 50th birthday will be on a Monday. I think Tina and I will go SCUBA diving.</p>Language Divergence In Whidbey2004-01-04T00:16:00-10:002004-01-04T00:16:00-10:00larrytag:knowing.net,2004-01-04:/posts/2004/01/language-divergence-in-whidbey/<p>Language divergence in Whidbey</p>Language Divergence In Whidbey My Latest Column For SDTimes2004-01-04T00:15:00-10:002004-01-04T00:15:00-10:00larrytag:knowing.net,2004-01-04:/posts/2004/01/language-divergence-in-whidbey-my-latest-column-for-sdtimes/<p>Language Divergence in Whidbey -- my latest column for SDTimes</p>Types, leaky abstractions, and the best book on ASP.NET for pragmatic programmers2003-12-30T23:59:00-10:002003-12-30T23:59:00-10:00larrytag:knowing.net,2003-12-30:/posts/2003/12/types-leaky-abstractions-and-the-best-book-on-aspnet-for-pragmatic-programmers/<p>Don Box, in a comment, clarified that it's "that having to <em>define</em> a new type just to write a program [is] the daunting part," for casual programmers. Absolutely. There's a certain amount of bookkeeping that takes the casual programmer out of the task-solving "flow." This is a perfectly legitimate beef …</p><p>Don Box, in a comment, clarified that it's "that having to <em>define</em> a new type just to write a program [is] the daunting part," for casual programmers. Absolutely. There's a certain amount of bookkeeping that takes the casual programmer out of the task-solving "flow." This is a perfectly legitimate beef: a parallel to the complaint that checked exceptions interrupt "flow." </p>
<p>In Danny Boyd's original post, he said that he was seeing "a number of PHP, Perl, and MySQL books appearing on the shelves of my coworkers." This is a perfect example of the <a href="https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/">Law of Leaky Abstractions</a> applying to Microsoft's Visual Studio .NET. VS.NET attempts to "hide the complexity" of what is, in fact, an architecture that's quite elegant. Since the vast majority of Microsoft documentation conflates VS.NET with "programming .NET" and VS.NET is not presenting a satisfying foundation from which to work, Danny's coworkers are turning away from ASP.NET itself. Danny should buy them all a copy of Fritz Onion's <em>Essential ASP.NET</em> book, which is a "<a href="http://www.drdobbs.com/architecture-and-design">Jolt Award</a>" nominee for best technical book of the year, and whose "Chapter 1. Architecture" is <em>exactly</em> the concise explanation that Boyd's coworkers need.</p>
<p>Open question: would a refactoring IDE <em>help or hinder</em> such casual programmers? Help because of the ease of "doing the right thing", or hinder because of the "just trust us while we do some magic" factor? </p>
<p><img alt="Shop at Amazon.com" height="240" src="http://rcm-images.amazon.com/images/G/01/rcm/120x240.gif" width="120"></p>Nobody expects the object-oriented inquisition!2003-12-30T10:53:00-10:002003-12-30T10:53:00-10:00larrytag:knowing.net,2003-12-30:/posts/2003/12/nobody-expects-the-object-oriented-inquisition/<p>Danny Boyd has written an open letter to Microsoft challenging them on the subject of scripting languages. More specifically, he worries about the "need to produce simple, procedural, functional web-based database applications. I'm talking here about HTML forms that post or retrieve data for editing."</p>
<p>Don Box, where I got …</p><p>Danny Boyd has written an open letter to Microsoft challenging them on the subject of scripting languages. More specifically, he worries about the "need to produce simple, procedural, functional web-based database applications. I'm talking here about HTML forms that post or retrieve data for editing."</p>
<p>Don Box, where I got that link, concurs with the general sentiment and cuts to the quick with the statement "many of us underestimate how big a deal type definitions are...."</p>
<p>What's interesting, of course, is that to those of us who've drunk the Kool-Ade, types (roughly: what object-oriented programming calls a "class") and events seem to make thinking about programs <em>easier</em>. When you think about a variable, don't you think about the values it can have and the ways you can manipulate it? <em>That's</em> its type. It's just that there are a <em>lot</em> of applications where the only two types that are important are integers, strings, and dates. Three important types: integers, strings, dates, and floating point. Four! Four important types: integers, strings, dates, floating point numbers, and currency... Wait, I'll come in again...</p>Lonestar, the alpha version of the forthcoming update to the Tablet PC OS, is amazing2003-12-29T23:49:00-10:002003-12-29T23:49:00-10:00larrytag:knowing.net,2003-12-29:/posts/2003/12/lonestar-the-alpha-version-of-the-forthcoming-update-to-the-tablet-pc-os-is-amazing/<p>I normally like to be quite specific when reviewing software, and I'm still under NDA regarding Lonestar, but I can make some general comments safely: the handwriting recognition in Lonestar is transforming the way I write. It's a combination of three things: dramatic improvements in handwriting recognition (I doubt many …</p><p>I normally like to be quite specific when reviewing software, and I'm still under NDA regarding Lonestar, but I can make some general comments safely: the handwriting recognition in Lonestar is transforming the way I write. It's a combination of three things: dramatic improvements in handwriting recognition (I doubt many <em>people</em> could read my cursive version of the word "hemorrhage"); the ability to rapidly correct text using a variety of mechanisms (choose an alternate recognition, change individual letters, scratch out and write anew); and a writing window / area that expands as you finish a line of writing.</p>
<p>Writing with a pen bestows a physicality to every letter, makes every word a small unity of expression. The Wacom digitizer tip has a scratchy resistance that's remarkably like the feel of a fountain pen (albeit in an ugly plastic barrel that's too thin and lacks heft). While the keyboard is great for keeping up with a rush of thoughts, a pen is by far the superior instrument for deliberate writing. (Also, for editing -- the Tablet OS already supports the gamut of proofing marks but I'm afraid that we'll have to wait for Word 2006 or some bold entrepreneur before the momentous marrriage of the blue pencil and WYSIWYG.)</p>
<p>A couple months ago, I wrote an 800-word column in longhand using Microsoft Journal; about 10 separate Journal pages (the resolution of the Tablet PC and the parallax challenge of the display forces you to write two or three times larger than how you would on paper). Suffice it to say that transforming the result into a Word draft was a considerable task. In the past few weeks, I've written more than 10 times that length directly into Word with scarcely a bobble (by far the greatest annoyance, and one that I hope will be cleared up before Lonestar is released, is that a space is not automatically inserted between the last word on a handwritten line and the first word of a subsequent line).</p>
<p>Lonestar, when it becomes available, will be a user-installable patch. The alpha is tiny -- about 10MB. If you're buying a laptop, you're <em>nuts</em> not buying a Tablet PC.</p>Visual Studio .NET 2003 Automation Samples2003-12-29T22:13:00-10:002003-12-29T22:13:00-10:00larrytag:knowing.net,2003-12-29:/posts/2003/12/visual-studio-net-2003-automation-samples/<blockquote>
<p>These code samples show you how to build VSMacros projects, add–ins, and wizards to make your teams more productive and to bend Visual Studio .NET 2003 to the ways you like to work. <em>via</em> [Microsoft Download Center]</p>
</blockquote>
<p>The download is all well and good, but what I love is …</p><blockquote>
<p>These code samples show you how to build VSMacros projects, add–ins, and wizards to make your teams more productive and to bend Visual Studio .NET 2003 to the ways you like to work. <em>via</em> [Microsoft Download Center]</p>
</blockquote>
<p>The download is all well and good, but what I love is that you just <em>know</em> that the original description used the phrase "bend VS.NET to your will" and was toned down. Other interesting recent MS downloads have been the Windows Media Player SDK MSDE Deployment Toolkit and an example of modifying the Today screen from the .NET CF.</p>Smart Display is dead2003-12-27T09:20:00-10:002003-12-27T09:20:00-10:00larrytag:knowing.net,2003-12-27:/posts/2003/12/smart-display-is-dead/<p>Way back in October of 2002 we predicted that Smart Display, Microsoft's operating system for wireless monitor that can detach and double as dumb tablets,... <em>via</em> [Gizmodo]</p>Okay Im Just Going To Say It I Wasnbspa Little Disappointed By Return Of The KingnbspMaybe It Was Just That I H2003-12-23T00:36:00-10:002003-12-23T00:36:00-10:00larrytag:knowing.net,2003-12-23:/posts/2003/12/okay-im-just-going-to-say-it-i-wasnbspa-little-disappointed-by-return-of-the-kingnbspmaybe-it-was-just-that-i-h/<p>Okay, I'm just going to say it: I was a little disappointed by <em>Return of the King</em>. Maybe it was just that I held my expectations so low for <em>The Fellowship of the Ring</em> while my expectations were sky-high for <em>RotK</em>, but c'mon, once the ring is destroyed, put the …</p><p>Okay, I'm just going to say it: I was a little disappointed by <em>Return of the King</em>. Maybe it was just that I held my expectations so low for <em>The Fellowship of the Ring</em> while my expectations were sky-high for <em>RotK</em>, but c'mon, once the ring is destroyed, put the hobbit on a boat and roll the credits, y'know?</p>RealMerit RealNetworks Allege That From October 2001 To March2003-12-19T01:32:00-10:002003-12-19T01:32:00-10:00larrytag:knowing.net,2003-12-19:/posts/2003/12/realmerit-realnetworks-allege-that-from-october-2001-to-march/<p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1138232944655443700006904060829898847701%26anid%3D1138232944655443700006904060829898847701&u=1138232944655443700006904060829898847701&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553670844872&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1138232944655443700006904060829898847701%26anid%3D1138232944655443700006904060829898847701&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">RealMerit</a>? RealNetworks allege that "From October 2001 to March 2003, for example, Microsoft's 'tying' ensured that Windows Media Player was preinstalled on about 95 percent of PCs shipped...RealNetworks' digital media player was preinstalled on less than 2 percent....Microsoft used contractual restrictions and financial incentives to 'force PC makers …</p><p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1138232944655443700006904060829898847701%26anid%3D1138232944655443700006904060829898847701&u=1138232944655443700006904060829898847701&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553670844872&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1138232944655443700006904060829898847701%26anid%3D1138232944655443700006904060829898847701&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">RealMerit</a>? RealNetworks allege that "From October 2001 to March 2003, for example, Microsoft's 'tying' ensured that Windows Media Player was preinstalled on about 95 percent of PCs shipped...RealNetworks' digital media player was preinstalled on less than 2 percent....Microsoft used contractual restrictions and financial incentives to 'force PC makers to accept Windows PC operating systems with the bundled Windows Media Player and to restrict the ability of PC makers to preinstall or promote competing digital media players.'....PC makers told Real that their contracts with Microsoft kept them from removing or changing the status of a Windows Media Player; promoting RealOne subscription services during the first run of a new PC; and providing a desktop icon for Real Networks."</p>Scobles Learning To Program In C Next Year Im Going2003-12-17T01:32:00-10:002003-12-17T01:32:00-10:00larrytag:knowing.net,2003-12-17:/posts/2003/12/scobles-learning-to-program-in-c-next-year-im-going/<p>Scoble's learning to program in C#. Next year I'm going to be writing a book for people learning to program. Lately I've been thinking <em>a lot</em> that it might be based on manipulating Office from C#. The gap between "Hello, World!" and "controlling my computer to do cool things" is …</p><p>Scoble's learning to program in C#. Next year I'm going to be writing a book for people learning to program. Lately I've been thinking <em>a lot</em> that it might be based on manipulating Office from C#. The gap between "Hello, World!" and "controlling my computer to do cool things" is too large for learners -- who wants to struggle with the concept of recursion when the payoff is "So now you can calculate factorials!" Originally, I was thinking of .NET Terrarium as the context, and that does have advantages but, on the other hand, if you're manipulating Word or Excel or Outlook, you're tying the learning directly to the tools people use every day.</p>
<p>The challenge is making enough money during the day so that I can pull off this project <em>and</em> <a href="https://www.hugedomains.com/domain_profile.cfm?d=inkpositive&e=com">InkPositive</a> in my spare time. I've passed up some significant opportunities to make a run at these projects (which I hope to <em>eventually</em> profit from), so I've got some exciting months ahead...</p>Jeroen is my hero2003-12-11T23:34:00-10:002003-12-11T23:34:00-10:00larrytag:knowing.net,2003-12-11:/posts/2003/12/jeroen-is-my-hero/<p><a href="http://weblog.ikvm.net/PermaLink.aspx?guid=9A5EE106-E493-4B5B-A80D-F52AF817C493" title="http://weblog.ikvm.net/permalink.aspx/9a5ee106-e493-4b5b-a80d-f52af817c493">Jeroen Frijters wrote a C# program</a> that displays an artificial horizon on his new Thinkpad T41p by reverse-engineering the [IOCTL]{.caps} that corresponds to the data provided by the built-in accelerometer in his T41p. <em>via </em>[iunknown.com]</p>
<p>I think he should "take it to the next level" and write a …</p><p><a href="http://weblog.ikvm.net/PermaLink.aspx?guid=9A5EE106-E493-4B5B-A80D-F52AF817C493" title="http://weblog.ikvm.net/permalink.aspx/9a5ee106-e493-4b5b-a80d-f52af817c493">Jeroen Frijters wrote a C# program</a> that displays an artificial horizon on his new Thinkpad T41p by reverse-engineering the [IOCTL]{.caps} that corresponds to the data provided by the built-in accelerometer in his T41p. <em>via </em>[iunknown.com]</p>
<p>I think he should "take it to the next level" and write a video game that involves rolling virtual marbles around a maze.</p>InfoPath And XAML The Scales Fell Off My Eyes This Morning When I Was Answering An Email To My Recent SD Times Articl2003-12-11T22:46:00-10:002003-12-11T22:46:00-10:00larrytag:knowing.net,2003-12-11:/posts/2003/12/infopath-and-xaml-the-scales-fell-off-my-eyes-this-morning-when-i-was-answering-an-email-to-my-recent-sd-times-articl/<p>InfoPath and XAML</p>
<p>The scales fell off my eyes this morning when I was answering an email to my recent SD Times article discussing InfoPath. I wrote that column before the PDC and hadn't really thought about it since (it's mostly a criticism of InfoPath's licensing model). But now I …</p><p>InfoPath and XAML</p>
<p>The scales fell off my eyes this morning when I was answering an email to my recent SD Times article discussing InfoPath. I wrote that column before the PDC and hadn't really thought about it since (it's mostly a criticism of InfoPath's licensing model). But now I see the obvious: if InfoPath 2006 (or whatever) generated XAML, the result would be the exact "stepping stone" between power user and programmer whose absence I lamented in the article.</p>Why does Mr. Tetris work for MS?2003-12-11T04:03:00-10:002003-12-11T04:03:00-10:00larrytag:knowing.net,2003-12-11:/posts/2003/12/why-does-mr-tetris-work-for-ms/<blockquote>
<p><em>[W]hat does the inventor of Tetris do for MS?</em></p>
<p>I don't want to make any stupid assumptions, but my guess is that he designs the cubicle layouts while listening to catchy music... <em>via</em> [Neopoleon.com]</p>
</blockquote>
<p>\<</p>
<p>p xmlns="http://www.w3.org/1999/xhtml"> Rory's witty.</p>Python on .NET can go fast2003-12-09T22:46:00-10:002003-12-09T22:46:00-10:00larrytag:knowing.net,2003-12-09:/posts/2003/12/python-on-net-can-go-fast/<p>::: {dir="ltr" style="MARGIN-RIGHT: 0px"}
Jim Hugunin, of AspectJ and JPython/Jython, has made a preliminary version of Python that runs quickly on .NET. This is a very big deal big in that to date the only third-party dynamic languages for .NET have been conspicuously low-performance. At the "Alternate Languages …</p><p>::: {dir="ltr" style="MARGIN-RIGHT: 0px"}
Jim Hugunin, of AspectJ and JPython/Jython, has made a preliminary version of Python that runs quickly on .NET. This is a very big deal big in that to date the only third-party dynamic languages for .NET have been conspicuously low-performance. At the "Alternate Languages" BoF I hosted at the PDC there was clearly a little nervousness that some unknown "mistakes had been made." So Hugunin's "IronPython" is an important existence proof. But it's not available yet -- he sent a tantalizing message to the .NET Language Dev mailing list and then says "Oh, by the way, I'm off for a month..." What a tease!
:::</p>Strong AI, and back to the moon...2003-12-09T08:17:00-10:002003-12-09T08:17:00-10:00larrytag:knowing.net,2003-12-09:/posts/2003/12/strong-ai-and-back-to-the-moon/<p>Rory wrote a post about strong AI and whether we should spend money there rather than going back to the moon to which Eric replied "...the best goal to push for is solar power satellites...."</p>
<p>I think that solar power satellites is a world-transforming goal that <em>requires </em>government funding, while …</p><p>Rory wrote a post about strong AI and whether we should spend money there rather than going back to the moon to which Eric replied "...the best goal to push for is solar power satellites...."</p>
<p>I think that solar power satellites is a world-transforming goal that <em>requires </em>government funding, while strong AI is a world-transforming goal that "just" would be <em>accelerated</em> by government funding. While Eric mentions AI's failed promises from the 80s, that was (a) 10 Moore's Generations ago and (b) no one seriously promotes "top-down" symbolic AI as the route forward (except Doug Lenat, who really ought to admit that <a href="http://www.opencyc.org/">Cyc</a> is <em>never</em> going to work). As the 100th anniversary of flight is just around the corner, I hope that some bicycle mechanics are tackling machine vision. As Crick <a href="https://www.amazon.com/exec/obidos/tg/detail/-/0684801582/qid%3d1071022598//ref%3dsr_8_xs_ap_i2_xgl14/102-1874475-7688924%3fv%3dglance%26s%3dbooks%26n%3d507846">said</a>, it's the key...</p>Discover of useful APIs2003-12-09T00:00:00-10:002003-12-09T00:00:00-10:00larrytag:knowing.net,2003-12-09:/posts/2003/12/discover-of-useful-apis/<p>In a post that's mostly about resource management, Eric Gunnerson mentions an API that I didn't know existed:</p>
<p>desktopWindow.Image = Win32Window.DesktopAsBitmap;</p>
<p>This is quite apropos the discussion of novice versus expert users. Here I've been a user of the .NET BCL for more than 2 years and when I …</p><p>In a post that's mostly about resource management, Eric Gunnerson mentions an API that I didn't know existed:</p>
<p>desktopWindow.Image = Win32Window.DesktopAsBitmap;</p>
<p>This is quite apropos the discussion of novice versus expert users. Here I've been a user of the .NET BCL for more than 2 years and when I was recently faced with the desire to recreate a desktop effect by compositing, I was stumped (the effect being recreating ink antialiased over a bitmap, but that's beside the point). If you want to be the greatest UI designer of your generation, figure out how to facilitate discovery of alternate paths to accomplish a goal. (There <em>must</em> be a solution that doesn't require a journey into the impenetrable thickets of natural language query. Perhaps a Bayesian analysis of APIs used in a large corpus such as SourceForge / GotDotNet projects...)</p>
<p>(BTW, any discussion of "beginner" versus "advanced" users should take into account that there should be a continuum where "high end" use is Eric's "So I had a problem with resource management that I fixed by writing a program..." )</p>The average user is like a blue-square skier2003-12-08T23:28:00-10:002003-12-08T23:28:00-10:00larrytag:knowing.net,2003-12-08:/posts/2003/12/the-average-user-is-like-a-blue-square-skier/<p>Like skiers, the average user is a permanent intermediate, neither beginner nor expert. It is a mistake for UI designers to heed debates such as going on in Scoble's comments on UI requests for Longhorn. Even more dangerously, intermediate skills are easy to overlook in usability labs: sit a person …</p><p>Like skiers, the average user is a permanent intermediate, neither beginner nor expert. It is a mistake for UI designers to heed debates such as going on in Scoble's comments on UI requests for Longhorn. Even more dangerously, intermediate skills are easy to overlook in usability labs: sit a person down in front of a new application and they will act like a skier on their first run of the new year -- either extremely tentative and "beginner-like" or bold and "expert-like."</p>
<p>But <em>after</em> the first couple sessions with an application, people perform <em>particular tasks</em> with facility. <em>Good</em> UI design does not force the user to categorize themselves as "beginner," "intermediate," or "expert" (as Richard Tallent says, this argues against layered UIs). The key to <em>great</em> UI design is to facilitate the skills of routine tasks to the demands of new tasks: look to videogames for inspiration in the way that a small number of "skills" can be combined to tackle complex tasks.</p>
<p>I first heard the "skier" metaphor from <a href="http://www.foruse.com/">Larry Constantine and Lucy Lockwood</a>.</p>Intel Research Has Released An Open Source Machine Learning Toolkit Base2003-12-08T03:02:00-10:002003-12-08T03:02:00-10:00larrytag:knowing.net,2003-12-08:/posts/2003/12/intel-research-has-released-an-open-source-machine-learning-toolkit-base/<p>Intel Research has released an Open Source <a href="https://sourceforge.net/projects/openpnl/">Machine Learning toolkit</a> based on Bayesian learning. (Hmmm... at the moment, they don't seem to have deployed any... oh, what is the word? ... files.)</p>I Promised Myself Id Let My Cold Burn Itself Out By Taking A Day Off And Making A 2003 Highlights Home Video For The Family2003-12-07T22:43:00-10:002003-12-07T22:43:00-10:00larrytag:knowing.net,2003-12-07:/posts/2003/12/i-promised-myself-id-let-my-cold-burn-itself-out-by-taking-a-day-off-and-making-a-2003-highlights-home-video-for-the-family/<p>I promised myself I'd let my cold burn itself out by taking a day off and making a "2003 highlights" home video for the family. Instead, I ended up writing an application that allows you to create Premiere batch capture lists on your Tablet PC. I can't believe there's another …</p><p>I promised myself I'd let my cold burn itself out by taking a day off and making a "2003 highlights" home video for the family. Instead, I ended up writing an application that allows you to create Premiere batch capture lists on your Tablet PC. I can't believe there's another person on Earth who wants such a utility, but if I'm wrong, drop me an <a href="mailto:lobrien@thinkingin.net">email</a>.</p>Keith Pleas Has Wondered About What Language Features C2003-12-05T02:55:00-10:002003-12-05T02:55:00-10:00larrytag:knowing.net,2003-12-05:/posts/2003/12/keith-pleas-has-wondered-about-what-language-features-c/<p>Keith Pleas has <a href="https://weblogs.asp.net/kpleas/41363">wondered about</a> what <em>language</em> features could be put in Visual Basic .NET that would differentiate it from C# (as opposed to <em>tool</em> features such as Edit-and-Continue). My suggestion would be rules. If C# can become Scheme, why can't VB.NET become Prolog?</p>Dare Obasanjo Sez2003-12-05T02:48:00-10:002003-12-05T02:48:00-10:00larrytag:knowing.net,2003-12-05:/posts/2003/12/dare-obasanjo-sez/<p>Dare Obasanjo sez "...Based on my experiences working with syndication software as a hobbyist developer for the past year is that the ATOM syndication format does not offer much (if anything) over RSS 2.0 but that the ATOM API looks to be a significant step forward compared to previous …</p><p>Dare Obasanjo sez "...Based on my experiences working with syndication software as a hobbyist developer for the past year is that the ATOM syndication format does not offer much (if anything) over RSS 2.0 but that the ATOM API looks to be a significant step forward compared to previous attempts at weblog editting/management APIs...."</p>
<p>I've come to a similar conclusion about RSS 2.0 vs. ATOM syndication but am still not sure about APIs.</p>RSS Feed Irritations2003-12-04T22:43:00-10:002003-12-04T22:43:00-10:00larrytag:knowing.net,2003-12-04:/posts/2003/12/rss-feed-irritations/<blockquote>
<p>Please, please, please, provide away to aggregate the whole text of the post ?</p>
<p>Some folks (like <a href="http://coachspot.blogspot.com/" title="http://coachspot.blogspot.com/">Tim</a>) have no control as something else does the RSS. Some folks (like <a href="https://martinfowler.com/bliki/" title="http://martinfowler.com/bliki/">Martin</a>) provide the whole text. But some folks only provide an "excerpt" (cant think of an example offhand) and others (Keith …</p></blockquote><blockquote>
<p>Please, please, please, provide away to aggregate the whole text of the post ?</p>
<p>Some folks (like <a href="http://coachspot.blogspot.com/" title="http://coachspot.blogspot.com/">Tim</a>) have no control as something else does the RSS. Some folks (like <a href="https://martinfowler.com/bliki/" title="http://martinfowler.com/bliki/">Martin</a>) provide the whole text. But some folks only provide an "excerpt" (cant think of an example offhand) and others (Keith springs to mind) provide only headlines.</p>
<p>It's pure and good to have a low bandwidth headline service, but I cant then aggregate and read on the train. Is this a case of premature optimisation ?</p>
<div>
<p><em>via</em> [TWELVE|71 : dull. dull. dull.]</p>
</div>
</blockquote>
<div>
+1. It's one thing when (like me) you're occasionally inlining graphics (in my case, images generated by ink strokes), but IMO, the bandwidth costs are insignificant versus the time lost clicking and waiting for a Web browser to open and a page to render and blah blah blah...
</div>Floating Point Arithmetic2003-12-03T04:43:00-10:002003-12-03T04:43:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/floating-point-arithmetic/<p>The canonical discussion of FP arithmetic (for this audience, at least) is a 1991 paper by David Goldberg titled "What Every Computer Scientist Should Know About Floating-Point Arithmetic" <em>via</em> [Eric Gunnerson's C# Compendium]</p>PacMan And Space Invaders As Excel Spreadsheets Wow And I Was Proud Of Doi2003-12-03T04:16:00-10:002003-12-03T04:16:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/pacman-and-space-invaders-as-excel-spreadsheets-wow-and-i-was-proud-of-doi/<p>PacMan and Space Invaders as Excel spreadsheets. Wow, and I was proud of doing Conway's Life in Lotus 1-2-3 and CoreWars in Paradox.</p>I Wrote The Following Radio Userland Macro So That I Can Put Blog Entries In Different Categories Into Different Places On A2003-12-03T03:41:00-10:002003-12-03T03:41:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/i-wrote-the-following-radio-userland-macro-so-that-i-can-put-blog-entries-in-different-categories-into-different-places-on-a/<p>I wrote the following Radio Userland macro so that I can put blog entries in different categories into different places on a page. So, for instance, blog entries in the category "Published" are what generate the "Recent Writing" list here on the right. It may be that there's some built-in …</p><p>I wrote the following Radio Userland macro so that I can put blog entries in different categories into different places on a page. So, for instance, blog entries in the category "Published" are what generate the "Recent Writing" list here on the right. It may be that there's some built-in macro that allows this sort of thing, but if there is, I couldn't figure it out. If there's not, and you want the code, add this code to your template, replacing the string "Published" with a category of your choosing. (Comments, of course, appreciated) :</p>
<p>\<%<br>
local(ret = "");<br>
local(posts);<br>
local(post);<br>
local(publishedItems = {});<br>
local(i = 1);<br>
posts = \@weblogData.posts;<br>
for post in posts {<br>
if(sizeof(post\^.categories) > 0) {<br>
for cat in \@post\^.categories {<br>
if nameof(cat\^) == "Published" {<br>
publishedItems[i] = "\<p>" + string(post\^.text) + "\</p>";<br>
i = i + 1}}}};<br>
for j = sizeof(publishedItems) downto 1 {<br>
ret = ret + publishedItems[j]};<br>
return ret<br>
%></p>A Perfect Demo2003-12-03T03:36:00-10:002003-12-03T03:36:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/a-perfect-demo/<p>A Perfect Demo</p>Is InfoPath The New Excel2003-12-03T03:36:00-10:002003-12-03T03:36:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/is-infopath-the-new-excel/<p>Is InfoPath the New Excel?</p>No Reservations About NET2003-12-03T03:35:00-10:002003-12-03T03:35:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/no-reservations-about-net/<p>No Reservations About .NET</p>The Joy Of XML2003-12-03T03:35:00-10:002003-12-03T03:35:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/the-joy-of-xml/<p>The Joy of XML</p>Java Eye For The NET Guy2003-12-03T03:34:00-10:002003-12-03T03:34:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/java-eye-for-the-net-guy/<p>Java Eye for the .NET Guy</p>Review Of Borlands C Builder 102003-12-03T03:34:00-10:002003-12-03T03:34:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/review-of-borlands-c-builder-10/<p>Review of Borland's C# Builder 1.0</p>Waiting For Whidbey2003-12-03T03:33:00-10:002003-12-03T03:33:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/waiting-for-whidbey/<p>Waiting for Whidbey</p>Academic Issues2003-12-03T03:32:00-10:002003-12-03T03:32:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/academic-issues/<p>Academic Issues</p>Netscape We Hardly Knew Ye2003-12-03T03:32:00-10:002003-12-03T03:32:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/netscape-we-hardly-knew-ye/<p>Netscape, We Hardly Knew Ye</p>Programming Sabre With Java C And2003-12-03T03:31:00-10:002003-12-03T03:31:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/programming-sabre-with-java-c-and/<p>Programming Sabre with Java, C#, and XML</p>Recommended NET Programming Books2003-12-03T03:31:00-10:002003-12-03T03:31:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/recommended-net-programming-books/<p>Recommended .NET Programming Books</p>Bayesian SpamFiltering2003-12-03T03:30:00-10:002003-12-03T03:30:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/bayesian-spamfiltering/<p>Bayesian Spam-Filtering</p>Best Practices For NET Architecture2003-12-03T03:30:00-10:002003-12-03T03:30:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/best-practices-for-net-architecture/<p>Best Practices for .NET Architecture</p>Windows Server 2003 As An Application Server2003-12-03T03:29:00-10:002003-12-03T03:29:00-10:00larrytag:knowing.net,2003-12-03:/posts/2003/12/windows-server-2003-as-an-application-server/<p>Windows Server 2003 as an Application Server</p>Oh Yeah Another Thing I Bought And Love Is MusicMatch Radio It Does A Great Job Of Cr2003-12-02T04:24:00-10:002003-12-02T04:24:00-10:00larrytag:knowing.net,2003-12-02:/posts/2003/12/oh-yeah-another-thing-i-bought-and-love-is-musicmatch-radio-it-does-a-great-job-of-cr/<p>Oh yeah, another thing I bought and love is <a href="https://www.yahoo.com/entertainment/music/">MusicMatch Radio</a>. It does a great job of creating a streaming radio station that matches my taste. I can't figure out how to exclude a specific artist (I can understand <em>why</em> it thinks I'd like Sonic Youth, but I just don't …</p><p>Oh yeah, another thing I bought and love is <a href="https://www.yahoo.com/entertainment/music/">MusicMatch Radio</a>. It does a great job of creating a streaming radio station that matches my taste. I can't figure out how to exclude a specific artist (I can understand <em>why</em> it thinks I'd like Sonic Youth, but I just don't), but other than that, it's great.</p>I Just Came Across An Advertisement For Diskeeper 8 I Bought This 45 Util2003-12-02T04:19:00-10:002003-12-02T04:19:00-10:00larrytag:knowing.net,2003-12-02:/posts/2003/12/i-just-came-across-an-advertisement-for-diskeeper-8-i-bought-this-45-util/<p>I just came across an advertisement for <a href="http://www.condusiv.com/">Diskeeper 8</a>. I bought this \$45 utility about a month ago and recommend it: it noticeably improved the performance of my laptop.</p>New and Notable 252003-12-02T04:03:00-10:002003-12-02T04:03:00-10:00larrytag:knowing.net,2003-12-02:/posts/2003/12/new-and-notable-25/<p>Stan Lippman...is now blogging!....His first blog, The Revised C++ Language Design Supporting .NET -- Part 1 is a must read. <em>via</em> [Sam Gentile's Blog]</p>
<p>If you're a C++ programmer, you know who Stan Lippman is.</p>Use a rule engine for rules-based processing2003-12-02T03:49:00-10:002003-12-02T03:49:00-10:00larrytag:knowing.net,2003-12-02:/posts/2003/12/use-a-rule-engine-for-rules-based-processing/<blockquote>
<p>I just saw this article on The Server Side, talking about rules assessment from within Message-Driven Beans and so on....The problem here is that the solution simply won't scale...This is why God invented rules engines like ILog, JESS and <a href="http://drools.org/" title="http://drools.org/">drools</a>. <em>via</em> [The Mountain of Worthless Information]</p>
</blockquote>
<p>~~As far …</p><blockquote>
<p>I just saw this article on The Server Side, talking about rules assessment from within Message-Driven Beans and so on....The problem here is that the solution simply won't scale...This is why God invented rules engines like ILog, JESS and <a href="http://drools.org/" title="http://drools.org/">drools</a>. <em>via</em> [The Mountain of Worthless Information]</p>
</blockquote>
<p>~~As far as I know, there's not a decent rules engine for .NET. Amazing, since .NET's separation of language and platform concerns makes it a more appealing platform for such efforts. Also, there's the not-insignificant fact that the world of business documents is Microsoft-based (Excel and Word). It's a real opportunity for a niche product.~~</p>
<p>\<</p>
<p>p dir=ltr> Oh, wait. I just got hired to write an article about InfoAgents. Never mind...</p>The December Software Development Is Themed Offshore Uproar And H2003-12-02T02:44:00-10:002003-12-02T02:44:00-10:00larrytag:knowing.net,2003-12-02:/posts/2003/12/the-december-software-development-is-themed-offshore-uproar-and-h/<p>The December <a href="http://www.drdobbs.com/architecture-and-design">Software Development</a> is themed "<strong>Offshore</strong> Uproar" and has a <em>lot</em> of food for thought. There're some telling survey results (SD has gotten very sophisticated in terms of surveys -- I think they're pretty clearly the best in the software development trade press), including this tidbit:</p>
<p>"How would you rate …</p><p>The December <a href="http://www.drdobbs.com/architecture-and-design">Software Development</a> is themed "<strong>Offshore</strong> Uproar" and has a <em>lot</em> of food for thought. There're some telling survey results (SD has gotten very sophisticated in terms of surveys -- I think they're pretty clearly the best in the software development trade press), including this tidbit:</p>
<p>"How would you rate the <strong>quality</strong> of work done by the offshore team?"</p>
<ul>
<li><strong>12%</strong> said "Of high strategic value" or "<strong>Better than in-house results.</strong>"</li>
<li><strong>56%</strong> said "<strong>Worse than in-house results</strong>" or "Unusable or a setback to progress."</li>
</ul>
<p>But "Does your company <strong>plan to continue</strong> using your offshore outsourcing vendor?"</p>
<ul>
<li><strong>90%</strong> say <strong>yes</strong>.</li>
</ul>
<p>There's a saying that "Everyone has a plan until they get hit." I have to admit I have a queasy feeling of recognition: everyone's a free market capitalist until their industry gets commoditized.</p>nbspDuring A Chat With John Montgomery Yesterday He Tangentially Reveal2003-11-24T22:44:00-10:002003-11-24T22:44:00-10:00larrytag:knowing.net,2003-11-24:/posts/2003/11/nbspduring-a-chat-with-john-montgomery-yesterday-he-tangentially-reveal/<p>During a chat with John Montgomery yesterday, he tangentially revealed a stunning number: according to Microsoft, there are more than 7 million "hobbyist programmers" in the US alone. Not professionals, not students, not "macro kings and queens," not sysadmins with a knowledge of Perl, but flat-out hobbyists.</p>
<p>I still don't …</p><p>During a chat with John Montgomery yesterday, he tangentially revealed a stunning number: according to Microsoft, there are more than 7 million "hobbyist programmers" in the US alone. Not professionals, not students, not "macro kings and queens," not sysadmins with a knowledge of Perl, but flat-out hobbyists.</p>
<p>I still don't know if I can believe that, not because the idea of recreational programming is odd, but because such a market is absolutely unserved. Geez, it makes me want to launch a magazine. ("Magazine" being another way of saying "Website that pays the bills").</p>Algorithm complexity and modern CPU's2003-11-23T23:06:00-10:002003-11-23T23:06:00-10:00larrytag:knowing.net,2003-11-23:/posts/2003/11/algorithm-complexity-and-modern-cpus/<p>Jan Gray wrote an excellent essay ... My favorite quote from this piece is "This scenario is so bad and so common that the microprocessor vendors use 80% of their transistor budgets for on-chip caches -- Intel as glorified [SRAM]{.caps} vendor.". <em>via</em> [iunknown.com]</p>
<p>This echos a favorite theme of mine …</p><p>Jan Gray wrote an excellent essay ... My favorite quote from this piece is "This scenario is so bad and so common that the microprocessor vendors use 80% of their transistor budgets for on-chip caches -- Intel as glorified [SRAM]{.caps} vendor.". <em>via</em> [iunknown.com]</p>
<p>This echos a favorite theme of mine: most discussions of performance ignore the differing costs of memory access. To the extent that people think about it, they split the world into RAM and disk, when it's much more productive to think of a series of ziggurat-like steps that extend all the way from the CPU registers to the Internet and offline storage. (BTW, the essay is a year old, which makes some of the references, especially to C#'s closure support, a little odd).</p>Most important question of the week2003-11-23T02:18:00-10:002003-11-23T02:18:00-10:00larrytag:knowing.net,2003-11-23:/posts/2003/11/most-important-question-of-the-week/<p>http://blogs.gotdotnet.com/BradA/commentview.aspx/ddedfad0-c94f-4873-9c8c-4005cd8faaa5 Should the BCL contain both generics-based collection classes (List\<T> ) AND object-containing classes? (my initial gut is that generics-only is the way to go. Better to accept some pain now than 5 years from now. )</p>
<p><em>Blogged on a Tablet PC</em></p>News Gator & Outlook 20032003-11-23T01:56:00-10:002003-11-23T01:56:00-10:00larrytag:knowing.net,2003-11-23:/posts/2003/11/news-gator-outlook-2003/<p>If you use NewsGator, and Outlook 2K3, a "search folder" set to all the folders is much faster than News Gator's top-level page.</p>
<p><em>Blogged on a Tablet PC</em></p>PDC presentations2003-11-23T01:45:00-10:002003-11-23T01:45:00-10:00larrytag:knowing.net,2003-11-23:/posts/2003/11/pdc-presentations/<blockquote>
<p>Quite a few of the presentations from this year's [PDC]{.caps} are now available in Microsoft Producer format. The nice thing is that you get videos from the demos integrated into the presentation as well. Very nice.</p>
<p>[iunknown.com]</p>
</blockquote>J2EE 1.4 spec certified - Infoworld Staff2003-11-23T01:41:00-10:002003-11-23T01:41:00-10:00larrytag:knowing.net,2003-11-23:/posts/2003/11/j2ee-14-spec-certified-infoworld-staff/<blockquote>
<p>J2EE 1.4 is now official, Sun announced this week.<br>
[<a href="https://www.infoworld.com/cgi-bin/redirect%3fsource%3drss%26url%3dhttp://www.infoworld.com/article/03/11/21/46NNj2ee_1.html">InfoWorld: Top News</a>]</p>
</blockquote>Conference Economics2003-11-23T01:23:00-10:002003-11-23T01:23:00-10:00larrytag:knowing.net,2003-11-23:/posts/2003/11/conference-economics/<p>Martin Spedding clarifies that he's criticizing PNC on a strictly economic basis. This is perfectly valid: consider that the benefits of a conference accrue primarily to the individual while the cost is borne primarily by companies. And the value of a conference is delivered primarily by speakers and attendees, but …</p><p>Martin Spedding clarifies that he's criticizing PNC on a strictly economic basis. This is perfectly valid: consider that the benefits of a conference accrue primarily to the individual while the cost is borne primarily by companies. And the value of a conference is delivered primarily by speakers and attendees, but the profit is enjoyed primarily by the conference organizer. Something is awry in the was that conferences work.</p>
<p><em>Blogged on a Tablet PC</em></p>Man Arrested Over 'Spam Rage'2003-11-21T23:10:00-10:002003-11-21T23:10:00-10:00larrytag:knowing.net,2003-11-21:/posts/2003/11/man-arrested-over-spam-rage/<p>A Silicon Valley computer programmer has been arrested for threatening to torture, kill and send a 'package full of Anthrax spores' to employees of the company he blames for bombarding his computer with spam promising to enlarge his penis. <em>via</em> [Wired News]</p>
<p>Oughtn't his defense be "But they opted-in to …</p><p>A Silicon Valley computer programmer has been arrested for threatening to torture, kill and send a 'package full of Anthrax spores' to employees of the company he blames for bombarding his computer with spam promising to enlarge his penis. <em>via</em> [Wired News]</p>
<p>Oughtn't his defense be "But they opted-in to a 'receive death threats' list that was provided to me by one of my affiliates. I'm shocked, <em>shocked</em> at this turn of events and have cancelled future dealings with that affiliate."?</p>Martin Spedding: "Was going to the PDC really worth it?" Interesting question....2003-11-21T23:04:00-10:002003-11-21T23:04:00-10:00larrytag:knowing.net,2003-11-21:/posts/2003/11/martin-spedding-was-going-to-the-pdc-really-worth-it-interesting-question/<p>Martin Spedding wonders "Was going to the PDC really worth it?" and Scoble sez "I'd say there's a huge amount of value in actually being there" <em>via</em> [The Scobleizer Weblog]</p>
<p>Spedding essentially says that he goes to the PDC to "get an edge" and, now that conferences put up presentations …</p><p>Martin Spedding wonders "Was going to the PDC really worth it?" and Scoble sez "I'd say there's a huge amount of value in actually being there" <em>via</em> [The Scobleizer Weblog]</p>
<p>Spedding essentially says that he goes to the PDC to "get an edge" and, now that conferences put up presentations online, he thinks that value is being diminished. Over the past 14 years, I've decided that presentations are the least valuable part of any conference. Honestly, Microsoft's emphasis on text-heavy slides interspersed with demos and "you wanna' see some code?" is much better marketing than pedagogy: "Wow, I'm getting substance! Oh, it's real! Gosh, that looks easy! Umm...what's code-beside again?"</p>
<p>Having said that, the PDC's "Ask the Experts" sessions were <em>fantastic</em>. There were literally hundreds of Redmondians sitting around, eager to talk. And if the person you were talking to didn't quite know, they'd raise their head and ask the right person "Hey, Jane, is it possible to do...?" You <em>can't</em> duplicate that online.</p>
<p>To me, the ideal conference would be one where the presentations were made available to attendees the week prior to the conference and when the session is scheduled, attendees walked into a ZeroConf WiFi lillypad that provided a shared workspace with the tools available and the presenters first words were "So. How did the exercises go?"</p>C++/CLI candidate base document now available2003-11-21T07:47:00-10:002003-11-21T07:47:00-10:00larrytag:knowing.net,2003-11-21:/posts/2003/11/ccli-candidate-base-document-now-available/<p>Today the C++/CLI candidate base document was posted, and it's freely available for download. <em>via</em> [Herb Sutter's Blog]</p>
<p>This describes the C++/CLI extensions discussed at PDC but not available in the PDC bits. Let the studying begin...!</p>According To A CNET Paraphrase Of An IDC Report A Hrefhttprsscomcom2100101135109870htmlpartrssamptagfeeda2003-11-20T02:58:00-10:002003-11-20T02:58:00-10:00larrytag:knowing.net,2003-11-20:/posts/2003/11/according-to-a-cnet-paraphrase-of-an-idc-report-a-hrefhttprsscomcom2100101135109870htmlpartrssamptagfeeda/<p>According to a CNET paraphrase of an IDC report, <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1108485356393329419738439059339424020500%26anid%3D1108485356393329419738439059339424020500&u=1108485356393329419738439059339424020500&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553674546191&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1108485356393329419738439059339424020500%26anid%3D1108485356393329419738439059339424020500&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">IT outsourcing fears misplaced</a>. But the article contains this seemingly absurd statement: "Services tasks that may be affected by offshore outsourcing include maintenance and support, implementation and operations--activities that IDC views as requiring low skills and that involve repeatability. Hardcore business …</p><p>According to a CNET paraphrase of an IDC report, <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1108485356393329419738439059339424020500%26anid%3D1108485356393329419738439059339424020500&u=1108485356393329419738439059339424020500&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553674546191&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A1108485356393329419738439059339424020500%26anid%3D1108485356393329419738439059339424020500&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">IT outsourcing fears misplaced</a>. But the article contains this seemingly absurd statement: "Services tasks that may be affected by offshore outsourcing include maintenance and support, implementation and operations--activities that IDC views as requiring low skills and that involve repeatability. Hardcore business work such as planning, IT education and training will remain relatively resilient against the offshore trend."</p>
<p>I'm reluctant to expend the journalistic mojo required to actually get my hands on the report, but once again we seem to have a case of software development being lumped in with IT in one definition and excluded in another (at least, if you assume that not even IDC thinks that software development "implementation" requires low skill).</p>Jon Udells Investigating A Bayesian RSS Categorizer Bayesian S2003-11-19T22:59:00-10:002003-11-19T22:59:00-10:00larrytag:knowing.net,2003-11-19:/posts/2003/11/jon-udells-investigating-a-bayesian-rss-categorizer-bayesian-s/<p><a href="https://www.xml.com/pub/a/2003/11/19/udell.html">Jon Udell's investigating a Bayesian RSS categorizer</a>. Bayesian spamfilters correlate the probability of words (such as "v1agra" or "ontology") appearing in an email message; if the aggregate probability from all the words in an email exceeds a certain threshold, the email is put in a specific folder. The blog correlary …</p><p><a href="https://www.xml.com/pub/a/2003/11/19/udell.html">Jon Udell's investigating a Bayesian RSS categorizer</a>. Bayesian spamfilters correlate the probability of words (such as "v1agra" or "ontology") appearing in an email message; if the aggregate probability from all the words in an email exceeds a certain threshold, the email is put in a specific folder. The blog correlary (I think) would be analyzing RSS items as to whether they're deleted, opened, and opened-and-clicked-through; over time, such a system should be able to assign a probability to the likelihood that a new RSS item will be of interest to you (and presumably you'd sort by that in your aggregator). </p>
<p>Jon appears to be doing something dangerously more ambitious, which is creating a Bayesian <em>categorizer</em> that assigns Jon-meaningful categories (email, collaboration, family, etc.) to items. I say "dangerously more ambitious" because Jon's approach would seem to require a lot of supervision, while the genius of Bayesian spam-filtering is that pressing a button marked "Delete as spam" is no more onerous than deleting the spam in the first place. Similarly, a Bayesian RSS aggregator that just attempted to categorize "Will this item be read, will this item be clicked-through, will this item be deleted without pause?" requires no more supervision than what is natural to the task of RSS browsing.</p>Difference between graphics and ink blogging2003-11-19T22:25:00-10:002003-11-19T22:25:00-10:00larrytag:knowing.net,2003-11-19:/posts/2003/11/difference-between-graphics-and-ink-blogging/<p>I have no idea of the capabilities of Microsoft's ink blogging tools, but IMO the <em>real</em> ink blogging solution will be one that stores ink on the server and returns ink if the client sends up an appropriate MIME type. Only if the client is incapable of rendering ink will …</p><p>I have no idea of the capabilities of Microsoft's ink blogging tools, but IMO the <em>real</em> ink blogging solution will be one that stores ink on the server and returns ink if the client sends up an appropriate MIME type. Only if the client is incapable of rendering ink will it downgrade the ink to graphics + text (which, of course, the server might cache). Until <em>that</em> capability becomes available, ink on the Web is just a toy.</p>Ink blogging online2003-11-19T05:13:00-10:002003-11-19T05:13:00-10:00larrytag:knowing.net,2003-11-19:/posts/2003/11/ink-blogging-online/<p><a href="http://www7.securybrowse.com/view?src=2QcGrcUVUQcM5yLYOHq28XOmFE2wEtN7Y-CsviEPSRgxw_W_YBGSZk8sWwoR5N32bkHinIYQThMVmbXl0kOnXvFpZb5DAYrVTi342O-lYcB91CfVYxuNcsCDfiJ0qTon47l_x7cH71xQEO_Mvwe2eW1Tgk-mWdA_lTjyuX_HaXshW5CwTUUT1PS3Tzr8UgdLIgNRL6ljQW1hZrnV21QJNLLdlqyU1AdXpBXUFDNDAOQvXoy1NbSHYalJ4vSJX8iwM9BPTFz0ShnoWyLH393aieEMIOsn4KbJoPvpA3ZT657IKzQXEyA270zRvGdZqIQ2y37qnRUCHvcWb-jaLmMVZ6hHcdCBm15I_2eeuuX9DLA1OztynoAdzT-vL4DpfVxVzy26KMtOL-PXpgXmfTy2TOFSo2nlyQtnd9dqT4SrrA3CuAVrLW-vDrdGtiYRI2C8">http://www.inklog.com/</a> is apparently the site where Microsoft Tablet PCers are using their tablet blogging tool. "Not 3 years, 3 days" teases Chris Coulter, referring to this post of mine. Hey, if that's all they got, I beat 'em to market! I haven't looked at the headers coming …</p><p><a href="http://www7.securybrowse.com/view?src=2QcGrcUVUQcM5yLYOHq28XOmFE2wEtN7Y-CsviEPSRgxw_W_YBGSZk8sWwoR5N32bkHinIYQThMVmbXl0kOnXvFpZb5DAYrVTi342O-lYcB91CfVYxuNcsCDfiJ0qTon47l_x7cH71xQEO_Mvwe2eW1Tgk-mWdA_lTjyuX_HaXshW5CwTUUT1PS3Tzr8UgdLIgNRL6ljQW1hZrnV21QJNLLdlqyU1AdXpBXUFDNDAOQvXoy1NbSHYalJ4vSJX8iwM9BPTFz0ShnoWyLH393aieEMIOsn4KbJoPvpA3ZT657IKzQXEyA270zRvGdZqIQ2y37qnRUCHvcWb-jaLmMVZ6hHcdCBm15I_2eeuuX9DLA1OztynoAdzT-vL4DpfVxVzy26KMtOL-PXpgXmfTy2TOFSo2nlyQtnd9dqT4SrrA3CuAVrLW-vDrdGtiYRI2C8">http://www.inklog.com/</a> is apparently the site where Microsoft Tablet PCers are using their tablet blogging tool. "Not 3 years, 3 days" teases Chris Coulter, referring to this post of mine. Hey, if that's all they got, I beat 'em to market! I haven't looked at the headers coming back from inklog.com, but the real key to nailing this is content negotiation.</p>Estimating The Airspeed Velocity Of An Unladen Swallow Ignobel Pri2003-11-19T00:58:00-10:002003-11-19T00:58:00-10:00larrytag:knowing.net,2003-11-19:/posts/2003/11/estimating-the-airspeed-velocity-of-an-unladen-swallow-ignobel-pri/<p><a href="http://style.org/unladenswallow/">Estimating the Airspeed Velocity of an Unladen Swallow</a></p>
<p>Ignobel Prize Committee, where art thou?</p>Peter Rysavys Lonestar Screenshots And Discussion Microsoft Handed Ou2003-11-19T00:24:00-10:002003-11-19T00:24:00-10:00larrytag:knowing.net,2003-11-19:/posts/2003/11/peter-rysavys-lonestar-screenshots-and-discussion-microsoft-handed-ou/<p>Peter Rysavy's Lonestar screenshots and discussion: Microsoft handed out Lonestar alphas at the Tablet PC get-together at Comdex. Oh man, I should have listened to that little voice in my head that told me to go to Vegas. Most interestingly, Peter says that Lonestar is a small (\~10MB), user-installable <strong>and …</strong></p><p>Peter Rysavy's Lonestar screenshots and discussion: Microsoft handed out Lonestar alphas at the Tablet PC get-together at Comdex. Oh man, I should have listened to that little voice in my head that told me to go to Vegas. Most interestingly, Peter says that Lonestar is a small (\~10MB), user-installable <strong>and uninstallable</strong> upgrade that runs absolutely fine on first-generation hardwares. Essentially, it sounds like a case where resource tradeoffs <em>had resulted</em> in more effort on OS and hardware foundations for the release of XP Tablet edition 1.0 and that Longhorn is the result of a significant amount of those resources shifting towards handwriting and user-experience. Plus, it stands to reason that the number of people with a deep, low-level understanding of the Tablet OS has increased hugely over the past year, so it's not surprising that there could be, for instance, significant improvements in handwriting recognition on existing hardware.</p>AT&T patents anti-antispam technology2003-11-18T09:42:00-10:002003-11-18T09:42:00-10:00larrytag:knowing.net,2003-11-18:/posts/2003/11/att-patents-anti-antispam-technology/<p>Citing an "arms race" in the ongoing spam wars, the company defends its patenting of a technology to thwart antispam filters. <em>via</em> [<a href="https://com.com/results?q=rss">CNET News.com - Front Door</a>]</p>
<p>Okay, I can see the point of increasing the legal liability of spammers, but that this patent was granted is infuriating. It patents …</p><p>Citing an "arms race" in the ongoing spam wars, the company defends its patenting of a technology to thwart antispam filters. <em>via</em> [<a href="https://com.com/results?q=rss">CNET News.com - Front Door</a>]</p>
<p>Okay, I can see the point of increasing the legal liability of spammers, but that this patent was granted is infuriating. It patents "Change the content of your spam." Here I sit pondering to what extent the spammers are using Web bugs in decoy spam to verify my email address and to what extent I can even speak about anti-spam techniques without risking a DDOS attack and the patent office says "Change the content of a spam message with, oh say, a sequence of random letters? Wow!"</p>Penabled Tablet PC Replacement Pens At Comdex Hey With Christmas Coming Up Can I Ask My Inlaws For A Decent Tablet PC Pen2003-11-18T06:57:00-10:002003-11-18T06:57:00-10:00larrytag:knowing.net,2003-11-18:/posts/2003/11/penabled-tablet-pc-replacement-pens-at-comdex-hey-with-christmas-coming-up-can-i-ask-my-inlaws-for-a-decent-tablet-pc-pen/<p>Penabled Tablet PC replacement Pens at Comdex? Hey -- with Christmas coming up, can I ask my in-laws for a decent Tablet PC pen? Such as the long-awaited Cross pen?</p>iMac envy2003-11-18T01:29:00-10:002003-11-18T01:29:00-10:00larrytag:knowing.net,2003-11-18:/posts/2003/11/imac-envy/<p><a href="https://www.apple.com/imac/">20-inch iMac</a>. A 20" flatscreen at 1650 x 1050 with a 10.6" footprint, 802.11g, and one of those weird processors that I guess work fast enough. Geez. I mean... Geez.</p>Is InfoPath The New ExcelnbspI Ask In My Latest SD Times Column2003-11-17T23:40:00-10:002003-11-17T23:40:00-10:00larrytag:knowing.net,2003-11-17:/posts/2003/11/is-infopath-the-new-excelnbspi-ask-in-my-latest-sd-times-column/<p>Is InfoPath the New Excel? I ask in my latest SD Times column.</p>C++/CLI2003-11-17T22:49:00-10:002003-11-17T22:49:00-10:00larrytag:knowing.net,2003-11-17:/posts/2003/11/ccli/<blockquote>
<p>I installed the Whidbey preview on a VPC virtual machine at the weekend, hoping to check out the new features, but they don't seem to be implemented in this build. <em>via</em> [<a href="http://www.cookcomputing.com/blog/archives/000331.html">Cook Computing</a>]</p>
</blockquote>
<p>~~Can anyone confirm if the C++/CLI extensions are in the PDC bits? My initial attempts to …</p><blockquote>
<p>I installed the Whidbey preview on a VPC virtual machine at the weekend, hoping to check out the new features, but they don't seem to be implemented in this build. <em>via</em> [<a href="http://www.cookcomputing.com/blog/archives/000331.html">Cook Computing</a>]</p>
</blockquote>
<p>~~Can anyone confirm if the C++/CLI extensions are in the PDC bits? My initial attempts to compile Foo\^ f = gcnew Foo(); have failed, but for all I know I may just be missing a command-line switch.~~ Brandon Bray just confirmed to me that the PDC bits "did not include much support for the C++/CLI syntax....the earliest implementation will be the Whidbey beta."</p>Tablet PC 1.7 SDK in PDC post-show attendee kits2003-11-17T02:11:00-10:002003-11-17T02:11:00-10:00larrytag:knowing.net,2003-11-17:/posts/2003/11/tablet-pc-17-sdk-in-pdc-post-show-attendee-kits/<p>Sure, Gates announced the next version of Windows XP Tablet "by the middle of" 2004, but in the near future, Waggener Edstrom's Tina Warner tells me that the Tablet PC 1.7 SDK will ship with the PDC post-show attendee kits "so timing may be another few weeks." I can't …</p><p>Sure, Gates announced the next version of Windows XP Tablet "by the middle of" 2004, but in the near future, Waggener Edstrom's Tina Warner tells me that the Tablet PC 1.7 SDK will ship with the PDC post-show attendee kits "so timing may be another few weeks." I can't wait!</p>
<p>Oh, by the way, apparently all of the hand-wringing about Tablet adoption has been off-base: "A lot of vertical applications, a lot of horizontal applications, and now close to a half a billion users of the tablet who are very, very committed users." -- Bill Gates, Comdex 2003.</p>GPSbased AntiTerrorist Stop Spee2003-11-13T22:41:00-10:002003-11-13T22:41:00-10:00larrytag:knowing.net,2003-11-13:/posts/2003/11/gpsbased-antiterrorist-stop-spee/<p><a href="https://com.com/results?q=rss">GPS-based Anti-Terrorist "Stop Speeding Trucks" Tech Under Attack</a></p>
<p>Perhaps I haven't had enough coffee this morning because it seems obvious that one should be able to construct a pithy logical statement that encapsulates the notion that it <em>can't</em> be a good idea to mandate a remotely-controlled software-based solution that provides …</p><p><a href="https://com.com/results?q=rss">GPS-based Anti-Terrorist "Stop Speeding Trucks" Tech Under Attack</a></p>
<p>Perhaps I haven't had enough coffee this morning because it seems obvious that one should be able to construct a pithy logical statement that encapsulates the notion that it <em>can't</em> be a good idea to mandate a remotely-controlled software-based solution that provides a single point of failure to a theoretical 'problem' that involves a vast network of easily-hacked analog machines. It's one thing to <em>consider</em> the use of remote-takeover of airliners, where it <em>might</em> be possible to create a secure interface (both in terms of assuring the integrity of the digital-mechanical hardware and the processes by which the system could be activated) but <em>trucks</em>? If you think CD copy-protection is an example of digital hubris, wait until you try to screw around with truckers.</p>Relational programming languages redux2003-11-12T23:49:00-10:002003-11-12T23:49:00-10:00larrytag:knowing.net,2003-11-12:/posts/2003/11/relational-programming-languages-redux/<p><a href="https://www.hugedomains.com/domain_profile.cfm?d=openpenguin&e=com">Chris Woofruff</a> wonders if Python's built-in facility for dictionaries / associative arrays satisfies Ted Neward's desire for relational language extensions. I'm not 100% sure, but I don't think so. To me, Ted's post jumped off the idea of relational operators creating new types (although Ted didn't explicitly discuss it): </p>
<div class="highlight"><pre><span></span><code><span class="n">relvar</span><span class="o">[</span><span class="n">person …</span></code></pre></div><p><a href="https://www.hugedomains.com/domain_profile.cfm?d=openpenguin&e=com">Chris Woofruff</a> wonders if Python's built-in facility for dictionaries / associative arrays satisfies Ted Neward's desire for relational language extensions. I'm not 100% sure, but I don't think so. To me, Ted's post jumped off the idea of relational operators creating new types (although Ted didn't explicitly discuss it): </p>
<div class="highlight"><pre><span></span><code><span class="n">relvar</span><span class="o">[</span><span class="n">person</span><span class="o">]</span><span class="w"> </span><span class="n">people</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="err">{</span><span class="w"> </span><span class="n">fn</span><span class="p">,</span><span class="w"> </span><span class="k">ln</span><span class="p">,</span><span class="w"> </span><span class="n">age</span><span class="err">}</span><span class="w"> </span><span class="o">[</span><span class="n"> ["Ted", "Neward", 32</span><span class="o">]</span><span class="w"> </span>
<span class="w"> </span><span class="o">[</span><span class="n">"Don", "Box", 39</span><span class="o">]</span><span class="w"> </span><span class="err">]</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="n">relvar</span><span class="o">[</span><span class="n">contact</span><span class="o">]</span><span class="w"> </span><span class="n">myContacts</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">dataSet</span><span class="p">.</span><span class="n">Tables</span><span class="o">[</span><span class="n">"contacts"</span><span class="o">]</span><span class="p">;</span>
<span class="w"> </span><span class="n">relvar</span><span class="o">[</span><span class="n">contactsWithAges</span><span class="o">]</span><span class="w"> </span><span class="n">peopleUnderThirtyFive</span><span class="w"> </span><span class="o">=</span><span class="w"> </span>
<span class="w"> </span><span class="k">SELECT</span><span class="w"> </span><span class="n">people</span><span class="p">.</span><span class="n">age</span><span class="p">,</span><span class="w"> </span><span class="n">contact</span><span class="p">.</span><span class="o">*</span><span class="w"> </span><span class="k">WHERE</span><span class="w"> </span><span class="n">people</span><span class="p">.</span><span class="n">age</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="mi">35</span><span class="w"> </span>
<span class="w"> </span><span class="ow">AND</span><span class="w"> </span><span class="n">people</span><span class="p">.</span><span class="n">fn</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">contacts</span><span class="p">.</span><span class="n">FirstName</span><span class="w"> </span><span class="ow">AND</span><span class="w"> </span><span class="n">people</span><span class="p">.</span><span class="k">ln</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">contacts</span><span class="p">.</span><span class="n">LastName</span><span class="p">;</span>
<span class="w"> </span><span class="n">Console</span><span class="p">.</span><span class="n">WriteLine</span><span class="p">(</span><span class="ss">"Ted, age {0}, lives in the state of {1}"</span><span class="p">,</span><span class="w"> </span>
<span class="w"> </span><span class="n">people</span><span class="p">.</span><span class="n">FirstName</span><span class="o">[</span><span class="n">"Ted"</span><span class="o">]</span><span class="p">.</span><span class="n">age</span><span class="p">,</span><span class="w"> </span><span class="n">people</span><span class="p">.</span><span class="n">FirstName</span><span class="o">[</span><span class="n">"Ted"</span><span class="o">]</span><span class="p">.</span><span class="k">state</span><span class="p">);</span>
<span class="w"> </span><span class="n">contactsWithAges</span><span class="p">.</span><span class="n">age</span><span class="p">.</span><span class="n">EditEnding</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">EventHandler</span><span class="p">(</span><span class="n">AgesVerifier</span><span class="p">);</span>
</code></pre></div>
<p>I've added more typing than Ted proposed (basically, a name for a particular relational structure), define one explicitly in code (people), another one is dynamically typed at runtime (contact structure is read from underlying database), and created a third from a query (contactsWithAges). (The last line is attaching a delegate to the "age" field of the dynamically created type contactsWithAges. )</p>
<p>I dunno' if this is what Ted had in mind, but it's an interesting thought experiment. Would capabilities like this be interresting in a programming language?</p>
<p>P.S. Avi Bryant has actually implemented some relational operators at the language level (ahh... Smalltalk)</p>Building the next new language2003-11-12T07:06:00-10:002003-11-12T07:06:00-10:00larrytag:knowing.net,2003-11-12:/posts/2003/11/building-the-next-new-language/<p>Ted Neward wants relational language extensions:</p>
<p>Basically, I want the object-relational impedance mismatch to go away, just like everybody else does. But instead of continuing to try to force objects on top of the relational model, how about we give up going in that direction, and instead try lacing relational …</p><p>Ted Neward wants relational language extensions:</p>
<p>Basically, I want the object-relational impedance mismatch to go away, just like everybody else does. But instead of continuing to try to force objects on top of the relational model, how about we give up going in that direction, and instead try lacing relational semantics into our favorite languages of choice? ....What I really want to do, in a single sentence, is extend the data model away from a concept of "fields" and include some higher-order primitives into the mix. For example, coming from the relational world, I want to see a <em>relvar</em>, a relational variable a la C. J. Date, as a basic primitive type within the language....I want a <em>node</em> primitive type, to which I can apply XPath operations... I envision something along the lines of:</p>
<blockquote>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="n">relvar</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">fn</span><span class="p">,</span><span class="w"> </span><span class="n">ln</span><span class="p">,</span><span class="w"> </span><span class="n">age</span><span class="p">}</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">[</span><span class="s2">"Ted"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Neward"</span><span class="p">,</span><span class="w"> </span><span class="mi">32</span><span class="p">]</span><span class="w"> </span><span class="p">[</span><span class="s2">"Don"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Box"</span><span class="p">,</span><span class="w"> </span><span class="mi">39</span><span class="p">]</span><span class="w"> </span><span class="p">];</span><span class="w"> </span><span class="n">foreach</span><span class="w"> </span><span class="p">(</span><span class="n">tuple</span><span class="w"> </span><span class="n">t</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">printOut</span><span class="p">(</span><span class="s2">"Name is "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">t</span><span class="o">.</span><span class="n">fn</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">" "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">t</span><span class="o">.</span><span class="n">ln</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">", "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">t</span><span class="o">.</span><span class="n">age</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s2">" years old"</span><span class="p">);</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="n">relvar</span><span class="w"> </span><span class="n">r2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">fn</span><span class="p">,</span><span class="w"> </span><span class="n">ln</span><span class="p">,</span><span class="w"> </span><span class="n">age</span><span class="p">}</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="p">[</span><span class="s2">"Fritz"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Onion"</span><span class="p">,</span><span class="w"> </span><span class="mi">39</span><span class="p">]</span><span class="w"> </span><span class="p">];</span><span class="w"> </span><span class="n">relvar</span><span class="w"> </span><span class="n">r3</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="n">UNION</span><span class="w"> </span><span class="n">r2</span><span class="p">;</span><span class="w"> </span><span class="n">printOut</span><span class="p">(</span><span class="n">r3</span><span class="o">.</span><span class="n">count</span><span class="p">);</span><span class="w"> </span><span class="o">//</span><span class="w"> </span><span class="n">Prints</span><span class="w"> </span><span class="s2">"3"</span><span class="p">,</span><span class="w"> </span><span class="n">since</span><span class="w"> </span><span class="n">there</span><span class="w"> </span><span class="n">are</span><span class="w"> </span><span class="mi">3</span><span class="w"> </span><span class="n">tuples</span>
</code></pre></div>
<p>and so on. Syntax is somewhat derived from Date, 8th ed.</p>
<p>Similarly, I want the ability to do XPath over XML as built-in language capabilities; something along the lines of:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span>node<span class="w"> </span>n<span class="w"> </span>=<span class="w"> </span><span class="nt"><person><name></span>Ted<span class="nt"></name></person></span><span class="w"> </span>string<span class="w"> </span>s<span class="w"> </span>=<span class="w"> </span>n/name/text();<span class="w"> </span>//<span class="w"> </span>an<span class="w"> </span>XPath<span class="w"> </span>query<span class="w"> </span>against<span class="w"> </span>the<span class="w"> </span>node<span class="w"> </span>"n"
</code></pre></div>
<div>
<p>and, of course, both node and relvar types would support the usual range of insert/remove operations, such as the UNION used above, or a += syntax for appending nodes to n as child nodes, and so on.</p>
</div>
<p>.... Oh, and while we're at it, I want the language to understand transactions as a first-class processing concept, too:</p>
<div class="highlight"><pre><span></span><code><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="nx">transacted</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">5</span><span class="p">;</span><span class="w"> </span><span class="nx">throw</span><span class="w"> </span><span class="nx">new</span><span class="w"> </span><span class="nx">IllegalArgumentException</span><span class="p">(</span><span class="s">"can't do this!"</span><span class="p">);</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="nx">finally</span><span class="w"> </span><span class="c1">// a.k.a. commit { printOut("We committed! x = " + x); } rollback { printOut("We rolled back! x = " + x); } // x has the value "5", since the exception forces an implicit rollback</span>
</code></pre></div>
<p><em>via</em><br>
[The Mountain of Worthless Information]</p>
</blockquote>I'm not a punning guy, but still...2003-11-12T06:20:00-10:002003-11-12T06:20:00-10:00larrytag:knowing.net,2003-11-12:/posts/2003/11/im-not-a-punning-guy-but-still/<p>Okay, I admit it. I had hoped for at least one in the "comments" for "sementic web".</p>Finally Went Through All The Free Magazines From PDC I Have To Say That I Was Most Impressed By The Content Of A Hrefhttp2003-11-12T06:12:00-10:002003-11-12T06:12:00-10:00larrytag:knowing.net,2003-11-12:/posts/2003/11/finally-went-through-all-the-free-magazines-from-pdc-i-have-to-say-that-i-was-most-impressed-by-the-content-of-a-hrefhttp/<p>Finally went through all the free magazines from PDC. I have to say that I was most impressed by the content of <a href="http://support.sys-con.com/404/">.NET Developer's Journal</a>. (I'm not sure I'd go so far as to say it was better than MSDN Magazine, but that's a known quantity).</p>Adapt To Offshoring Or Die Says2003-11-12T05:40:00-10:002003-11-12T05:40:00-10:00larrytag:knowing.net,2003-11-12:/posts/2003/11/adapt-to-offshoring-or-die-says/<p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A025382064374090155387898740847686324225%26anid%3D025382064374090155387898740847686324225&u=025382064374090155387898740847686324225&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553674558114&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A025382064374090155387898740847686324225%26anid%3D025382064374090155387898740847686324225&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">Adapt to offshoring or die</a> says Amit Maheshwari on C|Net, "The survivors will be those who embrace offshore operations as yet another opportunity to expand their professional skill set and position themselves as offshore management leaders...."</p>
<p>"Expand your professional skill set" is a polite way to say "abandon your …</p><p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A025382064374090155387898740847686324225%26anid%3D025382064374090155387898740847686324225&u=025382064374090155387898740847686324225&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553674558114&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A025382064374090155387898740847686324225%26anid%3D025382064374090155387898740847686324225&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">Adapt to offshoring or die</a> says Amit Maheshwari on C|Net, "The survivors will be those who embrace offshore operations as yet another opportunity to expand their professional skill set and position themselves as offshore management leaders...."</p>
<p>"Expand your professional skill set" is a polite way to say "abandon your programming skills, as those have become commodities." You know, just last year we considered "<a href="https://www.amazon.com/exec/obidos/tg/detail/-/0201733862/qid%3d1068680209/sr%3d8-1/ref%3dsr_8_1/102-1874475-7688924%3fv%3dglance%26n%3d507846">Software Craftsmanship</a>" as a finalist for a Jolt Award. That book argued that engineering was a failed metaphor for software development and that instead we should look to the guild model, with apprenticeship, journey(person), and master stages. <em>Sigh</em>. The age of the artisanal programmer lasted less than a year.</p>Ontology of WinFS: More important than WS-*?2003-11-12T00:18:00-10:002003-11-12T00:18:00-10:00larrytag:knowing.net,2003-11-12:/posts/2003/11/ontology-of-winfs-more-important-than-ws/<blockquote>
<p>Peter Coffee sees a move towards standards compliance from <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments" title="http://www.eweek.com/article2/0,4149,1379430,00.asp">Microsoft at PDC</a> <em>via</em> [The Scobleizer Weblog]</p>
</blockquote>
<p>In the tiny little world of software development tech journalism, it looks like Microsoft is getting passing grades on the standards issue. Jon Udell's debate with Dare has calmed down (although note that since …</p><blockquote>
<p>Peter Coffee sees a move towards standards compliance from <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments" title="http://www.eweek.com/article2/0,4149,1379430,00.asp">Microsoft at PDC</a> <em>via</em> [The Scobleizer Weblog]</p>
</blockquote>
<p>In the tiny little world of software development tech journalism, it looks like Microsoft is getting passing grades on the standards issue. Jon Udell's debate with Dare has calmed down (although note that since Jon is a professional, it's not like he's going to stoke flames).</p>
<p>\<</p>
<p>p dir=ltr> To me the challenge has moved to the WinFS ontology, where mistakes will have <em>enormous</em> consequence. For instance: in the preliminary WinFS schema, the Core.Event object/structure uses the DateTime object to specify begin and end times. In the .NET BCL, the DateTime object is <em>not</em> based upon Universal Time and "Calculations and comparisons of <strong>DateTime</strong> instances are only meaningful when the instances are created in the same time zone." As anyone who's been frustrated using Outlook to coordinate meetings during business trips knows, this is a real problem.</p>Sam Gentile disses MC++.2003-11-11T05:16:00-10:002003-11-11T05:16:00-10:00larrytag:knowing.net,2003-11-11:/posts/2003/11/sam-gentile-disses-mc/<blockquote>
<p>I've given up the MC++/C++ bandwagon completly and can only support it's use when there are no other choices <em>via</em> [Sam Gentile's Blog]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> Along with <a href="http://blogs.it/0100198/2003/11/06.html%23a1959">Marc Canter's praise of Longhorn</a>, I take this as the final proof that there were "additives" in those free Cokes at …</p><blockquote>
<p>I've given up the MC++/C++ bandwagon completly and can only support it's use when there are no other choices <em>via</em> [Sam Gentile's Blog]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> Along with <a href="http://blogs.it/0100198/2003/11/06.html%23a1959">Marc Canter's praise of Longhorn</a>, I take this as the final proof that there were "additives" in those free Cokes at PDC.</p>Usability Issues In The Design Of Novice Programming Systems2003-11-11T04:51:00-10:002003-11-11T04:51:00-10:00larrytag:knowing.net,2003-11-11:/posts/2003/11/usability-issues-in-the-design-of-novice-programming-systems/<p><a href="https://john.pane.net/">Usability issues in the design of novice programming systems</a></p>The Sementic Web2003-11-11T00:25:00-10:002003-11-11T00:25:00-10:00larrytag:knowing.net,2003-11-11:/posts/2003/11/the-sementic-web/<p>"I'm gonna convert my porn collection to WinFS." <em>via</em> [The Scobleizer Weblog]</p>
<p>Hmmm... check the Visio WinFS schema diagram... Nope... The Ontology of Porn: Is a Top-Down Approach Best?</p>Microsoft, the witching season, FUD, and courage2003-11-11T00:19:00-10:002003-11-11T00:19:00-10:00larrytag:knowing.net,2003-11-11:/posts/2003/11/microsoft-the-witching-season-fud-and-courage/<p>Longhorn enters the witching season: <em>"Microsoft products never run as quickly, are more robust, or stay more secure than during this magical period. Every promised feature is present and works perfectly." via</em> [The Scobleizer Weblog]</p>
<p>That quote is supposed to be sarcastic, but it seriously damages the credibility of the …</p><p>Longhorn enters the witching season: <em>"Microsoft products never run as quickly, are more robust, or stay more secure than during this magical period. Every promised feature is present and works perfectly." via</em> [The Scobleizer Weblog]</p>
<p>That quote is supposed to be sarcastic, but it seriously damages the credibility of the article: one well-known aspect of Microsoft betas compared with other industry betas is that they're famously slow compared to the final product. Generally, magazines put in a disclaimer about "We can't speak of performance until we see the final product..." in preview discussions and, generally, it's not really an issue. With Microsoft products, it often is. For instance, anyone who experienced the OneNote public beta knows how that product firmed up amazingly in any number of ways, including robustness and performance.</p>
<p>The solid point of the article, and one that bears repeating, is that Longhorn and other things demonstrated at the PDC (such as Wallop) <em>can</em> instill "Fear, Uncertainty, and Doubt" if taken the wrong way. Look, I'm writing a blogging tool for the Tablet PC: Microsoft will eventually provide similar capabilities. <strong><em>In 3 years</em></strong>. One feature of my blogging tool will be meta-data image markup, which is exactly what WinFS is about. <strong><em>In 3 years</em>.</strong> On Sunday, in half-an-hour, I wrote a tool that allows you to add Outlook notes and tasks in ink: Microsoft will eventually fully ink-enable Office. <strong><em>In Office 2006</em></strong> (or somesuch).</p>
<p>Microsoft is huge, and they're aligned, and they're ambitious. And now small, agile, and ambitious teams know where and approximately when Microsoft's huge feet are going to land. If you want to work with Microsoft, that's great. If you want to compete with Microsoft, it's even better.</p>While Debating Whether To Take A 3month Java Programming C2003-11-09T07:14:00-10:002003-11-09T07:14:00-10:00larrytag:knowing.net,2003-11-09:/posts/2003/11/while-debating-whether-to-take-a-3month-java-programming-c/<p>While debating whether to take a 3-month Java programming contract (short of Microsoft suddenly deciding they need a Bay Area-based mobilized computing evangelist, it looks like I'll be spending the winter in Denver), I wrote a quick little application that creates Outlook 2003 tasks and notes from ink. Try it …</p><p>While debating whether to take a 3-month Java programming contract (short of Microsoft suddenly deciding they need a Bay Area-based mobilized computing evangelist, it looks like I'll be spending the winter in Denver), I wrote a quick little application that creates Outlook 2003 tasks and notes from ink. Try it out. </p>Friend Assemblies2003-11-09T02:52:00-10:002003-11-09T02:52:00-10:00larrytag:knowing.net,2003-11-09:/posts/2003/11/friend-assemblies/<blockquote>
<p><em>...a new feature in next release of .NET -- "Friend Assemblies", that does precisely what you're suggesting. It will use an assembly-level custom attribute called "InternalsVisibleTo", that grants access to a named "friend" assembly (Omer.B in this example) -- for all "internal" types...</em>John Lam describes how friend assemblies will be …</p></blockquote><blockquote>
<p><em>...a new feature in next release of .NET -- "Friend Assemblies", that does precisely what you're suggesting. It will use an assembly-level custom attribute called "InternalsVisibleTo", that grants access to a named "friend" assembly (Omer.B in this example) -- for all "internal" types...</em>John Lam describes how friend assemblies will be very useful for implementing unit tests. <em>via</em> [<a href="Http://www.cookcomputing.com/blog/archives/000323.html">Cook Computing</a>]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> I've always been of the "with friends like these, who needs enemies," school, but unit testing is a compelling counter argument.</p>Making developers more productive with ink2003-11-08T01:59:00-10:002003-11-08T01:59:00-10:00larrytag:knowing.net,2003-11-08:/posts/2003/11/making-developers-more-productive-with-ink/<blockquote>
<p>4. Ink comments in source code. Doesn't it make sense for ink comments to be embeddable in source code? 5. New programming models. Over the years people have tried various visual programming methodologies, but nothing sticks. Programming may just be a hard problem in general to solve... <em>via</em> [Incremental Blogger …</p></blockquote><blockquote>
<p>4. Ink comments in source code. Doesn't it make sense for ink comments to be embeddable in source code? 5. New programming models. Over the years people have tried various visual programming methodologies, but nothing sticks. Programming may just be a hard problem in general to solve... <em>via</em> [Incremental Blogger]</p>
</blockquote>
<p>I'm +1 on ink comments; maybe the new managed VSIP stuff lays the ground for that.</p>
<p>As for visual programming, I've been pondering S-Expressions lately. Consider the equivalence of int Foo(int A, int B, int C, int D){ return (A - B) + (C * D); }, the LISP (+ (- A B) (* C D)), and the visual:</p>
<p>And then that could be "collapsed" into a representation something like:</p>
<p>With, of course, the lollipops representing inputs on the bottom, outputs on the top. You could use reflection to generate such a <strong>MethodPanel</strong> for any .NET object / method call. It's definitely a do-able project. If only I got paid to develop ink software...</p>Those pesky Word comments2003-11-07T04:49:00-10:002003-11-07T04:49:00-10:00larrytag:knowing.net,2003-11-07:/posts/2003/11/those-pesky-word-comments/<p>That makes two of us k2!</p>Mono Project Roadmapnbspvia A Hrefhttpwwwmicrosoftwat2003-11-07T04:24:00-10:002003-11-07T04:24:00-10:00larrytag:knowing.net,2003-11-07:/posts/2003/11/mono-project-roadmapnbspvia-a-hrefhttpwwwmicrosoftwat/<p>Mono project roadmap <em>via</em> [Microsoft Watch]</p>JPEG Photo Annotation2003-11-07T03:40:00-10:002003-11-07T03:40:00-10:00larrytag:knowing.net,2003-11-07:/posts/2003/11/jpeg-photo-annotation/<p>Now with JPEG compression</p>
<p><em>Blogged on a Tablet PC</em></p>Ink Annotation2003-11-07T02:53:00-10:002003-11-07T02:53:00-10:00larrytag:knowing.net,2003-11-07:/posts/2003/11/ink-annotation/<p>o Fledgling vermiculated screech Owl</p>
<p><em>blogged on a tablet pc</em></p>VSIP Extensions To Visual Studio NET Gains Managed Extensions Y2003-11-07T01:19:00-10:002003-11-07T01:19:00-10:00larrytag:knowing.net,2003-11-07:/posts/2003/11/vsip-extensions-to-visual-studio-net-gains-managed-extensions-y/<p>VSIP (extensions to Visual Studio .NET) gains managed extensions. You can now write VS add-ins in .NET code. That's very nice. Refactoring tools, anyone? <em>via</em> Sam (who, incidentally, says <em>Matrix Revolutions</em> rocks)</p>Benjamin Mitchell Says That A Hr2003-11-05T03:24:00-10:002003-11-05T03:24:00-10:00larrytag:knowing.net,2003-11-05:/posts/2003/11/benjamin-mitchell-says-that-a-hr/<p>Benjamin Mitchell says that Chris Sells and I have missed the point when we fret. Benjamin says: "The mistake being made here is to think that the value of authors is based around conveying factual knowledge." I can't speak for Chris, but I don't think I'm making that mistake. I …</p><p>Benjamin Mitchell says that Chris Sells and I have missed the point when we fret. Benjamin says: "The mistake being made here is to think that the value of authors is based around conveying factual knowledge." I can't speak for Chris, but I don't think I'm making that mistake. I grant that lower cognitive level training (including fact knowledge) may not be where the greatest <em>use-value</em> is, but these have traditionally been the areas of the greatest <em>sale-value</em>. Particularly what Benjamin Bloom defined as "Application"-level knowledge has always been the big seller. These verbs associated with Application will be familiar to anyone who receives show catalogs, reads magazine covers, or book backs: "solve," "show," "use," "illustrate," "complete," and "examine."</p>
<p>"Comprehension" and "Application" <em>have been</em> the bread-and-butter of technical training. Internet technologies are becoming much more efficient at distributing information at these cognitive levels. I think that it would be foolish for an author / trainer to think that existing business models / individual careers will not be dramatically altered by that.</p>4.0GB partitition too small for Longhorn & VS.NET Whidbey.2003-11-05T02:09:00-10:002003-11-05T02:09:00-10:00larrytag:knowing.net,2003-11-05:/posts/2003/11/40gb-partitition-too-small-for-longhorn-vsnet-whidbey/<p>I installed my Longhorn on VMWare with a 4GB partition (thinking in terms of "Hey, it's one DVD for backup"). That's too small for Longhorn and a reasonable install of VS.NET Whidbey (If you install <em>nothing</em> but the minimal C# support, you end up with 3.93GB consumed!).</p>Great White Shark Kills Diver No News Diver Kills Great White Shark A Hrefhttpwwwsundaytimesnewscomaucommonsto2003-11-04T07:18:00-10:002003-11-04T07:18:00-10:00larrytag:knowing.net,2003-11-04:/posts/2003/11/great-white-shark-kills-diver-no-news-diver-kills-great-white-shark-a-hrefhttpwwwsundaytimesnewscomaucommonsto/<p>Great White Shark kills diver: No news. Diver kills Great White Shark: news.</p>
<p>Politically correct disclaimer: Sharks are magnificent, beautiful creatures and I treasure opportunities to dive with them. I bow to no one in my appreciation of the squalus. A live shark is better than a dead shark. But …</p><p>Great White Shark kills diver: No news. Diver kills Great White Shark: news.</p>
<p>Politically correct disclaimer: Sharks are magnificent, beautiful creatures and I treasure opportunities to dive with them. I bow to no one in my appreciation of the squalus. A live shark is better than a dead shark. But in terms of sheer "Kids, don't try this at home!" chutzpah, voluntarily entering the water with an <em>[18-foot]{.underline}</em> Great White Shark that's <strong><em>[wounded and enraged]{.underline}</em></strong> has got to be the stupidest single incident in the history of humanity.</p>Dare Obasanjo And Jon Udell Are Fencing Combat Was Joined With Jons A Hrefhttpwebloginfoworldcomudell20031031h2003-11-04T06:43:00-10:002003-11-04T06:43:00-10:00larrytag:knowing.net,2003-11-04:/posts/2003/11/dare-obasanjo-and-jon-udell-are-fencing-combat-was-joined-with-jons-a-hrefhttpwebloginfoworldcomudell20031031h/<p>Dare Obasanjo and Jon Udell are fencing. Combat was joined with Jon's coinage of the phrase "replace-and-defend" to criticize the seemingly disruptive technologies being used in Longhorn, such as the use of a new schema language (rather than W3C XML Schema) to describe the metadata that is the source of …</p><p>Dare Obasanjo and Jon Udell are fencing. Combat was joined with Jon's coinage of the phrase "replace-and-defend" to criticize the seemingly disruptive technologies being used in Longhorn, such as the use of a new schema language (rather than W3C XML Schema) to describe the metadata that is the source of WinFS' promised mojo. Dare's parries that the essence of XML is specific vocabularies for specific tasks and that WinFS' needs are not the needs of XML Schema. Jon ripostes with an unfailingly polite "....no base standards beyond XML itself were of use to WinFS? It puzzles me." and then performs a ballestra "...the terminology of the Longhorn docs is revealing. Person, Contact, and Organization items are referred to as "Windows types," presumably because their schemata appear as classes in Longhorn's managed API. But to me these are universal types, not Windows types. I had expected them to be defined using XML Schema, and to be able to interoperate directly with SOAP payloads and XML documents on any platform. " Touche, Jon! Dare is undoubtedly preparing a fleche.</p>
<p><em>BTW, that's not cribbed from some glossary -- once upon a time I was coached by Ed Richards and Larry Dargie (who, yes, made us fence blind-folded on occasion).</em></p>Being run over by the Cluetrain2003-11-04T04:11:00-10:002003-11-04T04:11:00-10:00larrytag:knowing.net,2003-11-04:/posts/2003/11/being-run-over-by-the-cluetrain/<p>Randy Holloway talks about Microsoft blogs and improved direct access changing the communication chain <em>via</em> [The Scobleizer Weblog]</p>
<p>With the whole gamut of Internet-based communication (Websites, newsgroups and mailing lists, Google, email, and blogs), the typical path between technical question and answer has become much more direct. Was a time …</p><p>Randy Holloway talks about Microsoft blogs and improved direct access changing the communication chain <em>via</em> [The Scobleizer Weblog]</p>
<p>With the whole gamut of Internet-based communication (Websites, newsgroups and mailing lists, Google, email, and blogs), the typical path between technical question and answer has become much more direct. Was a time when a technical question might have to wait for a magazine article or a book to get answered. No more; I was embarassed a few weeks ago by the realization that I'd actually waited a full hour and a half before Googling the answer. This is a good thing for the community as a whole.</p>
<p>It's a bad thing for me. Independent authors and teachers have traditionally exploited the very inefficiencies that are being paved over by these technologies. The community no longer has the same incentive to pay money for magazines, books, seminars, and mentoring / consulting: they get the same substance faster and cheaper, if perhaps not with the same style, context, and specificity. I submit that there still is at least <em>some</em> value in the independent voice and that value sometimes manifests in non-obvious ways (even though I depend on Microsoft technologies and mostly write about .NET, of course as a non-Microsoftian I'm free to criticize InfoPath's licensing model and OneNote's lack of an API, but less obviously, the official Microsoft line on Borland's C#Builder is "great product, solid competition." My pan of C#Builder only saw print because Alan Zeichick, Editor of SD Times, said "Call it like you see it; I can take the heat.") but I think its obvious that current channels for independent technical voices will face ever-increasing alternatives and, logically, declining revenue from those channels.</p>
<p>Is there a way to exploit these new channels in terms of revenue? Or is the best that can be achieved participation in what is essentially an Open Source model, by which I mean participating for the "gift culture" aspects or participating based on corporate sponsorship?</p>Software Developments Annual Salary Survey Is Out San Francisco Bay Area Programme2003-11-04T02:23:00-10:002003-11-04T02:23:00-10:00larrytag:knowing.net,2003-11-04:/posts/2003/11/software-developments-annual-salary-survey-is-out-san-francisco-bay-area-programme/<p>Software Development's <a href="http://www.drdobbs.com/architecture-and-design">Annual Salary Survey</a> is out: San Francisco Bay Area programmers report the highest averages @ \<span class="math">\(100K for staff, and \\)</span>119K for management, Twin Cities come it at the low end for metro areas with \<span class="math">\(83K staff and \\)</span>92K management. National mean is \<span class="math">\(77K staff and \\)</span>96K management (implying a …</p><p>Software Development's <a href="http://www.drdobbs.com/architecture-and-design">Annual Salary Survey</a> is out: San Francisco Bay Area programmers report the highest averages @ \<span class="math">\(100K for staff, and \\)</span>119K for management, Twin Cities come it at the low end for metro areas with \<span class="math">\(83K staff and \\)</span>92K management. National mean is \<span class="math">\(77K staff and \\)</span>96K management (implying a pretty big drop-off from metro salaries in outlying areas). Management pay is going up while staff pay is flat.</p>
<p>This survey has <em>really</em> gotten a lot better over the years and has enough regional breakdowns to be actively valuable for the job seekers. My favorite factoid: The highest staff salary by language used? Python @\$86K! The market speaks, ignore it at your peril!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Single User Source Control2003-11-03T23:28:00-10:002003-11-03T23:28:00-10:00larrytag:knowing.net,2003-11-03:/posts/2003/11/single-user-source-control/<p>Many people have asked us for a single-user SourceGear Vault license at a very-low-cost....The Single User Edition of Vault is now available at a cost of \$49....Why would anyone want to use source control on a team of one?....It's an undo mechanism....It's a historical archive....It's …</p><p>Many people have asked us for a single-user SourceGear Vault license at a very-low-cost....The Single User Edition of Vault is now available at a cost of \$49....Why would anyone want to use source control on a team of one?....It's an undo mechanism....It's a historical archive....It's a reference point for diff....It's a backup....It's a journal of my progress....It's a server. <em>via</em> [Eric.Weblog()]</p>
<p>It never occurred to me that even lone coders <em>wouldn't</em> use source control. I <em>always</em> use source control. When I'm in Lone Coder mode, I'm always doing crazy shiznit, slapping stuff in and out. I'll admit that I use Ctl-C quite a bit (in VS.NET, that comments out the selected code), but I also use source control every couple hours. A metaphor I've used a couple of times for change management is that it's like placing protection when mountain climbing -- while there are real tradeoffs between speed and the appropriate formality of your change management, there are very few interesting situations that don't require <em>some</em> protection. (BTW, I can't vouch for SourceGear; never used it.)</p>Borland's Early Years: 'A Wild Ride'2003-11-03T06:37:00-10:002003-11-03T06:37:00-10:00larrytag:knowing.net,2003-11-03:/posts/2003/11/borlands-early-years-a-wild-ride/<p>As Borland Software Corp. celebrates its 20th year this week at its BorCon conference, developers and managers around the industry are recalling the company's legacy and impact on the software business. <em>via</em> [<a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments?kc=EWRSS02129TX1K0000531">eWEEK Technology News</a>]</p>I Installed The PDC Longhorn Again Today Into VMWare Much Better Experience Used XP Pro As The OS For VMWare I Could Instal2003-11-03T05:54:00-10:002003-11-03T05:54:00-10:00larrytag:knowing.net,2003-11-03:/posts/2003/11/i-installed-the-pdc-longhorn-again-today-into-vmware-much-better-experience-used-xp-pro-as-the-os-for-vmware-i-could-instal/<p>I installed the PDC Longhorn again today into VMWare. Much better experience: used "XP Pro" as the OS for VMWare. I could install VMTools directly (all drivers gave a "Haven't passed certification" warnings, which I ignored). Gave the VM 512MB RAM and 4GB drive; performance seems pretty darn okay on …</p><p>I installed the PDC Longhorn again today into VMWare. Much better experience: used "XP Pro" as the OS for VMWare. I could install VMTools directly (all drivers gave a "Haven't passed certification" warnings, which I ignored). Gave the VM 512MB RAM and 4GB drive; performance seems pretty darn okay on a 2.6GHz machine with a Radeon 9200, but I didn't do anything really taxing yet.</p>Longhorn and VMWare2003-11-02T06:29:00-10:002003-11-02T06:29:00-10:00larrytag:knowing.net,2003-11-02:/posts/2003/11/longhorn-and-vmware/<p>Just wasted 1.5 hours installing longhorn on vmware as an "other Os... "-that's a mistake because you can't install vmware tools & therefore are restricted to 640 x480x 4 graphics! longhorn does not look nearly as impressive in VGA!</p>
<p><em>Blogged on a Tablet PC</em></p>P A Prolog For NET Implemented As A Prolog To C Translator2003-11-01T23:18:00-10:002003-11-01T23:18:00-10:00larrytag:knowing.net,2003-11-01:/posts/2003/11/p-a-prolog-for-net-implemented-as-a-prolog-to-c-translator/<p><a href="http://www.dcs.ed.ac.uk/home/jjc/">P#: A Prolog For .NET</a> Implemented as a Prolog to C# translator.</p>Serial Killer Or Programming Language Inventor VianbspA Hre2003-10-31T23:39:00-10:002003-10-31T23:39:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/serial-killer-or-programming-language-inventor-vianbspa-hre/<p><a href="http://www.malevole.com/mv/misc/killerquiz/">Serial killer or programming language inventor</a>? <em>via <a href="https://boingboing.net/">[</a></em><a href="https://boingboing.net/">BoingBoing]</a></p>
<p>I got 7/10.</p>William Gibson Wants Lies Exposed In Telltale Colors2003-10-31T02:06:00-10:002003-10-31T02:06:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/william-gibson-wants-lies-exposed-in-telltale-colors/<p>William Gibson wants <a href="https://www.nytimes.com/2003/10/30/technology/ideas-unlimited-built-to-order.html">lies exposed in telltale colors</a>. Now <em>that</em> would be a good demo of P2P and Avalon!</p>Speaking Of Awesome Demos Heres An Interactive Powers Of 10 A Hrefhttpmicromagnetfsueduprimerjavascienceopticsu2003-10-31T01:53:00-10:002003-10-31T01:53:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/speaking-of-awesome-demos-heres-an-interactive-powers-of-10-a-hrefhttpmicromagnetfsueduprimerjavascienceopticsu/<p>Speaking of awesome demos, here's an interactive "Powers of 10" <a href="https://micro.magnet.fsu.edu/primer/java/scienceopticsu/powersof10/index.html">slideshow that's great</a>. <em>via</em> <a href="http://www.polynomia.com/archives/000006.php">Polynomia</a></p>Oh My Favorite Demo Of The Whole Show Was One I Got On A Bus Ride Steven Burns Showed Me The Longhorn Shell Which Advances2003-10-31T01:44:00-10:002003-10-31T01:44:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/oh-my-favorite-demo-of-the-whole-show-was-one-i-got-on-a-bus-ride-steven-burns-showed-me-the-longhorn-shell-which-advances/<p>Oh, my favorite demo of the whole show was one I got on a bus ride! Steven Burns showed me the Longhorn Shell, which advances the "pipes and filters" pattern of UNIX by piping not text streams, but object streams! So, for instance, you can grab all the currently running …</p><p>Oh, my favorite demo of the whole show was one I got on a bus ride! Steven Burns showed me the Longhorn Shell, which advances the "pipes and filters" pattern of UNIX by piping not text streams, but object streams! So, for instance, you can grab all the currently running process with a <strong>ps</strong> command (well, <strong>get/process</strong> is the "real" name, but <strong>alias get/process ps</strong> works), and then because what's being streamed are real objects and not just text streams, you can filter it with an arbitrary query against an object-specific property (<strong>ps | filter handlecount -gt 400</strong>)<strong> </strong>and then pump that into different formatters: <strong>ps | filter handlecount -gt 400 | tableformatter</strong> or <strong>ps | filter handlecount -gt 400 | xmlformatter</strong> or <strong>ps | filter handlecount -gt 400 | listformatter</strong> <em>or</em> <strong>ps | filter handlecount -gt 400 | FullGuiFormatter</strong> (I'm handwaving at what the real "full GUI formatter" command is, but I saw it work).</p>
<p>You know, rendering a GUI transition with <a href="https://www.adobe.com/products/aftereffects.html">AfterEffects</a> is very nice and all, but sysadmin scripting: priceless.</p>Borland Was Showing Delphi For NET At The PDC BorCon Is Next Week You Migh2003-10-31T01:31:00-10:002003-10-31T01:31:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/borland-was-showing-delphi-for-net-at-the-pdc-borcon-is-next-week-you-migh/<p>Borland was showing Delphi for .NET at the PDC. BorCon is next week: you might want to bring your credit card.</p>The First Modeling Tool From Microsofts New A Hrefhttpmsdnmicrosoftcomvstudioproductinfoenterprisedefaultaspxpul2003-10-31T01:26:00-10:002003-10-31T01:26:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/the-first-modeling-tool-from-microsofts-new-a-hrefhttpmsdnmicrosoftcomvstudioproductinfoenterprisedefaultaspxpul/<p>The first modeling tool from Microsoft's new "Whitehorse" initiative expresses deployment topologies and the constraints that work upon them (e.g., by dropping a "Hardened IIS" component in your DMZ and a "Web Services" component in your middle-tier and connecting them, you are expressing a whole slew of constraints about …</p><p>The first modeling tool from Microsoft's new "Whitehorse" initiative expresses deployment topologies and the constraints that work upon them (e.g., by dropping a "Hardened IIS" component in your DMZ and a "Web Services" component in your middle-tier and connecting them, you are expressing a whole slew of constraints about what ports are open to whom, what sorts of connections will be accepted, etc.). This is not just a nicely pragmatic tool, it is also not something addressed by UML. I asked Keith Short if the decision to avoid (or at least delay) a direct conflict with UML was deliberate. "Absolutely," he told me.</p>At One Of The CLR Evolution Talks I Disagreed With The Prevailing Notion That Serving The Needs Of The Current Lang2003-10-31T01:14:00-10:002003-10-31T01:14:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/at-one-of-the-clr-evolution-talks-i-disagreed-with-the-prevailing-notion-that-serving-the-needs-of-the-current-lang/<p>At one of the CLR evolution talks, I disagreed with the prevailing notion that serving the needs of the <em>current</em> language community should be of paramount concern. To me, interop trumps language fidelity. It is only <em>via</em> interop that minority programming languages can enter the corporate market. Crown-jewel software is …</p><p>At one of the CLR evolution talks, I disagreed with the prevailing notion that serving the needs of the <em>current</em> language community should be of paramount concern. To me, interop trumps language fidelity. It is only <em>via</em> interop that minority programming languages can enter the corporate market. Crown-jewel software is <em>always</em> so complex that it constitutes its own domain; the idea that the Bus Factor (the number of people whose death in a bus run-down would be catastrophic to the company) can be minimized by using a majority language for the crown jewels is largely an illusion. The problem isn't the crown-jewel software, it's the <em>other</em> stuff, the administrative interfaces, the reporting functions, the integration bridges, that are legitimate arguments against the use of minority languages in corporate environments.</p>
<p>So the argument goes, "Well, the current language enthusiasts demand the fidelity or they won't have the opportunity to create the crown jewels in their unique way." But my argument is that adoption is driven by the young. It's the kids who are just entering the marketplace who are going to do something astounding; it's the kid who doesn't give a fig about language fidelity who's going to combine X with Y in a way that gives his or her company a real competitive advantage. Software advances not by theory, but by the unexpected consequences of implementation. The ultimate success of the .NET platform depends upon how pragmatic it is to <em>combine</em> trail-blazing components that exploit some unique expressiveness of a minority or domain-specific language with the support and infrastructure components of the more mainstream "homesteading" languages.</p>MS Languages Diverge in Whidbey2003-10-31T00:45:00-10:002003-10-31T00:45:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/ms-languages-diverge-in-whidbey/<p>For the past two years, convergence has been the theme in Microsoft languages. Visual Basic .NET was a significant break from VB6 and is a very similar experience to programming in C#; Managed C++ gained the use of visual forms design; everything worked inside Visual Studio .NET. The theme of …</p><p>For the past two years, convergence has been the theme in Microsoft languages. Visual Basic .NET was a significant break from VB6 and is a very similar experience to programming in C#; Managed C++ gained the use of visual forms design; everything worked inside Visual Studio .NET. The theme of Whidbey at the compiler level is that the languages are <em>diverging</em> -- VB.NET will have unique things (edit and continue), C# will have unique things (closures), and C++ will have unique things (deterministic finalization). As you can see, these divergences are to the service of the languages' core audience (VB.NET: programmer experience, C#: language expressiveness, C++: control and performance).</p>
<p>There are other things, most notably generics, that will be shared across all languages. One of things that I was very interested at the various discussions of CLR evolution is the concern that the unification necessary for interop (what I described immediately following the BoF as a concern for the BCL, but which really extends beyond that) <em>may</em> impede innovation in languages: it may be the case that every language can agree to the existence of an <strong>int</strong> but with concepts such as <strong>IMap\<K, V></strong>, it's not as sure a thing.</p>Peter Draytons Back2003-10-31T00:26:00-10:002003-10-31T00:26:00-10:00larrytag:knowing.net,2003-10-31:/posts/2003/10/peter-draytons-back/<p>Peter Drayton's <a href="http://www.razorsoft.net/">back</a>!</p>Micropayments, writing, and independent software crafting...2003-10-30T23:40:00-10:002003-10-30T23:40:00-10:00larrytag:knowing.net,2003-10-30:/posts/2003/10/micropayments-writing-and-independent-software-crafting/<blockquote>
<p>...as the drunks say, you can't fall off the floor. Anyone offering content free gains an advantage that can't be beaten, only matched, because the competitive answer to free -- "I'll pay you to read my weblog!" -- is unsupportable over the long haul....In a world of free content, even the …</p></blockquote><blockquote>
<p>...as the drunks say, you can't fall off the floor. Anyone offering content free gains an advantage that can't be beaten, only matched, because the competitive answer to free -- "I'll pay you to read my weblog!" -- is unsupportable over the long haul....In a world of free content, even the moderate hassle of micropayments greatly damages user preference, and increases their willingness to accept free material as a substitute." <em>via</em> [The Start of Fee]</p>
</blockquote>
<p>I'm afraid he's right. I do two things to make my living: craft words and craft software. Both careers are severely threatened. Ironically, one of the reasons I dropped out of college was because I could make money crafting software. What did I leave behind? Dual majors in Marine Biology and English. I apparently have a poverty-seeking gene.</p>
<p>One thing that few people have mentioned is that offshoring is a great threat to independent software developers. In the past, I've always subsidized my writing by contract work, but the short engagements that I've specialized in are flowing offshore at an amazing rate; in the past year, <em>every single</em> small contract negotiation (\<span class="math">\(5-\\)</span>20K projects) has revealed that I'm competing against offshore resources. All the offshoring press discusses big IT resources and high-quality teams, but there's another story, which is the lower-quality teams that are threatening the independent software crafter. Open Source may be a challenge to ISVs, but independent software consulting is almost certainly doomed as a way to make a living wage, at least in urban areas. </p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>I just visited Text America's PDC Photoblog and saw Don Box's face smiling out...2003-10-30T23:00:00-10:002003-10-30T23:00:00-10:00larrytag:knowing.net,2003-10-30:/posts/2003/10/i-just-visited-text-americas-pdc-photoblog-and-saw-don-boxs-face-smiling-out/<blockquote>
<p>I just visited Text America's PDC Photoblog and saw Don Box's face smiling out at me. I wonder how to make photo blogs more useful. Thanks to those of you who posted photos. <em>via</em> [The Scobleizer Weblog]</p>
</blockquote>
<p>This is why I ended up generating FOAF from Outlook the other day …</p><blockquote>
<p>I just visited Text America's PDC Photoblog and saw Don Box's face smiling out at me. I wonder how to make photo blogs more useful. Thanks to those of you who posted photos. <em>via</em> [The Scobleizer Weblog]</p>
</blockquote>
<p>This is why I ended up generating FOAF from Outlook the other day. My thought is that photoblogs become much, <em>much</em> more useful when tied to an easy annotation system that asserts XML-based metadata, perhaps FOAF and RDF, perhaps something else (one of the gajillion WinFS schemas discussed at the PDC?). Equally, once you've licked this problem, you don't just have a photoblog tool, you have a foundation for a generally-useful tool:</p>
<p>\<</p>
<p>p dir=ltr></p>Lonestar, the number 1.7, and an SDK - what they are (not)2003-10-30T01:19:00-10:002003-10-30T01:19:00-10:00larrytag:knowing.net,2003-10-30:/posts/2003/10/lonestar-the-number-17-and-an-sdk-what-they-are-not/<p>::: {.Section1}</p>
<blockquote>
<p><strong>[The 1.7 refers to a new version of the Tablet PC SDK]{style="FONT-WEIGHT: bold"}</strong>. ... <strong>[Lonestar]{style="FONT-WEIGHT: bold"}</strong> is the codename for a Tablet PC project that should be released in the first half of 2004....and Lonestar is not supposed to be "version 2.0" anyway …</p></blockquote><p>::: {.Section1}</p>
<blockquote>
<p><strong>[The 1.7 refers to a new version of the Tablet PC SDK]{style="FONT-WEIGHT: bold"}</strong>. ... <strong>[Lonestar]{style="FONT-WEIGHT: bold"}</strong> is the codename for a Tablet PC project that should be released in the first half of 2004....and Lonestar is not supposed to be "version 2.0" anyway....don't put users and buyers into the middle of a fray they don't care about. If people want to be excited about a next "version" of the Tablet PC OS, just quietly correct them, and fuel their joy. Don't make it look like the Tablet PC division spends more arguing and being needlessly paranoid than developing features that users want. <em>via</em> [Tabula PC]</p>
</blockquote>
<p>Very good post; read the whole thing.
:::</p>Its In The Nature Of BoFs Birds Of A Feather Sessions To Be Frustrating No Sooner Does The Ice Break Than The Proctor Com2003-10-28T15:02:00-10:002003-10-28T15:02:00-10:00larrytag:knowing.net,2003-10-28:/posts/2003/10/its-in-the-nature-of-bofs-birds-of-a-feather-sessions-to-be-frustrating-no-sooner-does-the-ice-break-than-the-proctor-com/<p>It's in the nature of BoFs (Birds of a Feather sessions) to be frustrating. No sooner does the ice break than the proctor comes in and announces that the last bus to the hotels leaves in 10 minutes. Oh well...</p>
<p>The "Alternate Programming Languages" BoF gathered a great group, but …</p><p>It's in the nature of BoFs (Birds of a Feather sessions) to be frustrating. No sooner does the ice break than the proctor comes in and announces that the last bus to the hotels leaves in 10 minutes. Oh well...</p>
<p>The "Alternate Programming Languages" BoF gathered a great group, but I'm afraid that 60 minutes was patently unworthy of the stories to tell and questions to ask. After going around and getting a sense of the group, we talked mostly about two questions, one predictable ("Does the CLR inhibit dynamic languages?") and one less obvious, but ultimately perhaps more important: "Does the Base Class Library taint languages?" Or more generally, if you accept that a class library implies patterns and programming models, is this terribly jarring to people programming with different patterns and programming models?</p>
<p>I don't think we reached a consensus and I'd be suspicious of whether the group was a representative sample of the user community anyway! In the group, people mostly voiced a pragmatic acceptance that you might have to deal with different programming models and it's not a big deal. I'm not sure I agree, but I certainly enjoyed the conversation.</p>Tablet OS Denied2003-10-28T12:44:00-10:002003-10-28T12:44:00-10:00larrytag:knowing.net,2003-10-28:/posts/2003/10/tablet-os-denied/<p>strenuous "We have not -announced any time for new Tablet PC O's: Havens gone to the Allchin tape to confirm or deny.</p>
<p><em>Blogged on a Tablet PC</em></p>Tablet PC 1.7 SDK RSN2003-10-28T12:42:00-10:002003-10-28T12:42:00-10:00larrytag:knowing.net,2003-10-28:/posts/2003/10/tablet-pc-17-sdk-rsn/<p>Just got confirmed that my security problems having my code deploy as "smart clients Tiepin a web Page) is a known problen in The current Tablet SDK. Thank God-I was, like, "Gee, maybe I done -understand smart clients." Patched in The 1.7 SDK coming in beta RSN.</p>
<p><em>Blogged on …</em></p><p>Just got confirmed that my security problems having my code deploy as "smart clients Tiepin a web Page) is a known problen in The current Tablet SDK. Thank God-I was, like, "Gee, maybe I done -understand smart clients." Patched in The 1.7 SDK coming in beta RSN.</p>
<p><em>Blogged on a Tablet PC</em></p>New shell in Longhorn2003-10-28T12:32:00-10:002003-10-28T12:32:00-10:00larrytag:knowing.net,2003-10-28:/posts/2003/10/new-shell-in-longhorn/<p>Just got a demo of the new "Dos" shell in Longhorn. Its a great idea, hugely scriptable and based on unix-typecommand piping. But instead of text being piped, You get real objects, pumped to You asynchronously, Beautiful piece of code.</p>
<p><em>Blogged on a Tablet PC</em></p>Tablet PC Coding Contest 15000 First Prize But Youre Going To Have To2003-10-27T08:58:00-10:002003-10-27T08:58:00-10:00larrytag:knowing.net,2003-10-27:/posts/2003/10/tablet-pc-coding-contest-15000-first-prize-but-youre-going-to-have-to/<p><a href="https://www.doesyourcodethinkinink.com/">Tablet PC Coding Contest</a>: \$15,000 first prize. But you're going to have to get by me to win...</p>I Wont Be At The PDC Until Tomorrow Morning But Sitting At Home Hitting Get News Now Reveals That Information Aboutnb2003-10-27T02:58:00-10:002003-10-27T02:58:00-10:00larrytag:knowing.net,2003-10-27:/posts/2003/10/i-wont-be-at-the-pdc-until-tomorrow-morning-but-sitting-at-home-hitting-get-news-now-reveals-that-information-aboutnb/<p>I won't be at the PDC until tomorrow morning, but sitting at home hitting "Get news now..." reveals that information about the Whidbey release of Visual Studio is beginning to appear: <a href="https://dotnet.microsoft.com/apps/aspnet">http://www.asp.net/whidbey/</a> </p>Outlook 2003 to FOAF Generator2003-10-23T08:48:00-10:002003-10-23T08:48:00-10:00larrytag:knowing.net,2003-10-23:/posts/2003/10/outlook-2003-to-foaf-generator/<p>Talk about creeping featuritis: there I was working on adding image annotation to my ink-based blogging tool when... Well, who wants to alpha-test an Outlook <strong>2003</strong> Contacts to FOAF generator? If you don't know what FOAF is, this isn't the release for you. <a href="mailto:lobrien@thinking.net">Lemme' know if you want to try …</a></p><p>Talk about creeping featuritis: there I was working on adding image annotation to my ink-based blogging tool when... Well, who wants to alpha-test an Outlook <strong>2003</strong> Contacts to FOAF generator? If you don't know what FOAF is, this isn't the release for you. <a href="mailto:lobrien@thinking.net">Lemme' know if you want to try it out</a>. This is just an Outlook->FOAF->FOAF registry bridge; it's not ink-based and it doesn't have any image annotation features.</p>
<p>This is what it looks like:</p>
<p>And it generates something like http://www.thinkingin.net/foaf.rdf.</p>
<p>By the way, Outlook 2003 is <strong>easy</strong> to program for.</p>Motorola Mpx200 Smartphone For 150 With New ATampT Wireless Account 299 OtherwiseIFRAME MarginWidth0 MarginHeight2003-10-21T04:13:00-10:002003-10-21T04:13:00-10:00larrytag:knowing.net,2003-10-21:/posts/2003/10/motorola-mpx200-smartphone-for-150-with-new-atampt-wireless-account-299-otherwiseiframe-marginwidth0-marginheight/<p>Motorola Mpx200 Smartphone for \<span class="math">\(150 with new AT&T Wireless account, \\)</span>299 otherwise.</p>
<p><img alt="Shop at Amazon.com" height="240" src="http://rcm-images.amazon.com/images/G/01/rcm/120x240.gif" width="120"></p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script' …</script><p>Motorola Mpx200 Smartphone for \<span class="math">\(150 with new AT&T Wireless account, \\)</span>299 otherwise.</p>
<p><img alt="Shop at Amazon.com" height="240" src="http://rcm-images.amazon.com/images/G/01/rcm/120x240.gif" width="120"></p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Im Expecting Some Heat About My LatestnbspSD Timesnbspcolumn Wh2003-10-20T03:12:00-10:002003-10-20T03:12:00-10:00larrytag:knowing.net,2003-10-20:/posts/2003/10/im-expecting-some-heat-about-my-latestnbspsd-timesnbspcolumn-wh/<p>I'm expecting some heat about my latest SD Times column, where I talk about my experiences working on 3 airline reservation systems: one written in J2EE, one written in J2SE, and one written in .NET.</p>Smart Utility Software Linked To A Hardware Device The Migo Is A 150 128MB USB Chipdis2003-10-20T03:02:00-10:002003-10-20T03:02:00-10:00larrytag:knowing.net,2003-10-20:/posts/2003/10/smart-utility-software-linked-to-a-hardware-device-the-migo-is-a-150-128mb-usb-chipdis/<p>Smart: utility software linked to a hardware device. The Migo is a \<span class="math">\(150 128MB USB chipdisk. That's about a \\)</span>100 premium over what at first glance appears to be <a href="https://www.amazon.com/exec/obidos/tg/detail/-/B00006B7LO/ref%3dpd_sbs_e_4/104-8699653-3299924%3fv%3dglance%26s%3delectronics%26n%3d507846">a similar device</a>. But the Migo has a custom driver that grabs your Outlook settings, your Favorites folder, etc. Now, let's …</p><p>Smart: utility software linked to a hardware device. The Migo is a \<span class="math">\(150 128MB USB chipdisk. That's about a \\)</span>100 premium over what at first glance appears to be <a href="https://www.amazon.com/exec/obidos/tg/detail/-/B00006B7LO/ref%3dpd_sbs_e_4/104-8699653-3299924%3fv%3dglance%26s%3delectronics%26n%3d507846">a similar device</a>. But the Migo has a custom driver that grabs your Outlook settings, your Favorites folder, etc. Now, let's just say that you wrote a utility program that allows you to zip up your /Local Settings folder and carry it around with you. Think you could sell it for \<span class="math">\(100 and say "Just use it with your \\)</span>50 chipdisk"? Of course not. You <em>might</em> get a handful of registrations if you made it \$30 shareware. But probably not.</p>
<p>That's why it's a good idea to learn about .NET Compact Framework and SPOT.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>I Hardcoded A Link To InkPositive Into The Tablet Blogging Tool Ive Been Hacking2003-10-20T00:27:00-10:002003-10-20T00:27:00-10:00larrytag:knowing.net,2003-10-20:/posts/2003/10/i-hardcoded-a-link-to-inkpositive-into-the-tablet-blogging-tool-ive-been-hacking/<p>I hard-coded a link to <a href="https://www.hugedomains.com/domain_profile.cfm?d=inkpositive&e=com">InkPositive</a> into the tablet blogging tool I've been hacking on in the evenings and Scoble picked up on it. Here's the deal: I want to do a community site dedicated to Tablet PC <em>software</em>, not hardware. But the site has to be optimized for the …</p><p>I hard-coded a link to <a href="https://www.hugedomains.com/domain_profile.cfm?d=inkpositive&e=com">InkPositive</a> into the tablet blogging tool I've been hacking on in the evenings and Scoble picked up on it. Here's the deal: I want to do a community site dedicated to Tablet PC <em>software</em>, not hardware. But the site has to be optimized for the Tablet PC, which means there has to be a lot of ink-y stuff on it. I've got that wired -- I've got usable prototypes of an ink blogging tool and an inked discussion board (I'm getting SecurityExceptions when I try to do a "smart client" style Web Install of the client-side editing tools, but I'm sure I'll figure that out) , and the solution I'm working on for adding links to inked blog items should enable me to pull off an ink wiki.</p>
<p>But what I've had difficulty doing is finding a community framework that allows for the type of layout customization that I absolutely need. I've played with both the ASP.NET Community Starter Kit and DotNetNuke and neither fits my mental "object model" of a community framework, leading to the temptation to roll my own. The mental tension between "Login management is, like, four ASPX pages and then Bob's your Uncle," and "You've got to be nuts to consider reinventing the wheel" has kept me paralyzed for five months.</p>
<p>Anyway, InkPositive is a secondary priority behind an educational resource that I'm hoping to roll out soon that I think will be extraordinarily useful and that might (just might) generate enough income to pay for the time invested.</p>Nomad Has A 60GB MP3 Player Ooh Thats The Sweet2003-10-15T23:27:00-10:002003-10-15T23:27:00-10:00larrytag:knowing.net,2003-10-15:/posts/2003/10/nomad-has-a-60gb-mp3-player-ooh-thats-the-sweet/<p>Nomad has a 60GB MP3 player. Ooh, that's the sweet spot for me, my entire album collection would fit... But, I recently subscribed to <a href="https://www.yahoo.com/entertainment/music/">MusicMatch</a>, which has a fantastic "Artist Match Radio" that's been making me delirious -- you get breakdowns of the band's members' <em>other</em> bands, roots, influences, etc. It's …</p><p>Nomad has a 60GB MP3 player. Ooh, that's the sweet spot for me, my entire album collection would fit... But, I recently subscribed to <a href="https://www.yahoo.com/entertainment/music/">MusicMatch</a>, which has a fantastic "Artist Match Radio" that's been making me delirious -- you get breakdowns of the band's members' <em>other</em> bands, roots, influences, etc. It's awesome. Plus, they have \$.99 downloads with which I've already spent more on music in the past 2 weeks than I have in the previous year.</p>No Title2003-10-14T00:31:00-10:002003-10-14T00:31:00-10:00larrytag:knowing.net,2003-10-14:/posts/2003/10/no-title/<blockquote>
<p>[ A silence falls across the room as I realize that <a href="https://www.joelonsoftware.com/2003/10/13/13/" title="http://www.joelonsoftware.com/items/2003/10/13.html">Joel has written something I disagree with entirely</a>. <em>[via ]{style="FONT-STYLE: italic"}</em>[The .NET Guy\< ?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />]]{style="FONT-SIZE: 12pt"}</p>
<p>[\< ?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />I'm with Brad ".NET …</p></blockquote><blockquote>
<p>[ A silence falls across the room as I realize that <a href="https://www.joelonsoftware.com/2003/10/13/13/" title="http://www.joelonsoftware.com/items/2003/10/13.html">Joel has written something I disagree with entirely</a>. <em>[via ]{style="FONT-STYLE: italic"}</em>[The .NET Guy\< ?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />]]{style="FONT-SIZE: 12pt"}</p>
<p>[\< ?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />I'm with Brad ".NET Guy" Wilson on this. Joel compares exceptions to gotos and not just with the obligatory "considered harmful" phrase, but by comparing them to "gotos sprinkled throughout your code." Now, I don't think that Exceptions-As-Know-Them are the ultimate solution, but comparing them to gotos <em>[and]{style="FONT-STYLE: italic"}</em> invoking "Go To Statement Considered Harmful" is a particularly poor choice. Most people think that Dijkstra damned gotos because they introduce multiple entry points into a code block (i.e., they allow spaghetti). Not at all. In fact, what he complains about is that a goto makes it "terribly hard" to know the state and history of a program's execution ("we can interpret the value of a variable only with respect to the progress of the process .The unbridled use of the <strong><em>*go to</em></strong>* statement has an immediate consequence that it becomes terribly hard to find a meaningful set of coordinates in which to describe the process progress ." ). ]{style="FONT-SIZE: 12pt"}</p>
<p>[With exceptions as implemented in Java and .NET, this is precisely not true. One of the most common complaints when teaching Java or .NET exceptions is "Why are my variables out of scope in the catch (or finally) block?" The reason is precisely that during exception handling, the history of the program is effectively guaranteed to the beginning of the exception scope and the stack-trace gives you most of the information you need to determine the location in code and history that led to the error (what Dijkstra calls the "coordinates" of the program). It's true that without catching the exception in a debugger that lets you walk up the call stack, you can have some difficulty determining when your error was produced (e.g., the exception doesn't tell you that the invalid value came from the 23rd position in your array), but in general, structured exceptions a la Java and .NET are markedly superior for precisely the reason that Dijstra disliked gotos: rapid determination of the state and history of the process leading to the current situation.]{style="FONT-SIZE: 12pt"}</p>
</blockquote>IDEA For C Officially Announced The Best Languagesp2003-10-10T00:58:00-10:002003-10-10T00:58:00-10:00larrytag:knowing.net,2003-10-10:/posts/2003/10/idea-for-c-officially-announced-the-best-languagesp/<p>IDEA for C# officially announced! The best language-specific programming editor <em>ever</em> is IntelliJ / JetBrains IDEA for Java. (And yes, I've used and loved Smalltalk and IDEA is better.)</p>
<p>Eugene Belyaev, President and CTO of JetBrains, has let the cat out of the bag, finally, on what will, at least initially …</p><p>IDEA for C# officially announced! The best language-specific programming editor <em>ever</em> is IntelliJ / JetBrains IDEA for Java. (And yes, I've used and loved Smalltalk and IDEA is better.)</p>
<p>Eugene Belyaev, President and CTO of JetBrains, has let the cat out of the bag, finally, on what will, at least initially, be a plug-in for Visual Studio. When will it be available? Well, no word on that, but I know for a fact that development is already under way and that Belyaev and his partner Sergei Dmitriev have grown their company slowly in order not to dilute their programming talent pool <em>and</em> that the C# team is fully staffed. So, unless they get distracted by their other projects (they're going from one major product to at least three) I expect that we'll see an Early Access Program sooner rather than later.</p>Text Mode2003-10-09T07:04:00-10:002003-10-09T07:04:00-10:00larrytag:knowing.net,2003-10-09:/posts/2003/10/text-mode/<p>A radio button allows the Tablet blogger to create a purely text-based entry.</p>
<p><em>Blogged on a Tablet PC</em></p>Well Contrary To My Certainty It Looks Like More People Voted For Schwarzenegger Than Voted Against The Reca2003-10-07T22:36:00-10:002003-10-07T22:36:00-10:00larrytag:knowing.net,2003-10-07:/posts/2003/10/well-contrary-to-my-certainty-it-looks-like-more-people-voted-for-schwarzenegger-than-voted-against-the-reca/<p>Well, contrary to my certainty, it looks like more people voted <em>for</em> Schwarzenegger than voted <em>against</em> the recall, which gives the outcome far more legitimacy than I thought it would have. Okay, that's it, no more politics.</p>Oh And I Try Not To Let My Politics Enter My Writingnbspso Ill Just Make The Observation Thatnbspits Certain That Tom2003-10-06T06:54:00-10:002003-10-06T06:54:00-10:00larrytag:knowing.net,2003-10-06:/posts/2003/10/oh-and-i-try-not-to-let-my-politics-enter-my-writingnbspso-ill-just-make-the-observation-thatnbspits-certain-that-tom/<p>Oh, and I try not to let my politics enter my writing, so I'll just make the observation that it's certain that tomorrow more people will vote for Gray Davis to (stay) Governor than will vote for Arnold Schwarzenegger to (become) Governor.</p>Ahm So Tahred Tina And I Spent The Weekend Preparing A Submission For The Amazing Race2003-10-06T06:36:00-10:002003-10-06T06:36:00-10:00larrytag:knowing.net,2003-10-06:/posts/2003/10/ahm-so-tahred-tina-and-i-spent-the-weekend-preparing-a-submission-for-a-hrefhttpwwwcbscomprimetimeamazingrac/<p>Ah'm so tahred. Tina and I spent the weekend preparing a submission for <em><a href="https://www.cbs.com/shows/">The Amazing Race</a></em> and, on top of that, we not only had parties Friday and Saturday night, we hosted a dinner party last night. I spent the whole day today finishing an article that I should have …</p><p>Ah'm so tahred. Tina and I spent the weekend preparing a submission for <em><a href="https://www.cbs.com/shows/">The Amazing Race</a></em> and, on top of that, we not only had parties Friday and Saturday night, we hosted a dinner party last night. I spent the whole day today finishing an article that I should have been able to finish by noon. Okay, I know all of that's boring, but this might be interesting -- the article is about an application that I've been working on with the guys at <a href="http://www.3leaf.com/default/home.aspx">3Leaf</a> (aka Early and Adopter) that's a .NET interface to Global Positioning System (GPS) devices. It uses a serial interface by Corrado Cavalli (<a href="http://www.codeworks.it/net/index.htm">www.codeworks.it/net/index.htm</a>]) but exposes GPS events like "PositionFix", so using it looks like this:</p>
<div class="highlight"><pre><span></span><code><span class="nt">Gps</span><span class="w"> </span><span class="nt">gps</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nt">new</span><span class="w"> </span><span class="nt">Gps</span><span class="o">(</span><span class="nt">ConfigurationSettings</span><span class="p">.</span><span class="nc">AppSettings</span><span class="cp">[</span><span class="s2">"GPSPort"</span><span class="cp">]</span><span class="o">);</span>
<span class="nt">gps</span><span class="p">.</span><span class="nc">positionFix</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nt">new</span><span class="w"> </span><span class="nt">GpsEventHandler</span><span class="o">(</span><span class="nt">gps_PositionFix</span><span class="o">);</span>
<span class="o">...</span>
<span class="nt">private</span><span class="w"> </span><span class="nt">void</span><span class="w"> </span><span class="nt">gps_PositionFix</span><span class="o">(</span><span class="nt">object</span><span class="o"><</span><span class="w"> </span><span class="o">?</span><span class="nt">xml</span><span class="p">:</span><span class="nd">namespace</span><span class="w"> </span><span class="nt">prefix</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nt">o</span><span class="w"> </span><span class="nt">ns</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"urn:schemas-microsoft-com:office:office"</span><span class="w"> </span><span class="o">/></span><span class="w"> </span><span class="nt">src</span><span class="o">,</span><span class="w"> </span><span class="nt">GpsEventArgs</span><span class="w"> </span><span class="nt">args</span><span class="o">)</span><span class="w"> </span>
<span class="p">{</span><span class="w"> </span>
<span class="w"> </span><span class="err">LatLongFixEventArgs</span><span class="w"> </span><span class="err">fix</span><span class="w"> </span><span class="err">=</span><span class="w"> </span><span class="err">(LatLongFixEventArgs)</span><span class="w"> </span><span class="err">args</span><span class="p">;</span><span class="w"> </span>
<span class="w"> </span><span class="err">Console.WriteLine("</span><span class="n">Latitude</span><span class="p">:</span><span class="w"> </span><span class="err">{</span><span class="mi">0</span><span class="p">}</span><span class="w"> </span><span class="nt">Longitude</span><span class="o">:</span><span class="w"> </span><span class="p">{</span><span class="err">1</span><span class="p">}</span><span class="err">"</span><span class="o">,</span><span class="w"> </span><span class="nt">fix</span><span class="p">.</span><span class="nc">Lat</span><span class="o">,</span><span class="w"> </span><span class="nt">fix</span><span class="p">.</span><span class="nc">Long</span><span class="o">);</span><span class="w"> </span>
<span class="err">}</span>
</code></pre></div>
<p>God, I love programming! It's so incredibly cool when you get to do stuff like that. The whole ink-blogging thing I wrote in 2 hours last Tuesday, just because I was so buzzed by that day's success with the GPS stuff. Eventually, the GPS articles, source code, and binaries will be available (stay tuned to 3Leaf for details) and I'll make the Tablet blogging tool available too (the amazing thing about that project is how few lines of code it is. Seriously, the posts I did last week were from a 35-line event handler.)</p>Title is PIP2003-10-03T06:32:00-10:002003-10-03T06:32:00-10:00larrytag:knowing.net,2003-10-03:/posts/2003/10/title-is-pip/<p>Multiple Colors</p>
<p><em>Blogged on a Tablet PC</em></p>This Months Java Developers Journal Takes It Up A Notch In Terms Of Betraying The Best Service To The Readers For Adverti2003-10-03T03:22:00-10:002003-10-03T03:22:00-10:00larrytag:knowing.net,2003-10-03:/posts/2003/10/this-months-java-developers-journal-takes-it-up-a-notch-in-terms-of-betraying-the-best-service-to-the-readers-for-adverti/<p>This month's Java Developer's Journal "takes it up a notch" in terms of betraying the best service to the readers for advertising bucks. For awhile, JDJ has been selling portions of its cover space to advertisers, imitating the snap-off "belly band" that costs a little more but doesn't actually interfere …</p><p>This month's Java Developer's Journal "takes it up a notch" in terms of betraying the best service to the readers for advertising bucks. For awhile, JDJ has been selling portions of its cover space to advertisers, imitating the snap-off "belly band" that costs a little more but doesn't actually interfere with the cover design. This month, though, the cover of JDJ is nothing but an ad for the Web Services Edge conference. Which might just be tacky were it not for the complication that JDJ usually puts its Table of Contents on the cover. So this month's JDJ <em>has no ToC</em>. Shame on Group Publisher Jeremy Geelan, Editor-in-Chief Alan Williamson, and Sys-Con Media. </p>Ink blogging with text recognition. Metaweblog API. App & code coming soon...2003-09-30T08:31:00-10:002003-09-30T08:31:00-10:00larrytag:knowing.net,2003-09-30:/posts/2003/09/ink-blogging-with-text-recognition-metaweblog-api-app-code-coming-soon/<p><em>Ink blogging with text recognition. Metaweblog API. App & code coming soon...</em></p>
<p><em>Blogged on a Tablet PC</em></p>Has Anyone Programmed Radio Userland Using C Or VBNET I Dont Want To Get Involved In Religious Wars About Blogging APIs2003-09-29T11:18:00-10:002003-09-29T11:18:00-10:00larrytag:knowing.net,2003-09-29:/posts/2003/09/has-anyone-programmed-radio-userland-using-c-or-vbnet-i-dont-want-to-get-involved-in-religious-wars-about-blogging-apis/<p>Has anyone programmed Radio Userland using C# or VB.NET? I don't want to get involved in religious wars about blogging APIs, all I want is an example that shows how to create a blog post using .NET objects like HttpWebRequests. My first attempt just timed out and Google isn't …</p><p>Has anyone programmed Radio Userland using C# or VB.NET? I don't want to get involved in religious wars about blogging APIs, all I want is an example that shows how to create a blog post using .NET objects like HttpWebRequests. My first attempt just timed out and Google isn't helping me, even though I <em>know</em> this should be trivial:</p>
<p>string xml = "\<methodCall>\<methodName>metaWeblog.newPost\</methodName>\<params>\<param>\<value>blogId\</value>\</param>\<param>\<value>user\</value>\</param>\<param>\<value>pass\</value>\</param>\<param>\<value>\<item>\<title>foo\</title>\<description>stuff\</description>\</item>\</value>\</param>\<param>\<value>true\</value>\</param>\</params>\</methodCall>";</p>
<p>XmlDocument doc = new XmlDocument();</p>
<p>doc.LoadXml(xml);</p>
<p>HttpWebRequest req = (HttpWebRequest) HttpWebRequest.Create("http://localhost:5335/RPC2/");</p>
<p>req.Method = "POST";</p>
<p>req.Timeout = 15000;</p>
<p>HttpWebResponse res = (HttpWebResponse) req.GetResponse();</p>
<p>StreamReader sr = new StreamReader(res.GetResponseStream());</p>
<p>textBox1.Text = sr.ReadToEnd();</p>Oh By The Way Can I Suggest A Lets Bash ClassAction Lawsuits Day I Just Received Some Notices From The CaliforniaMicrosoft2003-09-29T05:46:00-10:002003-09-29T05:46:00-10:00larrytag:knowing.net,2003-09-29:/posts/2003/09/oh-by-the-way-can-i-suggest-a-lets-bash-classaction-lawsuits-day-i-just-received-some-notices-from-the-californiamicrosoft/<p>Oh, by the way, can I suggest a Let's Bash Class-Action Lawsuits Day? I just received some notices from the California-Microsoft settlement: \<span class="math">\(1.1 ***billion** dollars*?, *gee, maybe I'll get some real money... let's see...* \\)</span>16 for each Windows or MS-DOS operating system, \<span class="math">\(29 for each Office... *oh, and if …</span></p><p>Oh, by the way, can I suggest a Let's Bash Class-Action Lawsuits Day? I just received some notices from the California-Microsoft settlement: \<span class="math">\(1.1 ***billion** dollars*?, *gee, maybe I'll get some real money... let's see...* \\)</span>16 for each Windows or MS-DOS operating system, \<span class="math">\(29 for each Office... *oh, and if this is anything like other class-action lawsuits, I probably have to dig up receipts from 1998... And let's see what the lawyers get... oh, here it is...* attorney's fees and expenses up to \\)</span>275 million.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Philip Greenspun Had Lets Bash Microsoft Day Over The Weekend An2003-09-29T05:09:00-10:002003-09-29T05:09:00-10:00larrytag:knowing.net,2003-09-29:/posts/2003/09/philip-greenspun-had-lets-bash-microsoft-day-over-the-weekend-an/<p>Philip Greenspun had Let's Bash Microsoft Day over the weekend and I couldn't resist Scoble-baiting. Sure enough, Scoble <em>defended</em> the Outlook / VBA security model: "...it's impossible to double-click on executables in Outlook 2003, so the chances you'd get a virus now are very small...." Oh dear, now I <em>am</em> worried …</p><p>Philip Greenspun had Let's Bash Microsoft Day over the weekend and I couldn't resist Scoble-baiting. Sure enough, Scoble <em>defended</em> the Outlook / VBA security model: "...it's impossible to double-click on executables in Outlook 2003, so the chances you'd get a virus now are very small...." Oh dear, now I <em>am</em> worried that he's drunk the Kool Aid. Less than a month after Sobig.f and they defend the VBA model?</p>
<p>Office 2003 allows side-by-side execution of the VBA security model and the .NET Framework security model, which strikes me as profoundly schizophrenic (as in, simultaneously promoting two obviously contradictory premises). On the one hand, Visual Studio Tools for Office not only recognizes that maliciousness must be suspected in all received documents but that such suspicion is even <em>more</em> appropriate with documents, those most ubiquitous and mobile bags of bits. In VSTO, permissions are reduced even for those documents whose macros / programs originate in the Intranet zone! Yes! Good! Slightly paranoid, but you know what? They <em>are</em> out to get you! </p>
<p><em>But</em> you can still get a document that has the same-old brain-dead all-or-nothing "Do you trust the person who sent you this?" macro enabling dialogue and, sure enough, VBA macros can still open up the Outlook object model and iterate over Contacts. Contrast that with ""Microsoft just shipped OneNote. It doesn't have an API. Why? Because of security issues." Guess who said that?</p>I Love The Internet I Just Spent The Past Oh Lets See 122 Trying To Figure Outnbspwhy The OK Button In My NET CF Progr2003-09-23T05:58:00-10:002003-09-23T05:58:00-10:00larrytag:knowing.net,2003-09-23:/posts/2003/09/i-love-the-internet-i-just-spent-the-past-oh-lets-see-122-trying-to-figure-outnbspwhy-the-ok-button-in-my-net-cf-progr/<p>I love the Internet. I just spent the past, oh let's see, 1:22 trying to figure out why the "OK" Button in my .NET CF program disappears when I recycle a dialog a bunch of times. So finally I Google for the problem and, boom!, I discover that it's …</p><p>I love the Internet. I just spent the past, oh let's see, 1:22 trying to figure out why the "OK" Button in my .NET CF program disappears when I recycle a dialog a bunch of times. So finally I Google for the problem and, boom!, I discover that it's been fixed in the .NET CF SP 2 that shipped a few days ago. I mean, it's gotten to the point where I was foolish not to have Googled for the answer immediately. How the heck did we figure stuff like that out in the old days?</p>Alternate Programming Languages For NET Got Approved As A BOF Gathering At The PDC Since Ill Be The Host I Guess Now I2003-09-22T23:22:00-10:002003-09-22T23:22:00-10:00larrytag:knowing.net,2003-09-22:/posts/2003/09/alternate-programming-languages-for-net-got-approved-as-a-bof-gathering-at-the-pdc-since-ill-be-the-host-i-guess-now-i/<p>"Alternate Programming Languages for .NET" got approved as a BOF gathering at the PDC! Since I'll be the host, I guess now I really <em>do</em> need to get a room...</p>Is There Inkrecognition Relevance To The Rsereach At An Eling2003-09-19T05:40:00-10:002003-09-19T05:40:00-10:00larrytag:knowing.net,2003-09-19:/posts/2003/09/is-there-inkrecognition-relevance-to-the-rsereach-at-an-eling/<p>Is there ink-recognition relevance to the rsereach at an Elingsh uinervtisy, taht seowhd it deosn't mttaer in waht oredr the ltteers in a wrod are? Should word recognizers try to exploit a similar strategy, concentrating on recognizing the initial and ending strokes of an ink group, the length of the …</p><p>Is there ink-recognition relevance to the rsereach at an Elingsh uinervtisy, taht seowhd it deosn't mttaer in waht oredr the ltteers in a wrod are? Should word recognizers try to exploit a similar strategy, concentrating on recognizing the initial and ending strokes of an ink group, the length of the group for a rough letter count, and just sort of muddling along in the middle? </p>
<p>Hey, speaking of ink-recognition, someone from Microsoft told me that the Tablet PC ink recognizer is derived from the Newton's (in)famous recognizer via Pen & Internet's Calligrapher. Just to make things confusing, Pen & Internet ships a "next generation" handwriting recognition tool for the Tablet called RitePen. 30-day trial available.</p>Your Tax Dollars At Work The Latest PC Magazine Reports Researchers At The US Department Of Energys Idaho National Engin2003-09-19T04:23:00-10:002003-09-19T04:23:00-10:00larrytag:knowing.net,2003-09-19:/posts/2003/09/your-tax-dollars-at-work-the-latest-pc-magazine-reports-researchers-at-the-us-department-of-energys-idaho-national-engin/<p>Your tax dollars at work: the latest PC Magazine reports "Researchers at the U.S. Department of Energy's Idaho National Engineering and Environmental Laboratory have developed software that can detect extremely tiny differences -- smaller than a fraction of a pixel -- between two digital images...."</p>
<p><em>Update: PC Mag's description is wildly …</em></p><p>Your tax dollars at work: the latest PC Magazine reports "Researchers at the U.S. Department of Energy's Idaho National Engineering and Environmental Laboratory have developed software that can detect extremely tiny differences -- smaller than a fraction of a pixel -- between two digital images...."</p>
<p><em>Update: PC Mag's description is wildly inaccurate. The INEEL "</em><a href="https://www.eurekalert.org/pub_releases/2003-08/dne-ird081103.php"><em>breakthrough</em></a><em>" is a program that rapidly aligns two digital images and then alternates them on-screen, which causes non-matched pixels to flicker, at which point the human</em> observer <em>notes the differences rapidly. The real impressive part is that "</em>The alignment compensates for differences in camera angle, height, zoom or other distractions that previously confounded flip-flop comparisons."</p>All The Tablet Bloggers Are Pitching In Ideas For Microsofts Internal Power Toys Competition Its So Easy To Think2003-09-19T00:52:00-10:002003-09-19T00:52:00-10:00larrytag:knowing.net,2003-09-19:/posts/2003/09/all-the-tablet-bloggers-are-pitching-in-ideas-for-microsofts-internal-power-toys-competition-its-so-easy-to-think/<p>All the Tablet bloggers are pitching in ideas for Microsoft's internal Power Toys competition (it's so easy to <em>think</em> of software). Loren's suggested a "snap on dwell" tool and Peter a "pen scrolling tool." So my suggestion is that if you can't pull off a fully customizable and skinnable tablet …</p><p>All the Tablet bloggers are pitching in ideas for Microsoft's internal Power Toys competition (it's so easy to <em>think</em> of software). Loren's suggested a "snap on dwell" tool and Peter a "pen scrolling tool." So my suggestion is that if you can't pull off a fully customizable and skinnable tablet input panel (which, by the way, ought to have pen-friendly keyshapes):</p>
<p>...and you hate radial context menus...</p>
<p>... then can't you at <em>least</em> see that we need an IE toolbar with an ink-enabled address combobox?</p>Disruptive Programming Languages Technology2003-09-18T23:58:00-10:002003-09-18T23:58:00-10:00larrytag:knowing.net,2003-09-18:/posts/2003/09/disruptive-programming-languages-technology/<p>Disruptive Programming Languages Technology Todd Proebsting, Microsoft Research, October 16, 6 PM - 9PM, PARC, Palo Alto. See you there!</p>Peter Coffee Reviewed C Builder In A Recent EWeek Article And2003-09-15T06:38:00-10:002003-09-15T06:38:00-10:00larrytag:knowing.net,2003-09-15:/posts/2003/09/peter-coffee-reviewed-c-builder-in-a-recent-eweek-article-and/<p>Peter Coffee <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">reviewed C# Builder</a> in a recent eWeek article and came to pretty much the opposite conclusion as I did. I respect Peter tremendously and there are no facts in his review that I dispute (although I was very surprised to see his report that the performance was excellent …</p><p>Peter Coffee <a href="https://www.eweek.com/mobile/hp-touchpad-needs-6-to-8-weeks-for-additional-shipments">reviewed C# Builder</a> in a recent eWeek article and came to pretty much the opposite conclusion as I did. I respect Peter tremendously and there are no facts in his review that I dispute (although I was very surprised to see his report that the performance was excellent on a 700Mhz machine, when I saw distinctive flicker while editing on a 2.6Ghz machine). I stand by my review 100%, but I invite feedback from anyone who's tried the product; better yet, write a letter to the editor to <a href="https://sdtimes.com/">SD Times</a>, which will give your voice the broadest audience.</p>This Pan Of Borlands C Builder Was Among The Hardest Things Ive Ever2003-09-15T02:02:00-10:002003-09-15T02:02:00-10:00larrytag:knowing.net,2003-09-15:/posts/2003/09/this-pan-of-borlands-c-builder-was-among-the-hardest-things-ive-ever/<p>This pan of Borland's C# Builder was among the hardest things I've ever written. It's a crying shame that Borland didn't do a better job on this product.</p>Funny A Colleague Of Mine2003-09-04T04:35:00-10:002003-09-04T04:35:00-10:00larrytag:knowing.net,2003-09-04:/posts/2003/09/funny-a-colleague-of-mine/<p>Funny:</p>
<p>A colleague of mine at <a href="https://sdtimes.com/">SD Times</a> tried to sign up for press credentials to Sun's SunNet conference and received the following error message:></p>
<p>>Application Web Server Busy</p>
<p>>The application web server is too busy to handle your request at this time.</p>
<p>>Possibly reached capacity.</p>
<p>>Please notify the site's …</p><p>Funny:</p>
<p>A colleague of mine at <a href="https://sdtimes.com/">SD Times</a> tried to sign up for press credentials to Sun's SunNet conference and received the following error message:></p>
<p>>Application Web Server Busy</p>
<p>>The application web server is too busy to handle your request at this time.</p>
<p>>Possibly reached capacity.</p>
<p>>Please notify the site's webmaster and try your request again momentarily.</p>
<p>>\</blockquote>\</x-html></p>Desktop videotraining2003-09-01T23:29:00-10:002003-09-01T23:29:00-10:00larrytag:knowing.net,2003-09-01:/posts/2003/09/desktop-videotraining/<blockquote>
<p>Micro-expressions -- facial expressions that last a fraction of a second -- give away exactly how you feel, no matter how hard you try to conceal it. A CD-ROM set teaches how to detect the emotions people try to hide. By Kim Zetter. <em>via</em> [Wired News]</p>
</blockquote>
<p>Okay, the particular application is cool …</p><blockquote>
<p>Micro-expressions -- facial expressions that last a fraction of a second -- give away exactly how you feel, no matter how hard you try to conceal it. A CD-ROM set teaches how to detect the emotions people try to hide. By Kim Zetter. <em>via</em> [Wired News]</p>
</blockquote>
<p>Okay, the particular application is cool, but what I'm really interested in is that video technology is where publishing technology was 20 years ago -- on the verge of a desktop revolution. The tools to assemble a professional video-based training product -- digital camcorders with Firewire/1394 capture, mikes, editing suites, and codecs -- have all moved into the consumer realm, just as the first PCs (or, more accurately, the first Macs) brought the tools necessary to create camera-ready copy into the consumer realm.</p>
<p>\<</p>
<p>p dir="ltr"> There are tons of video editing products out there, but their impetus is always movies / story-telling. <a href="https://www.adobe.com/">Serious Magic</a> is the only training-oriented I know of, and they're skewing towards corporate training and overemphasize their (nice) chromakeying feature. I'm much more interested in a product that retails for, say, \$99ish that plays to the fact that everyone can coach something. Templates, scripts, some kind of simple animation technology (but stripped down: the animation should be to Macromedia Flash what Microsoft MovieMaker is to Adobe Premiere). I think there's a product there.</p>Whidbey, Yukon, Longhorn slides2003-09-01T10:09:00-10:002003-09-01T10:09:00-10:00larrytag:knowing.net,2003-09-01:/posts/2003/09/whidbey-yukon-longhorn-slides/<blockquote>
<p>We had a lot of fun at the Portland .NET Users group showing the information that's publicly available on Whidbey, Yukon, and Longhorn (with a little Indigo thrown in).</p>
<p>We've posted our <a href="http://www.3leaf.com/default/articles/ea/Whidbey%2520Yukon%2520Longhorn%2520Pre%2520PDC.ppt" title="http://www.3leaf.com/default/articles/ea/Whidbey%20Yukon%20Longhorn%20Pre%20PDC.ppt">slides</a>. Feel free to check them out. <em>via</em> [<a href="http://www.3leaf.com/default/articles/ea/Whidbey%2520Yukon%2520Longhorn%2520Pre%2520PDC.ppt">Sean 'Early' Campbell & Scott 'Adopter' Swigart's Radio Weblog</a>]</p>
</blockquote>
<p>Good stuff …</p><blockquote>
<p>We had a lot of fun at the Portland .NET Users group showing the information that's publicly available on Whidbey, Yukon, and Longhorn (with a little Indigo thrown in).</p>
<p>We've posted our <a href="http://www.3leaf.com/default/articles/ea/Whidbey%2520Yukon%2520Longhorn%2520Pre%2520PDC.ppt" title="http://www.3leaf.com/default/articles/ea/Whidbey%20Yukon%20Longhorn%20Pre%20PDC.ppt">slides</a>. Feel free to check them out. <em>via</em> [<a href="http://www.3leaf.com/default/articles/ea/Whidbey%2520Yukon%2520Longhorn%2520Pre%2520PDC.ppt">Sean 'Early' Campbell & Scott 'Adopter' Swigart's Radio Weblog</a>]</p>
</blockquote>
<p>Good stuff, but be warned that this contains both speculation and some stuff that, I think, represents outdated strategies.</p>Missing it2003-09-01T08:39:00-10:002003-09-01T08:39:00-10:00larrytag:knowing.net,2003-09-01:/posts/2003/09/missing-it/<blockquote>
<div>
<p>Don's take on the state of MS's developer relations (although, as he admits, he's no longer unbiased).</p>
<p>via [Marquee de Sells: Chris's insight outlet]</p>
</div>
<div>
</div>
</blockquote>
<div>
I'm with Don on this -- the low water mark of Microsoft's developers relations were the late 90s, not the early '00s. And since then, MS has …</div><blockquote>
<div>
<p>Don's take on the state of MS's developer relations (although, as he admits, he's no longer unbiased).</p>
<p>via [Marquee de Sells: Chris's insight outlet]</p>
</div>
<div>
</div>
</blockquote>
<div>
I'm with Don on this -- the low water mark of Microsoft's developers relations were the late 90s, not the early '00s. And since then, MS has been rediscovering the power of good relations, a la the early 90s.
</div>Also working today2003-08-31T23:57:00-10:002003-08-31T23:57:00-10:00larrytag:knowing.net,2003-08-31:/posts/2003/08/also-working-today/<p>\<</p>
<p>blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> \<a title="http://www.simplegeek.com/permalink.aspx/8afd25c0-a11e-46a6-9f25-2314fcad014e" href="http://www.simplegeek.com/permalink.aspx/8afd25c0-a11e-46a6-9f25-2314fcad014e"" xmlns="http://www.w3.org/1999/xhtml">Like Chris, I am also way behind on my <a href="http://www.vtdotnet.org/wp-admin/install.php" title="http://www.vtdotnet.org/nextmeeting.aspx">presentation</a> and a future article, so I am also working today …</p><p>\<</p>
<p>blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> \<a title="http://www.simplegeek.com/permalink.aspx/8afd25c0-a11e-46a6-9f25-2314fcad014e" href="http://www.simplegeek.com/permalink.aspx/8afd25c0-a11e-46a6-9f25-2314fcad014e"" xmlns="http://www.w3.org/1999/xhtml">Like Chris, I am also way behind on my <a href="http://www.vtdotnet.org/wp-admin/install.php" title="http://www.vtdotnet.org/nextmeeting.aspx">presentation</a> and a future article, so I am also working today. ...<em>via</em> [Sam Gentile's Blog]</p>
<p>\<</p>
<p>p dir="ltr"> Me, too. And what's the common thread? Presentations and articles. Writing and talking can consume infinite effort; it's something to be cautious about. At least I got yesterday off.</p>Martin Fowler Argues That Even If We Abandon LinesOfCode Still We A Href2003-08-30T00:41:00-10:002003-08-30T00:41:00-10:00larrytag:knowing.net,2003-08-30:/posts/2003/08/martin-fowler-argues-that-even-if-we-abandon-linesofcode-still-we-a-href/<blockquote>
<p>Martin Fowler argues that even if we abandon Lines-Of-Code, still we <a href="https://martinfowler.com/bliki/CannotMeasureProductivity.html">CannotMeasureProductivity</a>: "...Even if we did find an accurate way for function points to determine functionality...if I spend a year delivering a 100FP system and Joe spends the same year delivering a 50FP system can we assume that I'm …</p></blockquote><blockquote>
<p>Martin Fowler argues that even if we abandon Lines-Of-Code, still we <a href="https://martinfowler.com/bliki/CannotMeasureProductivity.html">CannotMeasureProductivity</a>: "...Even if we did find an accurate way for function points to determine functionality...if I spend a year delivering a 100FP system and Joe spends the same year delivering a 50FP system can we assume that I'm more productive? I would say not. It may be that of my 100FP only a 30 is actually functionality that's useful to my customer, but Joe's is all useful. I would thus argue that while my direct productivity is higher, Joe's true productivity is higher."</p>
</blockquote>
<p>I would say that Martin's made a slip, conflating <em>coding</em> productivity with <em>software development</em> productivity. I would say that, yes, the person who codes twice as many function points in a given time is a more productive coder. But the person (or team) that delivers twice as much customer value is a more productive software developer (or team).</p>
<p>Function points are to code what user stories are to software development: atoms of functionality. The fundamental <em>idea</em> of function points is that "Display a button on a form -- okay, that's one atom of functionality. Make a database query -- that's another." And that's how I also think of user stories: "Convert dollars to euros -- okay, that's one atom of client value. Allow the user to choose currencies -- that's another atom." Just as different atoms of client-value (user stories) have different, but short, development times, so too do atoms of functionality. But where the complexity multiplier for user stories is the <a href="http://csis.pace.edu/%7ebergin/xp/planninggame.html">Planning Game</a>, the complexity multiplier for function points are the complexity matrices of the function-point counting process.</p>
<p>And, I would argue that it's not important that two large-system FP estimates might differ by factors of 3, just as you wouldn't be surprised by differences from XP teams forced to estimate the schedule for a whole deck of user-story cards.</p>Multi-University/Research Lectures2003-08-28T05:43:00-10:002003-08-28T05:43:00-10:00larrytag:knowing.net,2003-08-28:/posts/2003/08/multi-universityresearch-lectures/<blockquote>
<p>There are lots of lectures going on at Microsoft...many recorded talks online publicly at the Multi-University/Research Lectures project. <em>via</em> [<a href="http://blog.monstuff.com/archives/000099.html">Curiosity is bliss</a>]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> Tell your boss you're watching "\<a class="LECTURETITLE" title="Increasing processor clock speeds along with microarchitectural innovation have led to a tremendous gap …</p><blockquote>
<p>There are lots of lectures going on at Microsoft...many recorded talks online publicly at the Multi-University/Research Lectures project. <em>via</em> [<a href="http://blog.monstuff.com/archives/000099.html">Curiosity is bliss</a>]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> Tell your boss you're watching "\<a class="LECTURETITLE" title="Increasing processor clock speeds along with microarchitectural innovation have led to a tremendous gap between processor and memory performance. Architects have primarily relied on deeper cache hierarchies, where each level trades off faster lookup speed for larger capacity, to reduce this performance gap. Conventional cache hierarchies employ a demand-fetch memory . . ." href="http://murl.microsoft.com/LectureDetails.asp%3f896"" target="_self" rel="noopener noreferrer">PUMA2: Bridging the Processor/Memory Performance Gap through Memory Access Prediction & Speculation " but really watch "The (In)Complete Demystification of Chocolate."</p>On The One Hand What Coder2003-08-25T01:27:00-10:002003-08-25T01:27:00-10:00larrytag:knowing.net,2003-08-25:/posts/2003/08/on-the-one-hand-what-coder/<p>On the one hand: "...what coder is slinging 100 lines of code a day? That's an exceptionally <em>GREAT</em> day of coding... " and on the <a href="https://www.artima.com/intv/strongweak.html">other</a>, "Strong typing is one reason that languages like C++ and Java require more finger typing..."</p>
<p>There's a lot of froth right now that claims that …</p><p>On the one hand: "...what coder is slinging 100 lines of code a day? That's an exceptionally <em>GREAT</em> day of coding... " and on the <a href="https://www.artima.com/intv/strongweak.html">other</a>, "Strong typing is one reason that languages like C++ and Java require more finger typing..."</p>
<p>There's a lot of froth right now that claims that implicit typing is an important contributor to programmer productivity. The all-industries average productivity in software development is 1,500 debugged lines of source code per month -- call it 75 lines per day. Also, it's long been said that the number of lines per code written per month is pretty much <em>independent</em> of the language used; it varies greatly per individual, but the same programmer reasonably versed in Python and COBOL will write about the same amount of lines per month.</p>
<p>The corollary in language design is that you want to maximize the amount of expressiveness per line of code written. It takes fewer lines to express a text-matching-and-replacement intent in Python than it is in COBOL, so it's legitimate to say that Python is more productive for that kind of work than COBOL. Similarly, a spreadsheet is more productive than Python for, say, expressing a variable rate mortgage calculation.</p>
<p>But the point is that <em>finger typing</em> on a given line is a small contributor to productivity, everything else being equal. I've spent the past month working in Visual Basic .NET, in which I can write:</p>
<div class="highlight"><pre><span></span><code>dim x = y
</code></pre></div>
<p>or</p>
<div class="highlight"><pre><span></span><code>dim x as Type = y
</code></pre></div>
<p>It's my thesis that the 8 extra keystrokes in the second form are less-than-trivial in terms of mental and physical effort and have major benefits. The first form is not easier to conceive -- I clearly have an intention relating to the type of x when I write the first form, it's just a matter of making it explicit or not. But by making it explicit, I aid in comprehensibility, maintainability, and <strong>tool support</strong>. I'm not aware of any implicitly typed languages whose editors perform on-the-fly type inference and provide features such as code and parameter completion.</p>
<p>It seems incontrovertible to me that on-the-fly lists of available methods and properties provide more of a programmer boost than is lost by explicit typing. For one thing, explicit typing is only required for declaration, but on-the-fly type-support is available for wherever the variable is in scope. For another, whatever mental burden is required to explicitly state one's intent as to type is undeniably trivial compared to the mental burden of remembering the precise form of a type's operations.</p>
<p>And don't try to argue that editor support "is not part of the language and therefore is irrelevant." Your interaction with the editor <strong>is</strong> a language; one in which you express the programming language. Just because there's <em>sometimes</em> close to a 1-to-1 correspondence between the pressing of keyboard keys and code characters, you can't ignore the fact that the languages of editors differ in how tersely you can accomplish certain goals. With on-the-fly type support, for instance, I can express the intent to retrieve the value of x's PropertyWithALongName with, perhaps,</p>
<div class="highlight"><pre><span></span><code><span class="n">x</span><span class="p">.</span><span class="n">P</span><span class="o">[</span><span class="n">Tab</span><span class="o">][</span><span class="n">space</span><span class="o">]</span>
</code></pre></div>
<p>rather than</p>
<div class="highlight"><pre><span></span><code><span class="n">x</span><span class="p">.</span><span class="n">PropertyWithALongName</span><span class="o">[</span><span class="n">space</span><span class="o">]</span>
</code></pre></div>
<p>And those savings in "finger typing" are at least as valid as the savings from implicit typing.</p>
<p>I say "implicit, schmimplicit." Until design-time type-inferencing editors become available, be explicit.</p>Ingo Criticizes The Use Of Airline Reservation Systems As2003-08-24T23:42:00-10:002003-08-24T23:42:00-10:00larrytag:knowing.net,2003-08-24:/posts/2003/08/ingo-criticizes-the-use-of-airline-reservation-systems-as/<p>Ingo criticizes the use of airline reservation systems as an example in distributed concurrent systems: "The last time I checked, a ticket was no guarantee for a seat and the only real transactional guarantee for a seat is during check in. Reservation doesn't count too much here."</p>
<p>Since I've spent …</p><p>Ingo criticizes the use of airline reservation systems as an example in distributed concurrent systems: "The last time I checked, a ticket was no guarantee for a seat and the only real transactional guarantee for a seat is during check in. Reservation doesn't count too much here."</p>
<p>Since I've spent most of this millennium programming airline reservation systems, I can comment. The reason that such a system may not be a good example for distributed objects is not ticketing, but the fact that all Global Distribution Systems (Sabre, Apollo, etc.) reflect 40 years of cruft. Sabre, once the "Semi-Automatic Business Research Environment," was the first large commercial distributed system; a true pioneer in the history of computing. Here's an example: a fundamental assumption of GDS's is that seats between any two city-pairs are rare on any given day, even say, between New York and Washington. And availability is not an accurate empty-seat count, but a series of fare classes and a number between 0 and 7! (Why 7? Because 3 bits rather than 4 saved real money in 1962. <em>[Apparently Galileo goes to 9 -- ed.]</em>) And lots of crucial data, like fare-change rules, are never implemented according to whatever standard was cooked up in the 70s, they're almost always implemented in "comments" fields in an organization-specific way that's evolved for decades.</p>
<p>But the real lesson to be learned from programming reservation systems is how you <em>must</em> place the client above your textbook learning. If you went to an airline or a travel agency and said "No, a <strong>Flight</strong> <em>should be</em> this, a <strong>TravelParty</strong> <em>should be</em> that, and an <strong>Itinerary</strong> should be this other thing," you'd never be asked to even bid. Instead, you have to appreciate that the <em>greatest concern</em> of such clients, far more than improving efficiency, is <em>losing</em> efficiency for <em>any</em> amount of time. If you said "There's a 90% chance of a 20% permanent improvement in efficiency, but it'll cost you 10% efficiency loss for 1 month," they'd show you the door every time, because such organizations are so attrited (especially from the past two years), they have no margin of error.</p>
<p>So what you do when you're programming an airline reservation system is make <em>everything</em> subservient to the customer's existing processes, both automated and manual. Your job is <em>not</em> to enlighten these people about the world of objects; your job is to create a system that is as invisible as it can be.</p>
<p>Having said all that, it's <em>really cool</em> when, having implemented an Open Travel Alliance-compliant XML front-end to a system, you can prototype all kinds of smart clients and smart searches.</p>Will You Vote For My Proposed BOF Gathering At PDC Its On Page 42003-08-24T02:13:00-10:002003-08-24T02:13:00-10:00larrytag:knowing.net,2003-08-24:/posts/2003/08/will-you-vote-for-my-proposed-bof-gathering-at-pdc-its-on-page-4/<p>Will you vote for my proposed BOF gathering at PDC? It's on page 4.</p>
<p>"C#'s super and VB.NET's invaluable, but it's been argued that the greatest benefit of .NET is the level field it provides for programming languages both familiar and exotic. This session will bring together language …</p><p>Will you vote for my proposed BOF gathering at PDC? It's on page 4.</p>
<p>"C#'s super and VB.NET's invaluable, but it's been argued that the greatest benefit of .NET is the level field it provides for programming languages both familiar and exotic. This session will bring together language enthusiasts and implementors in a casual atmosphere to discuss and demonstrate both existing languages and works-in-progress. Does the runtime help or hinder particular programming types? Is anyone using alternate languages in production? And is it possible for us to perform an impromptu interop-a-thon: F# -> Eiffel -> Haskell -> Python -> Fortran -> Smalltalk -> ... ?"</p>Write a Story, Go to Jail2003-08-23T03:33:00-10:002003-08-23T03:33:00-10:00larrytag:knowing.net,2003-08-23:/posts/2003/08/write-a-story-go-to-jail/<blockquote>
<p>A student who wrote a violent short story on a school computer may face 10 years in prison. Prosecutors say they are trying to prevent more school massacres; the student's defenders say they're fighting attempts to criminalize thought. By Kim Zetter. <em>via</em> [<a href="https://www.wired.com/2003/08/write-a-story-go-to-jail/">Wired News</a>]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> Boy, am I …</p><blockquote>
<p>A student who wrote a violent short story on a school computer may face 10 years in prison. Prosecutors say they are trying to prevent more school massacres; the student's defenders say they're fighting attempts to criminalize thought. By Kim Zetter. <em>via</em> [<a href="https://www.wired.com/2003/08/write-a-story-go-to-jail/">Wired News</a>]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> Boy, am I lucky that this sort of paranoia about "dark thoughts" wasn't around when I was in school. I mean, being moody and pissed-off seems fairly central to the teenage experience. What, do they think it's better for the kid to "push your bad thoughts down, down, down into your shoes, until it's like you're walking on them"?</p>Also In EWeek Spencer The Kat Reports That At At A Recent Conferencenbspduring His Keynote A Hrefhttpwwwgotdotnet2003-08-23T01:56:00-10:002003-08-23T01:56:00-10:00larrytag:knowing.net,2003-08-23:/posts/2003/08/also-in-eweek-spencer-the-kat-reports-that-at-at-a-recent-conferencenbspduring-his-keynote-a-hrefhttpwwwgotdotnet/<p>Also in EWeek, Spencer the Kat reports that at at a recent conference, during his keynote Don Box spotted Miguel de Icaza and called "Miguel, I brought an employment application. Your ass is mine!" Do you think Jack Messman laughed or blanched when he heard?</p>New IT projects on the upswing, but budgeting flat2003-08-23T01:41:00-10:002003-08-23T01:41:00-10:00larrytag:knowing.net,2003-08-23:/posts/2003/08/new-it-projects-on-the-upswing-but-budgeting-flat/<p>EWeek reports that IT workloads are rising and the cause is an increase in new projects and not so much from layoffs. This from a survey of 1,400 CIOs by Robert Half Technology. But about 2 pages later, they have articles that convincingly forecast flat IT budgets for 2004 …</p><p>EWeek reports that IT workloads are rising and the cause is an increase in new projects and not so much from layoffs. This from a survey of 1,400 CIOs by Robert Half Technology. But about 2 pages later, they have articles that convincingly forecast flat IT budgets for 2004. To me that spells tech projects moving off shore <em>even faster</em> than the rate we're currently witnessing. Maybe it's time for Ed Yourdon to write <a href="https://www.amazon.com/exec/obidos/tg/detail/-/0132036703/qid%3d1061663902/sr%3d1-3/ref%3dsr_1_3/104-7127603-4783929%3fv%3dglance%26s%3dbooks">another</a> <a href="https://www.amazon.com/exec/obidos/tg/detail/-/0139561609/ref%3dpd_sim_books_1/104-7127603-4783929%3fv%3dglance%26s%3dbooks">book</a>: "The Undercutting & Bankruptcy of the American Programmer."</p>Step Into Liquid2003-08-23T01:20:00-10:002003-08-23T01:20:00-10:00larrytag:knowing.net,2003-08-23:/posts/2003/08/step-into-liquid/<p>Somewhat disappointed by last night's Marin premiere of "Step Into Liquid," the surfing documentary whose original trailer was just about the best 5 minute film I've ever seen. The highlight of the trailer was a sequence in which the basso profoundo announcer says "And including..." (sea begins to rise) "...the …</p><p>Somewhat disappointed by last night's Marin premiere of "Step Into Liquid," the surfing documentary whose original trailer was just about the best 5 minute film I've ever seen. The highlight of the trailer was a sequence in which the basso profoundo announcer says "And including..." (sea begins to rise) "...the much anticipated footage from..." (ocean is now a vertical wall) "... the Cortes Bank." (fly speck surfer drops in to the opening chords of The Butthole Surfers' "They Came In," followed by 30 seconds of absolutely insane big wave surfing). But it turns out that sequence was edited from sequences throughout the movie. The truth is, the climactic Cortes Bank sequence is pretty much a bust visually, as they never get the cameras in position to shoot the wave face. It's epic surfing, with a 66 footer, but honestly, the best filming in the movie is from good ol' Hawaii, where they have helicopters and swimmers and shore-based telephotos. And the narration is cheesy. AND to top it all off, the Cortes Bank session is set to a The Sheila Divine song, not the perfect-for-an-action-sequence "They Came In."</p>
<p>But still, it's probably the best action movie of the Summer.</p>Longer timeouts2003-08-21T04:41:00-10:002003-08-21T04:41:00-10:00larrytag:knowing.net,2003-08-21:/posts/2003/08/longer-timeouts/<p>The August CACM contains an article "Understanding email interaction increase organizational productivity" (not online) which finds that it takes about a minute to resume work after being interrupted by an email notification. Which is kind of problematic if you set your email to check for new mail every five minutes …</p><p>The August CACM contains an article "Understanding email interaction increase organizational productivity" (not online) which finds that it takes about a minute to resume work after being interrupted by an email notification. Which is kind of problematic if you set your email to check for new mail every five minutes! So I've set my email checking to once every 45 minutes and, even more importantly, I've slowed down my news aggregator to... once every six hours. I don't know if I can handle the information isolation, but I'm going to give it a shot.</p>J# Skepticism2003-08-21T02:07:00-10:002003-08-21T02:07:00-10:00larrytag:knowing.net,2003-08-21:/posts/2003/08/j-skepticism/<p>I'm skeptical about J#. <em>via</em> [Eric.Weblog()]</p>
<p>I'm not. As I say in the current SD Times, the thing about J# is that it serves two very real niches: the bet-hedgers and the Java "pragmatic believers." Bet-hedgers are those people who have decided not to jump to .NET, but who …</p><p>I'm skeptical about J#. <em>via</em> [Eric.Weblog()]</p>
<p>I'm not. As I say in the current SD Times, the thing about J# is that it serves two very real niches: the bet-hedgers and the Java "pragmatic believers." Bet-hedgers are those people who have decided not to jump to .NET, but who wish to keep their options open in case the market suddenly shift or if a particular opportunity arises. For those people, the key is maximizing their understanding of the .NET Framework per minute spent and even though it's only a matter of days for a Java programmer to learn C#, it's a better option for those people <em>not</em> to learn anything about languages, and just maintain a "bet hedging" knowledge of .NET.</p>
<p>When I say "pragmatic believers" I'm referring to those who fall short of reflexive loathing of all things Redmondian, but who believe that particular Java language features (say, checked exceptions) are important. Those people might <em>eventually</em> move towards a non-Java language, but if it's not a great burden on MS to support them, why force them to make a decision?</p>
<p>The big challenge is that as the Java language evolves, how much effort will Redmond expend to keep J# in synchrony? Many of the features in the upcoming "Tiger" release of Java are already in C#, so those will be easy. The big question is generics -- both C# "Whidbey" and Java "Tiger" will have a C++-derived syntax for generics (Collection\<Type>), but early indications are that the underlying implementations will be hugely different. Given how ubiquitous generics will become the instant they become available, this may very well be the spot where J# and Java become eternally incompatible.</p>Programming on a Tablet PC2003-08-19T01:29:00-10:002003-08-19T01:29:00-10:00larrytag:knowing.net,2003-08-19:/posts/2003/08/programming-on-a-tablet-pc/<blockquote>
<div>
<p>I've made a concerted effort to try programming in my "off hours" on the Tablet PC...in slate mode...without a keyboard...or external monitor. (Yeah, sounds crazy, but I really wanted to understand what it's like.) How's it going? It's passable. <em>via</em><br>
[Incremental Blogger]</p>
</div>
<div>
</div>
</blockquote>
<div>
Wow, not for me. I've …</div><blockquote>
<div>
<p>I've made a concerted effort to try programming in my "off hours" on the Tablet PC...in slate mode...without a keyboard...or external monitor. (Yeah, sounds crazy, but I really wanted to understand what it's like.) How's it going? It's passable. <em>via</em><br>
[Incremental Blogger]</p>
</div>
<div>
</div>
</blockquote>
<div>
Wow, not for me. I've worked with both a convertible and a slate Tablet PC and I *vastly* prefer the convertible, precisely because I found programming with pen impossible. One of the two thousand projects I have on the stack of "things to do in my copious spare time" is a customizable pen keyboard / input editor, precisely so I could dedicate virtual keys to, say, { and } characters. With such a thing, I could imagine programming with pen.
</div>Someone's spoofing me2003-08-19T00:09:00-10:002003-08-19T00:09:00-10:00larrytag:knowing.net,2003-08-19:/posts/2003/08/someones-spoofing-me/<p>F'ing A -- I've begun receiving bounced email messages indicating that someone's using my email address in the "From:" line of I-Worm.Sobig.f spams; you know, the one that says "re: Your application" and stuff like that. Is there any protocol for me sending out "No, no, that's not me …</p><p>F'ing A -- I've begun receiving bounced email messages indicating that someone's using my email address in the "From:" line of I-Worm.Sobig.f spams; you know, the one that says "re: Your application" and stuff like that. Is there any protocol for me sending out "No, no, that's not me" emails or is it just something that I ignore?</p>PDC Gimmes2003-08-16T01:52:00-10:002003-08-16T01:52:00-10:00larrytag:knowing.net,2003-08-16:/posts/2003/08/pdc-gimmes/<blockquote>
<p>As I'd been hoping, Brad Abrams confirms that the gimmes at this year's PDC will include:</p>
<p>- Longhorn (Windows v.Next)<br>
- Whidbey (Visual Studio v.Next)<br>
- Yukon (SQL Server v.Next)</p>
<p>I would've been pretty angry if we'd spent \$1700 to go learn about these things, and then not been able …</p></blockquote><blockquote>
<p>As I'd been hoping, Brad Abrams confirms that the gimmes at this year's PDC will include:</p>
<p>- Longhorn (Windows v.Next)<br>
- Whidbey (Visual Studio v.Next)<br>
- Yukon (SQL Server v.Next)</p>
<p>I would've been pretty angry if we'd spent \$1700 to go learn about these things, and then not been able to use it afterward. :) Clearly, this is the must-attend event for Windows developers interested in the future (uh oh, what happens when you start to sound like Scoble? :-p). <em>via</em></p>
<div>
<p>[The .NET Guy]</p>
</div>
<div>
</div>
</blockquote>
<div>
See y'all there!
</div>Well Thats One Way To Lose 6 Pounds In 3 Days I Went Diving On The 1st And By Wednesday I Realized I Ha2003-08-10T06:36:00-10:002003-08-10T06:36:00-10:00larrytag:knowing.net,2003-08-10:/posts/2003/08/well-thats-one-way-to-lose-6-pounds-in-3-days-i-went-diving-on-the-1st-and-by-wednesday-i-realized-i-ha/<p><strong>Well, that's one way to lose 6 pounds in 3 days...</strong> I went diving on the 1st and by Wednesday I realized I had an ear infection. Went to the Doctor and got drops. No biggy. And then Thursday, it was like my head exploded: both ears swelled entirely <em>shut …</em></p><p><strong>Well, that's one way to lose 6 pounds in 3 days...</strong> I went diving on the 1st and by Wednesday I realized I had an ear infection. Went to the Doctor and got drops. No biggy. And then Thursday, it was like my head exploded: both ears swelled entirely <em>shut</em>, stabbing pains throughout my head (lots of nerves in the ear... oh yeah!), and my temperature went over 102! For the next 48 hours I would sleep for an hour and then be awake for a half an hour of pain and then fade into sleep again. It was wild; I didn't know ear infections could be like that. I still can barely hear, but the fever's broken and I can eat again. Oh, and yes, <em>of course</em>, this was on the eve of the end of a project for a first-time client: "Uh, I have to call in sick today..."</p>
<p>The good news is that when I was lying in a stupor the FedEx guy dropped off my copy of Borland's C# Builder. That I haven't installed it yet is proof enough that I was <em>really, really</em> sick. Stay tuned for reactions in the coming days...</p>RoboGrill to displace McDonald's burger-flippers2003-08-02T09:43:00-10:002003-08-02T09:43:00-10:00larrytag:knowing.net,2003-08-02:/posts/2003/08/robogrill-to-displace-mcdonalds-burger-flippers/<p>McDonald's is testing new gear that eliminates human burger-flippers for robotic fridge-to-grill systems. [via]{.742033902-03082003} Link<br>
[Boing Boing Blog]</p>
<p>[Okay, if even <em>burger flippers</em> are going to be joining the unemployment roles due to productivity gains, what's so unthinkable about European-style work hours and vacations?]{.742033902-03082003}</p>The Ivory Tower of Software Development2003-08-02T07:58:00-10:002003-08-02T07:58:00-10:00larrytag:knowing.net,2003-08-02:/posts/2003/08/the-ivory-tower-of-software-development/<blockquote>
<p>Bad software.[ ]{style="mso-spacerun: yes"} It’s everywhere.[ ]{style="mso-spacerun: yes"} I know a guy who stinks as a programmer. [ ]{style="mso-spacerun: yes"}He makes about 60k a year, and at least ¼ of his time is spent maintaining a particular pile of crap program that he birthed into this world …</p></blockquote><blockquote>
<p>Bad software.[ ]{style="mso-spacerun: yes"} It’s everywhere.[ ]{style="mso-spacerun: yes"} I know a guy who stinks as a programmer. [ ]{style="mso-spacerun: yes"}He makes about 60k a year, and at least ¼ of his time is spent maintaining a particular pile of crap program that he birthed into this world 5 years ago.[ ]{style="mso-spacerun: yes"} He’s constantly welding more junk on to get it to do the latest thing that his company “needs”. [ ]{style="mso-spacerun: yes"}The thing is a complete monstrosity.[ ]{style="mso-spacerun: yes"} How it hasn’t collapsed under its own weight is a miracle. And if the guy ever leaves, it will probably take a new developer a good 3 months of doing nothing else, just to figure out the basics of this (shudder) application. [ ]{style="mso-spacerun: yes"}There’s no documentation, no source control, hell, where there are comments they’re really just disinformation at this point.</p>
</blockquote>International Tablet PC Meetup Day2003-08-02T07:30:00-10:002003-08-02T07:30:00-10:00larrytag:knowing.net,2003-08-02:/posts/2003/08/international-tablet-pc-meetup-day/<p>Chris Coulter proclaims August 19th to be The International Tablet PC Meetup Day. Pick a meeting place in your area and spread the word....<br>
[Incremental Blogger]</p>AT&T Wireless Coverage Maps (Large)2003-08-02T07:19:00-10:002003-08-02T07:19:00-10:00larrytag:knowing.net,2003-08-02:/posts/2003/08/att-wireless-coverage-maps-large/<blockquote>
<p>AT&T GSM(TM)/GPRS General Discussion: NEW BIG GSM National Coverage Map<br>
[<a href="https://about.me/bjepson">Brian Jepson's Weblog</a> ]</p>
</blockquote>Free Microsoft EBooks This Week Hitchhikers Guide To Th2003-07-21T05:15:00-10:002003-07-21T05:15:00-10:00larrytag:knowing.net,2003-07-21:/posts/2003/07/free-microsoft-ebooks-this-week-hitchhikers-guide-to-th/<p>Free Microsoft eBooks this week: Hitchhiker's Guide to the Galaxy by Douglas Adams (!), The Flying Book by David Blatner, and Face in the Frost by John Bellairs.</p>I Wrote NbspthisnbspWeb Page Designed For Phone PDA Access T2003-07-15T00:30:00-10:002003-07-15T00:30:00-10:00larrytag:knowing.net,2003-07-15:/posts/2003/07/i-wrote-nbspthisnbspweb-page-designed-for-phone-pda-access-t/<p>I wrote this Web page designed for phone / PDA access that allows you to discover the 3 nearest <a href="https://www.geocaching.com/play">Geocaches</a> for a given position. Returns rough bearing and range, precise lat/lon, description, and clue (ROT13 obfuscated by default).</p>WSE 2.0 Tech Preview2003-07-15T00:14:00-10:002003-07-15T00:14:00-10:00larrytag:knowing.net,2003-07-15:/posts/2003/07/wse-20-tech-preview/<blockquote>
<p>The technology preview of WSE 2.0 provides early access to new advanced Web services capabilities. New features include a policy framework, enhanced security model, message-oriented programming model, and support for multiple hosting environments.<br>
[Microsoft Download Center]</p>
</blockquote>WAP Is I Wrote This Mobile Forms App So That You Can2003-07-14T10:38:00-10:002003-07-14T10:38:00-10:00larrytag:knowing.net,2003-07-14:/posts/2003/07/wap-is-i-wrote-this-mobile-forms-app-so-that-you-can/<p>WAP is...</p>
<p>I wrote this "Mobile Forms App" so that you can find the nearest Geocache by entering your latitude and longitude from your phone. When I try to access it from my Nokia 3590 (a cheap phone, but still...), I can't load the form with the results because it's …</p><p>WAP is...</p>
<p>I wrote this "Mobile Forms App" so that you can find the nearest Geocache by entering your latitude and longitude from your phone. When I try to access it from my Nokia 3590 (a cheap phone, but still...), I can't load the form with the results because it's "too large." It's 8K! Sheesh... MobileCapabilities.MaximumRenderedPageSize is 1397! Hmm is that "per card"? Breaking the page up into cards should be easy, if that solves it...</p>
<p>></p>Free Webinar On ServiceOriented Architectures Wednesday July 16 11 AM2003-07-14T01:54:00-10:002003-07-14T01:54:00-10:00larrytag:knowing.net,2003-07-14:/posts/2003/07/free-webinar-on-serviceoriented-architectures-wednesday-july-16-11-am/<p>Free Webinar on Service-Oriented Architectures, Wednesday, July 16, 11 AM PDT (2 PM EDT)</p>
<p>"<strong>Topic:</strong> "Building a Service-Oriented Architecture"<br>
<strong>Speaker:</strong> Daryl Plummer, Gartner Group Vice President<br>
<strong>Date:</strong> Wednesday, July 16, 2003<br>
<strong>Time:</strong> 2:00 pm Eastern / 11:00 am Pacific, 1 hr. in length<br>
<strong>Registration:</strong> http://www.m7.com/gartnerseminar …</p><p>Free Webinar on Service-Oriented Architectures, Wednesday, July 16, 11 AM PDT (2 PM EDT)</p>
<p>"<strong>Topic:</strong> "Building a Service-Oriented Architecture"<br>
<strong>Speaker:</strong> Daryl Plummer, Gartner Group Vice President<br>
<strong>Date:</strong> Wednesday, July 16, 2003<br>
<strong>Time:</strong> 2:00 pm Eastern / 11:00 am Pacific, 1 hr. in length<br>
<strong>Registration:</strong> http://www.m7.com/gartnerseminar.html "</p>
<p>M7 is a nice product that we gave a Jolt Productivity Award to this year. That's all I know about this, but it's a timely topic and the price is certainly right.</p>Wheres The Outrage Bob Dole 19962003-07-12T04:24:00-10:002003-07-12T04:24:00-10:00larrytag:knowing.net,2003-07-12:/posts/2003/07/wheres-the-outrage-bob-dole-1996/<p>"Where's the outrage?" - Bob Dole, 1996.</p>I Have About 500 Albums Which Is Small For A Music Fan With WM9s 2131 Lossless Compression Call It 120GB 500 Albums2003-07-12T02:43:00-10:002003-07-12T02:43:00-10:00larrytag:knowing.net,2003-07-12:/posts/2003/07/i-have-about-500-albums-which-is-small-for-a-music-fan-with-wm9s-2131-lossless-compression-call-it-120gb-500-albums/<p>I have about 500 albums, which is small for a music fan. With WM9's 2:1-3:1 lossless compression, call it 120GB (500 albums * .6 uncompressed GB / album * 1 compresssed GB / 2.5 uncompressed GB). The Nomad Zen, which I think is today's most capacious player, has 60GB of storage …</p><p>I have about 500 albums, which is small for a music fan. With WM9's 2:1-3:1 lossless compression, call it 120GB (500 albums * .6 uncompressed GB / album * 1 compresssed GB / 2.5 uncompressed GB). The Nomad Zen, which I think is today's most capacious player, has 60GB of storage. Okay, I think I know one thing that will be on my Christmas 2004 Christmas list...</p>Microsoft Reader Free EBooks This Weeks Freebiesnbspa2003-07-11T05:34:00-10:002003-07-11T05:34:00-10:00larrytag:knowing.net,2003-07-11:/posts/2003/07/microsoft-reader-free-ebooks-this-weeks-freebiesnbspa/<p>Microsoft Reader Free eBooks: This week's freebies are I Am Madame X by Gioia Diliberto, Open Innovation by Henry Chesbrough, and The Joy Luck Club by Amy Tan.</p>RCA DCM215 Cable Modem Reset Technique If You Lose Your Cable Connectivity Try Resetting Your Power By Physically Removing2003-07-11T01:02:00-10:002003-07-11T01:02:00-10:00larrytag:knowing.net,2003-07-11:/posts/2003/07/rca-dcm215-cable-modem-reset-technique-if-you-lose-your-cable-connectivity-try-resetting-your-power-by-physically-removing/<p>RCA DCM215 Cable Modem reset technique: if you lose your cable connectivity, try resetting your power by physically removing the plug <em>at the power supply</em> (not just at the back of the modem). Apparently, this is a known issue with (at least) this particular modem.</p>Matrix-style table tennis2003-07-10T05:55:00-10:002003-07-10T05:55:00-10:00larrytag:knowing.net,2003-07-10:/posts/2003/07/matrix-style-table-tennis/<blockquote>
<p>Via Fazed, a really funny japanese table tennis video.... [<em>via</em>]{.768395422-10072003} [<a href="http://blog.monstuff.com/archives/000074.html">Curiosity is bliss</a>]</p>
</blockquote>
<p>[This is much, much better than The Matrix Reloaded.]{.768395422-10072003}</p>I Love Mono Im Very Fond Of Linux And If You Give Me A Mac I Promise Ill Give It A Fair Chance Joshnbspcriti2003-07-10T05:33:00-10:002003-07-10T05:33:00-10:00larrytag:knowing.net,2003-07-10:/posts/2003/07/i-love-mono-im-very-fond-of-linux-and-if-you-give-me-a-mac-i-promise-ill-give-it-a-fair-chance-joshnbspcriti/<p>I love Mono, I'm very fond of Linux, and if you give me a Mac, I promise I'll give it a fair chance!</p>
<p>Josh criticizes my "disregard for non-Windows platforms as a whole" in this comment. I guess that's pretty fair, at least lately, as I've been living in an …</p><p>I love Mono, I'm very fond of Linux, and if you give me a Mac, I promise I'll give it a fair chance!</p>
<p>Josh criticizes my "disregard for non-Windows platforms as a whole" in this comment. I guess that's pretty fair, at least lately, as I've been living in an all-Windows environment for, oh, the last six months or so anyway. But that's just an accident of timing: I haven't looked at Mono since last Fall and I went through a major hardware cycle over the Winter. Soon (maybe very soon if a particular contract comes through), I will get a Linux system up again. In my training material, I've made a very deliberate effort to teach C# and .NET as separate concepts from the VS.NET 2003 toolset and, to the extent possible, I've tried to make sure that all my code samples run under Mono as well as Microsoft's implementation of the .NET Framework.</p>
<p>Josh's last sentence is a little harsh, though. While I <em>do</em> believe that platform-specific programming has much to offer, I <em>don't</em> want there to be only one platform. I want it to be as easy to use C# to program my Linux-based Tivo as it is to use C# to program my Windows-based Tablet PC.</p>
<p>Not that I <em>have</em> Tivo yet. But when I get one, and if it can be programmed in C#, I <em>promise</em> I'll be hacking it!</p>No Penalty For Programming J Contrary To Rumors That Ive Heard I Can Find No Runtime Penalty For Code Wr2003-07-10T05:00:00-10:002003-07-10T05:00:00-10:00larrytag:knowing.net,2003-07-10:/posts/2003/07/no-penalty-for-programming-j-contrary-to-rumors-that-ive-heard-i-can-find-no-runtime-penalty-for-code-wr/<p>No penalty for programming J#.</p>
<p>Contrary to rumors that I've heard, I can find <em>no runtime penalty</em> for code written in J# as opposed to other .NET languages and specifically C#. The one significant difference I've seen in IL generated by the vjc (J#) and csc (C#) command-line compilers is …</p><p>No penalty for programming J#.</p>
<p>Contrary to rumors that I've heard, I can find <em>no runtime penalty</em> for code written in J# as opposed to other .NET languages and specifically C#. The one significant difference I've seen in IL generated by the vjc (J#) and csc (C#) command-line compilers is that all Java instance methods are (correctly) <strong>virtual</strong>, while C# methods default (correctly) to non-<strong>virtual</strong>. That's a difference in the languages' designs that might lead to a measurable performance difference in the speed with which methods are called (perhaps that is what is going on in the Cholesky benchmarks?).</p>
<p>Something I'd heard, <em>which turns out to be incorrect</em>, is that J#'s implementation of inner classes was flawed. Inner classes are real nested classes at the IL level. So, if you prefer anonymous inner classes to delegates, J#-away with no hesitation.</p>Data Point Once Upon A Time To Study The Performance Of Square Versus Jagged Arrays In NETnbspI Ported To C The2003-07-09T05:27:00-10:002003-07-09T05:27:00-10:00larrytag:knowing.net,2003-07-09:/posts/2003/07/data-point-once-upon-a-time-to-study-the-performance-of-square-versus-jagged-arrays-in-netnbspi-ported-to-c-the/<p>Data point:</p>
<p>Once upon a time, to study the performance of square versus jagged arrays in .NET I ported to C# the source code of one of the benchmarks mentioned in the article "The NINJA project. <a href="https://dblp.uni-trier.de/db/journals/cacm/cacm44.html%23MoreiraMGAWA01">CACM 44</a>(10): 102-109 (2001)."</p>
<p>I dug it out today and ran it against …</p><p>Data point:</p>
<p>Once upon a time, to study the performance of square versus jagged arrays in .NET I ported to C# the source code of one of the benchmarks mentioned in the article "The NINJA project. <a href="https://dblp.uni-trier.de/db/journals/cacm/cacm44.html%23MoreiraMGAWA01">CACM 44</a>(10): 102-109 (2001)."</p>
<p>I dug it out today and ran it against the latest version of Microsoft's C# (7.10.3052.4), Mono (Release 0.25, June 25, 2003), and ran the Java version against J# (7.10.3052.0) and Java (1.4.2). I ran each test 3 times on a Motion Computer M1200 Tablet Computer (Mobile P3, 866MHz, 512MB RAM). Timing is done on either side of a function call, so this should not reflect differences in VM start-up time. Results in milliseconds:</p>
<hr>
<div class="highlight"><pre><span></span><code> Run \# Part 1 Part 2
</code></pre></div>
<p>Microsoft C# <br>
1 2754 3445
2 2744 3485
3 2794 3515
Mono C# <br>
1 3435 3785
2 3385 3825
3 3395 3815
J# <br>
1 3375 3766
2 3435 3825
3 3365 3825
Java <br>
1 4517 4547
2 4546 4567
3 4517 4566</p>
<hr>
<p>Source code for C#, here for J#, here for Java.</p>Kent Beck Interview2003-07-09T01:44:00-10:002003-07-09T01:44:00-10:00larrytag:knowing.net,2003-07-09:/posts/2003/07/kent-beck-interview/<p><strong>["]{.963004418-09072003}dW:</strong> What do you think about software quality?</p>
<p><strong>Beck:</strong> I wish developers would consider the enormous consequences of their actions. When I got my driver's license at 16, I was both elated and terrified; I had newfound freedom and responsibilities to go with it. Now, compare that feeling to …</p><p><strong>["]{.963004418-09072003}dW:</strong> What do you think about software quality?</p>
<p><strong>Beck:</strong> I wish developers would consider the enormous consequences of their actions. When I got my driver's license at 16, I was both elated and terrified; I had newfound freedom and responsibilities to go with it. Now, compare that feeling to when Microsoft sends me a new operating system. Do I have the same feeling? No, I think it's going to screw up my life for months. For how many decades and for how many millions of people has that negative emotion been created around software. I think it's such a shame we set our sights so low. Either you're stuck with software that works the way it works because you don't want to break it, or you get an upgrade that causes pain and anguish. I just want my stupid computer to work and it doesn't. That's not computing.</p>
<p>That we accept the status quo says such negative things about us as humans. If our laptops degrade at half the pace as before, that isn't progress. Sucks less isn't progress. What would it be like if you bought new software and you had that sense of increased responsibilities but also of infinite vistas? Our ambitions are so, so small compared to the opportunity.</p>
<blockquote>
<p>He also talks about XP's beginnings in 1996 at Chrysler. We're using most of XP full time, and we'll be using it all as soon as we have enough people. It's really done wonders for us for project management, and I can't wait to see how much it helps developer productivity when we have full time pair programming.["]{.963004418-09072003} [<em>via</em>]{.963004418-09072003} [The .NET Guy]</p>
</blockquote>Sketch your circuts2003-07-06T04:56:00-10:002003-07-06T04:56:00-10:00larrytag:knowing.net,2003-07-06:/posts/2003/07/sketch-your-circuts/<blockquote>
<p>Another app that better with "ink" http://www.inkwalker.com/products.htm [<em>via</em>]{.345555121-06072003} [Sean 'Early' Campbell & Scott 'Adopter' Swigart's Radio Weblog]</p>
</blockquote>
<p>[This app implies that electrical engineers (or hobbyists) can "think" in circuits the way that programmers think in code. Is that true? Does an EE go:]{.345555121-06072003} ["Yeah …</p><blockquote>
<p>Another app that better with "ink" http://www.inkwalker.com/products.htm [<em>via</em>]{.345555121-06072003} [Sean 'Early' Campbell & Scott 'Adopter' Swigart's Radio Weblog]</p>
</blockquote>
<p>[This app implies that electrical engineers (or hobbyists) can "think" in circuits the way that programmers think in code. Is that true? Does an EE go:]{.345555121-06072003} ["Yeah, I'd like to build a satellite radio. Let's see now: capacitor-capacitor-resistor...etc..."?]{.345555121-06072003}</p>Barry White: RIP2003-07-05T23:52:00-10:002003-07-05T23:52:00-10:00larrytag:knowing.net,2003-07-05:/posts/2003/07/barry-white-rip/<p>[Barry White has died of kidney failure.]{.583065116-06072003}</p>Does Computational Power Add Programmer Performance I Said No In Th2003-07-05T09:34:00-10:002003-07-05T09:34:00-10:00larrytag:knowing.net,2003-07-05:/posts/2003/07/does-computational-power-add-programmer-performance-i-said-no-in-th/<p>Does computational power add programmer performance? I said no in this post, Josh sarcastically agreed: "I agree whole-heartedly, if you can be a engineering-puritan and use a simple text editor and compiler, without complex build/make/ant scripts which do far more than just compile. It seems to me that …</p><p>Does computational power add programmer performance? I said no in this post, Josh sarcastically agreed: "I agree whole-heartedly, if you can be a engineering-puritan and use a simple text editor and compiler, without complex build/make/ant scripts which do far more than just compile. It seems to me that with the evolution of the industry itself, software programming is much more than that now. I can't imagine a programmer today (well, I suppose I don't want to anyway) who builds an application with the luxury of not having to actually test it. The hardware requirements to run the necessary testing/environment software is what really starts to cost, in my experience. In my case, I have to test my software with 3rd party (sometimes homemade) stress-testing and unit-testing software--and these are not thin. With web/network applications, there's also the overhead of running a .NET or J2EE app/web server."</p>
<p>Well, first, I think that the percentage of programmers who actually do the best practice of executing a test suite as part of their compile-cycle is smething far short of 10% of the programming populace. But I'll concede the point that the hyphen in the compile-debug process is a place where a faster computer can be felt. But, I ask, how much productivity gain from a four-fold increase in processing power? A 2Ghz machine versus a 500Mhz (say) -- what productivity increase would you expect to see.</p>Free eBooks from Microsoft2003-07-04T02:53:00-10:002003-07-04T02:53:00-10:00larrytag:knowing.net,2003-07-04:/posts/2003/07/free-ebooks-from-microsoft/<p>[Microsoft is running a great promotion this summer -- free eBooks for Reader. Today's selections are Candy & Me by Hillary Liftin, Last To Die by James Grippando, and A Short History of Nearly Everything by Bill Bryson. Once retired, these titles will (almost certainly) not be available for free, so jump …</p><p>[Microsoft is running a great promotion this summer -- free eBooks for Reader. Today's selections are Candy & Me by Hillary Liftin, Last To Die by James Grippando, and A Short History of Nearly Everything by Bill Bryson. Once retired, these titles will (almost certainly) not be available for free, so jump on over.]{.984355119-04072003}</p>I Moved To The Bay Area 14 Years Ago Today As Product Review Editor Of Computer Language And AI Expert Mag2003-07-03T06:09:00-10:002003-07-03T06:09:00-10:00larrytag:knowing.net,2003-07-03:/posts/2003/07/i-moved-to-the-bay-area-14-years-ago-today-as-product-review-editor-of-computer-language-and-ai-expert-mag/<p>I moved to the Bay Area 14 years ago today, as Product Review Editor of <em>Computer Language</em> and <em>AI Expert</em> magazines. My duties included administering to the BBS's, which ran on a dedicated PC connected to a 1200 baud modem, and keeping track of the CompuServe forums. My CIS account …</p><p>I moved to the Bay Area 14 years ago today, as Product Review Editor of <em>Computer Language</em> and <em>AI Expert</em> magazines. My duties included administering to the BBS's, which ran on a dedicated PC connected to a 1200 baud modem, and keeping track of the CompuServe forums. My CIS account was a mighty "767" account (76702,706 IIRC).</p>
<p>My first vendor meeting was at Borland. Philippe Kahn asked my opinion on whether Borland should do a Modula-2 compiler; I said "Nah." Later that day, I met Nils Jensen of JPI, who showed me their Modula-2 compiler and its at-the-time-amazing multithreading capability. I remember thinking "Geez, how much of an idiot did I sound like saying that Modula-2 didn't seem very exciting?"</p>My Rant In Reaction To A Hrefhttpwwwartimacomforumsflatjspforum106ampthread6543amps2003-07-03T03:59:00-10:002003-07-03T03:59:00-10:00larrytag:knowing.net,2003-07-03:/posts/2003/07/my-rant-in-reaction-to-a-hrefhttpwwwartimacomforumsflatjspforum106ampthread6543amps/<p>My rant in reaction to <a href="https://www.artima.com/forums/flat.jsp?forum=106&thread=6543&start=0&msRange=15">Paul Caplan's response</a> to Angelika Langer's OP:</p>
<p>> I would like to hear more about<br>
> what is wrong with the languages of today</p>
<p>Of all the activities imaginable, computer programming is the one in which computers <em>should</em> have the greatest productivity impact. And yet compared to …</p><p>My rant in reaction to <a href="https://www.artima.com/forums/flat.jsp?forum=106&thread=6543&start=0&msRange=15">Paul Caplan's response</a> to Angelika Langer's OP:</p>
<p>> I would like to hear more about<br>
> what is wrong with the languages of today</p>
<p>Of all the activities imaginable, computer programming is the one in which computers <em>should</em> have the greatest productivity impact. And yet compared to activities that have enjoyed huge productivity gains via computers in the past 20 years (say, image manipulation), the productivity gains in computer programming are trivial. Give a 500MHz P3 to one professional graphics designer and a 3GHz P4 to another and compare their productivity: you <em>will</em> see a productivity difference, because this is a task / profession which has managed to leverage the computer itself. Give the same disparate hardware to two comparably talented programmers and what productivity difference will you see? None, or so little difference as to be immeasurable.</p>
<p>Similarly, give two designers the current feature set of a preferred professional tool (let's say, Photoshop) and the feature set of that tool 5 years ago, and you'll see a difference. In programming? Doubtful (with the notable exception of a refactoring IDE such as IDEA).</p>
<p>More concretely, "computer programs" are almost invariably viewed as a series of linear text streams that are converted in some way into machine instructions in some O(lines of source code) manner. 99+% of the world's code is written imperatively. Object-orientation, which is almost universally accepted as the preferred structuring mechanism for software systems, has turned out not to be universally superior for learning, comprehension, or reuse.</p>
<p>Persistence, business rules, interfaces: all are areas in which the way we specify, create, and maintain systems <em>invariably</em> trade off productivity with maintainability. If you want to do things fast, you might have some chance to use a tool that presents the problem as something other than a text stream (i.e., you might be able to use a visual builder). But those tools <em>invariably</em> create overly-coupled representations of the solution.</p>
<p>Pattern matching is absolutely fundamental to human problem-solving, but where's the computer-support for pattern matching in the task of software development? That is, why can't a programming language <em>leverage</em> the fact that the vast majority of computer programs are built from examples?</p>
<p>Test-driven design and functional programming: The whole world of TDD is based on either minimizing side-effects or making them explicit. Well, if you program side-effect free, you should have programmatic support, i.e., use a functional language, which has all sorts of implications for behind-the-scenes implementation. And if you <em>rely</em> on side-effects, the world of unit-testing tools is in conflict with language provisions for visibility (although in .NET, at least, you can get around visibility with sufficient security permissions).</p>
<p>Typing, multithreading, resource management: In all of these areas, there's an enormous gap between standard and best practices. Just as managed memory and built-in exception mechanisms are for most programmers effective "solutions" to common problems, these things should be part of the development / deployment infrastructure.</p>
<p>Sheesh, I haven't even started on the issue of multiple representations and semi-structured data....</p>
<p>What's wrong with today's languages? Everything.</p>Agiledox2003-06-24T07:51:00-10:002003-06-24T07:51:00-10:00larrytag:knowing.net,2003-06-24:/posts/2003/06/agiledox/<blockquote>
<p>My colleague Joe Walnes pointed me to a fascinatingly simple tool developed by our colleague Chris Stevenson. TextDox (part of <a href="http://agiledox.sourceforge.net/">AgileDox</a>) is a tool to automatically generate documentation from JUnit test cases. Sounds ridiculous, but then that's what <a href="https://martinfowler.com/bliki/Wardish.html">Wardish</a> ideas are like. [<em>via</em> ]{.135365000-25062003}[<a href="https://martinfowler.com/bliki/Agiledox.html">Martin Fowler's Bliki</a>]</p>
</blockquote>Go To The Source Luke2003-06-23T22:13:00-10:002003-06-23T22:13:00-10:00larrytag:knowing.net,2003-06-23:/posts/2003/06/go-to-the-source-luke/<p>\<</p>
<p>blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> The standard answer to the people wanting to <em>[really]{.underline}</em> understand how .NET works is to go to the source, i.e. the Rotor source code. Now, there is one step better: these <em>great</em> <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fprograms%2Feurope%2Frotor%2Fworkshop.aspx%2523download%252520presentation" title="http://research.microsoft.com/programs/europe/rotor/workshop.aspx#Download%20Presentation">presentations from the Rotor Conference</a> (scroll to the bottom) from …</p><p>\<</p>
<p>blockquote dir="ltr" style="MARGIN-RIGHT: 0px"> The standard answer to the people wanting to <em>[really]{.underline}</em> understand how .NET works is to go to the source, i.e. the Rotor source code. Now, there is one step better: these <em>great</em> <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fprograms%2Feurope%2Frotor%2Fworkshop.aspx%2523download%252520presentation" title="http://research.microsoft.com/programs/europe/rotor/workshop.aspx#Download%20Presentation">presentations from the Rotor Conference</a> (scroll to the bottom) from people like <a href="http://www.razorsoft.net/" title="http://www.razorsoft.net/weblog/">Peter</a>, and \<a title="http://staff.develop.com/jasonw/weblog/" href="http://staff.develop.com/jasonw/weblog/"" xmlns="http://www.w3.org/1999/xhtml">Jason amongst others. Want to undertand the JIT? The GC? Its all here! [<em>via</em>]{.497031315-24062003}<br>
[Sam Gentile's Blog]</p>
<p>[Another great resource is the hyperlinked version of the <a href="http://jonjagger.blogspot.com/">C# Language Specification</a>.]{.497031315-24062003}</p>Future Visions2003-06-23T01:23:00-10:002003-06-23T01:23:00-10:00larrytag:knowing.net,2003-06-23:/posts/2003/06/future-visions/<p>[Eric Kidd has written an eloquent post dismaying of the future for small ISVs. He sees the future dominated by two forces: Microsoft and Open Source. He laments for a third way, where "30 person companies" can be significant. He has some good points: Microsoft and Open Source <em>are</em> going …</p><p>[Eric Kidd has written an eloquent post dismaying of the future for small ISVs. He sees the future dominated by two forces: Microsoft and Open Source. He laments for a third way, where "30 person companies" can be significant. He has some good points: Microsoft and Open Source <em>are</em> going to be around and they <em>are</em> going to influence the SD world. But small ISVs have a brilliant future. JetBrains has about 5% marketshare of the Java IDE space. That gives them enough money to expand, build interesting software, and be entirely limited in their growth by finding people talented enough to join their company. Not a bad situation.]{.025590717-23062003}</p>
<p>[The other day I was writing an article about the Tablet PC that will appear in a future issue of SD Times and I wanted to emphasize that innovative hardware always introduce a needs gap, in which the nimbleness and imagination of entrepreneurs is a crucial advantage. And my fingers first wrote, "It's been more than a decade since the widespread introduction of the mouse and the bitmapped display..." and then I wiped that out and tried "It's been more than 5 years since the original Palm..." and then I wiped that out and tried to figure out how I could get people excited with the truth, which is "Well, actually, the Tablet PC is an older piece of hardware than the Smartphone, which isn't even yet released in the US, and which is an entree into a market that's considerably larger than the entire universe of desktop PCs."]{.025590717-23062003}</p>
<p>[Let's take a look at OneNote, Microsoft's forthcoming note-taking system. I think it's safe to assume that in 5 years, Gartner will be able to say something like "80% of all notes taken on the Tablet PC are taken in OneNote." And there's two alternative note-taking systems already in the marketplace: FranklinCovey's TabletPlanner and Mindjet's MindManager. But you know what? I don't like any of them. I'll lay down my credit card <em>instantly</em> for a note-taking system that accords with the way I write; "80% of the note-taking market" is entirely irrelevant to me because notes are central to the way I work, just as "95% of the Java IDE market" is entirely irrelevant to the fact that I can't <em>imagine</em> choosing another Java IDE over IntelliJ.]{.025590717-23062003}</p>
<p>[I have no idea what computers are going to look like in 25 years but I guarantee you that people will still struggle with communication, will still be frustrated that they can't coordinate their activities, will still long for tools that facilitate the expression of their artistic impulses, will still watch projects stall and falter despite the best intentions, will still be frustrated trying to lose weight, will still worry about keeping their kids safe, will still... be busy. And they will still be eager to pay for things that save them time. And if the software is well-written and well-supported and helps them achieve their goals, they won't give a damn if it comes from a company with 30 employees or 30,000.]{.025590717-23062003}</p>SDK for Windows Mobile 2003-based Pocket PC Emulator Images2003-06-22T23:36:00-10:002003-06-22T23:36:00-10:00larrytag:knowing.net,2003-06-22:/posts/2003/06/sdk-for-windows-mobile-2003-based-pocket-pc-emulator-images/<blockquote>
<p>Download new Emulator Images that allow you to test your applications in all available Pocket PC 2003 languages. [<em>via</em>]{.792373016-23062003} [Microsoft Download Center]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> [Microsoft released the new version of the Pocket PC operating system today. It's called Windows Mobile 2003 and I think its most important features …</p><blockquote>
<p>Download new Emulator Images that allow you to test your applications in all available Pocket PC 2003 languages. [<em>via</em>]{.792373016-23062003} [Microsoft Download Center]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> [Microsoft released the new version of the Pocket PC operating system today. It's called Windows Mobile 2003 and I think its most important features are built-in WiFi and Bluetooth support. Also, it supports Windows Media 9 technologies, which are so good that they might actually convince me to carry around the occasional home movie. (I dunno', though: I've got a 256MB card, am I really going to give up a big chunk of that for the off-chance of showing someone my latest dive video?)]{.792373016-23062003}</p>Best Offer: Amazon Software Tech2003-06-22T23:18:00-10:002003-06-22T23:18:00-10:00larrytag:knowing.net,2003-06-22:/posts/2003/06/best-offer-amazon-software-tech/<blockquote>
<p>Jeff Bezos wants his company to offer mini-Amazons to companies needing a successful Web commerce tool. The technology that runs the popular shopping site may be its most valuable product offering. [<em>via</em>]{.037545215-23062003} [Wired News]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> [I think this makes a lot of sense. Internal Business Machines and …</p><blockquote>
<p>Jeff Bezos wants his company to offer mini-Amazons to companies needing a successful Web commerce tool. The technology that runs the popular shopping site may be its most valuable product offering. [<em>via</em>]{.037545215-23062003} [Wired News]</p>
</blockquote>
<p>\<</p>
<p>p dir="ltr"> [I think this makes a lot of sense. Internal Business Machines and National Cash Register were built on bringing new merchant technologies to small stores. The push to bring Mom & Pop stores onto the Web dried up with no real winners; while there's plenty of technology available to technical people, there are millions of craftspeople who represent a real economic opportunity and force and who do not have a clear solution other than eBay, which isn't quite the same.]{.037545215-23062003}</p>Modular Self-Configuring Robots2003-06-22T01:44:00-10:002003-06-22T01:44:00-10:00larrytag:knowing.net,2003-06-22:/posts/2003/06/modular-self-configuring-robots/<blockquote>
<p>PARC researcher Mark Yim builds amazing modular robots that can self-reconfigure from a snake to a loop to a spider without stopping. Check out the videos--very <em>Transformers</em>-esque! For those in the San Francisco Bay Area, Yim is speaking on Monday in a <a href="https://www.intel.com/content/www/us/en/research/overview.html" title="http://www.intel-research.net/berkeley/Seminars.asp">public seminar</a> at the Intel Research Berkeley …</p></blockquote><blockquote>
<p>PARC researcher Mark Yim builds amazing modular robots that can self-reconfigure from a snake to a loop to a spider without stopping. Check out the videos--very <em>Transformers</em>-esque! For those in the San Francisco Bay Area, Yim is speaking on Monday in a <a href="https://www.intel.com/content/www/us/en/research/overview.html" title="http://www.intel-research.net/berkeley/Seminars.asp">public seminar</a> at the Intel Research Berkeley lablet! Link <a href="https://www.quicktopic.com/22/H/ZzVD48WYbyf" title="http://www.quicktopic.com/22/H/ZzVD48WYbyf">Discuss</a> (<em>Thanks, <a href="http://www.paulos.net/" title="http://www.paulos.net/">Eric</a></em>!) [<em>via</em>]{.095174318-22062003} [Boing Boing Blog]</p>
</blockquote>
<p>[Insanely cool. Be sure to check out the fence-climbing video and the one where it transforms from a snake to a loop to a spider.]{.095174318-22062003}</p>Whence keycodes?2003-06-20T07:33:00-10:002003-06-20T07:33:00-10:00larrytag:knowing.net,2003-06-20:/posts/2003/06/whence-keycodes/<p>[How do people make license-restricted software? You know, 30-day trial edition, but when you enter your name, company, and keycode, the software says "Yeah, that's fine." Do people roll their own (and, if so, are there "best practices"), or is this a commercial market in which there are a few …</p><p>[How do people make license-restricted software? You know, 30-day trial edition, but when you enter your name, company, and keycode, the software says "Yeah, that's fine." Do people roll their own (and, if so, are there "best practices"), or is this a commercial market in which there are a few players (a la installers)?]{.322162800-21062003}</p>Tablet PC -- lovable, but let's be real2003-06-19T22:48:00-10:002003-06-19T22:48:00-10:00larrytag:knowing.net,2003-06-19:/posts/2003/06/tablet-pc-lovable-but-lets-be-real/<p>[I <em>love</em> the Tablet PC as a platform. But in light of <a href="https://www.tuxreports.com/whatisnew/">some</a> recent <a href="https://www.cnet.com/reviews/">postings</a> about it, I have to say one thing: application software that takes advantage of the pen is still <em>extremely</em> rare. There's a current ad from Microsoft showing a literary agent marking up a book proposal …</p><p>[I <em>love</em> the Tablet PC as a platform. But in light of <a href="https://www.tuxreports.com/whatisnew/">some</a> recent <a href="https://www.cnet.com/reviews/">postings</a> about it, I have to say one thing: application software that takes advantage of the pen is still <em>extremely</em> rare. There's a current ad from Microsoft showing a literary agent marking up a book proposal on the Tablet PC (actually, it's the book proposal for <a href="https://www.amazon.com/exec/obidos/tg/detail/-/0786886323/qid%3d1056123205/sr%3d8-1/ref%3dsr_8_1/104-7127603-4783929%3fv%3dglance%26s%3dbooks%26n%3d507846">Carter Beats The Devil</a>, which was already an established hit before the Tablet PC saw the light of day, but maybe hot-shot literary agents are on early access). The ad shows a ho-hum book proposal "beefed up" with standard proof-reading marks, and the implication is clearly that one is <em>editing</em> the original text. The ability to use proofer's marks on a text document is a <em>clear</em> killer app for millions of customers, as is the ability to handwrite long pieces of work. <strong>You can't edit text with inked proofmarks on a Tablet PC with existing software. You can't write continuous texts on a Tablet PC with existing software.</strong> These limitations are <em>strictly</em> application limitations and I fully expect both abilities to be available within a year or two, but new software will need to be written to exploit it.]{.830492915-20062003}</p>The Return of Push2003-06-19T22:17:00-10:002003-06-19T22:17:00-10:00larrytag:knowing.net,2003-06-19:/posts/2003/06/the-return-of-push/<p><a href="http://www.tbray.org/ongoing/When/200x/2003/06/19/RSS4All" title="http://www.tbray.org/ongoing/When/200x/2003/06/19/RSS4All">Tim Bray</a>: <em>Of course, if we need to do some extension work to fit this out for financial applications, that can be done, right?</em> [<em>via</em>]{.302140415-20062003} [<a href="http://www.intertwingly.net/blog/1479.html">Sam Ruby</a>]</p>
<p>[RSS was, I think, the very first XML format I ever saw (I may be repressing <a href="http://www.web3d.org/x3d/what-x3d">VRML</a>, but that's not surprising). And …</p><p><a href="http://www.tbray.org/ongoing/When/200x/2003/06/19/RSS4All" title="http://www.tbray.org/ongoing/When/200x/2003/06/19/RSS4All">Tim Bray</a>: <em>Of course, if we need to do some extension work to fit this out for financial applications, that can be done, right?</em> [<em>via</em>]{.302140415-20062003} [<a href="http://www.intertwingly.net/blog/1479.html">Sam Ruby</a>]</p>
<p>[RSS was, I think, the very first XML format I ever saw (I may be repressing <a href="http://www.web3d.org/x3d/what-x3d">VRML</a>, but that's not surprising). And remember Active Desktop in Windows 98 (?). I guess if you're Microsoft, it isn't such a bitter pill to be ahead of the game, but wouldn't you hate to be a former <a href="https://www.bloomberg.com/tosv2.html?vid=&uuid=cf98bcc0-5075-11e9-98e6-756f9e532e2f&url=L2J1c2luZXNzd2Vlay8xOTk5Lzk5XzE3L2IzNjI2MTY3Lmh0bQ==">PointCast</a> employee? Here's a relevant <a href="https://craphound.com/canterreboot.txt">link</a> to Marc Canter's speech at Reboot, in which he says "Things need to be small and modular: programmers working nights, little companies. The VCs pushed us to head for IPO, so entire companies were based on one feature. " (link via Boing Boing) ]{.302140415-20062003}</p>Summer reading2003-06-19T22:00:00-10:002003-06-19T22:00:00-10:00larrytag:knowing.net,2003-06-19:/posts/2003/06/summer-reading/<p>[Praise for books by Fritz Onion, Shawn Wildermuth, Don Box and Chris Sells, Jeffrey Richter, and others in my latest .NET and Windows Watch column in SD Times.]{.886495814-20062003}</p>Welcome Eric Gunnerson!2003-06-19T21:54:00-10:002003-06-19T21:54:00-10:00larrytag:knowing.net,2003-06-19:/posts/2003/06/welcome-eric-gunnerson/<p>Eric finally hits the world of blogs <em>via</em> [Sam Gentile's Blog]</p>
<div>
</div>
<p>Eric Gunnerson is the most publicly vocal member of Microsoft's C# team and his blog is likely (I hope) to be a primary source for early word on Microsoft's take on C# directions, rumors, etc. If you're interested in …</p><p>Eric finally hits the world of blogs <em>via</em> [Sam Gentile's Blog]</p>
<div>
</div>
<p>Eric Gunnerson is the most publicly vocal member of Microsoft's C# team and his blog is likely (I hope) to be a primary source for early word on Microsoft's take on C# directions, rumors, etc. If you're interested in the future of the C# language, this should definitely be on your blogroll.</p>
<p>When I tried to RSS subscribe, I got an error message, but replacing USERNAME with ERICGU in the URL of the RSS feed fixed it up. (Here's the correct URL for the RSS feed.)</p>Now *that's* clever.2003-06-19T01:44:00-10:002003-06-19T01:44:00-10:00larrytag:knowing.net,2003-06-19:/posts/2003/06/now-thats-clever/<p>http://www.twelve71.com/archives/000125.html A Web Server in PostScript !!!!!... [<em>via</em>]{.766544218-19062003} [TWELVE|71 : dull. dull. dull.]</p>
<p>[The mind boggles. The mind, em-boggled, tries to conceive of a way to top the stunt. Even a Web Server written in Visual Basic for Applications would not be as wonderfully …</p><p>http://www.twelve71.com/archives/000125.html A Web Server in PostScript !!!!!... [<em>via</em>]{.766544218-19062003} [TWELVE|71 : dull. dull. dull.]</p>
<p>[The mind boggles. The mind, em-boggled, tries to conceive of a way to top the stunt. Even a Web Server written in Visual Basic for Applications would not be as wonderfully absurd. Perhaps a Web Server embedded in a refrigerator magnet?]{.766544218-19062003}</p>Debating with Knives2003-06-18T06:59:00-10:002003-06-18T06:59:00-10:00larrytag:knowing.net,2003-06-18:/posts/2003/06/debating-with-knives/<blockquote>
<p>A couple of years ago at OOPSLA I saw a wonderful panel format. On stage there was a table, short side facing the audience. People sitting on one side of the table had to support the motion, those on the other had to oppose it. At any time, anyone could …</p></blockquote><blockquote>
<p>A couple of years ago at OOPSLA I saw a wonderful panel format. On stage there was a table, short side facing the audience. People sitting on one side of the table had to support the motion, those on the other had to oppose it. At any time, anyone could stand up, walk to the other side of the table, and tap someone on the shoulder. Those two people then swapped places: the one arguing <em>for</em> then had to argue <em>against</em>. After a while, they let members of the audience come up and tap on shoulders too.</p>
<p>At last night’s Pragmatic Practitioner dinner here in Dallas we tried the same thing. After the meal was cleared away, we used our left-over knives to indicate the position we were taking: a knife lying in the customary end-on position meant you were supporting the statement "statically typed languages are better than dynamically types ones." A knife lying crossways meant you were opposing the motion. We started with knives alternating around the table, and tried to maintain a kind of parity: you could only swap your knife’s position if someone else did. Every now and then we had a group swap, where every knife switched.</p>
<p>The result was a fun and not too serious debate. It was good to be able to argue both sides of a position; very few things are black and white, and it’s nice to be able to acknowledge opposing points of view.</p>
<p>Now I’m wondering if the same technique could work in a business setting. Could it take the heat out of the discussions we have about architectures, design, timescales, and so on?</p>
<p>[<a href="https://pragdave.me/">PragDave</a>]</p>
</blockquote>Even Though Radio Userland My Blogging Software Has A Builtin Aggregator I Recen2003-06-17T08:20:00-10:002003-06-17T08:20:00-10:00larrytag:knowing.net,2003-06-17:/posts/2003/06/even-though-radio-userland-my-blogging-software-has-a-builtin-aggregator-i-recen/<p>Even though <a href="http://radio.userland.com/">Radio Userland</a>, my blogging software, has a built-in aggregator, I recently paid to register my copy of NewsGator. <em>Even though</em> NewsGator goes out of its way to make it easy to export subscriptions to be reintegrated with the Userland aggregator. My ear infection is too bothersome for me …</p><p>Even though <a href="http://radio.userland.com/">Radio Userland</a>, my blogging software, has a built-in aggregator, I recently paid to register my copy of NewsGator. <em>Even though</em> NewsGator goes out of its way to make it easy to export subscriptions to be reintegrated with the Userland aggregator. My ear infection is too bothersome for me to analyze what this could mean in terms of ease-of-use, "Outlook as the Operating System," or a growing general annoyance at Radio Userland. But, for the moment, I have placed NewsGator in my Tool Roll</p>The dullest blog in the world2003-06-16T03:52:00-10:002003-06-16T03:52:00-10:00larrytag:knowing.net,2003-06-16:/posts/2003/06/the-dullest-blog-in-the-world/<p>[The dullest blog in the world]{.557295220-16062003}</p>If you want traffic, specialize your content2003-06-15T23:46:00-10:002003-06-15T23:46:00-10:00larrytag:knowing.net,2003-06-15:/posts/2003/06/if-you-want-traffic-specialize-your-content/<p>[Jakob Nielsen's latest <a href="https://www.nngroup.com/articles/diversity-is-power-for-specialized-sites/">AlertBox</a> makes a point about Web publishing that may not be obvious: your influence has very little to do with your ranking in the overall media universe, your influence is based on how coherent your readership is within the niche you target. <a href="http://www.gamasutra.com/"><strong>Game Developer</strong></a>, a magazine I …</p><p>[Jakob Nielsen's latest <a href="https://www.nngroup.com/articles/diversity-is-power-for-specialized-sites/">AlertBox</a> makes a point about Web publishing that may not be obvious: your influence has very little to do with your ranking in the overall media universe, your influence is based on how coherent your readership is within the niche you target. <a href="http://www.gamasutra.com/"><strong>Game Developer</strong></a>, a magazine I founded almost 10 years ago, has a small circulation by trade industry standards (and a <em>trivial</em> circulation compared to mass-market magazines), but that circulation includes programmers at every game software company in the world. ]{.697240316-16062003}</p>
<p>[The same rules apply to Web sites and blogs. It should not be your goal to be parodied, it should be your goal to reach people whose readership means something to you. In my case, that means readers who know that the <em>gaps</em> between the possibilities, perceptions, and common practices of software development will determine the success or failure of a programming technology. My goal isn't to improve the state-of-the-art, it's to improve the state-of-the-practice. I can't post like Chris Brumme on CLR internals , but I <em>know</em> from the people that I talk to that <em>many</em> programmers have not fully internalized the concepts of object-oriented programming, much less the Common Type System. My goal is to be a link (hopefully, with some influence in <em>both</em> directions) between people who are making .NET <em>the</em> platform for enhancing productivity for software developers and the people seeking those gains, while working full-time just trying to do their job.]{.697240316-16062003}</p>
<p>[So, if you think some of my posts are too obvious and some my posts are too theoretical, you're my audience! ]{.697240316-16062003}</p>Programmer salary surveys conflict, Gov. says long-term bright, applicants disagree2003-06-15T22:59:00-10:002003-06-15T22:59:00-10:00larrytag:knowing.net,2003-06-15:/posts/2003/06/programmer-salary-surveys-conflict-gov-says-long-term-bright-applicants-disagree/<p>InfoWorld is reporting a second year of wages essentially flat, with "Developer"s making a median of \<span class="math">\(84,146. Software Development reports a huge post-2000 slowdown, with current compensation of \\)</span>78,000 compared to 2000's \$95K. (SD's survey goes to a much larger sample size than InfoWorld's, but I'm not …</p><p>InfoWorld is reporting a second year of wages essentially flat, with "Developer"s making a median of \<span class="math">\(84,146. Software Development reports a huge post-2000 slowdown, with current compensation of \\)</span>78,000 compared to 2000's \$95K. (SD's survey goes to a much larger sample size than InfoWorld's, but I'm not prepared to criticize anyone's methodology.)</p>
<p>Meanwhile, the United States Bureau of Labor Statistics says that being a computer programmer is going to be the fastest growing profession of the decade. According to an article at http://www.bls.gov/oco/ocos267.htm, there were about 697,000 "computer software engineer" jobs in 2000 (note that this probably represented the peak year of dot-com employment), of which 380,000 were application programmers and 317,000 systems programmers. A total of 49,000 were self-employed. Median salary was \$67,670.</p>
<p>On the Dot-NET jobs list (<a href="https://www.buydomains.com/lander/develop.com?domain=develop.com&utm_source=develop.com&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect" title="http://discuss.develop.com/">http://discuss.develop.com</a>) there have been some ridiculous postings lately, notably one for a Manhattan-based Tech Lead with salary "to \$50K." That triggered a discussion as to whether salaries are just soft or whether there's a genuine salary collapse. Everyone agreed that off-shore development has rapidly become viable in the minds of technical managers and is definitely beginning to have an effect on the domestic market.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Do IDEs spoil beginners?2003-06-15T04:08:00-10:002003-06-15T04:08:00-10:00larrytag:knowing.net,2003-06-15:/posts/2003/06/do-ides-spoil-beginners/<p>["]{.698445520-15062003}IDEs are very powerful but..... (From Rahul Chaudhary's Weblog) [" <em>via</em> ]{.698445520-15062003}[<a href="https://www.artima.com/weblogs/viewpost.jsp?thread=5256">Artima Weblogs</a>]</p>
<p>[One of the more controversial things in The Book Formerly Known As Thinking In C# is my "strong recommendation" not to use an IDE (specifically, Visual Studio) until at least one has reached the chapters on …</p><p>["]{.698445520-15062003}IDEs are very powerful but..... (From Rahul Chaudhary's Weblog) [" <em>via</em> ]{.698445520-15062003}[<a href="https://www.artima.com/weblogs/viewpost.jsp?thread=5256">Artima Weblogs</a>]</p>
<p>[One of the more controversial things in The Book Formerly Known As Thinking In C# is my "strong recommendation" not to use an IDE (specifically, Visual Studio) until at least one has reached the chapters on GUI programming, which are 3/4 of the way through the book. Although there's <em>a lot</em> to be said for bare-bones code, the downside is that the sample programs are generally simple console programs that <em>seem</em> far removed from "real programs." ]{.698445520-15062003}</p>
<p>[I have been considering ways to bridge that gap: I have thought of building training material based on Terrarium but keep returning to an ever more radical thought: Wouldn't it be interesting to teach programming manipulating the world's most commonly used programs?]{.698445520-15062003}</p>Java Is a Language for the Masses2003-06-15T03:53:00-10:002003-06-15T03:53:00-10:00larrytag:knowing.net,2003-06-15:/posts/2003/06/java-is-a-language-for-the-masses/<p>["]{.863094020-15062003}Dumbing down the language by not providing more powerfulexpressions is a way of promoting to a wider audience. However, is it the only way of[ ]{.863094020-15062003}supporting[ ]{.863094020-15062003}communites?["]{.863094020-15062003} (From Carlos Perez's Weblog) [<em>via</em> ]{.863094020-15062003}[<a href="https://www.artima.com/weblogs/viewpost.jsp?thread=5246">Artima Weblogs</a>]</p>
<p>[Carlos is talking about Java, and a comment by Gilad Bracha …</p><p>["]{.863094020-15062003}Dumbing down the language by not providing more powerfulexpressions is a way of promoting to a wider audience. However, is it the only way of[ ]{.863094020-15062003}supporting[ ]{.863094020-15062003}communites?["]{.863094020-15062003} (From Carlos Perez's Weblog) [<em>via</em> ]{.863094020-15062003}[<a href="https://www.artima.com/weblogs/viewpost.jsp?thread=5246">Artima Weblogs</a>]</p>
<p>[Carlos is talking about Java, and a comment by Gilad Bracha that "[In designing a language, one] one can contrast the Scheme-like philosophy of using a small number of very general constructs, with the more mainstream approach of having a great many highly specialized constructs, as in C or Modula style languages." And the contrast is made very well in Paul Graham's <a href="http://www.paulgraham.com/hundred.html">Hundred-Year Language</a> essay. ]{.863094020-15062003}[There's a real language-design buzz going on in the industry right now; my brain melted last week during a 3-hour conversation with Sergei Dmitriev of JetBrains (makers of <a href="https://www.jetbrains.com/">IDEA</a>). If I were smarter, I would have learned something about "universal grammars for describing domain languages." ]{.863094020-15062003}</p>Sketch an interface on the Tablet, get WinForms2003-06-15T03:01:00-10:002003-06-15T03:01:00-10:00larrytag:knowing.net,2003-06-15:/posts/2003/06/sketch-an-interface-on-the-tablet-get-winforms/<p>[Check it out]{.491135919-15062003}</p>Getting ASPNET To Work In Radio Userlandgenerated Pages A Hrefhttpradiouserlandcomstorie2003-06-10T04:30:00-10:002003-06-10T04:30:00-10:00larrytag:knowing.net,2003-06-10:/posts/2003/06/getting-aspnet-to-work-in-radio-userlandgenerated-pages-a-hrefhttpradiouserlandcomstorie/<p><strong>Getting ASP.NET to work in Radio Userland-generated pages.</strong></p>
<p><a href="http://radio.userland.com/stories/storyReader%248979">http://radio.userland.com/stories/storyReader\$8979</a> tells you how to change the file extension to .aspx</p>
<p>The problem is that Radio Userland generates pages on the client-side, which are then FTP'ed up to the site, but you can't configure Radio …</p><p><strong>Getting ASP.NET to work in Radio Userland-generated pages.</strong></p>
<p><a href="http://radio.userland.com/stories/storyReader%248979">http://radio.userland.com/stories/storyReader\$8979</a> tells you how to change the file extension to .aspx</p>
<p>The problem is that Radio Userland generates pages on the client-side, which are then FTP'ed up to the site, but you can't configure Radio Userland's file-naming conventions, so the site goes up as index.html, etc. So if you want to, say, integrate an ASP.NET Trackback mechanism, it's somewhat challenging, since IIS doesn't process files with .html extensions through ASP.NET. <strong>However</strong>, if you create a file called, say, index.aspx whose content is \<!-- #include "index.html" -->, your .html file gets processed via the handler designated for the .aspx file extension. That's halfway there.</p>
<p>Unfortunately, Radio Userland uses ASP-like \<% tag %> tags, and so you can't just write an ASP.NET page and make it your Radio Userland template (as Radio Userland will attempt to interpret the ASP.NET tags, get confused, and generate static error messages where you desire server-side ASP.NET tags). <strong>However</strong>, you can use SSI's once again: by placing your ASP.NET code in separate server-side files and including code along the lines of \<!-- #include file="myaspcomponent.ascx" --> in your Radio Userland template....</p>
<p>Well, you can do stuff like add 2 and 2 together. After that, it's a small step to a Trackback mechanism. Well, maybe not a <strong>small</strong> step, but the route seems clear.</p>He Asked Me What I Had Learned In A Fivemonth Initial Experience With Agile Programming Wow So Many Things I2003-06-10T01:47:00-10:002003-06-10T01:47:00-10:00larrytag:knowing.net,2003-06-10:/posts/2003/06/he-asked-me-what-i-had-learned-in-a-fivemonth-initial-experience-with-agile-programming-wow-so-many-things-i/<p>"He asked me what I had learned <em>[in a five-month initial experience with Agile Programming]</em>. Wow, so many things. I learned...</p>
<ul>
<li>that without a full-time Coach experienced in ATG, TDD was destined for failure.</li>
<li>that architects need to be in the trenches on Agile projects.</li>
<li>that pair programming and open …</li></ul><p>"He asked me what I had learned <em>[in a five-month initial experience with Agile Programming]</em>. Wow, so many things. I learned...</p>
<ul>
<li>that without a full-time Coach experienced in ATG, TDD was destined for failure.</li>
<li>that architects need to be in the trenches on Agile projects.</li>
<li>that pair programming and open workspaces are extremely powerful.</li>
<li>that I can't be a full-time developer and an effective XP Coach at the same time.</li>
<li>that we need to get a better handle on testing web applications in an early and automated way.</li>
<li>that continual customer involvement can maximize the amount of work not done. "</li>
</ul>
<p>Dave Hoover has kept a journal of his experiences introducing agile practices such as pair programming and test-driven design into his workgroup. (<em>via</em> MemoRanda)</p>Radio ID tags get Microsoft backing2003-06-10T00:55:00-10:002003-06-10T00:55:00-10:00larrytag:knowing.net,2003-06-10:/posts/2003/06/radio-id-tags-get-microsoft-backing/<p>["]{.192425217-10062003}The software titan says it is joining a venture to help develop standards for radio frequency tags intended for use in tracking retail goods.["]{.192425217-10062003}[ <em>via</em> ]{.192425217-10062003}[<a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0107540806795014976449006846548222245369%26anid%3D0107540806795014976449006846548222245369&u=0107540806795014976449006846548222245369&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553647527696&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0107540806795014976449006846548222245369%26anid%3D0107540806795014976449006846548222245369&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">CNET News.com</a>]</p>
<p>[Point-of-sale stuff is only one small application of RFID or, for that matter, any technology having to do with …</p><p>["]{.192425217-10062003}The software titan says it is joining a venture to help develop standards for radio frequency tags intended for use in tracking retail goods.["]{.192425217-10062003}[ <em>via</em> ]{.192425217-10062003}[<a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0107540806795014976449006846548222245369%26anid%3D0107540806795014976449006846548222245369&u=0107540806795014976449006846548222245369&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553647527696&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A0107540806795014976449006846548222245369%26anid%3D0107540806795014976449006846548222245369&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">CNET News.com</a>]</p>
<p>[Point-of-sale stuff is only one small application of RFID or, for that matter, any technology having to do with location. I recently had a quiet talk with a company that had a <em>brilliant</em> idea for which RFID was the key enabling technology. We have mobile processing power, wireless connectivity is well established on the hype curve, but few people are yet talking about location, which is the crucial third leg for the coming wave of mobility software. ]{.192425217-10062003}</p>Polyblogging Doesnt Scale At All Last Week I Was Heavily Involved With The Wedding Of Two Friends And So2003-06-10T00:33:00-10:002003-06-10T00:33:00-10:00larrytag:knowing.net,2003-06-10:/posts/2003/06/polyblogging-doesnt-scale-at-all-last-week-i-was-heavily-involved-with-the-wedding-of-two-friends-and-so/<p><strong>Polyblogging doesn't scale at all</strong>. Last week, I was heavily involved with the wedding of two friends and so passed on attending TechEd (and <a href="https://sdtimes.com/">SD Times</a> balked at paying my freight anyway). But, with a Microsoft & .NET Watch due next week (my latest, on Bayesian spam filters, is up), I …</p><p><strong>Polyblogging doesn't scale at all</strong>. Last week, I was heavily involved with the wedding of two friends and so passed on attending TechEd (and <a href="https://sdtimes.com/">SD Times</a> balked at paying my freight anyway). But, with a Microsoft & .NET Watch due next week (my latest, on Bayesian spam filters, is up), I thought I would follow the action via blogs, which I expected to provide both a spicier and more discriminating sense of the action than wading through press releases. After all, the #1 thing I do at conferences is ask people "What's the best thing you've seen?"</p>
<p>There was even an entire domain (<a href="https://techedbloggers.net/">www.TechEdBloggers.net</a>) ~~aggregating~~ providing a unified feed. After an earnest attempt to snipe the interesting headlines, I ended up deleting the whole thing and turning to the more traditional sources for my story. Blogs are enjoyable because they speak with individual voices but there's a tremendous difference between choosing to listen to ten individual voices in ten feeds and trying to parse out individual voices in a single feed, at least when that feed grows beyond a very small number. Like <a href="https://blogcritics.org/">www.blogcritics.org</a>, the degeneration is caused by the very factors that make individual blogs enjoyable: the telling off-topic post, the interpretation clearly based on unspoken biases, the comprehensively detailed analysis, the terse recommendation. ></p>
<p>Individuality is the key to <strong>both sides</strong> of blogging, writing <strong>and reading</strong>. Blogs are excellent sources of technical news, a selection of, say, 50-100 feeds can give you as much excellent information as you can handle, but these selections <strong>must</strong> be your individual choice and the individual posts <strong>must</strong> be in individual feeds.</p>Attempting To Restore Files Now Please Continue Ignoring The CSS Madness Okay It Looks Like I Managed To Move St2003-06-09T05:54:00-10:002003-06-09T05:54:00-10:00larrytag:knowing.net,2003-06-09:/posts/2003/06/attempting-to-restore-files-now-please-continue-ignoring-the-css-madness-okay-it-looks-like-i-managed-to-move-st/<p>~~Attempting to restore files now... Please continue ignoring the CSS madness.~~ Okay, it looks like I managed to move stuff over from one machine to the Tablet. Design sense aside (I know that it's pretty ugly), is my layout (three columns plus header and footer) on the homepage rendering properly …</p><p>~~Attempting to restore files now... Please continue ignoring the CSS madness.~~ Okay, it looks like I managed to move stuff over from one machine to the Tablet. Design sense aside (I know that it's pretty ugly), is my layout (three columns plus header and footer) on the homepage rendering properly? It's survivable in IE 6.0.</p>Back on the air2003-06-08T22:58:00-10:002003-06-08T22:58:00-10:00larrytag:knowing.net,2003-06-08:/posts/2003/06/back-on-the-air/<p>My 18-month old Siemens Speedstream SS2623 WAP stopped working over the course of a few days. I was preparing to officiate at some friends' wedding, and actually <em>delayed</em> doing something techie for doing something social -- who says old dogs can't learn new tricks? Anyway, the wedding went great: I didn't …</p><p>My 18-month old Siemens Speedstream SS2623 WAP stopped working over the course of a few days. I was preparing to officiate at some friends' wedding, and actually <em>delayed</em> doing something techie for doing something social -- who says old dogs can't learn new tricks? Anyway, the wedding went great: I didn't forget my lines, I danced hard enough to re-aggravate my Achilles' tear, and I only lapsed into a C++ discussion for a few short seconds, with Craig (Oh no, I can't remember his last name), who surprised me by telling me that he'd been assimilated by Microsoft and was working on the very SmartPhone emulator that I had so much fun programming against last month.</p>
<p>In the time I owned it, the Speedstream had been significant trouble, requiring several tricky firmware updates, resets weekly if not daily, and I never got WEP to work. I replaced it with a Linksys BEFW11S4, which my machines auto-connected to before I was finished reading the "quickstart" guide. When you read the "thumbs-up, thumbs-down" reviews on ePinions and shopper.cnet.com, you'll see that WAPs are generally given "thumbs-up" when they function perfectly out of the box, which is valid in some ways, but on the other, is hardly the same as the critical factor, which is what happens when the hardware goes flaky. So I will hold off on praising Linksys. But I will <em>not</em> buy Speedstream again. YMMV.</p>Breaking VMs and smart cards by physical heating.2003-05-29T03:26:00-10:002003-05-29T03:26:00-10:00larrytag:knowing.net,2003-05-29:/posts/2003/05/breaking-vms-and-smart-cards-by-physical-heating/<p>By physically heating a chip and causing random bit-flipping, a Princeton University student managed to get his attack code to run 70% of the time. Apparently, this would be a legitimate assault against smartcards and other "untamperable" computing apparati.</p>More on the object-distributed services impedance mismatch2003-05-29T00:02:00-10:002003-05-29T00:02:00-10:00larrytag:knowing.net,2003-05-29:/posts/2003/05/more-on-the-object-distributed-services-impedance-mismatch/<p>In response to this post, Matthew Adams wrote:</p>
<blockquote>
<p>I think we should look at the problem the other way around. OO was a great paradigm for in-process, in-memory software development, but it really doesn't map well to an enterprise (viz orchestrated, out-of-process, distributed) application....I think we should be looking …</p></blockquote><p>In response to this post, Matthew Adams wrote:</p>
<blockquote>
<p>I think we should look at the problem the other way around. OO was a great paradigm for in-process, in-memory software development, but it really doesn't map well to an enterprise (viz orchestrated, out-of-process, distributed) application....I think we should be looking at a transition to new implementation tools. And I think that, on the whole, that's exactly what we *are* doing. Especially with things like the WS- standards, the appearance of loosely-typed languages again, etc.</p>
</blockquote>
<p>Half-full or half-empty, Matthew agrees that there's a tension between OOP (absolutely the dominant teaching paradigm) and enterprise-worthy design (absolutely the market direction). This is a big deal: software development <em>does</em> shift in the face of such tensions (OOP, strong typing, structured programming: all gained <em>industry</em> dominance not because of theory, but because of just such tensions between need and productivity). I can't see how dynamic / loosely-typed languages are a step forward, as I think large dynamically typed systems are <em>very</em> hard to understand for anyone but the original writer (although second-generation test-driven frameworks like Fit would certanily help).</p>
<p>For those of us who are interested in programming languages as such, it's a very interesting time. My gut tells me that something else is going to emerge, something more declarative, with implicit parallelism, and multi-representational (by which, I mean that <em>source</em> <em>code</em> can be represented in both visual and textual means. [Does this contradict my previous statement that <a href="https://martinfowler.com/bliki/UmlAsProgrammingLanguage.html">UML As Programming Language</a> is a bad idea? Very well then, I contradict myself -- I contain multitudes.]).</p>
<p>\<</p>
<p>p dir=ltr> For awhile, I thought <a href="http://www.eclipse.org/aspectj/">Aspect-Oriented Programming</a> was going to be a big deal, but it doesn't seem to be taking hold. Then there's <a href="https://www.intentsoft.com/">Intentional Programming</a> from Charles Simonyi and Gregor Kiczales (did anyone blog the demo at Software Development?). Personally, I think there's huge potential in dataflow, but my theory is that programming paradigm shifts are contingency-driven, not theory-driven, so it's a matter of something "catching fire."</p>RegEx in XSLT2003-05-27T23:27:00-10:002003-05-27T23:27:00-10:00larrytag:knowing.net,2003-05-27:/posts/2003/05/regex-in-xslt/<p>[Dare Obasanjo's article on MSDN shows you how to add Regular Expressions to your XSLT transforms. [Via <a href="https://www.afternic.com/forsale/dotnetweblogs.com?utm_campaign=TDFS_Site&traffic_id=gddy&traffic_type=gddy">Sam</a>] Just in case you want to increase your job security by writing code that causes people's heads to explode just by looking at it. ]{.141512216-28052003}</p>Insanely brilliant idea of the day2003-05-27T23:08:00-10:002003-05-27T23:08:00-10:00larrytag:knowing.net,2003-05-27:/posts/2003/05/insanely-brilliant-idea-of-the-day/<p>John Beimler writes "I'd like to wire in a Bayesian classifier too, and</p>
<p>see if that helps me get the items I like to the top [of my news</p>
<p>aggregator]." http://john.beimler.org/serval_aggregator_first_post.html</p>
<p>Yes. That's a good idea.</p>UmlMode2003-05-27T23:04:00-10:002003-05-27T23:04:00-10:00larrytag:knowing.net,2003-05-27:/posts/2003/05/umlmode/<p>"...I came up with three primary classifications for thinking about</p>
<p>the UML: UmlAsSketch \<http://martinfowler.com/bliki/UmlAsSketch.html> ,</p>
<p>UmlAsBlueprint \<http://martinfowler.com/bliki/UmlAsBlueprint.html> , and</p>
<p>UmlAsProgrammingLanguage</p>
<p>\<http://martinfowler.com/bliki/UmlAsProgrammingLanguage.html> ....one of the problems that I, and some others, are having with UML 2 is because …</p><p>"...I came up with three primary classifications for thinking about</p>
<p>the UML: UmlAsSketch \<http://martinfowler.com/bliki/UmlAsSketch.html> ,</p>
<p>UmlAsBlueprint \<http://martinfowler.com/bliki/UmlAsBlueprint.html> , and</p>
<p>UmlAsProgrammingLanguage</p>
<p>\<http://martinfowler.com/bliki/UmlAsProgrammingLanguage.html> ....one of the problems that I, and some others, are having with UML 2 is because there are many changes that have been introduced to increase its precision - changes that are primarily to make it more</p>
<p>suitable for UmlAsBlueprint and UmlAsProgrammingLanguage. But</p>
<p>these changes increase the bulk of the UML - and thus make it harder for</p>
<p>those of who prefer UmlAsSketch...." via [Martin Fowler's Bliki</p>
<p>\<http://martinfowler.com/bliki/UmlMode.html> ]</p>
<p>Martin's right, but he's being too polite. The only people who want UML to become a programming language are in the trade. In the real world, the only way that UML is accepted is as a sketch. Martin probably knows this better than anyone, as his book UML Distilled (http://www.amazon.com/exec/obidos/ASIN/0321193687/thinkinginnet-20) has deservedly sold roughly a bazillion more copies than the UML Reference Manual (http://www.amazon.com/exec/obidos/ASIN/020130998X/thinkinginnet-20)</p>Computer Software Engineers2003-05-26T01:24:00-10:002003-05-26T01:24:00-10:00larrytag:knowing.net,2003-05-26:/posts/2003/05/computer-software-engineers/<blockquote>
<p>Bureau of Labor Statistics: <em>Computer software engineers are projected to be the fastest growing occupation over the 2000-10 period.</em><br>
[<a href="http://www.intertwingly.net/blog/1435.html">Sam Ruby</a>]</p>
</blockquote>Platform or Plumbing2003-05-26T01:20:00-10:002003-05-26T01:20:00-10:00larrytag:knowing.net,2003-05-26:/posts/2003/05/platform-or-plumbing/<p>["]{.827355417-26052003}Here's a question I pose to blogspace: Is the .NET Framework a platform or just better plumbing for the underlying platform?["]{.827355417-26052003}[ via ]{.827355417-26052003}[<a href="http://devhawk.net/">Harry Pierson's DevHawk Weblog</a>]</p>
<p>[Although I think it makes sense to refer to it as "a platform" in most situations, in the context of this …</p><p>["]{.827355417-26052003}Here's a question I pose to blogspace: Is the .NET Framework a platform or just better plumbing for the underlying platform?["]{.827355417-26052003}[ via ]{.827355417-26052003}[<a href="http://devhawk.net/">Harry Pierson's DevHawk Weblog</a>]</p>
<p>[Although I think it makes sense to refer to it as "a platform" in most situations, in the context of this question, I definitely think it's "just better plumbing." One of the major things that strikes one moving to .NET from Java is how ridiculous it seems (in retrospect) to discourage access to the underlying platform, where a great deal of interesting innovation happens. It's very, very easy to be dramatically wrong about the abstractions and evolution of a technology / algorithm in the early days: if, at the platform level, you sanctify an abstraction or specify a path for evolution too early, you may very well regret it someday. If you fret about never making such mistakes, you end up with bureaucratic nightmares like the JCP, where the slightest interesting innovation is stuck in committee for years. ]{.827355417-26052003}</p>More on XML Entities2003-05-26T00:48:00-10:002003-05-26T00:48:00-10:00larrytag:knowing.net,2003-05-26:/posts/2003/05/more-on-xml-entities/<p>["....]{.951453017-26052003}I don't want behavior in my entity objects - I want to put that into stateless control objects.[..."]{.951453017-26052003} [via]{.951453017-26052003}<br>
[<a href="http://devhawk.net/">Harry Pierson's DevHawk Weblog</a>]</p>
<p>[After double-checking to make sure Harry's isn't a J2EE blog, I've got to ask: Is this structure (stateless session / control objects, stateful entity objects without …</p><p>["....]{.951453017-26052003}I don't want behavior in my entity objects - I want to put that into stateless control objects.[..."]{.951453017-26052003} [via]{.951453017-26052003}<br>
[<a href="http://devhawk.net/">Harry Pierson's DevHawk Weblog</a>]</p>
<p>[After double-checking to make sure Harry's isn't a J2EE blog, I've got to ask: Is this structure (stateless session / control objects, stateful entity objects without behavior) accepted by all as the universal route towards scalability? Because, if so, it points to an "object-scaling impedance mismatch" as real as the "object-relational impedance mismatch." Objects are distinguished from other constructs by having state, behavior, and identity, and the only reason for having these characteristics is because associating all three is <em>supposed</em> to make programming easier. If enterprise programming <em>requires</em> stateless control <em>things</em> and behaviorless entity <em>things</em>, then the programming language should <em>directly</em> support those things and make it difficult to violate that structure. J2EE is a step towards that, but it's layered on top of an object-oriented syntax, leading to confusion. If there <em>is</em> an "enterprise programming" paradigm, it should be refactored from OOP syntax, not simply "patched" on top. ]{.951453017-26052003}</p>Functional programming and test-driven development2003-05-25T00:26:00-10:002003-05-25T00:26:00-10:00larrytag:knowing.net,2003-05-25:/posts/2003/05/functional-programming-and-test-driven-development/<p>If you're a fan of <a href="https://www.amazon.com/exec/obidos/ASIN/0321146530/thinkinginnet-20">test-driven development</a>, you're likely to be a fan of <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fprojects%2Filx%2Ffsharp.htm">functional programming</a>. One of the mindsets of test-driven development is that if something is hard to test, it may be an indication of poor design. The natural upshot is that in a test-driven system, objects <em>tend …</em></p><p>If you're a fan of <a href="https://www.amazon.com/exec/obidos/ASIN/0321146530/thinkinginnet-20">test-driven development</a>, you're likely to be a fan of <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fprojects%2Filx%2Ffsharp.htm">functional programming</a>. One of the mindsets of test-driven development is that if something is hard to test, it may be an indication of poor design. The natural upshot is that in a test-driven system, objects <em>tend</em> to hold less state and methods <em>tend</em> to be fully described by the value of their input parameters and the value of their output.</p>
<p>Which might make F# the perfect test-case for something I've been thinking about for a long time, a test-driven language tutorial.</p>Notes On Programming Sabre In C Ja2003-05-23T05:03:00-10:002003-05-23T05:03:00-10:00larrytag:knowing.net,2003-05-23:/posts/2003/05/notes-on-programming-sabre-in-c-ja/<p>Notes on programming Sabre in C#, Java, and XML</p>Turings Singlecelled Millionsold Ancestors Are Turingcomplete Oxytricha And2003-05-22T21:55:00-10:002003-05-22T21:55:00-10:00larrytag:knowing.net,2003-05-22:/posts/2003/05/turings-singlecelled-millionsold-ancestors-are-turingcomplete-oxytricha-and/<p>Turing's single-celled millions-old ancestors are Turing-complete. Oxytricha and Stylonychia, two ciliated protozoans, are Turing-complete biocomputers that rewrite their DNA to perform calculations. They've been at it for several million years. Keen. Link <a href="https://www.quicktopic.com/boing/H/G7C2Cuiv8bB">Discuss</a> (<em>via <a href="http://www.coherenceengine.com/blog/">Coherence Engine</a></em>) <em>via</em> [<a href="https://boingboing.net/">Boing Boing Blog</a>]</p>Turnabout Is Fair Play A Hrefhttprsscomcom2100100731009183htmltypeptamppartrssamptagfeedampsubjnews2003-05-22T06:57:00-10:002003-05-22T06:57:00-10:00larrytag:knowing.net,2003-05-22:/posts/2003/05/turnabout-is-fair-play-a-hrefhttprsscomcom2100100731009183htmltypeptamppartrssamptagfeedampsubjnews/<p>Turnabout is fair play: <a href="https://com.com/results?q=rss"><em>Sun tool targets Microsoft</em></a><em>. At its JavaOne conference next month, Sun Microsystems will demonstrate a tool designed to simplify Java programming and steer users of Microsoft's .Net tools to Java. via</em> [<a href="https://www.cnet.com/news/">CNET News.com</a>]</p>even Though Hes Been Programming In A Looselytyped Environment Ruby For Quite A While Now Hes Not Found Himsel2003-05-22T06:52:00-10:002003-05-22T06:52:00-10:00larrytag:knowing.net,2003-05-22:/posts/2003/05/even-though-hes-been-programming-in-a-looselytyped-environment-ruby-for-quite-a-while-now-hes-not-found-himsel/<p><em>"....even though he's been programming in a loosely-typed environment (Ruby) for quite a while now, he's not found himself making the stupid mistakes that the strongly-typed environment is supposed to be protecting us from...."</em> <em>via</em> [The Mountain of Worthless Information]</p>
<p>The other day, while trying to enumerate the advantages of …</p><p><em>"....even though he's been programming in a loosely-typed environment (Ruby) for quite a while now, he's not found himself making the stupid mistakes that the strongly-typed environment is supposed to be protecting us from...."</em> <em>via</em> [The Mountain of Worthless Information]</p>
<p>The other day, while trying to enumerate the advantages of strong typing, it struck me that the biggest practical advantage of strong typing may be IntelliSense.</p>Glenn Vanderburg Has A Weblog Devoted2003-05-22T06:48:00-10:002003-05-22T06:48:00-10:00larrytag:knowing.net,2003-05-22:/posts/2003/05/glenn-vanderburg-has-a-weblog-devoted/<p>Glenn Vanderburg has a Weblog devoted to computer languages. Subscribed.</p>Idiot Judge2003-05-22T06:42:00-10:002003-05-22T06:42:00-10:00larrytag:knowing.net,2003-05-22:/posts/2003/05/idiot-judgenbspvia-a-hrefhttpwwwsnellspace/<p>Idiot Judge <em>via</em> [snellspace]</p>FnbspMicrosofts New Language Is CAML For NET2003-05-22T06:22:00-10:002003-05-22T06:22:00-10:00larrytag:knowing.net,2003-05-22:/posts/2003/05/fnbspmicrosofts-new-language-is-caml-for-net/<p><a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fprojects%2Filx%2Ffsharp-faq.htm">F#</a>: Microsoft's new language is CAML for .NET. CAML is a functional language, a family of languages that include Scheme, Miranda, and Haskell, and which emphasize the evaluation of expressions, rather than the execution of commands. If that seems esoteric, it's because functional programming is more of a mindset than …</p><p><a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fprojects%2Filx%2Ffsharp-faq.htm">F#</a>: Microsoft's new language is CAML for .NET. CAML is a functional language, a family of languages that include Scheme, Miranda, and Haskell, and which emphasize the evaluation of expressions, rather than the execution of commands. If that seems esoteric, it's because functional programming is more of a mindset than a technology: you can write functionally in an imperative language like C# and, for that matter, you can write imperatively in a functional language like CAML. The big thing about functional programming is that you concentrate on "the left-hand side of things" -- what is returned by a function call, rather than side-effects rising from manipulation of state on "the right hand side." If that's <em>still</em> too esoteric, try this: there are no assignments, once <em>x</em> is set to a value, it doesn't change.</p>
<p>F# doesn't (yet?) have an interactive console for defining and modifying code on the run, which strikes me as an important benefit of most traditional functional systems. (If you've used Python or Smalltalk, you know how nice an interactive console is.)</p>
<p>I'm not sure that I'd go so far as to say that there is a particular class of <em>problem</em> that functional languages absolutely solve better than imperative languages, but I think I can accurately say that functional programming and imperative programming engage the mind in different ways. To me, the biggest hope of the .NET CLR is that it will foster different programming paradigms, while providing the complete power of the API. Object-oriented imperative languages are great, but for Pete's sake, they aren't the ultimate expression of programming.</p>Ive Pretty Much Given Up On The Community Starter Kit From Aspnet Im Building A Site De2003-05-22T03:14:00-10:002003-05-22T03:14:00-10:00larrytag:knowing.net,2003-05-22:/posts/2003/05/ive-pretty-much-given-up-on-the-community-starter-kit-from-aspnet-im-building-a-site-de/<p>I've pretty much given up on the community starter kit from <a href="https://dotnet.microsoft.com/apps/aspnet">asp.net</a>. I'm building a site dedicated to software for the Tablet PC (InkPositive.com), and hoped the starter kits could jumpstart me, especially regarding discussion boards. But in addition to being buggy (the kits are still in beta …</p><p>I've pretty much given up on the community starter kit from <a href="https://dotnet.microsoft.com/apps/aspnet">asp.net</a>. I'm building a site dedicated to software for the Tablet PC (InkPositive.com), and hoped the starter kits could jumpstart me, especially regarding discussion boards. But in addition to being buggy (the kits are still in beta, and I would say they have at least 2 major revs before primetime), they are not componentized. I spent most of a day just switching from table-based to CSS-based layout (so that Tablet users can choose right- or left-handed navigation); something's wrong when display is so tied to function. But when I began work on an ink-supporting discussion board I quickly realized that it would be quicker to just start from scratch.</p>
<p>There's some lesson here about Web programming versus application programming. Maybe it ties in with the failure of XSL, too.</p>
<p>P.S. You <em>do</em> know that if you write an XSL-based Website, Google won't spider any links in the XSL stylesheet, don't you?</p>This Windows And NET Watch From SD Times Discusses Microsofts New Best2003-05-21T01:30:00-10:002003-05-21T01:30:00-10:00larrytag:knowing.net,2003-05-21:/posts/2003/05/this-windows-and-net-watch-from-sd-times-discusses-microsofts-new-best/<p>This Windows and .NET Watch from SD Times discusses Microsoft's new best practices and architecture sections on MSDN, which are chock full of valuable resources.</p>Heres A Tutorial I Wrote O2003-05-21T01:29:00-10:002003-05-21T01:29:00-10:00larrytag:knowing.net,2003-05-21:/posts/2003/05/heres-a-tutorial-i-wrote-o/<p>Here's a tutorial I wrote on using .NET's System.Configuration namespace rather than .INI files.</p>Not Since Rocky Fought Mr T Has A Sequel So Failed To Live Up To The Quality Of2003-05-19T02:03:00-10:002003-05-19T02:03:00-10:00larrytag:knowing.net,2003-05-19:/posts/2003/05/not-since-rocky-fought-mr-t-has-a-sequel-so-failed-to-live-up-to-the-quality-of/<p>Not since Rocky fought Mr. T has a sequel so failed to live up to the quality of the original. The original Matrix was dedicated to keeping the action, surprises, and humor coming, no matter how contradictory, illogical, or downright stupid. Matrix Reloaded is dedicated to the opposite task: establishing …</p><p>Not since Rocky fought Mr. T has a sequel so failed to live up to the quality of the original. The original Matrix was dedicated to keeping the action, surprises, and humor coming, no matter how contradictory, illogical, or downright stupid. Matrix Reloaded is dedicated to the opposite task: establishing that the Matrix "universe" is a complete and consistent foundation on which to build an endless franchise of movies, video games, television series, and comic books. As if that weren't enough of an anchor, the Wachowski brothers are philosophizing like stoned sophomores picking on stoned freshmen: instead of riffing on the worthy theme at hand ("What if everything you knew to be real turned out to be a lie?"), they pretend that they've got an answer, but it lies somewhere beyond pretentious follow-on questions ("What is free will?").[ ]{style="mso-spacerun: yes"}Whoa, dudes. Complete rant here.</p>I Just Got Off A Gig Helping Port ChessEverywhere To The Smartph2003-04-18T23:50:00-10:002003-04-18T23:50:00-10:00larrytag:knowing.net,2003-04-18:/posts/2003/04/i-just-got-off-a-gig-helping-port-chesseverywhere-to-the-smartph/<p>I just got off a gig helping port <a href="https://www.hugedomains.com/domain_profile.cfm?d=chesseverywhere&e=com">ChessEverywhere</a> to the Smartphone. (ChessEverywhere is a mobile universal client for various Internet chess sites -- there are <em>always</em> real people and bots to play, normal or blitz.)</p>
<p>Embedded Visual C++ 3.0, Win32 drawing... It was brief, but intense. Lots of fun …</p><p>I just got off a gig helping port <a href="https://www.hugedomains.com/domain_profile.cfm?d=chesseverywhere&e=com">ChessEverywhere</a> to the Smartphone. (ChessEverywhere is a mobile universal client for various Internet chess sites -- there are <em>always</em> real people and bots to play, normal or blitz.)</p>
<p>Embedded Visual C++ 3.0, Win32 drawing... It was brief, but intense. Lots of fun, took my mind off the book troubles. For the past half year, I've been writing a lot about the .NET Compact Framework (see the May Software Development, the new Smart Solutions, and the upcoming "Jolt Awards" article) and my standard opener has been "Last year, I worked on a .NET Compact Framework prototype while my colleagues worked with J2ME and native PalmOS. I had a radically easier time..." That prototype, no surprise, was <strong>ChessEverywhere for PocketPC Phone Edition</strong> on a beta of the .NET CF (MobilePioneer hasn't productized it yet, but if you're interested, <a href="mailto:cjv@mobileioneer.com">ask 'em</a>!).</p>
<p>Well, as much fun as I had revisiting the days of Windows programming without MFC, ATL, or support for, say, C++ exception handling (!), my experience with the Smartphone deepened my belief that the .NET CF is <em>huge</em>. With the .NET CF, programming mobile solutions is only occasionally harder than writing for a desktop (two silly, but real examples -- rotating bitmaps and opening a COM port). Honestly, in my Big List of Programming Projects, I no longer automatically move mobile applications to the bottom of the list -- .NET CF makes them absolutely approachable. I'm convinced <strong>the next five years in software will be all about mobility: handhelds, phones, and Tablets</strong>.</p>
<p>Anyway...I'm going to disappear for the next 2 weeks. When I get back, I'm going to redesign the site, talk to the lawyers about getting <em>TiC#</em> code up as quickly as possible (surely there can't be a dispute about the ownership of the <em>code</em>? I wrote every freakin' line!), <strong>try to find a paying gig -- say, anyone looking for someone with Smartphone C++ experience?</strong></p>Thinking In C No Longer Available For Download As You May Know One Of The Aspects Of This Project Was That Draft2003-04-11T02:21:00-10:002003-04-11T02:21:00-10:00larrytag:knowing.net,2003-04-11:/posts/2003/04/thinking-in-c-no-longer-available-for-download-as-you-may-know-one-of-the-aspects-of-this-project-was-that-draft/<p><em>Thinking in C#</em> no longer available for download. As you may know, one of the aspects of this project was that draft versions of the text had been available for download. Surprisingly, I've been told in no uncertain terms that some of the other parties involved feel that the "last …</p><p><em>Thinking in C#</em> no longer available for download. As you may know, one of the aspects of this project was that draft versions of the text had been available for download. Surprisingly, I've been told in no uncertain terms that some of the other parties involved feel that the "last draft" (the text as it stands today) should not (in fact, must not) be available in any form. In my opinion, that's a gratuitous disservice to the community -- every word in the text is either available for free download in another text or was written by me. The text that I <em>do</em> have rights to (a divvying-up that will take place via lawyers, unfortunately) will be available again as soon as the rights situation is cleared up. To receive an email notification of this and other C# and .NET training products, please sign up on my <a href="https://www.buydomains.com/lander/thinkingin.net?domain=thinkingin.net&utm_source=thinkingin.net&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect">mailing list</a>.</p>Its Been A Rotten Couple Of Months For Reasons That I Cant Talk About Publicly The Printing Of Thinking In C Ha2003-04-09T07:13:00-10:002003-04-09T07:13:00-10:00larrytag:knowing.net,2003-04-09:/posts/2003/04/its-been-a-rotten-couple-of-months-for-reasons-that-i-cant-talk-about-publicly-the-printing-of-thinking-in-c-ha/<p>It's been a rotten couple of months. For reasons that I can't talk about publicly, the printing of <em>Thinking in C#</em> has been cancelled. ...\<long rant scribbled because, like I said, I can't really talk about it>...</p>
<p>Stay tuned to <a href="https://www.buydomains.com/lander/thinkingin.net?domain=thinkingin.net&utm_source=thinkingin.net&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect">http://www.ThinkingIn.NET/</a> -- I'll be making some significant changes …</p><p>It's been a rotten couple of months. For reasons that I can't talk about publicly, the printing of <em>Thinking in C#</em> has been cancelled. ...\<long rant scribbled because, like I said, I can't really talk about it>...</p>
<p>Stay tuned to <a href="https://www.buydomains.com/lander/thinkingin.net?domain=thinkingin.net&utm_source=thinkingin.net&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect">http://www.ThinkingIn.NET/</a> -- I'll be making some significant changes to the Website in the coming days.</p>Just Got Off The Phone With Nick Holdapp Visual C Product Manager A Hrefhttpmsdnmicrosoftcomvisualctechinfoart2003-03-13T23:18:00-10:002003-03-13T23:18:00-10:00larrytag:knowing.net,2003-03-13:/posts/2003/03/just-got-off-the-phone-with-nick-holdapp-visual-c-product-manager-a-hrefhttpmsdnmicrosoftcomvisualctechinfoart/<p>Just got off the phone with Nick Holdapp, Visual C++ Product Manager. There is a defect in VS.NET 2002 and the forthcoming VS.NET 2003 VC++ compiler that can cause an application freeze. What's interesting is that the defect is considered architectural and MS doesn't plan on patching it …</p><p>Just got off the phone with Nick Holdapp, Visual C++ Product Manager. There is a defect in VS.NET 2002 and the forthcoming VS.NET 2003 VC++ compiler that can cause an application freeze. What's interesting is that the defect is considered architectural and MS doesn't plan on patching it until the <em>next</em> major C++ release (i.e., VS.NET 2004 or what-have-you). The defect occurs while loading a DLL that combines managed and unmanaged code and this is the summary: "It is never safe to run managed code inside DllMain. This means that it is not safe for DllMain to be implemented in MSIL, nor is it safe for DllMain to directly or indirectly call a function that is implemented in MSIL. If managed code is run inside DllMain, deadlock is a possibility."</p>
<p>If you're working with Visual C++ and .NET, you definitely want to educate yourself on this defect.</p>Stupidity Should Be Cured Says DNA Codiscoverer Okay I2003-02-28T01:39:00-10:002003-02-28T01:39:00-10:00larrytag:knowing.net,2003-02-28:/posts/2003/02/stupidity-should-be-cured-says-dna-codiscoverer-okay-i/<p>Stupidity should be cured, says DNA co-discoverer. Okay, I don't agree with him, because I think there are compelling arguments that we're in over our heads when it comes to genetic manipulation, but I applaud him for speaking the unspeakable. And "People say it would be terrible if we made …</p><p>Stupidity should be cured, says DNA co-discoverer. Okay, I don't agree with him, because I think there are compelling arguments that we're in over our heads when it comes to genetic manipulation, but I applaud him for speaking the unspeakable. And "People say it would be terrible if we made all girls pretty. I think it would be great."? Gotta' love it.</p>Friday Five 1 What Is Your Favorite Type Of Litera2003-02-27T22:27:00-10:002003-02-27T22:27:00-10:00larrytag:knowing.net,2003-02-27:/posts/2003/02/friday-five-1-what-is-your-favorite-type-of-litera/<p><a href="https://www.friday5.org/"><strong>Friday Five</strong></a></p>
<p><strong>1. What is your favorite type of literature to read (magazine, newspaper, novels, nonfiction, poetry, etc.)?</strong></p>
<p>I guess I'd say that of everything, my single favorite form is the extended essay -- I actually <em>read</em> the <em>New Yorker</em> every week!</p>
<p><strong>2. What is your favorite novel?</strong></p>
<p>My stock answer …</p><p><a href="https://www.friday5.org/"><strong>Friday Five</strong></a></p>
<p><strong>1. What is your favorite type of literature to read (magazine, newspaper, novels, nonfiction, poetry, etc.)?</strong></p>
<p>I guess I'd say that of everything, my single favorite form is the extended essay -- I actually <em>read</em> the <em>New Yorker</em> every week!</p>
<p><strong>2. What is your favorite novel?</strong></p>
<p>My stock answer for this is "<a href="https://www.amazon.com/exec/obidos/ASIN/0345348036/qid%3d1046449604/sr%3d2-1/ref%3dsr_2_1/103-0768092-2657424">The Princess Bride</a>" by William Goldman.</p>
<p><strong>3. Do you have a favorite poem? (Share it!)</strong></p>
<p>I have a particular soft spot for "<a href="https://www.bartleby.com/106/5.html">The Passionate Shepherd to His Love</a>" by Christopher Marlow.<br>
<strong>4. What is one thing you've always wanted to read, or wish you had more time to read?</strong></p>
<p>Some of the great novelists have stumped me repeatedly with their long works (Dostoevsky, Joyce, Mann). And I wish that I had access to more plays.</p>
<p><strong>5. What are you currently reading?</strong><br>
<a href="https://www.amazon.com/exec/obidos/tg/detail/-/0375505296/qid%3d1046449551/sr%3d8-1/ref%3dsr_8_1/103-0768092-2657424%3fv%3dglance%26s%3dbooks%26n%3d507846">The Dante Club</a> by Matthew Pearl.</p>Yesterday I Had A Good Meeting With Cory Linton And Other Members Of Microsofts Tablet PC SDK A Tablet SDK 15 Is Now A H2003-02-24T22:51:00-10:002003-02-24T22:51:00-10:00larrytag:knowing.net,2003-02-24:/posts/2003/02/yesterday-i-had-a-good-meeting-with-cory-linton-and-other-members-of-microsofts-tablet-pc-sdk-a-tablet-sdk-15-is-now-a-h/<p>Yesterday, I had a good meeting with Cory Linton and other members of Microsoft's Tablet PC SDK. A Tablet SDK 1.5 is now available on MSDN. The major additions are a PenInputPanel which pops up a dedicated input window very near a normal WinForm control, which should allow for …</p><p>Yesterday, I had a good meeting with Cory Linton and other members of Microsoft's Tablet PC SDK. A Tablet SDK 1.5 is now available on MSDN. The major additions are a PenInputPanel which pops up a dedicated input window very near a normal WinForm control, which should allow for very fast porting / creation of form-centric applications, and an InkDivider object which essentially parses an arbitrary area of ink into paragraphs, text-lines, drawings and so forth.</p>
<p>If you've been reading this blog for any amount of time, you know that I think that mobility is the place for big productivity wins this decade. This is still ahead-of-the-curve stuff, meaning that now is an opportunity for bold and daring programmers to launch companies.</p>
<p>In case you missed it, here's a 5-minute video demonstrating how easy it is to code the TabletPC starring yours truly. (It was my first experiment with a program called Visual Communicator -- be kind.)</p>SD Times Has Posted Mynbspbrief Review Of C Refactory And IDEA2003-02-21T03:14:00-10:002003-02-21T03:14:00-10:00larrytag:knowing.net,2003-02-21:/posts/2003/02/sd-times-has-posted-mynbspbrief-review-of-c-refactory-and-idea/<p>SD Times has posted my brief review of C# Refactory and IDEA. Even briefer review: <a href="http://www.xtreme-simplicity.net/">C# Refactory</a> is good, but <a href="https://www.jetbrains.com/idea/">IDEA</a> is the best language-specific IDE ever. I'm willing to state that it's even better than Smalltalk/V ever was!</p>Borland Sidewinder To Be Just A C IDE Screenshots Here Are Some Screens2003-02-21T03:05:00-10:002003-02-21T03:05:00-10:00larrytag:knowing.net,2003-02-21:/posts/2003/02/borland-sidewinder-to-be-just-a-c-ide-screenshots-here-are-some-screens/<p>Borland Sidewinder to be "just" a C# IDE? <a href="http://www.drbob42.net/SideWinder/">Screenshots</a>. Here are some screenshots of Borland's Sidewinder tool for C#, which I thought was going to integrate TogetherSoft Control Center. No sign of that in these screenshots. Enough! I'll actually...<em>gasp</em>... call them before posting further speculation. Stay tuned!</p>Open Source Code Better Than Commercial Quality According To A Study By Reasoning Software Heres2003-02-21T02:58:00-10:002003-02-21T02:58:00-10:00larrytag:knowing.net,2003-02-21:/posts/2003/02/open-source-code-better-than-commercial-quality-according-to-a-study-by-reasoning-software-heres/<p><strong>Open Source code better than commercial quality</strong>.</p>
<p>According to a study by Reasoning software (here's a link, but it's down at the moment), Linux' 2.4.19 implementation of the TCP/IP stack ran around .1 defect per 1,000 lines of code (which we'll assume means executable semi-colons), compared …</p><p><strong>Open Source code better than commercial quality</strong>.</p>
<p>According to a study by Reasoning software (here's a link, but it's down at the moment), Linux' 2.4.19 implementation of the TCP/IP stack ran around .1 defect per 1,000 lines of code (which we'll assume means executable semi-colons), compared to 5 commercial OS's (at least 2 of which were UNIX flavors), which averaged .6 to .7 defects per KLOC. Reasoning may only be looking at memory defects, which may explain why these rates are dramatically lower than the industry standard of 10-20 defects per KLOC (<a href="https://www.amazon.com/exec/obidos/ASIN/0201485427/thinkinginnet-20">Software Assessments, Best Practices, and Benchmarks</a>). The study is strong evidence for the OS argument that to many eyes, all defects are shallow.</p>FridayFive 1 What Is Your Most Prized Material PossessionSTRONG2003-02-21T01:45:00-10:002003-02-21T01:45:00-10:00larrytag:knowing.net,2003-02-21:/posts/2003/02/fridayfive-1-what-is-your-most-prized-material-possessionstrong/<p><a href="https://www.friday5.org/">FridayFive:</a></p>
<p><strong>1. What is your most prized material possession?</strong></p>
<p>My wedding ring. (Awww...)</p>
<p><strong>2. What item, that you currently own, have you had the longest?</strong></p>
<p>Hmmm... I have the first release of the "Star Wars" soundtrack, (c) 1977. Since I only listened to it about three times (in 1977), it's …</p><p><a href="https://www.friday5.org/">FridayFive:</a></p>
<p><strong>1. What is your most prized material possession?</strong></p>
<p>My wedding ring. (Awww...)</p>
<p><strong>2. What item, that you currently own, have you had the longest?</strong></p>
<p>Hmmm... I have the first release of the "Star Wars" soundtrack, (c) 1977. Since I only listened to it about three times (in 1977), it's in near-mint condition. I wonder what I'd get on eBay for that...</p>
<p><strong>3. Are you a packrat?</strong></p>
<p>For books, yes. For anything else, no. Tina more than makes up for this, though, and most of our house is covered in bric-a-brac.</p>
<p><strong>4. Do you prefer a spic-and-span clean house? Or is some clutter necessary to avoid the appearance of a museum?</strong></p>
<p>Books, books, books. If you don't have stacks of books laying about, how can you stumble across provocative juxtapositions (<a href="https://www.amazon.com/exec/obidos/ASIN/0385720920/thinkinginnet-20">Chuck Palahniuk</a> versus <a href="https://www.amazon.com/exec/obidos/ASIN/0060928832/thinkinginnet-20">Jacques Barzun</a>)?</p>
<p><strong>5. Do the rooms in your house have a theme? Or is it a mixture of knick-knacks here and there?</strong></p>
<p>It's a mixture of travel souvenirs, original art pieces (mostly oils and ceramics), books, and computers.</p>Microsoft And The Corporate Market E2003-02-21T01:26:00-10:002003-02-21T01:26:00-10:00larrytag:knowing.net,2003-02-21:/posts/2003/02/microsoft-and-the-corporate-market-e/<p><em>Microsoft and the corporate market.</em> <em>There are three 'platforms' for building corporate applications today: J2EE, Microsoft.NET and the 'Open Source' platform. In the later I also include Java software that is not J2EE like Struts, WebWork, Hibernate, Castor....a big oil company and an airline company. Both have J2EE …</em></p><p><em>Microsoft and the corporate market.</em> <em>There are three 'platforms' for building corporate applications today: J2EE, Microsoft.NET and the 'Open Source' platform. In the later I also include Java software that is not J2EE like Struts, WebWork, Hibernate, Castor....a big oil company and an airline company. Both have J2EE as their standard platform....Slow moving is not a problem for most corporations. They usually move slowly, and they feel comfortable with 'designed by committee' technologies, so J2EE has a good value proposition for them....</em></p>
<p><em>via</em> [Andres Aguiar's Weblog]</p>
<p>Andres does a good job articulating one aspect of a fundamental tension in corporate software development -- the processes by which software development is done today are known to be inefficient and expensive, but they're <em>known</em> and therefore somewhat controllable. Many corporations would prefer to budget \<span class="math">\(100 believing it's +- \\)</span>10 rather than \<span class="math">\(80 that's +- \\)</span>25. In no small part this is because for 40 years, they've been told that new processes "cut development costs in half" or even "by a factor of 10." I estimate the overall productivity advantage of .NET versus J2EE above 10% and less than 20%, which is tremendous, but a MS reviewer criticized comments to that effect in <em>Thinking in C#</em> as "overly cynical and detracts from the author being viewed as the authority on the subject." </p>
<p>These are the numbers that Microsoft uses in their own VS.NET 2003 ROI calculator: Unified IDE +10% productivity. Drag-and-drop server components: +10% productivity. OOP: +10% productivity. Debugger improvements: -20% debugging time. Improved test scripting: +8% test productivity. Web forms designer: +25% Web UI productivity. Dynamic help: 24 hours per developer per year. Even if you accept these numbers, (<strong>-</strong>25% debugging time? Hah! Advanced debugger features have <em>minimal</em> impact on the overall time spent correcting defects!), how in the world can you argue <em>the tools</em> give you >20% productivity over J2EE using, say, IDEA and jUnit? It's just not true.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Microsoft Has Filed Broad A Hrefhttpappft1usptogovnetacginphParserSect1PTO1ampSect2HITOFFampdPG01ampp12003-02-18T23:30:00-10:002003-02-18T23:30:00-10:00larrytag:knowing.net,2003-02-18:/posts/2003/02/microsoft-has-filed-broad-a-hrefhttpappft1usptogovnetacginphparsersect1pto1ampsect2hitoffampdpg01ampp1/<p>Microsoft has filed broad patents covering the .NET API. It appears that they are attempting to patent the <em>relationships</em> between namespaces (client programming versus XML manipulation versus network transport, etc.). At this broad level, the patent should be rejected on the basis that the particular separation of concerns noted is …</p><p>Microsoft has filed broad patents covering the .NET API. It appears that they are attempting to patent the <em>relationships</em> between namespaces (client programming versus XML manipulation versus network transport, etc.). At this broad level, the patent should be rejected on the basis that the particular separation of concerns noted is obvious "to one of ordinary skills in the art." Reading the entire patent, though, although the claims relate to very obvious high-level relationships, the supporting documents mention every single namespace in the .NET Framework -- as if the specific patent is for the admittedly non-obvious web of relationships between <em>all</em> the namespaces, a claim that should be rejected on the basis of operativeness. Operativeness is something like a negative proof -- if an invention that does <em>not</em> implement the exact structure is useful to the extent of the claims, the invention is not patentable. For example, you can patent a new design for fastening sheets of paper, but you can't patent an obvious paperclip design in which the paperclips are blue (unless you specifically make claims about the usefulness of blue-ness).</p>
<p>This is a bad patent and should be rejected. Let's see if the \$1B per year spent on patent review does the job this time...</p>IMG Height90 AltWhich OS Are You SrchttpwwwbbspotcomImages2003-02-09T22:48:00-10:002003-02-09T22:48:00-10:00larrytag:knowing.net,2003-02-09:/posts/2003/02/img-height90-altwhich-os-are-you-srchttpwwwbbspotcomimages/<p><a href="http://www.bbspot.com/News/2003/01/os_quiz.php"><img alt="Which OS are You?" height="90" src="http://www.bbspot.com/Images/News_Features/2003/01/os_quiz/amiga.jpg" width="300"><br>
Which OS are You?</a></p>
<p><em>Yes....</em> my first personal computer was <em>this close</em> (fingers teeny bit apart) to being an Amiga. Instead I bought an XT-compatible with Hercules graphics.</p>Borland Sidewinder To Be C Designanddevelopment Tool Accord2003-02-04T05:44:00-10:002003-02-04T05:44:00-10:00larrytag:knowing.net,2003-02-04:/posts/2003/02/borland-sidewinder-to-be-c-designanddevelopment-tool-accord/<p><a href="https://com.com/results?q=news">Borland "Sidewinder" to be C# design-and-development tool</a>. According to this CNet article, Borland's first .NET product will be C#-specific. As I surmised last week, this appears to be the next generation of Together Control Center.</p>Borland Together To Go NET While Reiterating Its Commitment2003-01-27T03:49:00-10:002003-01-27T03:49:00-10:00larrytag:knowing.net,2003-01-27:/posts/2003/01/borland-together-to-go-net-while-reiterating-its-commitment/<p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A120592573574102891768888556780492702893%26anid%3D120592573574102891768888556780492702893&u=120592573574102891768888556780492702893&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553646207250&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A120592573574102891768888556780492702893%26anid%3D120592573574102891768888556780492702893&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">Borland Together to go .NET</a>: While reiterating its commitment to Java, Linux, and the general concept of cross-platform-ness, according to this News.com article, Borland appears to have unveiled the first tool in its .NET strategy (they'd already made the general commitment to support .NET). Although no details are yet …</p><p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A120592573574102891768888556780492702893%26anid%3D120592573574102891768888556780492702893&u=120592573574102891768888556780492702893&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553646207250&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A120592573574102891768888556780492702893%26anid%3D120592573574102891768888556780492702893&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">Borland Together to go .NET</a>: While reiterating its commitment to Java, Linux, and the general concept of cross-platform-ness, according to this News.com article, Borland appears to have unveiled the first tool in its .NET strategy (they'd already made the general commitment to support .NET). Although no details are yet available on Borland's site, it appears that the first thing they will produce is a new version of Together Control Center for .NET. No Delphi for .NET yet.</p>Casey Chesnut Has Written A Client For The Pocket PC2003-01-26T23:23:00-10:002003-01-26T23:23:00-10:00larrytag:knowing.net,2003-01-26:/posts/2003/01/casey-chesnut-has-written-a-client-for-the-pocket-pc/<p>Casey Chesnut has written a client for the Pocket PC Phone Edition that records your voice, shoots it off to a .NET Web Service running a speech recognition engine, and returns the results to your client. The best use of this is certainly for constrained input, not continuous speech recognition …</p><p>Casey Chesnut has written a client for the Pocket PC Phone Edition that records your voice, shoots it off to a .NET Web Service running a speech recognition engine, and returns the results to your client. The best use of this is certainly for constrained input, not continuous speech recognition. Is there a killer app? The one that comes to mind is hands-free routing: a GPS still costs a few hundred bucks and inputting a destination is a pain, especially when driving. "I'm at mile 200 on route 50 in Nevada. How far to the gas station?" would be a pretty cool thing to be able to ask your phone.</p>
<p>Delightfully, Jakob Nielsen's latest <a href="https://www.nngroup.com/articles/voice-interfaces-assessing-the-potential/">Alertbox</a> argues that voice interfaces are poor choices for the majority of applications. Compare and contrast.</p>Dotcom Tellall Website Sued By Former CEO The ExCEO2003-01-19T23:06:00-10:002003-01-19T23:06:00-10:00larrytag:knowing.net,2003-01-19:/posts/2003/01/dotcom-tellall-website-sued-by-former-ceo-the-exceo/<p><strong>Dot-com tell-all Website sued by former CEO.</strong> The ex-CEO of a now-defunct company for which I worked is trying to quash Fabian Gonzalez' iMind Parody Site for detailing how the company burned through \$15M in investment while having employees share toilet-cleaning duty.</p>
<p>Substance abuse; first class plane tickets, five-star hotels …</p><p><strong>Dot-com tell-all Website sued by former CEO.</strong> The ex-CEO of a now-defunct company for which I worked is trying to quash Fabian Gonzalez' iMind Parody Site for detailing how the company burned through \$15M in investment while having employees share toilet-cleaning duty.</p>
<p>Substance abuse; first class plane tickets, five-star hotels and limos on a bottomless expense account; the presentation to the Chinese Ministry of Education that fell-through because the CEO flew to the wrong city (Beijing, Nanjing -- they all sound alike).</p>
<p>These stories are not in dispute, but the ex-CEO contends some other details on the site have caused him emotional distress. Gonzalez' site is alleged to have contributed to the collapse of another multimillion-dollar investment "opportunity" helmed by the ex-CEO and is being sued by both the CEO and the CEO's new company, so the deeper pockets are on the side of silencing the site. Visit it while you can and consider contributing to Gonzalez' legal defense fund.</p>Baby Sleep Aid Says I Hate You A Vancouver Wash Family Dis2003-01-15T01:39:00-10:002003-01-15T01:39:00-10:00larrytag:knowing.net,2003-01-15:/posts/2003/01/baby-sleep-aid-says-i-hate-you-a-vancouver-wash-family-dis/<p><em>Baby sleep aid says: "I hate you". "a Vancouver, Wash., family discovered that the toy they unsuspectingly attached to their son's crib utters the words "I hate you" amid the rhythmic ocean sounds designed to lull the baby asleep."</em> <em>Link</em> <a href="https://www.quicktopic.com/19/H/Rrg9AqXZFMT"><em>Discuss</em></a> <em>(Thanks,</em> <em>Jeremy!) via [</em><a href="https://boingboing.net/"><em>Boing Boing Blog</em></a><em>]</em></p>
<p>This brings back …</p><p><em>Baby sleep aid says: "I hate you". "a Vancouver, Wash., family discovered that the toy they unsuspectingly attached to their son's crib utters the words "I hate you" amid the rhythmic ocean sounds designed to lull the baby asleep."</em> <em>Link</em> <a href="https://www.quicktopic.com/19/H/Rrg9AqXZFMT"><em>Discuss</em></a> <em>(Thanks,</em> <em>Jeremy!) via [</em><a href="https://boingboing.net/"><em>Boing Boing Blog</em></a><em>]</em></p>
<p>This brings back fond memories of the time I spent 45 minutes on my college radio show trying to extract the phrase "Toke on a leaf for Satan" by playing "Stairway to Heaven" backwards. (If you're open to suggestion, you can hear it starting at "...there's a feeling I get...").</p>Installed Simon Fells Pingback Client For Radio Yep It Wo2003-01-14T23:09:00-10:002003-01-14T23:09:00-10:00larrytag:knowing.net,2003-01-14:/posts/2003/01/installed-simon-fells-pingback-client-for-radio-yep-it-wo/<p>Installed Simon Fell's pingback client for Radio. Yep! It works like a charm. Awesome. Okay, so much for my Trackback server! I guess I'll re-implement it as a pingback server!</p>Esoteric Computer Languages Anyone Who Hasnt Seen This2003-01-14T08:57:00-10:002003-01-14T08:57:00-10:00larrytag:knowing.net,2003-01-14:/posts/2003/01/esoteric-computer-languages-anyone-who-hasnt-seen-this/<p><em>Esoteric computer languages. Anyone who hasn't seen this already should check it out. This site is sort of a clearing house for bizarre programming languages, designed either to annoy the user or to explore odd programming paradigms (often both). My personal favorites are Unlambda (functional programming in hell) and Befunge …</em></p><p><em>Esoteric computer languages. Anyone who hasn't seen this already should check it out. This site is sort of a clearing house for bizarre programming languages, designed either to annoy the user or to explore odd programming paradigms (often both). My personal favorites are Unlambda (functional programming in hell) and Befunge (two-dimensional control constructs, anyone?). Another highly amusing language is called</em> <em>hq9+, which is, oddly, not linked from the above site. If you like this sort of thing you should also check out</em> <a href="http://homepage.eircom.net/%7ekmgaughan/esolang/index.html"><em>this site</em></a><em>.</em> <em>I guess this is a classic case of people with way too much time on their hands via [Lambda the Ultimate] by way of [Sam Gentile's Weblog]</em></p>Top Ten Vulnerabilities Of Web ApplicationsnbspWell Worth Reading2003-01-13T02:55:00-10:002003-01-13T02:55:00-10:00larrytag:knowing.net,2003-01-13:/posts/2003/01/top-ten-vulnerabilities-of-web-applicationsnbspwell-worth-reading/<p><a href="https://www.owasp.org/index.php/Main_Page">Top Ten Vulnerabilities of Web Applications</a> Well worth reading.</p>Bacteria Memory Scientists Have Successfully Stored2003-01-13T02:22:00-10:002003-01-13T02:22:00-10:00larrytag:knowing.net,2003-01-13:/posts/2003/01/bacteria-memory-scientists-have-successfully-stored/<p><em>Bacteria Memory. Scientists have successfully stored information into artificial DNA strands and injected them into bacteria that maintained the data by reproducing. via [The Daily Nugget]</em></p>
<p>So... has anyone done the obvious corollary to this and looked for a smiley face embedded in the human genome? </p>25 Pathetic Attempts To Make NET Look BadnbspFun Stuff2003-01-13T01:41:00-10:002003-01-13T01:41:00-10:00larrytag:knowing.net,2003-01-13:/posts/2003/01/25-pathetic-attempts-to-make-net-look-badnbspfun-stuff/<p>25 Pathetic Attempts to Make .NET Look Bad Fun stuff, especially the comments.</p>Met With Serguei Dmitriev And Eugene Belyaev Of JetBrains The Makers Of IDEA The Bes2003-01-13T01:30:00-10:002003-01-13T01:30:00-10:00larrytag:knowing.net,2003-01-13:/posts/2003/01/met-with-serguei-dmitriev-and-eugene-belyaev-of-jetbrains-the-makers-of-idea-the-bes/<p>Met with Serguei Dmitriev and Eugene Belyaev of JetBrains, the makers of <a href="https://www.jetbrains.com/">IDEA</a>, the best IDE for Java. I was trying to show them some of Marin, but just as we got to the ocean, it started pouring. "We're from Russia," they said, undeterred. We walked for, oh, 3 minutes …</p><p>Met with Serguei Dmitriev and Eugene Belyaev of JetBrains, the makers of <a href="https://www.jetbrains.com/">IDEA</a>, the best IDE for Java. I was trying to show them some of Marin, but just as we got to the ocean, it started pouring. "We're from Russia," they said, undeterred. We walked for, oh, 3 minutes before retreating to a bar in Sausalito. They're <a href="https://www.jetbrains.com/careers/jobs/">looking</a> for star programmers.</p>The Future Is Not Objects Managage Code Is Languageneutral Rightnbsp Nonbsp Rig2003-01-12T23:32:00-10:002003-01-12T23:32:00-10:00larrytag:knowing.net,2003-01-12:/posts/2003/01/the-future-is-not-objects-managage-code-is-languageneutral-rightnbsp-nonbsp-rig/<p><strong><em>The future is not objects</em></strong></p>
<p><em>Managage code is language-neutral, right? No! Right now the CLI is very much tilted in favor of Object-Oriented languages (C++, C#, VB, Java). This is fine for now, but looking around the computing landscape leads me to a hypothesis:</em></p>
<blockquote>
<p><strong><em>Hypothesis: The interesting programming models in …</em></strong></p></blockquote><p><strong><em>The future is not objects</em></strong></p>
<p><em>Managage code is language-neutral, right? No! Right now the CLI is very much tilted in favor of Object-Oriented languages (C++, C#, VB, Java). This is fine for now, but looking around the computing landscape leads me to a hypothesis:</em></p>
<blockquote>
<p><strong><em>Hypothesis: The interesting programming models in the next three years are not going to be Object-Oriented in nature. </em></strong></p>
</blockquote>
<p><em>There's just too much interest right now in other ways of doing things. XML andWebServices for example are both non-OO at heart (heck, guys like</em> <em>Tim Ewald</em> <em>and</em> <em>Don Box</em> <em>have even been talking about the</em> <em>joys of weak typing). This hypothesis is sort of academically interesting, but there is a corrollary:</em></p>
<blockquote>
<p><strong><em>Corrollary: The long-term success of the CLR may hinge on its ability to accomondate non-OO models of programming</em></strong></p>
</blockquote>
<p><em>and this is an interesting idea to me. So, Discuss. Am I all wet?</em></p>
<p><em>[Managed Space]</em></p>
<p>No, you're perfectly dry; I ranted similarly the other day. Object-oriented imperative languages are a pragmatic sweet spot today, but there are other programming paradigms thare are <em>known</em> to be more productive in certain situations. Several of the most talked-about challenges of building applications today such as persistence strategies and "business rules" are fundamentally easier to solve non-imperatively. The history of visual form builders, which are a type of non-imperative programming, argues for your point -- the primacy of reflection in language and library design emerged largely because of the realization that visual form-builders had become a necessity. So while visual form-builders are layered on top of OOP, they fairly dramatically influenced language and library design. Some changes, though, such as new multiprocessing paradigms, will undoubtedly require evolution (or even revolution) of the CLR. I'd submit that Microsoft's behavior re Rotor compared to Sun's behavior re the Java Community Process is a much better strategy for evolving the fundamental substrate of their platform.</p>No Title2003-01-10T00:42:00-10:002003-01-10T00:42:00-10:00larrytag:knowing.net,2003-01-10:/posts/2003/01/no-title-2/<p>....Arguing whether keyword <strong>synchronized</strong> is better than keyword <strong>lock</strong> is all well and good, but it's irrelevant to why .NET is going to become the dominant platform for software development....: An article I posted to the DOTNET-CX mailing list today.</p>Im Trying To Stretch The Definition Of Holiday Season Over The Weekend As An Excuse For Hacking Up An XBack Serve2003-01-03T00:32:00-10:002003-01-03T00:32:00-10:00larrytag:knowing.net,2003-01-03:/posts/2003/01/im-trying-to-stretch-the-definition-of-holiday-season-over-the-weekend-as-an-excuse-for-hacking-up-an-xback-serve/<p>I'm trying to stretch the definition of "holiday season" over the weekend as an excuse for hacking up an <em>x</em>Back server for .NET that works with intermittently-connected Radio clients (the cool thing about Radio Userland is that it runs locally on your work machine and uploads static HTML pages …</p><p>I'm trying to stretch the definition of "holiday season" over the weekend as an excuse for hacking up an <em>x</em>Back server for .NET that works with intermittently-connected Radio clients (the cool thing about Radio Userland is that it runs locally on your work machine and uploads static HTML pages to your generic server). Writing the server is easy enough (TrackBack uses REST, PingBack uses a single XML-RPC verb) but I'm trying to figure out how to incorporate the results into Radio Userland. I can't quite figure out what to do: I'm thinking I have to use a server-side include to combine the Radio Userland-generated HTML with the Trackback server data. Any other thoughts on how to transform:</p>
<div class="highlight"><pre><span></span><code><span class="cp"><?xml version="1.0" encoding="ISO-8859-1"?></span><span class="w"> </span><span class="nt"><TrackBacks></span>
<span class="w"> </span><span class="nt"><TargetURI></span>http://target.com/target.html<span class="nt"></TargetURI></span>
<span class="w"> </span><span class="nt"><References></span>
<span class="w"> </span><span class="nt"><Reference></span>
<span class="w"> </span><span class="nt"><ReferrerURI></span>http://referer.com/referenceToTarget.html<span class="nt"></ReferrerURI></span>
<span class="w"> </span><span class="nt"><Title></span>Response<span class="w"> </span>to<span class="w"> </span>target<span class="nt"></Title></span>
<span class="w"> </span><span class="nt"><Excerpt></span>I<span class="w"> </span>disagree<span class="w"> </span>with<span class="w"> </span>target...<span class="nt"></Excerpt></span>
<span class="w"> </span><span class="nt"><BlogName></span>Referer's<span class="w"> </span>Blog<span class="nt"></BlogName></span>
<span class="w"> </span><span class="nt"></Reference></span>
<span class="w"> </span><span class="nt"></References></span>
<span class="w"> </span><span class="nt"></TrackBacks></span>
</code></pre></div>
<p>into HTML inside of Radio's production of target.html?</p>Friday Five 1 Do You Wear Any Jewelry What Kind2003-01-02T22:58:00-10:002003-01-02T22:58:00-10:00larrytag:knowing.net,2003-01-02:/posts/2003/01/friday-five-1-do-you-wear-any-jewelry-what-kind/<p><strong><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five</a></strong></p>
<p><strong>1. Do you wear any jewelry? What kind?</strong></p>
<p>I wear my gold claddagh wedding ring.</p>
<p><strong>2. How often do you wear it?</strong></p>
<p>I only take it off when I'm swimming / diving.</p>
<p><strong>3. Do you have any piercings? If so, where?</strong></p>
<p>I have a pierced ear, but haven't worn …</p><p><strong><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five</a></strong></p>
<p><strong>1. Do you wear any jewelry? What kind?</strong></p>
<p>I wear my gold claddagh wedding ring.</p>
<p><strong>2. How often do you wear it?</strong></p>
<p>I only take it off when I'm swimming / diving.</p>
<p><strong>3. Do you have any piercings? If so, where?</strong></p>
<p>I have a pierced ear, but haven't worn an earring in years.</p>
<p><strong>4. Do you have any tattoos? If so, where?</strong></p>
<p>Nope. I like the sun too much to keep a tattoo in good condition. </p>
<p><strong>5. What are your plans for the weekend?</strong></p>
<p>I'm going to work tomorrow and then on Sunday watch the Niners beat the Giants.</p>I Had Fun Over The Holidays Jazzing Around With A Hrefhttpwwwthinkinginnetstories20030102cGeneticAlgorithmsForProb2003-01-02T04:26:00-10:002003-01-02T04:26:00-10:00larrytag:knowing.net,2003-01-02:/posts/2003/01/i-had-fun-over-the-holidays-jazzing-around-with-a-hrefhttpwwwthinkinginnetstories20030102cgeneticalgorithmsforprob/<p>I had fun over the holidays, jazzing around with genetic algorithms, C#, and the Pocket PC. Time to go back to work and finish some articles...</p>Why Is Pingback Track2003-01-01T01:54:00-10:002003-01-01T01:54:00-10:00larrytag:knowing.net,2003-01-01:/posts/2003/01/why-is-pingback-track/<p>Why is pingback / trackback a good design? Why isn't the referer [sic] header the way to automatically track pages that link to you? I was thinking of writing a pingback server for .NET, but on closer look, it seems inelegant. I only had a few hours sleep last night / this …</p><p>Why is pingback / trackback a good design? Why isn't the referer [sic] header the way to automatically track pages that link to you? I was thinking of writing a pingback server for .NET, but on closer look, it seems inelegant. I only had a few hours sleep last night / this morning -- the above is a link to my fuzzy thoughts on the matter. Design reviews requested.</p>
<p>P.S. Happy New Year!</p>Friday Five 1 What Was Your Biggest Accomplishment This Year ST2002-12-26T23:44:00-10:002002-12-26T23:44:00-10:00larrytag:knowing.net,2002-12-26:/posts/2002/12/friday-five-1-what-was-your-biggest-accomplishment-this-year-st/<p><a href="https://www.friday5.org/">Friday Five</a>:</p>
<p><strong>1. What was your biggest accomplishment this year?</strong></p>
<p>Writing <em>Thinking in C#, </em>a 1,000-page technical book. Although I started it in September of 2001, I did 80% of the work in 2002. * *</p>
<p><strong>2. What was your biggest disappointment?</strong></p>
<p>Despite having the content of <em>Thinking in C#</em> essentially …</p><p><a href="https://www.friday5.org/">Friday Five</a>:</p>
<p><strong>1. What was your biggest accomplishment this year?</strong></p>
<p>Writing <em>Thinking in C#, </em>a 1,000-page technical book. Although I started it in September of 2001, I did 80% of the work in 2002. * *</p>
<p><strong>2. What was your biggest disappointment?</strong></p>
<p>Despite having the content of <em>Thinking in C#</em> essentially finished in July, having the publication delayed for a year.</p>
<p><strong>3. Will you be making any New Year's resolutions?</strong></p>
<p>Does "I've <em>got</em> to find some way to pay off these *#\<span class="math">\(@\\)</span>ing credit cards!" count as a resolution?</p>
<p><strong>4. Where will you be at midnight? Do you wish you could be somewhere else?</strong></p>
<p>Not sure yet, but maybe Bald Hill in San Anselmo, overlooking San Francisco Bay. I'd rather be lots of places: either someplace snowy or someplace tropical. This is a dark and rainy season in the Bay Area.</p>
<p><strong>5. Aside from (possibly) staying up late, do you have any other New Year's traditions?</strong></p>
<p>We go for a hike on New Year's Day, but that's just what we do on <em>every</em> holiday!</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>MS Must Ship Suns Java2002-12-23T06:56:00-10:002002-12-23T06:56:00-10:00larrytag:knowing.net,2002-12-23:/posts/2002/12/ms-must-ship-suns-java/<p>MS Must Ship Sun's Java</p>Mmmm DirectX From C2002-12-23T03:14:00-10:002002-12-23T03:14:00-10:00larrytag:knowing.net,2002-12-23:/posts/2002/12/mmmm-directx-from-c/<p>Mmmm.... DirectX from C#...</p>According To The Register Microsoft Is Lining U2002-12-23T01:34:00-10:002002-12-23T01:34:00-10:00larrytag:knowing.net,2002-12-23:/posts/2002/12/according-to-the-register-microsoft-is-lining-u/<p><a href="https://www.theregister.co.uk/2002/12/30/microsoft_plots_macromedia_coup_against/"><em>According to the Register</em></a><em>, Microsoft is lining up to buy Macromedia. It's Flash they want. via [</em><a href="http://scripting.com/"><em>Scripting News</em></a><em>]</em></p>
<p>Ah, now <em>this</em> makes sense. Not because of the anti-J2EE nonsense in the Register article, but 90% because of Flash and 10% because of Cold Fusion. The Price:Book ratio for Macromedia …</p><p><a href="https://www.theregister.co.uk/2002/12/30/microsoft_plots_macromedia_coup_against/"><em>According to the Register</em></a><em>, Microsoft is lining up to buy Macromedia. It's Flash they want. via [</em><a href="http://scripting.com/"><em>Scripting News</em></a><em>]</em></p>
<p>Ah, now <em>this</em> makes sense. Not because of the anti-J2EE nonsense in the Register article, but 90% because of Flash and 10% because of Cold Fusion. The Price:Book ratio for Macromedia is only 2.10. Yep, I could see this happening.</p>Joe Strummer RIP The One Time I Saw Joe Strummer I2002-12-23T01:05:00-10:002002-12-23T01:05:00-10:00larrytag:knowing.net,2002-12-23:/posts/2002/12/joe-strummer-rip-the-one-time-i-saw-joe-strummer-i/<p><a href="http://news.bbc.co.uk/2/hi/entertainment/2600669.stm">Joe Strummer, RIP</a>. The one time I saw Joe Strummer in concert was when he was singing vocals for The Pogues. Oh man, that was a good concert. Well, I guess I know what's on the turntable today...</p>DirectX 9 ReleasednbspIncluding M2002-12-19T23:24:00-10:002002-12-19T23:24:00-10:00larrytag:knowing.net,2002-12-19:/posts/2002/12/directx-9-releasednbspincluding-m/<p>DirectX 9 Released. Including managed libraries and C# support! Woo-hooo! Note that you have to download not just the DirectX for C# SDK, but the DirectX SDK 9.0 Developer Runtime in order to get the Managed Direct X (MDX) libraries.</p>But That Doesnt Mean Im Not Happy To See You Too The LAT Notes The Conviction This Week2002-12-19T00:08:00-10:002002-12-19T00:08:00-10:00larrytag:knowing.net,2002-12-19:/posts/2002/12/but-that-doesnt-mean-im-not-happy-to-see-you-too-the-lat-notes-the-conviction-this-week/<p><strong>But that doesn't mean I'm not happy to see you, too</strong></p>
<p>The <em>LAT</em> notes the conviction this week of a man who smuggled rare monkeys into the U.S.--in his pants. Upon discovering four endangered birds and 50 exotic orchids in his suitcase, officials at Los Angeles International Airport …</p><p><strong>But that doesn't mean I'm not happy to see you, too</strong></p>
<p>The <em>LAT</em> notes the conviction this week of a man who smuggled rare monkeys into the U.S.--in his pants. Upon discovering four endangered birds and 50 exotic orchids in his suitcase, officials at Los Angeles International Airport stopped the man for questioning. When asked if he were hiding anything else, the man responded, "Yes. I've got monkeys in my pants."</p>Web Server Statistics JSP Fastest Growing Serverside Scripting Language 1 Of A2002-12-18T23:10:00-10:002002-12-18T23:10:00-10:00larrytag:knowing.net,2002-12-18:/posts/2002/12/web-server-statistics-jsp-fastest-growing-serverside-scripting-language-1-of-a/<p>Web server <a href="https://news.netcraft.com/archives/category/web-server-survey/">statistics</a>: JSP fastest growing server-side scripting language, 1% of ASP.NET servers running on Linux. Interesting stuff from Netcraft.</p>Elcomsoft Acquitted Even Though I Sell A Hrefht2002-12-17T23:53:00-10:002002-12-17T23:53:00-10:00larrytag:knowing.net,2002-12-17:/posts/2002/12/elcomsoft-acquitted-even-though-i-sell-a-hrefht/<p>Elcomsoft acquitted. Even though I sell <em>Thinking in C#</em> via Adobe Acrobat and therefore am vulnerable to piracy of my intellectual property, I am happy for this verdict. I don't know what is a fair policy towards digital media, but the DMCA ain't it.</p>This A Hrefhttpradiocommentsuserlandcomcommentsu107288ampp178amplinkhttp3A2F2Fwwwthinkinginnet2F200222002-12-17T06:50:00-10:002002-12-17T06:50:00-10:00larrytag:knowing.net,2002-12-17:/posts/2002/12/this-a-hrefhttpradiocommentsuserlandcomcommentsu107288ampp178amplinkhttp3a2f2fwwwthinkinginnet2f20022/<p>This comment on this post asked if my argument meant that AI is impossible:</p>
<p>I don't think that follows from my argument. The greatest challenge with AI is that we have no good theories on the non-material representations comprising consciousness. Brain mechanics we're beginning to get a handle on, and …</p><p>This comment on this post asked if my argument meant that AI is impossible:</p>
<p>I don't think that follows from my argument. The greatest challenge with AI is that we have no good theories on the non-material representations comprising consciousness. Brain mechanics we're beginning to get a handle on, and you'll find a lot of people who agree that consciousness is an emergent property of a number of largely independent sub-systems, but there is no compelling theory that says "To get to AI, we need to start here, and then go here, and then go here..." There are appeals to emotion -- Doug Lenat's <a href="http://www.cycorp.com/">Cycorp</a> says "It's just common sense..." that a massive database of facts is necessary while MIT's Rodney Brooks say that <a href="http://www.ai.mit.edu/projects/humanoid-robotics-group/kismet/kismet.html">Kismet</a>-style "emotional robots" are the best route -- but I could just as easily argue that the problems of internal representation, or language are the first step.</p>
<p>As a matter of fact, I <em>do</em> believe that language is the key -- once we have a system that can reliably interpret Web pages (say), I think that it will be a small step to a system that can generate them and, in my opinion, that will bring us into the gray area of "maybe we have AI and maybe we don't." For instance, the algorithms that produce <a href="https://news.google.com/?hl=en-US&gl=US&ceid=US:en">Google News</a> have a surprising penchant for cricket -- neither the world's most popular sport nor the world's most written-about sport. It's quirky -- and that's a <em>very</em> interesting thing to say about a program.</p>I Hope Microsoft Doesnt Buy Borland Apparently In Light Of IBMs Acquisition Of Rational Theres Been Talk That A Href2002-12-17T06:24:00-10:002002-12-17T06:24:00-10:00larrytag:knowing.net,2002-12-17:/posts/2002/12/i-hope-microsoft-doesnt-buy-borland-apparently-in-light-of-ibms-acquisition-of-rational-theres-been-talk-that-a-href/<p>I hope Microsoft doesn't buy Borland. Apparently, in light of IBM's acquisition of Rational, there's been talk that <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A160796901231134416232739030245545047088%26anid%3D160796901231134416232739030245545047088&u=160796901231134416232739030245545047088&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553646534372&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A160796901231134416232739030245545047088%26anid%3D160796901231134416232739030245545047088&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">Microsoft may acquire Borland</a>, which bought TogetherSoft earlier this year. I hope not. Microsoft does not need Together/J, a Java-based UML tool -- they have Visio if they want a diagramming tool …</p><p>I hope Microsoft doesn't buy Borland. Apparently, in light of IBM's acquisition of Rational, there's been talk that <a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A160796901231134416232739030245545047088%26anid%3D160796901231134416232739030245545047088&u=160796901231134416232739030245545047088&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553646534372&cc=840&dma=609&epcRFU=null&tk=&k=&qk=LInN&mqk=LInN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-LInNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A160796901231134416232739030245545047088%26anid%3D160796901231134416232739030245545047088&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">Microsoft may acquire Borland</a>, which bought TogetherSoft earlier this year. I hope not. Microsoft does not need Together/J, a Java-based UML tool -- they have Visio if they want a diagramming tool. Better, the entire field of CASE (Computer-Aided Software Engineering) is <em>desperately</em> in need of being revitalized by a new generation of tools: Microsoft should go back to the drawing board and create a diagramming tool that serves the needs of code-centric programmers: diagrams primarily as communication tools, diagrams that can be <em>unlinked</em> from the code representation (half the point of diagramming is eliding details; the other half is saying "What if...?". The CASE industry's decade-long obsession with creating "tightly integrated" diagrams has severely diminished the utility of CASE tools.) but on the other hand can be integrated into coherent, multi-representational models of a functioning system.</p>
<p>A Microsoft-owned Borland would certainly spin off or cancel the best commercial product for Linux development and Borland's JBuilder is one of the best commercial products for Java development and one would assume that it, too, would have to be jettisoned. Both of those event would be a loss to the general programming community. </p>
<p>Perhaps most importantly, Borland has, for 20 years (?), been a well-spring of innovative, high-quality, software development tools. Borland has stumbled several times over the years, and it may be in the interest of their shareholders to consider offers, but the spirit and independence of Scotts Valley has contributed a great deal to the software community over the years and it would be a great shame to lose it.</p>X A Native XMLProcessing Language On Tap From Microso2002-12-17T05:58:00-10:002002-12-17T05:58:00-10:00larrytag:knowing.net,2002-12-17:/posts/2002/12/x-a-native-xmlprocessing-language-on-tap-from-microso/<p>X#, A Native XML-Processing Language, On Tap From Microsoft? There are already several "native XML" programming languages (I like the looks of this one) and certainly it makes sense for there to be XML language(s!) for .NET.</p>When I Was A Kid We Had To Carry Our Punchcards Through Snowdrifts 10 Feet Tall To Get To Route 128 To Run Our Prog2002-12-13T00:15:00-10:002002-12-13T00:15:00-10:00larrytag:knowing.net,2002-12-13:/posts/2002/12/when-i-was-a-kid-we-had-to-carry-our-punchcards-through-snowdrifts-10-feet-tall-to-get-to-route-128-to-run-our-prog/<p><strong>When I was a kid, we had to carry our punch-cards through snowdrifts 10 feet tall to get to Route 128 to run our programs...</strong></p>
<p>Joel Spolsky, one the best commentators on programming, has <a href="https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/">two</a> related <a href="https://www.joelonsoftware.com/2002/12/11/lord-palmerston-on-programming/">articles</a> which lay out the premise that computer programming today is harder than it …</p><p><strong>When I was a kid, we had to carry our punch-cards through snowdrifts 10 feet tall to get to Route 128 to run our programs...</strong></p>
<p>Joel Spolsky, one the best commentators on programming, has <a href="https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/">two</a> related <a href="https://www.joelonsoftware.com/2002/12/11/lord-palmerston-on-programming/">articles</a> which lay out the premise that computer programming today is harder than it was 10 and 20 years ago. His argument is that there are many "leaky abstractions" in which a library presents a programming metaphor that is all well-and-good for 98% of your work, but to know that 2% remaining is harder than ever before. This is a valid point, but irrelevant to the fact that programming, like basketball or golf, is <em>exactly</em> as difficult today as it was 10 or 20 years ago and will be <em>exactly</em> as difficult in another 10 or 20 years. Programming, like throwing a ball into a basket on a pole or hitting a ball into a small hole, is beyond the human capacity for perfection. This is not to say that an entry-level NBA player wouldn't devastate in a nineteenth century game of pick-up or that Tiger Woods would break a sweat winning a round in 15th century Scotland. Is the best golf player in the world expected to drive further and putt straighter than 10 or 20 years ago? Is a professional basketball player expected to be taller, stronger, more accurate, and more versed in tactics than 10 or 20 years ago? Is a programmer expected to write code that is more flexible, more maintainable, and more capable than 10 or 20 years ago? Yes, yes, and yes.</p>
<p>But the <em>difficulty</em> of being the best you can be is a constant and individual thing. You <em>will not</em> reach the end of the road or the top of the mountain with programming. There will always be more. That is <em>why</em> programming is worthy of trading 40 (or 50 or 60) hours per week. Programming is impossible. That's why it's fun.</p>Thinking In C Print Version Delayed Until Fall 2003 For Reasons Beyond My Control Believe2002-12-09T01:07:00-10:002002-12-09T01:07:00-10:00larrytag:knowing.net,2002-12-09:/posts/2002/12/thinking-in-c-print-version-delayed-until-fall-2003-for-reasons-beyond-my-control-believe/<p><strong><em>Thinking in C#</em> Print Version Delayed Until Fall 2003</strong></p>
<p>For reasons beyond my control (believe me), <em>Thinking in C#</em> will not be available in print until the Fall of 2003. The good news is that this will give an opportunity to take the book to the highest possible level of …</p><p><strong><em>Thinking in C#</em> Print Version Delayed Until Fall 2003</strong></p>
<p>For reasons beyond my control (believe me), <em>Thinking in C#</em> will not be available in print until the Fall of 2003. The good news is that this will give an opportunity to take the book to the highest possible level of accuracy and scope. The bad news is the fairly serious personal economic impact; the book was intended to be the foundation for a series of projects (digital versions, seminars, etc.) and now all of those must be delayed or cancelled while I get things back on a paying basis.</p>
<p>The digital downloadable "release candidate" version will be withdrawn shortly. I do not know if, when, or in what form future version(s) of the book will be available for digital download, so if you're interested in reading <em>Thinking in C</em>#, now is the time to buy. I should be explicit: the reasons for the delay do not have to do with technical flaws in the book as it stands: there are a dozen or so known technical gaffes in the "release candidate," which seems in keeping with a book of approximately 1,000 pages, and an addendum will be sent out shortly. I think this version is a pretty darn good bargain if you're thinking about learning C# this year.</p>Beautiful Windwalkers IMG Height102 Srchttpwwwcraphoundcomimageswindw2002-12-06T06:02:00-10:002002-12-06T06:02:00-10:00larrytag:knowing.net,2002-12-06:/posts/2002/12/beautiful-windwalkers-img-height102-srchttpwwwcraphoundcomimageswindw/<p>Beautiful wind-walkers. <img alt="" height="102" src="https://craphound.com/images/windwalker.jpg" width="239"> "Theo Jansen has developed staggeringly beautiful machines that walk when powered by gusts of wind. Created to be 'art that evolves', he's now working on a way to store the energy to provide power when there is no wind. He likens this to muscles." Link <em>via</em> [<a href="https://boingboing.net/">Boing Boing …</a></p><p>Beautiful wind-walkers. <img alt="" height="102" src="https://craphound.com/images/windwalker.jpg" width="239"> "Theo Jansen has developed staggeringly beautiful machines that walk when powered by gusts of wind. Created to be 'art that evolves', he's now working on a way to store the energy to provide power when there is no wind. He likens this to muscles." Link <em>via</em> [<a href="https://boingboing.net/">Boing Boing Blog</a>]</p>Excellent Illustrated Version Of Beowulfnbsp But In2002-12-06T05:59:00-10:002002-12-06T05:59:00-10:00larrytag:knowing.net,2002-12-06:/posts/2002/12/excellent-illustrated-version-of-beowulfnbsp-but-in/<p>Excellent illustrated version of Beowulf but, in keeping with this apology from the Washington State University's <em>Daily Evergreen</em>, I feel I should be clear up front that Grendel was not really a muppet:</p>
<p>"The <em>Daily Evergreen</em> would like to sincerely apologize for an injustice served to the Filipino-American, Spanish-speaking, and …</p><p>Excellent illustrated version of Beowulf but, in keeping with this apology from the Washington State University's <em>Daily Evergreen</em>, I feel I should be clear up front that Grendel was not really a muppet:</p>
<p>"The <em>Daily Evergreen</em> would like to sincerely apologize for an injustice served to the Filipino-American, Spanish-speaking, and Catholic communities on the front page of Thursday's <em>Evergreen.</em></p>
<p>The story 'Filipino-American History Recognized' stated that the <em>Nuestra Senora de Buena Esperanza</em>, the galleon on which the first Filipinos landed at Morro Bay, California, loosely translates to "The Big Ass Spanish Boat." It actually translates to 'Our Lady of Good Peace.'"</p>IBM To Buy Rational For 21B Given IBMs Linux2002-12-05T23:47:00-10:002002-12-05T23:47:00-10:00larrytag:knowing.net,2002-12-05:/posts/2002/12/ibm-to-buy-rational-for-21b-given-ibms-linux/<p>IBM to buy Rational for \$2.1B</p>
<p>Given IBM's Linux and Java strategy and Rational's Microsoft-centric strategy, this is shocking. According to the press release, Rational will become a separate division and brand (rather than be subsumed by Websphere). However, one must assume that future Rational efforts will concentrate far …</p><p>IBM to buy Rational for \$2.1B</p>
<p>Given IBM's Linux and Java strategy and Rational's Microsoft-centric strategy, this is shocking. According to the press release, Rational will become a separate division and brand (rather than be subsumed by Websphere). However, one must assume that future Rational efforts will concentrate far more on Websphere / Linux / Java than on Windows and .NET. Rational has enough mindshare in the Fortune 500 to have a serious effect on platform choice. There had been rumors about Rational being a takeover target, but I <em>always</em> thought it would be Microsoft to acquire them.</p>Groovy Underwater VR Panoramas Gorgeous Underwater QTVR Panos N2002-12-04T23:15:00-10:002002-12-04T23:15:00-10:00larrytag:knowing.net,2002-12-04:/posts/2002/12/groovy-underwater-vr-panoramas-gorgeous-underwater-qtvr-panos-n/<p><em>Groovy underwater VR panoramas. Gorgeous underwater QTVR pano's. Navigate in a full circle, or vertically.</em> <a href="http://panoramas.dk/fullscreen/fullscreen45.html"><em>Link</em></a> <em>via</em> <em>[</em><a href="https://boingboing.net/"><em>Boing Boing Blog</em></a><em>]</em></p>
<p>Is there cheap Windows software for creating this type of image?</p>Intel Releases New Progra2002-12-04T22:13:00-10:002002-12-04T22:13:00-10:00larrytag:knowing.net,2002-12-04:/posts/2002/12/intel-releases-new-progra/<p><a href="https://com.com/results?q=rss"><em>Intel releases new programming tools</em></a><em>. The chipmaker releases new programming tools designed to increase the performance of software written for its Pentium, Xeon and Itanium processors. [</em><a href="https://www.cnet.com/news/"><em>CNET News.com</em></a><em>]</em> These payware compilers, available from <a href="https://software.intel.com/intel-sdp-home">Intel</a>, are not for .NET, but the <a href="https://software.intel.com/en-us/vtune">VTune Performance Analyzer</a> does profile .NET apps. I'm not …</p><p><a href="https://com.com/results?q=rss"><em>Intel releases new programming tools</em></a><em>. The chipmaker releases new programming tools designed to increase the performance of software written for its Pentium, Xeon and Itanium processors. [</em><a href="https://www.cnet.com/news/"><em>CNET News.com</em></a><em>]</em> These payware compilers, available from <a href="https://software.intel.com/intel-sdp-home">Intel</a>, are not for .NET, but the <a href="https://software.intel.com/en-us/vtune">VTune Performance Analyzer</a> does profile .NET apps. I'm not 100% sure on this, but I believe that it will be Intel (and not Microsoft) that makes a hyperthreading CLR available at some point. Intel is not the best at getting the word out about their development tools, so regularly browse their developer site or stay tuned here.</p>This Report From The MicrosoftSun Java Trial Reads Microso2002-12-04T04:07:00-10:002002-12-04T04:07:00-10:00larrytag:knowing.net,2002-12-04:/posts/2002/12/this-report-from-the-microsoftsun-java-trial-reads-microso/<p>This report from the Microsoft-Sun Java trial reads "Microsoft counters that Sun doesn't need the injunction because at least half the world's software developers already use Java." I can't find any direct reference to what was said, but I'd be very surprised to learn that Microsoft believes that half the …</p><p>This report from the Microsoft-Sun Java trial reads "Microsoft counters that Sun doesn't need the injunction because at least half the world's software developers already use Java." I can't find any direct reference to what was said, but I'd be very surprised to learn that Microsoft believes that half the world's software developers <em>develop</em> in Java. My guess is that half the world's developers have a Java VM on their machines.</p>Optimal Shoe Tying Strategy Proven By Mathematician A2002-12-04T03:59:00-10:002002-12-04T03:59:00-10:00larrytag:knowing.net,2002-12-04:/posts/2002/12/optimal-shoe-tying-strategy-proven-by-mathematician-a/<p>Optimal shoe tying strategy proven by mathematician: <a href="https://improb.com/">Ig Nobel</a>, once seen as a two-way race between the guy who proved that <a href="https://www.birmingham.ac.uk/schools/mathematics/index.aspx">Minesweeper is NP-Complete</a> and the <em>team</em> that proved <a href="https://arxiv.org/abs/cs/0210020">Tetris is NP-Complete</a>, now considered wide-open by geeky oddsmakers.</p>Not All Code Breakage Is Bad A Hrefhttpwwwrussellbeattiecomnotebookindexjspdate200212032002-12-04T02:36:00-10:002002-12-04T02:36:00-10:00larrytag:knowing.net,2002-12-04:/posts/2002/12/not-all-code-breakage-is-bad-a-hrefhttpwwwrussellbeattiecomnotebookindexjspdate20021203/<p><strong>Not all code breakage is bad</strong></p>
<p><em>Russ</em> <em>feels that a slavish devotion to interfaces is over-engineering.</em> <em>Darren</em> <em>weighs in on the side of interfaces, but seems to mostly be advocating the naming convention.</em> Cedric <a href="http://www.freeroller.net/page/cbeust/20021203"><em>advocates</em></a> *the consistent use of factories when programming with interfaces. *</p>
<p>I like interfaces a lot. Raised …</p><p><strong>Not all code breakage is bad</strong></p>
<p><em>Russ</em> <em>feels that a slavish devotion to interfaces is over-engineering.</em> <em>Darren</em> <em>weighs in on the side of interfaces, but seems to mostly be advocating the naming convention.</em> Cedric <a href="http://www.freeroller.net/page/cbeust/20021203"><em>advocates</em></a> *the consistent use of factories when programming with interfaces. *</p>
<p>I like interfaces a lot. Raised in the cold, winter-y days of structured programming, I am like a person who lived through the Depression who still picks up every penny on the street. I think Cedric mischaracterizes interfaces with these words: "...interfaces break easily. If you add a method to an interface, a lot of your code (and maybe that of others') is going to break. The Microsoft way of approaching this problem...."</p>
<p>Not all code breakage is bad and when an interface changes, I would argue that what happens is not a problem at all. There are times when code <em>should</em> not compile, and this is one of them: when you change an interface, you are changing the contract of each and every object that implements that interface. The concept of <em>Design by Contract</em> is subtle, but this is one of the more obvious parts of the metaphor: if you are a general contractor and negotiate a change with the homeowner about the way things are done, <em>of course</em> you must work with all your subcontractors to ensure that they are okay with the changes before going forward. This may be problematic (someone doesn't want to do things the new way), but the fact that it comes to light and you have to address it is not a problem.</p>
<p>This, to me, is one of the chief benefits of strong typing. You can get around typing with factories and various tricks up to and including reflection but... if you don't generally agree that protection against misuse is worthwhile, why use a typed language at all?</p>
<p>And, to raise the rant factor and introduce my own pet peeve about how interfaces are used (I'm sure that Russ, Darrin, and Cedric aren't guilty of what I'm talking about but some people -- you know who you are -- are), if you need to extend an interface and that change is not logically valid for each and every type that implements that interface, it's a very good indication that your interface is under-abstracted; that is, that you've placed into what is supposed to be the essential <em>abstraction</em> some characteristics that are not abstract. For instance, in an abstraction of an <strong>Employee</strong> you may have placed an <strong>OvertimeRate( )</strong> method, a method inappropriate to <strong>Manager</strong> types.</p>
<p>If you discover such a conflict, you <em>should not</em> conclude "Dang these brittle interfaces!" but rather that you need another level of abstraction. For instance, perhaps you should have an <strong>Employee</strong> interface from which <strong>Exempt</strong> and <strong>Nonexempt</strong> subtypes descend. Place the <strong>OvertimeRate( )</strong> in the <strong>Nonexempt</strong> subtype. While one should avoid deep hierarchies, generally when you discover a mismatch such as this, you're discovering the <em>first</em> mismatch, not the <em>only</em> mismatch.</p>
<p>This is why I hate the <strong>NotImplementedException</strong> and all its evil siblings -- it provides a way to "unbreak" your code temporarily, but you do so at the cost of increasing confusion. <strong>System.IO.Stream</strong> is an abstract class that has an example of such confusion: it defines a <strong>Seek( )</strong> operation, which sets the current position according to its parameters. But seeking is not appropriate to the <strong>Stream</strong> abstraction! Network streams cannot seek, cryptographic streams cannot seek: the word "Stream" is a great class name because it properly implies that you may be "standing on the shore" watching something flow by you.</p>
<p>If you have code such as this:</p>
<div class="highlight"><pre><span></span><code>MyClass{
Stream str;
MyClass(Context ctxt){
str = StreamFactory.Create(ctxt);
}
void UseStream(){
str.Seek(100, SeekOrigin.Begin);
}
}
</code></pre></div>
<p>You <em>cannot reliably</em> detect via <em>unit</em> testing that if the <strong>Context ctxt</strong> results in <strong>StreamFactory.Create( )</strong> generates a <strong>NetworkStream, </strong>then <strong>UseStream( )</strong> will break. Only exhaustive regression testing, which is a combinatorial impossibility for non-small programs, will detect the problem (I believe that technology such as Parasoft's jTest, which uses algorithmic evaluation on code paths, might also be able to detect this type of problem, but I'm not sure and, for the moment, jTest is a JVM-only solution). </p>
<p>So if <strong>Stream</strong> should not have a <strong>Seek( )</strong> method, or more generally, an interface needs to be extended, how should it be done? Here's the worst way, which unfortunately is not unknown (you know who you are):</p>
<div class="highlight"><pre><span></span><code>interface IEmployee{
void Hire();
void Fire();
}
interface IEmployee2 : IEmployee{
Rate OvertimeRate();
}
</code></pre></div>
<p>This is just poor object-oriented design: the obvious problem being that if the interface needs to be extended <em>again</em> (IEmployee3, 4, 5, 6, 7, 8...), you're back to square one. Then, rather than face up to the problem, you see the introduction of methods such as <strong>GetCapabilities( )</strong>, one of the more profoundly non-object-oriented idioms one sees.</p>
<p>To extend an interface with a capability that is not universal, one should exploit the fact that a .NET object can inherit from only one base class, but it can implement <em>many</em> interfaces. Thus, you could create an interface such as:</p>
<div class="highlight"><pre><span></span><code>interface Seekable{
long Seek(long offset, SeekOrigin origin);
}
</code></pre></div>
<p>and then a <strong>FileStream</strong>, for which seeking is appropriate,<strong> </strong>could be declared as:</p>
<div class="highlight"><pre><span></span><code><span class="k">class</span> <span class="n">FileStream</span> : <span class="n">Stream</span>, <span class="n">Seekable</span>{ ... <span class="n">etc</span> ... }
</code></pre></div>
<p>or you can combine them into a single interface:</p>
<div class="highlight"><pre><span></span><code><span class="c1">//Just combine the two i'faces, no new methods</span>
<span class="w"> </span><span class="n">interface</span><span class="w"> </span><span class="n">SeekableStream</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">Stream</span><span class="p">,</span><span class="w"> </span><span class="n">Seekable</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="n">class</span><span class="w"> </span><span class="n">FileStream</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">SeekableStream</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="n">etc</span><span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="p">}</span>
</code></pre></div>
<p>The BCL's <strong>System.Collections</strong> namespace demonstrates this type of good design: the <strong>Array</strong> class, for instance, is declared as:</p>
<div class="highlight"><pre><span></span><code>abstract class Array : ICloneable, IList, ICollection, IEnumerable{ ... etc ... }
</code></pre></div>
<p>And, oh yeah, interfaces allow you to implement the "Mock Object" pattern, in which you stub out the (complex and perhaps buggy) implementation with code that (simply and directly) fulfills the interface contract, thus allowing your tests to be validated on both sides. <a href="https://www.amazon.com/exec/obidos/tg/detail/-/0345353110/qid%3d1039034179/sr%3d8-1/ref%3dsr_8_1/102-0387291-0645762%3fv%3dglance%26s%3dbooks%26n%3d507846">Quis custodiet ipsos custodes</a>? and all that.</p>Holy Cow Completely Browsable Source Code To Rotor Via A Hrefh2002-12-02T03:02:00-10:002002-12-02T03:02:00-10:00larrytag:knowing.net,2002-12-02:/posts/2002/12/holy-cow-completely-browsable-source-code-to-rotor-via-a-hrefh/<p>Holy cow! Completely browsable source code to Rotor! <em>via [Sam Gentile's blog].</em></p>OOP Performance C On NonMS Platforms Topnbspsubscriber Concerns Objectoriented Analysis Amp2002-11-26T03:23:00-10:002002-11-26T03:23:00-10:00larrytag:knowing.net,2002-11-26:/posts/2002/11/oop-performance-c-on-nonms-platforms-topnbspsubscriber-concerns-objectoriented-analysis-amp/<p><strong>OOP, performance, C# on non-MS platforms top subscriber concerns</strong></p>
<p>Object-oriented analysis & design is the topic of most interest to subscribers of my mailing list, with fundamentals of object-oriented programming coming in second. Tuning C# for performance is next, the top-most .NET-specific interest and a topic of perennial interest. I might …</p><p><strong>OOP, performance, C# on non-MS platforms top subscriber concerns</strong></p>
<p>Object-oriented analysis & design is the topic of most interest to subscribers of my mailing list, with fundamentals of object-oriented programming coming in second. Tuning C# for performance is next, the top-most .NET-specific interest and a topic of perennial interest. I might have guessed these results, but I was surprised to see that "C# on non-Microsoft platforms" comes next, outperforming, for instance, .NET Remoting, multimedia programming, Compact .NET Framework, etc. Did I mention that <em>Thinking in C#</em>, which is available for digital download, works pretty darn well with mono?</p>Jason Whittington Quoted This Matt Gripes Wrote I2002-11-25T23:01:00-10:002002-11-25T23:01:00-10:00larrytag:knowing.net,2002-11-25:/posts/2002/11/jason-whittington-quoted-this-matt-gripes-wrote-i/<p><strong>Jason Whittington quoted this:</strong> *Matt Gripes wrote I'm glad Ximian wrote a C# port to linux, but, at the end of the day, is .NET going to be a uni-platform technology? * [<a href="https://www.buydomains.com/lander/thinkingin.net?domain=thinkingin.net&utm_source=thinkingin.net&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect">Thinking In .NET</a>]</p>
<p><strong>And then Jason added:</strong> <em>This problem is one I've been thinking about a lot lately....The …</em></p><p><strong>Jason Whittington quoted this:</strong> *Matt Gripes wrote I'm glad Ximian wrote a C# port to linux, but, at the end of the day, is .NET going to be a uni-platform technology? * [<a href="https://www.buydomains.com/lander/thinkingin.net?domain=thinkingin.net&utm_source=thinkingin.net&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect">Thinking In .NET</a>]</p>
<p><strong>And then Jason added:</strong> <em>This problem is one I've been thinking about a lot lately....The real question in my mind is how Microsoft is going to treat the ECMA specification....Library support on different platforms is sure to vary week-to-week, so let's discount those for a second and concentrate on the fundamentals of the runtime....</em> [More]</p>
<p>While I share Jason's interest in whether Microsoft will "play fair" by the standards process, I think that library standardization is the driver of cross-platform deployments (I'm thinking about the history of C/C++). I never agreed with Sun's contention that programmers would be "tricked" into platform-specifics by typing "//\@Import Win32.dll" (or whatever the exact syntax was), but with C# there is no tool that tells you "This code uses only ECMA standard classes and local assemblies." Without that... Wait a second... Geez, that'd be a useful tool to write...</p>Winter Vomiting Disease Is Currently Spreading Fast Through Scotla2002-11-25T22:34:00-10:002002-11-25T22:34:00-10:00larrytag:knowing.net,2002-11-25:/posts/2002/11/winter-vomiting-disease-is-currently-spreading-fast-through-scotla/<p><em>Winter Vomiting Disease</em> <em>is currently spreading fast through Scotland and northern England.</em> <em>Link</em> <em>(via</em> <a href="http://monkeybum.blogspot.com/"><em>Exciting Monkey Bum Stories for Boys & Girls</em></a><em>)</em></p>
<p>So <em>that's</em> what I catch the morning after Christmas parties and New Year's Eve!</p>Information Awareness This Article Should Have Been2002-11-25T22:26:00-10:002002-11-25T22:26:00-10:00larrytag:knowing.net,2002-11-25:/posts/2002/11/information-awareness-this-article-should-have-been/<p>Information Awareness. <em>This article should have been an indictment of how the government has failed to protect the voters from identity fraud, and instead protects only the banks and government bureaucrats. In fact, the government is completely impotent to prevent similar and ongoing fraud -- the problems with identity security across …</em></p><p>Information Awareness. <em>This article should have been an indictment of how the government has failed to protect the voters from identity fraud, and instead protects only the banks and government bureaucrats. In fact, the government is completely impotent to prevent similar and ongoing fraud -- the problems with identity security across the entire economic infrastructure are so systemic and deep that it will take work on many fronts to patch them all. The paper should just say, "Government surrenders in war on identity fraud. Three poor people jailed; 30,000 screwed. You're next and there's nothing you can do about it. Government war against people who copy lame Courtney Love music progressing nicely."</em> via [<a href="http://netcrucible.com/blog/">Better Living Through Software</a>]</p>
<p>(Am I the only one who <em>likes</em> Courtney Love's music?)</p>Cedric Beustsnbspblog Entry From The J2EE NET Smackdown Event Since He W2002-11-24T01:54:00-10:002002-11-24T01:54:00-10:00larrytag:knowing.net,2002-11-24:/posts/2002/11/cedric-beustsnbspblog-entry-from-the-j2ee-net-smackdown-event-since-he-w/<p>Cedric Beust's<a href="http://beust.com/smackdown.html"> blog entry</a> from the J2EE / .NET Smackdown event. Since he was in the audience, he was actually able to see the slides! He's got some good quotes.</p>Matt Gripes Wrote What About Platform Independence I Thought One Of The Paramount Reasons To Write App2002-11-24T01:48:00-10:002002-11-24T01:48:00-10:00larrytag:knowing.net,2002-11-24:/posts/2002/11/matt-gripes-wrote-what-about-platform-independence-i-thought-one-of-the-paramount-reasons-to-write-app/<p><strong>Matt Gripes wrote: What about platform independence?</strong> <em>I thought one of the paramount reasons to write applications in Java was "write once, run anywhere". I like that my java apps work on any platform that has a JVM. When did that become unimportant or unnecessary?</em></p>
<p><em>I'm glad Ximian wrote a …</em></p><p><strong>Matt Gripes wrote: What about platform independence?</strong> <em>I thought one of the paramount reasons to write applications in Java was "write once, run anywhere". I like that my java apps work on any platform that has a JVM. When did that become unimportant or unnecessary?</em></p>
<p><em>I'm glad Ximian wrote a C# port to linux, but, at the end of the day, is .NET going to be a uni-platform technology?</em></p>
<p>::: {.date}
<em>11/24/02; 12:37:29 AM</em>
:::</p>
<p>::: {.date}
:::</p>
<p>::: {.date}
Yes, if your apps require nothing beyond the capabilities in J2SE, your Java apps can run anywhere except those platforms which only support J2ME. And there <em>are</em> valuable apps that fit that mold: <a href="https://www.jetbrains.com/idea/">Idea</a>, for instance, is probably the best IDE that I've ever seen and I believe that you can run it on a development-quality machine with your choice of OS. But I think for most companies, the ability to use different platforms for <em>different</em> purposes is what's important: clients can use Palms, Macs, Pocket PCs, and Windows, my Web servers and middle-tiers run on cheap blades, my database server is a multiprocessing honker and I still have the mainframe in the basement to deal with. So I think that for most people, interoperability is significantly more important than replaceability. When it comes to interoperability between machines, you have CORBA, the platform protocol (Java's RMI or .NET Remoting), and Web Services. Of those, I believe that Web Services are the best route going forward and I believe that .NET leap-frogged J2EE in terms of Web Services.
:::</p>
<p>::: {.date}
:::</p>
<p>::: {.date}
As far as Mono and Gnu Portable .NET go, though, I do <em>not</em> believe that they are today serious alternatives to .NET on Windows. I hope they are one day, but <em>if</em> replaceability of Windows and, say, Linux <em>is</em> a requirement, you should continue to choose Java, C++, or Delphi.
:::</p>Everett Visual Studio NET 2003 Is Now In2002-11-19T05:55:00-10:002002-11-19T05:55:00-10:00larrytag:knowing.net,2002-11-19:/posts/2002/11/everett-visual-studio-net-2003-is-now-in/<p>Everett (Visual Studio .NET 2003) is now in final beta and available for download to MSDN subscribers.</p>
<p>Big news for me is that all the code for <em>Thinking in C#</em> (did you know that you can download the digital version?) has been checked and that VSN2K3 (oh yeah, <em>that's</em> attractive …</p><p>Everett (Visual Studio .NET 2003) is now in final beta and available for download to MSDN subscribers.</p>
<p>Big news for me is that all the code for <em>Thinking in C#</em> (did you know that you can download the digital version?) has been checked and that VSN2K3 (oh yeah, <em>that's</em> attractive) contains built-in support for programming PocketPCs. It's simple, simple, simple, and described in Appendix C of TiC#.</p>J2EE Vs NET Smackdown I Was A Referee Last Night At The J2EE Vs Microsoft Smackdown Event C2002-11-19T00:28:00-10:002002-11-19T00:28:00-10:00larrytag:knowing.net,2002-11-19:/posts/2002/11/j2ee-vs-net-smackdown-i-was-a-referee-last-night-at-the-j2ee-vs-microsoft-smackdown-event-c/<p><strong>J2EE vs. .NET "Smackdown"</strong></p>
<p>I was a "referee" last night at the J2EE vs. Microsoft "Smackdown" event created by <a href="http://www.sdforum.org">SD Forum</a> and held in Redwood Shores. There were about 300 people in the room and afterwards I talked with both teams and both felt that it was a good event …</p><p><strong>J2EE vs. .NET "Smackdown"</strong></p>
<p>I was a "referee" last night at the J2EE vs. Microsoft "Smackdown" event created by <a href="http://www.sdforum.org">SD Forum</a> and held in Redwood Shores. There were about 300 people in the room and afterwards I talked with both teams and both felt that it was a good event, so I think there's a good chance that the companies will continue to have at least some kind of "on stage" dialogue with each other, which I feel is the key thing.</p>
<p>Questions were prepared by SD Forum and given to both companies in advance, so they (a) weren't as technically focussed as I probably would have preferred but (b) the companies were able to prepare arguments, with slides and quotes and graphs, which I think was very good. The crowd favored Java, but when I asked how many in the people considered "truly open to the debate" about which platform to choose, a majority of the audience stood.</p>
<p>Several themes emerged: Sun strongly promoted the "community" message while Microsoft had more diverse themes: simplicity == productivity, universal connectivity == heterogeneoous environments, and lower costs. On a purely debating level, I think Sun did a better job of "staying on message" and you <em>did</em> have the sense that the pro-Java crowd noise occasionally damped the Microsoft guys enthusiasm. There was a noticeable exception when Microsoft's Dave Weller answered a question on cost and just hammered through his slides while shouting "400% productivity increase! 200% productivity increase! ... etc ..."</p>
<p>On the other hand, Sun slung mud, especially on the question about security. Security is far too important a subject to be "answered" by saying "they suck." Which was, unfortunately, part of Microsoft's answer to the Pet Store Application question. "They started it!" was a literal quote and both sides made mention of the fact that the use of the Pet Store Application as a "benchmark" was started by Larry Ellison.</p>
<p>To my surprise and disappointment, Microsoft is absolutely not backing off the use of the Pet Store Application as an "independent middleware benchmark." Microsoft's Dino Chelsea showed graphs showing, for instance, SOAP throughput where they did very well; he said that was an area driven by XML serialization/deserialization "and that is something we have optimized the heck out of." But doesn't that just raise the question "So if someone writes a lightning-fast XML parser for Java, those ratios might dramatically change? Is that an important datapoint for a CTO trying to make a platform decision?"</p>
<p>During a break, a Sun guy tried to float a trial balloon on the basis by which a lawsuit regarding Pet Store might be founded and I instantly responded with: "In retrospect, do you think the JNI lawsuit was beneficial to the community?" "No," he said.</p>
<p>Another note I made was that Sun is still making what I think of as the ".NOT YET" argument, the claim that .NET is vaporware. I think that argument is on its last legs and should be retired; Microsoft has pretty good customers running .NET at this point (one that widened my eyes was a Merrill Lynch voice-driven application that does <em>21,000</em> transactions per second!). Sun's Tim (Tom? Something else?) Daly, an Australian guy, did a really nice argument on the importance of middleware benchmarking versus database benchmarking, while Sun's Sang Shin was clearly the most versed in professional speaking (modulating his voice, controlled arm gestures, etc.) Microsoft's Weller had the single-strongest presentation with his "cost and productivity" slides.</p>
<p>Afterwards, Alan Zeichick of <a href="https://sdtimes.com/">SD Times</a> (another ref) and I met with Dino Chelsea and Shauna Sickels of Waggener Edstrom. It was primarily just a chance for them to get "face time" with Alan, as SD Times is becoming more and more influential, but we <em>did</em> suggest that it would benefit the community if Microsoft and Sun had a "plug fest" in which they demonstrated Java applets hitting .NET Web Services and .NET rich clients hitting EJB-based Web Services. We suggested that Microsoft trade a booth at PDC for a booth at JavaOne! They pointed out that such a thing would have enormous political obstacles, but I still think it would be good for the community: neither J2EE nor .NET is going to achieve monopoly marketshare and many companies will move forward with applications written on <em>both</em> platforms (Microsoft very clearly acknowledged this reality, which I think is good). There are several natural "join points" (to borrow a phrase from aspect-oriented programming) for integration, but clearly Web Services is the one of most interest to technical managers today.</p>
<p>I think both companies did an excellent job and I was very happy to hear them acknowledge the importance of live events, in a variety of different formats. If an event such as this is organized in your area, I think it's definitely worth going to: it is, of course, primarily a marketing exercise by both companies, but I think the content was quite substantial and provided audience members a good understanding of the substantive issues of the platform decision.</p>Byte Going Payperview In Bid To Stay Afloat Byte Was The2002-11-17T02:13:00-10:002002-11-17T02:13:00-10:00larrytag:knowing.net,2002-11-17:/posts/2002/11/byte-going-payperview-in-bid-to-stay-afloat-byte-was-the/<p>Byte going pay-per-view in bid to stay afloat. <em>Byte</em> was <em>the</em> magazine for the personal computer enthusiast "in the day." Personally, I think that a cycle has come full around and there's probably demand for a print <em>Byte</em>-like magazine again but in the words of Austin Powers: "Alas, that …</p><p>Byte going pay-per-view in bid to stay afloat. <em>Byte</em> was <em>the</em> magazine for the personal computer enthusiast "in the day." Personally, I think that a cycle has come full around and there's probably demand for a print <em>Byte</em>-like magazine again but in the words of Austin Powers: "Alas, that train has sailed."</p>Babymsi Installation Complete Reboot Im Proud To Announce That At 107am This Morni2002-11-16T06:25:00-10:002002-11-16T06:25:00-10:00larrytag:knowing.net,2002-11-16:/posts/2002/11/babymsi-installation-complete-reboot-im-proud-to-announce-that-at-107am-this-morni/<p><strong><em>Baby.msi Installation complete, reboot?</em></strong></p>
<p><em>I'm proud to announce that at 1:07am this morning Christina and my first major release went gold. </em><em>Claire Elizabeth Whittington</em><em> was born at 8 pounds even. Mom and baby are both doing fine and are asleep. Dad is sooo sleepy. Guess I've got plenty …</em></p><p><strong><em>Baby.msi Installation complete, reboot?</em></strong></p>
<p><em>I'm proud to announce that at 1:07am this morning Christina and my first major release went gold. </em><em>Claire Elizabeth Whittington</em><em> was born at 8 pounds even. Mom and baby are both doing fine and are asleep. Dad is sooo sleepy. Guess I've got plenty more of that to look forward to :) What, you thought you were going to get away without having to look at</em> <em>pictures?</em></p>
<p>Congratulations Jason!</p>Blogging With Ink From A Tablet PC If You Have IE Check It Out Unfortunat2002-11-16T05:26:00-10:002002-11-16T05:26:00-10:00larrytag:knowing.net,2002-11-16:/posts/2002/11/blogging-with-ink-from-a-tablet-pc-if-you-have-ie-check-it-out-unfortunat/<p><strong>Blogging with ink from a Tablet PC</strong></p>
<p>If you have IE, check it out. Unfortunately, Netscape can't render it. This is what it says:</p>
<p><strong>Blogging from Tablet</strong></p>
<p>Well, it's easy enough to write a client app that uses the Blogger API to add ink-based notes to your blog, but the …</p><p><strong>Blogging with ink from a Tablet PC</strong></p>
<p>If you have IE, check it out. Unfortunately, Netscape can't render it. This is what it says:</p>
<p><strong>Blogging from Tablet</strong></p>
<p>Well, it's easy enough to write a client app that uses the Blogger API to add ink-based notes to your blog, but the problem is that the ink is saved in a MIME-TYPE that Netscape cannot under[stand]. So...</p>
<p>1) Either you have to render all your ink as text -- which SUCKS [and pretty much undermines the whole point of ink blogging]</p>
<p>2) Or... save your entry as a TIFF, which equally sucks because the ink becomes non-editable.</p>
<p>3) Or... you have to have a blog that is not readable by some [which is probably unacceptable]</p>Anyone Know How To Hook Into An IRDA Connection Interesting An Irda Connection Is Just A Specialized Kind Of Sock2002-11-15T23:25:00-10:002002-11-15T23:25:00-10:00larrytag:knowing.net,2002-11-15:/posts/2002/11/anyone-know-how-to-hook-into-an-irda-connection-interesting-an-irda-connection-is-just-a-specialized-kind-of-sock/<p>~~Anyone know how to hook into an IRDA connection?~~ ~~Interesting. An Irda connection is just a specialized kind of socket; .NET provides good low-level access to sockes, so it should be possible to write a managed app that hooks into Irda connections.~~ Apparently, there is a nice high-level interface called …</p><p>~~Anyone know how to hook into an IRDA connection?~~ ~~Interesting. An Irda connection is just a specialized kind of socket; .NET provides good low-level access to sockes, so it should be possible to write a managed app that hooks into Irda connections.~~ Apparently, there is a nice high-level interface called OBEX that seems to be just what I'm interested in... ObApp: every tablet (or, if you must, laptop) in a meeting room "discovers" each other and gets the latest agenda / handouts, etc.</p>
<p>></p>Dan Bricklins First Impressions Of The Tablet PC2002-11-15T05:49:00-10:002002-11-15T05:49:00-10:00larrytag:knowing.net,2002-11-15:/posts/2002/11/dan-bricklins-first-impressions-of-the-tablet-pc/<p><a href="http://danbricklin.com/log/tabletpc.htm"><em>Dan Bricklin's</em></a> <em>first impressions of the Tablet PC. [</em><a href="http://scripting.com/"><em>Scripting News</em></a><em>]</em></p>
<p>Having used an Acer TravelMate for about 3 weeks, I think Dan is spot-on with most of his comments, especially about the primacy of reading, instant-on, etc. to the tablet experience. However, I seem to have had the best luck …</p><p><a href="http://danbricklin.com/log/tabletpc.htm"><em>Dan Bricklin's</em></a> <em>first impressions of the Tablet PC. [</em><a href="http://scripting.com/"><em>Scripting News</em></a><em>]</em></p>
<p>Having used an Acer TravelMate for about 3 weeks, I think Dan is spot-on with most of his comments, especially about the primacy of reading, instant-on, etc. to the tablet experience. However, I seem to have had the best luck with handwriting recognition of anyone I've heard -- for me, it works startling well when inputting English (as opposed to, say, passwords or computer code).</p>Borland Investigating Mono For Kylix Borland Is Inv2002-11-15T01:59:00-10:002002-11-15T01:59:00-10:00larrytag:knowing.net,2002-11-15:/posts/2002/11/borland-investigating-mono-for-kylix-borland-is-inv/<p>*Borland Investigating Mono for Kylix. "Borland is investigating use of Ximian Inc's Project Mono in Kylix, as a possible means for Windows developers to move .NET applications to Linux." [sellsbrothers.com: Windows Developer News]. * via [Managed Space]</p>C And Java The Smart Distinctions Article By Do2002-11-13T23:27:00-10:002002-11-13T23:27:00-10:00larrytag:knowing.net,2002-11-13:/posts/2002/11/c-and-java-the-smart-distinctions-article-by-do/<p><a href="http://www.jot.fm/issues/issue_2002_11/article4/"><em>C# and Java: The Smart Distinctions</em></a><em>. Article by Dominik Gruntz from Journal of Object Technology (Nov-Dec 2002 Issue), this article shows some of the subtle difference between C# and Java. [sellsbrothers.com: Windows Developer News] via [Sam Gentile's Weblog]</em></p>
<p>This is a good article. I think <em>Thinking in C#</em> explicitly …</p><p><a href="http://www.jot.fm/issues/issue_2002_11/article4/"><em>C# and Java: The Smart Distinctions</em></a><em>. Article by Dominik Gruntz from Journal of Object Technology (Nov-Dec 2002 Issue), this article shows some of the subtle difference between C# and Java. [sellsbrothers.com: Windows Developer News] via [Sam Gentile's Weblog]</em></p>
<p>This is a good article. I think <em>Thinking in C#</em> explicitly discusses each one except #7.</p>An Important Affirmation Of The Core Strengths Of C Games Are Going To Be Written Mostly In C2002-11-13T23:13:00-10:002002-11-13T23:13:00-10:00larrytag:knowing.net,2002-11-13:/posts/2002/11/an-important-affirmation-of-the-core-strengths-of-c-games-are-going-to-be-written-mostly-in-c/<p><em>An important affirmation of the core strengths of C++: "Games are going to be written mostly in C++ for the next umpteen-thousand years. Even if MS comes through with their promise to make managed DirectX run at 98% performance, you won't be seeing C# games on the shelves. You're probably …</em></p><p><em>An important affirmation of the core strengths of C++: "Games are going to be written mostly in C++ for the next umpteen-thousand years. Even if MS comes through with their promise to make managed DirectX run at 98% performance, you won't be seeing C# games on the shelves. You're probably never gonna see any form of CLR running on a console." \<snip></em></p>
<hr>
<p>[Sam Gentile's Weblog]></p>
<p>Gotta' disagree on this one: I'd be willing to bet my Dreamcast that within 36 months, a top 10 game will be written <em>or scripted</em> in managed code. From Myst to Deer Hunter to Roller Coaster Tycoon, the PC market routinely embraces games that one can imagine driving from managed code.</p>Im A Judge For The NET Vs J2EE Smackdown Next Week Ive Been Asked To Be One Of The Judges For Ne2002-11-13T22:16:00-10:002002-11-13T22:16:00-10:00larrytag:knowing.net,2002-11-13:/posts/2002/11/im-a-judge-for-the-net-vs-j2ee-smackdown-next-week-ive-been-asked-to-be-one-of-the-judges-for-ne/<p><strong>I'm a judge for the .NET vs. J2EE Smackdown Next Week</strong></p>
<p>I've been asked to be one of the judges for next Monday's .NET vs. J2EE "Smackdown" event in Redwood Shores, which will have reps from Microsoft and Sun slinging code on stage. It ought to be a blast and …</p><p><strong>I'm a judge for the .NET vs. J2EE Smackdown Next Week</strong></p>
<p>I've been asked to be one of the judges for next Monday's .NET vs. J2EE "Smackdown" event in Redwood Shores, which will have reps from Microsoft and Sun slinging code on stage. It ought to be a blast and apparently there are still plenty of seats available, so if you're in the Bay Area, check it out.</p>
<p>If you're worried that I'm hopelessly biased towards .NET as author of <em>Thinking in C#</em> (release candidate available for download), you may not know that in addition to being editor of <em>Computer Language</em> magazine, I was the first non-Sun employee to write a technical article on Java, wrote the Servlets Solution column for Java Pro, and led several EJB development projects. And really, referees don't do much except set up the challenges.</p>
<p>But what do you know? There's a reference to the Pet Shop in the preparatory material. As I wrote a few days ago, I think the Pet Shop Application must not be the basis for any real discussion of enterprise development productivity or performance. So I'm looking for alternatives: <strong>If you were me, what simple question or challenge would you present to best frame the questions of enterprise developer productivity and enterprise application performance?</strong></p>The Latest Joel On Software The Law Of Leaky Abstractio2002-11-11T22:34:00-10:002002-11-11T22:34:00-10:00larrytag:knowing.net,2002-11-11:/posts/2002/11/the-latest-joel-on-software-the-law-of-leaky-abstractio/<p>The latest Joel on Software "<a href="https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/">The Law of Leaky Abstractions</a>" is, as always, well worth reading.</p>Anders Presentation From OOPSLA Co2002-11-11T05:07:00-10:002002-11-11T05:07:00-10:00larrytag:knowing.net,2002-11-11:/posts/2002/11/anders-presentation-from-oopsla-co/<p>Anders' presentation from OOPSLA contains some code samples of features that will be coming in the next major version of C# (note that these features are <em>not</em> in the Everett Visual Studio release which is due shortly; these features will <em>probably</em> be hitting the streets around a year from now …</p><p>Anders' presentation from OOPSLA contains some code samples of features that will be coming in the next major version of C# (note that these features are <em>not</em> in the Everett Visual Studio release which is due shortly; these features will <em>probably</em> be hitting the streets around a year from now.)</p>New C Language Features Someday DIV StyleCOLOR 562002-11-10T03:19:00-10:002002-11-10T03:19:00-10:00larrytag:knowing.net,2002-11-10:/posts/2002/11/new-c-language-features-someday-div-stylecolor-56/<p>New C# Language Features (someday).</p>
<p>::: {style="COLOR: #565656"}
Chris Sells: "On November 7th, at the OOPSLA Conference in Seattle, WA, C# creator Anders Hejlsberg unveiled several potential language features for the next major release of Visual C# .NET. The four primary features Anders spoke about were:</p>
<p>-Generics, a form of …</p><p>New C# Language Features (someday).</p>
<p>::: {style="COLOR: #565656"}
Chris Sells: "On November 7th, at the OOPSLA Conference in Seattle, WA, C# creator Anders Hejlsberg unveiled several potential language features for the next major release of Visual C# .NET. The four primary features Anders spoke about were:</p>
<p>-Generics, a form of C++ templates that makes reusing existing code easier<br>
-Iterators, a construct that makes traversing collections of data significantly faster and easier<br>
-Anonymous methods, an easier way to perform simple tasks using delegates<br>
-Partial types, a means for programmers to split code across multiple files"
:::</p>
<p>[Sam Ruby]</p>During The Tablet PC Launch Keynote Gates Talked About Immersive Reading And A Usable Experience For Interacting W2002-11-10T03:15:00-10:002002-11-10T03:15:00-10:00larrytag:knowing.net,2002-11-10:/posts/2002/11/during-the-tablet-pc-launch-keynote-gates-talked-about-immersive-reading-and-a-usable-experience-for-interacting-w/<p><em>During the Tablet PC launch keynote, Gates talked about "immersive reading" and ... a usable experience for interacting with published media on a computing device. .... I think it will be a lonnnng time before people are comfortable reading War and Peace or Wired on a computer screen. I like the physical …</em></p><p><em>During the Tablet PC launch keynote, Gates talked about "immersive reading" and ... a usable experience for interacting with published media on a computing device. .... I think it will be a lonnnng time before people are comfortable reading War and Peace or Wired on a computer screen. I like the physical asset aspect of literature and published media in general....The value of literature is much, much more than just the words and the stories they tell.</em> [Matt Pope's Radio Weblog]</p>
<p>I disagree. Not about the sensual experience of print or the bevy of cultural aspects (I have a bookshelf of first editions of Patrick O'Brian novels in my living room -- of course it's a statement!), but about the desirability and usability of the vast majority of print. Just last week, I threw out several hundred pounds (14 shopping bags) of computer books out of sheer shelf-space consideration. And every time I do this, I find myself a month later regretting having thrown out a specific title. I would <em>much</em> rather my technical library be on DVD or CDs than in print.</p>
<p>Having used a Tablet PC for the past 3 weeks, there's no doubt that it's the best way to read long digital pieces to date. Is it perfect? Not even close; even with sub-pixel anti-aliasing a la ClearType, the screen is not yet at the resolution of a laser printer, much less that of a printing press. But in a world where, for instance, the release candidate of <em>Thinking in C#</em> is available in a \<span class="math">\(5 digital version or can be ordered at Amazon for \\)</span>34.99, the economics of digital are compelling. Would I read <em>War and Peace</em> on a computer screen? Well, a digital version from Project Gutenberg for <a href="https://onlinebooks.library.upenn.edu/">free</a> and a print version from <a href="https://www.amazon.com/exec/obidos/ASIN/0140444173/qid%3d1036962565/sr%3d2-1/ref%3dsr_2_1/103-1214375-9967861">Amazon</a> is \$13.95; for me, who has no book shelf space and, let's face it, I might never get beyond the first chapter, I'd go with Gutenberg. And why kill a tree for the kind of <a href="https://www.amazon.com/exec/obidos/search-handle-url/index%3dbooks%26field-author%3dHiaasen%252C%2520Carl/103-1214375-9967861">disposable fiction</a> that you buy before a plane flight? The tablet formfactor is one that you can actually read while sitting on a train or plane, which makes it vastly different from both notebooks and PDAs. If you don't believe me, I strongly advise you to try it: buy a Tablet PC and the release candidate of <em>Thinking in C#.</em></p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Oi The First Winter Storm Of The Season Just Knocked Out My Power For 60 Hours Catching Up A Hrefhttp2002-11-10T00:31:00-10:002002-11-10T00:31:00-10:00larrytag:knowing.net,2002-11-10:/posts/2002/11/oi-the-first-winter-storm-of-the-season-just-knocked-out-my-power-for-60-hours-catching-up-a-hrefhttp/<p>Oi! The first Winter storm of the season just knocked out my power for 60 hours. Catching up...</p>
<p><strong><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five:</a></strong></p>
<p><strong>1. Did you vote in your last elections?</strong></p>
<p>Of course. I've voted in every election since I was 18. I am appalled that people don't vote.</p>
<p><strong>2. Do you know …</strong></p><p>Oi! The first Winter storm of the season just knocked out my power for 60 hours. Catching up...</p>
<p><strong><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five:</a></strong></p>
<p><strong>1. Did you vote in your last elections?</strong></p>
<p>Of course. I've voted in every election since I was 18. I am appalled that people don't vote.</p>
<p><strong>2. Do you know who your elected representatives are?</strong></p>
<p>Of course.</p>
<p><strong>3. Have you ever contacted an elected representative? If so, what was it about?</strong></p>
<p>Yes, I write letters regularly. Environmental issues are my major interest, although sometimes I just write to register my displeasure at this vote or that piece of political posturing.<br>
<strong>4. Have you ever participated in a demonstration?</strong></p>
<p>I used to. I've come to think that demonstrations are the only form of organized behavior more debased and reactionary than media coverage. <br>
<strong>5. Have you ever volunteered in an election? What was the result?</strong></p>
<p>No. I've donated to a lot of measures and some candidates, but I've never worked phones or anything like that.</p>Putting The Web Back Into Web Services Mark Baker Thinks G2002-11-07T05:21:00-10:002002-11-07T05:21:00-10:00larrytag:knowing.net,2002-11-07:/posts/2002/11/putting-the-web-back-into-web-services-mark-baker-thinks-g/<p>Putting the Web back into Web services. Mark Baker thinks GWS is on the right track, but fails the uniform interface litmus test: <strong>...</strong> [Jon's Radio]</p>Feeling Lethargic Blame The2002-11-07T05:13:00-10:002002-11-07T05:13:00-10:00larrytag:knowing.net,2002-11-07:/posts/2002/11/feeling-lethargic-blame-the/<p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A121829145166750577453922527098046549677%26anid%3D121829145166750577453922527098046549677&u=121829145166750577453922527098046549677&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553670252296&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A121829145166750577453922527098046549677%26anid%3D121829145166750577453922527098046549677&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">Feeling lethargic? Blame the PC</a>. Japanese researchers publish a study showing that prolonged daily computer use can make you sore and deplete your strength, energy and motivation. [<a href="https://www.cnet.com/news/">CNET News.com</a>]</p>TabletPC Simple To Program But Programming Is Key For The Past Few Weeks I Have Been Working With2002-11-07T00:36:00-10:002002-11-07T00:36:00-10:00larrytag:knowing.net,2002-11-07:/posts/2002/11/tabletpc-simple-to-program-but-programming-is-key-for-the-past-few-weeks-i-have-been-working-with/<p><strong>TabletPC: Simple To Program, But Programming Is Key</strong></p>
<p>For the past few weeks, I have been working with an Acer TravelMate C100 TabletPC. I will be reviewing it more fully for SD Times in the coming weeks and I hope to put up videos of the TabletPC in action and …</p><p><strong>TabletPC: Simple To Program, But Programming Is Key</strong></p>
<p>For the past few weeks, I have been working with an Acer TravelMate C100 TabletPC. I will be reviewing it more fully for SD Times in the coming weeks and I hope to put up videos of the TabletPC in action and being programmed, but am having some difficulty putting together the media. Stay tuned.</p>
<p>In the meantime, I want to say that one's first experience with the TabletPC will lead to a full-fledged geek-out. After the initial rush, though, one realizes how <em>radically</em> different the pen is from a mouse and keyboard and how the formfactor screams for new user interfaces: you will <em>not</em> be using a pen as your only (or perhaps even primary) input device to the TabletPC until a whole new generation of software is written.</p>
<p>Finally, and to the point I'll be making with subsequent videos and source code, programming the Tablet PC in C# (or other .NET managed languages) is <em>very easy</em> from a technical perspective (knowing <em>what</em> user interface to build for the form factor is a much harder question).</p>Introductory Offer Thinking In C Release C2002-11-06T02:05:00-10:002002-11-06T02:05:00-10:00larrytag:knowing.net,2002-11-06:/posts/2002/11/introductory-offer-thinking-in-c-release-c/<p><strong>Introductory offer:</strong> <strong><em>Thinking in C# Release Candidate</em> digital version for just \$5!</strong></p>
<p>This non-printable version of <em>Thinking in C#</em> contains 249 sample programs in almost 1,000 pages and is available for a limited time for just <em>\<span class="math">\(5*. The print version lists for \\)</span>49.99 and the digital version is …</em></p><p><strong>Introductory offer:</strong> <strong><em>Thinking in C# Release Candidate</em> digital version for just \$5!</strong></p>
<p>This non-printable version of <em>Thinking in C#</em> contains 249 sample programs in almost 1,000 pages and is available for a limited time for just <em>\<span class="math">\(5*. The print version lists for \\)</span>49.99 and the digital version is almost identical (the index is not yet finalized in the digital version, although the Acrobat file is fully searchable). Complete source code is available for download. This is a limited time offer to test the viability of an eBook edition of </em>Thinking in C#<em>: this book will </em>never be sold for less*.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Oh Man My Googlism Is Just Sad MYSQL Error In QueryINSERT INTO Googli2002-10-31T23:38:00-10:002002-10-31T23:38:00-10:00larrytag:knowing.net,2002-10-31:/posts/2002/10/oh-man-my-googlism-is-just-sad-mysql-error-in-queryinsert-into-googli/<p>Oh, man, my <a href="http://www.googlism.com/">Googlism</a> is just sad:</p>
<p>MYSQL Error in query:<br>
INSERT INTO googlism (ism,alpha,date,type) VALUES ('larry o'brien', 'l', now(), '1')<br>
Error: You have an error in your SQL syntax near 'brien', 'l', now(), '1')' at line 1</p>Pet Shop Boys My Take On The Pet Shop Brouhaha And2002-10-31T02:32:00-10:002002-10-31T02:32:00-10:00larrytag:knowing.net,2002-10-31:/posts/2002/10/pet-shop-boys-my-take-on-the-pet-shop-brouhaha-and/<p>Pet Shop Boys: My take on the Pet Shop brouhaha and the truth about .NET vs. J2EE performance.</p>Palm OS 6 To Be Based On BeOS And NET Compatible Its From The Reg2002-10-30T06:18:00-10:002002-10-30T06:18:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/palm-os-6-to-be-based-on-beos-and-net-compatible-its-from-the-reg/<p>Palm OS 6 to be based on BeOS and .NET compatible? It's from The Register, so take it with a grain of salt.</p>The Consistently Excellent Dino Exposito Has A Nice A Hrefhttpmsdnmicrosoftcomlibrarydefaultaspurlmsdnmag2002-10-30T03:25:00-10:002002-10-30T03:25:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/the-consistently-excellent-dino-exposito-has-a-nice-a-hrefhttpmsdnmicrosoftcomlibrarydefaultaspurlmsdnmag/<p><em>The consistently excellent Dino Exposito has a nice</em> <em>introduction to .NET Remoting.</em> <em>Unfortunately its in VB.NET but he's a great writer and teacher and it looks good. [Sam Gentile's Weblog]</em></p>Not Only Can You Download Ecco You Can Download A Hrefhttpcheerleadery2002-10-30T02:59:00-10:002002-10-30T02:59:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/not-only-can-you-download-ecco-you-can-download-a-hrefhttpcheerleadery/<p>Not only can you download Ecco, you can download Agenda! Agenda was one of the best DOS programs ever. Like Ecco, it was a Personal Information Manager. If you ask "Like Outlook?" the answer is "No! Nothing like Outlook!" As far as I know, Outlook does nothing to relate items …</p><p>Not only can you download Ecco, you can download Agenda! Agenda was one of the best DOS programs ever. Like Ecco, it was a Personal Information Manager. If you ask "Like Outlook?" the answer is "No! Nothing like Outlook!" As far as I know, Outlook does nothing to relate items from disparate sources. With Agenda, if you jot down "Meet Alan for lunch Tuesday" it will link up to your contact list and calendar -- it was wonderful for managing complex to do lists. Zoe and <a href="http://www.osafoundation.org/">Chandler</a> make me suspect that personal information management is reemerging as the most likely ground from which the next killer app will emerge...</p>OReilly Has Announced OnDotNetE2002-10-30T02:41:00-10:002002-10-30T02:41:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/oreilly-has-announced-ondotnete/<p><a href="https://www.oreilly.com/"><em>O'Reilly</em></a> <em>has announced</em> <a href="https://www.oreilly.com/ideas"><em>OnDotNet</em></a><em>. At first glance it apeared to be a renaming of the .NET Dev Center until I found</em> <a href="https://www.oreilly.com/?path=/pub/wlg/2198"><em>Scott's editorial</em></a><em>: "The goal of ONDotnet.com is to create a destination for the .NET community by ensuring content that is immediately applicable to working and weekend-warrior developers, while …</em></p><p><a href="https://www.oreilly.com/"><em>O'Reilly</em></a> <em>has announced</em> <a href="https://www.oreilly.com/ideas"><em>OnDotNet</em></a><em>. At first glance it apeared to be a renaming of the .NET Dev Center until I found</em> <a href="https://www.oreilly.com/?path=/pub/wlg/2198"><em>Scott's editorial</em></a><em>: "The goal of ONDotnet.com is to create a destination for the .NET community by ensuring content that is immediately applicable to working and weekend-warrior developers, while not ignoring the future of .NET and all of its related technologies (e.g. Web Services, GXA, XQuery, etc.)." Having Scott as the editor is fantastic. Scott has been in the trenches for years and as the</em> <a href="https://www.afternic.com/forsale/adoguy.com?utm_campaign=TDFS_Site&traffic_id=gddy&traffic_type=gddy"><em>ADO Guy</em></a> <em>has been dispensing valuable knowledge for years. Congrats!<br>
[Sam Gentile's Weblog]</em></p>Unit Tests Theres Nothing Like Doing D2002-10-30T02:40:00-10:002002-10-30T02:40:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/unit-tests-theres-nothing-like-doing-d/<p><em>Unit tests. There's nothing like doing drastic refactoring to the implementation of a class when you trust the unit tests to be solid. It's so much easier. [</em><a href="http://chimpswithkeyboards.com/blog/"><em>Jon Shute's Weblog</em></a><em>] Yes!! That's the key. [Sam Gentile's Weblog]</em> The thing is, "unit testing" is almost a misnomer for what's going on …</p><p><em>Unit tests. There's nothing like doing drastic refactoring to the implementation of a class when you trust the unit tests to be solid. It's so much easier. [</em><a href="http://chimpswithkeyboards.com/blog/"><em>Jon Shute's Weblog</em></a><em>] Yes!! That's the key. [Sam Gentile's Weblog]</em> The thing is, "unit testing" is almost a misnomer for what's going on; an xUnit test is as much about <em>expressing</em> requirements as it is about reflecting the inherent capabilities of the software module. For instance, let's say you had a method string Foo(string input); from a strictly "testing inherent capabilities" standpoint, you'd test this by sending it a null, a string a single character long, super-huge buffer-overflowing strings, etc. But from an xUnit standpoint, your first test might be testing that if sent "cow" it returns "woc" and your second might be that if you send it "Cow" it returns "woc" So, in this case, the xUnit tests are expressing, concretely, that the Foo method means "return the string reversed and converted to lowercase." When you have tons of such things and "you trust them to be solid" what you're saying is not so much "This dramatic refactoring does not change the inherent capabilities of the 500 software modules comprising it" as "This dramatic refactoring <strong>does not change the value delivered to the client</strong>." And <em>that</em> is a very good feeling to have. (Earlier this year, I refactored a template method and it affected <em>every single response</em> the system produced. I did it and integrated it in a single long day. I would have been absolutely paralyzed by doubt had I not had a solid xUnit suite.)</p>IBM CEO Stakes2002-10-30T02:27:00-10:002002-10-30T02:27:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/ibm-ceo-stakes/<p><em>IBM CEO stakes \$10 billion on 'on-demand' future. Palmisano says next wave of connected computing worth betting on [InfoWorld: Top News]</em> I can't find the whitepaper referenced in the article, but I <em>think</em> that what they're talking about is what elsewhere on the site they call "autonomic computing" along with …</p><p><em>IBM CEO stakes \$10 billion on 'on-demand' future. Palmisano says next wave of connected computing worth betting on [InfoWorld: Top News]</em> I can't find the whitepaper referenced in the article, but I <em>think</em> that what they're talking about is what elsewhere on the site they call "autonomic computing" along with for-rent grid computing. If anyone knows for sure, drop a comment.</p>Little Kittycats Wearing Viking Outfitsnbspsing Zeppelin Not That Im Avoidi2002-10-30T02:12:00-10:002002-10-30T02:12:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/little-kittycats-wearing-viking-outfitsnbspsing-zeppelin-not-that-im-avoidi/<p><a href="http://www.rathergood.com/vikings/">Little kittycats wearing viking outfits sing Zeppelin</a>. Not that I'm avoiding work today or anything.</p>A Cool Utility InnbspTweakUI For XP Allows You2002-10-30T01:58:00-10:002002-10-30T01:58:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/a-cool-utility-innbsptweakui-for-xp-allows-you/<p>A cool utility in TweakUI for XP allows you to add "search prefixes" to Internet Explorer. For instance, if you add http://www.google.com/search?q=%s you can say "google foo" or if you add http://www.dictionary.com/search?q=%s you can say "define cow".</p>Borland Gets TogetherS2002-10-30T01:05:00-10:002002-10-30T01:05:00-10:00larrytag:knowing.net,2002-10-30:/posts/2002/10/borland-gets-togethers/<p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A030910156900548934280379306676984253748%26anid%3D030910156900548934280379306676984253748&u=030910156900548934280379306676984253748&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553646587634&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A030910156900548934280379306676984253748%26anid%3D030910156900548934280379306676984253748&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid="><em>Borland gets TogetherSoft for \$185 million</em></a><em>. The software maker says acquiring TogetherSoft will help Borland bolster its programming tools lineup. [</em><a href="https://www.cnet.com/news/"><em>CNET News.com</em></a><em>]</em></p>
<p>Well, this is interesting. TogetherSoft has never been the best CASE tool, while JBuilder <em>has</em> traditionally been the best Java-based IDE. Will TogetherSoft bring down the quality …</p><p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A030910156900548934280379306676984253748%26anid%3D030910156900548934280379306676984253748&u=030910156900548934280379306676984253748&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553646587634&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A030910156900548934280379306676984253748%26anid%3D030910156900548934280379306676984253748&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid="><em>Borland gets TogetherSoft for \$185 million</em></a><em>. The software maker says acquiring TogetherSoft will help Borland bolster its programming tools lineup. [</em><a href="https://www.cnet.com/news/"><em>CNET News.com</em></a><em>]</em></p>
<p>Well, this is interesting. TogetherSoft has never been the best CASE tool, while JBuilder <em>has</em> traditionally been the best Java-based IDE. Will TogetherSoft bring down the quality of JBuilder or will JBuilder bring up the quality of TogetherJ?</p>
<p>Borland's strategy re .NET is not yet clear. Borland has the tricky job of straddling what are now <em>four</em> platforms: native Linux apps with Kylix, Java applications with JBuilder / TogetherJ, native Intel with C++ Builder, and .NET. Mind you, each of these platforms involves a different library. If it were just code generation, I could see the company going down the "platform neutral" path, but the effort involved in going forward with library compatibility in so many disparate areas while still allocating sufficient resources to the primary task of improving the IDE and programming experience seems impossible.</p>
<p>Ramifications: Will Rational cede the integrated Java CASE market and move into an even tighter emphasis on .NET?</p>Smart Guy Joins Microsoft Film At 11 Peter Drayton2002-10-29T23:32:00-10:002002-10-29T23:32:00-10:00larrytag:knowing.net,2002-10-29:/posts/2002/10/smart-guy-joins-microsoft-film-at-11-peter-drayton/<p><strong>Smart guy joins Microsoft, film at 11.</strong></p>
<p><a href="http://www.razorsoft.net/">Peter Drayton</a>, who's written some of the better stuff about REST and <a href="http://www.razorsoft.net/">SOAP</a> has taken a job at Microsoft as a Program Manager in the Common Language Runtime group. Reading the job description, which Peter called his "dream job" in a blog entry …</p><p><strong>Smart guy joins Microsoft, film at 11.</strong></p>
<p><a href="http://www.razorsoft.net/">Peter Drayton</a>, who's written some of the better stuff about REST and <a href="http://www.razorsoft.net/">SOAP</a> has taken a job at Microsoft as a Program Manager in the Common Language Runtime group. Reading the job description, which Peter called his "dream job" in a blog entry at the time, reveals a fundamental strength in Microsoft's approach to advancing the .NET platform.</p>
<p>Microsoft will make available "resources for a technology transfer team that can help move features that have proven useful to the research community and internal compiler teams into [the CLR]." Technology transfer is a huge (or, at least, significant) problem in Computer Science. Take concurrent programming, which is currently in the same place that memory management was a decade ago: popularly thought to be a fundamental challenge. If you asked the average programmer in 1992 about garbage collection, they would have confidently stated that GC involved the freezing of all memory manipulation, couldn't deal with cycles, etc. But if you asked people in the small commercial LISP business, they'd assert that GC was essentially a solved problem. (In 1992, I was simultaneously editor of <em>Computer Language</em> and <em>AI Expert</em> magazines and GC was the subject of <em>many</em> conversations.)</p>
<p>The release of Java in 1995 ended the debate about garbage collection, <em>not</em> by making any fundamental contribution to the state-of-the-art, but by <em>transferring</em> an academically known solution into a generally-useful language. No one wrote their PhD thesis on Java's GC and no LISP hacker was surprised to find out that productivity increased, but the general programming community was astonished.</p>
<p>So it used to be that "memory management is fundamentally difficult" was the shibboleth; nowadays, it's "multithreaded programming is fundamentally difficult." And, to be sure, the concurrent programming model (note the singular!) exposed by Java and .NET does make it easy to deadlock and race and all that bad stuff. Meanwhile, there are academics who would say that multithreaded programming is, perhaps not "solved," but certainly made <em>much</em> easier by such things as Communicating Sequential Processes (Google search or the original paper here) or the Calculus of Communicating Systems (Google search).</p>
<p>But even very useful programming models <em>do not transfer</em> into the general programming community as long as they are only <em>external and optionally layered</em> on top of an existing, available, and visible inferior model. There were garbage collectors for C and C++, but it took an <em>infrastructure</em> change to transfer an acceptance of GC into the general programming community. Similarly, there are libraries for <a href="https://www.cs.kent.ac.uk/projects/ofa/jcsp/">CSP for Java</a>, but no one's heard of them. And improving the <em>infrastructure</em> of concurrent programming in Java doesn't make money for anyone, so instead of getting a fundamental advance, you get the very top-heavy EJB solution and the JCP process.</p>
<p>Compare that to Microsoft's model, which is to give someone the <em>job</em> of finding and facilitating the transfer of useful technologies into the <em>infrastructure</em> of the .NET platform. CSP is well-thought-out at a formal level, but is it generally useful and accessible to, say, a person coming from a Visual Basic background? (As opposed to, say, Z Notation, which is well-thought-out at a formal level, but would not make most programmers more productive.) The questions of general useability and accessibility are not of interest to academics but are, of course, the most important questions at a practical level. In <em>Thinking in C#</em> (you didn't think I'd write this much without a plug did you? Why don't you <a href="https://www.amazon.com/exec/obidos/ASIN/0130385727/thinkinginnet-20/103-1214375-9967861">pre-order it now</a>?), I say ".NET's value proposition of 'Any language, one platform,' makes it fertile ground for new approaches to programming. Additionally, the .NET Framework Library contains classes beyond the scope of this book for emitting code, dynamic compilation, and programmatic type extension; .NET is potentially the most significant contribution to the development of new computer languages in 25 years. That would be nice; the rise of object-oriented imperative languages has had important benefits (the patterns movement could not have happened without the widespread adoption of the vocabulary of objects) but there has been a loss of awareness of the diversity and potential of alternate paradigms. Aspect-orientation, declarative, functional, and data-flow programming all have things to offer us today, and these are just some obvious areas. Hopefully, the commercial use of .NET will not blind visionaries to the value of the .NET infrastructure for research and development of programming technology. "</p>
<p>This role and its being filled by Peter, known smart guy, makes it all the more likely that the .NET platform will be <em>increasingly</em> superior to alternatives over time.</p>Friday Five 1 What Is Your Favorite Scary Movie2002-10-24T22:52:00-10:002002-10-24T22:52:00-10:00larrytag:knowing.net,2002-10-24:/posts/2002/10/friday-five-1-what-is-your-favorite-scary-movie/<p><strong><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five</a></strong></p>
<p><strong>1. What is your favorite scary movie?</strong> Jaws is my favorite movie, period.</p>
<p><strong>2. What is your favorite Halloween treat?</strong> Oh, let's say Reese's peanut butter cups.</p>
<p><strong>3. Do you dress up for Halloween? If so, describe your best Halloween costume.</strong> We have a couple of fright masks …</p><p><strong><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five</a></strong></p>
<p><strong>1. What is your favorite scary movie?</strong> Jaws is my favorite movie, period.</p>
<p><strong>2. What is your favorite Halloween treat?</strong> Oh, let's say Reese's peanut butter cups.</p>
<p><strong>3. Do you dress up for Halloween? If so, describe your best Halloween costume.</strong> We have a couple of fright masks we wear for the trick-or-treaters, but not really.</p>
<p><strong>4. Do you enjoy going to haunted houses or other spooky events?</strong> My first date, ever, was a blind date and we went to a haunted house. Now <em>that</em> was scary. And when they first launched DirectX, Microsoft had an awesome haunted house in one of their garages. I love a horror movie (I've got a bunch of Dario Argente movies due in from Netflix this year), but haunted houses don't do anything for me -- there's no story and no suspense.</p>
<p><strong>5. Will you dress up for Halloween this year?</strong> Just the fright masks for the kids.</p>Net Developers Get2002-10-23T22:43:00-10:002002-10-23T22:43:00-10:00larrytag:knowing.net,2002-10-23:/posts/2002/10/net-developers-get/<p>.Net developers get new tools. ClientSoft, Visible Systems unveil offerings for modeling, mainframe migration [InfoWorld: Top News]</p>Better Testing Tools Could Save US Companies 22Bnbsp Year According To A Hrefhttpwwwnistgovdirectorprogofcrepor2002-10-23T08:21:00-10:002002-10-23T08:21:00-10:00larrytag:knowing.net,2002-10-23:/posts/2002/10/better-testing-tools-could-save-us-companies-22bnbsp-year-according-to-a-hrefhttpwwwnistgovdirectorprogofcrepor/<p>Better testing tools could save US companies \<span class="math">\(22B / year. According to this study, quoted in the September 2002 *Scientific American*, buggy software costs \\)</span>59.6B per year, but better testing tools could reduce that by the aforementioned \$22B. So download <a href="http://nunit.org/">NUnit</a>.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent …</script><p>Better testing tools could save US companies \<span class="math">\(22B / year. According to this study, quoted in the September 2002 *Scientific American*, buggy software costs \\)</span>59.6B per year, but better testing tools could reduce that by the aforementioned \$22B. So download <a href="http://nunit.org/">NUnit</a>.</p>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Highlights From A Hrefhttpwwwthinkinginnetstories20021023highlightsAMeasureOfSoftwareDevelopmentRiskJiangKleinAndEl2002-10-23T07:43:00-10:002002-10-23T07:43:00-10:00larrytag:knowing.net,2002-10-23:/posts/2002/10/highlights-from-a-hrefhttpwwwthinkinginnetstories20021023highlightsameasureofsoftwaredevelopmentriskjiangkleinandel/<p>Highlights from <em>A Measure of Software Development Risk.</em> This was a good paper in the September issue of the Project Management Journal, which I do not believe is available online. Nothing here will be shocking to experienced software development managers, but it does provide some useful statistics, a breakdown of …</p><p>Highlights from <em>A Measure of Software Development Risk.</em> This was a good paper in the September issue of the Project Management Journal, which I do not believe is available online. Nothing here will be shocking to experienced software development managers, but it does provide some useful statistics, a breakdown of the top risk areas in SD projects, and a list of significant factors contributing to risk.</p>Proof Of Pentagon Alliance With Klingon Empire Cloakin2002-10-23T04:59:00-10:002002-10-23T04:59:00-10:00larrytag:knowing.net,2002-10-23:/posts/2002/10/proof-of-pentagon-alliance-with-klingon-empire-cloakin/<p>Proof of Pentagon alliance with Klingon Empire: Cloaking device, bent wings, heck, the thing's even <em>called</em> the Bird of Prey.</p>Peter Drayton Has Posted An Excellent PowerPoint Presentation A2002-10-23T01:08:00-10:002002-10-23T01:08:00-10:00larrytag:knowing.net,2002-10-23:/posts/2002/10/peter-drayton-has-posted-an-excellent-powerpoint-presentation-a/<p>Peter Drayton has posted an excellent <a href="http://www.razorsoft.net/">PowerPoint presentation</a> on REST-ful SOAP 1.2.</p>Analysis In Shift IT2002-10-21T07:59:00-10:002002-10-21T07:59:00-10:00larrytag:knowing.net,2002-10-21:/posts/2002/10/analysis-in-shift-it/<p>Analysis: In shift, IT vendors outsource R&D to India. Companies tap India to reduce development costs [InfoWorld: Top News] <strong>LOB:</strong> This is primarily anecdotal (there's no numbers that justify the concept that a "shift" is occurring or accelerating), but it's interesting to see companies like Ericsson and Cisco being …</p><p>Analysis: In shift, IT vendors outsource R&D to India. Companies tap India to reduce development costs [InfoWorld: Top News] <strong>LOB:</strong> This is primarily anecdotal (there's no numbers that justify the concept that a "shift" is occurring or accelerating), but it's interesting to see companies like Ericsson and Cisco being discussed, as outsourcing has not been as popular with companies involved in systems-level programming.</p>Im Not The Biggest Fan Of The Americans With Disabilities Act But Im Shocked To Read That AA Hrefhttprsscomcom210012002-10-21T06:01:00-10:002002-10-21T06:01:00-10:00larrytag:knowing.net,2002-10-21:/posts/2002/10/im-not-the-biggest-fan-of-the-americans-with-disabilities-act-but-im-shocked-to-read-that-aa-hrefhttprsscomcom21001/<p>I'm not the biggest fan of the Americans with Disabilities Act, but I'm shocked to read that a <a href="https://com.com/results?q=rss">judge has ruled that it doesn't apply to cyberspace</a>. Of all the endeavors that might deserve a mandate of accessibility, I would rank computer programs (at least, commercial Web sites) very high …</p><p>I'm not the biggest fan of the Americans with Disabilities Act, but I'm shocked to read that a <a href="https://com.com/results?q=rss">judge has ruled that it doesn't apply to cyberspace</a>. Of all the endeavors that might deserve a mandate of accessibility, I would rank computer programs (at least, commercial Web sites) very high. <em>If</em> it makes sense to <a href="https://www.streetlaw.org/">force the PGA to accept a handicapped golfer</a>, <em>then</em> certainly it makes sense to force Southwest to make its Internet-only fares accessible to the blind. The act has turned into a bit of a showcase for the law of unintended consequences (oh, my God! I'm linking to the Cato Institute!), but it's a darn shame that the Web, which started out as being one of the most accessible software systems (thanks in large part to <a href="http://lynx.browser.org/">Lynx</a>), is being given a pass, when the effort required to make a Web site accessible is generally low.</p>WebPutty Upgrades App2002-10-20T23:48:00-10:002002-10-20T23:48:00-10:00larrytag:knowing.net,2002-10-20:/posts/2002/10/webputty-upgrades-app/<p>WebPutty upgrades app dev platform. Version 6 features visualization [InfoWorld: Top News]</p>Women Take Note A Hrefhttpstorynewsyahoocomnewstmplstory2ampcid571ampncid751ampe1ampunm20021018hl2002-10-20T02:32:00-10:002002-10-20T02:32:00-10:00larrytag:knowing.net,2002-10-20:/posts/2002/10/women-take-note-a-hrefhttpstorynewsyahoocomnewstmplstory2ampcid571ampncid751ampe1ampunm20021018hl/<p>Women take note: Shoe-size: No. Finger-length: Yes. I guess this explains the continued popularity of those foam "#1" hands.</p>Bird With 14foot Wingspan Reported In Alask2002-10-20T02:29:00-10:002002-10-20T02:29:00-10:00larrytag:knowing.net,2002-10-20:/posts/2002/10/bird-with-14foot-wingspan-reported-in-alask/<p><a href="http://www.cnn.com/2002/US/West/10/18/offbeat.alaska.bird.reut/index.html">Bird with 14-foot wingspan reported in Alaska</a> Keep your kids indoors.</p>Highly Recommended Focus Night Amp Day Contact Lenses I Had Pretty Much2002-10-18T04:07:00-10:002002-10-18T04:07:00-10:00larrytag:knowing.net,2002-10-18:/posts/2002/10/highly-recommended-focus-night-amp-day-contact-lenses-i-had-pretty-much/<p>Highly recommended: Focus Night & Day Contact Lenses. I had pretty much given up on contact lenses as my eyes have become less tolerant over decades of staring at a computer monitor for <em>mumble, mumble</em> hours per day. After saving my pennies for Lasik, I decided the operation wasn't right for …</p><p>Highly recommended: Focus Night & Day Contact Lenses. I had pretty much given up on contact lenses as my eyes have become less tolerant over decades of staring at a computer monitor for <em>mumble, mumble</em> hours per day. After saving my pennies for Lasik, I decided the operation wasn't right for me (it's a cruder process than I imagined, generally resulting in less-than-20/20 vision and at-night "blooming" of bright objects, which I absolutely would hate). So I went on a mission of trying out all the "high-end" contacts. Even when I was younger, I was never able to wear any brand of contacts overnight; I've been wearing Night & Days since mid-July and now routinely wear them for a week or more at a time (I just went two weeks before taking them out the other day). The boxes are expensive, but you actually get 8 lenses per box, so the per-lens cost is not that much greater than other high-end lenses like Acuvue 2s or Bausch & Lomb PureVisions (which I would wear if I couldn't get Day & Nights). If you wear contacts, try them out. For me, Acuvue's feel better going in and for the first couple of hours, but after that, it's all Night & Day.</p>EJB Bashing A Hrefhttpwwwx1802002-10-18T03:00:00-10:002002-10-18T03:00:00-10:00larrytag:knowing.net,2002-10-18:/posts/2002/10/ejb-bashing-a-hrefhttpwwwx180/<p><em>EJB Bashing.</em> <em>Listen to the EJB's go Pop. [</em><a href="https://duncan.dev/blog/"><em>James Duncan Davidson</em></a><em>]</em></p>
<p><em>It's interesting to see the java bloggers are starting to agree that EJB isn't a good idea.</em></p>
<p><em>There was another interesting thread about this a week ago, which is well summarized in</em> <em>James Strachan's weblog.</em></p>
<p><em>[Andres Aguiar's Weblog]</em></p>
<p>One …</p><p><em>EJB Bashing.</em> <em>Listen to the EJB's go Pop. [</em><a href="https://duncan.dev/blog/"><em>James Duncan Davidson</em></a><em>]</em></p>
<p><em>It's interesting to see the java bloggers are starting to agree that EJB isn't a good idea.</em></p>
<p><em>There was another interesting thread about this a week ago, which is well summarized in</em> <em>James Strachan's weblog.</em></p>
<p><em>[Andres Aguiar's Weblog]</em></p>
<p>One of the reasons that I embraced the .NET Framework stemmed from a real wake-up call I had about EJBs last year. I was contracted by <a href="https://get2hawaii.com/">a company</a> to write an EJB-based product that integrated with a <a href="https://www.sabre.com/">legacy mainframe system</a>; I did so, it worked fine, they wanted to move ahead with a full implementation. But the CTO challenged me as to whether we could do it without EJBs. I said "Hey, they aren't <em>really</em> that hard, you just got to know a couple of things." But he made the point that there was no real clear need, in our case, for EJBs. So I moved ahead and headed the team that wrote a "plain vanilla" Java program: I had forgotten how good Java could be. We wrote a killer Web Service, met all our deadlines, and, as consultants, put ourselves out of work. (I guess that's why I'll never be rich: I'm not interested in being a Perma-Consultant.)</p>
<p>Anyway, a huge point for me is that EJBs increase edit-compile-debug cycle from seconds to minutes. Over the years, the task of doing enterprise work in Java has been like the proverbial frog that's boiled in a pan of water that slowly gets hotter and hotter: It started out great and no single thing ruined it, but at some point, you realize that it doesn't have to be this way. Switching from EJBs to "just" Java reduced our edit-deploy-debug time from minutes to seconds, simplified all aspects of the architecture, decreased deployment costs, and had killer scaling attributes.</p>
<p>I had originally jumped from MFC and C++ to Java precisely because with Java I felt like I had discovered in regards to things like network programming: "Hey, it <em>doesn't</em> have to be as painful as they said." Last year, I had that seem feeling with C# and .NET versus J2EE: here you have this new language and framework that seems to make enterprise-level development easier and the main thing keeping you in J2EE is the assertion that "it has to be this painful." Well, I've been working in .NET on a daily basis for more than a year now and my conclusion is that it's <em>at least as good as</em> J2EE in every aspect and better in most.</p>John Lam Has Written A Crosslanguage Weaver For Adding Aspect2002-10-18T02:35:00-10:002002-10-18T02:35:00-10:00larrytag:knowing.net,2002-10-18:/posts/2002/10/john-lam-has-written-a-crosslanguage-weaver-for-adding-aspect/<p>John Lam has written a cross-language "weaver" for adding aspects (as in <a href="http://aosd.net/">aspect-oriented programming</a>) into .NET languages. Aspects allow one to compose behavior based on the method signature of a target program. In that sense, they're similar to .NET's native attributes. The difference is that attribute behavior is restricted to …</p><p>John Lam has written a cross-language "weaver" for adding aspects (as in <a href="http://aosd.net/">aspect-oriented programming</a>) into .NET languages. Aspects allow one to compose behavior based on the method signature of a target program. In that sense, they're similar to .NET's native attributes. The difference is that attribute behavior is restricted to programs that interpret that attribute, while aspects <em>inject</em> the behavior into the flow of an existing program. Thus, with attributes, programs like <a href="http://nunit.org/">NUnit 2.0</a> can say "Which methods in this assembly are marked as test methods? Okay, call them all." While with attributes, one can say "Generate trace output for every method call that returns an integer." See my September 2001 review of AspectJ in Software Development (although note that I didn't write that it was "the first aspect-oriented compiler," which I believe is incorrect).</p>Just Met With Ed Kaim And Melissa Hovis Of Microsoft And Waggener Edstrom To Discuss The NET Compact Framework Without Viol2002-10-18T01:09:00-10:002002-10-18T01:09:00-10:00larrytag:knowing.net,2002-10-18:/posts/2002/10/just-met-with-ed-kaim-and-melissa-hovis-of-microsoft-and-waggener-edstrom-to-discuss-the-net-compact-framework-without-viol/<p>Just met with Ed Kaim and Melissa Hovis of Microsoft and Waggener Edstrom to discuss the .NET Compact Framework. Without violating NDA, I can say that it is my opinion that post-desktop form factors such as phone-enabled handhelds (especially with GPS or E911 location info) and tablets represent a <em>huge …</em></p><p>Just met with Ed Kaim and Melissa Hovis of Microsoft and Waggener Edstrom to discuss the .NET Compact Framework. Without violating NDA, I can say that it is my opinion that post-desktop form factors such as phone-enabled handhelds (especially with GPS or E911 location info) and tablets represent a <em>huge</em> market for innovative applications (the TabletPC is programmed with the full .NET Framework, but my point is that it's essentially a post-desktop form factor). Although the .NET Compact Framework does not have <em>everything</em> in the .NET Base Class Library, notably some GDI+ stuff, and does not have <em>all</em> the capabilities of the .NET runtime (notably, COM Interop), it does not represent the same level of "downsizing" that one experiences going from Java Standard Edition to J2ME. In my experience, programming the .NET Compact Framework is very, very easy -- in <em>Thinking in C#</em>, I have an appendix devoted to it, but half of what I say is, "This looks familiar, huh?"</p>
<p>In this meeting I heard something I hear a lot from vendors, though, which is that many programmers have lost their perspective on certain realities. In this case, I was told that developers complained because they could not use the ALT-TAB key combination to switch out of the PocketPC emulator; this makes perfect sense, since when you're running in the emulator, you're sending the ALT-TAB to the PocketPC OS, not to your desktop. And yet, programmers complained. I've also been seeing lately that Web Services programmers are sometimes ignoring the cost of transmitting a call over the network, which is a grave mistake.</p>
<p>As big a fan as I am of the precept that programmers shouldn't be obsessed with hardware, I think it's equally important to realize that we <em>are</em> bound to certain physical and market realities. While CPU and storage costs decrease at Moore's rate or better, things like bandwidth and display capabilities are increasing at much, much lower rates. I'd submit that this creates a certain tension that, in turn, may give rise to the killer apps of the future.</p>IMG BORDER0 ALIGNLEFT WIDTH150 HEIGHT80 SRC2002-10-15T07:02:00-10:002002-10-15T07:02:00-10:00larrytag:knowing.net,2002-10-15:/posts/2002/10/img-border0-alignleft-width150-height80-src/<p>+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| <a href="https://quiz.ravenblack.net/videogame.pl"><img alt="What Video Game Character Are You? I am a Defender-ship." height="80" src="https://quiz.ravenblack.net/videogame/6.png" width="150"></a>I am <strong>a Defender-ship</strong>. |
| |
| I am fiercely protective of my friends and loved ones, and unforgiving of any who would hurt them. Speed and foresight are my strengths, at the cost of a little clumsiness. I'm most comfortable with a few friends, but sometimes particularly enjoy spending time in larger …</p><p>+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| <a href="https://quiz.ravenblack.net/videogame.pl"><img alt="What Video Game Character Are You? I am a Defender-ship." height="80" src="https://quiz.ravenblack.net/videogame/6.png" width="150"></a>I am <strong>a Defender-ship</strong>. |
| |
| I am fiercely protective of my friends and loved ones, and unforgiving of any who would hurt them. Speed and foresight are my strengths, at the cost of a little clumsiness. I'm most comfortable with a few friends, but sometimes particularly enjoy spending time in larger groups. <a href="https://quiz.ravenblack.net/videogame.pl">What Video Game Character Are You?</a> |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+</p>FUD Moi Someone At Kuro5hin Took Exception To My Post On C2002-10-15T06:58:00-10:002002-10-15T06:58:00-10:00larrytag:knowing.net,2002-10-15:/posts/2002/10/fud-moi-someone-at-kuro5hin-took-exception-to-my-post-on-c/<p>FUD? Moi? Someone at <a href="http://www.kuro5hin.org/story/2002/10/7/11507/3854">Kuro5hin</a> took exception to my post on checked versus unchecked exceptions</p>Wow Clemens Vaster Has Made Some Great NET Attribute Classes Fr2002-10-12T03:49:00-10:002002-10-12T03:49:00-10:00larrytag:knowing.net,2002-10-12:/posts/2002/10/wow-clemens-vaster-has-made-some-great-net-attribute-classes-fr/<p>Wow. Clemens Vaster has made some great .NET Attribute classes freely available: seamless WS-Security, parameter validation of WebMethods, etc. <em>Definitely</em> worth checking out.</p>It Appears That There Is Only One Course On Software Engineering Available From MITs A Hrefhttpocwmiteduindexhtml2002-10-11T05:19:00-10:002002-10-11T05:19:00-10:00larrytag:knowing.net,2002-10-11:/posts/2002/10/it-appears-that-there-is-only-one-course-on-software-engineering-available-from-mits-a-hrefhttpocwmiteduindexhtml/<p>It appears that there is only one course on Software Engineering available from MIT's <a href="https://ocw.mit.edu/index.htm">OpenCourseware experiment</a>. That course, Laboratory in Software Engineering, looks pretty good as an undergraduate introduction to systems engineering; it uses Java as the implementation language. The materials, especially the lecture notes, are impressive.</p>C Standardization Moves Ahea2002-10-11T04:19:00-10:002002-10-11T04:19:00-10:00larrytag:knowing.net,2002-10-11:/posts/2002/10/c-standardization-moves-ahea/<p><a href="http://11170514.searchiq.co/redirect?s=11170514&o=75&y=150&x=350&r=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A152310365752820208988011877132516190872%26anid%3D152310365752820208988011877132516190872&u=152310365752820208988011877132516190872&a=72&t=4990807&g=-8979609023404308504~454325493030603207&cb=0&faid=4990807&fint=1&b=fefs,fefs,LWii&epcCD=1553673116237&cc=840&dma=609&epcRFU=null&tk=&k=&qk=aNN&mqk=aNN&eqk=null&eqke=0&nw=SEARCH&tgt=4990807&tp=www4fSwk-aNNeEtQeEtQ&vu=null&ir=1&tt=RON&ck=0~0&rk=1&ptt=&f=https%3A%2F%2Fwww.doorsteps.com%2F%3Fcid%3Daff_doorsteps_adnet_desk%26content_id%3Dadnet%3A152310365752820208988011877132516190872%26anid%3D152310365752820208988011877132516190872&sc=null&st=null&id=0&it=0&nbrs=0&nk=4990807&fwc=0&lt=1&ltw=200&ltwmn=50&spa=&spt=&spc=&dvid=">C# standardization moves ahead</a>. Microsoft and its allies make a quiet advance in pushing C#, a competitor to Java and a foundation for the company's next-generation Internet services. [<a href="https://www.cnet.com/news/">CNET News.com</a>] <em>Microsoft is moving towards ISO standardization of the C# language.</em></p>A Hrefhttpwwwnytimescom20021011international11CNDTEXThtmlex1035000000ampen9a639d1b36bf7679ampei5062ampp2002-10-11T02:48:00-10:002002-10-11T02:48:00-10:00larrytag:knowing.net,2002-10-11:/posts/2002/10/a-hrefhttpwwwnytimescom20021011international11cndtexthtmlex1035000000ampen9a639d1b36bf7679ampei5062ampp/<p>Jimmy Carter won the Nobel Peace Prize. Hooray! I don't know if the country's ever had a better ex-President.</p>Apollonians Beware Thoughts On An Even2002-10-11T02:31:00-10:002002-10-11T02:31:00-10:00larrytag:knowing.net,2002-10-11:/posts/2002/10/apollonians-beware-thoughts-on-an-even/<p>Apollonians Beware! Thoughts on an evening at Sotheby's</p>Friday Five 1 If You Could Only Choose 1 Cd To Ever Listen To Agai2002-10-10T20:37:00-10:002002-10-10T20:37:00-10:00larrytag:knowing.net,2002-10-10:/posts/2002/10/friday-five-1-if-you-could-only-choose-1-cd-to-ever-listen-to-agai/<p><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five:</a></p>
<p><strong>1. If you could only choose 1 cd to ever listen to again, what would it be?</strong></p>
<p>The Deutsche Grammophon CD of Von Karajan conducting the Berlin Philharmonic for <a href="https://www.amazon.com/exec/obidos/ASIN/B000001GPY/qid%3d1034342276/sr%3d2-3/ref%3dsr_2_3/103-1214375-9967861">Beethoven's Symphonie No. 9</a>.</p>
<p><strong>2. If you could only choose 2 movies to watch ever again, what would they …</strong></p><p><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five:</a></p>
<p><strong>1. If you could only choose 1 cd to ever listen to again, what would it be?</strong></p>
<p>The Deutsche Grammophon CD of Von Karajan conducting the Berlin Philharmonic for <a href="https://www.amazon.com/exec/obidos/ASIN/B000001GPY/qid%3d1034342276/sr%3d2-3/ref%3dsr_2_3/103-1214375-9967861">Beethoven's Symphonie No. 9</a>.</p>
<p><strong>2. If you could only choose 2 movies to watch ever again, what would they be?</strong></p>
<p><a href="https://www.amazon.com/exec/obidos/ASIN/B000069HXC/qid%3d1034342530/sr%3d2-1/ref%3dsr_2_1/103-1214375-9967861">Seas of Life</a> and <a href="https://www.amazon.com/exec/obidos/ASIN/B000050XXO/qid%3d1034342690/sr%3d2-3/ref%3dsr_2_3/103-1214375-9967861">Casablanca</a></p>
<p><strong>3. If you could only choose 3 books to read ever again, what would they be?</strong></p>
<p>Patrick O'Brian's Aubrey-Maturin series (21 novels), Joseph Campbell's The Masks of God (4 volumes), and William Goldman's The Princess Bride.</p>
<p><strong>4. If you could only choose 4 things to eat or drink ever again, what would they be?</strong></p>
<p>A pizza from this place in Boston that went out of business a decade ago, king mackerel steamed in banana leaves with a fresh-squeezed lime juice from this place in Sarong, Irian Jaya, and a 25-year-old Macallan single malt. (This isn't at a single meal, right?)</p>
<p><strong>5. If you could only choose 5 people to ever be/talk/associate/whatever with ever again, who would they be?</strong><br>
Just between Tina and my immediate family I'm over the limit.</p>A HrefhttpwwwblackwellsynergycomservletuseragentfuncsynergyampsynergyActionshowAbstractampdoi101046j146442002-10-10T05:40:00-10:002002-10-10T05:40:00-10:00larrytag:knowing.net,2002-10-10:/posts/2002/10/a-hrefhttpwwwblackwellsynergycomservletuseragentfuncsynergyampsynergyactionshowabstractampdoi101046j14644/<p>British Journal of Urology: "There was no statistically significant correlation between shoe size and stretched penile length." [Adam Curry: Adam Curry's Weblog] <em>Note: this study is disputed by the International Brotherhood of Circus Clowns.</em></p>Im Not Loving CloudMark The Outlook Antispam Plugin Its Supposed To Be A P2P Blackl2002-10-09T22:37:00-10:002002-10-09T22:37:00-10:00larrytag:knowing.net,2002-10-09:/posts/2002/10/im-not-loving-cloudmark-the-outlook-antispam-plugin-its-supposed-to-be-a-p2p-blackl/<p>I'm not loving <a href="https://www.cloudmark.com/en">CloudMark</a>, the Outlook anti-spam plug-in. It's supposed to be a P2P blacklist, but it appears to have some kind of default rule that marks a lot of legitimate email lists as spam. It just marked <a href="https://www.nngroup.com/articles/">Jakob Nielsen's</a> newsletter as spam, which is the furthest thing from the …</p><p>I'm not loving <a href="https://www.cloudmark.com/en">CloudMark</a>, the Outlook anti-spam plug-in. It's supposed to be a P2P blacklist, but it appears to have some kind of default rule that marks a lot of legitimate email lists as spam. It just marked <a href="https://www.nngroup.com/articles/">Jakob Nielsen's</a> newsletter as spam, which is the furthest thing from the truth, both in terms of content and ease-of-unsubscription.</p>Finally Back From BZ Medias WebServices DevCon Not To Be Confused With The Sells Brothers WSDC I Thought That I Would Be The2002-10-09T22:15:00-10:002002-10-09T22:15:00-10:00larrytag:knowing.net,2002-10-09:/posts/2002/10/finally-back-from-bz-medias-webservices-devcon-not-to-be-confused-with-the-sells-brothers-wsdc-i-thought-that-i-would-be-the/<p>Finally back from BZ Media's WebServices DevCon (not to be confused with the Sells Brothers WSDC). I thought that I would be the skeptic, telling people that another protocol or the latest tool wasn't a golden bullet. Instead, I found a <em>striking</em> atmosphere of Fear, Uncertainty, and Doubt -- people are …</p><p>Finally back from BZ Media's WebServices DevCon (not to be confused with the Sells Brothers WSDC). I thought that I would be the skeptic, telling people that another protocol or the latest tool wasn't a golden bullet. Instead, I found a <em>striking</em> atmosphere of Fear, Uncertainty, and Doubt -- people are being told that Web Services are "not ready for prime time" because, say, there is no transaction protocol or security protocol. So instead of being the skeptic, I ended up spending the last part of my course saying "Hey, I've been doing XML over HTTP for 3 years, and every time we've seen 2 things -- the ability to rapidly create new types of innovative client programs that we hadn't initially conceived of and concrete benefits in software development project management." It turned out <em>that's</em> what they needed to hear.</p>Java Vs C Checked Vs Unchecked Exceptions Billy Barrett Writes BLOCKQUOTE2002-09-29T01:46:00-10:002002-09-29T01:46:00-10:00larrytag:knowing.net,2002-09-29:/posts/2002/09/java-vs-c-checked-vs-unchecked-exceptions-billy-barrett-writes-blockquote/<p><strong>Java vs. C#: Checked vs. Unchecked Exceptions</strong></p>
<p>Billy Barrett writes:</p>
<blockquote>
<p>I have come to the conclusion that writing a highly robust application with C# is nearly impossible because of [reasons such as...] <em>you are catching the exceptions that are being thrown and then the person who wrote the component you …</em></p></blockquote><p><strong>Java vs. C#: Checked vs. Unchecked Exceptions</strong></p>
<p>Billy Barrett writes:</p>
<blockquote>
<p>I have come to the conclusion that writing a highly robust application with C# is nearly impossible because of [reasons such as...] <em>you are catching the exceptions that are being thrown and then the person who wrote the component you are using adds a new exception. As you realize, they will more often than not forget to tell you and now you won't be handling it.</em></p>
</blockquote>
<p>>I can't think of a crisis scenario. At iteration 1, the system is working and handling exceptions A, B, and C. At iteration 2, new exceptions D and E are introduced. D is a subtype of C, an E is a totally new exception, unlike anything that's gone before. Presumably, our code that handles C should handle D just fine. In Java, we can't get a successful <em>compile</em> until we address the issue of E, while in C#, the compilation works fine, but the first time that an "E" is thrown, the system stops. No code breaks that shouldn't, i.e., the only time the system fails is when the system is in a state that generated this new, unlike-anything-we've-seen-before exception, which means that either the system is dealing with a scenario we hadn't dealt with in iteration 1 or our understanding or requirements for the scenario have changed. One way or the other, the code that breaks, <em>should</em> break.</p>
<p>It's important to note that with .NET we do <em>not</em> face the DLL Hell of introducing an iteration 2, E-throwing component into a system that depends on the iteration 1, only-A,B,C-throwing component. The versioning stuff can ensure that if our system is only robust with the iteration 1 A,B,C-throwing component, then our system will continue to use the proper component.</p>
<p>The only scenario where things break down is when I just slipstream the throwing of E, without letting anyone know that I've introduced dramatic new behavior to the system. But do we really want or need a <em>compiler</em> to be the guard against such behavior?</p>All The Cool A Href2002-09-29T01:37:00-10:002002-09-29T01:37:00-10:00larrytag:knowing.net,2002-09-29:/posts/2002/09/all-the-cool-a-href/<p>All the cool kids are going to the Sells Brothers Web Services DevCon 10-11 Oct in Bedford, MA. I've been spending all <em>my</em> time preparing for the BZ Media Web Services Dev Con happening this week in NYC. Both should be good but the Sells Brothers is clearly more technically …</p><p>All the cool kids are going to the Sells Brothers Web Services DevCon 10-11 Oct in Bedford, MA. I've been spending all <em>my</em> time preparing for the BZ Media Web Services Dev Con happening this week in NYC. Both should be good but the Sells Brothers is clearly more technically oriented; I wish I could go.</p>Whitepaper Pingback Vs Trackback A Hrefhttpwwwdaypopcomtop2002-09-28T03:26:00-10:002002-09-28T03:26:00-10:00larrytag:knowing.net,2002-09-28:/posts/2002/09/whitepaper-pingback-vs-trackback-a-hrefhttpwwwdaypopcomtop/<p>"Whitepaper: Pingback vs Trackback" [Daypop Top 40]</p>Autonomous Vehicle Race From LA To LV 1M To First Across The Line2002-09-27T07:59:00-10:002002-09-27T07:59:00-10:00larrytag:knowing.net,2002-09-27:/posts/2002/09/autonomous-vehicle-race-from-la-to-lv-1m-to-first-across-the-line/<p>Autonomous vehicle race from LA to LV, \$1M to first across the line.</p>Preorder Th2002-09-27T07:18:00-10:002002-09-27T07:18:00-10:00larrytag:knowing.net,2002-09-27:/posts/2002/09/preorder-th/<p><a href="https://www.amazon.com/exec/obidos/ASIN/0130385727/ref%253Dmk%255Fdel%255F387392%255F74/103-1214375-9967861">Pre-order <em>Thinking in C#</em></a></p>potholes Daypop Top 40 Ph2002-09-27T07:03:00-10:002002-09-27T07:03:00-10:00larrytag:knowing.net,2002-09-27:/posts/2002/09/potholes-daypop-top-40-ph/<p>"potholes" [Daypop Top 40] Photoshop makes me doubt such things, but if it's real, it's funny.</p>Friday Five 1 What Are Your Favorite Ways To Relax2002-09-26T23:24:00-10:002002-09-26T23:24:00-10:00larrytag:knowing.net,2002-09-26:/posts/2002/09/friday-five-1-what-are-your-favorite-ways-to-relax/<p><strong><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five</a>:</strong></p>
<p><strong>1. What are your favorite ways to relax and unwind?</strong></p>
<p>Coding and pondering challenges in information theory is my favorite way to escape from the real world. But since mostly what I <em>do</em> is code, I have to relax and unwind from <em>that.</em> To be honest, I put …</p><p><strong><a href="http://smattering.org/wp-login.php?redirect_to=http%3A%2F%2Fwww.smattering.org%2F&reauth=1">Friday Five</a>:</strong></p>
<p><strong>1. What are your favorite ways to relax and unwind?</strong></p>
<p>Coding and pondering challenges in information theory is my favorite way to escape from the real world. But since mostly what I <em>do</em> is code, I have to relax and unwind from <em>that.</em> To be honest, I put so much mental effort into my work that mostly I relax by watching TV or movies: very passive activities. I also read quite a bit: probably four or five magazines a week<em>,</em> a novel and a non-fiction book every couple of weeks.</p>
<p>To get out of the house, I take my dog on hour-long walks every other day (Tina takes her the other days). Since we live right near trails, that gets me exposed to nature. Of course, my <em>favorite</em> ways to unwind are sailing and SCUBA diving, but they are not something I can do on a weekly basis.</p>
<p><strong>2. What do you do the moment you get home from work/school/errands?</strong></p>
<p>I say "hi" to Tina and Cheyenne. Then I check my email. Then I check cnn.com to confirm that there hasn't been a terrorist thing; seriously, the fact that I'd been at my computer coding for half an hour before I knew about the 9/11 attacks really tweaked me.</p>
<p><strong>3. What are your favorite aromatherapeutic smells?</strong></p>
<p>Ocean. Brownies.</p>
<p><strong>4. Do you feel more relaxed with a group of friends or hanging out by yourself?</strong></p>
<p>I feel more <em>relaxed</em> by myself, but I feel more <em>energized</em> by being with people. Back when I worked at MFI they gave us Myers-Briggs and similar tests: I was exactly at the halfway point between being an introvert and an extrovert.</p>
<p><strong>5. What is something that you feel is relaxing but most people don't?</strong></p>
<p>Putting a tank of highly compressed air along my spine, strapping enough lead weight to my hips so that I won't float, and getting in water so cold that it hurts every part of your skin that isn't encased in a dank, cumbersome tight-fitting suit of neoprene. Oh, and I guess you don't find a lot of people wishing they had more time for "pondering challenges in information theory."</p>New Scientist Is Reporting Some Sciencebased Speculation That The Acidi2002-09-26T04:48:00-10:002002-09-26T04:48:00-10:00larrytag:knowing.net,2002-09-26:/posts/2002/09/new-scientist-is-reporting-some-sciencebased-speculation-that-the-acidi/<p>New Scientist is reporting some science-based speculation that the acidic clouds of Venus may harbor microbial life. "Microbial" my sweet aunt Agnes -- I'm thinking shark-blimps that endlessly pursue schools of blimplets as they swirl through the jetstream...</p>Clones To Be Rerendered Displayed On Imax Supposedly Theres A Digital2002-09-25T22:21:00-10:002002-09-25T22:21:00-10:00larrytag:knowing.net,2002-09-25:/posts/2002/09/clones-to-be-rerendered-displayed-on-imax-supposedly-theres-a-digital/<p>"Clones" to be re-rendered, displayed on Imax. Supposedly, there's a digital printer for the IMAX that prints 8000 x 6000 resolution. And then also, one supposes, they can render the scenes using the appropriate "lenses" (I once saw 2001 on an IMAX screen and the obelisk looked like a melted …</p><p>"Clones" to be re-rendered, displayed on Imax. Supposedly, there's a digital printer for the IMAX that prints 8000 x 6000 resolution. And then also, one supposes, they can render the scenes using the appropriate "lenses" (I once saw 2001 on an IMAX screen and the obelisk looked like a melted power bar). Lessee: 8000 x 6000 x 24 FPS x 143 minutes = 9,884,160,000,000 pixels. Sheesh. Who would have guessed that computers would produce a 10 terapixel movie before they were capable of competent speech recognition?</p>Oh Those Charismatic Megafauna Get Al2002-09-25T22:01:00-10:002002-09-25T22:01:00-10:00larrytag:knowing.net,2002-09-25:/posts/2002/09/oh-those-charismatic-megafauna-get-al/<p>Oh, those charismatic megafauna get all the props. UNEP has put Great White Sharks in Appendix I of the Convention of Migratory Species, which means that every nation has to prevent taking them. More interestingly, apparently there's a camel species recently discovered "in a lost land of salty sand dunes …</p><p>Oh, those charismatic megafauna get all the props. UNEP has put Great White Sharks in Appendix I of the Convention of Migratory Species, which means that every nation has to prevent taking them. More interestingly, apparently there's a camel species recently discovered "in a lost land of salty sand dunes on the edge of the Tibetan mountains" that survives by drinking salt water that percolates up through the sand. I can't wait to see <a href="http://www.crocodilehunter.com.au/crocodile_hunter/about_steve_terri/">Steve Irwin</a> make <em>that</em> look adventurous!</p>Neuroscience Unlocks Secret Of Zen Garden Geez I Dunno What2002-09-25T04:55:00-10:002002-09-25T04:55:00-10:00larrytag:knowing.net,2002-09-25:/posts/2002/09/neuroscience-unlocks-secret-of-zen-garden-geez-i-dunno-what/<p><a href="http://www.nature.com/news/1998/020923/full/news020926-8.html?error=cookies_not_supported&code=41fb54ff-d1d8-4368-a76a-1c7d93314736">Neuroscience unlocks secret of zen garden</a>. Geez, I dunno'. What they're describing is called Voronoi or Delaunay triangulation; it's used in computer graphics quite a bit. I would think that many arrangements would generate tree shapes. Maybe I'll... holy crud!...\$15 for a <em>single article!?!</em> I'll wait for the movie …</p><p><a href="http://www.nature.com/news/1998/020923/full/news020926-8.html?error=cookies_not_supported&code=41fb54ff-d1d8-4368-a76a-1c7d93314736">Neuroscience unlocks secret of zen garden</a>. Geez, I dunno'. What they're describing is called Voronoi or Delaunay triangulation; it's used in computer graphics quite a bit. I would think that many arrangements would generate tree shapes. Maybe I'll... holy crud!...\$15 for a <em>single article!?!</em> I'll wait for the movie.</p>After Reading This Post And Being Exposed To A Hrefhttpxml2002-09-24T23:57:00-10:002002-09-24T23:57:00-10:00larrytag:knowing.net,2002-09-24:/posts/2002/09/after-reading-this-post-and-being-exposed-to-a-hrefhttpxml/<p>After reading this post and being exposed to <a href="http://xmlns.com/foaf/0.1/">FOAF</a> yesterday, I wonder if FOAF does not suggest a trust mechanism for *back pings. The moment you think about it, you realize it's just a matter of luck that the spammers haven't yet figured out that blog comments are vulnerable.</p>Microsoft Has Created PIAs For OfficeXP A Hrefhttpms2002-09-24T08:11:00-10:002002-09-24T08:11:00-10:00larrytag:knowing.net,2002-09-24:/posts/2002/09/microsoft-has-created-pias-for-officexp-a-hrefhttpms/<p>Microsoft has created PIAs for OfficeXP. Microsoft has created some PIAs for .NET COM Interop for Office XP. If you attended [Sam Gentile's] <a href="https://www.hugedomains.com/domain_profile.cfm?d=nhdnug&e=com">talk</a>, you heard [him] talk about the importance of Microsoft creating "offical" "blessed" PIAs for a lot of their stuff which they haven't done a lot of …</p><p>Microsoft has created PIAs for OfficeXP. Microsoft has created some PIAs for .NET COM Interop for Office XP. If you attended [Sam Gentile's] <a href="https://www.hugedomains.com/domain_profile.cfm?d=nhdnug&e=com">talk</a>, you heard [him] talk about the importance of Microsoft creating "offical" "blessed" PIAs for a lot of their stuff which they haven't done a lot of yet. [Sam Gentile's Radio Weblog]</p>A Threehour Tour A Guy Sailing From Long Beach To Catalin2002-09-24T07:43:00-10:002002-09-24T07:43:00-10:00larrytag:knowing.net,2002-09-24:/posts/2002/09/a-threehour-tour-a-guy-sailing-from-long-beach-to-catalin/<p>A three-hour tour... A guy sailing from Long Beach to Catalina was rescued off the coast of Costa Rica after <em>three months</em> at sea.</p>Microsoft Pushes On2002-09-24T05:00:00-10:002002-09-24T05:00:00-10:00larrytag:knowing.net,2002-09-24:/posts/2002/09/microsoft-pushes-on/<p>Microsoft pushes on in server OS market. Linux only serious threat to Microsoft's increasing dominance, IDC says [InfoWorld: Top News]</p>I Was Watching Ken Burns Civil War Documentary Last Night And It Reminded Me Of Some2002-09-24T02:55:00-10:002002-09-24T02:55:00-10:00larrytag:knowing.net,2002-09-24:/posts/2002/09/i-was-watching-ken-burns-civil-war-documentary-last-night-and-it-reminded-me-of-some/<p>I was watching Ken Burns' <a href="http://www.pbs.org/kenburns/civil-war/">Civil War</a> documentary last night and it reminded me of something I've never understood. Why did the Emancipation Proclamation by the United States have any meaning in the Confederate States? On January 1, 1863, was anyone actually <em>freed</em>?</p>This Article And A Hrefhttpwwwblogstreamcompauls2002-09-24T01:44:00-10:002002-09-24T01:44:00-10:00larrytag:knowing.net,2002-09-24:/posts/2002/09/this-article-and-a-hrefhttpwwwblogstreamcompauls/<p>This <a href="https://www.amazon.com/sp?_encoding=UTF8&asin=&isAmazonFulfilled=1&isCBA=&marketplaceID=ATVPDKIKX0DER&orderID=&seller=A1VAOWZNDCV6C6&tab=&vasStoreID=">article</a> and <a href="https://www.amazon.com/sp?_encoding=UTF8&asin=&isAmazonFulfilled=1&isCBA=&marketplaceID=ATVPDKIKX0DER&orderID=&seller=A1VAOWZNDCV6C6&tab=&vasStoreID=">this one</a> (both by Paul Prescod) and <a href="http://www.intertwingly.net/stories/2002/07/20/restSoap.html">this</a> one by Sam Ruby I think are finally getting through my thick skull why "REST" is being used as a proxy statement for "the challenges that many Web Service developers will face." They're much better reading than the REST …</p><p>This <a href="https://www.amazon.com/sp?_encoding=UTF8&asin=&isAmazonFulfilled=1&isCBA=&marketplaceID=ATVPDKIKX0DER&orderID=&seller=A1VAOWZNDCV6C6&tab=&vasStoreID=">article</a> and <a href="https://www.amazon.com/sp?_encoding=UTF8&asin=&isAmazonFulfilled=1&isCBA=&marketplaceID=ATVPDKIKX0DER&orderID=&seller=A1VAOWZNDCV6C6&tab=&vasStoreID=">this one</a> (both by Paul Prescod) and <a href="http://www.intertwingly.net/stories/2002/07/20/restSoap.html">this</a> one by Sam Ruby I think are finally getting through my thick skull why "REST" is being used as a proxy statement for "the challenges that many Web Service developers will face." They're much better reading than the REST Wiki.</p>
<p>I think what they're saying is that it all boils down to where you encode the state. You <em>need</em> state for most non-trivial transactions. But where do you keep that state? Ruby cheekily says "get prepared for the object reference to move outside of the parenthesis." REST people seem almost fetishistic about the importance of URIs. They argue that a major reason the Web succeeded is because state representations are transferred (REpresentational State Transfer == REST) in a simple cut-and-pastable thing called a URI. I'm not sure about the <em>fundamental</em> advantages of the URI over other ways to represent state (see my question WhatsSoWrongWithRpc?) but it's certainly true that it should be transparent and transportable, that "the object reference" <em>should</em> "move outside of the parenthesis."</p>
<p><em>On the other hand</em>, the problem with transferring a representation of state around is that by making the state representation concrete, you <em>may</em> find yourself locking yourself into, well, one particular representation of state (as opposed to an abstraction of a process by which state and behavior combine to generate value, i.e., an object). So the challenge you <em>may face</em> is that the "object reference" that is now "outside the parentheses" is not a reference to an abstract interface, but is a representation of the service request or response as it exists at 12:20 PM on September 24.</p>Apparently Someone Fell For The Nigerian Spam Scam Su2002-09-24T01:21:00-10:002002-09-24T01:21:00-10:00larrytag:knowing.net,2002-09-24:/posts/2002/09/apparently-someone-fell-for-the-nigerian-spam-scam-su/<p>Apparently, someo<a href="https://www.wired.com/2002/09/how-a-bank-got-e-mail-scammed/">ne fell for the Nigerian spam scam</a>. Supposedly:</p>
<blockquote>
<p>According to statistics presented at the International Conference on Advance Fee (419) Frauds in New York on Sept. 17, roughly 1 percent of the millions of people who receive 419 e-mails and faxes are successfully scammed.</p>
<p>Annual losses to the …</p></blockquote><p>Apparently, someo<a href="https://www.wired.com/2002/09/how-a-bank-got-e-mail-scammed/">ne fell for the Nigerian spam scam</a>. Supposedly:</p>
<blockquote>
<p>According to statistics presented at the International Conference on Advance Fee (419) Frauds in New York on Sept. 17, roughly 1 percent of the millions of people who receive 419 e-mails and faxes are successfully scammed.</p>
<p>Annual losses to the scam in the United States total more than \<span class="math">\(100 million, and law enforcement officials believe global losses may total over \\)</span>1.5 billion.</p>
</blockquote>
<script type="text/javascript">if (!document.getElementById('mathjaxscript_pelican_#%@#$@#')) {
var align = "center",
indent = "0em",
linebreak = "false";
if (false) {
align = (screen.width < 768) ? "left" : align;
indent = (screen.width < 768) ? "0em" : indent;
linebreak = (screen.width < 768) ? 'true' : linebreak;
}
var mathjaxscript = document.createElement('script');
mathjaxscript.id = 'mathjaxscript_pelican_#%@#$@#';
mathjaxscript.type = 'text/javascript';
mathjaxscript.src = 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.3/latest.js?config=TeX-AMS-MML_HTMLorMML';
var configscript = document.createElement('script');
configscript.type = 'text/x-mathjax-config';
configscript[(window.opera ? "innerHTML" : "text")] =
"MathJax.Hub.Config({" +
" config: ['MMLorHTML.js']," +
" TeX: { extensions: ['AMSmath.js','AMSsymbols.js','noErrors.js','noUndefined.js'], equationNumbers: { autoNumber: 'none' } }," +
" jax: ['input/TeX','input/MathML','output/HTML-CSS']," +
" extensions: ['tex2jax.js','mml2jax.js','MathMenu.js','MathZoom.js']," +
" displayAlign: '"+ align +"'," +
" displayIndent: '"+ indent +"'," +
" showMathMenu: true," +
" messageStyle: 'normal'," +
" tex2jax: { " +
" inlineMath: [ ['\\\\(','\\\\)'] ], " +
" displayMath: [ ['$$','$$'] ]," +
" processEscapes: true," +
" preview: 'TeX'," +
" }, " +
" 'HTML-CSS': { " +
" availableFonts: ['STIX', 'TeX']," +
" preferredFont: 'STIX'," +
" styles: { '.MathJax_Display, .MathJax .mo, .MathJax .mi, .MathJax .mn': {color: 'inherit ! important'} }," +
" linebreaks: { automatic: "+ linebreak +", width: '90% container' }," +
" }, " +
"}); " +
"if ('default' !== 'default') {" +
"MathJax.Hub.Register.StartupHook('HTML-CSS Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax['HTML-CSS'].FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"MathJax.Hub.Register.StartupHook('SVG Jax Ready',function () {" +
"var VARIANT = MathJax.OutputJax.SVG.FONTDATA.VARIANT;" +
"VARIANT['normal'].fonts.unshift('MathJax_default');" +
"VARIANT['bold'].fonts.unshift('MathJax_default-bold');" +
"VARIANT['italic'].fonts.unshift('MathJax_default-italic');" +
"VARIANT['-tex-mathit'].fonts.unshift('MathJax_default-italic');" +
"});" +
"}";
(document.body || document.getElementsByTagName('head')[0]).appendChild(configscript);
(document.body || document.getElementsByTagName('head')[0]).appendChild(mathjaxscript);
}</script>Ive Been Working On Ensuring Compatibility With The Upcoming NET Framework 11 And C Compiler V 71 For The Programs In2002-09-23T22:43:00-10:002002-09-23T22:43:00-10:00larrytag:knowing.net,2002-09-23:/posts/2002/09/ive-been-working-on-ensuring-compatibility-with-the-upcoming-net-framework-11-and-c-compiler-v-71-for-the-programs-in/<p>I've been working on ensuring compatibility with the upcoming .NET Framework 1.1 (and C# compiler v. 7.1) for the programs in <em>Thinking in C#</em>. Probably 98+% of the programs worked fine, although I'm seeing something very strange with one particular multithreading program. Almost undoubtedly, I introduced a defect …</p><p>I've been working on ensuring compatibility with the upcoming .NET Framework 1.1 (and C# compiler v. 7.1) for the programs in <em>Thinking in C#</em>. Probably 98+% of the programs worked fine, although I'm seeing something very strange with one particular multithreading program. Almost undoubtedly, I introduced a defect somehow, but it sure is startling.</p>
<p>Also, I'm interested in boasting that "<em>x</em>% of the programs run under Mono." I don't run a Linux machine: anyone using Mono interested in helping me out with the experiment? If so, drop me a line.</p>HP Will Push NETA2002-09-23T22:21:00-10:002002-09-23T22:21:00-10:00larrytag:knowing.net,2002-09-23:/posts/2002/09/hp-will-push-neta/<p>HP will push .NET. Personally, I don't think of HP as a major force in influencing software development.</p>Liberty Alliance2002-09-23T22:17:00-10:002002-09-23T22:17:00-10:00larrytag:knowing.net,2002-09-23:/posts/2002/09/liberty-alliance/<p>Liberty Alliance plans interoperability with Passport. Significantly good news.</p>NY Times Has Published TA Hrefhttpwwwnytimescom20020924science24BEAUhtmlpagewanted1ampei5007ampene110cb6922002-09-23T22:16:00-10:002002-09-23T22:16:00-10:00larrytag:knowing.net,2002-09-23:/posts/2002/09/ny-times-has-published-ta-hrefhttpwwwnytimescom20020924science24beauhtmlpagewanted1ampei5007ampene110cb692/<p>NY Times has published the 10 Most Beautiful Experiments in Science. I can accept that nothing from Computer Science made the list, but to snub <a href="http://galileoandeinstein.physics.virginia.edu/lectures/michelson.html">Michelson-Morley</a>? An outrage!</p>Went To Stan KellyBootles 73rd Birthday Party Last Night I Drank Like2002-09-22T01:32:00-10:002002-09-22T01:32:00-10:00larrytag:knowing.net,2002-09-22:/posts/2002/09/went-to-stan-kellybootles-73rd-birthday-party-last-night-i-drank-like/<p>Went to <a href="http://www.sarcheck.com/skb/index.htm">Stan Kelly-Bootle's</a> 73rd birthday party last night. I drank like a fish, ate nothing, buttonholed Steve Bourne (<a href="https://www.shellscript.sh/">Bourne shell</a>, President of the <a href="https://www.acm.org/">ACM</a>) about my attack on P != NP, got so wasted I <em>sang</em> Leaving of Liverpool. Stan, meanwhile, mesmerized 3 young women and then drank them under …</p><p>Went to <a href="http://www.sarcheck.com/skb/index.htm">Stan Kelly-Bootle's</a> 73rd birthday party last night. I drank like a fish, ate nothing, buttonholed Steve Bourne (<a href="https://www.shellscript.sh/">Bourne shell</a>, President of the <a href="https://www.acm.org/">ACM</a>) about my attack on P != NP, got so wasted I <em>sang</em> Leaving of Liverpool. Stan, meanwhile, mesmerized 3 young women and then drank them under the table. He is my hero.</p>
<p>Naturally, our gift to him was booze (<a href="https://www.greygoose.com/">Grey Goose Citron</a>). In three months, I'll be 39, but: <strong>I got carded!</strong> Suh-weet!</p>Make That Twelve Secret Herbs And Spices Pot Sold A2002-09-21T05:17:00-10:002002-09-21T05:17:00-10:00larrytag:knowing.net,2002-09-21:/posts/2002/09/make-that-twelve-secret-herbs-and-spices-pot-sold-a/<p>Make that <em>twelve</em> secret herbs and spices: pot sold at a local KFC</p>I Was Looking For Images For2002-09-21T04:24:00-10:002002-09-21T04:24:00-10:00larrytag:knowing.net,2002-09-21:/posts/2002/09/i-was-looking-for-images-for/<p><img alt="" height="400" src="http://people.uncw.edu/smithms/dD-series/dD-225b.jpg" width="300">I was looking for images for a slide called "stateless by design" and somehow came across this collection of lurid <a href="http://people.uncw.edu/smithms/mystery.html">pulp magazine covers</a>. Totally cool! Now I'll have to change my talk so that <em>somehow</em> I can use <a href="http://people.uncw.edu/smithms/dD-series/dD-045a.jpg">Death Hitches A Ride</a>. Hmmm... maybe something on deterministic finalization?</p>We Had A Major Spider Ballooning Event Today I Saw T2002-09-19T04:22:00-10:002002-09-19T04:22:00-10:00larrytag:knowing.net,2002-09-19:/posts/2002/09/we-had-a-major-spider-ballooning-event-today-i-saw-t/<p>We had a major spider <a href="https://journeynorth.org/tm/spring/Aeroplankton.html">ballooning</a> event today! I saw the first pieces from our house and then, from the top of Pine Mountain where I went to walk the dog more than a mile later, which is about 2 miles and almost exactly across the wind from us. It …</p><p>We had a major spider <a href="https://journeynorth.org/tm/spring/Aeroplankton.html">ballooning</a> event today! I saw the first pieces from our house and then, from the top of Pine Mountain where I went to walk the dog more than a mile later, which is about 2 miles and almost exactly across the wind from us. It was at the top that I chased down a "floater" and saw to my surprise that it was a very sticky mass of silk. We ended up finding three "downed" gossamer pieces, but didn't see any spiders. It was very wild.</p>Since Everyone Else Is Doing It I Guess Ill Brag That I Got My Everett Beta Last Thursday Neener Neener Neener We2002-09-18T06:19:00-10:002002-09-18T06:19:00-10:00larrytag:knowing.net,2002-09-18:/posts/2002/09/since-everyone-else-is-doing-it-i-guess-ill-brag-that-i-got-my-everett-beta-last-thursday-neener-neener-neener-we/<p>Since everyone else is doing it, I guess I'll brag that <em>I</em> got my Everett beta last Thursday! Neener, neener, neener! We're all under NDA, which sucks, because I've got some Compact .NET Framework yellin' to do.</p>Just Because Im So Freakin Pissed Off At The Government For Playing Stupid About The Use Of Hijacked Planes As Guided Missiles2002-09-18T04:58:00-10:002002-09-18T04:58:00-10:00larrytag:knowing.net,2002-09-18:/posts/2002/09/just-because-im-so-freakin-pissed-off-at-the-government-for-playing-stupid-about-the-use-of-hijacked-planes-as-guided-missiles/<p>Just because I'm so freakin' pissed off at the government for playing stupid about the use of hijacked planes as guided missiles (what, you're telling me that Cheney doesn't read <a href="https://www.amazon.com/exec/obidos/tg/detail/-/0425147584/ref%3dpd_bxgy_text_1/102-3842982-7709767%3fv%3dglance%26s%3dbooks">Tom Clancy</a>?), here's Article 2 of the UN Charter.</p>Good Heavens Mac OnlyA Hrefhttpwwwemarketercom2002-09-18T04:44:00-10:002002-09-18T04:44:00-10:00larrytag:knowing.net,2002-09-18:/posts/2002/09/good-heavens-mac-onlya-hrefhttpwwwemarketercom/<p>Good heavens! Mac only has 2.2% Global Operating Systems marketshare? *nixs don't even show up on the study, which seems pretty dang fishy to me; surely UNIX/Linux's command significant shares of the server market, but could it be that the number of servers is so small in comparison …</p><p>Good heavens! Mac only has 2.2% Global Operating Systems marketshare? *nixs don't even show up on the study, which seems pretty dang fishy to me; surely UNIX/Linux's command significant shares of the server market, but could it be that the number of servers is so small in comparison with desktops that they are invisible?</p>In August 1998 US Intelligence Learned That A Group Of Unidentif2002-09-18T04:31:00-10:002002-09-18T04:31:00-10:00larrytag:knowing.net,2002-09-18:/posts/2002/09/in-august-1998-us-intelligence-learned-that-a-group-of-unidentif/<p>In August 1998, U.S. intelligence learned that a "group of unidentified Arabs planned to fly an explosive-laden plane from a foreign country into the World Trade Center." So my question is: When are we going to start holding our elected representatives responsible?</p>
<p>In other, actually-related-to-programming news: I just posted …</p><p>In August 1998, U.S. intelligence learned that a "group of unidentified Arabs planned to fly an explosive-laden plane from a foreign country into the World Trade Center." So my question is: When are we going to start holding our elected representatives responsible?</p>
<p>In other, actually-related-to-programming news: I just posted WhatsSoWrongWithRpc? to the REST wiki.</p>This Whitepaper On SCM Best Practices Appears In The Octob2002-09-17T04:57:00-10:002002-09-17T04:57:00-10:00larrytag:knowing.net,2002-09-17:/posts/2002/09/this-whitepaper-on-scm-best-practices-appears-in-the-octob/<p><a href="https://www.perforce.com/resources/papers-and-videos">This white-paper</a> on SCM best practices appears in the October Dobb's. It's excellent. Incidentally, I enjoyed four articles in this issue; it almost restores my faith in programming magazines.</p>Theres A Pretty Good Article In The October Dobbs About C2002-09-17T01:07:00-10:002002-09-17T01:07:00-10:00larrytag:knowing.net,2002-09-17:/posts/2002/09/theres-a-pretty-good-article-in-the-october-dobbs-about-c/<p>There's a pretty good article in the October Dobb's about complexity and the use of gaming agents. One caveat, though; the article includes a figure that shows a model outperforming various other strategies in a financial market. The text mentions something that anyone interested in using computers to do financial …</p><p>There's a pretty good article in the October Dobb's about complexity and the use of gaming agents. One caveat, though; the article includes a figure that shows a model outperforming various other strategies in a financial market. The text mentions something that anyone interested in using computers to do financial modeling should know: "transaction costs in the actual market may prevent this profit from being achieved." <strong>Absolutely.</strong> It's trivial to create a strategy that can outperform financial markets, <strong>if</strong> you have perfect information, no transaction charges, and perfect order fulfillment.</p>Borland Eyes WebGai2002-09-17T00:39:00-10:002002-09-17T00:39:00-10:00larrytag:knowing.net,2002-09-17:/posts/2002/09/borland-eyes-webgai/<p>Borland eyes WebGain users. Company seeks to provide safe haven for VisualCaf</p>Big News Charles Simonyi And Gregor Kiczales Are Launching A2002-09-16T22:54:00-10:002002-09-16T22:54:00-10:00larrytag:knowing.net,2002-09-16:/posts/2002/09/big-news-charles-simonyi-and-gregor-kiczales-are-launching-a/<p>Big news: Charles Simonyi and Gregor Kiczales are <a href="https://com.com/results?q=news">launching a software tools company</a>. <a href="https://www.edge.org/digerati/simonyi/">Simonyi</a> is, in a very real sense, the most famous of all coders from Microsoft (ever heard of Hungarian notation?). Kiczales is the guiding light behind the Aspect-J <a href="http://aosd.net/">aspect-oriented</a> programming language. The name of their company is …</p><p>Big news: Charles Simonyi and Gregor Kiczales are <a href="https://com.com/results?q=news">launching a software tools company</a>. <a href="https://www.edge.org/digerati/simonyi/">Simonyi</a> is, in a very real sense, the most famous of all coders from Microsoft (ever heard of Hungarian notation?). Kiczales is the guiding light behind the Aspect-J <a href="http://aosd.net/">aspect-oriented</a> programming language. The name of their company is said to be <em>Intentional Software.</em> From what I've read (in increasing complexity) <a href="https://www.edge.org/digerati/simonyi/simonyi_p1.html">here</a>, here, <a href="ftp://ftp.research.microsoft.com/pub/tr/tr-95-52.doc">here</a> (primary source) and <a href="https://www.microsoft.com/en-us/research/?from=http%3A%2F%2Fresearch.microsoft.com%2Fip%2Foverview%2Ftrafoinip.pdf">here</a>, "IP" involves meta-programming with "intentions" and their concrete "implementations" expressed in a WYSIWYG environment. There are at least two very important features of IP:</p>
<ul>
<li>The creation of graph-like <em>abstract</em> data structures corresponding to "memes of programmer intention" (i.e., "iterator", "stack," and presumably eventually at the level of business concerns such as, "validate credit card"). These abstractions are implemented using pluggable back-ends (i.e., there is a mapping between the <em>iterator</em> intent and, say, foreach(# in #){#} and other nodes in the intentional graph fill in the missing bits.</li>
<li>The graph-like abstract data structures and generators are <em>long-lived</em> and <em>composable</em> via direct manipulation (i.e., WYSIWYG graphical programming). This implies that one would be able to have, for instance, competing intentions expressed on the screen ("Validate account credit at checkout" vs. "Validate credit as items are selected"), and the choice between them would be explicit (the decided-against intent would be, say, grayed out).</li>
</ul>
<p><em>If</em> an efficient UI for IP can be developed (and I don't mean a <em>pretty</em> UI, I mean a UI that can handle the rushing thought, i.e., speed imperative, of professional programmers), it could be huge. The programming world is primed for a major shift in paradigm (it's been a decade since the OO shift); I suspected that it would be aspect-orientation, but IP is even more potentially dramatic.</p>
<p>However, the UI challenge seems unspeakably problematic. "Visual programming" UIs have, so far, been disasters. Screen resolution is the great laggard in hardware: I had 640 x 480 a decade ago, now I work at 1152 x 864, not even 4 times the capacity (although I plan on getting dual flat-screen monitors when I upgrade the desktop next Spring). Can a graphic representation of a data structure have anything like the efficiency of an S-expression?</p>In The Latest Round Of How Cool Is C Anecdotes Ive Ported My Personal Mailing List Manager Entirely Over To Gearhost My2002-09-16T04:15:00-10:002002-09-16T04:15:00-10:00larrytag:knowing.net,2002-09-16:/posts/2002/09/in-the-latest-round-of-how-cool-is-c-anecdotes-ive-ported-my-personal-mailing-list-manager-entirely-over-to-gearhost-my/<p>In the latest round of "How cool is C#" anecdotes, I've ported my personal mailing list manager entirely over to Gearhost (my hosting service). My C# MLM is based on the "JavaDomo" MLM I wrote for Java Pro a few years ago, and if I get significant requests, I'll clean …</p><p>In the latest round of "How cool is C#" anecdotes, I've ported my personal mailing list manager entirely over to Gearhost (my hosting service). My C# MLM is based on the "JavaDomo" MLM I wrote for Java Pro a few years ago, and if I get significant requests, I'll clean it up and post it open source. Until that happens, I have to admit to considering a major API change: specifically, the creation of an MLM Web Service spec. The idea is that there might be some benefit in switching to a transport-neutral discussion API. "Subscribe" "Unsubscribe" "Post" "Reply" etc. as verbs, but neutral to the delivery medium (mail, Web page, etc.) or delivery technology. Of course, there would be a binding to major providers such as Majordomo and L-Soft and Yahoo Groups, etc.</p>Gearhost My Hosting Service Rocks Powerfully Lightning Fast Response On Technical Quest2002-09-16T03:17:00-10:002002-09-16T03:17:00-10:00larrytag:knowing.net,2002-09-16:/posts/2002/09/gearhost-my-hosting-service-rocks-powerfully-lightning-fast-response-on-technical-quest/<p><a href="https://www.gearhost.com/">Gearhost</a>, my hosting service, rocks powerfully. Lightning fast response on technical questions, .NET hosting, good price. Highly recommended.</p>Theres A Debate Raging About Whethernbspbinary XML Is A2002-09-16T00:45:00-10:002002-09-16T00:45:00-10:00larrytag:knowing.net,2002-09-16:/posts/2002/09/theres-a-debate-raging-about-whethernbspbinary-xml-is-a/<p>There's a debate raging about whether binary XML is a good idea (summary: binary XML would undoubtedly have performance benefits, but would it undermine crucial benefits of XML?). Ingo Rammer is the proponent of the idea and while I concede virtually every point he makes, on balance it seems to …</p><p>There's a debate raging about whether binary XML is a good idea (summary: binary XML would undoubtedly have performance benefits, but would it undermine crucial benefits of XML?). Ingo Rammer is the proponent of the idea and while I concede virtually every point he makes, on balance it seems to me a bad idea. While XML is amusingly wasteful of network capacity ("\<boolean>true\</boolean>"), it seems to me that the text-based nature of XML is a crucial benefit. You can read, edit, post, and consume XML with no (or extremely minimal) specialized tools. In my experience, this is a key benefit that allows different development teams to move at different rates: being able to capture and manipulate the exact request or response with an absolute minimum of system intervention is very valuable.</p>
<p>As soon as you introduce binary into the equation, you make it harder to say "And what if we change the dates to December 31 and January 1?" or "Is the 'count' attribute accurate?" Additionally, you make it harder to work in a disconnected fashion: Web designers can work with an XML file to design XSLT transforms; server-side developers can post queries into a textbox to mimic the behavior of a not-yet-developed client. These are very important benefits.</p>
<p>To be fair, the binary XML argument is "text <em>plus</em> binary" (essentially, add a binary parser to the equation while maintaining compatibility with all higher-level standards -- if the mime type is text/xml use the text parser, if the mime type is binary/xml use the binary parser). But then one has to maintain confidence in the processes of the binary parser, the binary producer, and how the choice is made between text and binary representations. That seems to me a big ol' can of worms.</p>I Took A Shot At Bellygazing Pomo Grad Students Criticizing Todd Solondz Before But Now Theyre After A Hrefhttpwww2002-09-14T02:26:00-10:002002-09-14T02:26:00-10:00larrytag:knowing.net,2002-09-14:/posts/2002/09/i-took-a-shot-at-bellygazing-pomo-grad-students-criticizing-todd-solondz-before-but-now-theyre-after-a-hrefhttpwww/<p>I took a shot at belly-gazing, po-mo grad students criticizing Todd Solondz before, but now they're after Tony Soprano! That's just disrespectful:</p>
<blockquote>
<p>On male girth: ''Fatness is a signifier with many overlapping and even contradictory signifieds.'' On male behavior: ''Nearly all of Tony's 'business' relationships . . . are characterized by a phallocentric …</p></blockquote><p>I took a shot at belly-gazing, po-mo grad students criticizing Todd Solondz before, but now they're after Tony Soprano! That's just disrespectful:</p>
<blockquote>
<p>On male girth: ''Fatness is a signifier with many overlapping and even contradictory signifieds.'' On male behavior: ''Nearly all of Tony's 'business' relationships . . . are characterized by a phallocentric, linear representation of self.'' On female agency: ''Media self-reflexivity operates throughout, as well as being embedded right into the very form of, the 'Sopranos' text. Women play an important role in foregrounding these intertextual references.'' And my favorite, on female bodies: ''Speaking as a male viewer, I can't say that curse words are as pleasurable to hear as nudity is to see."</p>
</blockquote>The Latest PC Mag Has An Article On A Virtual Keyboard Fran2002-09-13T03:28:00-10:002002-09-13T03:28:00-10:00larrytag:knowing.net,2002-09-13:/posts/2002/09/the-latest-pc-mag-has-an-article-on-a-virtual-keyboard-fran/<p>The latest PC Mag has an <a href="https://www.pcmag.com/article2/0,2817,519008,00.asp">article</a> on a virtual keyboard. Frankly, I'm dubious that you can pull this off with the processing power on current PDAs. I certainly hope I'm wrong; I'd love to touchtype on a PDA. I like <a href="http://www.senseboard.com/">this one</a> even more, although I bet it takes …</p><p>The latest PC Mag has an <a href="https://www.pcmag.com/article2/0,2817,519008,00.asp">article</a> on a virtual keyboard. Frankly, I'm dubious that you can pull this off with the processing power on current PDAs. I certainly hope I'm wrong; I'd love to touchtype on a PDA. I like <a href="http://www.senseboard.com/">this one</a> even more, although I bet it takes absolutely perfect touch-typing to work.</p>Software Archaeologists Have Unearthed The First Smiley2002-09-13T02:35:00-10:002002-09-13T02:35:00-10:00larrytag:knowing.net,2002-09-13:/posts/2002/09/software-archaeologists-have-unearthed-the-first-smiley/<p>Software archaeologists have unearthed the first <a href="https://www.microsoft.com/en-us/research/people/mbj/?from=http%3A%2F%2Fresearch.microsoft.com%2F%257embj%2Fsmiley%2Fsmiley.html">smiley</a>!</p>The Qt Toolkit Is Really Nice And There Are Now C Bindings For Itnbsp If Y2002-09-13T02:23:00-10:002002-09-13T02:23:00-10:00larrytag:knowing.net,2002-09-13:/posts/2002/09/the-qt-toolkit-is-really-nice-and-there-are-now-c-bindings-for-itnbsp-if-y/<p>The Qt toolkit is really nice and there are now <a href="http://qtcsharp.sourceforge.net/">C# bindin</a>gs for it. If you're programming with Mono, I would highly recommend keeping up with this Qt# project.</p>I Just Found Out That I Can Upload This Weblog Directly To HttpwwwThinkingInNETA2002-09-12T08:32:00-10:002002-09-12T08:32:00-10:00larrytag:knowing.net,2002-09-12:/posts/2002/09/i-just-found-out-that-i-can-upload-this-weblog-directly-to-httpwwwthinkinginneta/<p>I just found out that I can upload this Weblog directly to <a href="https://www.buydomains.com/lander/thinkingin.net?domain=thinkingin.net&utm_source=thinkingin.net&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect">http://www.ThinkingIn.NET/</a> and everything (comments, etc.) works! Well, goody, now I can spend a day modifying my Radio UserLand template to match my homepage.</p>Finished A Review Of Kylix 3 Today For2002-09-12T05:18:00-10:002002-09-12T05:18:00-10:00larrytag:knowing.net,2002-09-12:/posts/2002/09/finished-a-review-of-kylix-3-today-for/<p>Finished a review of Kylix 3 today for <a href="https://sdtimes.com/"><em>SD Times</em></a><em>.</em> Short version: very nice tool for C++ development in Linux, particularly for enterprise apps with a need for highly replicable clients (e.g., POS, brilliant terminals, custom data-entry, etc.).</p>The Reason That I Had To Write A PayPal Backend Is Thatnbspthe Publication Of Thinking In C Has Been Delayed Until S2002-09-10T07:21:00-10:002002-09-10T07:21:00-10:00larrytag:knowing.net,2002-09-10:/posts/2002/09/the-reason-that-i-had-to-write-a-paypal-backend-is-thatnbspthe-publication-of-thinking-in-c-has-been-delayed-until-s/<p>The reason that I had to write a PayPal backend is that the publication of <em>Thinking in C#</em> has been delayed until something very close to the end of the year. The reasons have nothing to do with the content of the book, which is very frustrating, but these things …</p><p>The reason that I had to write a PayPal backend is that the publication of <em>Thinking in C#</em> has been delayed until something very close to the end of the year. The reasons have nothing to do with the content of the book, which is very frustrating, but these things happen. In the meantime, I'm planning on experimenting with charging for a downloadable pre-publication version from <a href="https://www.buydomains.com/lander/thinkingin.net?domain=thinkingin.net&utm_source=thinkingin.net&utm_medium=click&utm_campaign=TDFS-OO-BDLander&traffic_id=TDFS-OO-BDLander&traffic_type=tdfs&redirect=ono-redirect">www.ThinkingIn.NET</a>. The free preview generated on the order of 100,000 downloads over the past five months, so I hope that by charging people a few dollars for the download of a complete, 1000-page, 300-working programs text, I can generate, oh, I don't know, \$20 or so.</p>I Just Wrote A Cbacked ASPNET PayPal Backend Im Not Going To Post It Because It Was So Trivial That I Just Made It Totally2002-09-10T07:15:00-10:002002-09-10T07:15:00-10:00larrytag:knowing.net,2002-09-10:/posts/2002/09/i-just-wrote-a-cbacked-aspnet-paypal-backend-im-not-going-to-post-it-because-it-was-so-trivial-that-i-just-made-it-totally/<p>I just wrote a C#-backed ASP.NET PayPal backend. I'm not going to post it because it was so trivial that I just made it totally custom to my needs. Wow, C# rocks, ASP.NET rocks, and this is an indication of why Web Services rock (even though the …</p><p>I just wrote a C#-backed ASP.NET PayPal backend. I'm not going to post it because it was so trivial that I just made it totally custom to my needs. Wow, C# rocks, ASP.NET rocks, and this is an indication of why Web Services rock (even though the PayPal back-end is HTTP POST instead of a decent SOAP call). Less than an hour between "Is this possible?" and a functioning mini-payment scheme.</p>I Saw Todd Solondz Storytelling The Other Night No Sir I Didnt Like It So2002-09-09T09:47:00-10:002002-09-09T09:47:00-10:00larrytag:knowing.net,2002-09-09:/posts/2002/09/i-saw-todd-solondz-storytelling-the-other-night-no-sir-i-didnt-like-it-so/<p>I saw Todd Solondz' Storytelling the other night. No sir, I didn't like it. Solondz wrote one movie that I liked for its honesty (Welcome to the Dollhouse) and one that didn't make a lasting impression on me (Happiness), although I remember that it was really "edgy" in that Philip …</p><p>I saw Todd Solondz' Storytelling the other night. No sir, I didn't like it. Solondz wrote one movie that I liked for its honesty (Welcome to the Dollhouse) and one that didn't make a lasting impression on me (Happiness), although I remember that it was really "edgy" in that Philip Seymour Hoffman played a pedophile. Whatever.</p>
<p>Anyway, the thing about <em>Storytelling</em> is that it portrays a bunch of people who are clueless -- graduate writing students, documentarians, stoner teenagers. Meanwhile, it too makes things "edgy" by taking swipes at received stereotypes, the definition of "rape," the banality of the omniscient authorial voice... In short, it's a movie about the concerns of the very belly-gazing po-mo graduate students it mocks. Meanwhile, the movie is deliberately unrealistic in its characterization and situations, so there's no legitimate basis for projecting realistic motivations onto or interpreting behavior from its characters. A classic question that one might ask of the movie is "How did Scooby get a 710 in the math SATs?" And Solondz is probably happy if people conclude "Why, <em>we don't know</em>! The picking and choosing of incidents from the ontological continuum is a social construct!"</p>
<p>It's a movie that tries to accomplish these high-art meta-examinations of our assumptions and so forth, which is all well and good, but such rarefied structures can't be built with the incomplete character sketches that Solondz provides in <em>Storytelling. (</em>yeah, yeah, I haven't built enough of an argument to make that conclusion; I got tired of writing about a movie I didn't like and I just wanted to put <em>something on the Web</em> that has the slightest possibility of turning up in a Google search, because most of the people writing about Solondz on the Web are, you guessed it, naval-gazing po mo grad students. )</p>In The Second Quarter Partially Due To The Massive Incentives It Offered Ford Made2002-09-09T05:02:00-10:002002-09-09T05:02:00-10:00larrytag:knowing.net,2002-09-09:/posts/2002/09/in-the-second-quarter-partially-due-to-the-massive-incentives-it-offered-ford-made/<p>"In the second quarter, partially due to the massive incentives it offered, Ford made less than \$8 in profit for each car it sold." Can that possibly be true? Not only do <a href="http://www.changingtheclimate.com/">SUVs suck</a>, they aren't even profitable?</p>Without Naming Namesnbsp Its Absolutely Shocking How Many People At Development Tool Companies Dont Know That A2002-09-05T22:30:00-10:002002-09-05T22:30:00-10:00larrytag:knowing.net,2002-09-05:/posts/2002/09/without-naming-namesnbsp-its-absolutely-shocking-how-many-people-at-development-tool-companies-dont-know-that-a/<p>Without naming names, it's absolutely shocking how many people <em>at development tool companies</em>, don't know that <a href="http://www.w3.org/TR/soap/">SOAP</a> is <em>not</em> an HTTP-only protocol. I was getting a preview of a very, very nice tool yesterday and was being shown its SOAP support. Very nice stuff, and I saw something that made …</p><p>Without naming names, it's absolutely shocking how many people <em>at development tool companies</em>, don't know that <a href="http://www.w3.org/TR/soap/">SOAP</a> is <em>not</em> an HTTP-only protocol. I was getting a preview of a very, very nice tool yesterday and was being shown its SOAP support. Very nice stuff, and I saw something that made me wonder about whether one could use this support with SOAP bound to, say, SMTP. The product manager said that SOAP was an HTTP-only thing. <a href="https://www.pocketsoap.com/specs/smtpbinding/">No, it isn't</a>. If there were still programming magazines around worth a damn, I'd write an article on binding SOAP to MSN Messenger protocol.</p>McDonalds Is Going A Hrefhttpstorynewsyahoocomnewstmplstory2ampcid571ampncid751ampe1ampunm200209032002-09-03T03:15:00-10:002002-09-03T03:15:00-10:00larrytag:knowing.net,2002-09-03:/posts/2002/09/mcdonalds-is-going-a-hrefhttpstorynewsyahoocomnewstmplstory2ampcid571ampncid751ampe1ampunm20020903/<p>McDonald's is going to switch away to a cooking oil that reduces the amount of trans-fatty acids. Okay, that's great. But the reason they're doing this is because "In July, a New York man sued four fast-food chains, including Oak Brook, Illinois-based McDonald's, claiming the contributed to his obesity, heart …</p><p>McDonald's is going to switch away to a cooking oil that reduces the amount of trans-fatty acids. Okay, that's great. But the reason they're doing this is because "In July, a New York man sued four fast-food chains, including Oak Brook, Illinois-based McDonald's, claiming the contributed to his obesity, heart disease, and diabetes." Suing McDonald's because <em>it makes you fat? </em>Is there simply no lower bounds on how stupid one can pretend to be when filing a lawsuit? "I was shocked, <em>shocked</em> to discover that a quarter pounder with cheese with a 32 ounce coke and an extra large fries contributes to obesity!"</p>Hooray Monster Has Made C A Searchable Keyword I Cant Figure Out How To Paste A Direc2002-09-02T22:06:00-10:002002-09-02T22:06:00-10:00larrytag:knowing.net,2002-09-02:/posts/2002/09/hooray-monster-has-made-c-a-searchable-keyword-i-cant-figure-out-how-to-paste-a-direc/<p>Hooray! <a href="https://www.monster.com/">Monster</a> has made "C#" a searchable keyword. I can't figure out how to paste a direct link, as Radio "unescapes" the escape, but you can now use "C#" in job searches. (Unrestricted except for that keyword: 846 jobs in the US on Monster -- I smell a tracking program!)</p>Few At LinuxWorld Would Dispute The Increasing Interest I2002-09-02T22:04:00-10:002002-09-02T22:04:00-10:00larrytag:knowing.net,2002-09-02:/posts/2002/09/few-at-linuxworld-would-dispute-the-increasing-interest-i/<p><em>"Few at LinuxWorld would dispute the increasing interest in Linux," </em>according to a Wired News article from last month.</p>In Another CACM Article Theres A Photo Of Carlo S2002-09-01T03:08:00-10:002002-09-01T03:08:00-10:00larrytag:knowing.net,2002-09-01:/posts/2002/09/in-another-cacm-article-theres-a-photo-of-carlo-s/<p>In another <em>CACM</em> article, there's a photo of <a href="https://people.eecs.berkeley.edu/~sequin/SCULPTS/scherk.html">Carlo Sequin's Sculpture Generator</a>. Cross your eyes and dig <a href="https://people.eecs.berkeley.edu/~sequin/SCULPTS/Fb5s8st.gif">this</a>! Anyway, the article is by <a href="http://longnow.org/people/board/danny0/">Danny Hillis</a> and makes the important point that just as digital artifacts reflect reality, so too is our reality increasingly being influenced by digital artifacts. The thing …</p><p>In another <em>CACM</em> article, there's a photo of <a href="https://people.eecs.berkeley.edu/~sequin/SCULPTS/scherk.html">Carlo Sequin's Sculpture Generator</a>. Cross your eyes and dig <a href="https://people.eecs.berkeley.edu/~sequin/SCULPTS/Fb5s8st.gif">this</a>! Anyway, the article is by <a href="http://longnow.org/people/board/danny0/">Danny Hillis</a> and makes the important point that just as digital artifacts reflect reality, so too is our reality increasingly being influenced by digital artifacts. The thing that I'll always remember on that point is the way that cars in the early 1990s suddenly transformed into bars of soap. Now the transformation is happening strikingly in the field of public architecture, where you have things like the Bilbao Guggenheim which is famously "neo" (-architected, -constructed, etc.).</p>
<p><a href="http://www.tinajensen.org/">Tina</a> and I had a long conversation last night about whether any art created on a screen (specifically digital photography and video) was inherently crippled by the media. While I had to concede her points thatworking on a computer today is a cramped, RSI-inducing solo act, but I argued that if you look at something like the gesture interfaces in <em>Minority Report</em>, you can overcome all but the tactile feedback, and even that is probably somehow going to be overcome.</p>The Latest Issue Of Communications Of The ACM Includes An Article The Reality Of Simulated Actors That Es2002-09-01T02:48:00-10:002002-09-01T02:48:00-10:00larrytag:knowing.net,2002-09-01:/posts/2002/09/the-latest-issue-of-communications-of-the-acm-includes-an-article-the-reality-of-simulated-actors-that-es/<p>The latest issue of <em>Communications of the ACM</em> includes an article (<em>The Reality of Simulated</em> Actors) that estimates that it will be 20 years of computing power advances before we'll see digital actors truly capable of verisimilitude. 20 years == 4 orders of magnitude. One can't help but wonder if grid …</p><p>The latest issue of <em>Communications of the ACM</em> includes an article (<em>The Reality of Simulated</em> Actors) that estimates that it will be 20 years of computing power advances before we'll see digital actors truly capable of verisimilitude. 20 years == 4 orders of magnitude. One can't help but wonder if grid computing couldn't bring this to fruition significantly faster. What would be involved in creating Olivier @ Home ?</p>
<p>The author, <a href="http://alvyray.com/">Alvy Ray Smith</a>, divides the problem into two parts -- the "model problem" (representing the appearance of reality in a convincing way) and the "control problem" (the interface to the model). He sees both as requiring major increases in computing power, but more importantly, the "control problem" may be "difficult" (e.g., you can't hand-animate all the surfaces involved in an amused glance).</p>Just Finished Reading The August 2002 Issue Of Scientific American And Once Again Was Dismayed At How This Magazin2002-09-01T02:18:00-10:002002-09-01T02:18:00-10:00larrytag:knowing.net,2002-09-01:/posts/2002/09/just-finished-reading-the-august-2002-issue-of-scientific-american-and-once-again-was-dismayed-at-how-this-magazin/<p>Just finished reading the August 2002 issue of <em>Scientific American</em> and, once again, was dismayed at how this magazine that I grew up adoring has declined. There's an article by a scientist who states that his alternative equation for gravity explains the whole "missing mass" problem with the universe. Okay …</p><p>Just finished reading the August 2002 issue of <em>Scientific American</em> and, once again, was dismayed at how this magazine that I grew up adoring has declined. There's an article by a scientist who states that his alternative equation for gravity explains the whole "missing mass" problem with the universe. Okay, fine, the guy's probably wrong but never mind the fact that the article doesn't give a <em>mechanism, </em>it doesn't even give the equation! What in the world is the point of such an article? It's neither a primary source nor an introduction sufficient to guide you towards claims or counter-claims regarding the subject. What a waste. (To be fair, there's an article on asynchronous computer chip design which I found worthwhile because it actually had helpful explanations of two interesting circuits.)</p>
<p><em>SA</em> is now nothing but a pale imitation of <em>New Scientist.</em> A few years ago, when I was flush with cash, I paid up my <em>SA</em> subscription for something like five years. Then, last year I stumbled into some great offer to get <em><a href="https://www.newscientist.com/">New Scientist</a></em> for a reasonable price (as opposed to its standard cost of US\$200 per year). That will be up in October and I am already anticipating <em>New Scientist</em> withdrawal.</p>We Modeled The Unmanned Aerial Vehicles Controller After The PlayStation 2 Because Thats What These 18 And 19year2002-09-01T01:37:00-10:002002-09-01T01:37:00-10:00larrytag:knowing.net,2002-09-01:/posts/2002/09/we-modeled-the-unmanned-aerial-vehicles-controller-after-the-playstation-2-because-thats-what-these-18-and-19year/<p><em>"We modeled the [unmanned aerial vehicle's] controller after the PlayStation 2, because that's what these 18- and 19-year old Marine have been playing pretty much all their lives. If a Marine can use Microsoft Word, he can get this plane to fly."</em> -- Major John Cane, Marine Corps Airfighting Lab, as …</p><p><em>"We modeled the [unmanned aerial vehicle's] controller after the PlayStation 2, because that's what these 18- and 19-year old Marine have been playing pretty much all their lives. If a Marine can use Microsoft Word, he can get this plane to fly."</em> -- Major John Cane, Marine Corps Airfighting Lab, as quoted in the July 2002 <em>Communications of the ACM</em></p>Macintosh Not Just Evil But Communist Furthermore2002-08-31T07:27:00-10:002002-08-31T07:27:00-10:00larrytag:knowing.net,2002-08-31:/posts/2002/08/macintosh-not-just-evil-but-communist-furthermore/<p>Macintosh, not just evil, but Communist! <em>"Furthermore, the Darwin OS is released under an "Open Source" license, which is just another name for Communism. "</em></p>If You Do Video Editing On Windows XP Dont Install The DirectX 8 SDK It Appears To Install A Debug Version Of The Librarie2002-08-31T05:29:00-10:002002-08-31T05:29:00-10:00larrytag:knowing.net,2002-08-31:/posts/2002/08/if-you-do-video-editing-on-windows-xp-dont-install-the-directx-8-sdk-it-appears-to-install-a-debug-version-of-the-librarie/<p>If you do video editing on Windows XP, don't install the DirectX 8 SDK. It appears to install a debug version of the libraries (I think, most importantly, quartz.dll) that screws up, at the very least, ULead MediaStudio Pro and Scenalyzer. Probably other video editing software, too, because I …</p><p>If you do video editing on Windows XP, don't install the DirectX 8 SDK. It appears to install a debug version of the libraries (I think, most importantly, quartz.dll) that screws up, at the very least, ULead MediaStudio Pro and Scenalyzer. Probably other video editing software, too, because I think they all rely on DX for rendering. Boy do I hope that DX 9 is coming soon.</p>Grrr My Optimization Example Is Suddenly Not Showing Major Differences Between Steps 1 And 2 Which Should Be Showing About A2002-08-30T05:13:00-10:002002-08-30T05:13:00-10:00larrytag:knowing.net,2002-08-30:/posts/2002/08/grrr-my-optimization-example-is-suddenly-not-showing-major-differences-between-steps-1-and-2-which-should-be-showing-about-a/<p>Grrr... my optimization example is suddenly not showing major differences between steps 1 and 2 (which should be showing about a 40% speedup).</p>Ever Since Ive Come Back From PNG Ive Been Trying To Finalize The Book2002-08-29T06:27:00-10:002002-08-29T06:27:00-10:00larrytag:knowing.net,2002-08-29:/posts/2002/08/ever-since-ive-come-back-from-png-ive-been-trying-to-finalize-the-book/<p>Ever since I've come back from PNG, I've been trying to finalize the book. So far, this has been formatting and making sure that the programs run as directed. All I can think of, though, is how much I want to go back to PNG. Argh!</p>Saw Rivers And Tidesnbsplast Night A Documentary On The Environmental2002-07-21T05:24:00-10:002002-07-21T05:24:00-10:00larrytag:knowing.net,2002-07-21:/posts/2002/07/saw-rivers-and-tidesnbsplast-night-a-documentary-on-the-environmental/<p>Saw <em>Rivers and Tides</em> last night, a documentary on the environmental artist (as in, site specific art) <a href="http://www.artcyclopedia.com/artists/goldsworthy_andy.html">Andy Goldsworthy</a>. It's an exceptional documentary about an exceptional artist. It's incredibly rare for a major artist to come across in a documentary in an approachable manner. I guess the movie will not …</p><p>Saw <em>Rivers and Tides</em> last night, a documentary on the environmental artist (as in, site specific art) <a href="http://www.artcyclopedia.com/artists/goldsworthy_andy.html">Andy Goldsworthy</a>. It's an exceptional documentary about an exceptional artist. It's incredibly rare for a major artist to come across in a documentary in an approachable manner. I guess the movie will not be released outside of San Francisco for several months, but when it does, I'm sure it will do very well in the arthouse circuit.</p>A Review Of A New Kind Of Science In New Scientist Makes The Excellent Point That One Of The Huge Problems With It Is T2002-07-21T05:18:00-10:002002-07-21T05:18:00-10:00larrytag:knowing.net,2002-07-21:/posts/2002/07/a-review-of-a-new-kind-of-science-in-new-scientist-makes-the-excellent-point-that-one-of-the-huge-problems-with-it-is-t/<p>A review of <em>A New Kind of Science</em> in New Scientist makes the excellent point that one of the huge problems with it is that it doesn't make <em>disprovable</em> claims. One thing that's been interesting is that the reviews of <em>ANKoS</em> have been quite mild, while its flaws are obvious …</p><p>A review of <em>A New Kind of Science</em> in New Scientist makes the excellent point that one of the huge problems with it is that it doesn't make <em>disprovable</em> claims. One thing that's been interesting is that the reviews of <em>ANKoS</em> have been quite mild, while its flaws are obvious. This is certainly due in part to the respect that one <em>should</em> accord Wolfram for his role in developing the theories of cellular automata. But as <em>ANKoS</em> is a book that I feel qualified in making absolute statements about, it makes me wonder about <em>The Skeptical Environmentalist</em>, which has been absolutely excoriated in the scientific press. Is that book just monumentally bad or are the attacks on it just so much more vehement than on <em>ANKoS</em> because <em>The Skeptical Environmentalist</em> is politically incorrect?</p>Wolframs A HrefhttpwwwamazoncomexecobidosASIN1579550088qid1025630571sr21refsr21102082497757849652002-07-02T00:18:00-10:002002-07-02T00:18:00-10:00larrytag:knowing.net,2002-07-02:/posts/2002/07/wolframs-a-hrefhttpwwwamazoncomexecobidosasin1579550088qid1025630571sr21refsr2110208249775784965/<p>Wolfram's <em><a href="https://www.amazon.com/exec/obidos/ASIN/1579550088/qid%3d1025630571/sr%3d2-1/ref%3dsr_2_1/102-0824977-5784965">A New Kind of Science</a></em> is execrable. It's 1100 pages based on a point that everyone interested in the subject already knew: simple cellular automata can have arbitrarily complex behavior. Given that CAs and Turing Machines are the particle accelerators of computer science, and given the heavy buzz related …</p><p>Wolfram's <em><a href="https://www.amazon.com/exec/obidos/ASIN/1579550088/qid%3d1025630571/sr%3d2-1/ref%3dsr_2_1/102-0824977-5784965">A New Kind of Science</a></em> is execrable. It's 1100 pages based on a point that everyone interested in the subject already knew: simple cellular automata can have arbitrarily complex behavior. Given that CAs and Turing Machines are the particle accelerators of computer science, and given the heavy buzz related to algorithmic thermodynamics, and given Wolfram's claims, a reasonable expectation of this book is that the "new kind of science" might, oh I don't know, consist of something more than 1100 pages of "Look at the pictures and you'll develop an intuition that I'm a genius." Instead, Wolfram seems to think that the generation of complex sequences from simple rules is some kind of shattering revelation. At first, you think "Okay, maybe I'm missing something," but there's no there there. It's as if Wolfram had never heard of complex numbers, had never heard of pi (which can also be generated from a simple formula).</p>
<p>For a much better popular book on the deep relationship between computer science and physics, try <a href="https://www.amazon.com/exec/obidos/ASIN/067974021X/qid%3d1025630497/sr%3d1-2/ref%3dsr_1_2/102-0824977-5784965"><em>Fire In The Mind</em></a>. For something meatier, I like <a href="https://www.amazon.com/exec/obidos/ASIN/0201515067/qid%3d1025630404/sr%3d8-2/ref%3dsr_8_2/102-0824977-5784965"><em>Complexity, Entropy and the Physics of Information: The Proceedings of the 1988 Workshop on Complexity, Entropy, and the Physics of Information</em></a>.</p>addoubleclicknet Crashes My Internet Explorer I Think I May Have Once Done Some Manipulation So That Doubleclicknet Resolves2002-06-28T06:39:00-10:002002-06-28T06:39:00-10:00larrytag:knowing.net,2002-06-28:/posts/2002/06/addoubleclicknet-crashes-my-internet-explorer-i-think-i-may-have-once-done-some-manipulation-so-that-doubleclicknet-resolves/<p>ad.doubleclick.net crashes my Internet Explorer. I think I may have once done some manipulation so that doubleclick.net resolves to the localhost, so what may be happening is that <strong>ad</strong>.doubleclick.net is trying to resolve to a more specific machine that localhost, timeout, etc.</p>A Turing Machine Moving Across A Tape Can Also Be Seen As A Triangle Of Possible Cells Being Occupied Set Into A Definite Stat2002-06-21T10:16:00-10:002002-06-21T10:16:00-10:00larrytag:knowing.net,2002-06-21:/posts/2002/06/a-turing-machine-moving-across-a-tape-can-also-be-seen-as-a-triangle-of-possible-cells-being-occupied-set-into-a-definite-stat/<p>A Turing machine moving across a tape can also be seen as a triangle of possible cells being occupied / set into a definite state on a plane, a la the evolution of a cellular automata. Hmmm...</p>Ive Been Thinking About P NP Lately I Think The Recent Advances In Thermodynamics Of Computation Give The Insight To Solve2002-06-21T04:30:00-10:002002-06-21T04:30:00-10:00larrytag:knowing.net,2002-06-21:/posts/2002/06/ive-been-thinking-about-p-np-lately-i-think-the-recent-advances-in-thermodynamics-of-computation-give-the-insight-to-solve/<p>I've been thinking about P != NP lately. I think the recent advances in thermodynamics of computation give the insight to solve it. Basically, my thought is that if you can characterizes P and NP problems in terms of <em>area</em> (or more specifically, <em>growth</em>), you can apply physical constraints (notably C …</p><p>I've been thinking about P != NP lately. I think the recent advances in thermodynamics of computation give the insight to solve it. Basically, my thought is that if you can characterizes P and NP problems in terms of <em>area</em> (or more specifically, <em>growth</em>), you can apply physical constraints (notably C as the limit of the velocity by which information can propagate) to the problem. Oh goody! Now I can be a crank getting in way over my depth!</p>