<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[erik’s Substack]]></title><description><![CDATA[Bracing against the wind:  no longer self-hosted.   A continuation of where I started a long time ago.]]></description><link>https://simul.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png</url><title>erik’s Substack</title><link>https://simul.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 17 Apr 2026 12:40:13 GMT</lastBuildDate><atom:link href="https://simul.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[erik aronesty]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[simul@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[simul@substack.com]]></itunes:email><itunes:name><![CDATA[erik aronesty]]></itunes:name></itunes:owner><itunes:author><![CDATA[erik aronesty]]></itunes:author><googleplay:owner><![CDATA[simul@substack.com]]></googleplay:owner><googleplay:email><![CDATA[simul@substack.com]]></googleplay:email><googleplay:author><![CDATA[erik aronesty]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Sites I've built recently]]></title><description><![CDATA[Aside from my job, I like to build random sites.]]></description><link>https://simul.substack.com/p/sites-ive-built-recently</link><guid isPermaLink="false">https://simul.substack.com/p/sites-ive-built-recently</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Tue, 24 Sep 2024 23:19:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9_Is!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Aside from my job, I like to build random sites. Recently, I've built <a href="https://zypley.com">https://zypley.com</a> (video downloader), <a href="https://bobchart.com">https://bobchart.com</a> (ai flowchart creator), <a href="https://trackj.com">https://trackj.com</a> (shipping tracking) and added <a href="https://q32.com">https://q32.com</a> (overview site, and a domain i&#8217;ve had forever).<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9_Is!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9_Is!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png 424w, https://substackcdn.com/image/fetch/$s_!9_Is!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png 848w, https://substackcdn.com/image/fetch/$s_!9_Is!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png 1272w, https://substackcdn.com/image/fetch/$s_!9_Is!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9_Is!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png" width="416" height="254" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:889,&quot;width&quot;:1456,&quot;resizeWidth&quot;:416,&quot;bytes&quot;:128879,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9_Is!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png 424w, https://substackcdn.com/image/fetch/$s_!9_Is!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png 848w, https://substackcdn.com/image/fetch/$s_!9_Is!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png 1272w, https://substackcdn.com/image/fetch/$s_!9_Is!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af76245-3206-4912-ad2e-68c8d17dce50_1736x1060.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><br>Things I&#8217;ve noticed.   fly.io is better than railway now for simple, small low-cost deployments of sites.   q32, for example, is just a static site, and deploying on fly was free and fast.<br><br>Fly has a strange approach to caching.   Instead of having a purpose built cache, fly just runs instances of your program on the edge.   &#8220;Edge running&#8221; instead of &#8220;Edge caching&#8221;.   <br><br>This might work ok, but you wind up having to write your own &#8220;Edge aware&#8221; code to deal with it.   <br><br>Railway is more traditional, but the &#8220;always on&#8221; nature of the apps means the costs go up faster. <br><br>Fly was more fun.    But the &#8220;launch&#8221; feature basically always guessed wrong on a number of my sites (I tend to write mixed-language sites, using node+python+rust), and I had to write a custom Dockerfile to deal with it. <br><br>Railway, with nixpacks, was easier to configure (just tell it you&#8217;re using python/node and it will get that all into one image).   But you&#8217;ll wind up optimizing and switching to docker eventually anyway.</p>]]></content:encoded></item><item><title><![CDATA[Stochastic Rounding is Better]]></title><description><![CDATA[Rounding so that aggregates work]]></description><link>https://simul.substack.com/p/stochastic-rounding-is-better</link><guid isPermaLink="false">https://simul.substack.com/p/stochastic-rounding-is-better</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Tue, 16 Jan 2024 17:40:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Imagine a time series of financial calculations.   You compute, say, state income tax on realized gains on each line of a large number of rows in a database.   <br><br>The formula might look like this:<br></p><p>Net Profit = Net Sale - Net Purchase</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://simul.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading erik&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Tax Rate * (Net Profit)  = Tax Amount</p><p></p><p>Now you give this to someone in a feed, but you round to the nearest penny, because&#8230; well, it&#8217;s meaningless to talk about 4/10 of a penny.   </p><p>Net Profit = $1046.62<br>Tax Amount = $209.12<br><br>Except&#8230; you rounded down.   And the accountant reconciling this feed will notice, after a sufficient number of differences, that the final value might be significantly different than he expected.    <br><br>You can reduce this error, however, with &#8220;random rounding&#8221;.   That is, if the number is 0.004, that gives you a 60% chance of rounding down to 0.00, and a 40% chance of rounding up to 0.01.   The result of this is superior aggregation, and although it might not matter much, if you&#8217;re doing millions of small-value calculations, and they are actullay impacting customers, errors can add up (and not always in your favor).<br></p><ul><li><p><a href="https://royalsocietypublishing.org/doi/10.1098/rsos.211631">More information on stochastic rounding</a> from the Royal Society.</p></li><li><p>A simple library in python do to this is appended, with both random and deterministic versions.<br></p></li></ul><p>Careful use of randomization comes into play when doing integer-only arithmetic. For example, the result of 1 + .01 is always 1, if all you have are integers available, as is often the case in optimized int8 ai-libraries, blockchain, and cryptographic arithmentic.   The accumulated loss of repeatedly rounding this way can be infinite, and can lead to extreme hallucination, for example, in some memory-optimized image models.<br><br>But if you use stochastic rounding, the result of 1 + .01 is 1 : 90% of the time and is 2 : 10% of the time.  Which means that over the long term, you get an average error of zero.   Whew, no more crazy hands!</p><p>Python <strong>cround.py</strong>:</p><pre><code>import random

def custom_round(value, n=2):
    factor = 10 ** n
    beyond_nth_decimal = (value * factor) % 1

    if random.random() &lt; beyond_nth_decimal:
        return round(value - beyond_nth_decimal/factor + 1/factor, n)
    else:
        return round(value - beyond_nth_decimal/factor, n)

def deterministic_hash(value):
    # we just want something to rotate among rounded values
    int_repr = int.from_bytes(float(value).hex().encode(), 'big')
    hash_value = int_repr * 2654435761 % 2**32
    return (hash_value / 2**32)

def custom_round_fixed(value, n=2):
    factor = 10 ** n
    beyond_nth_decimal = (value * factor) % 1

    pseudo_random = deterministic_hash(value)

    if pseudo_random &lt; beyond_nth_decimal:
        return round(value - beyond_nth_decimal / factor + 1 / factor, n)
    else:
        return round(value - beyond_nth_decimal / factor, n)</code></pre><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://simul.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading erik&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[GPT: Arguments against taxation ]]></title><description><![CDATA[Title: The Great Tax Debate]]></description><link>https://simul.substack.com/p/gpt-arguments-against-taxation</link><guid isPermaLink="false">https://simul.substack.com/p/gpt-arguments-against-taxation</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Sun, 07 May 2023 16:20:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6c714e92-ff33-4c69-ac6d-9dc63dd1e035_2944x2208.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p>(Scene opens on a small stage with a single table and two chairs. Harry and Jenny sit across from each other, engaged in a heated debate.)</p><p></p><p><strong>Harry</strong>: Jenny, I just don't understand how you can say that taxation isn't necessary. It's the backbone of any civilized society. It provides us with vital services like healthcare, education, and infrastructure. Without taxes, how would we maintain these essential components of our lives?</p><p></p><p><strong>Jenny:</strong> Harry, I understand your concerns, but I believe that voluntary cooperation and contributions can achieve the same goals. When people see the value in something, they're more than willing to contribute their resources to it. Moreover, a society built on voluntary contributions is one where individuals have more freedom and autonomy.</p><p></p><p><strong>Harry</strong>: That's all well and good, Jenny, but voluntary contributions are unreliable. You can't expect everyone to pitch in equally. Some people will take advantage of the system and benefit from the services without contributing.</p><p></p><p><strong>Jenny</strong>: Harry, I think you're underestimating the power of people's goodwill and their desire to contribute to their communities. Additionally, when people are not burdened by taxation, they have more disposable income and resources to invest in the things that matter to them. This leads to a more efficient allocation of resources, where people directly invest in what they believe in, rather than having the government decide for them.</p><p></p><p><strong>Harry</strong>: But Jenny, what about people who can't afford to contribute? If everything is based on voluntary cooperation, how will we ensure that everyone has access to essential services?</p><p></p><p><strong>Jenny</strong>: That's a great point, Harry, but I believe that in a society where people have more control over their resources, they are more likely to be charitable. Wealthy individuals and businesses would have the opportunity to make significant contributions to causes they support, and there would likely be more incentive for innovation in providing essential services at a lower cost, making them accessible to all.</p><p></p><p>Harry: You might be right, Jenny, but what about the potential for corruption? If there's no central authority collecting and distributing funds, how can we be sure that the money is going to the right places?</p><p></p><p><strong>Jenny</strong>: Corruption is a concern in any system, Harry, but in a voluntary cooperation-based society, people have more power to hold organizations accountable. Since they're choosing where their money goes, they can decide to stop supporting a corrupt organization and redirect their funds elsewhere. This creates a natural incentive for organizations to remain transparent and honest.</p><p></p><p><strong>Harry</strong>: (pauses) I hadn't thought about it that way, Jenny. While I still have some reservations, I can see how voluntary cooperation might lead to more freedom, autonomy, and efficient allocation of resources. You've certainly given me something to think about.</p><p></p><p><strong>Jenny</strong>: I'm glad I could provide a different perspective, Harry. I believe that considering alternative systems is crucial for the progress of society. Let's continue this conversation and explore the possibilities together. </p>]]></content:encoded></item><item><title><![CDATA[Get block size bash]]></title><description><![CDATA[Probe for block size.]]></description><link>https://simul.substack.com/p/get-block-size-bash-15-06-16</link><guid isPermaLink="false">https://simul.substack.com/p/get-block-size-bash-15-06-16</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Tue, 16 Jun 2015 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Probe for block size. Useful when you've probably got no tools. Like when trying to optimize sqlite paging at run-time.</p><blockquote><pre><code>function block_size() {( 
   [ "$1" ] &amp;&amp; cd $1; echo 1 &gt; block_size.tmp;  
   ls --block-size 1 -s block_size.tmp | cut -f 1 -d ' '; 
   rm block_size.tmp; 
)}</code></pre></blockquote>]]></content:encoded></item><item><title><![CDATA[Viral load]]></title><description><![CDATA[Quintiles put the poster I made up on their site: Identifying viral load in tumors using nextgen sequencing. Thanks Kim!]]></description><link>https://simul.substack.com/p/viral-load-15-05-06</link><guid isPermaLink="false">https://simul.substack.com/p/viral-load-15-05-06</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Wed, 06 May 2015 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Quintiles put the poster I made up on their site: <a href="http://www.quintiles.com/library/scientific-posters/identifying-viral-load-in-tumors-with-respect-to-tissue-of-origin-using-high-throughput-sequencing">Identifying viral load in tumors using nextgen sequencing</a>. Thanks Kim!</p>]]></content:encoded></item><item><title><![CDATA[Gene therapies I want to see developed]]></title><description><![CDATA[Gene therapies I'd love to see developed/tested in my lifetime:]]></description><link>https://simul.substack.com/p/gene-therapies-i-want-to-see-developed-14-08-06</link><guid isPermaLink="false">https://simul.substack.com/p/gene-therapies-i-want-to-see-developed-14-08-06</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Wed, 06 Aug 2014 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Gene therapies I'd love to see developed/tested in my lifetime:</em></p><p><strong>&#8203;1. daf-2</strong> - Downregulation increases lifespan in c.elegans</p><p><em>Next steps:</em> &nbsp;RNAi and/or Crispr to cause daf-2 homolog (FOXO3) downregulation in mice +&nbsp;tests on resulting phenotype.</p><p>&#8203;</p><p><strong>&#8203;2. PEPCK-C &nbsp;</strong> &nbsp;- Beta-actin promoter linked to pepck gene shown to improve longevity, intelligence metabolism in mice.</p><p><em>Next steps:</em> &nbsp;Lentiviral transfection vector as a longevity vaccine (develop in mouse ageing model with human gene)</p><p>&#8203;</p><p><strong>&#8203;3. m-CAT &nbsp;</strong> &nbsp;- &nbsp;Mitochondrial targeted catalase : upregulation shown to improve cancer resistance and longevity</p><p><em>Next steps:</em> &nbsp;Develop transfection vector as a cancer vaccine (develop in mouse ageing model with human gene)</p><p>&#8203;</p><p><strong>4. HAS2 </strong>- Molecular weight and production of hyaluron decreases over time. &nbsp; Organisms with large amounts of HMWHA live longer and resist cancer.</p><p><em>Next steps: </em>&nbsp;Test regular intravenous injection of HMWHA in rat models of cancer and aging. &nbsp; Develop gene therapy intervention to increase HAS2 expression.</p><p><strong>5. TERT </strong>- TERT+ mice live longer, but also produce more tumors. &nbsp; HAS2, m-CAT and PEPCK-C all interfere with tumorgenesis. &nbsp;The upregulation of TERT while simultaneously increasing m-CAT and HAS2 expression should have a strong synergistic effect.</p><p><em>Next steps: </em>&nbsp;Develop gene therapy intervention to increase TERT expression, matching prior experiments, but combine with other interventions.</p>]]></content:encoded></item><item><title><![CDATA[Clustered Object Encoding 2.0]]></title><description><![CDATA[Without going into detail about of "the cloud" and the exaggerations and mysticism that accompany it, here's some definitions that it took me a while to truly understand:]]></description><link>https://simul.substack.com/p/clustered-object-encoding-20-14-06-24</link><guid isPermaLink="false">https://simul.substack.com/p/clustered-object-encoding-20-14-06-24</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Tue, 24 Jun 2014 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Without going into detail about of "the cloud" and the exaggerations and mysticism that accompany it, here's some definitions that it took me a while to truly understand:</p><p>Object storage: Some manky, idiosyncratic api that allows developers to store "stuff". Avoids dealing with things like partial writes, seeks, memory maps, etc. Generally space wasteful by design. Not a place you'd want to put anything you care about. Yet, secretly, is probably the location of <em>everything</em>you care about. Your bank probably keeps your PDF statements in something like this.</p><p>Block storage: Like a horse, one can mount this kind of storage... but only for exclusive access. No shared, lockable access, no parallel reads. Essentially it's the virtual hard drive for your virtual machine from which you derive your virtual paycheck.</p><p>Clustered storage: Typically one of the above, but your data is now copied ad nauseum. Someone probably didn't stripe it. The things you expect from clustered storage, like striped files, full POSIX support, parallel writes, and erasure coding don't work in your version of the software, but every whitepaper you read refers to them.</p><p>POSIX, Erasure Coded, Clustered, Storage (PECCS): 1. This is what you <em>actually want</em> if you run your own data center. Used in a sentence: "Wow, that guy's got PECCS". 2. A mythical beast. 3. Maybe some company named "NextEMCApp" does it. Maybe some guy names Xavier in Spain got it to work once, but then he got hired by [SOME BIG COMPANY] and nobody heard from him again.</p>]]></content:encoded></item><item><title><![CDATA[Variable Length, Zipf's Law and Density Functions]]></title><description><![CDATA[When coding, variables should be named based on both frequency and the length of their context.]]></description><link>https://simul.substack.com/p/variable-length-zipfs-law-and-density-14-06-11</link><guid isPermaLink="false">https://simul.substack.com/p/variable-length-zipfs-law-and-density-14-06-11</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Wed, 11 Jun 2014 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>When coding, variables should be named based on both frequency and the length of their context. Variables, structures and other constructs should have a name length that follows to <a href="https://en.wikipedia.org/wiki/Zipf's_law">Zipf's law</a> as it applies to <a href="http://lql.uni-trier.de/index.php/Word_length_and_frequency">word length and frequency</a>. Please glance at those references before continuing.</p><p>When these laws of linguistic use are ignored, readability is demonstrably diminished.</p><p>Consider a variable, the hated "x", used 100 times in a file. If "x" is used 100 times in 40 lines of mathematical manipulation, such as in a digest function, this would be acceptable... the high frequency of use strictly precludes a longer name. If, however, it was spread out across 10000 lines of code, a far longer name would be needed.</p><p>Of course, suppose that function was embedded in 10k lines of code. Does this change the freqency of x? No. One important rule is that, for the purposes of linguistic calculation, <em>the frequency of any variables usage should be computed relative to the scope of it's use.</em></p><p>As a demonstration, cluttering a short for i=1 to 10 ... loop with for iterationIndex = 1 to 10, can cause code to be nigh unreadable.</p><p>Operation can often be obscured by foolish verbosity:</p><pre><code>for iterationIndex = 1 to 10
    countArray[iterationIndex]=sizeArray[iterationIndex]*factorArray[iterationIndex] + computeDensity(histogram,iterationIndex)
</code></pre><p>Versus</p><pre><code>for i = 1 to 10
    countArray[i]=sizeArray[i]*factorArray[i] + computeDensity(histogram,i)
</code></pre><p>Likewise stuffing common prefixes on sets of variables in order to lengthen them can hide their meaning in a limited scope:</p><pre><code>for i = 1 to 10
    wordSuffixCountArray[i]=wordSuffixSizeArray[i]*wordSuffixFactorArray[i] + ComputeDensityForWordSuffix(currentWordSuffixHistogram,i)
</code></pre><p>It's clear that a <em>minimum set of descriptive, distinct terms within the scope of use</em> should, instead, be used.</p><p>Recently, software engineering pundits seem to take the stance that there is no such thing as a variable with too-long a name. This is false. Numerous linguistic studies on readability, word length and frequency, bear that out and so, of course, does common sense. <strong>Maximum clarity can be achieved in coding languages by using the same types of statistical distributions that occur in natural languages.</strong></p>]]></content:encoded></item><item><title><![CDATA[Capricious Job Scheduling]]></title><description><![CDATA[Using a perfectly fair scheduler, I launch 5 processes with the following pattern:]]></description><link>https://simul.substack.com/p/capricious-job-scheduling-14-05-30</link><guid isPermaLink="false">https://simul.substack.com/p/capricious-job-scheduling-14-05-30</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Fri, 30 May 2014 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Using a perfectly fair scheduler, I launch 5 processes with the following pattern:</p><pre><code></code></pre><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC</p><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC</p><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC</p><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC</p><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC</p><p>Where 'I' is one second of I/O intensive operation, and 'C' is one second of CPU intensive operation. The result of a perfectly fair scheduler is that there will be periods of high I/O contention and high CPU contention, as the 5 processes are "fairly" switched between, and each keeps the pace with the other.</p><p>Using a more "capricious" scheduler, where processes may "get lucky" for a while, my processes will be staggered</p><pre><code></code></pre><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC lucky (goes first)</p><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC unlucky (goes last)</p><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC</p><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC</p><p>IIIIIIIIICCCCCCCCCCCCIIIIIIIIIIIIIICCCCCCCCCCCCC</p><p>It's clear that "everyone wins" when this method is chosen.</p><p>My argument for "capricious" scheduling is that a system cannot know, in advance whether something will be an I or a C. Programs can be profiled over time (modern o/s systems don't do this... but probably should), but most program execution paths vary to the point where profiling may be impractical. Accordingly, a scheduler should be, to some extent, random.</p>]]></content:encoded></item><item><title><![CDATA[New verison of bowtie-1.0]]></title><description><![CDATA[Since the Ben Langmead version has been languishing a bit, I forked the repo, and incorporated most of the pull requests (with some edits):]]></description><link>https://simul.substack.com/p/new-verison-of-bowtie-10-14-04-18</link><guid isPermaLink="false">https://simul.substack.com/p/new-verison-of-bowtie-10-14-04-18</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Fri, 18 Apr 2014 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Since the Ben Langmead version has been languishing a bit, I forked the repo, and incorporated most of the pull requests (with some edits):</p><p><a href="https://github.com/earonesty/bowtie">https://github.com/earonesty/bowtie</a></p><p>Support for compiling on Apple, stream i/o, and gzip support has been added.</p>]]></content:encoded></item><item><title><![CDATA[Latest Printable Firearm Kit From DefDist]]></title><description><![CDATA[Printable automatic weapons?]]></description><link>https://simul.substack.com/p/latest-printable-firearm-kit-from-14-04-10</link><guid isPermaLink="false">https://simul.substack.com/p/latest-printable-firearm-kit-from-14-04-10</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Thu, 10 Apr 2014 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Printable automatic weapons? DIY genome editing?</p><p>We've come to a point in our evolution as a species where it's not possible to limit the "things" people can obtain. What's more important is creating a world where people have no reason to do harm.</p><p>"Well there's no way to guarantee that". Sure. But we allow corporations to draft zoning laws so that people have to drive further to work and so that public transportation remains a failure in most cities. We also allow gross wealth inequity. We try to con mothers into abandoning breast feeding (yes, this still happens, I witnessed it a couple weeks ago), and when that doesn't work we make it as difficult as possible for families to spend time with their kids.</p><p>When the majority of the population is stuck in a perpetual state of inadequacy, when the society is structured around things like "employment" and not "enjoyment", it's not surprising that violence seems a means to an end.</p><p>A more radical transformation of society, where from birth a nation's citizens feel nurtured, loved and supported would probably go further to prevent violence than "gun laws" possibly could.</p><p>If only 10% of the people in America went to work, or if we worked only 10% of the time, we could, with the technology we have, produce all the food, shelter and goods needed for every citizen to live a decent middle class lifestyle. But the focus is not on creating awesome lifestyles. The focus is on more expensive stuff for the few stakeholders that got in early in the pyramid scheme that is capitalism.</p><p>We continue to blame the weapon, and not the society that produces it's wielder.</p><p>You download printable firearms here: <a href="http://kickass.to/defdist-defcad-mega-pack-4-5-otacon-zipped-t7677520.html">http://kickass.to/defdist-defcad-mega-pack-4-5-otacon-zipped-t7677520.html</a></p>]]></content:encoded></item><item><title><![CDATA[bitk.in, mojolicious and liteapi]]></title><description><![CDATA[I wanted to build a site that demonstrated how easy it was to take bitcoin and litecoin.]]></description><link>https://simul.substack.com/p/bitkin-mojolicious-and-liteapi-14-02-11</link><guid isPermaLink="false">https://simul.substack.com/p/bitkin-mojolicious-and-liteapi-14-02-11</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Tue, 11 Feb 2014 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I wanted to build a site that demonstrated how easy it was to take bitcoin and litecoin. After building LiteAPI in mod_perl and running into issues with performance and those wacky implicit closures, I decided to try an event driven framework, Mojolicious.</p><p>The site is <a href="https://bitk.in">https://bitk.in</a>, and it allows you to spend bitcoin &amp; litecoin to get fair-valued gift cards at big online stores like Amazon, Walmart, etc.</p><p>It uses the API from <a href="http://liteapi.org">http://liteapi.org</a> for Litecoin and Blockchain's wallet API for Bitcoin.</p><p>Bitcoin/litecoin integration was trivial. Mojolicious allowed me to spend more time focusing on integration with vendors and payment systems, and just about no time worrying about HTTP.</p><p>To be honest, I spent more time thinking about the color than the back end.</p>]]></content:encoded></item><item><title><![CDATA[UTF8 Encoding and Postgres Dump]]></title><description><![CDATA[If you back up a database from one version of postgres using pg_dumpall, then restore to another version, it's very possible that the strictness or some other aspect of the UTF8 library has changed.]]></description><link>https://simul.substack.com/p/utf8-encoding-and-postgres-dump-13-12-03</link><guid isPermaLink="false">https://simul.substack.com/p/utf8-encoding-and-postgres-dump-13-12-03</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Tue, 03 Dec 2013 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you back up a database from one version of postgres using pg_dumpall, then restore to another version, it's very possible that the strictness or some other aspect of the UTF8 library has changed.</p><p>The end result is that you will see an error "invalid character for encoding" while restoring.</p><p>The utility "iconv" can help, and it was really hard to find the answer online, which is why I'm reposting for my own sanity:</p><pre><code>
gunzip -c dumpall.gz | iconv | sudo -u postgres psql &gt; restore.errs 2&gt;&amp;1 
</code></pre><p>Miraculously, iconv worked without options, cleaning up version incompatibilities, while maintaining all the data... even the funny French city names.</p><p>If you're changing encodings while also upgrading, that's fine too. iconv takes a "from" and "to" argument, so log in to the source db and destination db, and use:</p><pre><code>
SHOW client_encoding;
</code></pre><p>Then use the results as the "-f FROM" and "-t TO" arguments to iconv. No conversion is perfect, but iconv seems to do as good a job as possible.</p>]]></content:encoded></item><item><title><![CDATA[Secure password generator]]></title><description><![CDATA[Free website for generating passwords so you don't have to memorize a lot of them, and you don't have to re-use them.]]></description><link>https://simul.substack.com/p/secure-password-generator-13-11-22</link><guid isPermaLink="false">https://simul.substack.com/p/secure-password-generator-13-11-22</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Fri, 22 Nov 2013 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Free website for generating passwords so you don't have to memorize a lot of them, and you don't have to re-use them. Secure, simple, and written in javascript:</p><p><a href="https://passhash.com/">https://passhash.com/</a></p>]]></content:encoded></item><item><title><![CDATA[How to forget a specific memory]]></title><description><![CDATA[The specific memory erasing kinase inhibitor "Zip" works in a lab on mice, but it has to be injected into the brain during a recall event.]]></description><link>https://simul.substack.com/p/how-to-forget-a-specific-memory-13-11-11</link><guid isPermaLink="false">https://simul.substack.com/p/how-to-forget-a-specific-memory-13-11-11</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Mon, 11 Nov 2013 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The specific memory erasing kinase inhibitor "Zip" <a href="http://bit.ly/1aOWSyH">works in a lab</a> on mice, but it has to be injected into the brain during a recall event.</p><p>So, the memory forgetting pill isn't available, but there is Chelerythrine, another kinase inhibitor, that's the natural product of "Zanthoxylum_clava-herculis" aka: southern prickly ash or pepperwood. This compound has already been shown an effective memory disruptor (References: http://bit.ly/HQ6jSt, http://bit.ly/1fwwys5). And it's bioavailable, since chewing pepperwood bark (<a href="http://bit.ly/1aOWSyH">readily available online</a>) quickly numbs your mouth, and is an ancient herbal pain remedy.</p><p>PTSD is another kind of pain.</p><p>One treatment for PTSD, <a href="http://www.washington.edu/admin/hr/polproc/work-violence/cid.html">CISD</a> is known to be effective, and sometimes is done in conjunction with beta-blockers.</p><p>Chewing pepperwood bark during a recall event might work even better - especially since propranolol (the current unproven drug of choice) has had low/no significant reported efficacy in placebo controlled trials. MDMA was shown to be very effective (83% respond to treatment this way), but since it's very illegal, it's a lot harder to work with.</p><p>For fun I'm going to try this: chewing the bark until I feel strong numbing effects in the mouth and overall relaxation. Then having someone coach me to recall something painful or annoying. (Yes MDMA would be more fun, but I can click and buy that bark.)</p>]]></content:encoded></item><item><title><![CDATA[ASHG Poster on Viral Presence in Lymphoma]]></title><description><![CDATA[Abstract:]]></description><link>https://simul.substack.com/p/ashg-poster-on-viral-presence-in-13-10-28</link><guid isPermaLink="false">https://simul.substack.com/p/ashg-poster-on-viral-presence-in-13-10-28</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Mon, 28 Oct 2013 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Abstract:</strong></p><p>We used RNA-Seq to detect viral homologs in tumor sample expression data obtained from The Cancer Genome Atlas (TCGA) 1. We compared normal tissue viral expression to cancer tissue expression using sequence alignment to a repeat-masked virome, quantification and differential expression. We validated the viral homologs using pileup+scaffold assembly and</p><p>BLAST of high-complexity contigs.</p><p><strong>Conclusions:</strong></p><p>Roughly 30% of lymphoma cancer samples are associated with EBV, and the majority are associated with either EBV, XMRV or SMRV. The use of controls is essential for removing ubiquitous viruses and viral homologs from results. It was difficult obtaining information about public samples. Each TCGA contributor used different processing methods. Many samples (thyroid, ovarian) did not have whole FASTQ&#8217;s (an artifact of using BAM as the primary submission format). Although there are often stringent sample submission guidelines for large-scale projects, there appear to be insufficient guidelines for sequencing and bioinformatics.</p><p><strong>Link to poster:</strong></p><p><a href="http://www.documentroot.com/virusx.pdf">Click to view poster from ASHG</a></p>]]></content:encoded></item><item><title><![CDATA[grun Job Scheduler moved to ZMQ]]></title><description><![CDATA[As most people in cluster computing know, there really isn't a simple and "reall open source" solution out there for job scheduling.]]></description><link>https://simul.substack.com/p/grun-job-scheduler-moved-to-zmq-13-06-03</link><guid isPermaLink="false">https://simul.substack.com/p/grun-job-scheduler-moved-to-zmq-13-06-03</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Mon, 03 Jun 2013 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As most people in cluster computing know, there really isn't a <em>simple</em> and "reall open source" solution out there for job scheduling. Oracle SGE, LSF and others are massive things, with over 100k lines of code, and extraordinarily complex configuration for things ranging from MPI support to Kerberos. And yet they lack simple features (script plugins for configuration), that would make them more versatile.</p><p><a href="https://github.com/earonesty/grun">grun</a> was written to be an "extremely lightweight" and yet big-featured job scheduler. The early version was not much more than "ssh to remote host, run job, wait for response", while logging and keeping track of resources. It's evolved to use a TCP messaging system allowing the compute nodes, queue nodes, and clients to communicate. By v 1.0 the plan is to have better support for arbitrary metrics, and better handling of priorities.</p><p>Going from 0.8 to v 0.9, I decided to try using the zeromq library instead of TCP. At first it was hard to remember that you really don't need to worry about things like sending to a socket you just created, even with no one on the other end.</p><p>The net result of the ZMQ port:</p><ol><li><p>speed improved</p></li></ol><ol><li><p>implicit perl moved to optimized c</p></li></ol><ol><li><p>built-in multithreading takes better advantage of cpu</p></li></ol><ol><li><p>ability to stop/restart any queue without losing messages</p></li></ol><ol><li><p>improved reliability of message delivery</p></li></ol><ol><li><p>improved code organization orientated around messaging</p></li></ol><ol><li><p>20% smaller code base, because we removed:</p></li></ol><ol><li><p>all "double checks" to see if connections are there</p></li></ol><ol><li><p>code that "breaks up" large messages</p></li></ol><ol><li><p>all issues with blocking/vs nonblocking i/o</p></li></ol><ol><li><p>the whole "select" loop complexity</p></li></ol><p>ZMQ is not perfect (yet), but it was an overall improvement over straight TCP. Because of the forking needed to launch jobs, I had to do <a href="https://zeromq.jira.com/browse/LIBZMQ-441">some fiddling with dup'ed file descriptors</a> to prevent zmq from acting wonky. The learning curve was worth it. I doubt I'll be using TCP again, especially since ZMQ has package support with most Linux distributions.</p>]]></content:encoded></item><item><title><![CDATA[Convert absolute to relative links]]></title><description><![CDATA[ln-abs2rel.pl]]></description><link>https://simul.substack.com/p/convert-absolute-to-relative-links-13-05-30</link><guid isPermaLink="false">https://simul.substack.com/p/convert-absolute-to-relative-links-13-05-30</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Thu, 30 May 2013 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="http://www.documentroot.com/ln-abs2rel.pl">ln-abs2rel.pl</a></p><pre><code>usage: ./ln-abs2rel.pl [-noexec] [-recursive]  ... 

Converts absolute to relative links.

Use -noexec to see what would be done.
Use -recursive to do this for all subdirs.

</code></pre>]]></content:encoded></item><item><title><![CDATA[FIX: UBUNTU stops logging to /var/log/kern.log]]></title><description><![CDATA[At some point the old kernel logger got upgrades to rsyslogd &#8230;.]]></description><link>https://simul.substack.com/p/fix-ubuntu-stops-logging-to-varlogkernlog-13-05-03</link><guid isPermaLink="false">https://simul.substack.com/p/fix-ubuntu-stops-logging-to-varlogkernlog-13-05-03</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Fri, 03 May 2013 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>At some point the old kernel logger got upgrades to rsyslogd &#8230;. When this happened the logs owned by &#8220;messagebus&#8221; got left owned by "messagebus". Changing ownsership of these logs to "syslog" and restarting syslogd is sufficient to fix.</p>]]></content:encoded></item><item><title><![CDATA[Baseball Warm-up Exercise for Kids : "Base Tag"]]></title><description><![CDATA[A lot of times teams "warm up" by throwing and running while a coach tells them where to throw and when to run.]]></description><link>https://simul.substack.com/p/baseball-warm-up-exercise-for-kids-13-03-18</link><guid isPermaLink="false">https://simul.substack.com/p/baseball-warm-up-exercise-for-kids-13-03-18</guid><dc:creator><![CDATA[erik aronesty]]></dc:creator><pubDate>Mon, 18 Mar 2013 00:00:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ltji!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F607c5c24-2a20-4697-bb2e-5d4faa71214c_144x144.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A lot of times teams "warm up" by throwing and running while a coach tells them where to throw and when to run. This warm-up accomplishes that, but it's fun because it&#8217;s in a &#8220;game&#8221; structure, and a lot of the kids I've worked with are motivated by that. &nbsp; Plus, once they know the rules, they will play without supervision for quite a while - I&#8217;ve found you have to stop them or they will tire out.</p><p><strong>Setup:&nbsp;</strong></p><ul><li><p>2&nbsp;&nbsp;"fielders"&nbsp;with gloves and a ball stand a baseline-width apart</p></li><li><p>A 3rd kid is the &#8220;runner&#8221;, standing on base with the fielder who has the ball</p></li></ul><p><strong>Rules:&nbsp;</strong></p><ul><li><p>The runner starts running at any time, and the fielder with the ball tries to throw them out</p></li><li><p>The person with the ball <em>can&#8217;t throw </em>until <em>after</em> the runner starts running</p></li><li><p>Start by assuming the play is a force... any good throw is an out</p></li><li><p>For kids where this is easy&#8230;. it&#8217;s not a force&#8230;you&#8217;ve got to tag them in a rundown</p></li></ul><p><strong>Options</strong> &#8230; add <em>points</em> for kids who no longer seem motivated by the game (some kids love points, others don&#8217;t) ... for example:</p><ul><li><p>Runner gets two points if he gets to the other base</p></li><li><p>Fielders get one point if they throw him out</p></li><li><p>Fielders lose two points if they overthrow!&nbsp;</p></li></ul><p><strong>Purpose:</strong></p><p>The point is to develop and value <em>consistency</em> in young fielders&#8230; where unnecessary risks aren&#8217;t taken, and accuracy/speed are stressed. &nbsp;Points, rules, etc. change as skills and the coaches needs change.</p>]]></content:encoded></item></channel></rss>