To be able to troubleshoot Rust compilation, we first need to understand in a rough cut how it works. The goal is to give you a map that will be easy to remember, and be operational rather than highly detailed and academic.

Think of it as a kind of an 80/20 rule set for the first steps you should do when you are trying to handle a slow build that’s unacceptable. …


Image for post
Image for post

Github Actions make a compelling option if one of your main challenges are to build binaries over wide array of platforms such as Linux, Windows, and macOS.

While the difference between a Linux and a given macOS in terms of build aren’t significant (we’ll see how they can become significant actually), Windows and especially how to get to a nice Rust build on Windows using MSVC require an investment on your part.

For the most part the Rust cross-compilation toolchain holds its weight well when you’re looking to build for various architectures, but we’ll see a few cases where you’re on your own with Github Actions. …


created a new standard for how we do CSS-in-JS. It introduced a sweet spot between writing CSS and React components, and it looked like this:

Image for post
Image for post

With this new API you could:

  • Use something that looks like CSS, using the new template literal feature from recent ECMAScript versions
  • Create atomic-feeling React components
  • Still preserve flexibility with access to and use them through out the template literal freely
Image for post
Image for post

Made for a very low-friction developer experience, that was widely adopted, and then widely imitated (in a good way). We now have the same API in Emotion and others.

From here on, styled-components evolved to include themes and a as well as a rich ecosystem. …


Image for post
Image for post

Lightscreen is one component out of the Spectral platform for Kubernetes. It’s a modular admission controller toolkit for Kubernetes built in Go for Go developers.

A Word About Admission Controllers

Image for post
Image for post

The concept of admission is just one way to model how we allow or forbid objects into our cluster.

Kubernetes defines a pipeline of controllers that are active on and that can participate in admission, a few of them are enabled by default such as:

  • MutatingAdmissionWebhook
  • ValidatingAdmissionWebhook

Which means you can create your own service that offers a webhook to participate in the admission decision flow. You can add any policy that you think is valuable for your cluster, that is not pre-baked into Kubernetes already, or is too complicated or too domain-specific to be included. …


I’ve just finished my book, working on it on and off in the span of the last 3 years, I finally had the chance to invest some serious time to gather all of the notes, half-baked texts, drafts, and go through the painful process of producing something that I can be proud of.

Here are a few excerpts of the chapter titled: “Flow”

Low Energy

How effective you are with your work and tasks depends on your mental state. Ever wake up for an alert being on-call and tried to troubleshoot an incident? It’s one of those memories that tend to stick. Can you think clearly and take on “heavy” tasks when you’re feeling under the weather? …


Image for post
Image for post

Testing, test strategies and tooling change often. Eight years ago we were all drinking the BDD coolaid, dreaming about our Product Managers writing our specs in Cucumber while we just happily write the code that makes them pass.

It took the testing world by a storm. But then it stopped.

Image for post
Image for post

The pendulum has swung, and today we’re seeing more of the simplistic style of testing taking the stage. Go’s testing package is one notable example of mainstream, simple, testing approaches. Some people even wanted a simpler test output.

Image for post
Image for post

Jest for example, is a mix. It takes a simplistic BDD-style testing approach; it takes BDD-the-language but not the bells and whistles of the frameworks, which leaves the extreme idealistic approaches out. It even has a minimalistic set of matchers, as opposed to the massive amount of matcher libraries that we used to see come out every now and then. …


Image for post
Image for post

Formation is a generic functional middleware infrastructure for Python.

With Formation, you can build production-grade software — whether you want to build resilient, circuit-breaker infused and operable HTTP clients, HTTP services, or easily apply best practices and standards to other kinds of software to be flexible, composable, and maintainable.

Although not tied to a web service framework, it takes inspiration from Ruby’s Rack middleware, and Node’s connect. In the context of Python, you can think of it as a higher-level abstraction or “WSGI over anything”.

The Pipeline Abstraction and Functions

A graphics pipeline in digital cameras often helps perform these (photography connoisseurs may notice it’s not a complete set nor an accurate set of steps, but it helps make a…


Image for post
Image for post

I used to love C and C++. If we date back to the mid 90’s, I did C, probably poor C++ which I thought was great, and Assembly exclusively as part of my reverse engineering/security work.

There’s something about being mindful of the price of instructions and data you use that feels intuitive and safe and generates confidence. You get low level building blocks, build your own blocks— and pay little for those because there’s a notion of “zero cost” or at least you directly control the cost. …


I’ve just crossed a 20K LOC in one of my bigger Rust projects, and thought about pausing for a moment and sharing some great Rust libraries that I’ve used.

I also plan to cover topics such as deciding between Rust vs Go, or deciding if to adopt Rust for your team or project, and what should you expect after you’ve decided to take it on, in a future article.

UPDATE: the second part is now out: 10 key learnings in Rust after 30,000 lines of code

clap

Building CLI tools in Rust is a match made in heaven — check out ripgrep and Rust’s own Cargo. Hyperfast start up time, small binary size, type safe code, runtime safe binary, cross compiling to almost every architecture you might want. …


Image for post
Image for post

Here’s a series of steps for such test flow for your common note-taking app:

  1. Log in
  2. Save a note
  3. Get a note
  4. Delete a note

A “Get” action can counting on data to exist. A step might expect you to authenticate such as the “Save a note” step, therefor having to perform an authentication step that supplies, for example, a JWT token.

And, trivially, to log in — someone should have put a user with your credentials in the database before all this was able to run.

You can test this flow using white-box — your integration tests, with access to system source, being able to mock things out and build helpers to promote testing, or black-box — no access to your source, having just an opaque service address. …

About

Dotan Nahum

@jondot | Founder @ Stealth. Rust + FP + Hacking + Cracking + OSS. Previously CTO @ HiredScore, Como, Conduit.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store