<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: john_fushi</title><link>https://news.ycombinator.com/user?id=john_fushi</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 10 Apr 2026 11:11:05 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=john_fushi" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by john_fushi in "Memory Order in C++ (2022)"]]></title><description><![CDATA[
<p>Thanks for the explanation!<p>That's the part I missed : the first null check can be skipped if the memory is allocated but the constructor hasn't been executed.</p>
]]></description><pubDate>Wed, 23 Aug 2023 12:44:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=37234955</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=37234955</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37234955</guid></item><item><title><![CDATA[New comment by john_fushi in "Memory Order in C++ (2022)"]]></title><description><![CDATA[
<p>Doesn't the singleton example contain an error?<p>On one hand, the author says that instanciating the singleton and storing it is not safe because there is no synchronization, but on the other hand he says that null check before is safe because the mutex introduces synchronization.<p>My understanding would be that the mutex protects this whole section and that the atomic is not necessary at all in this case.<p>Please correct me if I'm wrong.</p>
]]></description><pubDate>Wed, 23 Aug 2023 12:06:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=37234612</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=37234612</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37234612</guid></item><item><title><![CDATA[New comment by john_fushi in "Mike Perham, Creator of Sidekiq: From Employment to Independence"]]></title><description><![CDATA[
<p>I guess Matsumoto should have charged for Ruby. I'm sure Mike Perham and Derek Kraan would have been glad to pay for that and that the Ruby community would be in a strong and healthy shape.</p>
]]></description><pubDate>Fri, 14 Apr 2023 12:55:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=35569022</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=35569022</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35569022</guid></item><item><title><![CDATA[New comment by john_fushi in "Best and worst decisions I’ve made"]]></title><description><![CDATA[
<p>(In Canada) The max my bank offers is 10 years, and it comes at a premium. The standard I see around me are 5 years.</p>
]]></description><pubDate>Fri, 27 Jan 2023 21:01:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=34551797</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=34551797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34551797</guid></item><item><title><![CDATA[New comment by john_fushi in "What we look for in a resume"]]></title><description><![CDATA[
<p>Let's say that, hypothetically, I lead a project for a very big customer that ended up being used to commit a (arguably) crime against humanity.<p>Should I put this on resume and would it be in poor taste to quantify the results?</p>
]]></description><pubDate>Wed, 25 Jan 2023 22:09:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=34524844</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=34524844</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34524844</guid></item><item><title><![CDATA[New comment by john_fushi in "Ask HN: Strategies for working with engineers that are too smart?"]]></title><description><![CDATA[
<p>> val x: Pair<String, Pair<String, String>><p>This just describes the structure. Structure without intent is useless.<p>Comments and out of code documentation both have the same problems : 
  - Blindspots
  - Rot<p>That is not to say they are useless, but they are rarely if ever sufficient.<p>In the end, the most complete and trustworthy source of truth for the code is the code itself.<p>Help others by having your code describe your intent. Using appropriate variable name and using appropriate types _help_ to keep displayed intent in sync with reality.<p>Another point to consider is that for the same intent the structure may need to change, to evolve. Proper typing can insulate the code from those changes.</p>
]]></description><pubDate>Thu, 12 Jan 2023 16:13:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=34355742</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=34355742</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34355742</guid></item><item><title><![CDATA[New comment by john_fushi in "Disney+ demands users’ age and gender so it can “deliver targeted advertising”"]]></title><description><![CDATA[
<p>Unless you live in Quebec - then google disabled this option to avoid complying with local children protection law.</p>
]]></description><pubDate>Tue, 15 Nov 2022 19:06:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=33613471</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=33613471</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=33613471</guid></item><item><title><![CDATA[New comment by john_fushi in "Why should I have written ZeroMQ in C, not C++ (2012)"]]></title><description><![CDATA[
<p>Which is also an issue in the author's example, no? So the point would be moot.</p>
]]></description><pubDate>Sat, 13 Aug 2022 17:09:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=32451765</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=32451765</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32451765</guid></item><item><title><![CDATA[New comment by john_fushi in "Don't ask to ask, just ask (2019)"]]></title><description><![CDATA[
<p>Hey! What's up?</p>
]]></description><pubDate>Fri, 11 Mar 2022 16:58:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=30642450</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=30642450</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=30642450</guid></item><item><title><![CDATA[New comment by john_fushi in "A generation of American men give up on college"]]></title><description><![CDATA[
<p>Telling someone to "man up" is a telltale sign of toxic masculinity.</p>
]]></description><pubDate>Tue, 07 Sep 2021 10:40:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=28443136</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=28443136</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28443136</guid></item><item><title><![CDATA[New comment by john_fushi in "Show HN: Embedded Ring Buffer C++98"]]></title><description><![CDATA[
<p>N.B. I'm writing my comments as I am reading your code. Please, don't take offense from my criticism, it is meant to be constructive, albeit concise.<p>/*
     * @brief                        Retrieve a continuous block of
     *                               valid buffered data.
     * @param num_reads_requested    How many reads are required.
     * @param skip                   Whether to increment the read position
     *                               automatically, (false for manual skip
     *                               control)
     * @return                       A block of items containing the maximum
     *                               number the buffer can provide at this time.
     <i>/
    Block<T> Read(unsigned int num_reads_requested)<p>Where is skip?<p>>        if (buffer_full)
>        {
>            /</i>
>             * Tried to append a value while the buffer is full.
>             <i>/
>            overrun_flag = true;
>        }
>        else
>        {
>            /</i>
>             * Buffer isn't full yet, write to the curr write position
>             * and increment it by 1.
>             <i>/
>            overrun_flag         = false;
>            data[write_position] = value;
>            write_position       = (write_position + 1U) % LENGTH;
>        }<p>You don't write in the case of an "overrun". Isn't that one of the most interesting property of a ringbuffer? It seems that your implementation is specific to your use case (buffering to sd cards?). I don't think your _current_ implementation is apropriate for a _general_ purpose ring buffer mostly because of api concerns. It may be interesting to emphasis this part in your doc.<p>>            reads_to_end             = LENGTH - read_position;
>            req_surpasses_buffer_end = num_reads_requested > reads_to_end;
>
>            if (req_surpasses_buffer_end)
>            {
>                /</i>
>                 * If the block requested exceeds the buffer end. Then
>                 * return a block that reaches the end and no more.
>                 <i>/
>                block.SetStart(&(data[read_position]));
>                block.SetLength(reads_to_end);
>            }
>            else
>            {
>                /</i>
>                 * If the block requested does not exceed 0
>                 * then return a block that reaches the number of reads required.
>                 */
>                block.SetStart(&(data[read_position]));
>                block.SetLength(num_reads_requested);
>            }<p>Maybe : 
>            reads_to_end             = LENGTH - read_position;
>            eff_reads                = (num_reads_requested > reads_to_end) ? reads_to_end : num_reads_requested;
>            //or : eff_reads         = std::min(num_reads_requested, reads_to_end)
>            block.SetStart(&(data[read_position]));
>            block.SetLength(eff_reads);<p>Still, I understand the need to be very explicit in an embedded context.<p>Same principle for ``if (!bridges_zero)`` (the ``else`` case)</p>
]]></description><pubDate>Mon, 07 Jun 2021 05:45:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=27419385</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=27419385</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27419385</guid></item><item><title><![CDATA[New comment by john_fushi in "Show HN: Embedded Ring Buffer C++98"]]></title><description><![CDATA[
<p>> memset(data, 0, LENGTH);<p>>// ...<p>> T data[LENGTH];<p>I'm not sure how important it is in practice, but I'm pretty sure you don't zero out the whole array for sizeof(T) > 1.<p>Anyhow, memsetting to 0 a complex type is... not something I'd recommend in most cases.</p>
]]></description><pubDate>Mon, 07 Jun 2021 05:09:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=27419188</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=27419188</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=27419188</guid></item><item><title><![CDATA[New comment by john_fushi in "Burnout is real – how to avoid it"]]></title><description><![CDATA[
<p>Just create child processes with a shared memory region. That's not multi-threading.</p>
]]></description><pubDate>Fri, 30 Aug 2019 16:33:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=20840126</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=20840126</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20840126</guid></item><item><title><![CDATA[New comment by john_fushi in "Insurance Company Says NotPetya Is an “Act of War”, Refuses to Pay"]]></title><description><![CDATA[
<p>I used to work for a car rental company. Actually, it was an insurance company that rented car. Cause 80% of their profits were on the insurance. The car rental part was just to bring more people to insurance part.</p>
]]></description><pubDate>Sat, 02 Feb 2019 18:40:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=19064757</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=19064757</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19064757</guid></item><item><title><![CDATA[New comment by john_fushi in "Silicon Valley Women Tell of VC’s Unwanted Advances"]]></title><description><![CDATA[
<p>You don't miss much really. The article is pretty light on information.</p>
]]></description><pubDate>Thu, 22 Jun 2017 18:22:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=14614218</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=14614218</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=14614218</guid></item><item><title><![CDATA[New comment by john_fushi in "The Canadian Housing Boom Fueled by China’s Billionaires"]]></title><description><![CDATA[
<p>It's really that speaking french in a predominantly french region shouldn't stop you from getting a job you have every competencies to achieve. That's why the law can go into absurd territory(e.g. having only english equipment cannot be a valid reason to refuse employment to a francophone).<p>But then again, most of the law only applies once your business reach a certain number of employees(30 I think)</p>
]]></description><pubDate>Wed, 03 Aug 2016 21:55:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=12221874</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=12221874</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=12221874</guid></item><item><title><![CDATA[New comment by john_fushi in "The SalesForce Outage: A Nail In The Coffin For SaaS?"]]></title><description><![CDATA[
<p>I think his point is that when comparing running SalesForce on the cloud for every users SalesForce has, vs running SalesForce locally for your users, there will a lot less challenge to keep it running locally than on the cloud.</p>
]]></description><pubDate>Wed, 01 Jun 2016 17:33:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=11816398</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=11816398</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=11816398</guid></item><item><title><![CDATA[New comment by john_fushi in "The Delightful Perversity of Québec's Catholic Swear Words"]]></title><description><![CDATA[
<p>And a more 'meta' song on the subject : <a href="https://www.youtube.com/watch?v=AgiNoNqYXMA" rel="nofollow">https://www.youtube.com/watch?v=AgiNoNqYXMA</a></p>
]]></description><pubDate>Sat, 28 May 2016 19:13:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=11792943</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=11792943</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=11792943</guid></item><item><title><![CDATA[New comment by john_fushi in "The Delightful Perversity of Québec's Catholic Swear Words"]]></title><description><![CDATA[
<p>Some songs to practice hearing the sacres : 
<a href="https://www.youtube.com/watch?v=jM05U9rHdwY" rel="nofollow">https://www.youtube.com/watch?v=jM05U9rHdwY</a> - Fourrer
<a href="https://www.youtube.com/watch?v=J2sClLoRFOM" rel="nofollow">https://www.youtube.com/watch?v=J2sClLoRFOM</a> - Enfant de Chienne
<a href="https://www.youtube.com/watch?v=daE5bOnYNNY" rel="nofollow">https://www.youtube.com/watch?v=daE5bOnYNNY</a> - god bless the topless
<a href="https://www.youtube.com/watch?v=M3Ol8wIYoPQ" rel="nofollow">https://www.youtube.com/watch?v=M3Ol8wIYoPQ</a> - la petite grenouille</p>
]]></description><pubDate>Sat, 28 May 2016 18:42:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=11792790</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=11792790</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=11792790</guid></item><item><title><![CDATA[New comment by john_fushi in "Feathers 2.0 – a minimalist real-time JavaScript framework"]]></title><description><![CDATA[
<p>It irks me too, but the term has been adopted in recent months, I think, by the javascript community. It is usually used to mean something akin to reactive.</p>
]]></description><pubDate>Thu, 17 Mar 2016 22:17:04 +0000</pubDate><link>https://news.ycombinator.com/item?id=11308066</link><dc:creator>john_fushi</dc:creator><comments>https://news.ycombinator.com/item?id=11308066</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=11308066</guid></item></channel></rss>