The best Hacker News stories from Show from the past day
Latest posts:
Show HN: My affordable solution to costly workflow automation: Embed Workflow
Show HN: My affordable solution to costly workflow automation: Embed Workflow
Show HN: Freenet 2023, a drop-in decentralized replacement for the web
Show HN: Swap.js – a JavaScript micro-framework (HTML fragments over the wire)
Hi HN! I created this lib in the need of a simple and tiny framework to easily do AJAX-style navigation / replacement of fragments in the page, in a web application.<p>For people who don't want to use client-side-rendering and complex frameworks à la React, there are nowadays a few "HTML-over-the-wire" libraries, like HTMX, Unpoly or this super-tiny one Swap.js :)<p>One other key thing is that no external tool is needed: no bundler, no webpack, no TypeScript compiler, no minification needed. Just write HTML, JS (+ your preferred server-side language: PHP, Python, etc.) and it works.<p>The framework makes use of fetch (of course) but also MutationObserver API to be able to launch actions when parts of the DOM change.<p>Let me know what you think!
Show HN: YouTube Full Text Search – Search all of a channel from the commandline
yt-fts is a simple python script that uses yt-dlp to scrape all of a youtube channels subtitles and load them into an sqlite database that is searchable from the command line. It allows you to query a channel for specific key word or phrase and will generate time stamped youtube urls to the video containing the keyword.
Show HN: YouTube Full Text Search – Search all of a channel from the commandline
yt-fts is a simple python script that uses yt-dlp to scrape all of a youtube channels subtitles and load them into an sqlite database that is searchable from the command line. It allows you to query a channel for specific key word or phrase and will generate time stamped youtube urls to the video containing the keyword.
Show HN: YouTube Full Text Search – Search all of a channel from the commandline
yt-fts is a simple python script that uses yt-dlp to scrape all of a youtube channels subtitles and load them into an sqlite database that is searchable from the command line. It allows you to query a channel for specific key word or phrase and will generate time stamped youtube urls to the video containing the keyword.
Show HN: Localias, securely manage local devserver aliases
Hey HN, Localias is a new tool that you can use to securely manage your local development servers.<p>Use localias to securely proxy a local development server running on <a href="http://localhost:3000" rel="nofollow">http://localhost:3000</a> and access it at <a href="https://frontend.test" rel="nofollow">https://frontend.test</a>.<p>Localias is built on top of Caddy, so it's secure and performant. And because it's built on top of Caddy, it will automatically generate and install a custom root certificate, and automatically generate and sign certificates for each of your aliases.<p>This all works by editing your /etc/hosts file and generating a Caddy config, then running the proxy server for you either in the foreground or as a daemon. It's easier to deal with than running Caddy yourself.<p>Your whole team can share a configuration file in your git repo, making it easier to share URLs with each other while developing.<p>I hope you try it out and find it useful! The code is MIT-licensed and I'm happy to accept any feedback, feature requests, PRs, or comments.<p>Have a good weekend,
Peter
Show HN: Localias, securely manage local devserver aliases
Hey HN, Localias is a new tool that you can use to securely manage your local development servers.<p>Use localias to securely proxy a local development server running on <a href="http://localhost:3000" rel="nofollow">http://localhost:3000</a> and access it at <a href="https://frontend.test" rel="nofollow">https://frontend.test</a>.<p>Localias is built on top of Caddy, so it's secure and performant. And because it's built on top of Caddy, it will automatically generate and install a custom root certificate, and automatically generate and sign certificates for each of your aliases.<p>This all works by editing your /etc/hosts file and generating a Caddy config, then running the proxy server for you either in the foreground or as a daemon. It's easier to deal with than running Caddy yourself.<p>Your whole team can share a configuration file in your git repo, making it easier to share URLs with each other while developing.<p>I hope you try it out and find it useful! The code is MIT-licensed and I'm happy to accept any feedback, feature requests, PRs, or comments.<p>Have a good weekend,
Peter
Show HN: Do not chat with your pdfs alone. Let others join the fun too
Show HN: Weekle – a web app to learn how to calculate the day of the week
Mentally calculating the day-of-the-week for any date in history sounds like an impossible task for a normal person, but the algorithm is actually pretty simple to learn.<p>Although there are tutorials for this elsewhere online, and little quizzes available, there didn't seem to be anything well optimised with multiple practice modes etc.<p>I originally created a basic version of this just for myself, but a small group of friends and family found it interesting and gave suggestions such as the daily game.<p>Multi-lingual support is a bit rudimentary at the moment, it will only translate the month names and weekday names, not other text. If any translation mistakes are identified please let me know.<p>Other feedback is welcome too.
Show HN: Weekle – a web app to learn how to calculate the day of the week
Mentally calculating the day-of-the-week for any date in history sounds like an impossible task for a normal person, but the algorithm is actually pretty simple to learn.<p>Although there are tutorials for this elsewhere online, and little quizzes available, there didn't seem to be anything well optimised with multiple practice modes etc.<p>I originally created a basic version of this just for myself, but a small group of friends and family found it interesting and gave suggestions such as the daily game.<p>Multi-lingual support is a bit rudimentary at the moment, it will only translate the month names and weekday names, not other text. If any translation mistakes are identified please let me know.<p>Other feedback is welcome too.
Show HN: Subscriber-Only – Paid Subscriptions for Jekyll
I want to show you something I've been working on for the past couple of months. You can check it out at<p><a href="https://subscriber-only.com" rel="nofollow">https://subscriber-only.com</a><p>If you want to post paid written content on the web, you'll invariably reach out to Substack, Ghost or good old WordPress. If you're a fan of static site generators -- like I am -- you'll know that, by doing so, you'll lose the customizability and simplicity you get when using a tool like Jekyll.<p>Subscriber-Only is -- in my 100% impartial opinion -- a good alternative to using the mentioned platforms. You get to keep using Jekyll and, with a gem and a couple of lines of YAML, you'll enable subscriptions, subscriptions management, payment processing, access controls and all other needed machinery needed to have memberships on your site.<p>I'm pretty happy with the way it turned out. Do check it out and let me know what you think!
Show HN: Subscriber-Only – Paid Subscriptions for Jekyll
I want to show you something I've been working on for the past couple of months. You can check it out at<p><a href="https://subscriber-only.com" rel="nofollow">https://subscriber-only.com</a><p>If you want to post paid written content on the web, you'll invariably reach out to Substack, Ghost or good old WordPress. If you're a fan of static site generators -- like I am -- you'll know that, by doing so, you'll lose the customizability and simplicity you get when using a tool like Jekyll.<p>Subscriber-Only is -- in my 100% impartial opinion -- a good alternative to using the mentioned platforms. You get to keep using Jekyll and, with a gem and a couple of lines of YAML, you'll enable subscriptions, subscriptions management, payment processing, access controls and all other needed machinery needed to have memberships on your site.<p>I'm pretty happy with the way it turned out. Do check it out and let me know what you think!
Show HN: A nihilist all-hands meeting simulator
I was just digging through some old projects to find a link for a potential new employer and stumbled upon this reminder of how much I enjoyed middle-management office politics.
Show HN: Jesth – Next-level human-readable data serialization format
Hi HN! I'm Alex, a tech enthusiast. I'm excited to show you Jesth, a next-level human-readable data serialization format.<p>This project started out as a markup language for writing the docstrings of functions that would ultimately be consumed by a documentation generator. Basically the idea was to split a docstring into sections like Description and Parameters. Each section would consist of a header in square brackets and a body (lines of text between two headers).<p>Here's what a docstring for a sum function would look like:<p><pre><code> This function takes in two integers a and b and returns their sum.
[parameters]
- a: First integer
- b: Second integer
[return]
Sum of a and b
</code></pre>
The Description section in the example above is actually an anonymous section, i.e., a section with an empty header.<p>Meanwhile, I was thinking of a way to automate part of my dev workflow by storing in a file commands grouped into tasks such as project creation, build, testing, release, et cetera. Similarly with the markup language for my documentation generator, I would use square brackets to define the tasks. Thus, a task would consist of a header and a body which would be a list of commands to be executed sequentially.<p>I built this project and named it Backstage. Here is a hypothetical backstage.tasks file:<p><pre><code> [release]
& test
& generate_doc
& git_stuff
& build
# upload to PyPI
$ twine upload --skip-existing dist/*
[git_stuff]
$ git add .
$ git commit -m {message}
$ git push origin master
</code></pre>
The example above is illustrative only and would not work. It contains 2 sections "release" and "git_stuff". Running the "release" task from the command line is equivalent to sequentially executing the commands in the "release" section.<p>The documentation generator and the scripting language, despite the obvious similarity in their formats, did not share any parsing code. So, to stop repeating myself, I created a file format and its library named Jesth which stands for "Just Extract Sections Then Hack".<p>The library acts as an incomplete INI file parser that only hands the programmer the sections (as headers and their associated bodies which are lists of strings). No further interpretation of the data is done by the parser, allowing the programmer to unleash their creativity through useful hacks.<p>In its latest iteration, Jesth has matured and also includes a proper and extensively tested hack to convert a compatible section into a dictionary data structure, making Jesth my de facto preferred format for config files. I find Jesth more readable than TOML, YAML, and JSON.<p>Here, encoding a dictionary data structure in its own section with another section containing a prompt for ChatGPT:<p><pre><code> [prompt]
I want you to act as a detective story writer. I will provide you with
two dictionary data structures representing the profiles of two people.
Your goal is to write a thrilling neo-noir story. My first request is:
"guess who the killer and victim is from the profiles, then build a story
that includes every detail of the profiles".
[profile]
# This section can be converted into a dictionary data structure
name = 'Jane Doe'
birthday = 2000-12-23Z10:17:37Z
photo_jpg = (bin)
VGhpcyBpcyBub3QgYSBwaG90by4uLiBCdXQgdGhhbmsgeW91
IGZvciB5b3VyIGludGVsbGVjdHVhbCBjdXJpb3NpdHkgOyk=
---
books = (dict)
romance = (list)
'Happy Place'
'Romantic Comedy'
sci-fi = (list)
'Dune'
'Neuromancer'
epitaph = (text)
According to the law of conservation of energy,
no a bit of you is gone;
you are just less orderly.
---
[profile]
name = 'John Doe'
birthday = null
books = (list)
'American Predator'
'Mindhunter: Inside the FBI's Elite Serial Crime Unit'
</code></pre>
You can learn more by reading the project's README and playing with the demo.<p>Let me know what you think of this project.
Show HN: Jesth – Next-level human-readable data serialization format
Hi HN! I'm Alex, a tech enthusiast. I'm excited to show you Jesth, a next-level human-readable data serialization format.<p>This project started out as a markup language for writing the docstrings of functions that would ultimately be consumed by a documentation generator. Basically the idea was to split a docstring into sections like Description and Parameters. Each section would consist of a header in square brackets and a body (lines of text between two headers).<p>Here's what a docstring for a sum function would look like:<p><pre><code> This function takes in two integers a and b and returns their sum.
[parameters]
- a: First integer
- b: Second integer
[return]
Sum of a and b
</code></pre>
The Description section in the example above is actually an anonymous section, i.e., a section with an empty header.<p>Meanwhile, I was thinking of a way to automate part of my dev workflow by storing in a file commands grouped into tasks such as project creation, build, testing, release, et cetera. Similarly with the markup language for my documentation generator, I would use square brackets to define the tasks. Thus, a task would consist of a header and a body which would be a list of commands to be executed sequentially.<p>I built this project and named it Backstage. Here is a hypothetical backstage.tasks file:<p><pre><code> [release]
& test
& generate_doc
& git_stuff
& build
# upload to PyPI
$ twine upload --skip-existing dist/*
[git_stuff]
$ git add .
$ git commit -m {message}
$ git push origin master
</code></pre>
The example above is illustrative only and would not work. It contains 2 sections "release" and "git_stuff". Running the "release" task from the command line is equivalent to sequentially executing the commands in the "release" section.<p>The documentation generator and the scripting language, despite the obvious similarity in their formats, did not share any parsing code. So, to stop repeating myself, I created a file format and its library named Jesth which stands for "Just Extract Sections Then Hack".<p>The library acts as an incomplete INI file parser that only hands the programmer the sections (as headers and their associated bodies which are lists of strings). No further interpretation of the data is done by the parser, allowing the programmer to unleash their creativity through useful hacks.<p>In its latest iteration, Jesth has matured and also includes a proper and extensively tested hack to convert a compatible section into a dictionary data structure, making Jesth my de facto preferred format for config files. I find Jesth more readable than TOML, YAML, and JSON.<p>Here, encoding a dictionary data structure in its own section with another section containing a prompt for ChatGPT:<p><pre><code> [prompt]
I want you to act as a detective story writer. I will provide you with
two dictionary data structures representing the profiles of two people.
Your goal is to write a thrilling neo-noir story. My first request is:
"guess who the killer and victim is from the profiles, then build a story
that includes every detail of the profiles".
[profile]
# This section can be converted into a dictionary data structure
name = 'Jane Doe'
birthday = 2000-12-23Z10:17:37Z
photo_jpg = (bin)
VGhpcyBpcyBub3QgYSBwaG90by4uLiBCdXQgdGhhbmsgeW91
IGZvciB5b3VyIGludGVsbGVjdHVhbCBjdXJpb3NpdHkgOyk=
---
books = (dict)
romance = (list)
'Happy Place'
'Romantic Comedy'
sci-fi = (list)
'Dune'
'Neuromancer'
epitaph = (text)
According to the law of conservation of energy,
no a bit of you is gone;
you are just less orderly.
---
[profile]
name = 'John Doe'
birthday = null
books = (list)
'American Predator'
'Mindhunter: Inside the FBI's Elite Serial Crime Unit'
</code></pre>
You can learn more by reading the project's README and playing with the demo.<p>Let me know what you think of this project.
Show HN: Speeding up the code-test cycle for Java developers
Hello HN, I am Parth. In my experience, the current form of testing automation takes too long. To solve this, I am creating a developer tool to speed up the code-test cycle for Java developers. It has two main parts:<p>Direct Invoke - lets you call any Java function directly, without the need to execute the whole call hierarchy. (e.g. an HTTP endpoint) In my normal coding workflow, I use the “Evaluate Expression” feature inside IntelliJ IDE. I usually put a breakpoint somewhere in the code and after hitting the breakpoint by calling an HTTP api, let the execution remain paused while I explore and see the return values of functions. “Evaluate Expression” was quite useful in exploring new codebases and checking return values of my own functions as a sanity test. The direct invoke feature implements the same functionality without needing to hit a breakpoint. Now, I can just navigate to any function in the editor and execute it. The parameter values are input as JSON and deserialize to an object of the required class instances.<p>Atomic Run - lets you hot-reload the code changes and highlights the difference in the return values of the changed function before and after the hot-reload. I feel Atomic Run has the potential of replacing unit test cases, but there is a long way to go. I am thinking of implementing<p><pre><code> - Option for mocking dependency calls: We want to give the developer more control over the testing environment by allowing them to mock downstream dependency calls.
- Customizing assertions: Not all differences in return values indicate breaking changes. Assertions should be flexible to accommodate non-breaking changes.
- Workflow to save this data to a file (thinking something like JSON based fixtures): making it easier to organize and reuse test data.
</code></pre>
This plugin is still in the early stages, so we'd appreciate your help in ironing out any bugs you come across. Get in touch with me on my discord channel.<p>To try it out, install Unlogged from the IntelliJ Marketplace and start your java application using the java agent (the plugin has instructions to download)<p>Link to try the plugin: <a href="https://plugins.jetbrains.com/plugin/18529-unlogged" rel="nofollow">https://plugins.jetbrains.com/plugin/18529-unlogged</a>
Show HN: Speeding up the code-test cycle for Java developers
Hello HN, I am Parth. In my experience, the current form of testing automation takes too long. To solve this, I am creating a developer tool to speed up the code-test cycle for Java developers. It has two main parts:<p>Direct Invoke - lets you call any Java function directly, without the need to execute the whole call hierarchy. (e.g. an HTTP endpoint) In my normal coding workflow, I use the “Evaluate Expression” feature inside IntelliJ IDE. I usually put a breakpoint somewhere in the code and after hitting the breakpoint by calling an HTTP api, let the execution remain paused while I explore and see the return values of functions. “Evaluate Expression” was quite useful in exploring new codebases and checking return values of my own functions as a sanity test. The direct invoke feature implements the same functionality without needing to hit a breakpoint. Now, I can just navigate to any function in the editor and execute it. The parameter values are input as JSON and deserialize to an object of the required class instances.<p>Atomic Run - lets you hot-reload the code changes and highlights the difference in the return values of the changed function before and after the hot-reload. I feel Atomic Run has the potential of replacing unit test cases, but there is a long way to go. I am thinking of implementing<p><pre><code> - Option for mocking dependency calls: We want to give the developer more control over the testing environment by allowing them to mock downstream dependency calls.
- Customizing assertions: Not all differences in return values indicate breaking changes. Assertions should be flexible to accommodate non-breaking changes.
- Workflow to save this data to a file (thinking something like JSON based fixtures): making it easier to organize and reuse test data.
</code></pre>
This plugin is still in the early stages, so we'd appreciate your help in ironing out any bugs you come across. Get in touch with me on my discord channel.<p>To try it out, install Unlogged from the IntelliJ Marketplace and start your java application using the java agent (the plugin has instructions to download)<p>Link to try the plugin: <a href="https://plugins.jetbrains.com/plugin/18529-unlogged" rel="nofollow">https://plugins.jetbrains.com/plugin/18529-unlogged</a>
Show HN: Speeding up the code-test cycle for Java developers
Hello HN, I am Parth. In my experience, the current form of testing automation takes too long. To solve this, I am creating a developer tool to speed up the code-test cycle for Java developers. It has two main parts:<p>Direct Invoke - lets you call any Java function directly, without the need to execute the whole call hierarchy. (e.g. an HTTP endpoint) In my normal coding workflow, I use the “Evaluate Expression” feature inside IntelliJ IDE. I usually put a breakpoint somewhere in the code and after hitting the breakpoint by calling an HTTP api, let the execution remain paused while I explore and see the return values of functions. “Evaluate Expression” was quite useful in exploring new codebases and checking return values of my own functions as a sanity test. The direct invoke feature implements the same functionality without needing to hit a breakpoint. Now, I can just navigate to any function in the editor and execute it. The parameter values are input as JSON and deserialize to an object of the required class instances.<p>Atomic Run - lets you hot-reload the code changes and highlights the difference in the return values of the changed function before and after the hot-reload. I feel Atomic Run has the potential of replacing unit test cases, but there is a long way to go. I am thinking of implementing<p><pre><code> - Option for mocking dependency calls: We want to give the developer more control over the testing environment by allowing them to mock downstream dependency calls.
- Customizing assertions: Not all differences in return values indicate breaking changes. Assertions should be flexible to accommodate non-breaking changes.
- Workflow to save this data to a file (thinking something like JSON based fixtures): making it easier to organize and reuse test data.
</code></pre>
This plugin is still in the early stages, so we'd appreciate your help in ironing out any bugs you come across. Get in touch with me on my discord channel.<p>To try it out, install Unlogged from the IntelliJ Marketplace and start your java application using the java agent (the plugin has instructions to download)<p>Link to try the plugin: <a href="https://plugins.jetbrains.com/plugin/18529-unlogged" rel="nofollow">https://plugins.jetbrains.com/plugin/18529-unlogged</a>