<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tech on JmsDnns</title><link>/tech/</link><description>Recent content in Tech on JmsDnns</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Fri, 01 Nov 2024 00:00:00 +0000</lastBuildDate><atom:link href="/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>Algorithmic Underground</title><link>/tech/algo-underground/</link><pubDate>Fri, 01 Nov 2024 00:00:00 +0000</pubDate><guid>/tech/algo-underground/</guid><description>&lt;p&gt;I have been thinking about something Jean Baudrillard said a lot recently. It comes to mind because of the current moment and what is happening around generative AI.&lt;/p&gt;
&lt;p&gt;Prior to the current moment, I believed he was more cynical than necessary. The current moment changed that for me because I found myself wondering if we might actually bring about some of the futures Baudrillard talked about. In particular, a future where art dies.&lt;/p&gt;</description></item><item><title>Cartons</title><link>/tech/cartons/</link><pubDate>Wed, 25 Sep 2024 00:00:00 +0000</pubDate><guid>/tech/cartons/</guid><description>&lt;p&gt;I&amp;rsquo;ve learned to use many programming languages over the years. Most of them could reasonably described as ordinary, but every now and then I come across something unlike anything else I&amp;rsquo;ve seen before. After all these years programming, it&amp;rsquo;s also just been a long time since I felt a language offered a genuinely new idea to the world. And yet, Rust actually is like no other language I&amp;rsquo;ve seen before and with some genuinely new ideas too.&lt;/p&gt;</description></item><item><title>Penn AI Conf</title><link>/tech/penn-ai/</link><pubDate>Sun, 14 Apr 2024 00:00:00 +0000</pubDate><guid>/tech/penn-ai/</guid><description>&lt;p&gt;I attended University of Pennylvania&amp;rsquo;s first AI conference last Friday, where I heard several talks and hung out with an old friend that teaches there. I went to the conference with an open mind, but I must confess that I&amp;rsquo;ve been cynical about AI after feeling blasted by AI tech bros and doomers. I am grateful to have learned from the perspective of more level-headed folks and I even changed some of my opinions about where it&amp;rsquo;s all going.&lt;/p&gt;</description></item><item><title>Eyes</title><link>/tech/eyes/</link><pubDate>Fri, 08 Mar 2024 00:00:00 +0000</pubDate><guid>/tech/eyes/</guid><description>&lt;p&gt;Rust appears to be taking over a mindshare that has long been considered unaccessible to anything other than C++. The language makes some fascinating security guarantees at a time when it seems like the C++ community is tired of struggling with using the language to build secure systems, and when younger generations are choosing not to take on that pain. Stuff built with Rust can often be faster than C++ too. From what I can tell, there is a perception that just choosing to use Rust makes software both more secure and faster.&lt;/p&gt;</description></item><item><title>Decorators 101</title><link>/tech/decorators/</link><pubDate>Mon, 21 Aug 2023 00:00:00 +0000</pubDate><guid>/tech/decorators/</guid><description>&lt;p&gt;It is underappreciated that Python decorators are syntactic sugar for function wrappers. People new to Python usually encounter them first by writing like &lt;code&gt;@foo&lt;/code&gt; above a function &lt;code&gt;bar&lt;/code&gt; and observing that &lt;code&gt;bar&lt;/code&gt; behaves differently than it used to.&lt;/p&gt;
&lt;p&gt;More tangibly, using the &lt;code&gt;@foo&lt;/code&gt; decorator on &lt;code&gt;bar&lt;/code&gt; looks like this.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@foo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;hello!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To understand decorators is to understand function wrappers, but understanding those requires being comfortable with &lt;em&gt;first class objects&lt;/em&gt;, so we&amp;rsquo;ll start there. We will then explain function wrappers, using an example &lt;code&gt;time_it&lt;/code&gt; that determines how long it takes for a function to complete. We then use decorator syntax to apply our wrapper in a clean, elegant way.&lt;/p&gt;</description></item><item><title>MultiVenv</title><link>/tech/multivenv/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><guid>/tech/multivenv/</guid><description>&lt;p&gt;I replaced virtualenvwrapper with 100 lines of bash, simplifying the core experience into something you can drop on any box without installing anything.&lt;/p&gt;

&lt;h1 id="a-virtualenv-wrapper" class="heading-anchor"&gt;&lt;a href="#a-virtualenv-wrapper" class="anchor-link"&gt;A VirtualEnv Wrapper&lt;span class="anchor-hash"&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;I was a fan of &lt;a href="https://github.com/python-virtualenvwrapper/virtualenvwrapper/"&gt;virtualenvwrapper&lt;/a&gt; (&lt;em&gt;VEW&lt;/em&gt;) for years. I attribute having an unusually smooth experience with Python to always using VEW for development. VEW made it easy to have virtualenvs (&lt;em&gt;venvs&lt;/em&gt;) that were unobtrusive.&lt;/p&gt;
&lt;p&gt;My favorite aspect of the project is that it would store every venv together in a common directory, making it easy to manage or search them separately from a project. That may seem like a small detail, but I loved the freedom I got to ensure text searches in the project wouldn&amp;rsquo;t include whatever it found in the venvs. Keeping env directories outside my project directory meant that, by default, I didn&amp;rsquo;t have to use any cli flags to ignore a directory, or configure VSCode to ignore some directory, etc.&lt;/p&gt;</description></item><item><title>Getting meta with Python</title><link>/tech/metaprogramming/</link><pubDate>Sat, 01 Apr 2023 00:00:00 +0000</pubDate><guid>/tech/metaprogramming/</guid><description>&lt;p&gt;Metaprogramming is powerful way to have a huge impact with a small amount of code.&lt;/p&gt;
&lt;p&gt;This post will explain metaprogramming by building a simple data validation system, similar to Schematics or Pydantic. We will start with a basic Python class and build upwards, solving one problem after another, until we have a data validation framework.&lt;/p&gt;
&lt;p&gt;Hold on to your butts cuz it&amp;rsquo;s about to get nneeerrrddyyyy!&lt;/p&gt;

&lt;h1 id="preview" class="heading-anchor"&gt;&lt;a href="#preview" class="anchor-link"&gt;Preview&lt;span class="anchor-hash"&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;We want to make someting like the following code work.&lt;/p&gt;</description></item></channel></rss>