<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6426345363781422461</id><updated>2026-04-13T16:59:14.256+00:00</updated><title type='text'>The Return of Agent Zlerich</title><subtitle type='html'>As far as the Internet can tell me, no one uses &quot;Zlerich&quot;. I call dibs.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default?start-index=26&amp;max-results=25'/><author><name>Unknown</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>170</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3604963837723524672</id><published>2026-04-13T16:51:00.005+00:00</published><updated>2026-04-13T16:59:14.194+00:00</updated><title type='text'>Tidbits from the World</title><content type='html'>&lt;p&gt;&lt;b&gt;Just quotes, etc. where I frequently want the original source… &lt;/b&gt;&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;http://jdebp.info/FGA/legacy-is-not-a-pejorative.html&quot;&gt;“Legacy” is not a pejorative.&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“Invert, always, invert”&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.anup.io/invert-always-invert/&quot;&gt;Jacobi originally&lt;/a&gt; but &lt;a href=&quot;https://fs.blog/inversion/?ref=anup.io&quot;&gt;popularized by Munger&lt;/a&gt; : “...it is in the nature of things that many hard problems are best solved when they are addressed backward”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Algorithm for inversion:&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Define the problem - what is it that  you&#39;re trying to achieve?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Invert it - what would guarantee the failure to achieve this outcome?&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Finally, consider solutions to avoid this failure&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;“[Not naming software tools] is actually a lesson that originates from the early days of Call of Duty at IW. From what I’m told, IW never named their engine, because any time you name something it becomes a bit more of a thing, and you start working for it. And they were a studio making games, the game is the thing. Nothing else.” [&lt;a href=&quot;http://c0de517e.blogspot.com/2019/03/what-i-learned-at-activision.html?m=1&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“You have to do basic science on your libraries to see how they work…” [&lt;a href=&quot;https://wingolog.org/archives/2009/03/24/international-lisp-conference-day-two&quot;&gt;Sussman as reported by Wingo&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“A pointer is an integer with a shiv” [&lt;a href=&quot;http://lambda-the-ultimate.org/node/5553&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Optimal stopping problems are solved with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Odds_algorithm&quot;&gt;odds algorithm&lt;/a&gt;, e.g. the  &lt;a href=&quot;https://en.wikipedia.org/wiki/Secretary_problem&quot;&gt;classical secretary problem&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“The Statistics of Sharpe Ratios” by Andrew Lo [&lt;a href=&quot;https://www.tandfonline.com/doi/abs/10.2469/faj.v58.n4.2453&quot;&gt;paper&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“You are in a drawdown.  When should you start worrying?” [&lt;a href=&quot;https://arxiv.org/abs/1707.01457&quot;&gt;paper&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;NIST has several excellent references:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://xlinux.nist.gov/dads/&quot;&gt;Dictionary of Algorithms and Data Structures&lt;/a&gt;  (DADS), a dictionary of algorithms, algorithmic techniques, data structures, archetypal problems, etc&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.itl.nist.gov/div898/handbook/index.htm&quot;&gt;Engineering Statistics Handbook&lt;/a&gt; with chapters Explore, Measure, Characterize, Model, Improve, Monitor, Compare, and Reliability&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;“If you have a procedure with 10 parameters, you probably missed some.” [&lt;a href=&quot;http://pu.inf.uni-tuebingen.de/users/klaeren/epigrams.html&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Driscoll Kraay Standard Errors are &lt;a href=&quot;https://fastercapital.com/content/Driscoll-Kraay-Standard-Errors--Spatial-Dimensions--Driscoll-Kraay-Standard-Errors-for-Robust-Inference.html&quot;&gt;robust to both cross-sectional and temporal dependence&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The  &lt;a href=&quot;https://python-graph-gallery.com/all-charts/&quot;&gt;Python Graph Gallery&lt;/a&gt; is a visual reference over many graphs along with the source code to produce them.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Total_least_squares&quot;&gt;Total least squares&lt;/a&gt;  minimizes errors on both dependent and independent variables.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Bottom Line Up Front (BLUF) writing [&lt;a href=&quot;https://hbr.org/2016/11/how-to-write-email-with-military-precision&quot;&gt;HBR&lt;/a&gt;,  &lt;a href=&quot;https://en.wikipedia.org/wiki/BLUF_(communication)&quot;&gt;Wikipedia&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Dennis Ritchie: “Our habit of trying to document bugs and limitations visibly was enormously useful to the system. As we put out each edition, the presence of these sections shamed us into fixing innumerable things rather than exhibiting them in public. I remember clearly adding or editing many of these sections, then saying to myself &#39;I can&#39;t write this,&#39; and fixing the code instead.” [&lt;a href=&quot;http://www.collyer.net/who/geoff/history.html&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.listendata.com/2018/03/regression-analysis.html&quot;&gt;A bestiary of regression variants&lt;/a&gt; , including:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Linear Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Polynomial Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Logistic Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Quantile Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ridge Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Lasso Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Elastic Net Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Principal Components Regression (PCR)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Partial Least Squares (PLS) Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Support Vector Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ordinal Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Poisson Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Negative Binomial Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Quasi Poisson Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Cox Regression&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Tobit Regression&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://brunodias.dev/2021/03/19/functions-for-system-designers.html&quot;&gt;A Bestiary of Functions for Systems Designers&lt;/a&gt;  is a nice visual guide&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Karpathy blogged &lt;a href=&quot;http://karpathy.github.io/2019/04/25/recipe/&quot;&gt;A Recipe for Training Neural Networks&lt;/a&gt; :&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Become one with the data&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Set up the end-to-end training/evaluation skeleton + get dumb baselines&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Overfit, recalling &lt;a href=&quot;https://windowsontheory.org/2019/12/05/deep-double-descent/&quot;&gt;deep double descent&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Regularize&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Tune&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Squeeze out the juice&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;Agustin Lebron’s &lt;a href=&quot;https://www.amazon.com/Laws-Trading-Traders-Decision-Making-Everyone/dp/1119574218&quot;&gt;The Laws of Trading&lt;/a&gt; :&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Know why you are doing a trade before you trade.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;You&#39;re never happy with the amount you traded.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Take only the risks you&#39;re being paid to take.  Hedge the others.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Put on a risk using the most liquid instrument for that risk.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If you can&#39;t explain your edge in five minutes, you don&#39;t have a very good one.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The long-term profitability of an edge is inversely proportional to how long it takes to explain it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The model expresses the edge.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If you think your costs are negligible relative to your edge, you&#39;re wrong about at least one of them.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Just because something has never happened doesn&#39;t mean it can&#39;t.&lt;br&gt;&lt;/br&gt;Corollary: Enough people relying on something being true makes it false.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Working to align everyone&#39;s interests is time well spent.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If you don&#39;t master technology and data, you&#39;re losing to someone who does.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If you&#39;re not getting better, you&#39;re getting worse.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;Shellhaters.org has a great &lt;a href=&quot;https://shellhaters.org/&quot;&gt;POSIX Shell and Utilities Quick Reference&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Practical SQL for Data Analysis: What you can do without Pandas [&lt;a href=&quot;https://hakibenita.com/sql-for-data-analysis&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Taguchi_methods&quot;&gt;Taguchi methods&lt;/a&gt; are statistical methods, sometimes called robust design methods, developed by Genichi Taguchi to improve the quality of manufactured goods, and more recently also applied to engineering…. See also &lt;a href=&quot;https://en.wikipedia.org/wiki/Orthogonal_array&quot;&gt;orthogonal arrays&lt;/a&gt; , &lt;a href=&quot;https://en.wikipedia.org/wiki/Optimal_experimental_design&quot;&gt;optimal experimental link&lt;/a&gt;, and notice &lt;a href=&quot;https://snl-dakota.github.io/docs/6.23.0/users/usingdakota/studytypes/designofexperiments.html&quot;&gt;Sandia’s Dakota implements many of these ideas&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Prefer to change the code rather than write a workaround [&lt;a href=&quot;https://catern.com/change_code.html&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;By nature, bugs are found in places that you didn’t think to look [&lt;a href=&quot;https://timkellogg.me/blog/2021/01/29/cold-paths&quot;&gt;source&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;A cold path is a path through the code or situation that rarely happens.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;By contrast, hot paths happen frequently. You don’t find bugs in hot paths.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Bugs are always in cold paths — every bug is found in a path colder than all the paths you tested.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Don’t have cold paths and avoid fallbacks&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://tech.davis-hansson.com/p/make/&quot;&gt;Your Makefiles are wrong&lt;/a&gt; is an opinionated approach to GNU Make:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Don’t use tabs with .RECIPEPREFIX&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Always use (a recent) bash in strict mode&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Change some Make defaults, with a nice TLDR pre-amble&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;Mike Acton’s Expectations of Professional Software Engineers [&lt;a href=&quot;https://adamj.eu/tech/2022/06/17/mike-actons-expectations-of-professional-software-engineers/&quot;&gt;summary&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.frankmcsherry.org/graph/scalability/cost/2015/01/15/COST.html&quot;&gt;Scalability! But at what COST?&lt;/a&gt; says “Big data systems may scale well, but this can often be just because they introduce a lot of overhead” and is often referred to as “The COST Paper”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.brendangregg.com/blog/2014-05-11/strace-wow-much-syscall.html&quot;&gt;strace Wow Much Syscall&lt;/a&gt; by Brendan Gregg includes useful strace  one-liners&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Richard Sutton’s &lt;a href=&quot;http://www.incompleteideas.net/IncIdeas/BitterLesson.html&quot;&gt;The Bitter Lesson&lt;/a&gt; starts “The biggest lesson that can be read from 70 years of AI research is that general methods that leverage computation are ultimately the most effective, and by a large margin….” and begins to conclude “One thing that should be learned from the bitter lesson is the great power of general purpose methods, of methods that continue to scale with increased computation even as the available computation becomes very great. The two methods that seem to scale arbitrarily in this way are search and learning.”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://rigaux.org/language-study/syntax-across-languages.html&quot;&gt;Syntax across languages&lt;/a&gt;  is a gigantic survey of language design, e.g. operators/functions/etc. The survey can often inform what some collection of users will find natural or unnatural based on their existing skills.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/higham/what-is&quot;&gt;Nick Higham’s “What Is” article series&lt;/a&gt;  gives brief descriptions of concepts in numerical analysis for upper-level undergraduates with mathematical inclinations&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://journal.stuffwithstuff.com/2016/06/16/long-names-are-long/&quot;&gt;Long names are long&lt;/a&gt; observes “identifiers that are too damn long.”&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Omit words that are obvious given a variable’s or parameter’s type&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Omit words that don’t disambiguate the name&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Omit words that are known from the surrounding context&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Omit words that don’t mean much of anything&lt;br&gt;&lt;/br&gt;(e.g. data, state, amount, value, manager, engine, object, entity, and instance)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Ends with a humorous application to waffles.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://pages.gseis.ucla.edu/faculty/agre/how-to-help.html&quot;&gt;How to help someone use a computer&lt;/a&gt; : “Computer people are fine human beings, but they do a lot of harm in the ways they &quot;help&quot; other people with their computer problems….”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Common statistical tests are linear models:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://lindeloev.github.io/tests-as-linear/&quot;&gt;Exposition in R&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.georgeho.org/tests-as-linear/&quot;&gt;Exposition in Python&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/PaulVanDev/HoeffdingD&quot;&gt;Hoeffding’s test for dependence&lt;/a&gt; was proposed by Wassily Hoeffding (1948) as a test of correlation for two variables with continuous distribution functions (&lt;a href=&quot;https://en.wikipedia.org/wiki/Hoeffding%27s_independence_test&quot;&gt;wikipedia&lt;/a&gt;, &lt;a href=&quot;https://github.com/Dicklesworthstone/hoeffdings_d_explainer&quot;&gt;random blog&lt;/a&gt;,  &lt;a href=&quot;https://github.com/Dicklesworthstone/hoeffdings_d_explainer&quot;&gt;post&lt;/a&gt;). Hoeffding’s D is a nonparametric measure of the distance between the joint distribution F(x, y) and the product of marginal distributions F1(x)F2(y). The advantage of this statistic lies in the fact that it has more power to detect non-monotonic dependency structures compared to other more common measures (Pearson, Kendall, Spearman)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Data systems often fall into one of schema-on-write or schema-on-read:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Traditional databases are schema-on-write: “we can&#39;t upload data until the table is created and we can&#39;t create tables until we understand the schema of the data that will be in this table.”&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Newer systems, e.g. “Big Data” is often schema-on-read, requiring all code that handles the data to understand it’s implicit schema.  Still “some level of schema design is inevitable”.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Martin Kleppmann’s book &lt;a href=&quot;https://www.amazon.com/Designing-Data-Intensive-Applications-Reliable-Maintainable-dp-1098119061&quot;&gt;Designing Data-Intensive Applications&lt;/a&gt; often comes up.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://erikbern.com/2023/12/13/simple-sabotage-for-software.html&quot;&gt;Simple sabotage for software&lt;/a&gt; , taking CIA sabotage manuals for inspiration, enumerates many horrid, insidious ways to sabotage a software organization.  To do better as an organization, work to prevent even accidental sabotage.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.oilshell.org/blog/2022/02/diagrams.html&quot;&gt;The Internet Was Designed With a Narrow Waist&lt;/a&gt;:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;A narrow waist is concept, interface, or protocol that solves an interoperability problem.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Picture an hourglass with M things on one side, N on the other, and an important concept in the middle.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;It avoids O(M × N) code explosions, letting us write O(M + N) amounts of code instead.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Byte streams and text are essential narrow waists in software, particularly in distributed-systems like the Internet.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;On achieving high-level goals [&lt;a href=&quot;https://www.amazon.com/Corporate-Confidential-Secrets-Company-Know/dp/0312337361&quot;&gt;source&lt;/a&gt; pp 138-9]:&lt;/p&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Write down your five biggest goals for the year.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Pick the one that will make the biggest difference in your life.  Tackle that one first.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Write your chosen goal in the past tense as though it&#39;s already happened. This will not only tell you whether you truly want it by how you feel as you look back at it from the future, it will also help you identify (in imagined hindsight) all the critical steps it will take to get there.  Outline as many critical steps as come to mind.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Write out twenty different things you could do right now to make it happen. Really stretch your thinking in new directions to get all twenty.  Now pick the one goal that will have the greatest impact on the achievement of that goal.  Try to knock one off your list each day, or week (depending on the goal).  Keep going with twenty more, and twenty more, until the goal is achieved.  Focus on only one goal at a time, putting all your energy in that one direction.  (Trying to work on them all at once can be overwhelming and diffuses your effectiveness and focus).&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Thompson_sampling&quot;&gt;Thompson sampling&lt;/a&gt; is commonly used as a multi-armed bandit algorithm. &lt;a href=&quot;https://github.com/rhysu/tuna/issues/24&quot;&gt;I have personally used it&lt;/a&gt; for an older side project.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://www.seangoedecke.com/how-to-ship/&quot;&gt;“Shipping is a social construct within a company.”&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;There’s &lt;a href=&quot;https://github.com/forrestchang/andrej-karpathy-skills/blob/main/CLAUDE.md&quot;&gt;a CLAUDE.md containing Karpathy-inspired Claude Code guidelines&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://apenwarr.ca/log/20260316&quot;&gt;Every layer of review makes you 10x slower&lt;/a&gt; by he of &lt;a href=&quot;https://github.com/apenwarr/redo&quot;&gt;apenwarr/redo&lt;/a&gt; fame.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;b&gt; &lt;/b&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3604963837723524672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/3604963837723524672' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3604963837723524672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3604963837723524672'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2026/04/tidbits-from-world.html' title='Tidbits from the World'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1642508092477155211</id><published>2018-02-04T16:20:00.000+00:00</published><updated>2018-02-04T16:20:17.895+00:00</updated><title type='text'>Randomized addition worksheets for kiddos using Bash Pipelines</title><content type='html'>Following up on &lt;a href=&quot;http://agentzlerich.blogspot.com/2017/06/randomized-reading-lists-for-kiddos.html&quot;&gt;a prior randomized worksheet for reading&lt;/a&gt;, here&#39;s a way to generate as many simple addition worksheets as you care to print:

&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;font-size:x-small;&quot;&gt;
#!/bin/bash
# Print a US letter page of addition problems using numbers 0 through 10.
(
    for i in $(seq 1 26); do
        printf &quot;%2d %s %2d = \n&quot; &quot;$((RANDOM % 11))&quot; &quot;+&quot; &quot;$((RANDOM % 11))&quot;
    done
) \
| column -nxc 36 \
| sed G \
| head -n -1 \
| a2ps -1 --chars-per-line=32 --no-header --borders=no
&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1642508092477155211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/1642508092477155211' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1642508092477155211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1642508092477155211'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2018/02/randomized-addition-worksheets-for.html' title='Randomized addition worksheets for kiddos using Bash Pipelines'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4899576732894492091</id><published>2017-06-03T13:09:00.000+00:00</published><updated>2017-06-03T18:24:35.427+00:00</updated><title type='text'>Randomized Reading Lists for Kiddos using Bash Pipelines</title><content type='html'>&lt;p&gt;
Our kiddo is very good at memorizing stories and word sequences but needs to work on looking at the letters on the page.  Simple bash pipelines can produce useful offline learning materials.
&lt;/p&gt;

&lt;p&gt;
For example, print a randomized word list from inline story text for a book your kid loves:
&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;font-size:x-small;&quot;&gt;
#!/bin/bash
tr -d &#39;&quot;,!.-&#39; &amp;lt;&amp;lt; EOF                          \
    | tr -s &#39; &#39; &#39;\n&#39;                          \
    | sed &#39;/^$/d&#39;                             \
    | sort -u                                 \
    | shuf                                    \
    | column -c 64                            \
    | nl                                      \
    | a2ps -1 --chars-per-line=70 --no-header

The night Max wore his wolf suit and made mischief of one kind
and another
his mother called him &quot;WILD THING!&quot;
...

EOF
&lt;/pre&gt;
Run the script once to produce the word list.  Print the source once to have the picture-less story.  Carry both in your pocket on the plane/train/etc.  After some work on the word list, the kid should be encouraged by &quot;rediscovering&quot; the picture-less story he knows using the sight words he&#39;s just practiced.  In theory.  Still working on the practice.
&lt;/p&gt;

&lt;p&gt;
Another example, print a randomized list of kindergarten sight words:
&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;font-size:x-small;&quot;&gt;
#!/bin/bash
sort -u &amp;lt;&amp;lt;EOF | shuf | column -c 64 | nl | a2ps -1 --chars-per-line=70 --no-header
a
about
after
again
all
always
am
an
and
any
are
as
ask
at
away
back
ball
be
beautiful
because
been
begin
best
big
but
by
came
can
come
could
couldn&#39;t
day
did
do
does
don&#39;t
down
each
easy
eat
either
enough
family
find
for
friend
from
fun
get
girl
go
goes
going
got
great
had
has
have
he
her
here
high
him
his
home
house
how
I
idea
if
I&#39;m
in
into
is
it
jump
just
know
last
let
like
little
look
love
make
man
me
might
mom
more
mother
much
my
never
next
no
not
now
of
often
on
or
our
out
over
play
pretty
probably
put
ran
read
ready
run
said
same
sat
saw
say
school
see
she
should
sit
so
soon
special
such
suddenly
take
than
that
the
their
them
themselves
then
there
they
they&#39;re
things
think
this
thought
three
through
to
today
together
too
two
under
until
up
us
very
wait
walk
want
was
we
went
were
what
when
where
while
who
will
with
without
yes
you
your
you&#39;re
yourself
EOF
&lt;/pre&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4899576732894492091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/4899576732894492091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4899576732894492091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4899576732894492091'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2017/06/randomized-reading-lists-for-kiddos.html' title='Randomized Reading Lists for Kiddos using Bash Pipelines'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7252163713573378380</id><published>2016-12-11T18:57:00.005+00:00</published><updated>2016-12-11T18:57:55.060+00:00</updated><title type='text'>Travis-CI config for both recent(ish) gcc and clang</title><content type='html'>On account of the age of Travis-CI&#39;s build images (I hear) getting a new-ish C++ compiler going is futzy.  After &lt;a href=&quot;https://stackoverflow.com/questions/39682792/travis-ci-build-matrix-contains-spurious-entry&quot;&gt;much futzing&lt;/a&gt;, the following .travis.yml file works for an &lt;a href=&quot;https://github.com/RhysU/descendu&quot;&gt;autoconfiscated project&lt;/a&gt;:
&lt;pre class=&quot;prettyprint linenums&quot; style=&quot;font-size:x-small;&quot;&gt;
language: generic
script: ./bootstrap &amp;&amp; ./configure &amp;&amp; make all &amp;&amp; make check &amp;&amp; make distcheck
matrix:
  include:
    - os: linux
      env: COMPILER_NAME=gcc CXX=g++-5 CC=gcc-5
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
          packages:
            - autotools-dev
            - g++-5
    - os: linux
      env: COMPILER_NAME=clang CXX=clang++-3.8 CC=clang-3.8
      addons:
        apt:
          sources:
            - ubuntu-toolchain-r-test
            - llvm-toolchain-precise-3.8
          packages:
            - autotools-dev
            - clang-3.8
&lt;/pre&gt;
</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7252163713573378380/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/7252163713573378380' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7252163713573378380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7252163713573378380'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2016/12/travis-ci-config-for-both-recentish-gcc.html' title='Travis-CI config for both recent(ish) gcc and clang'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8607376496592187421</id><published>2014-10-28T12:10:00.002+00:00</published><updated>2014-10-28T12:12:00.381+00:00</updated><title type='text'>Dissertation appeareth</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipT_duxvjn-xXtNaoBpk0_wBymuRhmn9JTE581fWfd3sDPdMfg3zmlAQPG6cvdYeQSaai5O3ost6wEXp0NyNDyBge4XhopnVn9H8MqTFAQ-U42t_VB-OhLZKGyTHDc8atxindEVBhIZyI/s1600/OrionTPSScale_small.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipT_duxvjn-xXtNaoBpk0_wBymuRhmn9JTE581fWfd3sDPdMfg3zmlAQPG6cvdYeQSaai5O3ost6wEXp0NyNDyBge4XhopnVn9H8MqTFAQ-U42t_VB-OhLZKGyTHDc8atxindEVBhIZyI/s320/OrionTPSScale_small.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
My dissertation, &lt;a href=&quot;http://repositories.lib.utexas.edu/handle/2152/26886&quot;&gt;Reducing turbulence- and transition-driven uncertainty in aerothermodynamic heating predictions for blunt-bodied reentry vehicles&lt;/a&gt;, appeared online today in the &lt;a href=&quot;https://www.lib.utexas.edu/&quot;&gt;University of Texas Library system&lt;/a&gt;.  Bonus points if you find the typo in the abstract that I accidentally inserted during my final day of editing.  Triple word score if you browse through the introductory chapter and ask me questions&amp;mdash;my hope is that it is fairly accessible.
&lt;/p&gt;

&lt;p&gt;
Content from Chapter 6, Characteristics of the Homogenized Boundary Layers at Atmospheric Reentry-like Conditions, &lt;a href=&quot;http://meeting.aps.org/Meeting/DFD14/Session/L26.4&quot;&gt;will be presented&lt;/a&gt; at &lt;a href=&quot;http://apsdfd2014.stanford.edu/&quot;&gt;APS DFD 2014&lt;/a&gt; at Stanford in a few weeks.  Man, I need to finish those slides...
&lt;/p&gt;

&lt;p&gt;
Very cool is that, as of today, &lt;a href=&quot;http://www.nasa.gov/exploration/systems/mpcv/index.html&quot;&gt;NASA is testing the Orion MPCV on December 4th&lt;/a&gt;.  That means soon they&#39;ll be some real flight data against which my simulation-based predictions found in Chapter 7, Detecting Turbulence-Sustaining Regions on Blunt-Bodied Reentry Vehicles, can be compared.
&lt;/p&gt;

&lt;p&gt;
Happily, the dissertation source code attachments appear to have been preserved too.  That said, the GitHub &lt;a href=&quot;https://github.com/RhysU/suzerain&quot;&gt;suzerain&lt;/a&gt; and &lt;a href=&quot;https://github.com/RhysU/ESIO&quot;&gt;ESIO&lt;/a&gt; repositories should be preferred over the electronic dissertation attachments for anything other than sleuthing out precisely what I implemented in my thesis.  I&#39;ve already written about the &lt;a href=&quot;http://agentzlerich.blogspot.com/2014/08/data-sets-from-my-dissertation.html&quot;&gt;openly available data sets&lt;/a&gt; generated for the work.
&lt;/p&gt;

&lt;p&gt;
(Image courtesy of NASA)
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8607376496592187421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/8607376496592187421' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8607376496592187421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8607376496592187421'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/10/dissertation-appeareth.html' title='Dissertation appeareth'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipT_duxvjn-xXtNaoBpk0_wBymuRhmn9JTE581fWfd3sDPdMfg3zmlAQPG6cvdYeQSaai5O3ost6wEXp0NyNDyBge4XhopnVn9H8MqTFAQ-U42t_VB-OhLZKGyTHDc8atxindEVBhIZyI/s72-c/OrionTPSScale_small.jpg" height="72" width="72"/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8978519529019574007</id><published>2014-08-11T15:03:00.003+00:00</published><updated>2014-08-11T15:26:36.451+00:00</updated><title type='text'>Data sets from my dissertation</title><content type='html'>&lt;p&gt;
This past week I successfully defended my doctoral dissertation.  Two of the three direct numerical simulation data sets I generated during my thesis research are online at &lt;a href=&quot;http://turbulence.ices.utexas.edu/&quot;&gt;turbulence.ices.utexas.edu&lt;/a&gt; if anyone&#39;s interested:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://turbulence.ices.utexas.edu/coleman&quot;&gt;Sub- through Supersonic Coleman-like Channels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://turbulence.ices.utexas.edu/mpcvissturb&quot;&gt;Spatiotemporally Homogenized Boundary Layers at Atmospheric Reentry-like Conditions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8978519529019574007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/8978519529019574007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8978519529019574007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8978519529019574007'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/08/data-sets-from-my-dissertation.html' title='Data sets from my dissertation'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2164240599560758785</id><published>2014-06-05T18:46:00.003+00:00</published><updated>2014-06-05T18:46:55.863+00:00</updated><title type='text'>Sub- through Supersonic Coleman-like Channels</title><content type='html'>&lt;p&gt;
I finally cleaned up my &lt;a href=&quot;http://turbulence.ices.utexas.edu/coleman/&quot;&gt;compressible, turbulent channel&lt;/a&gt; results computed with my thesis code, &lt;a href=&quot;https://github.com/RhysU/suzerain&quot;&gt;Suzerain&lt;/a&gt;.  The dataset includes instantaneous planar averages of 180+ quantities collected &lt;em&gt;in situ&lt;/em&gt; during the production runs along with &lt;a href=&quot;https://github.com/RhysU/ar&quot;&gt;rigorous sampling error estimates&lt;/a&gt; for the final ensemble results.
&lt;/p&gt;

&lt;p&gt;
If you want to quickly visualize something, &lt;a href=&quot;https://github.com/RhysU/suzerain/blob/master/postproc/summary_surf.py&quot;&gt;a little wrapper&lt;/a&gt; utility makes it a snap.  So, without further ado, gratuitous eye candy generated with &lt;code&gt;summary_surf.py -C 256 -f coleman3k15.h5 bar_u_v bar_u bar_v&lt;/code&gt;:
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1m9LAPYHb1ZSobd8cfmkaGg11wyQ3jkTKG6Rjs7bRMDqCYg13opIDn3edOoRQnR8H2vtFwoqjCyWjIprsSn9Hnxssr5WJE2laS30OmNa7i693LqAKb36wEVqi59195fBGrUITBDXqQE/s1600/coleman3k15.cov_u_v.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1m9LAPYHb1ZSobd8cfmkaGg11wyQ3jkTKG6Rjs7bRMDqCYg13opIDn3edOoRQnR8H2vtFwoqjCyWjIprsSn9Hnxssr5WJE2laS30OmNa7i693LqAKb36wEVqi59195fBGrUITBDXqQE/s1600/coleman3k15.cov_u_v.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2164240599560758785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/2164240599560758785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2164240599560758785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2164240599560758785'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/06/sub-through-supersonic-coleman-like.html' title='Sub- through Supersonic Coleman-like Channels'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhA1m9LAPYHb1ZSobd8cfmkaGg11wyQ3jkTKG6Rjs7bRMDqCYg13opIDn3edOoRQnR8H2vtFwoqjCyWjIprsSn9Hnxssr5WJE2laS30OmNa7i693LqAKb36wEVqi59195fBGrUITBDXqQE/s72-c/coleman3k15.cov_u_v.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5605922946318050156</id><published>2014-04-10T13:52:00.000+00:00</published><updated>2014-04-21T14:02:04.590+00:00</updated><title type='text'>Installing Chromium under $HOME on RHEL 6-ish x86_64 systems</title><content type='html'>&lt;p&gt;
Based upon &lt;a href=&quot;http://www.if-not-true-then-false.com/2013/install-chromium-on-centos-red-hat-rhel/&quot;&gt;Install Chromium (with Pepper Flash) on CentOS/Red Hat (RHEL) 6.5&lt;/a&gt; with modifications to permit non-root usage...
&lt;/p&gt;
&lt;pre class=&quot;prettyprint lang-sh&quot;&gt;
mkdir ~/workaround &amp;&amp; cd ~/workaround
wget http://people.centos.org/hughesjr/chromium/6/x86_64/RPMS/chromium-31.0.1650.63-2.el6.x86_64.rpm # 32-bit seemingly in repo too
rpm2cpio chromium-31.0.1650.63-2.el6.x86_64.rpm | cpio -idmv
./opt/chromium-browser/chromium-browser # Bombs on sandboxing complaints
./opt/chromium-browser/chromium-browser --no-sandbox # Confirm behaves for you
mv ./opt/chromium-browser ~ # Moving the whole directory into a permanent location
echo &#39;#/bin/sh&#39; &gt; ~/bin/chromium-browser # Assuming you have ~/bin in your path
echo &#39;exec $HOME/chromium-browser/chromium-browser --no-sandbox &quot;$@&quot;&#39; &gt;&gt; ~/bin/chromium-browser
chmod a+x ~/bin/chromium-browser
chromium-browser http://www.google.com &amp; # Rejoice
cd &amp;&amp; rm -rf ~/workaround # Hygiene
&lt;/pre&gt;
&lt;p&gt;
The are &lt;a href=&quot;http://unix.stackexchange.com/questions/68832/what-does-the-chromium-option-no-sandbox-mean&quot;&gt;glaring drawbacks&lt;/a&gt; to running Chromium with &lt;code&gt;--no-sandbox&lt;/code&gt; so don&#39;t do it without considering its implications.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5605922946318050156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/5605922946318050156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5605922946318050156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5605922946318050156'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/04/installing-chromium-under-home-on-rhel.html' title='Installing Chromium under $HOME on RHEL 6-ish x86_64 systems'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-608527791369907831</id><published>2014-03-29T23:05:00.002+00:00</published><updated>2014-03-29T23:05:54.125+00:00</updated><title type='text'>Twelfth</title><content type='html'>&lt;p&gt;A fun holdover from the days when I was last gainfully employed-- the 12th patent on which I&#39;m part inventor was issued earlier this month: &lt;a href=&quot;http://www.google.com/patents/US8671199&quot;&gt;Converged call flow modeling and converged web service interface design&lt;/a&gt;.&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/608527791369907831/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/608527791369907831' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/608527791369907831'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/608527791369907831'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/03/twelfth.html' title='Twelfth'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4890635217972841556</id><published>2014-03-28T02:42:00.000+00:00</published><updated>2014-03-28T02:43:45.278+00:00</updated><title type='text'>I {hate,heart} NaN</title><content type='html'>&lt;p&gt;
For two week&#39;s I&#39;ve intermittently been tracking down an issue where suddenly a flow profile goes from turbulent/sane to a uniform flow profile in a single time step.
&lt;/p&gt;

&lt;p&gt;
For awhile now I&#39;ve been running with &lt;a href=&quot;https://github.com/RhysU/suzerain/blob/master/suzerain/dsgbsvx.def&quot;&gt;a custom banded solver&lt;/a&gt; that permits
&lt;ul&gt;
&lt;li&gt;mixed precision factorization&lt;/li&gt;
&lt;li&gt;use of approximate factorizations, and&lt;/li&gt;
&lt;li&gt;iterative refinement.&lt;/li&gt;
&lt;/ul&gt;
Relative to &lt;a href=&quot;http://www.netlib.no/netlib/lapack/complex16/zgbsvx.f&quot;&gt;ZGBSVX&lt;/a&gt; this has been a net win.  I get firm control over the quality of my linear system solutions and save a factor of 10 (yes, 10) over LAPACK&#39;s Cadillac banded solve.
&lt;/p&gt;

&lt;p&gt;
It turns out that I didn&#39;t harden my one-off solver against NaNs.  Ah, NaNs.  Those lovely things that can make puzzling things like the following happen to a simulation:
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHLsvUPCuwM30sJWNrP7hmauO64DKP6enI5zTfRXgXchYo-goGzCpD-2BGBwCcx37irbmSh93tsY_7sh-Vs9xHH7ImOGuwTgooVLtVDWl5ouPMH4r_SUJPl_0Lh0_O-3PbJ_otX3qTlTQ/s1600/fun.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHLsvUPCuwM30sJWNrP7hmauO64DKP6enI5zTfRXgXchYo-goGzCpD-2BGBwCcx37irbmSh93tsY_7sh-Vs9xHH7ImOGuwTgooVLtVDWl5ouPMH4r_SUJPl_0Lh0_O-3PbJ_otX3qTlTQ/s400/fun.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
The problem wasn&#39;t the NaN showing up in a computation, as I&#39;d notice that.  The problem was NaN showing up in a residual computation.  Necessarily, that NaN failed a residual tolerance check.  Because the tolerance check was false, I&#39;d kick back a linear solution consisting of all zeros from an initial solution residual calculation that I&#39;d performed.
&lt;/p&gt;

&lt;p&gt;
What happened next was a comedy of my best intentions.  I had a forcing constraint set so that if my solution failed to match my freestream, the state profile was forced to match.  As my solution was all zeros, that NaN residual combined with the forcing caused my solution to become the freestream in a single time step.  And suddenly my simulations went from sane to uniform instantaneously.
&lt;/p&gt;

&lt;p&gt;
This came to me on the motorcycle while riding home after a rough day.
&lt;/p&gt;

&lt;p&gt;
I simultaneously love and hate the beauty that is floating point.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4890635217972841556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/4890635217972841556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4890635217972841556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4890635217972841556'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/03/i-hateheart-nan.html' title='I {hate,heart} NaN'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHLsvUPCuwM30sJWNrP7hmauO64DKP6enI5zTfRXgXchYo-goGzCpD-2BGBwCcx37irbmSh93tsY_7sh-Vs9xHH7ImOGuwTgooVLtVDWl5ouPMH4r_SUJPl_0Lh0_O-3PbJ_otX3qTlTQ/s72-c/fun.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3091728457526417234</id><published>2014-03-17T06:10:00.001+00:00</published><updated>2014-03-17T06:23:33.496+00:00</updated><title type='text'>helm: a proportional-integral-derivative controller implementation</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinf5MOfOsUBSymtqIB0MU7U5JYC5-4UYnzCNyG_9KBwadwzRSK5vrSCWR1gHjJNOx9hK_nW69HQFsMYFXKBr5fg8CQ5KdyLltXyYz403mjAbLiim8ZnyWWNOKO_fJxJtn7a5qpfStJotY/s1600/update39.bl_thick.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinf5MOfOsUBSymtqIB0MU7U5JYC5-4UYnzCNyG_9KBwadwzRSK5vrSCWR1gHjJNOx9hK_nW69HQFsMYFXKBr5fg8CQ5KdyLltXyYz403mjAbLiim8ZnyWWNOKO_fJxJtn7a5qpfStJotY/s400/update39.bl_thick.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
The class of homogenized boundary layer models I&#39;m using in my thesis (developed by &lt;a href=&quot;http://dx.doi.org/10.1017/s0022112088000345&quot;&gt;Spalart&lt;/a&gt;, made compressible by &lt;a href=&quot;http://dx.doi.org/10.1017/S0022112000008466&quot;&gt;Guarini et al&lt;/a&gt;, and most recently extended by &lt;a href=&quot;http://meetings.aps.org/Meeting/DFD13/Session/H30.7&quot;&gt;Topalian et al&lt;/a&gt;) has an adjustable knob called a &quot;slow growth rate&quot; that controls the thickness of the boundary layer.  One can manually fiddle with it.  One can use RANS simulations and hope that the value obtained produces something similar in a DNS.  I aim to apply some basic control theory by bolting a &lt;a href=&quot;http://www.wikipedia.org/wiki/PID_controller&quot;&gt;PID controller&lt;/a&gt; onto my simulations.
&lt;/p&gt;

&lt;p&gt;
It turns out everybody and their brother intuitively derive the equations governing a basic PID controller.  Then they wave their hands a bit about how to solve windup woes, bumpless transition, and deal with incremental/velocity forms.  Not that it doesn&#39;t work, but they drift away from the continuous equations to do so.  Then they cough up O(10) lines of code assuming a constant, discrete sampling rate.
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://github.com/RhysU/helm&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEis0CUVXyo5aGZiCBTCFgi-NkhLtyYq8rFbrR3iuUEFG41gNZcN751Zox3xIV3u36GnMIZcZSIc1k0cRu7a8MGOAsGC14glsntAK5n7DZl6W-ihtVVwpbKQl-PJImbOa6vosEE677qlQL0/s640/helm.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;

&lt;p&gt;
To permit variable sampling and understand where/how the fixes are made, I dug around until I found a nice treatment in &lt;a href=&quot;http://www.worldcat.org/isbn/9781400828739&quot;&gt;Astrom &amp;amp; Murray&lt;/a&gt; (&lt;a href=&quot;http://www.cds.caltech.edu/~murray/amwiki/index.php/Main_Page&quot;&gt;Available online&lt;/a&gt;), &lt;a href=&quot;http://rhysu.github.io/helm/helm_8h.html#details&quot;&gt;wrote up the variant of their PID derivation&lt;/a&gt; that I needed including the discretization, &lt;a href=&quot;http://rhysu.github.io/helm/helm_8h.html#a7875349b12753d0028ff0906b3ba6826&quot;&gt;coded up the algorithm&lt;/a&gt;, and then put together &lt;a href=&quot;http://rhysu.github.io/helm/step3_8c.html#details&quot;&gt;a small test driver&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
Aside from vanilla C99, the implementation has no dependencies.  I hope someone else can put it to use.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3091728457526417234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/3091728457526417234' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3091728457526417234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3091728457526417234'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/03/helm-proportional-integral-derivative.html' title='helm: a proportional-integral-derivative controller implementation'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinf5MOfOsUBSymtqIB0MU7U5JYC5-4UYnzCNyG_9KBwadwzRSK5vrSCWR1gHjJNOx9hK_nW69HQFsMYFXKBr5fg8CQ5KdyLltXyYz403mjAbLiim8ZnyWWNOKO_fJxJtn7a5qpfStJotY/s72-c/update39.bl_thick.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-3607058606836984468</id><published>2014-03-16T18:51:00.004+00:00</published><updated>2014-03-16T22:49:55.204+00:00</updated><title type='text'>One bit</title><content type='html'>&lt;p&gt;
Despite coding being proverbially all zeros and ones, it&#39;s not often that a single, isolated bit is damning.
&lt;/p&gt;

&lt;p&gt;
Today, however, &lt;a href=&quot;https://red.ices.utexas.edu/issues/3077&quot;&gt;I spent four hours tracking down&lt;/a&gt; where I wrote &lt;tt&gt;0&lt;/tt&gt; when I should have written &lt;tt&gt;1&lt;/tt&gt;.
&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://github.com/RhysU/suzerain/commit/7351452bb03be2864d65f6bc08c730862766f2cf&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrdvYSRKFrGDAejXX0J4CmVj_MuFORTD-hlFWZ12_DYyssXEyiVNp2alxgaVH1pz967bWiBBt1TG4w4_RjDF_UPV1S-5g8bZgoFjn4GrjceFlgilON95bnMMoQ83Me58ToNz3hJuTayNA/s400/Screenshot+from+2014-03-16+13:47:20.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/3607058606836984468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/3607058606836984468' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3607058606836984468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/3607058606836984468'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/03/one-bit.html' title='One bit'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrdvYSRKFrGDAejXX0J4CmVj_MuFORTD-hlFWZ12_DYyssXEyiVNp2alxgaVH1pz967bWiBBt1TG4w4_RjDF_UPV1S-5g8bZgoFjn4GrjceFlgilON95bnMMoQ83Me58ToNz3hJuTayNA/s72-c/Screenshot+from+2014-03-16+13:47:20.png" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-1749117159109809398</id><published>2014-02-01T21:58:00.002+00:00</published><updated>2014-02-01T22:11:06.852+00:00</updated><title type='text'>Python generator functions abstracting Python-ish vs C++-ish syntax</title><content type='html'>&lt;p&gt;
Today, I&#39;ve been attaching a parser to some &lt;a href=&quot;http://sympy.org/&quot;&gt;SymPy&lt;/a&gt;-based &lt;a href=&quot;https://github.com/RhysU/suzerain/blob/master/preproc/propagation.py&quot;&gt;logic for obtaining uncertainty propagation expressions&lt;/a&gt;
based upon &lt;a href=&quot;www.worldcat.org/isbn/0470168889&quot;&gt;Taylor Series Methods&lt;/a&gt;. While SymPy is happy to parse Python-ish files, I&#39;ve already got &lt;a href=&quot;https://github.com/RhysU/suzerain/blob/5fb61e3c98/apps/perfect/perfect_mean.cpp#L999&quot;&gt;the expressions I want to manipulate&lt;/a&gt; coded up in C++.  I&#39;d like to permit parsing either Python-ish or C++-ish input in a manner that gives useful file/line information whenever SymPy dislikes the content.
&lt;/p&gt;

&lt;p&gt;
The Python &lt;code&gt;yield&lt;/code&gt; keyword provides a really clean mechanism to abstract away such differences in file syntax:
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;
# TODO Line continuation via trailing backslash
def statements_by_newline(files=None):
    r&#39;&#39;&#39;
    Generate (filename, lineno, statement) tuples by parsing the provided
    filenames with newline-separated, whitespace-trimmed statements.
    Comments are introduced by a &#39;#&#39; and extend until the end of line.

    &gt;&gt;&gt; with tempfile.NamedTemporaryFile() as f:
    ...     print(&quot;&quot;&quot;a=1       # Trailing comments
    ...                        # Not every line must have a statement
    ...              f         # Nor every line involve assignment
    ...           &quot;&quot;&quot;, file=f)
    ...     f.flush()
    ...     for (_, lineno, stmt) in statements_by_newline(f.name):
    ...         print(lineno, stmt)
    1 a=1
    3 f
    &#39;&#39;&#39;
    # Process input line-by-line...
    f = fileinput.FileInput(files)
    for line in f:

        # ...remove comments occurring after the first &#39;#&#39; character
        line, _, _ = line.partition(&#39;#&#39;)

        # ...trim then yield statement only on nontrivial line
        line = line.strip()
        if line:
            yield (f.filename(), f.filelineno(), line)


# TODO Behavior on lingering statement content without semicolon
  def statements_by_semicolon(files=None):
      r&#39;&#39;&#39;
      Generate (filename, lineno, statement) tuples by parsing the provided
      filenames with semicolon-separated, whitespace-trimmed statements.
      Comments are introduced by a &#39;//&#39; and extend until the end of line.
  
      &gt;&gt;&gt; with tempfile.NamedTemporaryFile() as f:
      ...     print(&quot;&quot;&quot;a=1;      // Trailing comments may include &#39;;&#39;
      ...              b =       // Statements may span lines
      ...                  c;
      ...              1;2;;     // Multiple may appear with empty ignored
      ...           &quot;&quot;&quot;, file=f)
      ...     f.flush()
      ...     for (_, lineno, stmt) in statements_by_semicolon(f.name):
      ...         print(lineno, stmt)
      1 a=1
      3 b = c
      4 1
      4 2
      &#39;&#39;&#39;
      # Process input line-by-line maintaining any active statement...
      f = fileinput.FileInput(files)
      stmt = []
      for line in f:
  
          # ...remove comments defined as the first &#39;//&#39; observed
          line, _, _ = line.partition(&#39;//&#39;)
  
          # ...and yield any statements separated by semicolons
          # being careful to permit continuation from prior lines.
          while line:
              head, sep, line = line.partition(&#39;;&#39;)
              head = head.strip()
              if head:
                  stmt.append(head)
              if sep and stmt:
                  yield (f.filename(), f.filelineno(), &#39; &#39;.join(stmt))
                  del stmt[:]
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
Quite slickly, one can now write
&lt;pre class=&quot;prettyprint&quot;&gt;&lt;code class=&quot;language-python&quot;&gt;
def parser(statements_generator):
    for (filename, lineno, stmt) in statements_generator:
        try:
            pass # Manipulate stmt with SymPy
        except SyntaxError as e:
            e.filename = filename
            e.lineno   = lineno
            raise

&lt;/code&gt;&lt;/pre&gt;
producing somewhat usable error messages even though the SymPy handling bits know nothing about the original file syntax.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/1749117159109809398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/1749117159109809398' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1749117159109809398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/1749117159109809398'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2014/02/python-generator-functions-abstracting.html' title='Python generator functions abstracting Python-ish vs C++-ish syntax'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5458133916813765975</id><published>2013-12-16T22:49:00.000+00:00</published><updated>2013-12-16T22:51:02.209+00:00</updated><title type='text'>-fplan9-extensions</title><content type='html'>&lt;p&gt;
While reading &lt;a href=&quot;http://shop.oreilly.com/product/0636920025108.do&quot;&gt;21st Century C&lt;/a&gt;, which shows some nice GCC extensions for stuffing anonymous struct members inside structs, I happened across &lt;a href=&quot;http://gcc.gnu.org/onlinedocs/gcc/Unnamed-Fields.html&quot;&gt;-fplan9-extensions&lt;/a&gt;:
&lt;/p&gt;

&lt;iframe width=&quot;100%&quot; height=&quot;300px&quot; src=&quot;http://gcc.gnu.org/ml/gcc-patches/2009-04/msg00727.html&quot; scrolling=&quot;yes&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;
One can smell the homespun vtable lurking in the OOP use case...
&lt;/p&gt;

</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5458133916813765975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/5458133916813765975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5458133916813765975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5458133916813765975'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/12/fplan9-extensions.html' title='-fplan9-extensions'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-2446311946909385693</id><published>2013-12-12T18:48:00.001+00:00</published><updated>2013-12-12T18:48:23.800+00:00</updated><title type='text'>Dos</title><content type='html'>About a week back, my wife gave birth to our second son Oxford C Thomas Ulerich.&lt;br /&gt;
&lt;br /&gt;
First, pensive:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWVLGm4_xvlGqsrrqGUJiBhlxCnoCtSfmvhPQtTz4bUO0rhC57h9MxrxkWefwaARyMYrfIWV3r4_JKgWGFB-DCVn5TYdFbBp6rCYmzlinutU7LLd07417IrYbrzd-7ocI_JOC7NhuzeME/s1600/small1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWVLGm4_xvlGqsrrqGUJiBhlxCnoCtSfmvhPQtTz4bUO0rhC57h9MxrxkWefwaARyMYrfIWV3r4_JKgWGFB-DCVn5TYdFbBp6rCYmzlinutU7LLd07417IrYbrzd-7ocI_JOC7NhuzeME/s1600/small1.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Second, at maximal yawn:&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM6HOUWLcpnOZlcSLS67qlHvl4NAd5-NZQTP2UHt9eMAcc3Egfjp42KaRcZ3E7-z9WYYId9sEWoiv3oTWO8ykk7cCWIM_BXLpZHAWUswCbkBCTfSF4KEj07IyngwhrGmbdOCEUR8yi6Dk/s1600/small2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgM6HOUWLcpnOZlcSLS67qlHvl4NAd5-NZQTP2UHt9eMAcc3Egfjp42KaRcZ3E7-z9WYYId9sEWoiv3oTWO8ykk7cCWIM_BXLpZHAWUswCbkBCTfSF4KEj07IyngwhrGmbdOCEUR8yi6Dk/s1600/small2.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/2446311946909385693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/2446311946909385693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2446311946909385693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/2446311946909385693'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/12/dos.html' title='Dos'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWVLGm4_xvlGqsrrqGUJiBhlxCnoCtSfmvhPQtTz4bUO0rhC57h9MxrxkWefwaARyMYrfIWV3r4_JKgWGFB-DCVn5TYdFbBp6rCYmzlinutU7LLd07417IrYbrzd-7ocI_JOC7NhuzeME/s72-c/small1.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-8136984584867939823</id><published>2013-12-12T18:40:00.000+00:00</published><updated>2013-12-12T18:40:44.127+00:00</updated><title type='text'>Driving a GSL Root Finder</title><content type='html'>&lt;p&gt;
The &lt;a href=&quot;http://www.gnu.org/software/gsl/&quot;&gt;GNU Scientific Library&lt;/a&gt; &lt;a href=&quot;https://www.gnu.org/software/gsl/manual/html_node/One-dimensional-Root_002dFinding.html&quot;&gt;one-dimensional root finding routines&lt;/a&gt; are handy, but I never remember how to drive them properly.  Here is what I essentially always end up re-distilling from the &lt;a href=&quot;https://www.gnu.org/software/gsl/manual/html_node/Root-Finding-Examples.html&quot;&gt;examples&lt;/a&gt;:
&lt;/p&gt;

&lt;div style=&quot;background-color:#000000;color:#ffffff&quot;&gt;
&lt;font face=&quot;monospace&quot;&gt;
&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;fsolver_solve(&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gsl_root_fsolver * &lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;s,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gsl_function&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;f,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;size_t&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxiter,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; epsabs,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; epsrel,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;lower,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;upper,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;double&lt;/b&gt;&lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * &lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;const&lt;/b&gt;&lt;/font&gt;&amp;nbsp;root)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ffff&quot;&gt;&lt;b&gt;// Initialize fsolver on [lower, upper]&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gsl_error_handler_t * h = gsl_set_error_handler_off();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ffff&quot;&gt;&lt;b&gt;// Push handler&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;int&lt;/b&gt;&lt;/font&gt;&amp;nbsp;status = gsl_root_fsolver_set(s, f, *lower, *upper);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = (GSL_SUCCESS == status) ? GSL_CONTINUE : status;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ffff&quot;&gt;&lt;b&gt;// Proceed until success, failure, or maximum iterations reached&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#00ffff&quot;&gt;&lt;b&gt;// On success, overwrite *location as described in API documentation.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*root = GSL_NAN;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff00&quot;&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;font color=&quot;#00ff00&quot;&gt;&lt;b&gt;size_t&lt;/b&gt;&lt;/font&gt;&amp;nbsp;iter = &lt;font color=&quot;#ff40ff&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/font&gt;; iter &amp;lt;= maxiter &amp;amp;&amp;amp; status == GSL_CONTINUE; ++iter) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff00&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(GSL_SUCCESS != (status = gsl_root_fsolver_iterate(s))) &lt;font color=&quot;#ffff00&quot;&gt;&lt;b&gt;break&lt;/b&gt;&lt;/font&gt;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*lower = gsl_root_fsolver_x_lower(s);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*upper = gsl_root_fsolver_x_upper(s);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;status = gsl_root_test_interval(*lower, *upper, epsabs, epsrel);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff00&quot;&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(status == GSL_SUCCESS) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*root = gsl_root_fsolver_root(s);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;gsl_set_error_handler(h);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=&quot;#00ffff&quot;&gt;&lt;b&gt;// Pop handler&lt;/b&gt;&lt;/font&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color=&quot;#ffff00&quot;&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&amp;nbsp;status;&lt;br&gt;
}&lt;br&gt;
&lt;/font&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/8136984584867939823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/8136984584867939823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8136984584867939823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/8136984584867939823'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/12/driving-gsl-root-finder.html' title='Driving a GSL Root Finder'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7763186308952023443</id><published>2013-10-15T02:10:00.002+00:00</published><updated>2013-10-17T19:18:16.879+00:00</updated><title type='text'>Generating the Blasius boundary layer profile</title><content type='html'>&lt;p&gt;
I&#39;ve been working on some boundary layer edge detection routines for &lt;a href=&quot;http://agentzlerich.blogspot.com/2013/09/worst-open-source-release-ever-suzerain.html&quot;&gt;Suzerain&lt;/a&gt; and wanted to use the Blasius boundary layer as a test case.  &lt;a href=https://en.wikipedia.org/wiki/Blasius_boundary_layer&quot;&quot;&gt;The Blasius boundary layer&lt;/a&gt; produces a slick ODE that can only be solved numerically.  Ganapol has a &lt;a href=&quot;http://arxiv.org/abs/1006.3888&quot;&gt;nice article&lt;/a&gt; on it and the more general &lt;a href=&quot;http://mathworld.wolfram.com/Falkner-SkanDifferentialEquation.html&quot;&gt;Falkner&amp;mdash;Skan&lt;/a&gt; equation.  He also presents some nice tabulated data which I&#39;d fit with an &lt;a href=&quot;http://www.gnu.org/software/gsl/manual/html_node/Interpolation-Types.html&quot;&gt;Akima&lt;/a&gt;, but I&#39;ve found that (surprise surprise) the Akima natural end conditions disturb the second derivative of my fits sufficiently that it makes my test cases lousier than I&#39;d like.  Since Ganapol was the nicest tabulated Blasius data that I&#39;d seen (meaning lots of digits, large similarity coordinate eta) and it didn&#39;t meet my needs, I set off to generate more (comparable number of digits, even larger similarity coordinate) using the GNU Scientific Library&#39;s &lt;a href=&quot;http://www.gnu.org/software/gsl/manual/html_node/Ordinary-Differential-Equations.html&quot;&gt;ODEIV2 capabilities&lt;/a&gt;:
&lt;/p&gt;

&lt;script src=&quot;http://gist-it.sudarmuthu.com/github/RhysU/blasius/blob/master/blasius.c&quot;&gt;&lt;/script&gt;

&lt;p&gt;
This code produces output matching Ganapol&#39;s &lt;i&gt;everywhere&lt;/i&gt; to a minimum of eight digits.
So though I&#39;m reporting more than eight here, do not trust more than eight.  The results are:
&lt;/p&gt;

&lt;pre&gt;
                   eta                       f                      fp                     fpp
0.0000000000000000e+00  0.0000000000000000e+00  0.0000000000000000e+00  3.3205733621519629e-01
2.0000000000000001e-01  6.6409997145970585e-03  6.6407792096250848e-02  3.3198383711462798e-01
4.0000000000000002e-01  2.6559884017994733e-02  1.3276416076102221e-01  3.3146984420145503e-01
6.0000000000000009e-01  5.9734637498038382e-02  1.9893725242221899e-01  3.3007912757429625e-01
8.0000000000000004e-01  1.0610822083904069e-01  2.6470913872311741e-01  3.2738927014925229e-01
1.0000000000000000e+00  1.6557172578927976e-01  3.2978003124966698e-01  3.2300711668694282e-01
1.2000000000000002e+00  2.3794871728892703e-01  3.9377610443395650e-01  3.1658919106111544e-01
1.4000000000000001e+00  3.2298157382953580e-01  4.5626176470513380e-01  3.0786539179016786e-01
1.6000000000000001e+00  4.2032076550162573e-01  5.1675678442261486e-01  2.9666346145571931e-01
1.8000000000000000e+00  5.2951803774381023e-01  5.7475814388945690e-01  2.8293101725975589e-01
2.0000000000000000e+00  6.5002436993528900e-01  6.2976573650238588e-01  2.6675154569727827e-01
2.2000000000000002e+00  7.8119333701057347e-01  6.8131037723602750e-01  2.4835091319037131e-01
2.4000000000000004e+00  9.2229012563454160e-01  7.2898193506257503e-01  2.2809176068668360e-01
2.6000000000000001e+00  1.0725059767878351e+00  7.7245502114856535e-01  2.0645462679942550e-01
2.8000000000000003e+00  1.2309773023143091e+00  8.1150962319910902e-01  1.8400659386536070e-01
3.0000000000000000e+00  1.3968082308703464e+00  8.4604444365799358e-01  1.6136031954087834e-01
3.2000000000000002e+00  1.5690949600067619e+00  8.7608145517247749e-01  1.3912805557242577e-01
3.4000000000000004e+00  1.7469500939488432e+00  9.0176122143676474e-01  1.1787624608752340e-01
3.6000000000000001e+00  1.9295251697605302e+00  9.2332966588164878e-01  9.8086278784280084e-02
3.8000000000000003e+00  2.1160298171720697e+00  9.4111799672931340e-01  8.0125918139197061e-02
4.0000000000000000e+00  2.3057464184620726e+00  9.5551822981069434e-01  6.4234121091690577e-02
4.2000000000000002e+00  2.4980396627069701e+00  9.6695707375360584e-01  5.0519747486645686e-02
4.4000000000000004e+00  2.6923609375430866e+00  9.7587083213647785e-01  3.8972610853629498e-02
4.6000000000000005e+00  2.8882479900178160e+00  9.8268350076070032e-01  2.9483772011648642e-02
4.8000000000000007e+00  3.0853206551774823e+00  9.8778952620078742e-01  2.1871186347443238e-02
5.0000000000000000e+00  3.2832736651563144e+00  9.9154190016439347e-01  1.5906798685318153e-02
5.2000000000000002e+00  3.4818676115086635e+00  9.9424553535992810e-01  1.1341788968929135e-02
5.4000000000000004e+00  3.6809190628975084e+00  9.9615530396275309e-01  7.9276598147061551e-03
5.6000000000000005e+00  3.8802906776333757e+00  9.9747776821291501e-01  5.4319576799275147e-03
5.8000000000000007e+00  4.0798819392396917e+00  9.9837549365019085e-01  3.6484136667473462e-03
6.0000000000000000e+00  4.2796209225138426e+00  9.9897287243586053e-01  2.4020398437572996e-03
6.2000000000000002e+00  4.4794572972826767e+00  9.9936254171909067e-01  1.5501706906563828e-03
6.4000000000000004e+00  4.6793566154314172e+00  9.9961170171767588e-01  9.8061511700977232e-04
6.6000000000000005e+00  4.8792958110602429e+00  9.9976787021003244e-01  6.0804426478449074e-04
6.8000000000000007e+00  5.0792597724490030e+00  9.9986381903703803e-01  3.6956257014031428e-04
7.0000000000000000e+00  5.2792388110290958e+00  9.9992160414794995e-01  2.2016895527113460e-04
7.2000000000000002e+00  5.4792268473431696e+00  9.9995571727792665e-01  1.2856980723515674e-04
7.4000000000000004e+00  5.6792201473338295e+00  9.9997545768489782e-01  7.3592983389223794e-05
7.6000000000000005e+00  5.8792164658040509e+00  9.9998665513912843e-01  4.1290311113698544e-05
7.8000000000000007e+00  6.0792144810719346e+00  9.9999288116610119e-01  2.2707751402803766e-05
8.0000000000000000e+00  6.2792134313460615e+00  9.9999627453530060e-01  1.2240926243249920e-05
8.2000000000000011e+00  6.4792128866784848e+00  9.9999808745923757e-01  6.4679786108453658e-06
8.4000000000000004e+00  6.6792126094414330e+00  9.9999903687484326e-01  3.3499397531974408e-06
8.5999999999999996e+00  6.8792124710150580e+00  9.9999952424780447e-01  1.7006679885717248e-06
8.8000000000000007e+00  7.0792124032167214e+00  9.9999976948975089e-01  8.4628412130585306e-07
9.0000000000000000e+00  7.2792123706452294e+00  9.9999989045379900e-01  4.1278790156475232e-07
9.2000000000000011e+00  7.4792123552968919e+00  9.9999994893901312e-01  1.9735668380412326e-07
9.4000000000000004e+00  7.6792123482031105e+00  9.9999997665715090e-01  9.2489158677487331e-08
9.6000000000000014e+00  7.8792123449874136e+00  9.9999998953401714e-01  4.2485812620375726e-08
9.8000000000000007e+00  8.0792123435577192e+00  9.9999999539788897e-01  1.9129831304430804e-08
1.0000000000000000e+01  8.2792123429343132e+00  9.9999999801539019e-01  8.4429158651022967e-09
1.0200000000000001e+01  8.4792123426677222e+00  9.9999999916068538e-01  3.6524803913092198e-09
1.0400000000000000e+01  8.6792123425559158e+00  9.9999999965190545e-01  1.5488074704694815e-09
1.0600000000000001e+01  8.8792123425099305e+00  9.9999999985842569e-01  6.4375569794427733e-10
1.0800000000000001e+01  9.0792123424913829e+00  9.9999999994353506e-01  2.6227617757128940e-10
1.1000000000000000e+01  9.2792123424840440e+00  9.9999999997791622e-01  1.0473955128094568e-10
1.1200000000000001e+01  9.4792123424811994e+00  9.9999999999153044e-01  4.0999322474265197e-11
1.1400000000000000e+01  9.6792123424801169e+00  9.9999999999681477e-01  1.5731015212516414e-11
1.1600000000000001e+01  9.8792123424797147e+00  9.9999999999882527e-01  5.9163099772618016e-12
1.1800000000000001e+01  1.0079212342479567e+01  9.9999999999957512e-01  2.1810177063481187e-12
1.2000000000000000e+01  1.0279212342479513e+01  9.9999999999984923e-01  7.8810042675859475e-13
1.2200000000000001e+01  1.0479212342479494e+01  9.9999999999994749e-01  2.7913740190928823e-13
1.2400000000000000e+01  1.0679212342479486e+01  9.9999999999998201e-01  9.6910000670083129e-14
1.2600000000000001e+01  1.0879212342479486e+01  9.9999999999999389e-01  3.2978678842745192e-14
1.2800000000000001e+01  1.1079212342479485e+01  9.9999999999999789e-01  1.1000489193601443e-14
1.3000000000000000e+01  1.1279212342479484e+01  9.9999999999999922e-01  3.5967050786090774e-15
1.3200000000000001e+01  1.1479212342479485e+01  9.9999999999999967e-01  1.1526879056075572e-15
1.3400000000000000e+01  1.1679212342479484e+01  9.9999999999999978e-01  3.6210349563133137e-16
1.3600000000000000e+01  1.1879212342479484e+01  9.9999999999999978e-01  1.1149817624085130e-16
&lt;/pre&gt;

&lt;p&gt;
If you look at the last two rows of &lt;tt&gt;fp&lt;/tt&gt; you&#39;ll see that double precision has most likely
run out of steam by &lt;tt&gt;eta = 13.4&lt;/tt&gt;.  Using &lt;code&gt;gsl_odeiv2_step_rk4imp&lt;/code&gt; or some other choice instead of &lt;code&gt;gsl_odeiv2_step_rk8pd&lt;/code&gt; will tend to cause the solver to fail somewhere before here
rather than to simply stop producing updated values in &lt;tt&gt;fp&lt;/tt&gt;.  Interestingly, &lt;code&gt;gsl_odeiv2_step_rk8pd&lt;/code&gt; will run out to about &lt;tt&gt;eta = 38.6&lt;/tt&gt; producing &lt;tt&gt;fpp = 1.35e-155&lt;/tt&gt; before &lt;tt&gt;fpp&lt;/tt&gt; becomes non-decreasing (indicating the physics is glaringly b0rked as opposed to just wholly b0rked).
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7763186308952023443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/7763186308952023443' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7763186308952023443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7763186308952023443'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/10/generating-blasius-boundary-layer.html' title='Generating the Blasius boundary layer profile'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-6005442089842958644</id><published>2013-10-07T14:40:00.003+00:00</published><updated>2013-10-07T14:48:16.786+00:00</updated><title type='text'>For want of a 2-line patch...</title><content type='html'>&lt;p&gt;
There&#39;s been much brouhaha about &lt;a href=&quot;http://www.slate.com/blogs/future_tense/2013/10/02/silk_road_s_dread_pirate_ross_ulbricht_asked_stack_overflow_question_under.html&quot;&gt;the Dread Pirate Roberts getting partially nabbed for using Stack Overflow&lt;/a&gt;.  What struck me most about &lt;a href=&quot;http://stackoverflow.com/questions/15445285/how-can-i-connect-to-a-tor-hidden-service-using-curl-in-php&quot;&gt;his question&lt;/a&gt; is he asked it only because PHP was missing a numeric constant, &lt;tt&gt;CURLPROXY_SOCKS5_HOSTNAME&lt;/tt&gt;, which it should have had.  Sure enough, &lt;a href=&quot;https://bugs.php.net/bug.php?id=65469&quot;&gt;there&#39;s an unaddressed bug&lt;/a&gt; (as of PHP 5.5.4) about the missing constant with an attached patch:
&lt;pre&gt;
Developer: dr.scre@yandex.com

--- interface.c 2013-08-16 00:42:04.000000000 +0400
+++ interface_my.c 2013-08-18 03:12:28.948548811 +0400
@@ -827,6 +827,8 @@
  REGISTER_CURL_CONSTANT(CURLPROXY_HTTP);
  REGISTER_CURL_CONSTANT(CURLPROXY_SOCKS4);
  REGISTER_CURL_CONSTANT(CURLPROXY_SOCKS5);
+ REGISTER_CURL_CONSTANT(CURLPROXY_SOCKS4A);
+ REGISTER_CURL_CONSTANT(CURLPROXY_SOCKS5_HOSTNAME);
 
  /* Curl Share constants */
  REGISTER_CURL_CONSTANT(CURLSHOPT_NONE);
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
For want of a 2-line patch, a $1.2B empire was lost.
&lt;/p&gt;
</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/6005442089842958644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/6005442089842958644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6005442089842958644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/6005442089842958644'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/10/for-want-of-2-line-patch.html' title='For want of a 2-line patch...'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5723819169569198760</id><published>2013-09-24T04:01:00.000+00:00</published><updated>2013-09-24T13:57:49.645+00:00</updated><title type='text'>On Working in the Dark.</title><content type='html'>&lt;p&gt;
At 7 PM tonight, despite my father&#39;s long-standing advice about working on things when pressed for time, I start futzing with the right turn signal switch on a recently-new-to-me &#39;99 BMW R1100S.  The switch has been skittish the last two days.  It&#39;s no fun to find out that traffic doesn&#39;t think you&#39;re switching lanes when you think you&#39;ve been clearly signalling it for an eighth of a mile.  Michelle has to leave to teach yoga  at 7:45 PM.  This leaves me forty-five minutes to work before I must watch the kiddo.  Night is about to fall.  Sans garage, I&#39;m working in the driveway.
&lt;/p&gt;

&lt;p&gt;
I have the handlebar control assembly down to the switch innards apart in five minutes, see some grime, and decide to make a run for some electrical cleaner rather than to try my luck applying to the contact surfaces the fine-grit sandpaper that I brought outside.  To give Michelle a chance to get ready to teach, I snag the two-and-a-half-year-old in his PJs and we go by car to an auto store on East 7th. After a long, slow line, we&#39;re back at 7:30.  I get the switch cleaned out (after accidentally shooting electrical cleaner into a hangnail.  Don&#39;t. Ever. Do. This.) and start putting stuff back together.
&lt;/p&gt;

&lt;p&gt;
Now it&#39;s getting dark.  Michelle brings out a flashlight.  I get the electrical bits back together.  Michelle has to leave and brings out our shoeless son Ozark, his Magna Doodle, and his wooden toy pliers. She coaxes Ozark into staying put next to me on the driveway and takes off.  He miraculously stays out of the small collection of bike parts and is content to play around on the driveway while I chew on a flashlight trying to point it in the right direction as I re-insert screws and curse the finicky-to-button-up assembly.  Ozark disappears over to the left side of the bike and is farting around with his wooden pliers near the left fork.  I ask him to come around to my side and he ignores me.  No matter as he&#39;s being uncommonly good.  I periodically inquire what he&#39;s up to and he responds promptly.
&lt;/p&gt;

&lt;p&gt;
At 7:55 I get everything back together well-enough that the repair will sit for the night and I can double check it in the morning.  I&#39;m elated that nothing bad happened on a hurry-up repair job in the dusk.  This has never happened to me in my life.
&lt;/p&gt;

&lt;p&gt;
Suddenly, I hear a weird scritching sound.  I ask Ozark what he&#39;s doing.  Out of the dark on the far side of the bike a little voice proudly replies &quot;I&#39;m sanding the motorcycle&quot;.  He&#39;s got the fine-grit sandpaper and is rubbing it against the fairing near the front headlight.  Fortunately the cosmetic damage is light.  I crack up.  He cracks up.  I call my dad to convey the story.  Ozark re-cracks up when he hears my dad crack up on the phone.  Then the kiddo and I go inside and drink far too much chocolate milk.
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5723819169569198760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/5723819169569198760' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5723819169569198760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5723819169569198760'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/09/on-working-in-dark.html' title='On Working in the Dark.'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7547434301073654825</id><published>2013-09-13T20:35:00.000+00:00</published><updated>2013-09-13T20:37:02.002+00:00</updated><title type='text'>An iostream insertion wrapper to provide full-precision floating point output for C++</title><content type='html'>&lt;p&gt;
In C++ one often wants output full precision floating point data.  Iostreams make this a pain.  Especially when you&#39;d like the results to line up nicely in your terminal without requiring everything to be in scientific notation.  Because reading &quot;12&quot; as &lt;tt&gt;12&lt;/tt&gt; is easier than parsing &lt;tt&gt;1.2e+01&lt;/tt&gt;.
&lt;/p&gt;

&lt;p&gt;
From my research code &lt;a href=&quot;http://agentzlerich.blogspot.com/2013/09/worst-open-source-release-ever-suzerain.html&quot;&gt;Suzerain&lt;/a&gt;, here&#39;s a header-only stream insertion wrapper up to the task.  First, a simple use case with output:
&lt;pre&gt;
using suzerain::fullprec;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e-5) &lt;&lt; endl; // &quot;   1.23456789012e-05&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e-4) &lt;&lt; endl; // &quot;   1.23456789012e-04&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e-3) &lt;&lt; endl; // &quot;   1.23456789012e-03&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e-2) &lt;&lt; endl; // &quot;   0.012345678901235&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e-1) &lt;&lt; endl; // &quot;   0.123456789012346&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e+0) &lt;&lt; endl; // &quot;   1.234567890123457&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e+1) &lt;&lt; endl; // &quot;  12.345678901234567&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e+2) &lt;&lt; endl; // &quot; 123.456789012345681&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e+3) &lt;&lt; endl; // &quot;   1.23456789012e+03&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e+4) &lt;&lt; endl; // &quot;   1.23456789012e+04&quot;
cout &lt;&lt; fullprec&lt;&gt;(1.23456789012345678e+5) &lt;&lt; endl; // &quot;   1.23456789012e+05&quot;
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
Now the code.  You&#39;ll need to swap &lt;tt&gt;real_t&lt;/tt&gt; for &lt;tt&gt;double&lt;/tt&gt; in your context as &lt;tt&gt;suzerain::real_t&lt;/tt&gt; is defined elsewhere.
&lt;/p&gt;
&lt;script src=&quot;https://bitbucket.org/RhysU/suzerain/src/73d3efc339c1cb0610f5c6c07d80faf6e8e9cf52/suzerain/format.hpp?embed=t&quot;&gt;&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7547434301073654825/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/7547434301073654825' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7547434301073654825'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7547434301073654825'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/09/an-iostream-insertion-wrapper-to.html' title='An iostream insertion wrapper to provide full-precision floating point output for C++'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5421508019572973811</id><published>2013-09-12T04:55:00.000+00:00</published><updated>2013-10-16T21:59:53.211+00:00</updated><title type='text'>Worst open source release ever: Suzerain</title><content type='html'>&lt;p&gt;
Though it&#39;s far from in a public-ready state, I&#39;m tired of my research code, Suzerain, having no public presence whatsoever:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://red.ices.utexas.edu/projects/suzerain/wiki&quot;&gt;Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://red.ices.utexas.edu/projects/suzerain/roadmap&quot;&gt;Roadmap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://red.ices.utexas.edu/projects/suzerain/issues&quot;&gt;Issue Tracking&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://bitbucket.org/RhysU/suzerain&quot;&gt;Bitbucket Repository&lt;/a&gt; (though a word of caution-- the main repository is still private and this is a mirror)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/RhysU/suzerain&quot;&gt;GitHub Repository&lt;/a&gt; (ditto, because who can pick between &#39;em, right?)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://groups.google.com/group/suzerain&quot;&gt;Google Group&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Though primarily my baby up until a year ago, the cast of characters now includes
&lt;script src=&quot;https://bitbucket.org/RhysU/suzerain/src/9632b9fa7904e5466530563c3ee9aba6206e579e/AUTHORS?embed=t&quot;&gt;&lt;/script&gt;
all of whom are affiliated with
&lt;a href=&quot;http://pecos.ices.utexas.edu/&quot;&gt;The Center for Predictive Engineering and Computational Science (PECOS) &lt;/a&gt; within
&lt;a href=&quot;http://www.ices.utexas.edu/&quot;&gt;The Institute for Computational Engineering and Sciences (ICES)&lt;/a&gt; at
&lt;a href=&quot;http://www.utexas.edu/&quot;&gt;The University of Texas at Austin&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;
This work is supported by
the Department of Energy [National Nuclear Security Administration] under
Award Number
[DE-FC52-08NA28615].
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5421508019572973811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/5421508019572973811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5421508019572973811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5421508019572973811'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/09/worst-open-source-release-ever-suzerain.html' title='Worst open source release ever: Suzerain'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-4201374225819981516</id><published>2013-09-11T15:05:00.001+00:00</published><updated>2013-09-11T15:05:41.721+00:00</updated><title type='text'>Somewhat taming the bump function&#39;s derivatives</title><content type='html'>&lt;p&gt;
Often I need to initialize some smooth pulse in a simulation.  Today, for example, I&#39;m working with acoustic and entropy pulses to test the effectiveness of nonreflecting boundary conditions for the Euler equations (see, e.g., &lt;a href=&quot;http://www.citeulike.org/user/RhysU/article/12236948&quot;&gt;Baum et al&lt;/a&gt;). &lt;a href=&quot;https://en.wikipedia.org/wiki/Bump_function&quot;&gt;Bump functions&lt;/a&gt; are nice for this purpose as they&#39;re infinitely smooth and have compact support.
&lt;/p&gt;

&lt;p&gt;
Awhile back I realized that using just a classical bump function produced large gradients which had to be resolved.  Years ago I used Mathematica to see if taking some power of the classical bump function, which remains infinitely smooth, could produce smaller gradients better suited for numerical use.
&lt;/p&gt;

&lt;p&gt;
The punchline is that using the fourth power of the bump function, &lt;tt&gt;BumpPower[4]&lt;/tt&gt; in the following parlance, is Goodness (TM).  The following Mathematica notebook demonstrates the problem and discusses how one arrives at this empirical result:
&lt;/p&gt;

&lt;iframe class=&quot;scribd_iframe_embed&quot; src=&quot;//www.scribd.com/embeds/61560918/content?start_page=1&amp;view_mode=scroll&amp;access_key=key-obt6mmwo1n0x7z4leud&amp;show_recommendations=false&quot; data-auto-height=&quot;false&quot; data-aspect-ratio=&quot;0.772727272727273&quot; scrolling=&quot;no&quot; id=&quot;doc_88753&quot; width=&quot;100%&quot; height=&quot;600&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/4201374225819981516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/4201374225819981516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4201374225819981516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/4201374225819981516'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/09/somewhat-taming-bump-functions.html' title='Somewhat taming the bump function&#39;s derivatives'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-5008723142877201498</id><published>2013-08-13T01:20:00.002+00:00</published><updated>2014-03-10T19:14:48.303+00:00</updated><title type='text'>The obligatory XMonad configuration post</title><content type='html'>Since I&#39;ve been loving &lt;a href=&quot;http://xmonad.org/&quot;&gt;XMonad&lt;/a&gt; for the past several months on a 2-up desktop and a 1-up laptop, here&#39;s the obligatory personal XMonad configuration post:

&lt;script type=&quot;text/javascript&quot; src=&quot;https://snipt.net/embed/167542b50bfc170069d1aad0a3b1f1e3/&quot;&gt;&lt;/script&gt;

&lt;p&gt;
General comments:
&lt;ol&gt;
&lt;li&gt;This started from the vanilla, session-manager-aware Fedora XMonad configuration.&lt;/li&gt;
&lt;li&gt;The Windows key is the modifier.&lt;/li&gt;
&lt;li&gt;The default &lt;code&gt;dmenu_run&lt;/code&gt; key, &lt;code&gt;mod-p&lt;/code&gt;, interferes with some monitor-swapping hotkey on Ubuntu.  Hence the second keymapping.&lt;/li&gt;
&lt;li&gt;Toggling maximization in one keypress has been handy.&lt;/li&gt;
&lt;li&gt;I like the mod+arrow combinations better than the suggested &lt;a href=&quot;http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Actions-CycleWS.html&quot;&gt;CycleWS&lt;/a&gt; ones.  Rather than moving through a bunch of empty workspaces, these permit you to just move through workspaces with windows and to get a clean workspace with a single keypress.  Much thanks to Marshall Lochbaum and Brandon Allbery for chiming in on the XMonad mailing list with the &lt;code&gt;followTo&lt;/code&gt; implementation.&lt;/li&gt;
&lt;li&gt;The prev/next screen items permit throwing windows back and forth when 2-up.&lt;/li&gt;
&lt;li&gt;I find the &lt;code&gt;REFLECTX&lt;/code&gt; binding handy when 2-up to push the non-main chat window off to the leftmost monitor position.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Layout.Tabbed&lt;/code&gt;&#39;s &lt;code&gt;simpleTabbed&lt;/code&gt; is additionally available as a layout option.&lt;/li&gt;
&lt;li&gt;New windows spawn outside the master pane with the master window keeping focus.&lt;/li&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;

&lt;p&gt;Please drop a comment if you happen to find anything useful or want to contribute a tweak.&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/5008723142877201498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/5008723142877201498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5008723142877201498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/5008723142877201498'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/08/the-obligatory-xmonad-configuration-post.html' title='The obligatory XMonad configuration post'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-229271675051279851</id><published>2013-07-24T14:38:00.001+00:00</published><updated>2013-07-24T14:58:16.461+00:00</updated><title type='text'>Python should have Haskell&#39;s $ operator</title><content type='html'>&lt;p&gt;
In Python, I often want to repeatedly say &quot;apply some function to the remainder of the current statement&quot;.  Think &lt;code&gt;foo(bar(baz(qux, quux)))&lt;/code&gt;.  In my text editor, which mostly automatically handles the parenthesis correctly, this is a quick thing to type.
&lt;/p&gt;

&lt;/p&gt;
Within IPython, statements like that are tedious.  IPython does have a limited version of this in its &lt;a href=&quot;http://ipython.org/ipython-doc/dev/interactive/reference.html#automatic-parentheses&quot;&gt;automatic parenthesis feature&lt;/a&gt;.  Notice how many syntax error gotchas lurk in those examples.
&lt;/p&gt;

&lt;p&gt;
Haskell&#39;s &lt;code&gt;$&lt;/code&gt; operator is pretty sweet.  All of the following are equivalent in Haskell:
&lt;pre&gt;
putStrLn (show (1 + 1))
putStrLn (show $ 1 + 1)
putStrLn $ show (1 + 1)
putStrLn $ show $ 1 + 1
&lt;/pre&gt;
&lt;/p&gt;

&lt;p&gt;
Python should adopt Haskell&#39;s &lt;code&gt;$&lt;/code&gt; operator.  That is, the following should be equivalent:
&lt;pre&gt;
foo(bar(baz(qux, quux)))
foo $ bar $ baz(qux, quux)
foo $ bar $ baz $ qux, quux
&lt;/pre&gt;
Though odd looking, there&#39;s easy consistency for unary functions:
&lt;pre&gt;
foo()
foo $
&lt;/pre&gt;
&lt;/p&gt;

Haters of the new-ish print might find respite in &lt;code&gt;print $ foo&lt;/code&gt;.</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/229271675051279851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/229271675051279851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/229271675051279851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/229271675051279851'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/07/python-should-have-haskells-operator.html' title='Python should have Haskell&#39;s $ operator'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6426345363781422461.post-7185492609075382118</id><published>2013-06-26T04:13:00.001+00:00</published><updated>2013-06-26T04:24:40.026+00:00</updated><title type='text'>Plus ça change.org</title><content type='html'>&lt;p&gt;
This past fall I spun up a &lt;a href=&quot;http://www.change.org/&quot;&gt;change.org&lt;/a&gt; petition
entitled
&lt;a href=&quot;http://www.change.org/petitions/83rd-texas-state-legislature-reduce-traffic-congestion-by-legalizing-lane-splitting-for-motorcycles&quot;&gt;
83rd Texas State Legislature: Reduce traffic congestion by legalizing lane-splitting for motorcycles&lt;/a&gt;.  As of right now, 1,664 people signed the petition.
Sadly, despite gathering this tome of names and much late-night letter writing to both newspapers and elected officials, the Texas legislature didn&#39;t introduce the desired bill.
&lt;/p&gt;

&lt;p&gt;
But there may be hope for the 84th legislature in two years... Today I got an unexpected and very cool email from the office of &lt;a href=&quot;http://www.kirkwatson.com/&quot;&gt;Senator Kirk Watson&lt;/a&gt;.  Watson said he&#39;ll try to get lane splitting formally studied between now and the next legislature.
I&#39;ll redefine success to match this outcome and claim it.  The full message follows.
&lt;/p&gt;

&lt;p&gt;
&lt;iframe class=&quot;scribd_iframe_embed&quot; src=&quot;http://www.scribd.com/embeds/150059168/content?start_page=1&amp;view_mode=scroll&amp;show_recommendations=true&quot; data-auto-height=&quot;false&quot; data-aspect-ratio=&quot;undefined&quot; scrolling=&quot;no&quot; id=&quot;doc_52262&quot; width=&quot;100%&quot; height=&quot;600&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;
&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://agentzlerich.blogspot.com/feeds/7185492609075382118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/6426345363781422461/7185492609075382118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7185492609075382118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6426345363781422461/posts/default/7185492609075382118'/><link rel='alternate' type='text/html' href='http://agentzlerich.blogspot.com/2013/06/plus-ca-changeorg.html' title='Plus ça change.org'/><author><name>Rhys Ulerich</name><uri>http://www.blogger.com/profile/02843453263307584747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>