It doesn't look too bad if one also break the code into multiple functions to make "layouts" and "components".
I have had lots of fun building with Bun, ElysiaJS, and HTMX. Might test your go library out as well. Looks pretty neat.
648 karma · joined April 21, 2016
It doesn't look too bad if one also break the code into multiple functions to make "layouts" and "components".
I have had lots of fun building with Bun, ElysiaJS, and HTMX. Might test your go library out as well. Looks pretty neat.
It would be better to encourage users to use a single random four word passphrase and stick to that forever. Add 2FA and you are golden. But legacy systems gonna legacy. I still see systems with max password lengths of 12 characters in the wild, and no 2FA to boot. It's been a while since I got my password back in clear text though, so perhaps we're moving in the right direction.
I never really got into F# or Haskell (more than some tutorials) so can't really comment on the type safety part.
It would be swell if more of the web was made by passionate people to share knowledge for free. I know this is a privileged attitude as creating content takes time which is not free. But some of the best web sites are the ones without monetisation. We need a better monetisation system for the web that is based on people paying for content instead of people being sold as user data.
What I've found is that if you save the UTC timestamp + an IANA time zone (e.g. Europe/Paris) you are good. How you convert time for a given IANA time zone at a given UTC time should be consistent. For example in 2024-07-23T10:00:00Z, Europe/Paris should use the offset for the CEST timezone (UTC +02:00 hours).
If at a later point EU gets rid of daylight savings time and France decides to stay on CET year around, date libraries can account for this when you parse the UTC date string and convert it to the provided IANA time zone.
So UTC + IANA time zone gives you an accurate point in local time as long as your date libraries handles IANA time zones correctly.
Essentially they use the free customers to build the lists that drive their enterprise sales, which is fair enough as you get to use their free dashboard and open source software. But to me it seems they're really only targeting enterprise customers as a business.
So something that would enhance the speech of whomever I'm looking at would be super cool. Apple AirPods already have some sound shaping abilities to react to environment and mode. They also support specific voice enhancement if you put your phone down in front of the person speaking. If they ever support directional voice enhancement, like in this research, directly in the AirPods it would help me so much with social interactions in loud places.
I wanted users to be able to search their backups. As I’m using Rust Tantivy looked like just the right thing for the job. Indexing happens so fast for an email I did not bother to move the work to a separate thread. And search across thousands of emails seems to be no problem.
If anyone wants search for their Rust application they should take a look at Tantivy.
It would be nice if more services used purchasing parity based pricing so more people could benefit.
I feel like we're on a race to the bottom. All of Silicon Valley and beyond have big FOMO on the AI hype train and any and all use of AI pleases investors. I guess we'll see how it all pans out in a few years.
One thing is for sure, generative AI and LLMs open up a whole can of worms in terms of disinformation and information noise on the Internet. The signal to noise ratio will greatly shift with these new initiatives.
Edit: Obviously for users not familiar with command line programs brew isn't that "easy". But for command line people this setup is quite nice.
With Nostr your identity is truly decentralized. You create a user meaning a private and public key. You then choose which set of relay servers you want to post content to and which servers to pull content from. If you post content to servers A, B, and C users that pull from those servers see your posts. All posts are signed with your private key so the other users can verify that they were in fact posted by you. It does not matter which relay servers you post to, they will happily store your content unless they've specifically blocked you or require some form of white-listing.
So in that way your Nostr identity is not connected to any specific server, you can always choose to post to a different relay. As of today I don't think Nostr relays federate/distribute content to other relays, but this seems to be a possibility for the future.
Edit: Specified that Nostr relay servers don't have to be open by default.
Running a Personal Data Service (PDS) on the ATProto network should be much more doable for hobbyists. The relay and app view servers handle search, discovery, and caching to alleviate traffic. So a typical PDS should not see too much traffic. Now just waiting for the Bluesky ATProto network to actually go federated, but I don't think we are too far off from that happening as they've already federated their own PDS into multiple PDSs.
The huge win was that I could use the Clojure REPL to run my SQL-generating functions and see that the SQL actually matched what I was aiming for. Caching the query-building was as simple as memoizing the query building functions as queries are parameterised in any case, so can be reused.
There is something really nice about having the full power of SQL at your fingertips. The only drawback compared to ORMs of course is that it outputs the resulting query result in a flat structure. So any aggregation you'd need to handle in code or use something like Postgres JSON aggregation.
They have a fast web client where you can perform actions on your entire inbox. So far as I remember gmail only allowed you to do actions on the current page of mails. If you don't want to use their official clients you can always connect via standard IMAP and SMTP.
Also they support plus-addressing like gmail, but also subdomain addressing. I.e. instead of name+alias@yourdomain.com you can use alias@name.yourdomain.com. You can also set up nice email filters quite easily, and their server supports the JMAP protocol [1], which they made. So if you want to interface with your mailbox programmatically they have a more modern protocol to use.
The years I've used them I only remember them having actual noticeable downtime once. Other than that rock solid. Their first line support isn't super technical, but I've only tried to contact them once.
Edit: Essentially if you want good olf-fashioned mail, Fastmail is about as good as it gets. It does not have the smart inbox concepts that Google Mail and Hey do. And not so much in terms of other fancy stuff either. But it makes up for it by using open protocols for mail, calendar, and contact lists. So no danger of lock-in.
For search I now mainly use Kagi. Sometimes I drop into Google if I can't find what I'm looking for on Kagi. The nice thing about Kagi is I can manually block or de-prioritize SEO spam domains so I get more relevant results. Takes a bit of time to build these lists, but it does work.
I use primarily Firefox and Safari as browsers. I also support Mozilla via my Pocket subscription.
Edit:
I also have my own website where I post content without any ads or tracking. The content is even licensed under a CC attribute and share-alike license so people can re-post and remix my content as long as they give proper attribution.
Then you also have custom feeds in addition to the built in feeds. So people will make things like language specific feeds, feeds to follow a group of people (e.g. politicians), etc.
Then there is a whole federated protocol, ATProto [1], underneath that has some interesting properties that also solves some of the issue faced with scalability and portability in the Fediverse protocol.
Framework delivering a HiDPI display makes it more future proof. HiDPI displays aren't just a gimmick. HiDPI displays is super helpful when you are short sighted for example as the increased font clarity from a HiDPI display will help you read small text better.
The HiDPI display on MacOS and the excellent support for fractional scaling is one of my favourite features of a MacBook and why I wouldn't consider purchasing a "Linux laptop" (e.g. Lenovo or whatever else) before they support this.
Different people, different priorities I guess.
(-> x f g h)
If you need to pass an additional argument to g you can always do: (-> x f (g foo) h)
There are thread first ->, thread last ->>, and even a thread as "as->" depending on where you want to place the argument when you pipe the result through the thread of functions.I never really understood those that see this as a weakness and would rather learn a more limited set of template string functions that work kind of like, but not entirely like, the native JavaScript collection functions.
Yes, using a ternary operator in JSX to conditionally render components/values looks a bit ugly, but nothing is stopping you from making a wrapper component like:
<If cond={...}><div>Conditional content</div></If>.
Also with JSX/TSX scopes behave exactly like they do in regular JavaScript, because it is regular JavaScript. Templating languages often invent their own form of scoping mechanism.
Friday outage problems are never fun.
Personally I've found it better to split pure business logic and side-effecting logic as close to the edge (API endpoint handler) as possible. Then it is trivial to see where side-effects happen and you get to easily write unit tests for the business logic that matter.
Mocking is mostly always a pain and I would rather not mock at all and do proper end-to-end for integration code if possible.