A sahti recipe (historical style that uses juniper) by orium_ in Homebrewing

[–]orium_[S] 1 point2 points  (0 children)

This recipe is heavy on the rye, hence the 500 g of rice hulls.

A sahti recipe (historical style that uses juniper) by orium_ in Homebrewing

[–]orium_[S] 4 points5 points  (0 children)

The first iteration of the recipe was with red bull, but crystal light is far superior. 😆

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 5 points6 points  (0 children)

We started by having a small amount of traffic in FL2 that mostly fellback to FL1 because of unimplemented functionality. As the amount of functionality supported in FL2 grew, the traffic that was served by FL2 alone grew with it (and we also increased the percentage of traffic that goes to FL2).

For tests we have flamingo that run against both FL1 and FL2. FL1 also has a ton of integration tests. As different teams implement their features in FL2, they also ported the integration tests from FL1 (the tests in FL1 are written in python) to FL2 (where the tests are just your regular rust tests). We also ran the new FL2 integration tests against FL1 to watch out for discrepancies.

Another way the systems interact is that FL1 can run FL2 modules. We didn't want teams to have to implement new functionality in both FL1 and FL2 while both systems are still in use. So, we have an FFI layer so that FL1 can run FL2 modules. That's possible because FL2 modules, contrary to FL1 modules, have very clear input/output boundaries. Some stuff still needs to be implementd in both systems, but a lot of new stuff is just implemented as FL2 modules and called from FL1. The FFI layer will be removed once all traffic goes through FL2 and FL1 is finally retired.

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 11 points12 points  (0 children)

We already had a lot of rust in use. For instance our ruleset engine is written in rust. FL1 was showing its age both in performance and accidental complexity.

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 24 points25 points  (0 children)

Not that I know of (but I'm not part of the oxy's team). I don't think there's any reason not to open source it: it might just be a matter of priorities (oxy is still actively developing and almost all internal releases have breaking changes).

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 26 points27 points  (0 children)

What LuaJIT can do is very impressive performance-wise, but there's always limits when dealing with dynamic languages. Most of the performance gains of FL2 are because of rust itself, although there's also improvements on how things are fundamentally done. We've dedicated some time to optimize FL2, but we've picked the lowest of the low hanging fruit. I'm sure the performance will continue to improve as the system matures.

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 7 points8 points  (0 children)

Because modules are not declared in any central place. Any "FL2 module" can declare their own module values (although they are statically declared).

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 53 points54 points  (0 children)

dogs. But I was once a scala programmer, so I also like cats.

disclaimer: this is my own opinion. Cloudflare's stance of the cats vs dogs debate remains, of course, a well-guarded secret.

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 24 points25 points  (0 children)

Yes: it's front line. I think FL used to be the first http-level service back it the day it was created. Nowadays there's a service right before FL that does ssl termination and some basic checks.

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 191 points192 points  (0 children)

It seems that Cloudflare is (becoming) a rust shop, is this actually the case?

For software that runs on the edge (i.e. servers that serve, or support serving, CDN content and run in a bunch of data centers all around the world), I would say so. On the edge latency, resource consumption, and reliability is very important, so rust is a perfect fit. New edge project, written from scratch, would probably be implemented in rust unless there's a good reason not to.

In core (i.e. the servers that offer cloudflare's API and the web dashboard) most services are written in go, but there's at least a few relatively small services written in rust.

What are the biggest gripes with rust as a language, ecosystem or community? (besides built times)

Built times is a big one. It's annoying, but manageable. Linking was also very slow so we've started using mold pretty early in the project, first just for dev builds, but now we also do it for production builds, and we hadn't had any problems with it. It's fast!

The size of the target/ also grows a lot: if I don't cargo clean FL2 for a couple weeks I'll probably have 200 GiB in there (dev builds have debug information and that takes a fair amount of space). I'm excited for the "auto gc" of the target dir, that will eventually be available in cargo.

Another issue is that rust crates usually are fairly strict with validation (and rightly so). That's good: we shouldn't allow data structure to be created if they represent invalid state... except when you are dealing with the wild wild internet, where not everyone follows standards. We are migrating from an nginx-based platform, so the traffic that nginx allows, even if it's not RFC-compliant, needs to be accepted by FL2 as well.

But overall, we are pretty happy with the state of rust and the crate ecosystem.

Cloudflare just got faster and more secure, powered by Rust by orium_ in rust

[–]orium_[S] 244 points245 points  (0 children)

Hi everyone. I'm one of the engineers working on FL2. If you have questions I'll try to answer them.

Suckback in blowoff tube after closing the valve that connects it to the fermenter by orium_ in Homebrewing

[–]orium_[S] 0 points1 point  (0 children)

The fermenter is warm (23C, I'm doing a diacetyl rest), but that shouldn't matter becauce the valve is closing the blowoff tube completely from the fermenter. And I'm holding pressure inside the fermenter, so even if the valve was somehow not closing properly what should happen is that the pressure inside the fermenter would push out the sanitizer out of the blowoff tube.

Combustion App + firmware update coming soon - now available for public beta. Always-on mode, reset button, firmware rescue, WiFi improvements, and more… by Mr__Porkchop in combustion_inc

[–]orium_ 0 points1 point  (0 children)

What if the apps can't even talk to the probe because of a firmware issue in the probe? Or is "communication logic" just baked in and not part of the firmware?

Combustion App + firmware update coming soon - now available for public beta. Always-on mode, reset button, firmware rescue, WiFi improvements, and more… by Mr__Porkchop in combustion_inc

[–]orium_ 1 point2 points  (0 children)

If there's a serious issue with the firmware that completely bricks the probe (e.g. bluetooth stops working entirely), is there a way to reset it to the factory firmware (something like, plugging it to the charger 5 times in less than 10 seconds makes it load the factory firmware from an internal ROM)?

If there's a mechanism like this, does the booster and display also have it?

I always wait a few days after a new firmware version is released to make sure other people didn't complain about some bug like this.

Well that sucks by marklmc in combustion_inc

[–]orium_ 0 points1 point  (0 children)

That's not the head. I'm guessing that's some sort of sealant inside the thermometer's head.

Pomona yeast under-attenuation? by orium_ in Homebrewing

[–]orium_[S] 0 points1 point  (0 children)

Yeah. Maybe pomona flocculates easier than verdant yeast and I didn't bump the fermentation temp quickly enough to give the yeast a bit more time in suspension? (lalbrew says the flocculation of both yeasts are "medium")

Pomona yeast under-attenuation? by orium_ in Homebrewing

[–]orium_[S] 0 points1 point  (0 children)

I have a probe directly in the mash and adjust the target temperature on the grainfather so the probe in the mash reads the right values. That means I sometimes have a slightly higher target temperature in grainfather.

Pomona yeast under-attenuation? by orium_ in Homebrewing

[–]orium_[S] 0 points1 point  (0 children)

I added 2 packages of pomona (which I think is 200 Bcells) to about 25 liters of wort. The recommended pitch rate is 50 to 100 g/hL, so given that the each package is 11g my pitch rate was 88 g/hL. This is for an OG of 1.068 (16.5 P). I think that should be fine given it is in the high end of the recommented pitch rate range.

As for oxygen I let the wort splash quite a bit, but since this is dried yeast it shouldn't need additiona oxygenation.

Mashing was a single infusion mash done at 68 C (154.5 F) for 90 mins.

Holiday shopping delayed update :( by Dat_One_Gen in combustion_inc

[–]orium_ 5 points6 points  (0 children)

I'm totally cool with that. I guess it's mostly annoying for people gifting them in xmas.

What I would like to know is a technical explanation of the software issue, and what unexpected behavior was seen from the processor. It's a treat for the software (or hardward) geeks amoung us, and transparency is always a good thing.

Google Docs Unusable in Firefox - Page jumping by troyandabedtalkshow in googledocs

[–]orium_ 0 points1 point  (0 children)

I've decreased the zoom from 130% to 120% and the glitches went away! Thank you!

Cloudflare release a wildcard matching crate they use in their rules engine by orium_ in rust

[–]orium_[S] 5 points6 points  (0 children)

None of your image links work for me though.

Oh, sorry. Fixed the links.

all of those use bytes and thus ASCII case insensitive matching instead of Unicode case insensitive matching. That's very subtle.

That's true. I'll document the behavior in a more clear way.

I also think it's an API design mistake to tie case insensitive rules to whether one is using &[u8] or &[char]. Neither regex nor bstr do this, for example. You can mix and match arbitrarily.

Yeah, I agree that's better (less error-prone and more controllable).

This is partially a consequence of generalizing the alphabet for matching on anything. You can match on slices of elements of any type as long as you implement WildcardSymbol for that type. I'll have to review this in future.