<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: mkhalil</title><link>https://news.ycombinator.com/user?id=mkhalil</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Fri, 17 Apr 2026 10:30:02 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=mkhalil" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by mkhalil in "Tax Wrapped 2025"]]></title><description><![CDATA[
<p>So we spent more on interest for the deficit than we spent on the doubling the combined spending on all of the following:<p>transportation
government operations
natural resources
community development
education & social services
agriculture
international affairs
science & space
and energy<p>...anxiety rises.</p>
]]></description><pubDate>Mon, 13 Apr 2026 21:17:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=47757938</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=47757938</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47757938</guid></item><item><title><![CDATA[New comment by mkhalil in "Pebble Watch software is now open source"]]></title><description><![CDATA[
<p>I'm sure its happened before, but this is the first time i finally get to see some sort of modern hardware in KiCad.<p>Pretty cool to see all 6 layers, paste layers, and adhesive layers as well.
I've always wondered how the cake was made and if big projects do/could use KiCad. 
Seems like a lot more work relative to those Single Layer PCBs on YouTube for things like emulators and custom PCBs. Glad I now know for sure, that I can't do this.</p>
]]></description><pubDate>Mon, 24 Nov 2025 20:44:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=46039064</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=46039064</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46039064</guid></item><item><title><![CDATA[New comment by mkhalil in "Shai-Hulud Returns: Over 300 NPM Packages Infected"]]></title><description><![CDATA[
<p>I use pnpm, but even so: thankfully naming things is hard, and <i>all</i> my env variable names are very_convuluted_non_standard_names for things lol.</p>
]]></description><pubDate>Mon, 24 Nov 2025 20:26:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46038831</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=46038831</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46038831</guid></item><item><title><![CDATA[New comment by mkhalil in "The last-ever penny will be minted today in Philadelphia"]]></title><description><![CDATA[
<p>That's why it should be rounded for everything. No pennies should probably mean that any final transaction totals are rounded to the nearest nickel. Whether they pay with cash, credit, debit, snap, gift card, etc...<p>IMO, rounding for cash purchases only sounds worse than keeping the pennies.</p>
]]></description><pubDate>Thu, 13 Nov 2025 04:48:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=45910788</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45910788</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45910788</guid></item><item><title><![CDATA[New comment by mkhalil in "AOL to be sold to Bending Spoons for $1.5B"]]></title><description><![CDATA[
<p>1.5 billion used to be an absolute ridiculous number to pay for a company not long ago. AOL? 1990s AOL?<p>But with 5 trillion dollar companies these days that are "worth" more than the entire GDP of Germany, why not. It's not real. It's just a number on a computer at this point.</p>
]]></description><pubDate>Thu, 30 Oct 2025 03:52:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=45756253</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45756253</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45756253</guid></item><item><title><![CDATA[New comment by mkhalil in "The Swift SDK for Android"]]></title><description><![CDATA[
<p>Huh? Did you read the link? Did you notice the ONE screenshot clearly shows the app has a material-ui look.<p>I'm going to say this because I think you might not know this, but also because I think many others might not have thought about this:<p>Almost always, a programming language is UI agnostic.
Swift SDK for Android means: You can now write Android Apps in Swift.
This doesn't magically include Apple's components / SwiftUI.
When you write code for a platform, specifically an SDK for an OS, all you do is expose that platform to that language.<p>So, as long the SDK/bindings are there, a new "Window" means whatever a the OS thinks is a Window. A Button is what is defined (or exposed/binded to) as a Button in Android.<p>Swift was sorta released for Windows: a new Window looks like a generic Win32 Window. The same one you would get if you used C, C++, Rust, etc..<p>All your examples are GREAT examples to explain how this works:
- Flutter has "Cupertino" to allow people to use Flutter to make Apple apps, and not have to learn names/methods/interface of the native Apple UI.
- React Native: A LOT of work was put in to make/bind Apple native objects to a React component. And the same for Android.<p>So again:<p>The Swift SDK for Android means you can write your Android apps in Swift. The same apps you might of wrote in Java or Kotlin, you can now use Swift. Meaning whatever it looked like in Java/Kotlin (using native api's), it would look like in Swift.<p>The SwiftUI, Apple's component library written/exposed to Swift, is something completely different.</p>
]]></description><pubDate>Sat, 25 Oct 2025 04:36:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=45701382</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45701382</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45701382</guid></item><item><title><![CDATA[New comment by mkhalil in "Windows Subsystem for FreeBSD"]]></title><description><![CDATA[
<p>It *is* confusing but in actuality, it kind of works: It's a Windows Subsystem - as in the Hypervisor/VM platform - to boot a Linux VM. And, more importantly IMO, Linux distro is using this Windows Subsystem for: booting, drivers, and networking (.e.g. the "/sys/wsl" folder, and whether the Window Subsystem will generate fstab, etc..)</p>
]]></description><pubDate>Sun, 12 Oct 2025 00:53:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=45554138</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45554138</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45554138</guid></item><item><title><![CDATA[New comment by mkhalil in "A 16.67 Millisecond Frame"]]></title><description><![CDATA[
<p>The "demo" is kind of bologna.<p>1) The code that is running is not what's presented; it executes (non-transpiled) vanilla JS.* Why not just show that?<p>2) Removing the box shadow massively makes the two closer in performance.<p>3) The page could just be one sentence: "Reflowing the layout of a page is slower than moving a single item." GPU un-related.<p>---<p>*Code that actually is running:<p>```js<p><pre><code>        , u = t => {
        h && clearTimeout(h),
        l.forEach( (e, s) => {
            const {top: o, left: n} = m[r[s]];
            t ? (e.style.transform = "translate(0px, 0px)",
            e.style.opacity = "0.7",
            e.offsetHeight,
            e.style.transform = `translate(${n}px, ${o}px)`) : e.style.transform = `translate(${n}px, ${o}px)`,
            e.style.top = "",
            e.style.left = ""
        }
        ),
        t && (h = window.setTimeout( () => {
            l.forEach(e => e.style.opacity = "1")
        }
        , 500))
    }
        , d = t => {
        y && clearTimeout(y),
        l.forEach( (e, s) => {
            const {top: o, left: n} = m[r[s]];
            e.style.top = `${o}px`,
            e.style.left = `${n}px`,
            e.style.transform = "",
            t && (e.style.boxShadow = "0 14px 28px rgba(239,68,68,0.45)") // REMOVING THIS LINE = BIG DIFFERENCE
        }
        ),
        t && (y = window.setTimeout( () => {
            l.forEach(e => {
                e.style.boxShadow = "none"
            }
            )
        }
        , 500))
    }
           </code></pre>
```</p>
]]></description><pubDate>Thu, 09 Oct 2025 23:52:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=45534217</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45534217</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45534217</guid></item><item><title><![CDATA[New comment by mkhalil in "TiVo exiting legacy DVR business"]]></title><description><![CDATA[
<p>Thank you.<p>Honestly, the "could of" is more of a "sometimes I write how I sound" thing, but anything else, is more of a middle of the night brain mush.<p>I actually re-wrote that bottom part at least twice because I had a lot to say, but didn't know how to say it concisely. As I was writing it, I kept having less and less confidence that any readers would have prior knowledge about I was writing about (ex: Plex, HDHomeRun, TiVo Edge), so I kept defining or explaining things in parenthesis and re-ordering the sentences; so at one point I just had to say, good enough, <i>click reply</i><p>I hate lengthy/wordy comments that coulda' () been just a couple of sentences, but I also love to explain things in a way that a wide range of people can comprehend, so it's a battle at times. (this reply is a good example...<i>reply</i>)</p>
]]></description><pubDate>Thu, 09 Oct 2025 23:15:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=45534008</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45534008</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45534008</guid></item><item><title><![CDATA[New comment by mkhalil in "TiVo exiting legacy DVR business"]]></title><description><![CDATA[
<p>Holy moly this thing has grown. I seen the Apple TV/Android app many many years ago and figured it was just another basic/forked IPTV/M3U viewer but looking at the website and "<a href="https://getchannels.com/releases/" rel="nofollow">https://getchannels.com/releases/</a>" -- what an app / features; can't imagine the codebase lol. Def. going to check out, thank you!</p>
]]></description><pubDate>Wed, 08 Oct 2025 21:46:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=45520977</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45520977</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45520977</guid></item><item><title><![CDATA[New comment by mkhalil in "TiVo exiting legacy DVR business"]]></title><description><![CDATA[
<p>I always felt TiVo really did a great job at identifying how important good UX and UI are for consumer products. Partially, the monopolies/cable companies knew/know they were able to get away with poor UI since consumers didn't really have a choice when it came to cable providers/cable boxes so it wasn't hard to beat them, but TiVo did actually do a good job.<p>I felt like they had consumer awareness at one point. Maybe if they went with there own premium streaming service, as oppose to only trying ad-based streaming services (like Pluto) OR continuing to try to make money charging people monthly for a subscription to use a device they first have to purchase.**<p>Instead they kept the old business model and went to more of a business-to-business service oriented offerings. Selling metadata, APIs, TV Guides, Car infotainment, all oddities IMO as most IPTV providers like to use turn key solutions.<p>I actually use the Tivo Stream 4K as my smart device. Works great, gives me 4K, can download Android TV apps, and is cheap $35.<p>Not a fan of ad-based TV (which is the Tivo+ thing, like Pluto, etc...), but I use it mostly for YouTube, Plex, etc.<p>--<p>*: My Plex server uses my HDHomerun for live tv; TiVo could have been both if it was more open. A TiVo competitor to Plex's Pass + Live TV service could of been there subscription revenue, and a TiVo competitor to HDHomeRun's devices could of replaced their DVR revenue. They could take the Tivo Edge, open it way up (as the HDHomeRun takes cable and give you actual m3u8's; this lets you decide where you view or record TV, and makes the device actually useful for commercial deployments as well (offices, restaurants, dorms, hotels, etc...). Pretty much: add features similar to Plex (i.e. combining my OTA/Cable recordings with my local media) + Plex's Live TV (Tivo already has the richest data and a sleeker guide) and combine the Tivo Edge CableCard and OTA in one device. This would appeal to many users, bring the hardware price down as it's one model, and provide them with both revenue streams like they are used to.</p>
]]></description><pubDate>Wed, 08 Oct 2025 05:17:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=45512336</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45512336</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45512336</guid></item><item><title><![CDATA[New comment by mkhalil in "Doing Rails Wrong"]]></title><description><![CDATA[
<p>>> "Complexity is not inherent to web development"<p>>> "Hotwire is sort of vanilla rails and it enables you to create very modern experiences with content live updating through web sockets and it is basically a one liner to setup."<p>My point was that web development isn't complex, but the core is simple; but modern web development is.<p>Your "Hotwire is sort of vanilla rails" statement is a perfect example.<p>What you claim to be simple, is a big list of tooling, web-sockets included, integrated together. The end result is using it might be a "one-liner", but that doesn't mean it's simple. And that's OKAY. Because simplicity should be the standard; and adding things, like sockets for live updates, should be something you explicitly enable (with modern web-apis, its definitely simpler than it used to be, but that doesn't mean its simple)</p>
]]></description><pubDate>Tue, 07 Oct 2025 18:58:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=45507278</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45507278</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45507278</guid></item><item><title><![CDATA[New comment by mkhalil in "Doing Rails Wrong"]]></title><description><![CDATA[
<p>This article has been re-written for over a decade.
The so-called "complexity" is just a list of tools that each solve a specific problem.<p>Tooling isn't the problem: The complexity is inherent to modern web development. You see similar "hidden" complexity in other frameworks like ASP.NET, and GUI desktop frameworks as well.<p>If you're using Rails as an API backend with React handling the frontend, it's almost a completely different application architecture than a traditional Rails monolith. So the list of tools (Vite, React, Prettier, etc..) is almost for a completely different problem (again, unless you use Rails for FE; if you want to use Rails for Frontend, use Rails for Frontend; not a fan of the mash-up at all.)<p>The real issue is learning methodology:
A lot of developers today start their careers with frameworks (point 4) before learning the fundamentals of the web (points 1-3).<p>HTML for markup.<p>CSS for styling.<p>Learning server-side logic (e.g.: <forms> can POST and can return a completely different page at the same URL) and databases for dynamic content.<p>Then, JavaScript for interactivity.<p>Embrace the tools: Each tool on the list (Vite, Tailwind, etc.) exists for a reason, and they're all necessary for a modern web application. 
Saying there are "too many" is an amateur take on the reality of the ecosystem.</p>
]]></description><pubDate>Tue, 07 Oct 2025 18:17:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=45506725</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45506725</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45506725</guid></item><item><title><![CDATA[New comment by mkhalil in "Slack has raised our charges by $195k per year"]]></title><description><![CDATA[
<p>Unpopular opinion: I think it's wild that ANY ORG would pay $200k for a chat app.
If I ever ran an org that needed a chat app and the costs came even close to $200k a year, I would rather hire an engineer, contract a designer, and create our own, or more likely, contribute/fork an open source project like Matrix; providing us with the ability to *really* integrate it into our company/tools - as oppose spending it on IRC+ for "good enough" integration. PLUS ... our data stays on under our control.</p>
]]></description><pubDate>Thu, 18 Sep 2025 04:48:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=45285523</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45285523</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45285523</guid></item><item><title><![CDATA[New comment by mkhalil in "Neovim Pack"]]></title><description><![CDATA[
<p>Good catch, you are correct.  I initially was going post the actual command for checking out a branch at a time:<p>> git checkout $(git rev-list -1 --before="YYYY-MM-DD" master)<p>but thought I found a shortcut - which turns out is not really one, and like you said: confusing.<p>I can't edit my post, but in any case; the point being: it would be nice if import statements are closer to "github.com/google/uuid@YYYY-MM-DD" or in this case you can pass a date to version: "YYYY-MM-DD" and the library would run the uglier nested command above to import the proper version.</p>
]]></description><pubDate>Thu, 04 Sep 2025 05:27:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=45123880</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45123880</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45123880</guid></item><item><title><![CDATA[New comment by mkhalil in "Neovim Pack"]]></title><description><![CDATA[
<p>Every time I see a something with the ability to import code from Git, especially if they allow specifying a branch (this pack even supports commit hashes), I wish they would document (and that more people would know) that they can "checkout" a branch at a specific time; because a lot of branches (vim plugins included) don't even bother with versioning.<p>ex: you can use this to checkout a repo @ a specific datetime:
> git checkout 'master@{2025-05-26 18:30:00}'<p>just doing my share to help people steer away from another leftPad disaster (or the xz apocalypse that almost was...)</p>
]]></description><pubDate>Thu, 04 Sep 2025 02:50:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=45122971</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45122971</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45122971</guid></item><item><title><![CDATA[New comment by mkhalil in "iOS 18.6.1 0-click RCE POC"]]></title><description><![CDATA[
<p>Seems like it was major enough that it was the lone patch[0] in all active Apple OS's:<p>macOS Ventura 13.7.8  |  macOS Sonoma 14.7.8  |  macOS Sequoia 15.6.1<p>iPadOS 17.7.10  |  iPadOS 18.6.2  |  iOS 18.6.2<p>Usually, its multiple CVE's in a security update.<p>Examples:<p>- <a href="https://support.apple.com/en-us/122375" rel="nofollow">https://support.apple.com/en-us/122375</a> (macOS Ventura 13.7.5)<p>- <a href="https://support.apple.com/en-us/122718" rel="nofollow">https://support.apple.com/en-us/122718</a> (macOS Ventura 13.7.6)<p>- <a href="https://support.apple.com/en-us/124151" rel="nofollow">https://support.apple.com/en-us/124151</a> (macOS Ventura 13.7.7)<p>---------------------------
References/Sources ---------------------------<p>[0] <a href="https://support.apple.com/en-us/124925" rel="nofollow">https://support.apple.com/en-us/124925</a> -> <a href="https://support.apple.com/en-us/124929" rel="nofollow">https://support.apple.com/en-us/124929</a>  |  (124925 -> 124929)<p><a href="https://support.apple.com/en-us/100100" rel="nofollow">https://support.apple.com/en-us/100100</a><p><a href="https://nvd.nist.gov/vuln/detail/CVE-2025-43300#vulnConfigurationsArea" rel="nofollow">https://nvd.nist.gov/vuln/detail/CVE-2025-43300#vulnConfigur...</a></p>
]]></description><pubDate>Tue, 26 Aug 2025 18:28:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=45030408</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=45030408</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45030408</guid></item><item><title><![CDATA[New comment by mkhalil in "I tried every todo app and ended up with a .txt file"]]></title><description><![CDATA[
<p>I have a lot of longer term notes that are just ideas (a.k.a "genius ideas") but written in "to-do" format. I found using different solutions for different notes is the best IMO.<p>MS OneNote* for all longer term to-dos, or writings I wish to archive.<p>Paper or notepad.exe for ephemeral to-dos.<p><i>: one large synced notebook with folders, sub-folders, and w/e nested levels it offers, but I use search anyway.*
*: this can totally be replicated with documents/files, folders, and a git repo. (and maybe some markdown editor)</i></p>
]]></description><pubDate>Mon, 11 Aug 2025 23:29:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=44870641</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=44870641</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44870641</guid></item><item><title><![CDATA[New comment by mkhalil in "Redis is open source again"]]></title><description><![CDATA[
<p>Most (all?<i>) open source licenses allow you to sell hosted clusters. They offered a hosted solution well before they changed its license. You can also fork it; but depending on the license, you might need to open-source any fork.<p></i>: I don't know of any open source license ones that don't allow someone to sell hosted cluster. Even AGPL, which is copyleft, allows it; so long as the hosted version is either: the same as the open-source version, or it's version is also open-sourced.</p>
]]></description><pubDate>Fri, 02 May 2025 02:46:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=43865660</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=43865660</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43865660</guid></item><item><title><![CDATA[New comment by mkhalil in "YAGRI: You are gonna read it"]]></title><description><![CDATA[
<p>Event-sourcing solves this. And with how cheap storage is, it should be more prevalent in the industry. IMO the biggest thing holding it back is that there isn't a framework that's plug-and-play (say like Next.js is to React) that provides people with that ability.<p>I've been working on one in Typescript (with eventual re-writes in other langs. like Rust and Go), but it's difficult even coming up with conventions.</p>
]]></description><pubDate>Wed, 23 Apr 2025 22:45:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=43777461</link><dc:creator>mkhalil</dc:creator><comments>https://news.ycombinator.com/item?id=43777461</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=43777461</guid></item></channel></rss>