<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: danpla</title><link>https://news.ycombinator.com/user?id=danpla</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 22 Apr 2026 11:49:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=danpla" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by danpla in "USB-C hubs and my slow descent into madness (2021)"]]></title><description><![CDATA[
<p>> There is no decent phone left with a 3.5mm jack, which is a really sad state of things... Unless you know one? Feel free to suggest.<p>Sony Xperia phones traditionally have a 3.5 jack and a normal screen (without holes and other nonsense for the camera).</p>
]]></description><pubDate>Fri, 18 Jul 2025 15:06:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=44605485</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=44605485</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44605485</guid></item><item><title><![CDATA[New comment by danpla in "OCR4all"]]></title><description><![CDATA[
<p>With proper image pre-processing, Tesseract can recognize even tiny text (5-7 px high).</p>
]]></description><pubDate>Mon, 17 Feb 2025 10:29:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=43077323</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=43077323</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43077323</guid></item><item><title><![CDATA[New comment by danpla in "Show HN: I launched a super cheap and simple to use OCR tool for macOS"]]></title><description><![CDATA[
<p>dpScreenOCR</p>
]]></description><pubDate>Mon, 04 Nov 2024 07:22:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=42039313</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=42039313</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42039313</guid></item><item><title><![CDATA[New comment by danpla in "Show HN: I launched a super cheap and simple to use OCR tool for macOS"]]></title><description><![CDATA[
<p>Try dpScreenOCR:<p><a href="https://danpla.github.io/dpscreenocr/" rel="nofollow">https://danpla.github.io/dpscreenocr/</a></p>
]]></description><pubDate>Mon, 04 Nov 2024 07:19:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=42039300</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=42039300</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42039300</guid></item><item><title><![CDATA[New comment by danpla in "dpScreenOCR – a cross-platform OCR tool"]]></title><description><![CDATA[
<p>dpScreenOCR is a free, open-source, and cross-platform optical character recognition tool with support for more than 100 languages.<p>dpScreenOCR works is like this: you select an area on the screen using a keyboard shortcut, and then text from that area is extracted and, depending on your choice, can be copied to the clipboard, saved to the history, or sent to another application (e.g. dictionary/translator). In most cases, you don't even have to interact with the GUI, and the program can reside in the system tray.<p>The biggest changes since the program (v1.1.0) was mentioned in HN[1] in 2022 include:<p>* Added a language manager that allows you to install and remove languages without leaving the application. Previously, you had to manually download the language files and place them in special directories.<p>* Added a stand-alone GNU/Linux bundle (in a TAR.XZ archive), which should work even on legacy systems released in around mid-2014 or later (tested on Ubuntu 14.04).<p>* Fixed recognition with vertical variants of Chinese, Japanese, and Korean.<p>* Added proper selection rectangle scaling according to the screen DPI. The width of the rectangle can now also be configured (as requested by @Lakuma in [1] :).<p>* Thanks to contributors, the website has been translated into several languages. Some languages are still to be added, so help with translation would be greatly appreciated: <a href="https://hosted.weblate.org/engage/dpscreenocr/" rel="nofollow">https://hosted.weblate.org/engage/dpscreenocr/</a><p>The full list of changes since v1.1.0 can be found here: <a href="https://raw.githubusercontent.com/danpla/dpscreenocr/v1.4.1/doc/changelog.txt" rel="nofollow">https://raw.githubusercontent.com/danpla/dpscreenocr/v1.4.1/...</a><p>The source code (zlib license) is available on GitHub: <a href="https://github.com/danpla/dpscreenocr">https://github.com/danpla/dpscreenocr</a><p>[1]: <a href="https://news.ycombinator.com/item?id=32123437">https://news.ycombinator.com/item?id=32123437</a></p>
]]></description><pubDate>Wed, 24 Jan 2024 13:58:07 +0000</pubDate><link>https://news.ycombinator.com/item?id=39117395</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=39117395</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39117395</guid></item><item><title><![CDATA[dpScreenOCR – a cross-platform OCR tool]]></title><description><![CDATA[
<p>Article URL: <a href="https://danpla.github.io/dpscreenocr">https://danpla.github.io/dpscreenocr</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=39117394">https://news.ycombinator.com/item?id=39117394</a></p>
<p>Points: 3</p>
<p># Comments: 1</p>
]]></description><pubDate>Wed, 24 Jan 2024 13:58:07 +0000</pubDate><link>https://danpla.github.io/dpscreenocr</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=39117394</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39117394</guid></item><item><title><![CDATA[New comment by danpla in "Immediate Mode GUI Programming"]]></title><description><![CDATA[
<p>> What they would lose is that they wouldn't exist in the first place or wouldn't be as full-featured.<p>These are some pretty bold statements.<p>* "They wouldn't exist in the first place" implies that ImGui was the primary reason and foundation for creating these programs. As if using the traditional retained mode GUI is so unbearable that without ImGui the authors would have abandoned the idea of creating these tools in the first place.<p>* "Or wouldn't be as full-featured" implies that ImGui is either more full-featured or (if you meant time) is faster to develop with compared to a traditional retained mode GUI.<p>> I'm surprised this is so hard to comprehend?<p>Well, I'm surprised that some people keep presenting the immediate mode GUI as the silver-bullet alternative to the traditional GUI. Don't get me wrong: I understand that IMGUI is a great tool if you need to quickly add a throway GUI to a game, but otherwise there is a price to pay, both by the developer and the end user.</p>
]]></description><pubDate>Wed, 17 Jan 2024 17:53:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=39031025</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=39031025</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39031025</guid></item><item><title><![CDATA[New comment by danpla in "Immediate Mode GUI Programming"]]></title><description><![CDATA[
<p>> 'Immediate mode UI' is only an API design philosophy, it says nothing about what happens under the hood.<p>Well, if you have a traditional immediate mode API like:<p><pre><code>    if (button("Start"))
        start();
</code></pre>
Then it's not just about the API philosophy: at the very least, it ties the event handling to the drawing.</p>
]]></description><pubDate>Tue, 16 Jan 2024 17:56:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=39016376</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=39016376</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39016376</guid></item><item><title><![CDATA[New comment by danpla in "Immediate Mode GUI Programming"]]></title><description><![CDATA[
<p>I didn't use RemedyBG or Tracy, but I did try ImHex (<a href="https://github.com/WerWolv/ImHex">https://github.com/WerWolv/ImHex</a>) and it loaded 12% of the CPU because everything is being repainted 60 times per second. Heck, it even has an option to limit the FPS, which solves the CPU load a bit, but at the same time results in sluggish input because the event handling is tied to the drawing frequency.<p>So yes, the experience was not good, and I don't see what these tools would lose by using a proper GUI. I don't want every utility to drain my laptop battery like a decent video game.<p>ImGui is great if you already have a loop where everything is unconditionally redrawn every frame, but otherwise it's a really odd choice for an end-user application.</p>
]]></description><pubDate>Tue, 16 Jan 2024 15:45:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=39014604</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=39014604</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39014604</guid></item><item><title><![CDATA[New comment by danpla in "The C++20 Naughty and Nice List for Game Devs"]]></title><description><![CDATA[
<p>Unfortunately, if you're using the standard library, you get this just by switching to the C++20 mode. For example, the committee decided to put tons of std::ranges-related stuff right in <algorithm>.<p><a href="https://www.reddit.com/r/cpp/comments/o94gvz/what_happened_with_compilation_times_in_c20" rel="nofollow noreferrer">https://www.reddit.com/r/cpp/comments/o94gvz/what_happened_w...</a></p>
]]></description><pubDate>Mon, 25 Dec 2023 16:32:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=38763881</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=38763881</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38763881</guid></item><item><title><![CDATA[New comment by danpla in "The C++20 Naughty and Nice List for Game Devs"]]></title><description><![CDATA[
<p>> I was surprised to see `fmt/format.h` on that list, but I do have to admit that the objections seem reasonable<p>The author talks about the code bloat, beacause of "an API that encourages custom formatter specification to live in a template". But at the end he mentions the standard solution to this problem:<p>> A preferable interface (I use, but also others AFAIK) is to check the type in a template (no choice there), and dispatch the formatting routine to somewhere that lives in a single translation unit.<p>So what prevents you from doing this with <format>? As I understand, the implementations of parse() and format() of std::formatter don't depend on the template parameters and can delegate to non-template functions residing in one CPP file. You can also provide additional wformat_parse_context/wformat_context overloads if you need wchar_t support.</p>
]]></description><pubDate>Mon, 25 Dec 2023 16:13:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=38763730</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=38763730</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38763730</guid></item><item><title><![CDATA[New comment by danpla in "For processing strings, streams in C++ can be slow"]]></title><description><![CDATA[
<p>> Anything object oriented is slower than anything procedural.<p>Well, that's not always true; it's better to use a profiler.<p>In many cases, it's trivial for the compiler to inline objects (e.g., used as predicates for <algorithm> routines), resulting in better performance compared to the equivalent procedural code.<p>> running constructors and destructors is expensive<p>If the object is not polymorphic (and sometimes even if it is), the compiler can inline both the constructor and destructor, resulting in exactly the same assembly output as the procedural code.</p>
]]></description><pubDate>Thu, 07 Dec 2023 12:29:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=38555624</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=38555624</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38555624</guid></item><item><title><![CDATA[New comment by danpla in "Python errors as values: Comparing useful patterns from Rust and Go"]]></title><description><![CDATA[
<p>> Expected errors - like "user not found" - should use a value instead of exception. In Python, you can use sentinel objects, or tuples, or None.. lots of options really.<p>That's why exceptions are called exceptions, not errors. If a routine called openFile() can't open a file, that's a pretty exceptional situation, and it's up to the caller to decide whether the exact reason is an error in their case.<p>The exception object is already a value that can have not only a message text, but also any data members, so why reinvent the wheel with sentinel objects, tuples, etc.?<p>> The examples in post, where you catch exception and re-raise Exception back are terrible - what's the point of them? There is no extra clarity, just verbosity. I would defect them in any code review.<p>Typically, you re-raise an exception after adding some content to it. This may be less important in Python, which gives you a great stack trace, but in a language like C++, the lack of context information makes the exception basically useless.</p>
]]></description><pubDate>Thu, 09 Nov 2023 19:21:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=38209632</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=38209632</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38209632</guid></item><item><title><![CDATA[New comment by danpla in "Windows 11's default mail client will show ads starting 2024"]]></title><description><![CDATA[
<p>> I have the idea that most people use browser-based email clients anyway?<p>Indeed, but it's not an option if you have more than one email account on the same service.</p>
]]></description><pubDate>Wed, 25 Oct 2023 06:54:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=38009982</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=38009982</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38009982</guid></item><item><title><![CDATA[New comment by danpla in "Python's “disappointing” superpowers"]]></title><description><![CDATA[
<p>As I know, SPARK can do this (in particular, thanks to the strong type system).<p><a href="https://learn.adacore.com/courses/intro-to-spark/chapters/01_Overview.html" rel="nofollow">https://learn.adacore.com/courses/intro-to-spark/chapters/01...</a></p>
]]></description><pubDate>Fri, 03 Feb 2023 12:28:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=34640203</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=34640203</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34640203</guid></item><item><title><![CDATA[New comment by danpla in "Show HN: dpScreenOCR – a program to recognize text on the screen"]]></title><description><![CDATA[
<p>Oh, thank you. I tried the ZIP on VirusTotal, and it looks like the false positives are triggered for Qt platform plugins, namely qwindowsvistastyle.dll qwindows.dll:<p><a href="https://www.virustotal.com/gui/file/2adff5ef8aaf1c7674422cdd6ed35a9d218e5b1c354e5ddb8c73c55e5c2a69c5/relations" rel="nofollow">https://www.virustotal.com/gui/file/2adff5ef8aaf1c7674422cdd...</a><p>I'll try to figure out what to do about that.</p>
]]></description><pubDate>Tue, 19 Jul 2022 18:19:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=32155831</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=32155831</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32155831</guid></item><item><title><![CDATA[New comment by danpla in "Show HN: dpScreenOCR – a program to recognize text on the screen"]]></title><description><![CDATA[
<p>I just updated the Windows installer to fix long startup time and high drive load. Sorry for the inconvenience.</p>
]]></description><pubDate>Sun, 17 Jul 2022 18:44:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=32129776</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=32129776</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32129776</guid></item><item><title><![CDATA[New comment by danpla in "Show HN: dpScreenOCR – a program to recognize text on the screen"]]></title><description><![CDATA[
<p>You're welcome! For now, it's impossible to configure the capture box, but I can add an option to change its thickness in the next version.</p>
]]></description><pubDate>Sun, 17 Jul 2022 16:08:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=32128018</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=32128018</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32128018</guid></item><item><title><![CDATA[New comment by danpla in "Show HN: dpScreenOCR – a program to recognize text on the screen"]]></title><description><![CDATA[
<p>You're welcome!</p>
]]></description><pubDate>Sun, 17 Jul 2022 16:05:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=32127988</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=32127988</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32127988</guid></item><item><title><![CDATA[Show HN: dpScreenOCR – a program to recognize text on the screen]]></title><description><![CDATA[
<p>In a nutshell, dpScreenOCR can recognize text from the selected screen area, and then can copy it to the clipboard, add it to history, or pass it as an argument to an executable.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=32123437">https://news.ycombinator.com/item?id=32123437</a></p>
<p>Points: 32</p>
<p># Comments: 7</p>
]]></description><pubDate>Sun, 17 Jul 2022 01:05:28 +0000</pubDate><link>https://danpla.github.io/dpscreenocr/</link><dc:creator>danpla</dc:creator><comments>https://news.ycombinator.com/item?id=32123437</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32123437</guid></item></channel></rss>