jamesmunns

Doing embedded stuff

Be nice, work hard. Build tools, tell stories. Start five year fights. Kein Ort für Nazis.


A list of all the other services I'm on around the internet


Posts with code highlighted with codehost by @wavebeem.


All posts licensed under CC-BY-SA 4.0, unless otherwise stated.


jamesmunns
@jamesmunns

Attempting to write a blurb for my consulting website, since I have some availability in about a month.

Trying to write ad copy for yourself sucks ass. Especially when the executive summary is "Hello hire me so I can help you make Cool Shit, or unfuck your existing shit so it can realize its latent Cool Shit Potential".


jamesmunns
@jamesmunns

if you need help Building or Unfucking some Cool Shit.

I specialize in Rust, Embedded Systems, and Rapid Prototyping (building the Right Cool Shit for Right Now, very quickly).

I will offer you an unspecified discount if you contact me and have a cohost account older than this post.

tbh I used to use Twitter to "promote myself", mostly just building stuff and talking about it, which was enough for people to find me. It'd be real neat if I could use that for Cohost too.


You must log in to comment.

in reply to @jamesmunns's post:

I will certainly keep you in mind. I don't have anything in mind right at the moment, but with the kind of work we do (making Cool Shit a reality), it's really helpful to know people to ask when you don't know what to ask.

I don't know if you have a portfolio of the kind of problems you tackle (from what I can tell: safety critical/realtime, embedded Linux/bare-metal, IoT, Rust, systems programming, data serialization and exchange, etc.), but it would be great to know when would be the times you would be the right person to call.

Hey! That portfolio, or rather the cover letter for it (sort of), is exactly what I'm working on building right now. Lots of stuff on my github, but that's not very well curated. Or my personal CV, but that info hasn't made it to my consulting website yet. Also starting to put together a more project focused portfolio archive here, but it's ALSO not fully fleshed out yet.

I was able to (and so far: still do!) coast without having a full portfolio for a long time, as I was just active on twitter (over many years), so folks following me were pretty aware of the stuff I was doing. I'm sure cohost will end up the same given more time, I've just been busy with client projects for the last months, so haven't been posting as many personal/research projects lately.

I tend to find it easier to be conversational about what I do instead of writing Brand Copy, so I'll dump a little info here, since it'll probably help me write things later. Thanks for asking the right question at the right time, that really does help unblock my mental state :).

I think you've gotten it pretty right in your list! I do almost entirely rust (or gluing rust components to other things) these days, and pretty happy working at anywhere in the stack, down to embedded/kernel things, pretty much up to any point, other than GUIs.

I tend to find myself doing a lot of rapid prototyping and/or bringup things: setting up environments or building/integrating the first couple demos, then helping teams get ramped up so they can start being productive. I have a pretty wide, niche set of skills around there, and it tends to work out pretty well. More often than not, that's on bare metal (or RTOS) embedded environments, though also a fair amount of resource/time/reliability critical userspace stuff as well.

I also do a lot of "make computers talk to computers" work, either writing/designing protocols, or observing how they can fail, or doing integration work between lots of different systems. Sometimes these are embedded, sometimes they are just two applications or two computers that need to talk to each other. Sometimes this is low level I2C/SPI/UART hardware comms, sometimes its IPC/shared memory/unix sockets comms, sometimes it's TCP/UDP/REST network comms.

The other main thing I find myself doing a lot of is helping teams out with "systems engineering fundamentals" - usually I find a lot of teams struggle to set up requirements or process that actually works for them. They typically know they should have some kind of docs, and maybe some kind of architecture document or diagram, but more often than not they either don't have anything like that, or if they do, they don't really find a lot of value in it (or time to do it).

I talk about a lot of this in this post. For these teams, I usually help them find the "small effort docs/decisions they should document" that end up having pretty huge payoffs in terms of keeping them on the same page, or make it easy for them to communicate to project managers, other tech teams, marketing folks, or investors on what they are (or are not!) doing, what state its in now, and what to expect from it.

The combo of "bringing things up" and "planning things out" is usually when I get brought in pretty early in a project: I tend to help teams figure out the scope of what they are trying to do, identify the "risky bits" that need to be built/experimented first (usually to figure out what requirements/capabilities are actually reasonable in practice), then planning out a "good enough for now, to be revised when we know enough to make better informed decisions" architecture and development roadmap that gets refined over the project.

So, in short, I might be a good person to call when you (or one of your teams):

  • Needs help building a very specific thing, either very quickly, and/or very reliably, and/or very performantly
  • Needs help getting a very weird or very complex (or very complex and weird) thing working or integrated, especially if that thing is hardware
  • Needs help getting "unstuck", or is feeling lost, and could use someone to help them step back and figure out what the plan needs to be
  • Needs help de-risking a project by proving out technical concepts, or ensuring specific assumptions are true before you start building on them.

Thanks for sharing! I think I might have actually followed you over here from Twitter, which makes me think I was either following you because of either Ferrous System's work on ESP32 or maybe just person doing cool stuff with Rust in general (postcard is what immediately comes to mind, but I also know of Knurling and been following your work on Forth3). It's just been a while since I've touched Twitter (honestly for the best).

But that really does help (thanks for reminding me of the "systems engineering fundamentals" post!). I wanted to be sure whether it would be to ask you "hey, we need help bringing up secure boot on the AST2600 for OpenBMC" or "help, I tried to write a state machine in Rust and it was a terrible mistake" or "we're trying to cram an i3c-like bus through the extra serial lines on a QSPF-DD connector and we need to write some drivers for Linux and an MCU on either end" or "we're thinking of using Rust for some custom logic in a seL4 hypervisor, is that a good idea?". It sounds like the answer would be "all of the above".

Funny enough, I'm going to be in Berlin in a few weeks (~22–27 May), and I'm always happy to chat over a coffee. I've been pretty bullish on Rust (I made a push to trial it's adoption about 2 years ago) and so far it hasn't blown up in my face. I suspect it's going to be a significant part of our future.

So, I'm sure they were just examples, but I actually really love problems that require a little research, and these answers might be useful for calibration purposes.

secure boot on the AST2600 for OpenBMC

This isn't something I know off the top of my head! I'm aware of secure boot (but haven't implemented it), haven't heard of AST2600 (but have worked on Cortex-A devices before), and am aware but haven't worked with OpenBMC. So, I probably wouldn't be the fastest to do it, but I'm pretty good at reading datasheets and protocol specifications, and figuring out what needs to be done pretty quickly.

That being said, embedded tends to have so many niches, it can usually be pretty hard to find someone who knows EXACTLY all the pieces at any one time anyway.

help, I tried to write a state machine in Rust and it was a terrible mistake

This kind of problem I can probably help with pretty quickly. I write a lot of state machines, and some of them have gotten terrible. Lots of opinions and teaching experience here.

we're trying to cram an i3c-like bus through the extra serial lines on a QSPF-DD connector and we need to write some drivers for Linux and an MCU on either end

That sounds like a very fun problem! I'd probably be better at the MCU end than the linux kernel end (I'm mostly a linux userspace user/dev), but could probably help block out what needs to be done (vaguely) on the linux side, or what hardware bits on the linux CPU would be helpful.

we're thinking of using Rust for some custom logic in a seL4 hypervisor, is that a good idea?

I'm pretty vaguely aware of how seL4 and hypervisors work in general, but kinda like the first question, i'd have to do some research to get oriented here. I do love problems like that though :)

It sounds like the answer would be "all of the above".

Generally, all of those problems sound interesting! I'm more than happy to admit the things I'm not knowledgeable in/good at yet, but I tend to do pretty well at learning and putting the pieces together quickly. Usually that's good enough.

I'll ping you in the other thread about meeting up. Thanks again for asking, my previous comment has basically become the first draft of the page I was struggling to write :)