The best Hacker News stories from Show from the past day
Latest posts:
Show HN: Mizu.js – Lightweight HTML templating library for any-side rendering
Hey HN,<p>I'd like to share a fun project I've been working on: mizu.js.<p>It's a js library that add functional attributes support into your html, designed to be a simple and flexible alternative to fully-fledged web frameworks (such as Vue, React, and Angular), while offering more capabilities than other lightweight options (like Alpine.js and htmx).<p>As it's written using modern ES features and due to its isomorphic nature, it can be run in both browsers and runtimes (Node, Deno, Bun) without any changes.
This makes it ideal for client-side and server-side rendering, as well as static site generation, whichever environment you prefer.<p>Just include the script in any web page (or backend) to get started.
You can template content, bind attributes, add interactivity, handle HTTP interactions, create custom components, and much more — all out of the box, without any configuration, transpilation steps, or builds.<p>I hope you'll find mizu.js as exciting and useful as I do and I'd love to get your feedback!
You can learn more about it at <a href="https://mizu.sh" rel="nofollow">https://mizu.sh</a>!<p>Online playground: <a href="https://mizu.sh/playground" rel="nofollow">https://mizu.sh/playground</a>
Custom builder: <a href="https://mizu.sh/build" rel="nofollow">https://mizu.sh/build</a>
Code coverage: <a href="https://mizu.sh/coverage" rel="nofollow">https://mizu.sh/coverage</a>
GitHub: <a href="https://github.com/lowlighter/mizu">https://github.com/lowlighter/mizu</a><p>## Motivation ##<p>Nowadays, setting up a complete environment and installing thousands of packages is often required just to create a simple "Hello World" page.
Yet, with the current ECMAScript standard, vanilla JS has never been more powerful.
It offers built-in custom HTML components, proxies for changes tracking, weak references for better memory management, and many new data structures and methods.<p>So why is web development still insanely complex?<p>mizu.js aims to avoid adding bloat on top of native features, and instead focus on providing convenience helpers.
It's basically "glue" around all these native features with added sugar, a recipe for a lightweight yet powerful utility.<p>All evaluated expressions are interpreted as vanilla JavaScript, and you add your instructions directly into your HTML.
So if you know already know about JS/HTML, then you're already 80% know of how to use mizu.js (add an extra 10% if you've used Vue, Alpine.js or htmx in the past as some syntax and concepts are inspired by it), the rest is basically just remembering the directive names.
The learning curve is that small.<p>Also, you may have heard of <a href="https://matcha.mizu.sh" rel="nofollow">https://matcha.mizu.sh</a>, a CSS stylesheet to instantly make your web page stylized.
Well, it's a great companion to mizu.js. With both of them, you can create MVPs for your projects super fast!
Show HN: Mizu.js – Lightweight HTML templating library for any-side rendering
Hey HN,<p>I'd like to share a fun project I've been working on: mizu.js.<p>It's a js library that add functional attributes support into your html, designed to be a simple and flexible alternative to fully-fledged web frameworks (such as Vue, React, and Angular), while offering more capabilities than other lightweight options (like Alpine.js and htmx).<p>As it's written using modern ES features and due to its isomorphic nature, it can be run in both browsers and runtimes (Node, Deno, Bun) without any changes.
This makes it ideal for client-side and server-side rendering, as well as static site generation, whichever environment you prefer.<p>Just include the script in any web page (or backend) to get started.
You can template content, bind attributes, add interactivity, handle HTTP interactions, create custom components, and much more — all out of the box, without any configuration, transpilation steps, or builds.<p>I hope you'll find mizu.js as exciting and useful as I do and I'd love to get your feedback!
You can learn more about it at <a href="https://mizu.sh" rel="nofollow">https://mizu.sh</a>!<p>Online playground: <a href="https://mizu.sh/playground" rel="nofollow">https://mizu.sh/playground</a>
Custom builder: <a href="https://mizu.sh/build" rel="nofollow">https://mizu.sh/build</a>
Code coverage: <a href="https://mizu.sh/coverage" rel="nofollow">https://mizu.sh/coverage</a>
GitHub: <a href="https://github.com/lowlighter/mizu">https://github.com/lowlighter/mizu</a><p>## Motivation ##<p>Nowadays, setting up a complete environment and installing thousands of packages is often required just to create a simple "Hello World" page.
Yet, with the current ECMAScript standard, vanilla JS has never been more powerful.
It offers built-in custom HTML components, proxies for changes tracking, weak references for better memory management, and many new data structures and methods.<p>So why is web development still insanely complex?<p>mizu.js aims to avoid adding bloat on top of native features, and instead focus on providing convenience helpers.
It's basically "glue" around all these native features with added sugar, a recipe for a lightweight yet powerful utility.<p>All evaluated expressions are interpreted as vanilla JavaScript, and you add your instructions directly into your HTML.
So if you know already know about JS/HTML, then you're already 80% know of how to use mizu.js (add an extra 10% if you've used Vue, Alpine.js or htmx in the past as some syntax and concepts are inspired by it), the rest is basically just remembering the directive names.
The learning curve is that small.<p>Also, you may have heard of <a href="https://matcha.mizu.sh" rel="nofollow">https://matcha.mizu.sh</a>, a CSS stylesheet to instantly make your web page stylized.
Well, it's a great companion to mizu.js. With both of them, you can create MVPs for your projects super fast!
Show HN: Mizu.js – Lightweight HTML templating library for any-side rendering
Hey HN,<p>I'd like to share a fun project I've been working on: mizu.js.<p>It's a js library that add functional attributes support into your html, designed to be a simple and flexible alternative to fully-fledged web frameworks (such as Vue, React, and Angular), while offering more capabilities than other lightweight options (like Alpine.js and htmx).<p>As it's written using modern ES features and due to its isomorphic nature, it can be run in both browsers and runtimes (Node, Deno, Bun) without any changes.
This makes it ideal for client-side and server-side rendering, as well as static site generation, whichever environment you prefer.<p>Just include the script in any web page (or backend) to get started.
You can template content, bind attributes, add interactivity, handle HTTP interactions, create custom components, and much more — all out of the box, without any configuration, transpilation steps, or builds.<p>I hope you'll find mizu.js as exciting and useful as I do and I'd love to get your feedback!
You can learn more about it at <a href="https://mizu.sh" rel="nofollow">https://mizu.sh</a>!<p>Online playground: <a href="https://mizu.sh/playground" rel="nofollow">https://mizu.sh/playground</a>
Custom builder: <a href="https://mizu.sh/build" rel="nofollow">https://mizu.sh/build</a>
Code coverage: <a href="https://mizu.sh/coverage" rel="nofollow">https://mizu.sh/coverage</a>
GitHub: <a href="https://github.com/lowlighter/mizu">https://github.com/lowlighter/mizu</a><p>## Motivation ##<p>Nowadays, setting up a complete environment and installing thousands of packages is often required just to create a simple "Hello World" page.
Yet, with the current ECMAScript standard, vanilla JS has never been more powerful.
It offers built-in custom HTML components, proxies for changes tracking, weak references for better memory management, and many new data structures and methods.<p>So why is web development still insanely complex?<p>mizu.js aims to avoid adding bloat on top of native features, and instead focus on providing convenience helpers.
It's basically "glue" around all these native features with added sugar, a recipe for a lightweight yet powerful utility.<p>All evaluated expressions are interpreted as vanilla JavaScript, and you add your instructions directly into your HTML.
So if you know already know about JS/HTML, then you're already 80% know of how to use mizu.js (add an extra 10% if you've used Vue, Alpine.js or htmx in the past as some syntax and concepts are inspired by it), the rest is basically just remembering the directive names.
The learning curve is that small.<p>Also, you may have heard of <a href="https://matcha.mizu.sh" rel="nofollow">https://matcha.mizu.sh</a>, a CSS stylesheet to instantly make your web page stylized.
Well, it's a great companion to mizu.js. With both of them, you can create MVPs for your projects super fast!
Show HN: Mizu.js – Lightweight HTML templating library for any-side rendering
Hey HN,<p>I'd like to share a fun project I've been working on: mizu.js.<p>It's a js library that add functional attributes support into your html, designed to be a simple and flexible alternative to fully-fledged web frameworks (such as Vue, React, and Angular), while offering more capabilities than other lightweight options (like Alpine.js and htmx).<p>As it's written using modern ES features and due to its isomorphic nature, it can be run in both browsers and runtimes (Node, Deno, Bun) without any changes.
This makes it ideal for client-side and server-side rendering, as well as static site generation, whichever environment you prefer.<p>Just include the script in any web page (or backend) to get started.
You can template content, bind attributes, add interactivity, handle HTTP interactions, create custom components, and much more — all out of the box, without any configuration, transpilation steps, or builds.<p>I hope you'll find mizu.js as exciting and useful as I do and I'd love to get your feedback!
You can learn more about it at <a href="https://mizu.sh" rel="nofollow">https://mizu.sh</a>!<p>Online playground: <a href="https://mizu.sh/playground" rel="nofollow">https://mizu.sh/playground</a>
Custom builder: <a href="https://mizu.sh/build" rel="nofollow">https://mizu.sh/build</a>
Code coverage: <a href="https://mizu.sh/coverage" rel="nofollow">https://mizu.sh/coverage</a>
GitHub: <a href="https://github.com/lowlighter/mizu">https://github.com/lowlighter/mizu</a><p>## Motivation ##<p>Nowadays, setting up a complete environment and installing thousands of packages is often required just to create a simple "Hello World" page.
Yet, with the current ECMAScript standard, vanilla JS has never been more powerful.
It offers built-in custom HTML components, proxies for changes tracking, weak references for better memory management, and many new data structures and methods.<p>So why is web development still insanely complex?<p>mizu.js aims to avoid adding bloat on top of native features, and instead focus on providing convenience helpers.
It's basically "glue" around all these native features with added sugar, a recipe for a lightweight yet powerful utility.<p>All evaluated expressions are interpreted as vanilla JavaScript, and you add your instructions directly into your HTML.
So if you know already know about JS/HTML, then you're already 80% know of how to use mizu.js (add an extra 10% if you've used Vue, Alpine.js or htmx in the past as some syntax and concepts are inspired by it), the rest is basically just remembering the directive names.
The learning curve is that small.<p>Also, you may have heard of <a href="https://matcha.mizu.sh" rel="nofollow">https://matcha.mizu.sh</a>, a CSS stylesheet to instantly make your web page stylized.
Well, it's a great companion to mizu.js. With both of them, you can create MVPs for your projects super fast!
Show HN: Broccoli – message queue for Rust applications, alternative to Celery
Show HN: I spent 4 years bootstrapping a financial planning tool to 30k MAUs
Hey everyone! I'm back with an update on this post [0].<p>Last year, I quit my corporate job and went full-time on ProjectionLab, the long-term financial planning app I've been building for the past 4 years, which some of you may recognize. The decision to go all-in felt like a huge leap. But it was the right call, and it's been a good year.<p>And without the HN community, it would not have happened. As I mentioned last time [0], the feedback on my original Show HN is THE reason I'm still here working on this. I'm really grateful for that. And I hope the way I’ve grown PL -- staying bootstrapped and focused on users -- resonates with the early supporters who helped to shape it.<p>For now I'm still the only engineer, burning the candle at both ends, but luckily I'm not feeling burnt out myself!<p>It's been a fun and memorable year:<p>- 6,139 commits, 221,484 insertions, 116,255 deletions<p>- Shared my story on the ChooseFI podcast [1] (one of the original sources of inspiration for this project)<p>- Started building a team (2 team members for customer success, 1 leading growth & marketing)<p>- Doubled our customer base<p>- Took no external funding, keeping our interests as aligned with users as possible<p>Okay, but what did I actually do since last time? [2]<p>Here's a quick cross-section:<p>- Compare mode upgrades to explore what-if scenarios overlaid on the same chart with visual deltas/diffs<p>- Launched ProjectionLab for Employers [3]: offer PL as a benefit, or get your employer to pick up the tab<p>- Major tech stack migrations: Vue 2 -> Vue 3, Vue CLI -> Vite, Vuetify 2 -> Vuetify 3, Vuex -> Pinia, Jest -> Vitest, Firebase Namespaced API -> Modular API, Vike + SSG for marketing site<p>- Advanced visualization features (1-click-plot any metric, interactive event icons in charts, etc)<p>- Improved tax estimation & tax analytics<p>- Simultaneous editing on multiple devices<p>- MFA support<p>- Rebuilt the help center, added more educational content and YouTube tutorial videos<p>- Made it possible to book a 1-on-1 session for educational/training purposes<p>- Converted ~65% of the codebase from JavaScript to TypeScript<p>- And more! [2]<p>I never saw myself as an entrepreneur/founder type. But apparently I've now spent 4 years turning a side project into a real business.<p>I couldn't have done it without the initial support from this community, and I'd love to hear what you think of the updates and where you'd like to see things go from here.<p>--Kyle<p>[0] <a href="https://news.ycombinator.com/item?id=36849502">https://news.ycombinator.com/item?id=36849502</a><p>[1] <a href="https://choosefi.com/podcast-episode/projectionlab-kyle-nolan-ep506" rel="nofollow">https://choosefi.com/podcast-episode/projectionlab-kyle-nola...</a><p>[2] <a href="https://projectionlab.com/changelog" rel="nofollow">https://projectionlab.com/changelog</a><p>[3] <a href="https://projectionlab.com/employers" rel="nofollow">https://projectionlab.com/employers</a>
Show HN: Musoq – Query Anything with SQL Syntax (Git, C#, CSV, Can DBC)
Hey, For those of you who don't know my little tool Musoq, I wanted to introduce it as a small tool that allows you to query with SQL-like syntax without any database.<p>It allows you to query various things from niche ones like CAN DBC files, weird ones like C# code, interesting ones with Git querying to regular stuff like CSV, TSV and various others.<p>I am quite a bit experimenting with various things so I'm hybridizing the engine with LLMs or doing other weird stuff that are more or less practical :-)<p>I wanted also to share some recent developments in this little project as I hope it might be interesting to some of you.<p>New Experimental Plugins:
* <i>Git Plugin (Beta)</i>: I've been working on Git repository querying - managed to test it on the EF Core repo (16k commits) and it seems to work okay
* <i>Roslyn Plugin (Beta)</i>: Added basic C# code analysis capabilities<p>For the very first time:
I've extended CROSS APPLY to use computed results as arguments! Now the operator can use values from the current row as inputs. Here's an example:<p><pre><code> SELECT
f.DirectoryName,
f.FileName
FROM #os.directories('/some/path', false) d
CROSS APPLY #os.files(d.FullName, true) f
WHERE d.Name IN ('Folder1', 'Folder2')
</code></pre>
After another pack of fixes I'm finally able to query multiple git repositories AT ONCE!<p><pre><code> with ProjectsToAnalyze as (
select
dir2.FullName as FullName
from #os.directories('D:\repos', false) dir1
cross apply #os.directories(dir1.FullName, false) dir2
where
dir2.Name = '.git'
)
select
c.Message,
c.Author,
c.CommittedWhen
from ProjectsToAnalyze p cross apply #git.repository(p.FullName) r
cross apply r.Commits c
where c.AuthorEmail = 'my-email@email.ok'
order by c.CommittedWhen desc
</code></pre>
Under the Hood:
- Added a <i>Buckets</i> feature for memory management (currently just testing it with the Roslyn plugin)<p>- Moved to <i>.NET 8</i><p>- Added <i>CROSS/OUTER APPLY</i> operators<p>- Made some improvements to error messages and runtime behavior<p>New piping features:
I've been experimenting with piping capabilities:
* <i>Image Analysis with LLMs</i>:<p><pre><code> ./Musoq.exe image encode "image.jpg" | ./Musoq.exe run query "select s.Shop, s.ProductName, s.Price from ..."
</code></pre>
* <i>Text Data Extraction</i>:<p><pre><code> Get-Content "ticket.txt" | ./Musoq.exe run query "select t.TicketNumber, t.CustomerName ... from #stdin.text('Ollama', 'llama3.1') t"
</code></pre>
* <i>Data Source Combination</i>:<p><pre><code> { docker image ls; ./Musoq.exe separator; docker container ls } | ./Musoq.exe run query "..."
</code></pre>
I'm working on comprehensive documentation:
I encourage you especially to look at section "Practical Examples and Applications" and "Data Sources" where you can look at all the tables the tool currently provides. <<a href="https://puchaczov.github.io/Musoq/" rel="nofollow">https://puchaczov.github.io/Musoq/</a>><p>Other Changes:<p>- Made some improvements to OS and Archive data sources (OS can now query metadata like EXIF)<p>- Added a few fields to CAN DBC plugin<p>- Command outputs can now be used as inputs for queries<p>I'm hoping to:<p>- Improve stability and add more tests<p>- Flesh out the documentation<p>- Work on package distribution (Scoop, Ubuntu packages)<p>- Share some examples of source code querying with Roslyn<p>Ideas for later:<p>- WHERE robust analysis and optimizations<p>- DISTINCT operator implementation<p>- PROTOBUF schema support<p>- Performance improvements<p>- Query parallelization<p>- Recursive CTEs<p>- Subqueries<p>I'd really appreciate any thoughts or feedback!<p>The documentation section where I write a short analysis of EF Core with git plugin: <<a href="https://puchaczov.github.io/Musoq/practical-examples-and-applications/analysis-of-the-efcore-repository.html" rel="nofollow">https://puchaczov.github.io/Musoq/practical-examples-and-app...</a>>
Show HN: Musoq – Query Anything with SQL Syntax (Git, C#, CSV, Can DBC)
Hey, For those of you who don't know my little tool Musoq, I wanted to introduce it as a small tool that allows you to query with SQL-like syntax without any database.<p>It allows you to query various things from niche ones like CAN DBC files, weird ones like C# code, interesting ones with Git querying to regular stuff like CSV, TSV and various others.<p>I am quite a bit experimenting with various things so I'm hybridizing the engine with LLMs or doing other weird stuff that are more or less practical :-)<p>I wanted also to share some recent developments in this little project as I hope it might be interesting to some of you.<p>New Experimental Plugins:
* <i>Git Plugin (Beta)</i>: I've been working on Git repository querying - managed to test it on the EF Core repo (16k commits) and it seems to work okay
* <i>Roslyn Plugin (Beta)</i>: Added basic C# code analysis capabilities<p>For the very first time:
I've extended CROSS APPLY to use computed results as arguments! Now the operator can use values from the current row as inputs. Here's an example:<p><pre><code> SELECT
f.DirectoryName,
f.FileName
FROM #os.directories('/some/path', false) d
CROSS APPLY #os.files(d.FullName, true) f
WHERE d.Name IN ('Folder1', 'Folder2')
</code></pre>
After another pack of fixes I'm finally able to query multiple git repositories AT ONCE!<p><pre><code> with ProjectsToAnalyze as (
select
dir2.FullName as FullName
from #os.directories('D:\repos', false) dir1
cross apply #os.directories(dir1.FullName, false) dir2
where
dir2.Name = '.git'
)
select
c.Message,
c.Author,
c.CommittedWhen
from ProjectsToAnalyze p cross apply #git.repository(p.FullName) r
cross apply r.Commits c
where c.AuthorEmail = 'my-email@email.ok'
order by c.CommittedWhen desc
</code></pre>
Under the Hood:
- Added a <i>Buckets</i> feature for memory management (currently just testing it with the Roslyn plugin)<p>- Moved to <i>.NET 8</i><p>- Added <i>CROSS/OUTER APPLY</i> operators<p>- Made some improvements to error messages and runtime behavior<p>New piping features:
I've been experimenting with piping capabilities:
* <i>Image Analysis with LLMs</i>:<p><pre><code> ./Musoq.exe image encode "image.jpg" | ./Musoq.exe run query "select s.Shop, s.ProductName, s.Price from ..."
</code></pre>
* <i>Text Data Extraction</i>:<p><pre><code> Get-Content "ticket.txt" | ./Musoq.exe run query "select t.TicketNumber, t.CustomerName ... from #stdin.text('Ollama', 'llama3.1') t"
</code></pre>
* <i>Data Source Combination</i>:<p><pre><code> { docker image ls; ./Musoq.exe separator; docker container ls } | ./Musoq.exe run query "..."
</code></pre>
I'm working on comprehensive documentation:
I encourage you especially to look at section "Practical Examples and Applications" and "Data Sources" where you can look at all the tables the tool currently provides. <<a href="https://puchaczov.github.io/Musoq/" rel="nofollow">https://puchaczov.github.io/Musoq/</a>><p>Other Changes:<p>- Made some improvements to OS and Archive data sources (OS can now query metadata like EXIF)<p>- Added a few fields to CAN DBC plugin<p>- Command outputs can now be used as inputs for queries<p>I'm hoping to:<p>- Improve stability and add more tests<p>- Flesh out the documentation<p>- Work on package distribution (Scoop, Ubuntu packages)<p>- Share some examples of source code querying with Roslyn<p>Ideas for later:<p>- WHERE robust analysis and optimizations<p>- DISTINCT operator implementation<p>- PROTOBUF schema support<p>- Performance improvements<p>- Query parallelization<p>- Recursive CTEs<p>- Subqueries<p>I'd really appreciate any thoughts or feedback!<p>The documentation section where I write a short analysis of EF Core with git plugin: <<a href="https://puchaczov.github.io/Musoq/practical-examples-and-applications/analysis-of-the-efcore-repository.html" rel="nofollow">https://puchaczov.github.io/Musoq/practical-examples-and-app...</a>>
Show HN: Musoq – Query Anything with SQL Syntax (Git, C#, CSV, Can DBC)
Hey, For those of you who don't know my little tool Musoq, I wanted to introduce it as a small tool that allows you to query with SQL-like syntax without any database.<p>It allows you to query various things from niche ones like CAN DBC files, weird ones like C# code, interesting ones with Git querying to regular stuff like CSV, TSV and various others.<p>I am quite a bit experimenting with various things so I'm hybridizing the engine with LLMs or doing other weird stuff that are more or less practical :-)<p>I wanted also to share some recent developments in this little project as I hope it might be interesting to some of you.<p>New Experimental Plugins:
* <i>Git Plugin (Beta)</i>: I've been working on Git repository querying - managed to test it on the EF Core repo (16k commits) and it seems to work okay
* <i>Roslyn Plugin (Beta)</i>: Added basic C# code analysis capabilities<p>For the very first time:
I've extended CROSS APPLY to use computed results as arguments! Now the operator can use values from the current row as inputs. Here's an example:<p><pre><code> SELECT
f.DirectoryName,
f.FileName
FROM #os.directories('/some/path', false) d
CROSS APPLY #os.files(d.FullName, true) f
WHERE d.Name IN ('Folder1', 'Folder2')
</code></pre>
After another pack of fixes I'm finally able to query multiple git repositories AT ONCE!<p><pre><code> with ProjectsToAnalyze as (
select
dir2.FullName as FullName
from #os.directories('D:\repos', false) dir1
cross apply #os.directories(dir1.FullName, false) dir2
where
dir2.Name = '.git'
)
select
c.Message,
c.Author,
c.CommittedWhen
from ProjectsToAnalyze p cross apply #git.repository(p.FullName) r
cross apply r.Commits c
where c.AuthorEmail = 'my-email@email.ok'
order by c.CommittedWhen desc
</code></pre>
Under the Hood:
- Added a <i>Buckets</i> feature for memory management (currently just testing it with the Roslyn plugin)<p>- Moved to <i>.NET 8</i><p>- Added <i>CROSS/OUTER APPLY</i> operators<p>- Made some improvements to error messages and runtime behavior<p>New piping features:
I've been experimenting with piping capabilities:
* <i>Image Analysis with LLMs</i>:<p><pre><code> ./Musoq.exe image encode "image.jpg" | ./Musoq.exe run query "select s.Shop, s.ProductName, s.Price from ..."
</code></pre>
* <i>Text Data Extraction</i>:<p><pre><code> Get-Content "ticket.txt" | ./Musoq.exe run query "select t.TicketNumber, t.CustomerName ... from #stdin.text('Ollama', 'llama3.1') t"
</code></pre>
* <i>Data Source Combination</i>:<p><pre><code> { docker image ls; ./Musoq.exe separator; docker container ls } | ./Musoq.exe run query "..."
</code></pre>
I'm working on comprehensive documentation:
I encourage you especially to look at section "Practical Examples and Applications" and "Data Sources" where you can look at all the tables the tool currently provides. <<a href="https://puchaczov.github.io/Musoq/" rel="nofollow">https://puchaczov.github.io/Musoq/</a>><p>Other Changes:<p>- Made some improvements to OS and Archive data sources (OS can now query metadata like EXIF)<p>- Added a few fields to CAN DBC plugin<p>- Command outputs can now be used as inputs for queries<p>I'm hoping to:<p>- Improve stability and add more tests<p>- Flesh out the documentation<p>- Work on package distribution (Scoop, Ubuntu packages)<p>- Share some examples of source code querying with Roslyn<p>Ideas for later:<p>- WHERE robust analysis and optimizations<p>- DISTINCT operator implementation<p>- PROTOBUF schema support<p>- Performance improvements<p>- Query parallelization<p>- Recursive CTEs<p>- Subqueries<p>I'd really appreciate any thoughts or feedback!<p>The documentation section where I write a short analysis of EF Core with git plugin: <<a href="https://puchaczov.github.io/Musoq/practical-examples-and-applications/analysis-of-the-efcore-repository.html" rel="nofollow">https://puchaczov.github.io/Musoq/practical-examples-and-app...</a>>
Show HN: K8s Cleaner – Roomba for Kubernetes
Hello HN community!<p>I'm excited to share K8s Cleaner, a tool designed to help you clean up your Kubernetes clusters.<p>As Kubernetes environments grow, they often accumulate unused resources, leading to confusion, waste, and clutter. K8s-cleaner simplifies the process of identifying and removing unnecessary components.<p>The tool scans your Kubernetes clusters for unused or orphaned resources—including pods, services, ingresses, and secrets—and removes them safely. You can fully customize which resources to scan and delete, maintaining complete control over what stays and what goes.<p>Getting Started:<p>Visit <a href="https://sveltos.projectsveltos.io/k8sCleaner.html" rel="nofollow">https://sveltos.projectsveltos.io/k8sCleaner.html</a> and click the "Getting Started" button to try K8s-cleaner.<p>Key Features:<p>- Easy to Use: No complex setup or configuration required—perfect for developers and operators alike
- Open Source: Modify the code to better fit your specific needs
- Community Driven: We welcome your feedback, feature ideas, and bug reports to help improve K8s-cleaner for everyone<p>I'm here to answer questions, address feedback, and discuss ideas for future improvements.<p>Looking forward to your thoughts! And make sure your all you kubernetes clusters are sparkling clean for the holidays. :-)<p>Simone
Show HN: K8s Cleaner – Roomba for Kubernetes
Hello HN community!<p>I'm excited to share K8s Cleaner, a tool designed to help you clean up your Kubernetes clusters.<p>As Kubernetes environments grow, they often accumulate unused resources, leading to confusion, waste, and clutter. K8s-cleaner simplifies the process of identifying and removing unnecessary components.<p>The tool scans your Kubernetes clusters for unused or orphaned resources—including pods, services, ingresses, and secrets—and removes them safely. You can fully customize which resources to scan and delete, maintaining complete control over what stays and what goes.<p>Getting Started:<p>Visit <a href="https://sveltos.projectsveltos.io/k8sCleaner.html" rel="nofollow">https://sveltos.projectsveltos.io/k8sCleaner.html</a> and click the "Getting Started" button to try K8s-cleaner.<p>Key Features:<p>- Easy to Use: No complex setup or configuration required—perfect for developers and operators alike
- Open Source: Modify the code to better fit your specific needs
- Community Driven: We welcome your feedback, feature ideas, and bug reports to help improve K8s-cleaner for everyone<p>I'm here to answer questions, address feedback, and discuss ideas for future improvements.<p>Looking forward to your thoughts! And make sure your all you kubernetes clusters are sparkling clean for the holidays. :-)<p>Simone
Show HN: Brisk – Cross-Platform C++ GUI Framework: Declarative, Reactive, Fast
Brisk is an open-source C++ GUI framework with a declarative approach, offering powerful data bindings, GPU-accelerated graphics, and dynamic widget management. It supports macOS, Linux, Windows, and simplifies UI creation with modern paradigms and CSS-like layouts.
Initially developed for a graphics-intensive project with a complex and dynamic GUI, the framework is currently under active development.
Show HN: Brisk – Cross-Platform C++ GUI Framework: Declarative, Reactive, Fast
Brisk is an open-source C++ GUI framework with a declarative approach, offering powerful data bindings, GPU-accelerated graphics, and dynamic widget management. It supports macOS, Linux, Windows, and simplifies UI creation with modern paradigms and CSS-like layouts.
Initially developed for a graphics-intensive project with a complex and dynamic GUI, the framework is currently under active development.
Show HN: ImPlot3D – A 3D Plotting Library for Dear ImGui
Show HN: ImPlot3D – A 3D Plotting Library for Dear ImGui
Show HN: Savvy – Capture and Share CLI Workflows in Seconds
Ever solved a tricky problem at the command line, only to struggle documenting it later? I built Savvy so you can capture and share your CLI solutions in seconds.<p>With a simple savvy record history command, you can:<p><pre><code> - Go back in time and cherry pick commands from your shell history
- Automatically expand aliases
- Redact sensitive information locally
- Convert hard-coded values into runtime placeholders
- Export locally to markdown files or create shareable team workflows using Savvy.
</code></pre>
Savvy never reads command outputs - you explicitly choose what to share. When running workflows, Savvy guides you through each step in a new sub-shell, handling all runtime values automatically.<p>Some FAQs<p>Q) How Does Savvy’s CLI work?<p><pre><code> Savvy’s CLI uses shell hooks (full support for bash and zsh. Fish support is in beta) to capture commands. Savvy’s CLI never looks at any command outputs or active keystrokes. Users have to explicitly opt-in (by typing savvy record/savvy record history) to capture commands every single time.
Once you select a particular workflow with savvy run, savvy starts a new sub-shell and walks you through each step of the way. No manual copy paste or editing commands to provide run time values.
Demo: https://getsavvy.so/demo
</code></pre>
Q) How does Savvy Auto-generate Workflows?<p><pre><code> Savvy takes your redacted commands as input and uses Llama 3.x hosted on Groq to create a first draft of your workflow.
</code></pre>
Q) What other LLM’s do you use?<p><pre><code> Savvy ask/explain are powered by GPT 4/GPT4o to convert natural language to shell commands and vice-versa.
</code></pre>
Try it out:<p><pre><code> GitHub: https://github.com/getsavvyinc/savvy-cli
Demo: https://getsavvy.so/demo
Docs: https://docs.getsavvy.so/guides/quick_start/
Example workflows: https://getsavvy.so/#examples
</code></pre>
Drop a comment below if you have any questions.
Show HN: Adventures in OCR
Hello HN!<p>In a recent "Ask HN: What are you working on?" thread, I mentioned I was working on OCRing a large book:<p><a href="https://news.ycombinator.com/item?id=41971614">https://news.ycombinator.com/item?id=41971614</a><p>The post generated some interest so I thought I would keep HN posted.<p>The book is Saint-Simon’s Memoirs -- an invaluable historical account of the French court under Louis XIV, full of wit, sharp observations, and of incredible literary value. I'm OCRing the edition of reference made between 1879-1930, that contains a lot of comments and footnotes: 45 volumes, ~27,000 pages.<p>Here's a link to a blog post that describes the techniques used so far (the project is still ongoing):<p><a href="https://blog.medusis.com/38_Adventures+in+OCR.html" rel="nofollow">https://blog.medusis.com/38_Adventures+in+OCR.html</a><p>But you may also directly access the result here:<p><a href="https://divers.medusis.net/boislisle/pub" rel="nofollow">https://divers.medusis.net/boislisle/pub</a><p>This web app (not optimized for mobile, sorry) solves a tricky problem of preloading images efficiently. In short: preloading the next image isn't enough, since browsers will repaint if an image is moved, or scaled. Or browsers won't paint at all if visibility is hidden or opacity is zero, and will paint only when those values change. On an average, slow machine, this takes visible time. But if an image is simply behind another element, it will be painted, and the removal of the covering element or changing the z-index will not trigger a repaint.<p>(Preloading is important because it lets one review results fast; if one has to wait 150-200 ms between images it's simply discouraging).<p>Would love to hear feedback; happy to answer any question!
Show HN: Adventures in OCR
Hello HN!<p>In a recent "Ask HN: What are you working on?" thread, I mentioned I was working on OCRing a large book:<p><a href="https://news.ycombinator.com/item?id=41971614">https://news.ycombinator.com/item?id=41971614</a><p>The post generated some interest so I thought I would keep HN posted.<p>The book is Saint-Simon’s Memoirs -- an invaluable historical account of the French court under Louis XIV, full of wit, sharp observations, and of incredible literary value. I'm OCRing the edition of reference made between 1879-1930, that contains a lot of comments and footnotes: 45 volumes, ~27,000 pages.<p>Here's a link to a blog post that describes the techniques used so far (the project is still ongoing):<p><a href="https://blog.medusis.com/38_Adventures+in+OCR.html" rel="nofollow">https://blog.medusis.com/38_Adventures+in+OCR.html</a><p>But you may also directly access the result here:<p><a href="https://divers.medusis.net/boislisle/pub" rel="nofollow">https://divers.medusis.net/boislisle/pub</a><p>This web app (not optimized for mobile, sorry) solves a tricky problem of preloading images efficiently. In short: preloading the next image isn't enough, since browsers will repaint if an image is moved, or scaled. Or browsers won't paint at all if visibility is hidden or opacity is zero, and will paint only when those values change. On an average, slow machine, this takes visible time. But if an image is simply behind another element, it will be painted, and the removal of the covering element or changing the z-index will not trigger a repaint.<p>(Preloading is important because it lets one review results fast; if one has to wait 150-200 ms between images it's simply discouraging).<p>Would love to hear feedback; happy to answer any question!
Show HN: Adventures in OCR
Hello HN!<p>In a recent "Ask HN: What are you working on?" thread, I mentioned I was working on OCRing a large book:<p><a href="https://news.ycombinator.com/item?id=41971614">https://news.ycombinator.com/item?id=41971614</a><p>The post generated some interest so I thought I would keep HN posted.<p>The book is Saint-Simon’s Memoirs -- an invaluable historical account of the French court under Louis XIV, full of wit, sharp observations, and of incredible literary value. I'm OCRing the edition of reference made between 1879-1930, that contains a lot of comments and footnotes: 45 volumes, ~27,000 pages.<p>Here's a link to a blog post that describes the techniques used so far (the project is still ongoing):<p><a href="https://blog.medusis.com/38_Adventures+in+OCR.html" rel="nofollow">https://blog.medusis.com/38_Adventures+in+OCR.html</a><p>But you may also directly access the result here:<p><a href="https://divers.medusis.net/boislisle/pub" rel="nofollow">https://divers.medusis.net/boislisle/pub</a><p>This web app (not optimized for mobile, sorry) solves a tricky problem of preloading images efficiently. In short: preloading the next image isn't enough, since browsers will repaint if an image is moved, or scaled. Or browsers won't paint at all if visibility is hidden or opacity is zero, and will paint only when those values change. On an average, slow machine, this takes visible time. But if an image is simply behind another element, it will be painted, and the removal of the covering element or changing the z-index will not trigger a repaint.<p>(Preloading is important because it lets one review results fast; if one has to wait 150-200 ms between images it's simply discouraging).<p>Would love to hear feedback; happy to answer any question!
Show HN: I built an open-source data pipeline tool in Go
Every data pipeline job I had to tackle required quite a few components to set up:<p>- One tool to ingest data<p>- Another one to transform it<p>- If you wanted to run Python, set up an orchestrator<p>- If you need to check the data, a data quality tool<p>Let alone this being hard to set up and taking time, it is also pretty high-maintenance. I had to do a lot of infra work, and while this being billable hours for me I didn’t enjoy the work at all. For some parts of it, there were nice solutions like dbt, but in the end for an end-to-end workflow, it didn’t work. That’s why I decided to build an end-to-end solution that could take care of data ingestion, transformation, and Python stuff. Initially, it was just for our own usage, but in the end, we thought this could be a useful tool for everyone.<p>In its core, Bruin is a data framework that consists of a CLI application written in Golang, and a VS Code extension that supports it with a local UI.<p>Bruin supports quite a few stuff:<p>- Data ingestion using ingestr (<a href="https://github.com/bruin-data/ingestr">https://github.com/bruin-data/ingestr</a>)<p>- Data transformation in SQL & Python, similar to dbt<p>- Python env management using uv<p>- Built-in data quality checks<p>- Secrets management<p>- Query validation & SQL parsing<p>- Built-in templates for common scenarios, e.g. Shopify, Notion, Gorgias, BigQuery, etc<p>This means that you can write end-to-end pipelines within the same framework and get it running with a single command. You can run it on your own computer, on GitHub Actions, or in an EC2 instance somewhere. Using the templates, you can also have ready-to-go pipelines with modeled data for your data warehouse in seconds.<p>It includes an open-source VS Code extension as well, which allows working with the data pipelines locally, in a more visual way. The resulting changes are all in code, which means everything is version-controlled regardless, it just adds a nice layer.<p>Bruin can run SQL, Python, and data ingestion workflows, as well as quality checks. For Python stuff, we use the awesome (and it really is awesome!) uv under the hood, install dependencies in an isolated environment, and install and manage the Python versions locally, all in a cross-platform way. Then in order to manage data uploads to the data warehouse, it uses dlt under the hood to upload the data to the destination. It also uses Arrow’s memory-mapped files to easily access the data between the processes before uploading them to the destination.<p>We went with Golang because of its speed and strong concurrency primitives, but more importantly, I knew Go better than the other languages available to me and I enjoy writing Go, so there’s also that.<p>We had a small pool of beta testers for quite some time and I am really excited to launch Bruin CLI to the rest of the world and get feedback from you all. I know it is not often to build data tooling in Go but I believe we found ourselves in a nice spot in terms of features, speed, and stability.<p><a href="https://github.com/bruin-data/bruin">https://github.com/bruin-data/bruin</a><p>I’d love to hear your feedback and learn more about how we can make data pipelines easier and better to work with, looking forward to your thoughts!<p>Best, Burak