Thanks for the links. I built my own super cheap (under $100) electric sauna, though I would not recommend it for anyone else to copy. It's lasted me about 4 years now though with about every-other-day-usage without burning down the house so... that's nice. I'll see if I can apply any of Trumpkin's Notes to my jank build [0]
re: ice, yes, though I know Trumpkin and other traditionalists would be appalled. I do (occasionally) practice meditation - but I don't ever want to do it in a sauna.
I have no plans on upgrading so I haven't put any thought into it. A causal search revealed this in your price range [0] but I don't know anything about it. Don't forget that you'll likely need to pay for an electrician to upgrade your home circuit.
For me if I were to upgrade, it would be first be to get a better heater. The thermal foil + sleeping bag is surprisingly effective, though obviously I can't practice Trumpkin's advice on doing hot-cold-hot-cold-hot cycles easily without a door. It currently takes about 10-15m to get up to temp. So if you were on a smaller shoestring budget, I do think my thermal foil + sleeping bag build would save you a _lot_ of money on wood. I built a small (4x4x4) wood cube to sit in (you can see its base in the photo) but it leaked so much air that my DIY heater couldn't keep up. So I went with the thermal foil, which has all kinds of advantages... but it's certainly an eyesore :) A more powerful heater (with the appropriate house circuit) would make a small DIY wood box viable again. I think I _could_ recommend my jank build for others if they used a heater that wasn't DIY.
I still wonder when my DIY heater is going to kill me. I've since covered it with ceramic and wood so I'm no longer worried about 3d degree burns from fainting or whatever. And I use a GFCI outlet so any shock won't kill me. And I literally unplug it when not in use so it won't do anything unexpected. My thermal foil is _flammable_ though... which I found out when my heater started sparking. A better heater won't do that - but still...
Honestly, depending on your situation, it might just be better to save for a "real" sauna. For me time and money are currently at a premium, so I likely won't upgrade for years.
I built a super cheap "traditional" dry sauna. It's basically an electric burner, a pot to increase surface area and humidity, a 25 foot roll of thermal foil, and a sleeping bag as the ceiling. I disassembled the burner, removed all the plastic pieces, and short circuited the safety cutoff. It's jank AF, but in the end less than 100$. AFAIK there aren't any dry saunas under $1000 - the heater alone is ~$200. Mine is also portable, so it's in the garage in summer and in the laundry room in winter. There are portable infrared saunas for ~$100, but most studies are on the "dry" type. I rubber band a block of ice to my phone and do my reading/social media in there, so the time cost is reduced. It's pitch black in there, so I have a very bright night light. No problems with air circulation - it doesn't get stuffy, even when I throw a dash of water in the pot.
https://i.imgur.com/Lml7Vms.jpg
2 years in and I haven't burned down the house... yet. I've since added more ceramic around the pot so burning myself would be very difficult.
I have similar keys to yours, but U and O are left/right four times, and 8 and , are up/down four times. Could make it more, I just know that 3 is to small.
I also also have a hotkey for nearly every program I use on a daily basis. Win 0-9 are used of course, but Caps+F1-F12 are also used, and I've recently added Insert+letter keys to my collection thanks to my new fancy QMK keyboard. My goal is to never alt tab again :)
I also also also have an emacs/whichkey kinda thing, which does exactly what you think:
This is, of course, extensible to any AHK command, not just running explorer. Also means I don't have to memorize every goddamn shortcut. Only weird thing is that I have to exit out of it with Alt. Escape doesn't work and I dunno why.
I built a super cheap "traditional" dry sauna. It's basically an electric burner, a pot to increase surface area and humidity, a 25 foot roll of thermal foil, and a sleeping bag as the ceiling. I disassembled the burner, removed all the plastic pieces, and short circuited the safety cutoff. It's jank AF, but in the end less than 100$. AFAIK there aren't any dry saunas under $1000 - the heater alone is ~$200. Mine is also portable, so it's in the garage in summer and in the laundry room in winter. There are portable infrared saunas for ~$100, but most studies are on the "dry" type. I rubber band a block of ice to my phone and do my reading/social media in there, so the time cost is reduced. It's pitch black in there, so I have a very bright night light. No problems with air circulation - it doesn't get stuffy, even when I throw a dash of water in the pot.
On that very, very short wooden rectangle in the center of the platform in the photo. It's less a thing I sit on and more something I "asian squat" on. So I end up facing the burner (though it's now shielded with ceramic).
> heart rate increases up to 100 beats/min during sauna sessions at moderate temperatures and up to 150 beats/min during hotter saunas. Although not an issue for healthy individuals, such a cardiac challenge may feel uncomfortable for participants with poor cardiorespiratory fitness and pre-existing disease. Simple adjustment for disease
vs no disease may not entirely solve this problem since reverse causation bias (ie, health status affects the likelihood of a sauna session) operates within disease groups; the more severe the disease, the greater the fear of cardiac challenge... A more robust finding at reduced risk of reverse causation bias would be a graded association between number of sauna sessions and mortality in an initially healthy, cardiorespiratory fit population, but this was not observed.
Laukkanen responded with
> ...we did observe graded inverse associations with sudden cardiac death (SCD), fatal coronary heart disease (CHD), and cardiovascular disease (CVD) events, which are the characteristics of a true inverse association between sauna bathing and outcomes. Furthermore, results were carefully adjusted for socioeconomic status (SES), physical activity, and
cardiorespiratory fitness...
Notably Laukkanen didn't say that the graded association was in an "initially healthy" population, as the first reply specified.
trpc relies still on strings: No proper refactoring (ie F2 in VS Code) which makes refactoring as slow and error-prone as with REST and GraphQL. Should change with v10 but its API hasn't been finalized yet and ETA is far in 2023 if at all. Also overall API design has missed opportunities.
Telefunc should support zod, why shouldn't it? Just pass them as native zod types and all good. You could also convert them before with z.infer but you don't need to.
> It seems like this library has its own bespoke syntax for types
Only for stacks which don't transpile server-side code. You can use normal TS types with something like Next, Nuxt, Svelte, Vite, etc. So, these bespoke types aren't relevant for the majority.
I believe this is only the case with routes, and they're still statically typed. E.g. if you only define `/getUser` and try to invoke `/gteUsre`, it will yell at you.
> Telefunc should support zod, why shouldn't it? Just pass them as native zod types and all good. You could also convert them before with z.infer but you don't need to.
Can you elaborate on this? AFAIK it only supports the types listed here https://telefunc.com/shield#all-types So my understanding is that you can't pass native zod types.
Zod allows for more complex validation like "input cannot exceed 256 chars", "number must be positive", or even arbitrary "refinements". I could, of course, simply write a function that will `Abort` instead, but tRPC+Zod handles that automatically - zero boilerplate. My current understanding is that I'll need to invoke Abort manually if the Zod.parse fails.
Importantly Zod philosophically follows "parse, don't validate" https://lexi-lambda.github.io/blog/2019/11/05/parse-don-t-va... which means that once validation is done, you get a type - a parsed value. This means you can validate clientside and serverside using the same types. Again, sure you could do the same with Telefunc, but you still need to invoke Abort manually and every single RPC definition you have needs to be followed by Zod.parse. A small cost to be sure, but what are the advantages of Telefunc over tRPC? I'm not seeing any right now.
tRPC also isn't strongly tied to Zod, it also works with yup, superstruct, and custom validators.
I still don't see a concrete use case that would justify using Zod in favor of `shield()`. Both "input cannot exceed 256 chars" and "number must be positive" are one-liners in JavaScript.
I'm more than open to support Zod & co, but I'd like to see a concrete use case for it.
Fair enough. Still, this makes your original comment regarding "less boilerplate" kinda ironic... and I'm still not seeing any mention of advantages over tRPC. I'm more than willing to have my mind changed but you aren't giving me much material.
It is ironic because AFAICT Zod is actually more boilerplate than `shield()` :-). Although, the Zod familiarity is a clear argument in favor of Zod.
Speaking of boilerplate, one Telefunc feature I'm particularly excited about is its capability to automatically generate runtime type safety, so you don't even need `shield()` nor Zod then. But it's an experimental feature, let's see how it works out at scale.
The main problem with Telefunc right now is the lack of clear documentation which I'm going to work on in the next weeks/months. Hopefully, it will then become clear why Telefunc is simpler and less boilerplate. Stay tuned.
In the meantime feel free to check out the `examples/` and feel free to hit me up on Discord.
v10 is in beta and will go into RC fairly soon. I'd put my money on a 2022 final release. I'm already using it in production and it's rock solid. Only complaint is still having to restart the TS server in your editor occasionally due to all the inference magic it does.
[0] https://news.ycombinator.com/item?id=28495062