HN user

justinlloyd

2,383 karma
    Location: California

    Willing to relocate: No

    Remote: Remote only

    Résumé/CV: https://justin-lloyd.com/ (psst, scroll down and right)

    LinkedIn: http://linkedin.com/in/justinlloyd

    EMail: justin@justinlloyd.io

    Technologies: Rust, C, C++, C#, Python, Ruby, Kotlin, Java, Go, Assembler, OpenCV, OpenCL, OpenGL, OpenAI, OpenCompute, MCT, TensorFlow, PyTorch and more
Autonomous vehicles, robotics, computer vision and machine vision, virtual reality, augmented reality, SLAM & D-SLAM, multiple sensor fusion, deep learning, neural networks, artificial intelligence, GPU programming, Mediapipe, embedded firmware, board bring-up, Linux, macOS, Windows, iOS, Android, high-speed/low-latency message queues, high-frequency trading, trading prediction systems, super-low-latency video processing/streaming, optimization, build pipelines, kernel drivers (Windows, Linux, macOS), low-level systems programming, software tooling development, direct CNC robotics programming, game engines & video games, blockchains & cryptocurrency, on-chain programming (ETH & Chia & Solana, Lisp, Solidity, JVM), lots of other stuff.

Masters Computer Science, Masters Artificial Intelligence, Masters Business Administration, Masters Project Management, Masters Entrepreneurship (Marketing & Communications) and a few other qualifications in electronics, contract & intellectual property law, accounting, marketing, project management and HR.

Posts7
Comments648
View on HN
    I'm a seasoned generalist with deep focus in certain areas such as game development, performance engineering, systems engineering, low-level engineering and embedded software.

    Location: San Francisco, CA and Los Angeles, CA
    Remote: Yes, hybrid considered for the right money.
    Willing to relocate: Not at this time

    Current side-project: Deep internals work on VS Code Web: using quilt to maintain patches against upstream, extending it with inline agent panels and custom completion providers, backed by a bespoke C# server replacing the Node.js REH (similar in spirit to Coder's Code Server or OpenVSCode-Server).

    Technologies: kernel drivers, systems engineering, video games, AI, LLMs, caching, graphics, rendering, assembly languages, generative AI, heavy focus on back-end systems, and to a lesser degreee, full-stack.

   - Languages: C++, C, C#, Go, Rust, TypeScript, JavaScript, Python, Ruby, Lua, + more.
   - Backend: node, FastAPI, Django, PostgreSQL, mySQL, RocksDB, GraphQL, SQLite.
   - Engines: DumpsterFire, UnrealEngine, Unity3D.
   - Platforms: Windows, macOS, iOS, Android, Linux, SONY PS2/3/4, XBOX360/One, Switch, embedded, web
   - Frontend: Next, React, Vue, Pixi
   - DevOps/Cloud: AWS, Docker, Kubernetes, VMs, Vagrant, VMWare, TeamCity, Jenkins, CI/CD
   - AI/ML: Model training/tuning, LoRa, RAGs, PyTorch, TensorFlow, SciKit, OpenCV, etc, etc.
   - LLM Integrations: OpenAI, Gemini, Claude plus many others, local and cloud.

    Résumé/CV: https://justin-lloyd.com/ (PDF at the bottom of the page)
    Email: justin@justinlloyd.io

    MSc in CompSci and MSc in AI/Robotics and an MBA

    20+ years of experience in performance critical systems engineering, video game development, embedded (C/C++/Rust/Asm), low-level engineering & AI, full stack and high performance backends, leading and managing multiple teams.

    Open to full time or contract but prefer contract. Looking for something low-stress so flexible on money.
    I'm a seasoned generalist with deep focus in certain areas such as game development, performance engineering, systems engineering, low-level engineering and embedded software.

    Location: San Francisco, CA and Los Angeles, CA
    Remote: Yes, hybrid considered for the right money.
    Willing to relocate: Not at this time

    Current side-project: Deep internals work on VS Code Web: using quilt to maintain patches against upstream, extending it with inline agent panels and custom completion providers, backed by a bespoke C# server replacing the Node.js REH (similar in spirit to Coder's Code Server or OpenVSCode-Server).

    Technologies: kernel drivers, systems engineering, video games, AI, LLMs, caching, graphics, rendering, assembly languages, generative AI, heavy focus on back-end systems, and to a lesser degreee, full-stack.

   - Languages: C++, C, C#, Go, Rust, TypeScript, JavaScript, Python, Ruby, Lua, + more.
   - Backend: node, FastAPI, Django, PostgreSQL, mySQL, RocksDB, GraphQL, SQLite.
   - Engines: DumpsterFire, UnrealEngine, Unity3D.
   - Platforms: Windows, macOS, iOS, Android, Linux, SONY PS2/3/4, XBOX360/One, Switch, embedded, web
   - Frontend: Next, React, Vue, Pixi
   - DevOps/Cloud: AWS, Docker, Kubernetes, VMs, Vagrant, VMWare, TeamCity, Jenkins, CI/CD
   - AI/ML: Model training/tuning, LoRa, RAGs, PyTorch, TensorFlow, SciKit, OpenCV, etc, etc.
   - LLM Integrations: OpenAI, Gemini, Claude plus many others, local and cloud.

    Résumé/CV: https://justin-lloyd.com/ (PDF at the bottom of the page)
    Email: justin@justinlloyd.io

    MSc in CompSci and MSc in AI/Robotics and an MBA

    20+ years of experience in performance critical systems engineering, video game development, embedded (C/C++/Rust/Asm), low-level engineering & AI, full stack and high performance backends, leading and managing multiple teams.

    Open to full time or contract but prefer contract. Looking for something low-stress so flexible on money.

Los Angeles. Missing both my front gate and my back gate, and the temple bell just inside, and the kabukimon that leads to the engawa, covered by the nokishita. Shikata ga nai

My second time with "unlimited PTO." Two days in eight months. I attended a funeral. "There's never enough time. We need to get this milestone shipped. Maybe next quarter we can build in some slack for you."

Same here. It's just wishy-washy uncommitted phrasing indicative of "don't make a strong opinion that is polarizing" that is so characteristic of AI generated text. I used to use an online writing service for content many years ago and one of the hallmarks of "I'm doing this for a little extra money" and "I'm a pro writer between gigs" was the "in conclusion" and "therefore" and the three part school essay structure. It screamed bad writing, and I am seeing the same kind of flags in AI generated text too.

Am I supposed to take this article seriously?

I see the author is perhaps ironically rejecting a narrative by using another narrative to advocate for their position.

The author is sort of implying that there's harm to society and the individual by engaging in these narrative arcs without any actual evidence to support their position. Merely a "I feel" and "might" and "could even become dangerous."

Way too many wishy-washy phrases attempting to soften their opinion, but then goes on to present a false dichotomy of absolutes vis-a-vis: You either embrace the narrative structure and have it destroy you, or you reject the narrative structure and live a care free life.

And because of the uncommitted weasel phrases this entire article has the hallmarks of AI generated slop that someone had to rush through for publication because they procrastinated. I'm flagging this one as "yawn."

When a cat can go between two openings that are too small for the cat to pass through and the cat isn't being observed is what's interesting though and nobody has yet explained that.

To difficult to swat flies with and the hired help cannot spread them on the kitchen floor after mopping so that the floor dries faster.

The kind of ebook reader you open to the crossword puzzle and say "harrumph" an awful lot whilst sitting in your high back wing chair in front of the fireplace where discrete employees refill your brandy snifter. You may occasionally bend down one corner of the ebook reader as you peer askance at the likes of who they are letting in these days. There is a member of staff whose sole job it is to stand nearby with a real news paper and snap the pages to show your displeasure as you return to crossword. Five down, "someone who adds nothing to the conversation beyond pointing out the minor flaws in another's statements." Begins with P... With P... Hmmm...

;-)

I kind of like this A1 ebook idea. Time to get out the wallet.

The fact that telex was immensely faster, lower bandwidth, operated on terrible PSTN networks (not regular telephone networks) with absurdly low quality, could work internationally with no special hand-off equipment or special fax lines being required, and had multicast and store-and-forward built-in to the protocol and had an image printer protocol extension that was superior in quality to fax and again, required no special equipment for international transmission, could work even when the mains electricity was down (phones and telexes were on separate networks), teleprinters could be powered directly from the telex connection, could work over low bandwidth ham radio connections, and is still in use today in certain parts of the world where it is critical the information gets through, there's a reason that a lot of companies still used the telex well into the early part of the 21st century.

Not meant as a explaining type of response, merely as a "this is an interesting piece of useless information."

Have been running ReFS on a drive on my Windows 10 workstation for about three years, and recently started using a dev drive equivalent on Windows 10 for the past two months. Our Unreal Engine project is quite large, 600+GB straight from the P4 depot before building. I need to keep a few separate workspaces around, one for current development work, one for swarm reviews, one for "let me test out a thing that might break" because as we know, branching in Perforce can quite painful, especially on large depots. At one point I needed to have dozens of workspaces synced to specific changelists whilst we hunted down a bug in one of our levels.

ReFS, with block de-duplication and LZ4 compression has reduced the per-workspace footprint to around 10% of what it was previously. Decreased build times by around 5% and decreased archive, stage and package times by about 80% by deploying MSBuild SDK CopyOnWrite. I also moved the DDC onto the VHDX where the project resides which has further reduced the footprint of the project.

Windows 11 canary channel (still in canary I think) has a modified Win32 that supports CoW FileCopyEx. You can get similar gains by other means on Win10 and Win11 by using ReFS CoW aware utilities.

Have used XFS, BTRFS, APFS and others extensively over the years, so I am glad that Windows is finally getting in on the action.

Grew up in a 15th century farm house that was built decades before Columbus set sail and re-discovered the Americas. A few years ago the wife and I were contemplating buying a property in England where the realtor enthusiastically explained that "the plumbing was modernized in the 16th century."

Cat as a Service 2 years ago

There are limitations to the bandwidth available in the cat distribution network which I don't think have ever been studied adequately. There's probably a grant that could be applied for in there somewhere. There's probably some interesting research to be done in cat distribution network congestion too.

I did some computer vision research, and an unpublished (though posted on a blog) paper in the area of feline toe bean rejection on a multi-touch display in a predator/prey simulated environment, i.e. a touch screen display with a virtual mouse (prey) interacted with by a real cat AKA "an expensive cat toy."

Have been running TimeSnapper non-stop on my Windows laptop and Windows workstation since... January 1st, 2006 at 11:16AM. That's almost 18 years of desktop capture. Crazy to think about that. I may have been running it prior to that, but that's the first recorded date on my saved captures. 50% resolution. 60% quality. JPEG. The entire screen and any attached monitors. Hundreds and hundreds of gigabytes of my daily professional and personal life. Captured once every 10 seconds. The movies I've watched. The games I've played. The thoughts I've had. The code I wrote. All of it captured.

Prior to TimeSnapper for Mac I ran my own little script, and a companion one for Linux. Now I have TimeSnapper on my Macbook Pro too. And if you ever create a Linux version (or want someone to create a Linux version), let me know. I'd be happy to beta test.

I've lost count of the number of times that TimeSnapper has saved my arse, either with accidentally deleted data, finding an obscure web page, proving I did something on a specific date/time, or that something happened in the way I say it did, or recovering the keys to a small amount of Ethereum and Dogecoin stored in a wallet.

Thank you for TimeSnapper. It has been interesting to use it for that length of time.

"Four weeks work in 9 minutes" captured by TimeSnapper where I create a video game (or three) in October of 2012 http://www.otakunozoku.com/video/working.flv

Sorry, it's an flv, along with an onion on your belt, it was the fashion back in the day

Sounds like you have a chip on your shoulder about something.

Why education? Because I was told by teachers I would never amount to anything and I dropped out of school.

I wouldn't say anything to my younger self. I'd just kick my younger self's ass for wasting time and opportunity and listening to adults.

There you go, you can add a few more I/me/mine's to your total count.

I love functional prop projects like this and reading through the build log.

How far are you going for the rugged vs prop aesthetic? Have you considered alternative form factor screens? Have you considered something else than an RPi that could work with a GPT/LLM such as an NVidia Jetson (yes, I know, expensive) or a separate compute module? Do you store just things like Wikipedia or a bunch of PDFs such as "Where there is no doctor?" and "Wilderness Survival Guide?" along with other disaster recovery books?

I missed this project the first couple of times it was posted so glad to see if pop up today.

It's simply small amounts of marketing, continuously applied. Why would that be unhelpful? What in any of my statement was "bragging?" The only people who care about any education I ever got was someone in HR who needs to check a box. I get hired for the stuff I have built and can build, not what I learned in a classroom two decades ago that I have most assuredly forgotten by now. I built a couple of small side projects, I put them on github, I took photos, I showed the project to people on LinkedIn, I got hired. That's what works, for me. If anything, I'd say getting a formal education beyond high school is probably the most worthless thing I've ever done in my life to advance my career.

I hooked up a small label printer to a custom application an LLM running on a Jetson the other week that now lives in my workshop permanently. "Hey jiji, I need a label for this piece of 3/4 birch. It's the left panel of the upper cabinet for the 3D printer. 14 inches by 23 and a half inches."

And the LLM spits out the parameters that invoke a local function to print the label which I can stick on the material to identify it.

It's only a small thing, but very much reminded me of the holodeck in TNG when I first started using it.

I am currently working on a AAA FPS MP RPG - we're a well funded team with decades of experience in big studios, but not yet announced. The very large world is being generated by a variety of DL & ML algorithms. Thousands of buildings in a city with the interiors of each fully realized. This research work in the paper is almost precisely what we're doing and I suspect the AI team on the game are even now cribbing notes from the paper.

"Having a github is worthless!" For some, not for me.

"Having a personal blog is worthless!" For some, not for me.

"Having a LinkedIn profile is worthless!" For some, not for me.

"Having a portfolio website is worthless!" For some, not for me.

"Having a degree from anything but a top 10 university is worthless!" For some, not for me.

"Posting on <social media> is worthless!" For some, not for me.

"Going to network meetups is worthless!" For some, not for me.

"Posting on HackerNews who wants to be hired is worthless!" For some, not for me.

Because the world is made up of many voices, you will hear many opinions of what is useless, and what you should do. Much like the apocryphal wife and husband and their mule.

When I talk to a lot of entrepreneurs and indie game developers about their idea, frequently I hear that advertising or marketing is worthless, they built-it, made a singular post to their 12 followers on Twitter/Instragram/whatever, and nobody came, and then they whined about the lack of response on whatever sub-reddit they think is appropriate.

If you throw a small stone in to a large pond, the ripples it produces will hardly reach the shore, if at all.

If you have a big budget, or a sure-fire viral idea, you can go big all at once. Splash! And the ripples will most certainly reach the shore, and people will, for a time, watch them come in, until the ripples stop, and the people go find something else to watch.

But if you take a dump truck, and poor lots and lots of little stones in, continuously, at different spots in the pond, all those ripples will make interference patterns, and some of the those ripples will reach the near shore, where this crowd of people are standing, and some of the ripples will reach a different shore, where a different crowd of people are standing.

I build interesting and fun side projects. Lots of little pebbles. I put them on my github, I take photos, and write up notes, and talk about them at meetups and conferences when I run into people, and I post about my projects on a big pond called LinkedIn, and a few other smaller ponds, ponds where the people who make hiring decisions are standing on different shores.

And then, every once in a while, without even trying, someone reaches out and says "would you like to come and work with us on this interesting thing we're building?" and a few casual chats for an hour or two that don't involve any leetcoding or livecoding or whiteboardcoding, and if we get a good sense of each other, we might both say "yes." Why, they might even ask for a resume or a C.V. to keep HR happy, long after the decision to hire me has taken place.

So are all of those things that we could do to get hired worthless? Yes. And do they help in getting hired? Also, yes.

You know what I personally do find worthless? Applying for jobs through the normal channels with the rest of the madding crowd that all so desperately want to stand out with their cover letter and their resume and their leetcode studying.

I'm not saying my way works for everyone or anyone. It works for me. Some will loudly proclaim it's worthless. Others will complain that it sounds like a lot of work.

Well, you can apply to 300 jobs, and get 300 rejections, and then sweat bullets when interview time comes about whether your DS&A leetcode skills are up to par. Or you can have someone reach out to you for a chat, a coffee in a lobby, and an hour later you're shaking hands on a good offer.

There will be people in the comments who will say "Well I don't hire that way." And others will say "I would never hire without testing your DS&A!" And others will say "I never looked at your github/linkedin/whatever. There's no time! It's worthless!"

And to them I respond "That's okay, because I'd never work for you. These guys over here are happy to have me. Have interesting problems you see. And are paying more than you are willing too."

A couple of personal experiences from the ancient world:

I wrote code for a microprocessor that did not have a stack as an actual concept. There are still embedded processors out there today like this. To work around this you stored a value at a zero page location, and when you wanted to jump to a subroutine, you would first load up this value from zero-page, advance it, put the program counter into the memory address now pointing to a new memory location, then execute a simple go to, and at the end of your function, to return, you would load up that value in zero page, then load up your return address, decrement your pointer, store it back to zero page, then go to back to the calling function. Every value you wanted to pass to the subroutine would be either in one of your three registers, or you would pass those values by storing them in memory pointed to by your zero page value. The 6502 offers nice instructions to do these very operations, by turning the assembly/machine code into microcode that does the exact same thing, but more succinctly.

Another trick I used was bank weaving. You only had a limited amount of addressable memory, but you could bank switch ROMs, so you'd write your code to have it reside at a fixed memory location, and another chunk of code at another fixed memory location in a different ROM bank, then your first code would execute down to a point where it would switch banks based on a condition, and when the other ROM bank switched in, your alternative code path would be waiting for you, you'd execute that, then switch the ROM bank again back to the first one, and the PC (program counter) will have advanced several hundred bytes possibly, so you'd return to a point in your code, back in the first ROM bank, that was a completely different point in memory, but still the same calling function.

A few years later I used a similar technique on a large text adventure game, a compiler and a word processor, where the core of the program was always resident, but chunks of code could be loaded in at fixed memory locations from disk. So if you ran a spell check, the spell check functions would load in at a known memory location, various bits were set in RAM to indicate which functions were resident, and the application could perform the spell check, or run the logic for a part of the text adventure game. And functions would automatically unload to make room for new functions based on the last time they were invoked.

I wrote code for a Timex processor that had a "execute the instruction at the following address" opcode, so effectively your instruction here, would execute that instruction over there, but only for one instruction. It made writing the equivalent of switch/case in assembly interesting, and also good for self-modifying code.

Zero-page on some old CPUs was a faster RAM, a few dozen bytes, or even 256 bytes, so if you had a tight loop, you'd copy the code into zero page, perhaps having to move other stuff out of the way first, and execute it there.

I wrote a word processor that stored only a tiny fraction of its data in under 3KB of RAM, the rest was stored on big floppy disks. As you scrolled through the text, it would page through the pages (memory pages, not pages of text) on the floppy disc, but the memory pages were not stored continuously, either in RAM or on disk. The RAM acted more like a cache, and a couple of memory pages were reserved for edit operations and even copy & paste. To copy and paste entire pages was fast, you only had to adjust a few pointers in RAM and on disk, plus a few hundred bytes for head and tail page operations so moving large blocks of text around was very fast, and inserting large blocks of text, or even just typing, was very fast, because the buffers were quite small. It was the only word processor I know of that came with a disk defrag operation built in, but the company called it "housekeeping" in the manual with no explanation to the end user of what it was doing. I learned a lot about "don't mark that as deleted until you are damn sure the operation is completed and you've verified it worked."

I did a 6507 and Z80 emulator on the MIPS R3000 that ran the code in a very pedestrian way, but as the 6507 or Z80 ran through the code, each memory address was added to a list, and the 6507/Z80 opcode found there was translated into an intermediate assembly language, and then I post-processed that intermediate assembly into R3000, which gave me a huge performance boost; post-process dynamic recompilation effectively. I had to do other sneaky things with it too because the original hardware raced the electron beam whereas the target platform just had a big VRAM buffer. Used the same trick to port 6507 code to an early ARM processor for an old handheld too.

There's a lot of other tricks we used to in the before-times, such as LFSR and LCG to permute game objects in seemingly random patterns, cheating on distance checks by counting the clock cycles between two objects drawn on screen, low-rez bitmaps of the screen to speed up collision detection, compiled graphics/sprites, even sprite blitting routines that were hard-coded to specific pixel offsets.

From one dyslexic to another, who never got the option to even use a computer in school or college and instead was forced to write out everything long-hand, thank you so much for this.

I use voice-to-text in the workshop and when taking notes and reviewing a PR. And all the current options are pretty much what you would expect. More focused on accuracy, which is usually quite poor, which, to paraphrase, "It's Erin with an E. Oh for **s sake, Erin. ERIN! E. R. I. N. <pause> N. I said N. Eh-rin. Fine. Whatever." so anything that can improve on that experience will be immensely helpful.

Looking forward to seeing where you go with this, and I hope at some point you make a native desktop application.