<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: joouha</title><link>https://news.ycombinator.com/user?id=joouha</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 14 May 2026 15:28:45 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=joouha" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by joouha in "Ratty – A terminal emulator with inline 3D graphics"]]></title><description><![CDATA[
<p>tmux now supports sixel graphics, so you can use that instead if running euporie in tmux</p>
]]></description><pubDate>Wed, 13 May 2026 08:41:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=48119323</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=48119323</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48119323</guid></item><item><title><![CDATA[New comment by joouha in "Ratty – A terminal emulator with inline 3D graphics"]]></title><description><![CDATA[
<p>> is there a way to swap the jupyter kernel within euphorie to something else more minimalist?<p>You can use euporie-console for a REPL-like terminal experience (still with rich outputs) if you don't want the full notebook experience.<p>You can also select the `local-python` kernel in euporie to run code using the local Python interpretor which runs euporie, instead of connecting to a Jupyter kernel.<p>> And when you run a project with ssh, there are ways to give access to other users with user:password if I may ask?<p>> I also wish to ask if there is a way to sign in to jupyter instance like that itself perhaps?<p>euporie-hub supports spawning notebook instances for connected users, but I haven't implemented collaborative editing like JupyterLab supports (yet). I believe that jpterm [1] might support this.<p>[1] <a href="https://github.com/davidbrochart/jpterm" rel="nofollow">https://github.com/davidbrochart/jpterm</a></p>
]]></description><pubDate>Tue, 12 May 2026 09:38:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=48106065</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=48106065</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48106065</guid></item><item><title><![CDATA[New comment by joouha in "Ratty – A terminal emulator with inline 3D graphics"]]></title><description><![CDATA[
<p>Yes - you need to use the IJulia kernel: <a href="https://github.com/JuliaLang/IJulia.jl" rel="nofollow">https://github.com/JuliaLang/IJulia.jl</a></p>
]]></description><pubDate>Tue, 12 May 2026 09:27:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48106010</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=48106010</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48106010</guid></item><item><title><![CDATA[New comment by joouha in "Ratty – A terminal emulator with inline 3D graphics"]]></title><description><![CDATA[
<p>You can absolutely run euporie in tmux. It's useful to do so when using long running notebooks over SSH, so you can disconnect and reconnect later.</p>
]]></description><pubDate>Tue, 12 May 2026 05:58:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48104725</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=48104725</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48104725</guid></item><item><title><![CDATA[New comment by joouha in "Ratty – A terminal emulator with inline 3D graphics"]]></title><description><![CDATA[
<p>I'm specifically interested in querying for support of particular glyphs (e.g. the symbols for legacy computing block), so applications can use a different fallback if it is know that a particular glyph cannot be rendered and will break the interface.<p>I agree that the addition of sending custom glyphs to the terminal is potentially problematic.</p>
]]></description><pubDate>Tue, 12 May 2026 05:54:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48104705</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=48104705</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48104705</guid></item><item><title><![CDATA[New comment by joouha in "Ratty – A terminal emulator with inline 3D graphics"]]></title><description><![CDATA[
<p>It's very interesting to learn about the newly proposed glyph protocol [1] in the linked blog post. 
I was bemoaning the lack of exactly this here about 6 months ago [2]!<p>[1] <a href="https://rapha.land/introducing-glyph-protocol-for-terminals/" rel="nofollow">https://rapha.land/introducing-glyph-protocol-for-terminals/</a><p>[2] <a href="https://news.ycombinator.com/item?id=45805072">https://news.ycombinator.com/item?id=45805072</a></p>
]]></description><pubDate>Mon, 11 May 2026 14:22:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=48095389</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=48095389</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48095389</guid></item><item><title><![CDATA[New comment by joouha in "Ratty – A terminal emulator with inline 3D graphics"]]></title><description><![CDATA[
<p>No evolution necessary! With my project, euporie [1], you can have use your data science notebooks with graphical image outputs, HTML, LaTeX, etc, all in the terminal.<p>[1] <a href="https://github.com/joouha/euporie" rel="nofollow">https://github.com/joouha/euporie</a></p>
]]></description><pubDate>Mon, 11 May 2026 14:13:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=48095292</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=48095292</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48095292</guid></item><item><title><![CDATA[New comment by joouha in "Full-Text Search with DuckDB"]]></title><description><![CDATA[
<p>Maybe <a href="https://github.com/wesm/msgvault" rel="nofollow">https://github.com/wesm/msgvault</a> will do what you need?</p>
]]></description><pubDate>Thu, 30 Apr 2026 20:30:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=47967830</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=47967830</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47967830</guid></item><item><title><![CDATA[New comment by joouha in "Why I forked httpx"]]></title><description><![CDATA[
<p>Modshim does more than just wrap the external API of a package - it allows you to tweak something internal to the module while leaving its interface alone, without having to re-implement most of the package in order to re-bind new versions of objects.<p>There are a couple of example of this readme: (1) modifing the TextWrapper object but then use it through the textwrap library's wrap() function, and (2) modifing the requests Session object, but then just using the standard requests.get(). Without modshim (using standard monkey-patching) you would have to re-implement the wrap and get methods in order to bind the new TextWrapper / Session classes.</p>
]]></description><pubDate>Wed, 25 Mar 2026 14:43:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=47517995</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=47517995</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47517995</guid></item><item><title><![CDATA[New comment by joouha in "Why I forked httpx"]]></title><description><![CDATA[
<p>This sounds like an ideal use case for modshim [0]<p>One of its intended use cases is bridging contribution gaps: while contributing upstream is ideal, maintainers may be slow to merge contributions for various reasons. Forking in response creates a permanent schism and a significant maintenance burden for what might be a small change. Modshim would allow you to create a new Python package containing only the fixes for your bugbears, while automatically inheriting the rest from upstream httpx.<p>[0] <a href="https://github.com/joouha/modshim" rel="nofollow">https://github.com/joouha/modshim</a></p>
]]></description><pubDate>Wed, 25 Mar 2026 12:47:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=47516633</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=47516633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47516633</guid></item><item><title><![CDATA[New comment by joouha in "Show HN: Euporie-lite, Jupyter notebooks in terminal in the browser"]]></title><description><![CDATA[
<p>Thanks for the bug report. It has been fixed in the latest version of euporie.</p>
]]></description><pubDate>Fri, 19 Dec 2025 23:47:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46332314</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=46332314</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46332314</guid></item><item><title><![CDATA[New comment by joouha in "Chafa: Terminal Graphics for the 21st Century"]]></title><description><![CDATA[
<p>I use chafa extensively, and it really is the best tool for terminal graphics in my opinion.<p>I use it as a fallback option for terminals without proper terminal graphics support in my TUI Jupyter client, euporie.<p>There are Python bindings available: <a href="https://github.com/GuardKenzie/chafa.py" rel="nofollow">https://github.com/GuardKenzie/chafa.py</a></p>
]]></description><pubDate>Mon, 15 Dec 2025 19:53:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=46279554</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=46279554</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46279554</guid></item><item><title><![CDATA[Show HN: Euporie-lite, Jupyter notebooks in terminal in the browser]]></title><description><![CDATA[
<p>I modified my terminal Jupyter client, euporie [1], to run using pyodide in the browser.<p>It's akin to JupyterLite, providing a temporary online Python notebook environment without the need to install any Python packages. It's potentially useful if you need to do a bit of quick interactive work in Python, but don't have the environment set up ready to do so.<p>Since actual jupyter kernels can't run in pyodide (they run as subprocesses and communicate over ZMQ), it uses an in-process Python kernel which runs on the same interpreter as the application itself.<p>Notebooks and files can be saved persistently to a local-storage based file system. It uses xterm.js as the terminal emulator (though I'm keen to test out ghostty-web).<p>[1] <a href="https://news.ycombinator.com/item?id=27091167">https://news.ycombinator.com/item?id=27091167</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46246017">https://news.ycombinator.com/item?id=46246017</a></p>
<p>Points: 3</p>
<p># Comments: 2</p>
]]></description><pubDate>Fri, 12 Dec 2025 17:00:15 +0000</pubDate><link>https://euporie.readthedocs.io/en/latest/_static/lite.html</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=46246017</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46246017</guid></item><item><title><![CDATA[New comment by joouha in "State of Terminal Emulators in 2025: The Errant Champions"]]></title><description><![CDATA[
<p>I'd find it very useful to be able to query a terminal to see if it has font support for a given list of characters.<p>This would allow TUIs to use recent unicode characters which may not be supported (e.g. Symbols for Legacy Computing), or private use characters (e.g. powerline symbols & font-awesome icons), while falling back to a more universally supported character in terminals that do not support them.</p>
]]></description><pubDate>Mon, 03 Nov 2025 22:13:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=45805072</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=45805072</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45805072</guid></item><item><title><![CDATA[New comment by joouha in "Show HN: Modshim – A new alternative to monkey-patching in Python"]]></title><description><![CDATA[
<p>I've tested it works from 3.9 to 3.14</p>
]]></description><pubDate>Wed, 22 Oct 2025 21:40:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=45675514</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=45675514</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45675514</guid></item><item><title><![CDATA[New comment by joouha in "Show HN: Modshim – A new alternative to monkey-patching in Python"]]></title><description><![CDATA[
<p>It should in theory be possible to mount the new virtual package over the lower module - but I don't think works currently (I'll have to test this). Doing this would make modifications available globally like you describe.</p>
]]></description><pubDate>Wed, 22 Oct 2025 18:26:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45673192</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=45673192</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45673192</guid></item><item><title><![CDATA[New comment by joouha in "Show HN: Modshim – A new alternative to monkey-patching in Python"]]></title><description><![CDATA[
<p>Let me explain what inspired me to create modshim:<p>I've written a Jupyter client for the terminal (euporie), for which I've had to employ monkey-patching of various third-party packages to achieve my goals and avoid forking those packages. For example, I've added terminal graphics support & HTML/CSS rendering to prompt-toolkit (a Python TUI library), and I've changed aiohttp to not raise errors on non-200 http responses. These are things the upstream package maintainers do not want to maintain or will not implement, and likewise I do not want to maintain forks of these packages.<p>So far I've got away with monkey-patching, but recently I implemented a kernel for euporie which runs on the local interpreter (the same interpreter as the application itself). This means that my patches are exposed to the end user in a REPL, resulting in potentially unexpected behaviour for users when using certain 3rd party packages in Python through euporie. Modshim will allow me to keep my patched versions isolated from the end user.<p>Additionally, I would like to publish some of my patches to prompt_toolkit as a new package extending prompt_toolkit, as I think they would be useful to others building TUI applications. However, the changes required need to be deeply integrated to work, which would mean forking prompt_toolkit (something I'd like to avoid). modshim will make it possible for me to publish just my modifications.<p>Perhaps it's a somewhat niche use-case, and modshim is not something most Python users would ever need to use. I just thought it was something novel enough to be of interest to other HN users.<p>> messing around with import internals in python is extremely tricky to get right<p>This is true! modshim has been the most complicated thing I've written by some way!</p>
]]></description><pubDate>Wed, 22 Oct 2025 18:18:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=45673083</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=45673083</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45673083</guid></item><item><title><![CDATA[Show HN: Modshim – A new alternative to monkey-patching in Python]]></title><description><![CDATA[
<p>I've invented a new alternative to forking / vendoring / monkey-patching packages in Python.<p>It's a bit like OverlayFS for Python modules - it allows you write modifications for a target module (lower) in a new module (upper), and have these combined in a new virtual module (mount).<p>It works by rewriting imports using AST transformations, then running both the lower and upper module's code in the new Python module.<p>This prevents polluting the global namespace when monkey-patching, and means if you want to make changes to a third-party package, you don't have to take on the maintenance burden of forking, you can package and distribute just your changes.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=45604013">https://news.ycombinator.com/item?id=45604013</a></p>
<p>Points: 109</p>
<p># Comments: 30</p>
]]></description><pubDate>Thu, 16 Oct 2025 11:17:56 +0000</pubDate><link>https://github.com/joouha/modshim</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=45604013</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45604013</guid></item><item><title><![CDATA[New comment by joouha in "Launch HN: Moonglow (YC S24) – Serverless Jupyter Notebooks"]]></title><description><![CDATA[
<p>Toy could try using euporie [1] to run Jupyter notebooks in the terminal<p>[1] <a href="https://github.com/joouha/euporie">https://github.com/joouha/euporie</a></p>
]]></description><pubDate>Fri, 23 Aug 2024 22:01:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=41333460</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=41333460</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41333460</guid></item><item><title><![CDATA[New comment by joouha in "State of the Terminal"]]></title><description><![CDATA[
<p>I've just found that Mintty supports this<p><a href="https://github.com/mintty/mintty/wiki/CtrlSeqs#overstrike">https://github.com/mintty/mintty/wiki/CtrlSeqs#overstrike</a></p>
]]></description><pubDate>Fri, 17 May 2024 09:06:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=40387874</link><dc:creator>joouha</dc:creator><comments>https://news.ycombinator.com/item?id=40387874</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40387874</guid></item></channel></rss>