The best Hacker News stories from Show from the past day
Latest posts:
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>
Show HN: Smallville – Create generative agents for simulations and games
Smallville can be used to create NPCs with the same level of realism as human players without having to pre-program interactions. The agents store and retrieve past memories which they use to create plans so they can decide where to move, what to say, and how to react to observations. Agents are also capable of interacting with the world around them to change the state of objects on their own.<p>This project was intended to make it easy for anyone to create custom simulations and my attempt to recreate Generative Agents: Interactive Simulacra of Human Behavior. I’ve been working on Smallville for the past few weeks and hope other people also find it useful. Would love to hear any thoughts about the project and where I should take it from here.
Show HN: Smallville – Create generative agents for simulations and games
Smallville can be used to create NPCs with the same level of realism as human players without having to pre-program interactions. The agents store and retrieve past memories which they use to create plans so they can decide where to move, what to say, and how to react to observations. Agents are also capable of interacting with the world around them to change the state of objects on their own.<p>This project was intended to make it easy for anyone to create custom simulations and my attempt to recreate Generative Agents: Interactive Simulacra of Human Behavior. I’ve been working on Smallville for the past few weeks and hope other people also find it useful. Would love to hear any thoughts about the project and where I should take it from here.
Show HN: Smallville – Create generative agents for simulations and games
Smallville can be used to create NPCs with the same level of realism as human players without having to pre-program interactions. The agents store and retrieve past memories which they use to create plans so they can decide where to move, what to say, and how to react to observations. Agents are also capable of interacting with the world around them to change the state of objects on their own.<p>This project was intended to make it easy for anyone to create custom simulations and my attempt to recreate Generative Agents: Interactive Simulacra of Human Behavior. I’ve been working on Smallville for the past few weeks and hope other people also find it useful. Would love to hear any thoughts about the project and where I should take it from here.
Show HN: Pinbot – An extension to privately search one's browser history with AI
Hello HN, I’m Kamil.<p>The past months have been filled with news about ChatGPT, Bard, etc. Thankfully, there are some heroic attempts to bring that power to the users.<p>I wanted to contribute to that effort with my side project, an extension for Chrome: it makes searching the history by meaning – instead of the exact words – possible.<p>This is only a proof of concept, building on the excellent transformers.js[0], and running entirely in the browser. My goal here is to explore the possibilities unlocked by a client-side AI.<p>I would love to have your feedback, to know which direction that project should follow!<p>[0] <a href="https://xenova.github.io/transformers.js" rel="nofollow">https://xenova.github.io/transformers.js</a>
Show HN: Pinbot – An extension to privately search one's browser history with AI
Hello HN, I’m Kamil.<p>The past months have been filled with news about ChatGPT, Bard, etc. Thankfully, there are some heroic attempts to bring that power to the users.<p>I wanted to contribute to that effort with my side project, an extension for Chrome: it makes searching the history by meaning – instead of the exact words – possible.<p>This is only a proof of concept, building on the excellent transformers.js[0], and running entirely in the browser. My goal here is to explore the possibilities unlocked by a client-side AI.<p>I would love to have your feedback, to know which direction that project should follow!<p>[0] <a href="https://xenova.github.io/transformers.js" rel="nofollow">https://xenova.github.io/transformers.js</a>
Show HN: Pinbot – An extension to privately search one's browser history with AI
Hello HN, I’m Kamil.<p>The past months have been filled with news about ChatGPT, Bard, etc. Thankfully, there are some heroic attempts to bring that power to the users.<p>I wanted to contribute to that effort with my side project, an extension for Chrome: it makes searching the history by meaning – instead of the exact words – possible.<p>This is only a proof of concept, building on the excellent transformers.js[0], and running entirely in the browser. My goal here is to explore the possibilities unlocked by a client-side AI.<p>I would love to have your feedback, to know which direction that project should follow!<p>[0] <a href="https://xenova.github.io/transformers.js" rel="nofollow">https://xenova.github.io/transformers.js</a>
Show HN: Postgres query lock explainer
This is like 4 years old, but I’m braver now and ready to share stuff with this community. I’ve been a lurker for a while.<p>I made this tool - it’s kind of like “explain” but it tells you about what locks would be required by the query.<p>I was making it as part of a larger tool that would try to prevent deadlocks during migrations at my last company, I never finished it.
Show HN: Postgres query lock explainer
This is like 4 years old, but I’m braver now and ready to share stuff with this community. I’ve been a lurker for a while.<p>I made this tool - it’s kind of like “explain” but it tells you about what locks would be required by the query.<p>I was making it as part of a larger tool that would try to prevent deadlocks during migrations at my last company, I never finished it.
Show HN: Postgres query lock explainer
This is like 4 years old, but I’m braver now and ready to share stuff with this community. I’ve been a lurker for a while.<p>I made this tool - it’s kind of like “explain” but it tells you about what locks would be required by the query.<p>I was making it as part of a larger tool that would try to prevent deadlocks during migrations at my last company, I never finished it.
Show HN: Beepberry – a portable e-paper computer for hackers
Hi. I heard HN likes e-paper gadgets so I wanted to share a little side project I’ve been working on with @sqfmi. We’re building Beepberry - a portable e-paper computer for hackers, designed for chatting on Beeper. My day job is running Beeper [0], but I will always have a soft spot for building hardware.<p>I wanted to create a ‘weekend’ device that would let me stay in touch with friends and family, without the distractions of a full smartphone. I imagined a tiny, hackable e-paper screen with a physical keyboard, powered by a Raspberry Pi, that I could use to chat around my home…and pretty much nothing else.<p>Before Beeper, the idea probably would not have gone anywhere. Most chat apps do not have an API, making it practically impossible to hack something like this together. Enter Beeper, with connections to 15+ chat networks. Built on top of Matrix, Beeper is fully hackable. You can write alternative fun clients [1], bots [2] and more!<p>Today, sqfmi is starting to take pre-orders at <a href="https://beepberry.sqfmi.com" rel="nofollow">https://beepberry.sqfmi.com</a> for the first batch. It’s $79 (or $99 including a Pi Zero). Specs: Sharp Memory LCD (same display tech as in Pebble!), Pi Zero (BT/WIFI), physical keyboard, 2000mAh lipo.<p>On top of being an amazing Beeper chat device, it’s basically an e-paper Cyberdeck that fits in your pocket. It’s a ton of fun to hack on. Keep in mind - THIS IS NOT A REAL FINISHED PRODUCT. It’s basically a devkit.<p>More info in the blog post: <a href="https://blog.beeper.com/p/beeper-x-sqmfi-beepberry">https://blog.beeper.com/p/beeper-x-sqmfi-beepberry</a>, or join the Discord/Matrix channel <a href="https://beepberry.sqfmi.com/docs/getting-started#join-the-beepberry-discord" rel="nofollow">https://beepberry.sqfmi.com/docs/getting-started#join-the-be...</a>. I’ll hang out a bit here to answer questions as well.<p>[0] <a href="https://beeper.com">https://beeper.com</a>
[1] <a href="https://github.com/tulir/gomuks">https://github.com/tulir/gomuks</a>
[2] <a href="https://github.com/maubot/maubot">https://github.com/maubot/maubot</a>