<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: markkitti</title><link>https://news.ycombinator.com/user?id=markkitti</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 23 Apr 2026 05:59:56 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=markkitti" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by markkitti in "EFF is leaving X"]]></title><description><![CDATA[
<p>I had the exact same experience.</p>
]]></description><pubDate>Thu, 09 Apr 2026 18:04:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47707161</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=47707161</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47707161</guid></item><item><title><![CDATA[New comment by markkitti in "Copilot edited an ad into my PR"]]></title><description><![CDATA[
<p>Thank you for listening.</p>
]]></description><pubDate>Mon, 30 Mar 2026 13:07:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=47573811</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=47573811</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47573811</guid></item><item><title><![CDATA[New comment by markkitti in "Warn about PyPy being unmaintained"]]></title><description><![CDATA[
<p>Is Python dying? /s</p>
]]></description><pubDate>Sun, 08 Mar 2026 12:38:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=47296838</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=47296838</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47296838</guid></item><item><title><![CDATA[New comment by markkitti in "Julia: Performance Tips"]]></title><description><![CDATA[
<p>When I need to do serious math, I use Julia.</p>
]]></description><pubDate>Fri, 27 Feb 2026 07:30:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=47177641</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=47177641</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47177641</guid></item><item><title><![CDATA[New comment by markkitti in "femtolisp: A lightweight, robust, scheme-like Lisp implementation"]]></title><description><![CDATA[
<p><p><pre><code>    $ julia --lisp
    ;  _
    ; |_ _ _ |_ _ |  . _ _
    ; | (-||||_(_)|__|_)|_)
    ;-------------------|-----    ------------------------------    -----------------------
    > (+ 1 2)
    3</code></pre></p>
]]></description><pubDate>Mon, 23 Feb 2026 15:17:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47123392</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=47123392</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47123392</guid></item><item><title><![CDATA[New comment by markkitti in "Show HN: A physically-based GPU ray tracer written in Julia"]]></title><description><![CDATA[
<p>There is now a Julia plugin for JetBrains IDEs:
<a href="https://plugins.jetbrains.com/plugin/29356-flexible-julia" rel="nofollow">https://plugins.jetbrains.com/plugin/29356-flexible-julia</a></p>
]]></description><pubDate>Fri, 20 Feb 2026 14:52:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=47088732</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=47088732</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47088732</guid></item><item><title><![CDATA[New comment by markkitti in "Show HN: A physically-based GPU ray tracer written in Julia"]]></title><description><![CDATA[
<p>> it’s better to choose Rust for software engineering and Python for scripting.<p>Rust and Python work in some scenarios but not all. Unless the native components are all developed already, you will need a Rust programmer on your team. Rust expertise may be available to organizations of a sufficient size and a narrow focus. In my experience, this sort of arrangement requires a team with dedicated resources.<p>What I encountered more frequently are attempts to use Python as a full stack language. People are not just using it to implement the scripting frontend interface but also trying to implement the backend that does the heavy processing and the numerical computation. As a developer this is a terrible experience. I'm in the middle of replacing for loops in Python with vectorized numpy code but most of my efficiency gains are erased because I still need Python tuples in the end. Yesterday, I had to consider whether exceptions I throw in Cython code can be caught properly in Python.<p>Research software engineering is one field where you really do need a full stack language. That kind of software engineering requires high performance with limited resources. Julia with some initial patience does deliver a better developer experience in this scenario than the equivalent Python experience for me partly because I do not need to play vectorizarion games, and I can do everything in one integrated environment.<p>While, yes, interfaces and static tooling could be better, I do think the situation has gotten better over time. There are interface schemes available and additional static tooling is available.<p>Julia could deliver a better user experience though. Admittedly, the Python tooling to deploy complex solutions has significantly improved lately via tools such as pixi. Julia tools could deliver generic binary code with packages to ease the initial user experience. Advanced users could re-precompile packages to optimize.<p>The most promising success I have had with Julia is putting notebook interfaces in front of scientists or deploying web apps. My observation in this scenario is that Julia code can be presented as simple enough for a non-professional programmer to modify themselves. Previously, I have only seen that work well with MATLAB and Python. I have not seen this happen with Rust, and I do not expect that to change.<p>The other observation is that users appreciate the speed of Julia in two ways.
1. Advanced data visualizations are responsive to changes to data. In Python, I would typically need to precompute or prerender these visualizations.  With Julia, this can be done dynamically on the fly.
2. Julia user interfaces respond quickly to user input.<p>While I think Julia has plenty of room to improve, I do think those improvements are possible. I have also greatly appreciated how much Julia has improved in the past five years.</p>
]]></description><pubDate>Fri, 20 Feb 2026 14:50:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=47088721</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=47088721</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47088721</guid></item><item><title><![CDATA[New comment by markkitti in "Show HN: A physically-based GPU ray tracer written in Julia"]]></title><description><![CDATA[
<p>The 0 or 1 based indexing is actually a very superficial debate for people not very familiar with Julia. Note that 1-based indexing is a standard library feature not inherent to the Julia language itself.<p>The real indexing issue is whether arbitrary-base abstraction is too easily available.<p><pre><code>    # Correct, Vector is 1-based
    function mysum(v::Vector{T}) where {T <: Integer}
        s = zero(T)
        for i in 1:length(v)
            s += v[i]
        end
        return s
    end

    #Incorrect, AbstractVector is not necessarily one based
    function mysum(v::AbstractVector{T}) where {T <: Integer)
        s = zero(T)
        for i in 1:length(v)
            s += v[i]
        end
        return s
    end

    #Correct
    function mysum(v::AbstractVector{T}) where {T <: Integer)
        s = zero(T)
        for e in v
            s += e
        end
        return s
    end
</code></pre>
Basically, the concrete `Vector` type is 1-based. However, `AbstractVector` is could have an arbitrary first index. OffsetArrays.jl is a non-standard package that provides the ability to create arrays with indexes that can start at an arbitrary point including 0.</p>
]]></description><pubDate>Fri, 20 Feb 2026 03:08:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=47083171</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=47083171</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47083171</guid></item><item><title><![CDATA[New comment by markkitti in "I made an open-source juypter alternative"]]></title><description><![CDATA[
<p>Was there something you did not like about Marimo? It is also open source and can run locally.<p>I'm still confused about your motivations and how your solution differs.</p>
]]></description><pubDate>Tue, 10 Feb 2026 03:23:23 +0000</pubDate><link>https://news.ycombinator.com/item?id=46954966</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46954966</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46954966</guid></item><item><title><![CDATA[New comment by markkitti in "I made an open-source juypter alternative"]]></title><description><![CDATA[
<p>Jupyter is definitely open source:<p>BSD 3-Clause license<p>.<a href="https://jupyter.org/governance/projectlicense/" rel="nofollow">https://jupyter.org/governance/projectlicense/</a><p>I do not understand the motivation behind this project  or how it differs from Jupyter or Marimo, which are open source and run locally.</p>
]]></description><pubDate>Tue, 10 Feb 2026 03:13:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46954900</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46954900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46954900</guid></item><item><title><![CDATA[Anthropic partners with Allen Institute and HHMI for life sciences research]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.anthropic.com/news/anthropic-partners-with-allen-institute-and-howard-hughes-medical-institute">https://www.anthropic.com/news/anthropic-partners-with-allen-institute-and-howard-hughes-medical-institute</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46861407">https://news.ycombinator.com/item?id=46861407</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 02 Feb 2026 20:55:39 +0000</pubDate><link>https://www.anthropic.com/news/anthropic-partners-with-allen-institute-and-howard-hughes-medical-institute</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46861407</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46861407</guid></item><item><title><![CDATA[New comment by markkitti in "Go.sum is not a lockfile"]]></title><description><![CDATA[
<p>The pyproject.toml, package.json, and Cargo.toml are declarative project configuration files. While the Rust community refers to Cargo.toml as a manifest, it is not a comprehensive and detailed list of a build. That is the lock file.<p>While go.mod does not allow for explicit version ranges, the versions given are the minimum versions. In other words, the versions given are the lower bound of the compatibility range.<p>Go also strictly follows semantic versioning. Thus the implicit exclusive upper bound is the next major version. This assumes that all minor and patch releases are backwards compatibile and not breaking.<p>Dependency resolution in Go uses minimum version selection. That means the minimum requirements of all dependencies are evaluated and highest minimums are selected. In principle, this minimum version selection should be time invariant since the oldest versions of the compatible dependencies are used<p>While the minimum versions specified in go.mod are not necessarily the version of the dependencies used, they can be resolved to the versions used irrespective of time or later versions of dependencies being released.<p>Other languages do not use minimum version selection. Their package resolution often tries to retrieve the latest compatible dependency. Thus a lock file is needed.<p>Python packages in particular do not follow semantic versioning. Thus ranges are critical in a pyproject.toml.<p>In summary, the "manifests" files that the original author describes are configuration files. In some languages, or more accurately their package management  schemes, they can also be lock files, true manifests, due to version semantics. If those semantics are absent, then lock files are necessary for compatibility.</p>
]]></description><pubDate>Thu, 08 Jan 2026 11:56:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46540038</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46540038</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46540038</guid></item><item><title><![CDATA[New comment by markkitti in "How uv got so fast"]]></title><description><![CDATA[
<p>"overengineered" is not the term I would use to describe Python packaging. I would say it is "under-engineered". As in, "Why engineer a configuration file when you can just do it in code?".<p>This tendency towards what initially seems like the "simple" solution pervades the Python ecosystem and often requires complex engineering to work around later.</p>
]]></description><pubDate>Mon, 29 Dec 2025 16:32:22 +0000</pubDate><link>https://news.ycombinator.com/item?id=46422270</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46422270</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46422270</guid></item><item><title><![CDATA[New comment by markkitti in "How uv got so fast"]]></title><description><![CDATA[
<p>Summary: They fixed Python packaging by not having to run Python to resolve dependencies. Also, they used Rust.<p>Moral of the story: Use less Python. Use declarative configuration and other langauges instead.</p>
]]></description><pubDate>Sat, 27 Dec 2025 21:44:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=46405557</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46405557</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46405557</guid></item><item><title><![CDATA[New comment by markkitti in "In Defense of Matlab Code"]]></title><description><![CDATA[
<p>>> you can literally write python wrappers of Julia compiled libraries like you would c++ ones.
> Yes, please. What do I google? Why can't julia compile down to a module easily?<p>Try JuliaC for compiling shared libraries if that is what you mean by a "module": <a href="https://github.com/JuliaLang/JuliaC.jl" rel="nofollow">https://github.com/JuliaLang/JuliaC.jl</a><p>That said Julia's original design focused on just-in-time compilation rather than ahead-of-time compilation, so the AOT process is still rough.<p>> I don't understand why there's so much friction between julia and python. You should be able to trivially throw a numpy array at julia and get a result back.<p>You can throw a numpy array at Julia and get a result back. See <a href="https://juliapy.github.io/PythonCall.jl/stable/juliacall/" rel="nofollow">https://juliapy.github.io/PythonCall.jl/stable/juliacall/</a></p>
]]></description><pubDate>Sat, 20 Dec 2025 02:29:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=46333176</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46333176</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46333176</guid></item><item><title><![CDATA[New comment by markkitti in "In Defense of Matlab Code"]]></title><description><![CDATA[
<p>> I wish there was a way to specify the offset base with something like a C #define or compiler directive.<p>Julia has OffsetArrays.jl implementing arbitrary-base indexing: <a href="https://juliaarrays.github.io/OffsetArrays.jl/stable/" rel="nofollow">https://juliaarrays.github.io/OffsetArrays.jl/stable/</a><p>The experience with this has been quite mixed, creating a new surface for bugs to appear. Used well, it can be very convenient for the reasons you state.<p><pre><code>  julia> A = collect(1:5)
  5-element Vector{Int64}:
   1
   2
   3
   4
   5

  julia> B = OffsetArray(A, -1)
  5-element OffsetArray(::Vector{Int64}, 0:4) with eltype Int64 with indices 0:4:
   1
   2
   3
   4
   5

  julia> A[1]
  1

  julia> B[0]
  1</code></pre></p>
]]></description><pubDate>Wed, 17 Dec 2025 02:08:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46297383</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46297383</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46297383</guid></item><item><title><![CDATA[New comment by markkitti in "Python is not a great language for data science"]]></title><description><![CDATA[
<p>I tried this in Julia with TidierData.jl, and it looks quite similar to the R version.<p><pre><code>  using TidierData, DataFrames
  using PalmerPenguins: load

  penguins = load()

  @chain penguins begin
    DataFrame
    @drop_missing(body_mass_g)
    @group_by(species, island)
    @summarize(
      body_weight_mean =
        mean(body_mass_g),
      body_weight_std =
        std(body_mass_g)
    )
    show(_, allrows=true)
  end</code></pre></p>
]]></description><pubDate>Wed, 26 Nov 2025 10:03:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46055917</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46055917</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46055917</guid></item><item><title><![CDATA[New comment by markkitti in "Python is not a great language for data science"]]></title><description><![CDATA[
<p>> Unfortunately, there's no alternative, and I don't see R as much easier, there are plenty of ugly things as well there.<p>Have you tried Polars? It really discourages the inefficient creation of intermediate boolean arrays such as in the code that you are showing.<p>> There's Julia -- it has serious drawbacks, like slow cold start if you launch a Julia script from the shell, which makes it unsuitable for CLI workflows.<p>Julia has gotten significantly better over time with regard to startup, especially with regard to plotting. There is definitely a preference for REPL or notebook based development to spread the costs of compilation over many executions. Compilation is increasingly modular with package based precompilation as well as ahead-of-time compilation modes. I do appreciate that typical compilation is an implicit step making the workflow much more similar to a scripting language than a traditionally compiled language.<p>I also do appreciate that traditional ahead-of-time static compilation to binary executable is also available now for deployment.<p>After a day of development in R or Python, I usually start regretting that I am not using  Julia because I know yesterday's code could be executing much faster if I did. The question really becomes do I want to pay with time today or over the lifetime of the project.</p>
]]></description><pubDate>Wed, 26 Nov 2025 07:23:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46054996</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=46054996</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46054996</guid></item><item><title><![CDATA[New comment by markkitti in "Uv overtakes pip in CI"]]></title><description><![CDATA[
<p>It sounds like there are many Python users who have acclimated to the situation of needing three or more tools to work with Python and do not see the benefit or value of being able to do this all with one potentially faster tool.<p>While I understand that some have acclimated well to the prior situation and see no need to change their methods, is there really no objective self-awareness that perhaps having one fast tool over many tools may be objectively better?</p>
]]></description><pubDate>Tue, 14 Oct 2025 00:28:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=45574870</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=45574870</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45574870</guid></item><item><title><![CDATA[New comment by markkitti in "Uv overtakes pip in CI"]]></title><description><![CDATA[
<p>What tooling do you use?</p>
]]></description><pubDate>Tue, 14 Oct 2025 00:10:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=45574767</link><dc:creator>markkitti</dc:creator><comments>https://news.ycombinator.com/item?id=45574767</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45574767</guid></item></channel></rss>