My Twitch Live Coding Setup
medium.com
medium.com
So I took livecoding pretty seriously for a while. I recognise that Noopkat is a pro at this and is one of the most consistent live coders I've seen in a while. I need to pop into one of her streams one day to see how it's evolved.
From my past experiences of her stream, my own streaming and others' streaming it feels like there's one big unsolved challenge in livecoding.
Coding hasn't lent itself well to "liveness".
At least in its current form, sitting down in the middle of a session of someone coding and trying to figure out what they are doing is HARD. It's not like a game where there's a dashboard that carries the score and you can gather all the context you need in under a minute. When joining a stream of live coding, the questions to be answered:
- what project is the person working on? - what "feature" are they working on? - what are they trying to achieve at this very moment?
These questions are similar to a game
- what's the game the person is playing/or what character is the person playing/what teams am I looking at? - what's happened so far? - what's about to happen?
Summarise these as
- bigger picture context - current historical context - immediate and future intentions
And all of this should be gathered in about a minute with no interruption to the stream(er).
So far, no live coding experience has been able to satisfy this. I do believe that this is one of those cases where technology needs to solve the challenge. Either in the form of a new livecoding specific platform or better integrations in twitch/other live streaming platforms.
> what project is the person working on? - what "feature" are they working on? - what are they trying to achieve at this very moment?
I used to do a bunch of livecoding myself, actually.
I agree with you that most programming does not lend itself too well to livecoding. But there is one niche that I believe lends itself extremely well to live coding.
This niche being whiteboard programming questions/interview practice.
In this niche, the whole point of the exercise is to work on self contained problems that can be solved within 30 minutes, and to talk out loud to your audience the entire time.
Was pretty fun when I was doing it. I was doing it mostly for practice, and now I work at twitch because of it.
And if I ever create my own startup, it will probably be something like "running a recruitment firm on twitch, by getting people to do interviews live".
Edit: Videos of my old stream are here: www.twitch.tv/stale2000/videos
Mixer has done interesting things in regards to interactive livestreaming. It seems like progress is being made towards giving users more ways to interact, it's just taking a while. Perhaps because we're not sure _what_ to make interactive?
When I join a stream of someone playing a strategy game which also has a tactical layer, you are usually equally clueless as to what is going on. Certainly at the strategic layer but also as to what a good outcome of a tactical encounter is.
I'm not sure how technology can fix this. On the other hand, other spectators can usually pretty easily do this in chat.
Communicating what you are doing while you are doing it is a extremly practical way to focus your thoughts. That kind of rubber-duck like process works better if you have somebody concrete you can adress (e.g. a youtube audience, or a good friend of yours), because you won’t get yourself get away with cheap excuses that easily.
If you have to talk about a thing it will immidiately become clear which parts of the code you have internalized and which parts you have a harder time wrapping your head around.
There are "no commentary" streams, "some commentary" streams, "backseat gaming/coding" streams where the streamer is asking viewers how to solve a problem and then implementing their suggestions, streams discussing metagame/architecture of the code, tutorials for beginners, and streams where the code/game is just an excuse, and the real focus is on interaction with chat and random topics.
If you're an average codemonkey/noob in a game - few people will want to watch your no commentary stream; if you're John Carmack/starcraft god people will watch you silently doing git merges/practicing split micro over and over for hours :)
Alternatively if you're handling it all yourself as the streamer, something like an emacs buffer with org-mode that you try to periodically update and leave on the screen.
> So far, no live coding experience has been able to satisfy this.
You are right. But some are interesting for the purpose of inspiration, or even entertainment. I've watched @Swizec recently and also the guy who created minecraft, mojang, had some epic livecoding years back.They're similar to cooking shows on TV or youtube. You might not be able to do the stuff yourself, but just watching someone knock down their immediate obstacles can be inspirational and promotes confidence to emulate their approach for one's own projects. It is also heartening to see that elite pro's struggle with the same little snags that everyone else does.
The context and intent is, of course, important if you want to reproduce the exact same project, but that would be less interesting, I think.
Overall though I don't think it's worth it. You get the usual lurkers that come say hi, and then a bunch of drop-ins that have language questions, stackoverflow type questions, or start rambling about technological choices which eventually distract you from your burning floor todo list staring back in your eyes as deep as the abyss.
Fun though, but counter-productive.
what do you mean?
And a couple Mormon developers I know, think that the concept of a personal Holy Ghost, which is a belief of the Ladder Day Saints church is the same kind of assistant for moral decision making. We all perform differently when we know someone is paying attention.
[1] https://www.urbandictionary.com/define.php?term=Ladder%20Day
And then there are the backseat coders who only sit in the channel to tell you how they would code it... they're fun.
The night of launch was a tough night since I didn't understand at the time how to deploy on Azure.
Unfortunately I didn't record at all. It would've been nice to have something like that, even if no on watched. Even if one person watched, they would see that sometimes the "easy" thing takes a lot of persistence and nail biting to make it happy for some.
I agree, it helps keep you on task because you feel that you owe it to your "fans" to put on a show. Maybe from no on I will stream just for the hell of it.
Do you have a project by the way?
I didn't even know livestreaming code was a thing aside from pre-scripted tutorials. I'll have to watch one of the streams, because the hands-on nature is probably good for learning the quirks of various techniques that you don't get from programming books.
It's too bad I spend 80% of my development time reading documentation and chasing down bugs.
Solve your problem then write code. Problems solved by writing code almost always ends up with crappy / messy code / difficult to maintain code.
The coding should be the easy bit, it's just implementing your solution in a language you know. It's basically just typying.
And yet I still don't get live coding. I have about as much interest in streaming my programming as I have in having a coworker watching me work over my shoulder: zero.
I'd love to know what people get out of this. For me the sacrifice to flow is far too great for what benefits I perceive I could get through collaboration.
I do see the potential in social network / community building though.
I thought you use "they" when gender is not clear as to avoid assuming it's a guy.
That video is also an example of unexpected issues that can only happen when livecoding.
I rolled that out into a full blog post (https://minimaxir.com/2018/07/imdb-data-analysis/), which admittingly was faster to code while not being on camera.
For that reason I also decided to go with Youtube - there's far less casual drop-ins and the people who join tend to be genuinely interested in what they're getting into, even though the traffic is lower (I experimented with Twitch for a couple weeks before going this route). Also it's easier to permanently archive.
Fwiw the topic I'm learning about is Rust + WebGL -> WebAssembly... I typically stream on Sundays but often enough, life takes over and I miss a week (this is part of what's making it really hard for me to learn - there's not enough momentum). Feel free to drop in: https://www.youtube.com/channel/UCGKhwtFOUlzj4VILDU0efkQ/liv...
That said - I agree 100%, I don't know why anyone does watch, it's probably super boring unless you're in the exact same boat! ;)
The experience for me was really engaging, and it gives you a kind of energy to keep going.
If you struggle to code outside of work, I think twitch streaming can give you the power to keep going at it without feeling burned out. Without streaming I find it is super easy to switch off and turn on some youtube video or play a game.
She is pretty awesome and has a significant following helping people with fun projects.
I don't think the stream would work as well if she was a C++ developer at a giant company just streaming her day job.
I've streamed some Wordpress Development I've done, and its surprising the amount of people who hop in and ask questions. Usually because they are wanting to create their own plugin for the first time, or have a specific problem that they are hoping the streamers project will give an insight on.
Anything that touches Dates and Calendars seems to get an audience really fast.
* I can never help these people, and probably shouldn't be streaming.
I strongly disagree with streaming at 720p30: the low resolution combined with what's said above makes it very hard for the viewers . As long as your upload bandwidth is sufficient (>6 Mbps) and your computer processing power is sufficient (quad-core CPU), I do recommend 1080p60 for future-proofing. Your viewers can lower the quality if necessary, and the exports to YouTube maintain 1080p60 as well. (EDIT: Maybe not: transcoding is apparently not always available for smaller channels, so bandwidth for users can be a concern)
It's worth noting the Streamlabs Alerts are just HTML, and as a result supports as many CSS hacks as you want (e.g. fonts/sizes/colors)
Hmm, I could have sworn that I had the options available when watching smaller channels, but they may have been Partners.
> There's zero reason to run 60FPS for a text editor
It does make things surprisingly more fluid, especially for window navigation/scrolling (although you get into the 30fps vs. 60fps debate). If you're using a webcam that also does 60fps, it makes it consistent too.
It's mainly done for non-partnered channels with high view count (at latest after requesting it manually).
Maybe the system's heuristic just doesn't really remember sessions after some hours have passed so it needs to see a high view count again before turning on transcoding (after the restart).
As someone who makes videos, I'm always jacking up the font size for tutorial videos.
I normally keep my editor's font size at 11px pixels, and it lets me easily fit 3 code windows + optional sidebar at 80 characters, and I can sneak in a terminal in 1 spot on demand without it bothering me too much. Then I have a browser and documentation open on my 2nd monitor. It's a very productive set up running at 2560x1440.
But in "video mode" I have to record a 1920x1080 area of my screen, and on top of that boost the font size of my editor and terminal font size to 40px. It basically means coding with 1 file visible at a massive size. Even splitting my browser and code editor side by side isn't a good idea most of the time when recording videos because it hides too much of the code. Then for documentation, that can't sit on the 2nd monitor because if you're talking about it, it needs to be on the streamed monitor.
It's like coding inside of a coffin instead of a nice 2 bedroom apartment.
If I go back to full size, it takes enough space that my shoulder hurts from the off-center kb/mouse, and it makes my fingers work harder and slower to reach the numpad and function keys.
I used to have a full size mechanical, switched to a 60%, and more recently an asymmetrical split 5x6+5x7 keyboard. The two small ones run a fully programmable FOSS firmware (QMK), so I can get keybindings that help me work faster.
The F-keys are used rarely enough that it's fine having them replace the top number row on the 2nd layer. I have a button to toggle to the 2nd layer, and two buttons that activate the second layer when held (one where the Fn key is on laptops, another where Enter is). On the 2nd layer, HJKL are arrow keys, WASD + QE + RF are also arrow keys + home/end + pgup/pgdn. The 2nd layer also has volume+media keys, print screen, and some other stuff on it. So I can navigate around the computer much faster since my hands never ever leave the home row.
The split keyboard is ortholinear (keys arranged in a grid, not staggered). I've had Caps Lock replaced with Escape for a long time and it's way superior to having escape above the tilde. There's no spacebar, all keys use 1 unit on the grid. My left thumb has space and backspace right below it; the right thumb has space and enter below it. So esc+bksp+enter no longer strain the pinkies, and they are faster to use. Aside from that it's pretty much a normal keyboard; however the split does make it a fair bit more ergonomic - both halves can be moved around and tilted.
40% keyboards without the number row on top, on the other hand... I don't know how anyone can use those for real work.
Also, I haven't needed to do it, but you can place on your second layer (or dedicate a key just for it) a key that will take you to the third layer. Put a numpad + mouse keys + F-keys on the 3rd layer and it's perfect for data entry. Or numpad + WASD + arrow keys, so you can play the occasional game which requires both WASD and arrows.
With all the distraction and talking, with smiley and responses, I don't think anyone can really deliver anything properly on time. Some people play games, some use different tools for streaming. This is one of those.
Some people love multiple monitors, like many of my colleagues whom I respect despite using multiple monitors /s. But I have yet to understand how multiple monitors are inherently more efficient than e.g. multiple desktops, or switching between windows, especially when I'm wearing glasses. (This is not an invite to try and "convince" me, I've tried.)
Similarly, some people simply prefer not having to move their hands as much with the smaller keyboards, including - what a surprise! - people with smaller hands.
What I really don't get is why you'd need to put down other people's choices to validate your own.
Didn't you just do the same to my comment?
Keepass (or another offline pass manager), Skype, multiple shells open, ftp manager, notepad (or whatever you call it for coding), browser, some Spotify (okay I get this one is not a must), and sometimes calculator.
I can't even imagine not having a numpad like she doesn't have. In our work environments, everyone has a 2nd, 3rd, or 4th. I've seen even 6th monitor. Her system is for streaming, and I don't think while streaming anyone can get anything done properly. Let alone the privacy of the company you are hired to do the job.
My wrist pain got better when I ditched my number pad.
Lots of people have reported the same.
I also use 1 monitor, I use to use a lot, now my main monitor at home is an ultra wide. It provides less real estate than 2 monitors, it is about 1.5 monitors in width, but unlike dual monitor setups there isn't a line in the center of my vision and my main work window is straight in front, with emulators and terminals off to either side.
But I also have a setup with just 1 1900x1200 monitor. Honestly it doesn't make much difference. I am not using keepass at the same time I am coding, while I am coding I am writing code. Heck zen mode in various editors, full screen no menu bars, exists for a reason.
The OSs we all use today were written in text mode editors. Much of the work is still done in text mode editors (I know quite a few devs at Microsoft who use Vim!)
Don't judge others for doing what works for them.
FWIW, Visual Studio Code does most of what you have, all in one UI. It supports shells, scratchpads, and expression evaluation in pick your favorite language. I use deployment scripts instead of FTP, running from a console, so again one less thing.
IMHO multiple monitors are great for those times when I am manually taking data from one place to another, or for when I am live viewing changes.
I have never had a productivity boost from seeing email appear in the corner of my eye. How in the world is that good for coding? Likewise for a blinking tab in Slack or Skype. I'll check Slack once an hour or so, but I honestly don't want to see the notifications while I am focusing!
Let people do what works for them.
I don't like a 2nd monitor -- having one makes me rotate unnecessarily and doesn't provide anything that multiple desktops and generally multiple windows don't provide.
I prefer a tenkeyless keyboard for everything -- the less I have to move my arm to reach the mouse the better.
I think 3 row keyboards are too few keys, but the number row is actually pretty hard to type, so eliminating it isn't necessarily insane. I have a number row on my keyboard but I also have "raise" and "lower" layers, one of which gives you a number pad on your right hand. I find the numpad easier to reach than 1 and 0 and try to use it all the time. I have symbols mapped to a layer, so the crucial ones are on home row, with the other ones on the letter keys below the number that normally types them, with some exceptions for keys I've moved elsewhere. I also have dedicated keys for := and != which is quite enjoyable. (You can see the complete map at https://github.com/jrockway/qmk_firmware/blob/master/keyboar...)
Basically, if you're programming you are probably typing a lot of symbols. On a traditional qwerty layout, all those symbols are shifted AND on hard-to-reach keys. Moving them anywhere else is an improvement. Having more keys is good for infrequent things like arrow keys, page up/page down, insert/delete... basically OS functions that you use during normal usage of your computer, but that you've programmed any application you actually care about to not use. (In Emacs/Vim you aren't using arrow keys to move around your text, for example. Or at least I don't, preferring C-n/C-p/C-v/M-v/C-f/C-b to the OS keys.)
I imagine for coding the equivalent could be "rename variable x to y" or "add comment //x on line y". There's a lot of potential for annoying / fun mischief, but that's what makes it entertaining and worth the $$$ for the viewers. Some might just want to actually help out!
When the current model first came out I read compliaints from livestreamers, and wasn't sure if the software was improved or Apple updated something...
> I upgraded from my $30 IKEA table to an Uplift motorised standing desk
Are there any (other) sites collecting posts like this similar to r/battlestations or edc sites for software developers?
If there's enough of a market for simple code livestreaming, then the multiplatform tooling will follow. (or someone could fork OBS like what Streamlabs did and strip down the features).
Xsplit > OBS > Vmix
People choose to use OBS for the extra features. Scenes, layouts/overlays, embedded interactive features, etc etc.
I use vMix to do single-camera personal streams and five-camera, eight-feed, we're-adding-a-drone-soon fighting game tournament productions. But that's because I've already bought into the complexity enough to do it (and the budget; my copy of vMix cost $1300).
I'm not sure I see much of a market for XSplit or Wirecast, but they've got their fans...