<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: mclehman</title><link>https://news.ycombinator.com/user?id=mclehman</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 28 Jul 2026 21:07:13 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mclehman" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mclehman in "Why Johnny Won't Upgrade"]]></title><description><![CDATA[
<p>I was just able to create a new google account with no phone number.</p>
]]></description><pubDate>Thu, 27 Aug 2020 19:39:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=24297747</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=24297747</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24297747</guid></item><item><title><![CDATA[New comment by mclehman in "How to delete all your files"]]></title><description><![CDATA[
<p>I have absolutely no clue what I've done to make it work this way (if anything), but in zsh running a command with !$ (last word from the previous command) I get the opportunity to edit the interpolated version first.</p>
]]></description><pubDate>Mon, 24 Aug 2020 01:58:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=24256926</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=24256926</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24256926</guid></item><item><title><![CDATA[New comment by mclehman in "Turning the Raspberry Pi 4 into a Mini Server"]]></title><description><![CDATA[
<p>I was able to swing $230 total for two x230s with the base i5 and ssds last fall/winter (actually three, but the third doesn't really count (arrived damaged, seller initiated a refund then ghosted, got a full refund from ebay)). If you're really lucky, you can find a computraced one for super cheap ($85 in my case) and then coreboot it.<p>That said, x220s and x230s seem to have gotten more expensive since then, I haven't seen any similarly good deals lately.</p>
]]></description><pubDate>Sat, 22 Aug 2020 06:41:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=24242201</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=24242201</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24242201</guid></item><item><title><![CDATA[New comment by mclehman in "Buffer overflow when pwfeedback is set in sudoers"]]></title><description><![CDATA[
<p>Reminding people that this is a viable threat model is why sudolph.in exists, albeit for the drive-by someone-left-their-laptop-unlocked case rather than regular local privilege escalation.<p>I should probably add a check for catching someone within the sudo timeout and give them a hard time if so.</p>
]]></description><pubDate>Tue, 04 Feb 2020 04:11:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=22232316</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=22232316</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22232316</guid></item><item><title><![CDATA[New comment by mclehman in "Luis von Ahn, co-founder and CEO of Duolingo"]]></title><description><![CDATA[
<p>I'm not sure exactly what you're after, but the Hiragana Pro/Katakana Pro apps (android only, I believe) have two practice modes: choice from three pronunciations as you mentioned, as well as typing romaji with no hints. The latter makes it abundantly clear which kana I'm shaky on.<p>They're also each a dollar to unlock voiced/combined readings and remove ads. My pihole did block the ads while I was just trying them out.</p>
]]></description><pubDate>Tue, 28 Jan 2020 18:43:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=22172653</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=22172653</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22172653</guid></item><item><title><![CDATA[New comment by mclehman in "Language Learning with Netflix extension"]]></title><description><![CDATA[
<p>I could see this as a reason to keep "you might also like ____" lists short, but for languages/subtitles I'm going to seek out one of the four languages that's even slightly useful for me to switch to.</p>
]]></description><pubDate>Mon, 13 Jan 2020 15:31:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=22035270</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=22035270</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22035270</guid></item><item><title><![CDATA[New comment by mclehman in "Undocumented Catalina file access change"]]></title><description><![CDATA[
<p>At least recently, HSTS failures could still be bypassed if you really wanted to (if, say, you made the bad choice of using the .dev tld for private domains). It's just completely undiscoverable for good reason.</p>
]]></description><pubDate>Thu, 19 Dec 2019 09:50:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=21833431</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=21833431</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21833431</guid></item><item><title><![CDATA[New comment by mclehman in "Story of Mattermost: Open-Sourced Competitor to Slack"]]></title><description><![CDATA[
<p>Team discovery could be a pain, but channel discovery within a team is pretty much everything I would expect it to be.</p>
]]></description><pubDate>Tue, 17 Dec 2019 22:34:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=21819682</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=21819682</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21819682</guid></item><item><title><![CDATA[New comment by mclehman in "Ask HN: How to easily transfer files between devices"]]></title><description><![CDATA[
<p>This is pretty much* how the Keybase filesystem works, with the added benefit of using more identities than just emails/usernames. Even if you only know someone's Twitter handle or reddit account, you can have this same workflow.<p>*Except for the "unless they don't want to receive files from you" part.</p>
]]></description><pubDate>Wed, 20 Nov 2019 18:11:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=21586581</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=21586581</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21586581</guid></item><item><title><![CDATA[New comment by mclehman in "Podman and Buildah for Docker Users"]]></title><description><![CDATA[
<p>I ended up writing a mostly-declarative tool for managing my mix of docker-composed and init-system-ed services at home when that got too unmanageable.</p>
]]></description><pubDate>Sun, 17 Nov 2019 21:42:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=21560224</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=21560224</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21560224</guid></item><item><title><![CDATA[New comment by mclehman in "The 80/24 Rule"]]></title><description><![CDATA[
<p>My monitor may be widescreen, but my editor typically isn't.</p>
]]></description><pubDate>Fri, 15 Nov 2019 05:47:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=21542550</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=21542550</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21542550</guid></item><item><title><![CDATA[New comment by mclehman in "Multiple ways to compute e in Raku"]]></title><description><![CDATA[
<p>Raku is not the direct successor to Perl, active Perl development continues.</p>
]]></description><pubDate>Tue, 12 Nov 2019 01:50:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=21510809</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=21510809</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21510809</guid></item><item><title><![CDATA[New comment by mclehman in "Understanding Docker Container Escapes"]]></title><description><![CDATA[
<p>On the other side of things, my favorite demo for people new to docker who aren't yet aware that sudoless docker ~~ root access is:<p><pre><code>    docker run -itv /:/host ubuntu chroot /host</code></pre></p>
]]></description><pubDate>Sat, 20 Jul 2019 21:47:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=20488585</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=20488585</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20488585</guid></item><item><title><![CDATA[New comment by mclehman in "You Only Need to Test with 5 Users (2000)"]]></title><description><![CDATA[
<p>I have a friend who does this for free. Every single thing I've ever shown him (both my software and that of others) breaks as soon as he gets his hands on it.<p>He's the sort to dig as far into the internals of things as he can and then start messing with it (he implemented partial function application for C, for example [1]).<p>My poor prototypes never stood a chance.<p>[1] <a href="https://github.com/zwimer/C-bind" rel="nofollow">https://github.com/zwimer/C-bind</a></p>
]]></description><pubDate>Mon, 15 Jul 2019 00:39:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=20437233</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=20437233</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20437233</guid></item><item><title><![CDATA[New comment by mclehman in "Apple kills the non-Touch Bar MacBook Pro"]]></title><description><![CDATA[
<p>Agreed. I don't use them often but I made sure to program discrete volume/media/brightness controls into my keyboard.</p>
]]></description><pubDate>Tue, 09 Jul 2019 17:28:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=20394358</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=20394358</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20394358</guid></item><item><title><![CDATA[New comment by mclehman in "Apple kills the non-Touch Bar MacBook Pro"]]></title><description><![CDATA[
<p>You could have both, I've never needed to hold down escape or tap control.<p>That said, I've had caps lock bound to backspace for years, so I'm not advocating for something I do myself.</p>
]]></description><pubDate>Tue, 09 Jul 2019 17:26:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=20394329</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=20394329</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20394329</guid></item><item><title><![CDATA[New comment by mclehman in "Myths about Perl 6"]]></title><description><![CDATA[
<p>Thanks, I'll definitely keep it in mind.<p>MAIN is probably what I should point to as P6's killer feature for things of this scope. I tend to get sidetracked by math/functional features when I demo things even though stuff like this is a bit more practical and likely to get traction.<p>I just got around to cleaning up that tmux wrapper I mentioned above (<a href="https://gitlab.com/0xFORDCOMMA/sessions" rel="nofollow">https://gitlab.com/0xFORDCOMMA/sessions</a>) and that might be worth writing something about. It's a miniscule project, but I think it highlights a lot of useful features.<p>One result of that clean-up that relates to this is the new usage output. It's still automatically generated [1], but adding purpose annotations to the multi-dispatch MAINs in `session` and using a P6 enum as a type constraint in the MAIN in `sessions` resulted in what I consider quite useful documentation pretty much for free.<p><pre><code>    λ | -> session --usage
    Usage:
      session -- Create or enter default session 'misc/dev'.
      session <category> <session> -- Create or enter session '<category>/<session>'.
      session <session> -- Search all categories for matching session, switch to result if unique.

    λ | -> sessions --usage
    Usage:
      sessions [--style=<Style> (boxed compact)] -- Default display style is boxed.
</code></pre>
The latter example is generated entirely from these two declarations:<p><pre><code>    enum Style <boxed compact>;

    #|(Default display style is boxed.)
    sub MAIN(Style :$style = boxed) { ... }
</code></pre>
[1] For anyone interested, you can have your cake and eat it too. Defining your own USAGE routine doesn't mean you have to give up the generated one. The generated output is available in the $*USAGE variable.</p>
]]></description><pubDate>Mon, 08 Jul 2019 23:11:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=20387634</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=20387634</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20387634</guid></item><item><title><![CDATA[New comment by mclehman in "Myths about Perl 6"]]></title><description><![CDATA[
<p>Thanks! I'll see what I can do about writing things up and posting them somewhere. My site is a mess at the moment (always has been), but maybe this will motivate me to do something about that.</p>
]]></description><pubDate>Mon, 08 Jul 2019 22:55:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=20387529</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=20387529</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20387529</guid></item><item><title><![CDATA[New comment by mclehman in "Myths about Perl 6"]]></title><description><![CDATA[
<p>I don't necessarily want to wade into the discussion on the tone of the article, but I do want to detail something I've used Perl 6 for that makes me really enjoy working with the language. I've noticed a trend in threads where P6 comes up: I rarely see people actually point to specific instances where P6 features have been helpful. This lack of examples certainly doesn't help push back against the idea that the language isn't usable or, indeed, useful with anything less than 100% of the spec implemented.<p>I use P6 for all of my small deployment scripts (as well as a number of small utilities I've written, like a tmux wrapper). It gets out of my way when I just need something quick and useful from the start. For example it's exceedingly easy to wrap other utilities because arguments to MAIN generate a command line interface automatically.<p>It also provides features that help me as I move from a useful-but-dirty prototype to a more maintainable script or piece of a more complex system. Gradual typing is a big part of this. I tend not to add types for most things, but it's very easy to use the P6 type system to watch my back when I do want that help. It's not as good at catching things before runtime as a hardcore static type system, but it manages to warn me "... will never succeed with declared signature ..." often enough.<p>I have a no-frills, no-auth file sharing site I deploy periodically to get a web front-end to share things with people (usually already on a VPN, sometimes just on a LAN). At the moment, I use a simple deploy script to do this manually, but I'm considering setting something up to automatically deploy it when connecting to a particular network. I almost definitely won't get that part right on the first try and would <i>really</i> rather not end up accidentally deploying a no-auth filesystem on my server's public IP address.<p>Using the P6 type system, I can easily define a subset of IPv4 addresses:<p><pre><code>    my @private-ranges = <10.0.0.0/8 172.16.0.0/12 192.168.0.0/16>;
    subset IPv4::Private of IPv4 where -> $ip { Net::Netmask.new(any @private-ranges).match($ip) };
</code></pre>
Then simply defining MAIN with a typed (and named, in this case, hence the colon) argument will handle all the checking at the type level.<p><pre><code>    sub MAIN(IPv4::Private :$ip) { ... }
</code></pre>
Now I won't be able to deploy this service on a public IP as long as I use this deploy script as a primitive in whatever eventual solution I end up with, and the automatically generated usage message even helps communicate why a call failed (provided you have descriptive type/parameter names).<p><pre><code>    λ |  ./deploy --ip=$(dig +short myip.opendns.com @resolver1.opendns.com) 
    Usage:
      ./deploy.p6 [--ip=<Private>]
    
    λ |  ./deploy --ip=10.0.0.2
    Deploy successful.</code></pre></p>
]]></description><pubDate>Sun, 07 Jul 2019 19:24:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=20377195</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=20377195</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20377195</guid></item><item><title><![CDATA[New comment by mclehman in "Is this Paypal experience customary?"]]></title><description><![CDATA[
<p>A similar thing happens to me when I fly. My boarding passes usually truncate the middle name field which in my case (typically) results in the name of a religious figure rather than an uncommon or obviously truncated name.<p>This has never been an actual issue (or even commented on), but another middle name discrepancy has. Back in high school, there were some issues with my name on my state ID not exactly matching the school's entry for me.</p>
]]></description><pubDate>Sat, 06 Jul 2019 07:57:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=20368549</link><dc:creator>mclehman</dc:creator><comments>https://news.ycombinator.com/item?id=20368549</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20368549</guid></item></channel></rss>