<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: martinsmit</title><link>https://news.ycombinator.com/user?id=martinsmit</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 30 Apr 2026 03:52:44 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=martinsmit" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by martinsmit in "FireDucks: Pandas but Faster"]]></title><description><![CDATA[
<p>Check out redframes[1] which provides a dplyr-like syntax and is fully interoperable with pandas.<p>[1]: <a href="https://github.com/maxhumber/redframes">https://github.com/maxhumber/redframes</a></p>
]]></description><pubDate>Wed, 20 Nov 2024 12:01:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=42193093</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=42193093</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42193093</guid></item><item><title><![CDATA[New comment by martinsmit in "A Personal History of APL (1982)"]]></title><description><![CDATA[
<p>Yes, but no one's made a reverse-mode autodiff system for it yet, so all of the linked examples have hand-written derivatives.</p>
]]></description><pubDate>Sun, 03 Dec 2023 10:24:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=38506066</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=38506066</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38506066</guid></item><item><title><![CDATA[New comment by martinsmit in "Portugal. The Man – Official Website Is a Google Sheets Document"]]></title><description><![CDATA[
<p>Similar to Hyukoh's[1], although it is actually multiple documents. P.TM seem to have gone all in, which is neat.<p>[1]: <a href="http://www.hyukoh.com/" rel="nofollow noreferrer">http://www.hyukoh.com/</a></p>
]]></description><pubDate>Sat, 04 Nov 2023 10:38:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=38139745</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=38139745</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38139745</guid></item><item><title><![CDATA[New comment by martinsmit in "Whenever I buy things I try to prioritize cost per use"]]></title><description><![CDATA[
<p>Ironically, sometimes calculating cost-per-use takes more brainpower than it's worth.<p>Sometimes I get a lot of enjoyment of buying a thing that I know I will love and considering all of the alternatives. Other times, I just defer to what worked in the past.</p>
]]></description><pubDate>Sun, 01 Oct 2023 20:32:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=37730377</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=37730377</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37730377</guid></item><item><title><![CDATA[New comment by martinsmit in "Function Composition in Programming Languages [video]"]]></title><description><![CDATA[
<p>Oh trust me, I am. The new code_report solution video on it convinced me to try it.</p>
]]></description><pubDate>Fri, 29 Sep 2023 15:57:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=37706110</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=37706110</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37706110</guid></item><item><title><![CDATA[New comment by martinsmit in "Function Composition in Programming Languages [video]"]]></title><description><![CDATA[
<p>The lack of an AD primitive is something I've discussed with the creator of BQN, coming from a JAX world I really miss it and feel that it's such an obvious feature, especially in a language which has a way to turn a tacit function into its AST[1], which has been used for symbolic differentiation[2]. Going from symbolic to reverse-mode AD is not much of a leap and users can define their own primitives with ReBQN[3].<p>I see what you mean by obfuscation, but I think that it's one of those things that feels really hard and stupid until you start being able to do it really quickly. When you learn a foreign language, you first read letters, then words, then sentences because you become accustomed to larger pieces of the language that you can predict what's coming next without reading it. A similar sort of thing happens with APL/BQN, you read letters (primitives), then you begin to recognise words (small, commonly used groups of primitives), then you see larger patterns which look like magical incantations to an inexperienced user.<p>These "words" are (typically) tacit phrases, many of them only existing due to specific primitives like swap. Once I used BQN to golf, I started wishing Julia had a swap for operators i.e.<p><pre><code>  -(3, 5) = -2
  swap(-)(3, 5) = 2
</code></pre>
I won't defend these languages to the death, but they are fun to puzzle your brain with in codegolf. Maybe Dex[4] will go somewhere too.<p>[1]: <a href="https://mlochbaum.github.io/BQN/spec/system.html#operation-properties" rel="nofollow noreferrer">https://mlochbaum.github.io/BQN/spec/system.html#operation-p...</a><p>[2]: <a href="https://saltysylvi.github.io/blog/bqn-macros.html" rel="nofollow noreferrer">https://saltysylvi.github.io/blog/bqn-macros.html</a><p>[3]: <a href="https://mlochbaum.github.io/BQN/doc/rebqn.html" rel="nofollow noreferrer">https://mlochbaum.github.io/BQN/doc/rebqn.html</a><p>[4]: <a href="https://github.com/google-research/dex-lang">https://github.com/google-research/dex-lang</a></p>
]]></description><pubDate>Thu, 28 Sep 2023 14:20:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=37689980</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=37689980</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37689980</guid></item><item><title><![CDATA[New comment by martinsmit in "Julia and Mojo Mandelbrot Benchmark"]]></title><description><![CDATA[
<p>Here's a meme that might help: <a href="https://www.reddit.com/r/LispMemes/comments/irkm5m/nobody_likes_semantical_chaotic/" rel="nofollow noreferrer">https://www.reddit.com/r/LispMemes/comments/irkm5m/nobody_li...</a></p>
]]></description><pubDate>Sat, 09 Sep 2023 10:21:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=37443835</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=37443835</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37443835</guid></item><item><title><![CDATA[New comment by martinsmit in "Makie, a modern and fast plotting library for Julia"]]></title><description><![CDATA[
<p>I switched permanently from Plots.jl to Makie.jl in order to have backend-agnostic fine-grained control. My publication plots look fantastic and the power given to users is really something. It also has a nicer API than Plots.jl once you get a hang of the figure, axis, plot distinction (plots live inside axes live inside figures) and what goes where.<p>Unfortunately, as with Plots, the documentation is lacking. The basic tutorial does a good job introducing the aspects of the package at a high level, but the fact that some parts of the documentation uses functions/structs that don't have docstrings in examples makes it very hard to build on the examples in these cases.<p>I get it, I <i>can</i> do anything with Makie, and most things that I want to do work amazingly. But my code for a single figure can get huge because it's all so low level. See, for example, the Legend documentation[1].<p>[1]: <a href="https://docs.makie.org/stable/examples/blocks/legend/index.html#multi-group_legends" rel="nofollow noreferrer">https://docs.makie.org/stable/examples/blocks/legend/index.h...</a></p>
]]></description><pubDate>Tue, 04 Jul 2023 16:18:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=36588726</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=36588726</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36588726</guid></item><item><title><![CDATA[New comment by martinsmit in "Pandas vs. Julia – cheat sheet and comparison"]]></title><description><![CDATA[
<p>> Tidier<p>I have not tried it. I like that the project makes broadcasting invisible, I dislike that it tries to completely replicate R's semantics and Tidyverse's syntax. Two examples: firstly, the tuples vs scalars thing doesn't seem very Julia to me. Secondly, I love that DF.jl has :column_name and variable_name as separate syntax. Tidier.jl drops this convention (from what I see in the readme).<p>> I'm not sure if someone is looking directly at the data.table parts<p>I believe there was some effort to make an i-j-by syntax in Julia but it fell through or stopped getting worked on. By this syntax I mean something like:<p><pre><code>  # An example of using i, j, and by
  @dt flights [
    carrier == "AA",
    (mean(:arr_delay), mean(:dep_delay)),
    by = (:origin, :dest, :month)]

  # An example of expressions in by
  @dt flights [_, nrows, by = (:dep_delay > 0, :arr_delay > 0)]
</code></pre>
The idea of ijby (as I understand it) is that it has a consistent structure: row selection/filtering comes before column selection/filtering, and is optionally followed by "by" and then other keyword arguments which augment the data that the core "ij" operations act upon.<p>data.table also has some nifty syntax like<p><pre><code>  data[, x := x + 1] # update in place
  data[, x := x/nrows(.SD), by = y] # .SD =  references data subset currently being worked on
</code></pre>
which make it more concise than dplyr.<p>The conciseness and structure that comes from data.table and its tendency to be much less code than comparable tidyverse transformations through some well-informed choices and reservations of syntax make it nicer for me to use.</p>
]]></description><pubDate>Thu, 18 May 2023 21:52:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=35994624</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35994624</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35994624</guid></item><item><title><![CDATA[New comment by martinsmit in "Pandas vs. Julia – cheat sheet and comparison"]]></title><description><![CDATA[
<p>I agree with your conclusion but want to add that switching <i>from</i> Julia may not make sense either.<p>According to these benchmarks: <a href="https://h2oai.github.io/db-benchmark/" rel="nofollow">https://h2oai.github.io/db-benchmark/</a>, DF.jl is the fastest library for some things, data.table for others, polars for others. Which is fastest depends on the query and whether it takes advantage of the features/properties of each.<p>For what it's worth, data.table is my favourite to use and I believe it has the nicest ergonomics of the three I spoke about.</p>
]]></description><pubDate>Wed, 17 May 2023 12:57:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=35974626</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35974626</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35974626</guid></item><item><title><![CDATA[New comment by martinsmit in "Combinatory Logic (2020)"]]></title><description><![CDATA[
<p>BQN[1] has higher order functions. Of the array languages I've used, it's by far my favourite. That said, I mostly solve small problems for fun in them.<p>[1] <a href="https://mlochbaum.github.io/BQN/index.html" rel="nofollow">https://mlochbaum.github.io/BQN/index.html</a></p>
]]></description><pubDate>Mon, 15 May 2023 11:59:17 +0000</pubDate><link>https://news.ycombinator.com/item?id=35946812</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35946812</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35946812</guid></item><item><title><![CDATA[New comment by martinsmit in "GPU vendor-agnostic fluid dynamics solver in Julia"]]></title><description><![CDATA[
<p>Context: Coming from a statistics background, I learned a bit of R, then a bit of Python for data analysis/science, then found Julia as the language I invested my time in. Over time I keep up with R and Python enough to know what's different since I learned them, but don't use them daily.<p>What I always tell people is the following:<p>If you are writing code using existing libraries then use whichever language has those languages. The NN stack(s) in Python are great, the statistical ML stack(s) in R are simple and include SOTA techniques.<p>If you are writing a package yourself, then I assume you know the core of the idea well enough to be able to write your code from the "top down" i.e. you're not experimenting with how to solve the problem at hand, you're implementing something concretely defined.<p>In this case, and tailored to your use, I would argue that Julia has more advantages than disadvantages, especially compared to R or Python. Here are a few comments:<p>1. Environments, dependencies, and distribution can all be handled by Pkg.jl, the built in package manager. There is no 3rd party tool involved, there is no disagreement in the community on which is better. This is my biggest pain point with Python.<p>2. Julia's type system both exists and is more powerful than that of Python (types or classes) and R (even Hadley's new S7(?) system). By powerful I mean generics/parametric types and overloading/dispatch built in. You can code without them, but certain problems are solved elegantly by them. Since working heavily with types in recent years, I find this to be my biggest pain point in R and I wouldn't want to write a package in R, although I like to use it as an end user.<p>3. New developments in scientific programming, programming ergonomics, hardware generic code (as in this post), and other cool features happen in Julia. New developments in statistics happen in R (and increasingly Julia), new developments funded by big companies happen in Python.<p>4. The Python and R interpreter start up faster than Julia. The biggest problem here is when you are redefining types, which is the only thing in Julia that can't currently be "hot reloaded" i.e. you need to restart Julia to redefine types.<p>5. Working with tabular data is (currently) far more ergonomic and effortless in R than Python and Julia.<p>6. Plotting is not a solved problem in Julia. Plots.jl is pretty easy and pretty powerful, Makie.jl is powerful but very manual. Time to first plot is longer than R or Python.<p>7. Julia has almost zero technical debt, R and Python have a lot. Backwards compatibility is guaranteed for Julia code written in >v1.0 and Pkg.jl handles package compatibility. If I send you code I wrote 4 years ago along with a Project.toml containing [compat] information then you could run the code with zero effort. (This is the theory, in practice Julia programmers are typically scientists first and coders second, ymmv.)<p>8. You can choose how low level you want your code to be. Prototyping can be done in Julia, rewriting to be faster can be done in Julia, production code can be done in Julia. Translating Python to C++ production might mean thinking about types for the first time in the dev process. In Julia, going to production just means making sure your code is type stable.</p>
]]></description><pubDate>Mon, 08 May 2023 16:44:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=35863801</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35863801</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35863801</guid></item><item><title><![CDATA[New comment by martinsmit in "UnicodePlots"]]></title><description><![CDATA[
<p>Nice to see a non-trivial package with 100% code coverage, can't remember the last time I saw that.</p>
]]></description><pubDate>Sun, 09 Apr 2023 21:28:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=35506648</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35506648</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35506648</guid></item><item><title><![CDATA[New comment by martinsmit in "Tidyverse 2.0.0"]]></title><description><![CDATA[
<p>Bogumil is a truly outstanding member of the community and DataFrames.jl is an impressive, versatile package.<p>From my perspective, however, DataFrames.jl's power is what makes it quite unergonomic for me. As an example, take the `args => transformations => result` syntax for doing pretty much anything in DataFrames. It versatile, but the lack of rank polymorphism in Julia i.e. broadcasting/mapping has to be explicit (which is usually a good thing given that type polymorphism is Julia's whole schtick) means that the transformation syntax feels cumbersome.<p>It's not that I want everything rowwise by default, an option provided by DataFramesMacros.jl, it's that I want things to be rank polymorphic when it makes sense. Base R got this right, hell S got this right, and so the Tidyverse inherited it and it makes the package so much more ergonomic than it would otherwise be.<p>I cannot overstate how impressive DataFrames.jl is, but I have to caveat this with "but I really try to avoid using it if possible". It's a shame, but I just think R's laissez-faire hackability, which in many cases results in spaghetti code, works really well in the tabular programming world where ergonomics are king and performance is easy.</p>
]]></description><pubDate>Sun, 09 Apr 2023 21:20:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=35506584</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35506584</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35506584</guid></item><item><title><![CDATA[New comment by martinsmit in "Tidyverse 2.0.0"]]></title><description><![CDATA[
<p>I think DF.jl works remarkably well as a "fits in RAM" dataframe backend, but I think it just lacks in usability and integratedness with the wider Julia ecosystem. Or rather, the wider ecosystem isn't as mature in key data analysis areas.<p>In particular, as you mention, plotting is one of the evolving parts of the ecosystem. Plots.jl is <i>fine</i>, Makie is powerful but very DIY, and AoG is slick but unwieldy. ggplot2 is far from perfect, but it works so well due to its maturity and integration with the rest of the Tidyverse.<p>In my ideal world, there would be a DataFrames.jl wrapper to provide nice (not just <i>nicer</i> like the two DFM.jl packages) syntax, and a powerful high-level plotting package (Makie is powerful but syntax is low level, Plots is mid on both) which is heavily integrated with the wrapper package.<p>Admittedly, I'm not a data scientist (anymore) so I don't follow the new developments in the dataviz scene much. If something like this exists then I would love to find it.<p>I wonder what my ideal syntax would look like anyway. Maybe something close to Tidyverse but with symbols as column names `:col_name` for ambiguity reasons.</p>
]]></description><pubDate>Sun, 09 Apr 2023 20:04:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=35505963</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35505963</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35505963</guid></item><item><title><![CDATA[New comment by martinsmit in "Animated Unknown Pleasures in 3 lines of K (2015)"]]></title><description><![CDATA[
<p>Although it's worth noting that the information is somewhat outdated. Notably, the most recent version of K is K9 (referred to through its proprietary implementation called Shakti) although K3 (through Kona), K4 (through Q by KX systems), K5 (through Ngnk), and K6 (through oK) are still used as every few versions is somewhat different from what came before, including being rewritten from scratch.</p>
]]></description><pubDate>Mon, 03 Apr 2023 13:42:19 +0000</pubDate><link>https://news.ycombinator.com/item?id=35423418</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35423418</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35423418</guid></item><item><title><![CDATA[New comment by martinsmit in "Counter-Strike 2 – Limited Test for select CS:GO players"]]></title><description><![CDATA[
<p>CS:GO already has this, it's called Danger Zone</p>
]]></description><pubDate>Wed, 22 Mar 2023 17:59:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=35264775</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35264775</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35264775</guid></item><item><title><![CDATA[New comment by martinsmit in "20M digits of pi in 1 minute using Julia"]]></title><description><![CDATA[
<p>The difference is that Julia makes it easy to insert these characters (\symbol) so programming with them becomes more natural.</p>
]]></description><pubDate>Sat, 04 Mar 2023 01:21:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=35017177</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=35017177</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=35017177</guid></item><item><title><![CDATA[New comment by martinsmit in "NetworkX 3.0 - create, manipulate, and study complex networks in Python"]]></title><description><![CDATA[
<p>Can someone comment on the user experience of NetworkX vs comparable packages like igraph? I've used Graphs.jl (formerly LightGraphs.jl) and I was unimpressed as it felt quite cumbersome and unintuitive.</p>
]]></description><pubDate>Wed, 11 Jan 2023 11:05:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=34337177</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=34337177</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34337177</guid></item><item><title><![CDATA[New comment by martinsmit in "Numba: A High Performance Python Compiler"]]></title><description><![CDATA[
<p>If you are doing array or vector-based work where the operations can be written as maps as opposed to for loops then JAX is king imo.</p>
]]></description><pubDate>Tue, 27 Dec 2022 16:53:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=34150470</link><dc:creator>martinsmit</dc:creator><comments>https://news.ycombinator.com/item?id=34150470</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=34150470</guid></item></channel></rss>