<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: t0mek</title><link>https://news.ycombinator.com/user?id=t0mek</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 10 Jul 2026 10:28:24 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=t0mek" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by t0mek in "Boris Cherny: TI-83 Plus Basic Programming Tutorial (2004)"]]></title><description><![CDATA[
<p>I like the "challenges" part at the end, especially the varying difficulty levels:<p>* A quadratic formula program, which outputs the number of roots and the x-intercepts upon the user inputting the values of A, B, and C.<p>* A fighting game, with health, a store, different enemies, weapons, armor, etc, with graphics and animation.</p>
]]></description><pubDate>Thu, 07 May 2026 14:07:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48049663</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=48049663</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48049663</guid></item><item><title><![CDATA[New comment by t0mek in "The Oxford Comma – Why and Why Not (2024)"]]></title><description><![CDATA[
<p>Only tangentially related (but hey, it's HN) - I'm so happy about the support/requirements for trailing commas in the modern language syntax:<p><pre><code>    x = [
      123,
      456,
      789,
    ];
</code></pre>
It makes editing such a list so much easier. Also, the commit diffs are cleaner (you don't need to add comma to the last element when appending a new one).</p>
]]></description><pubDate>Thu, 26 Mar 2026 19:28:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=47534604</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=47534604</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47534604</guid></item><item><title><![CDATA[Building a multiplayer Gameboy emulator with rollback netplay]]></title><description><![CDATA[
<p>Article URL: <a href="https://blog.rekawek.eu/2025/07/26/rollback-netplay-gb/">https://blog.rekawek.eu/2025/07/26/rollback-netplay-gb/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44848127">https://news.ycombinator.com/item?id=44848127</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 09 Aug 2025 16:59:14 +0000</pubDate><link>https://blog.rekawek.eu/2025/07/26/rollback-netplay-gb/</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=44848127</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44848127</guid></item><item><title><![CDATA[Show HN: Rollback netplay for Game Boy emulator]]></title><description><![CDATA[
<p>Article URL: <a href="https://blog.rekawek.eu/2025/07/26/rollback-netplay-gb/">https://blog.rekawek.eu/2025/07/26/rollback-netplay-gb/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=44716079">https://news.ycombinator.com/item?id=44716079</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 28 Jul 2025 21:46:42 +0000</pubDate><link>https://blog.rekawek.eu/2025/07/26/rollback-netplay-gb/</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=44716079</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44716079</guid></item><item><title><![CDATA[New comment by t0mek in "Writing a Game Boy Emulator in OCaml"]]></title><description><![CDATA[
<p>Not a tutorial per-se, but here are 2 slides describing how I've done it:<p><a href="https://www.slideshare.net/slideshow/emulating-game-boy-in-java/83928182#21" rel="nofollow">https://www.slideshare.net/slideshow/emulating-game-boy-in-j...</a><p>Essentially, there are 4 channels, each providing a number 0-15 on every tick. Emulator should mix them together (arithmetic average), scale up to 0-255 and feed  to the sound buffer, adjusting the tick rate (4.19MHz) to the sound output rate (e.g.: 22 kHz) - taking every ~190 value (4.19MHz / 22 kHz) is a good start.<p>Now the 0..15 value that should be produced by each channel depends on its characteristics, but it's well documented:<p><a href="https://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware" rel="nofollow">https://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware</a><p>Channels 1 and 2 produce square waves, so a bunch of low (0) and high (15) values, with optional volume envelope (gradually going down from 15 to 0 on the "high" part of the square) and frequency sweep (alternating 0s and 15s slower or faster).<p>Channel 3 allows an arbitrary waveform, read from the memory.<p>Channel 4 is a random noise, generated by the LSFR.<p>See SoundModeX.java for the reference:<p><a href="https://github.com/trekawek/coffee-gb/tree/master/src/main/java/eu/rekawek/coffeegb/sound">https://github.com/trekawek/coffee-gb/tree/master/src/main/j...</a></p>
]]></description><pubDate>Fri, 04 Jul 2025 13:53:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=44464587</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=44464587</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44464587</guid></item><item><title><![CDATA[New comment by t0mek in "Engineers Who Won't Commit"]]></title><description><![CDATA[
<p>Famous example from the pop-culture is Burr vs Hamilton:<p>> If you stand for nothing, Burr, what'll you fall for?</p>
]]></description><pubDate>Mon, 14 Apr 2025 13:08:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=43680879</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=43680879</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43680879</guid></item><item><title><![CDATA[New comment by t0mek in "Amiga 600: From the Amiga No One Wanted to Retro Favorite"]]></title><description><![CDATA[
<p>The article doesn't mention the recent development in Amiga extension cards - PiStorm is an easy (and affordable) way to max out the specs of any Amiga, A600 included.</p>
]]></description><pubDate>Sun, 16 Mar 2025 18:39:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=43381126</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=43381126</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43381126</guid></item><item><title><![CDATA[New comment by t0mek in "Amiga 600: From the Amiga No One Wanted to Retro Favorite"]]></title><description><![CDATA[
<p>I've always seen A600 more like a budget version of A1200 rather than a new variant of A500: better graphics chip, IDE port, PCMCIA and new look-and-feel of the Workbench 2.04 (at the first sight hardly distinguishable from the Workbench 3.0) gave a taste of something new.</p>
]]></description><pubDate>Sun, 16 Mar 2025 18:38:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=43381118</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=43381118</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43381118</guid></item><item><title><![CDATA[New comment by t0mek in "Show HN: ESP32 RC Cars"]]></title><description><![CDATA[
<p>12 years ago, when we already had Arduino but no ESP32 yet, I built this thing:<p><a href="https://newton-net-pl.translate.goog/2012/01/robot/?_x_tr_sl=pl&_x_tr_tl=en&_x_tr_hl=pl&_x_tr_pto=wapp" rel="nofollow">https://newton-net-pl.translate.goog/2012/01/robot/?_x_tr_sl...</a><p>It was made of an old HTC Magic phone, acting as camera+wifi transmitter, connected to Arduino via its serial port and level shifter, to control the servo and a RGB LED. I had a lot of fan with that, even if the connection wasn't really to stable.<p>Thanks for sharing, maybe it's time to revive the project with the next generation of the microcontroller.</p>
]]></description><pubDate>Sun, 02 Feb 2025 20:42:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=42911602</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=42911602</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42911602</guid></item><item><title><![CDATA[New comment by t0mek in "A liar who always lies says "All my hats are green.""]]></title><description><![CDATA[
<p>Yes, the liar have some hats. There are two ways how to conclude this:<p>1. If they don't have any hats, then any sentence about them would be truth.<p>2. The negation of the sentence, which must be truth, is "not all my hats are green". For this to be true, there must be some hats that are not green, so there must be some hats in general.</p>
]]></description><pubDate>Mon, 09 Dec 2024 18:40:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=42369058</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=42369058</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42369058</guid></item><item><title><![CDATA[New comment by t0mek in "Programming a computer for playing chess (1950) [pdf]"]]></title><description><![CDATA[
<p>Programming a chess program was an important challenge for the "first generation of hackers" working on the mainframe machines like TX-0 and PDP-1 in '50 and '60, as described in "Hackers: Heroes of the Computer Revolution" by Steven Levy. I highly recommend this book, I think a lot of people here can recognize their own passion and interests in the stories described there.<p>Also, there's interesting implementation for the ZX-81, created over 20 years later and fitting in just 1024 bytes: <a href="https://users.ox.ac.uk/~uzdm0006/scans/1kchess/" rel="nofollow">https://users.ox.ac.uk/~uzdm0006/scans/1kchess/</a></p>
]]></description><pubDate>Tue, 29 Oct 2024 11:30:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=41982785</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=41982785</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41982785</guid></item><item><title><![CDATA[New comment by t0mek in "Show HN: Satoshi9000 analog BTC key generator (mechanical)"]]></title><description><![CDATA[
<p>I love the slow pace of the video, including a few minutes presentation of all available programs. And indeed, there are programs to test dice and coin bias:<p>* <a href="https://youtu.be/bJiOia5PoGE?si=IEhbNJk0C0-7_2Nj&t=229" rel="nofollow">https://youtu.be/bJiOia5PoGE?si=IEhbNJk0C0-7_2Nj&t=229</a><p>* <a href="https://youtu.be/bJiOia5PoGE?si=3Se3lYFVAAkElx0w&t=245" rel="nofollow">https://youtu.be/bJiOia5PoGE?si=3Se3lYFVAAkElx0w&t=245</a></p>
]]></description><pubDate>Thu, 24 Oct 2024 13:49:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=41935478</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=41935478</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41935478</guid></item><item><title><![CDATA[New comment by t0mek in "Euclid's Proof that √2 is Irrational"]]></title><description><![CDATA[
<p>We can also assume that the p/q=√2 is already the simplest form of the fraction, since every fraction must have one, as in the first section of the article.<p>Then if we figure out that both p and q are even, it means that p/q can be simplified (by dividing p and q by 2), which contradicts the assumption about the simplest form - and we don't need to use the infinite descent.</p>
]]></description><pubDate>Thu, 22 Aug 2024 01:46:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=41315930</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=41315930</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41315930</guid></item><item><title><![CDATA[New comment by t0mek in "Python programming for Nintendo 8 bits (2018)"]]></title><description><![CDATA[
<p>Similar, but in Haskell: <a href="https://github.com/DataKinds/sixty-five-oh-two">https://github.com/DataKinds/sixty-five-oh-two</a><p>It's a DSL for writing 6502 assembly.</p>
]]></description><pubDate>Wed, 03 Jul 2024 14:34:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=40866308</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=40866308</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40866308</guid></item><item><title><![CDATA[New comment by t0mek in "How to copy a file from a 30-year-old laptop"]]></title><description><![CDATA[
<p>A few years ago, I spent a fair share of time trying to copy files from and to a Macintosh Plus. I decided to use a 100 MB ZIP drive (actually two of them, SCSI for the Mac Plus and USB for a modern computer) and later a serial port connection with terminal software [1].<p>Now there's a much better and cheaper option: BlueSCSI [2]. It's a SCSI HDD emulator that allows to mount .img files stored on a SD card as HDD disks. It also supports CD and network card emulation.<p>Once the files are copied on a such a virtual drive, they can be extracted on a modern machine using via some kind of HFS explorer or an emulator.<p>[1] <a href="https://blog.rekawek.eu/2016/12/08/mac-plus#hard-drive" rel="nofollow">https://blog.rekawek.eu/2016/12/08/mac-plus#hard-drive</a><p>[2] <a href="https://bluescsi.com/" rel="nofollow">https://bluescsi.com/</a></p>
]]></description><pubDate>Fri, 31 May 2024 16:28:37 +0000</pubDate><link>https://news.ycombinator.com/item?id=40537125</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=40537125</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40537125</guid></item><item><title><![CDATA[New comment by t0mek in "Building a USB to Mac ADB keyboard adapter"]]></title><description><![CDATA[
<p>And if you have even older Mac (128/512/Plus) and want to use an almost modern PS/2 keyboard with it, please check my <a href="https://github.com/trekawek/mac-plus-ps2">https://github.com/trekawek/mac-plus-ps2</a></p>
]]></description><pubDate>Wed, 31 Jan 2024 12:21:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=39202907</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=39202907</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39202907</guid></item><item><title><![CDATA[New comment by t0mek in "Show HN: Alzheimer's Buddy: Use Flashing Light and Sound at 40Hz"]]></title><description><![CDATA[
<p>Same with Dell P3223QE.</p>
]]></description><pubDate>Fri, 26 Jan 2024 14:29:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=39142967</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=39142967</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39142967</guid></item><item><title><![CDATA[New comment by t0mek in "Celebrating the first NES Tetris game crash"]]></title><description><![CDATA[
<p>I remember having similar effects after long sessions of Lemmings. I saw the damn rodents when I was closing my eyes in bed, but it didn’t disturb my sleep (I guess they acted as sheeps to count).</p>
]]></description><pubDate>Sat, 23 Dec 2023 16:38:32 +0000</pubDate><link>https://news.ycombinator.com/item?id=38745487</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=38745487</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38745487</guid></item><item><title><![CDATA[New comment by t0mek in "DOS on Dope: The last MVC web framework you'll ever need (2010)"]]></title><description><![CDATA[
<p>Trivia: this one was created by Adrian Zandberg, currently a Polish MP.</p>
]]></description><pubDate>Thu, 21 Dec 2023 19:59:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=38725986</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=38725986</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38725986</guid></item><item><title><![CDATA[New comment by t0mek in ""Useless Ruby sugar": Endless (one-line) methods"]]></title><description><![CDATA[
<p>This is similar to Kotlin single-expression functions, which are actually pretty useful:<p><pre><code>    fun double(x: Int) = x * 2
</code></pre>
<a href="https://kotlinlang.org/docs/functions.html#single-expression-functions" rel="nofollow noreferrer">https://kotlinlang.org/docs/functions.html#single-expression...</a><p>However, in Kotlin there's no single-line constraint, so it's possible to define an expression function e.g. with a long chain of collection methods: `filter().map().findFirst()...`</p>
]]></description><pubDate>Fri, 01 Dec 2023 16:30:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=38488604</link><dc:creator>t0mek</dc:creator><comments>https://news.ycombinator.com/item?id=38488604</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38488604</guid></item></channel></rss>