<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: NWoodsman</title><link>https://news.ycombinator.com/user?id=NWoodsman</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Sat, 25 Apr 2026 12:37:07 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=NWoodsman" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by NWoodsman in "Ask HN: What Are You Working On? (April 2026)"]]></title><description><![CDATA[
<p>Is there a jellyfin server that is an application? I might have mistakenly assumed it was container-based or itself a minimal OS.</p>
]]></description><pubDate>Mon, 13 Apr 2026 17:09:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=47755049</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=47755049</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47755049</guid></item><item><title><![CDATA[New comment by NWoodsman in "Ask HN: What Are You Working On? (April 2026)"]]></title><description><![CDATA[
<p>I forked a simple DNLA server which has been dead for 10 years and updated it to .Net 9. The goal is that hard drives are too expensive now and so it's better to spin up media servers quickly and temporarily using whatever hardware you have on hand.<p>It currently builds and announces itself to my TV (can see the server in Roku Media Player) but crashes because the http server implementation is homemade and out of date. Copilot generated some options and I will be plugging an implementation of a sockets-based server in the next couple of days.<p><a href="https://github.com/NWoodsman/simpleDLNA.net" rel="nofollow">https://github.com/NWoodsman/simpleDLNA.net</a></p>
]]></description><pubDate>Mon, 13 Apr 2026 16:01:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=47754019</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=47754019</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47754019</guid></item><item><title><![CDATA[New comment by NWoodsman in "Ask HN: What are you working on? (February 2026)"]]></title><description><![CDATA[
<p>I just posted my recorder app that does the same thing. I use NAudio WasapiLoopbackCapture. it's written in C#</p>
]]></description><pubDate>Mon, 09 Feb 2026 08:05:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=46942799</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=46942799</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46942799</guid></item><item><title><![CDATA[New comment by NWoodsman in "Ask HN: What are you working on? (February 2026)"]]></title><description><![CDATA[
<p><a href="https://github.com/NWoodsman/SimpleRecorder" rel="nofollow">https://github.com/NWoodsman/SimpleRecorder</a><p>A simple one click just works mic+PC audio recorder for Windows that mixes the microphone into the PC sound.</p>
]]></description><pubDate>Mon, 09 Feb 2026 08:02:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=46942780</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=46942780</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46942780</guid></item><item><title><![CDATA[New comment by NWoodsman in "BrainFlood: Runtime code generation via reflection in .NET"]]></title><description><![CDATA[
<p>This post has a lot of similarities to the 'object algebra' paper by Bruno Oliveira.<p><a href="https://www.cs.utexas.edu/~wcook/Drafts/2012/ecoop2012.pdf" rel="nofollow">https://www.cs.utexas.edu/~wcook/Drafts/2012/ecoop2012.pdf</a><p>If the OP author has any interest in doing a 1000x service to the C# community, the community needs a translator like you to convert the paper's compiler example into other domain specific examples. I'm pretty sure this paper went nowhere because it lacked a hello world example. something easier to digest and smaller and scope. The classic "dog is an animal and cat is an animal" level of explanation.</p>
]]></description><pubDate>Wed, 29 Jan 2025 05:06:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=42861768</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=42861768</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42861768</guid></item><item><title><![CDATA[New comment by NWoodsman in "BrainFlood: Runtime code generation via reflection in .NET"]]></title><description><![CDATA[
<p>I am a fan of this particular repository by Jules Jacobs who similarly uses struct based generics (to create immutable collections.)<p><a href="https://github.com/julesjacobs/ImmutableCollections/discussions/4">https://github.com/julesjacobs/ImmutableCollections/discussi...</a><p>It has similar "source generator" hallmarks like in OP's post, for example calling a generic constructor which is JITted to a deeply nested struct type.<p>It's (in my opinion) very hard to reason what the code is doing because it has that flavor of "writing code to generate source to generate code"<p>It's impressive. And i'm pretty sure it's only real hinderance, why it could not be adopted into the base library, is that the repo needs a phd holder to finish implementing the `IList` interface because deleting is really difficult and theoretical.</p>
]]></description><pubDate>Wed, 29 Jan 2025 04:58:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=42861723</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=42861723</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42861723</guid></item><item><title><![CDATA[New comment by NWoodsman in "USPTO petitioned to cancel Oracle's JavaScript trademark"]]></title><description><![CDATA[
<p>It needs to be WebScript of course!</p>
]]></description><pubDate>Tue, 26 Nov 2024 17:06:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=42247493</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=42247493</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42247493</guid></item><item><title><![CDATA[New comment by NWoodsman in "Show HN: Integer Map Data Structure"]]></title><description><![CDATA[
<p>Also will throw in to the mix, in C#:<p><a href="https://julesjacobs.com/2014/11/11/immutable-vectors-csharp.html" rel="nofollow">https://julesjacobs.com/2014/11/11/immutable-vectors-csharp....</a><p>His implementation uses buffers of capacity 32, generics, and bit shifting to do lookups.</p>
]]></description><pubDate>Thu, 25 Jan 2024 02:26:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=39125533</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=39125533</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39125533</guid></item><item><title><![CDATA[New comment by NWoodsman in "Show HN: The Sage Programming Language"]]></title><description><![CDATA[
<p><i>Sage is a programming language with a low level virtual machine based on a Turing tape. The sage virtual machine has a read/write head and a single register. The read/write head moves around the tape, and uses the register as an accumulator. All worldly input is done through a single instruction, and all worldly output is done through a single instruction. Functionality which cannot be achieved with any algorithm, such as using an operating system’s system calls to write to persistent memory, is also done through two instructions: one for sending values to the virtual machine’s foreign function interface, and one for receiving. The goal of the virtual machine is to allow algorithms to be expressed in the same time complexity as they would on x86, but with the smallest possible number of instructions. This allows sage code to be maximally portable: sage’s core instruction set could be implemented in hardware much easier than any modern architecture due to its very small pool of opcodes and their simplicity</i><p>This is an interesting snippet from your website, did this project intentionally start out as an attempt to design around a Turing machine? Or is it just safe to say that all languages executing on a stack with no heap are Turing machines?</p>
]]></description><pubDate>Thu, 04 Jan 2024 00:23:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=38861600</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=38861600</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38861600</guid></item><item><title><![CDATA[New comment by NWoodsman in "3D-printing can reproduce multi-million-dollar masterpieces, stroke by stroke"]]></title><description><![CDATA[
<p>Pretty cool tech. I helped my dad experiment with stitching his artwork but he eventually decided to rely on a Betterlight scan back for a large format camera.<p>The inventor of the Betterlight made limited number of the devices with an experimental large format CCD made by (Nikon? Canon?). He since passed away and there's a small community of owners desperate to keep their scanners operable, it's a near exinct tech. They allow for ~500 megapixel scans of artwork.<p>By placing studio lights above, shooting down, we capture the shadow and relief of the paint.</p>
]]></description><pubDate>Fri, 22 Dec 2023 23:48:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=38740104</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=38740104</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38740104</guid></item><item><title><![CDATA[New comment by NWoodsman in "Why do we convert structured data to PDFs?"]]></title><description><![CDATA[
<p>There are too many variables and edge cases to parse data. Dozens of text encodings, mixed with dozens of markup languages, mixed with millions of uniquely preserved legacy datasets, results in an exponential number of edge-case requirements that the world's data is currently stored in. And when you consider the high-power companies with financial investment in legacy data, as well as high-power companies protecting the proprietary rights and trademarks of their existing formats, the world has maximum incentive to use the status quo, a postscript-generated PDF which, due to it's legacy, happens to lack the structure you want.<p>On a more philosophical level, the PDF has structure which is probably the most generalized structure across all domains: paragraphs of text on a page. Consider that most people barely know how to search a text file for a given word, and a minuscule percent of those people who know how to query a SQL database. People simply do not have the time or resources to learn a separate domain (data structure design and interaction) apart from their own domain. In other words, there's very few people who understand or even have motivation to use tools that provide exponential return on their time (such as manipulating/filtering/working with structured data). Time passes uniformly, and you typically receive no reward other than more work for learning tools to improve your own workflow.<p>Software engineers have long noticed that we can successfully create "models", "view models", and "views" of data that achieve the separation of concerns that you are seeking. A PDF is nothing more than a "view" of data, which has passed through a professional who has created a "view model" of that data (he/she decided how best to organize the data on to the page), and then you read the document and "parse" the data with your intellect. There is a lot of expertise and professionalism embedded in crafting paragraphs (or other graphical representations) that you can't discredit.<p>There is very little software options to treat generalized, domain-specific data in this three-step manner.</p>
]]></description><pubDate>Wed, 18 Jan 2023 20:03:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=34432246</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=34432246</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34432246</guid></item><item><title><![CDATA[New comment by NWoodsman in "Why do we convert structured data to PDFs?"]]></title><description><![CDATA[
<p>You might like this thesis:<p><a href="http://www.bloechle.ch/jean-luc/pub/Bloechle_Thesis.pdf" rel="nofollow">http://www.bloechle.ch/jean-luc/pub/Bloechle_Thesis.pdf</a><p>I made a HN post on this here: <a href="https://news.ycombinator.com/item?id=33674525" rel="nofollow">https://news.ycombinator.com/item?id=33674525</a><p>Unfortunately I contacted the author via youtube and the work is proprietary, owned by the business he either created or sold-to.</p>
]]></description><pubDate>Wed, 18 Jan 2023 19:18:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=34431531</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=34431531</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34431531</guid></item><item><title><![CDATA[New comment by NWoodsman in "Overlapping markup"]]></title><description><![CDATA[
<p>Change my view: given any data storage medium, the smallest granularity of data must also be the most-child element of any markup language. Given the immense overhead of storing markups on a granular level, processing markup therefore must be a perpetual exercise in recursion.<p>I.e.<p><pre><code>      Poem->Verse->Line-> <char>

      Book->Page->Chapter->Paragraph->Sentence->Word-> <char>

      HTML->Body->Div->P-> <char>
</code></pre>
Therefore, any given letter (here as a <char> type) can retain a back reference of parents, so the <char> object retains a hashset of {Line,Word,P} parent type references representing three domains, but really needs to be a Dictionary of key values, the key being the domain name, the value being the parent name, so that would be:<p>Domain: Poetry, Value: Line<p>Domain: Book Object Model, Value: Word<p>Domain: HTML, Value: P Element<p>We could then ask any letter arbitrarily "what is your Font Style in your HTML context?" and it would be able to walk up the parent P which obtains its style from a CSS markup, and return that correctly. Or "What is your Poem's name in your Poetry context?" and it could recurse up to the Poem element to find it's Title.</p>
]]></description><pubDate>Mon, 12 Dec 2022 20:18:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=33959669</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=33959669</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33959669</guid></item><item><title><![CDATA[New comment by NWoodsman in "Show HN: Port of OpenAI's Whisper model in C/C++"]]></title><description><![CDATA[
<p>For those who want to try, here are the steps I took over about an hour to set it up:<p>1. Downloaded the Win10 artifact: <a href="https://github.com/ggerganov/whisper.cpp/actions/runs/3635525218" rel="nofollow">https://github.com/ggerganov/whisper.cpp/actions/runs/363552...</a> at the bottom of the page by logging in to Github. Extract and placed this folder in my F:\ drive renaming it to 'Whisper'.<p>2. Downloaded `ggml-large.bin` here: <a href="https://huggingface.co/datasets/ggerganov/whisper.cpp/tree/main" rel="nofollow">https://huggingface.co/datasets/ggerganov/whisper.cpp/tree/m...</a>. Within F:\Whisper, add a folder named 'models'. Move ggml-large.bin to the 'models' folder.<p>3. Downloaded ffmpeg, extracted the archive to F:\FFMpeg, and set the environment variable by going to (right click) This PC -> Properties -> Advanced system settings -> (Advanced tab) -> Environment Variables -> click Path -> Edit -> (paste in ffmpegs path i.e. F:\FFMpeg\)<p>4. Use PowerShell to run ffmpeg against an mp3 file, to convert it to WAV (which is the only format that works) i.e.:<p>ffmpeg -i F:\Rec\input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le F:\Output\output.wav<p>5. Open PowerShell again, `cd` to the Whisper folder, and ran this:<p>./main -m models/ggml-large.bin -f F:\Rec\output.wav</p>
]]></description><pubDate>Sat, 10 Dec 2022 22:44:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=33937809</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=33937809</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33937809</guid></item><item><title><![CDATA[New comment by NWoodsman in "Show HN: Port of OpenAI's Whisper model in C/C++"]]></title><description><![CDATA[
<p>Ok nevermind, figured it out, it requires login. Then the archive is at the very bottom of the page.</p>
]]></description><pubDate>Sat, 10 Dec 2022 22:26:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=33937592</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=33937592</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33937592</guid></item><item><title><![CDATA[New comment by NWoodsman in "Show HN: Port of OpenAI's Whisper model in C/C++"]]></title><description><![CDATA[
<p>Can you expand on your steps a bit more? I've never used Github Actions which seems like step 1. Not sure how to get an installer.</p>
]]></description><pubDate>Sat, 10 Dec 2022 21:27:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=33936992</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=33936992</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33936992</guid></item><item><title><![CDATA[New comment by NWoodsman in "Ask HN: Any good black Friday deals?"]]></title><description><![CDATA[
<p>Is it possible to do an API request to find greatest price differential compared to historical price of items with > 1000 reviews?</p>
]]></description><pubDate>Fri, 25 Nov 2022 17:11:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=33744519</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=33744519</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33744519</guid></item><item><title><![CDATA[New comment by NWoodsman in "Physical and Logical Structure Recognition of PDF Documents"]]></title><description><![CDATA[
<p>An interesting thesis from 2010 showing PDF document reconstruction via machine learning in order to rebuild a PDF with an object model.<p>Can anyone shed light on what the state of this art is currently?</p>
]]></description><pubDate>Sat, 19 Nov 2022 20:50:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=33674526</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=33674526</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33674526</guid></item><item><title><![CDATA[Physical and Logical Structure Recognition of PDF Documents]]></title><description><![CDATA[
<p>Article URL: <a href="http://www.bloechle.ch/jean-luc/pub/Bloechle_Thesis.pdf">http://www.bloechle.ch/jean-luc/pub/Bloechle_Thesis.pdf</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=33674525">https://news.ycombinator.com/item?id=33674525</a></p>
<p>Points: 4</p>
<p># Comments: 1</p>
]]></description><pubDate>Sat, 19 Nov 2022 20:50:27 +0000</pubDate><link>http://www.bloechle.ch/jean-luc/pub/Bloechle_Thesis.pdf</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=33674525</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33674525</guid></item><item><title><![CDATA[New comment by NWoodsman in "I am endlessly fascinated with content tagging systems"]]></title><description><![CDATA[
<p>Is your design open-source? Do you have an API? Would like to learn/help</p>
]]></description><pubDate>Fri, 21 Oct 2022 14:33:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=33288381</link><dc:creator>NWoodsman</dc:creator><comments>https://news.ycombinator.com/item?id=33288381</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33288381</guid></item></channel></rss>