I’ve done this before and it allows you to get some of the feeling of “being watched” with none of the privacy or security problems.
Also sometimes it’s neat to see the crazy process of building something, particularly if there is ui or visual design tools involved.
Also, I do think there is a whole additional level of understanding needed to practice or “work out” in front of an audience. There is some flourish to it, even if you are mostly doing your thing, you may have more round corners than you might otherwise.
It is definitely a different experience.
Daniel Shiffman from Coding Train does something similar, but more focused on P5.js and general interactive toys. https://shiffman.net/
He did all the things you mention and it was entertaining as well as informative. I saw 50-150 live viewers.
I think quite a few people would like to see you work on something like a new tweak. Start or post an account with a specified stream time then post it here/reddit and see how many people subscribe.
During this time I screen-share my entire screen, so we can draw fast on Paint, switch to code see how it behaves when implemented, mainly GUI elements only.
I usually use OBS during this kind of meetings to record everything, in order to have later review material in case I forget something. Also a nice side effect is that later on, if client is not happy with something I have hard proof that he did said/agreed on something.
Especially if you have one specific topic and if viewers ask questions.
But yeah, it's a bit hard if streamers don't follow a red line and if they talk in a language that they don't command well.
YouTube is full of awesome content from Chinese and Indian people who talk very bad English, so they probably would have been done better with text.
I think the personality of the person has a lot more to do about whether they keep the attention of their viewers. The ones who seem to get things done seem to speak out their internal dialog.
I'm now at a point where it feels weird coding without saying my thoughts out loud or writing them down on paper. Like I don't know how to think unless there's some output.
And when watchers highlight a bug or tell me techniques to try that I haven't thought of, amazing.
I need to make better use of scenes and staging screens like OP is doing. My streams are significantly under produced right now.
link if you're curious: https://www.twitch.tv/swizec
Not that I think I would be an effective livestreamer.
I would imagine most big streamers (let’s say 10K+) would enjoy a smaller community more than a larger one - if they could make the same amount of $$$.
Really hard things I _could_ do on stream...but I start to feel like it's too much of me staring really hard silently. I have to wonder how much of that is true and how much of that is personal anxiety. I do enjoy streaming though and should do it more.
You may have developed some unproductive tics, mannerisms or habits that you’re not aware of.
Be warned. It’s a tough watch sometimes.
This would be an odd change to do on longer time scales. I do this kind of now, but I'll think for a few minutes and have maybe five to ten minutes of action planned out. Not precisely code just needing translating, more of a rough sketch to flesh out.
By that definition no code streamer has been consistently successful on Twitch, Youtube Gaming, or any other platform. The closest to it would probably be Hikaru who is a GM chess player.
For example, if you are doing interview practice, for Google style interviews, livecoding your interview practice is actually a pretty good experience.
Coding in front of an audience isn't much different than coding in front of an interviewer, if you think about it.
I'm preparing to code on a livestream and honestly, I've thrown out any notion of being 'effective' out the window; chat engagement means distractions, and while I'm used to that I rather reserve some non-streaming quiet time for deep, focused work.
Since you are interactive (you would respond to chat) and will initially do it for free I think it would be better than nothing.
Or when you livestream yourself coding people might help you either improve your technique.
But yes, I've certainly found it slower.
When I set up OBS, I overlayed a full screen image that says I'm showing something secret which had nothing but a small webcam feed in the bottom right so folks could still see me but not my desktop. It was assigned to a global hotkey toggle of course.
If you have secrets anywhere near your live stream, it's not a question if "if" you will leak them but "when." Don't put yourself in that situation.
Work _hard_ to keep yourself out of that situation.
I’d assume you’re not coding on a production system so your secrets shouldn’t be too hard to revoke, cycle them after your stream and any time you leak them.
Let's say I live streamed implementing Stripe. There's no way to avoid not showing my test API keys if I'm going to show the end to end process of setting everything up. The best I could do is to roll the keys before I start the stream but this degrades the quality of the stream since it's not from scratch.
Of course those keys and anything else that's sensitive would be sitting in an .env file, and I'd also have an .env.example file showing how it's set up without anything sensitive being in there (I do this already in my pre-recorded videos). Even going as far as preventing the real .env file coming up when I fuzzy open files so I don't open it by accident and the contents of that file being ignored from multi-file searches.
- Not only I have seen secrets revealed on stream, like passwords and tokens and such... I have seen people working with databases full of personally identifiable information, and you could see names, phone numbers, e-mails and addresses on stream. There are irresponsible people out here.
- I have seen people doxxing themselves by showing their git identity, or some popup window with some licensing information such as "Registered to: John Doe", or when the autocomplete suggestions on their browser search bar shows "[Facebook favicon] John Doe".
As you can see, there are many, many ways to leak your identity on stream. If you want to have a discrete online presence, try to do all your work on a dedicated VM, or take measures such as using a dedicated browser for your stream related activities, a separate git identity, hide splash screens, and pay attention to detail at how things look before you go live.
Though with keyboard camera they probably should be more careful in which scenes show that if any of those secrets are typed rather than say copy/pasted.
I'd love to be able to teach programming in a way that lets the students explore the live state of my working directory and follow along with file edits, but rendered locally on their machines at native resolution and with at least some degree of interactivity. Most collaborative editors I'm aware of are ill-suited for code, or don't seem to work well for more than one file at a time. Ideally, I'd like students to be able to open a read-only view of my entire IDE workspace, but exporting it over a network filesystem isn't quite live enough even with a short auto-save interval.
A few tips for coding screencasting:
For coding screencasts you should make sure that chroma subsampling isn't enabled when you're doing the encode of the video otherwise it may look worse with highly contrasting areas.
Decrease the encoding frame rate if its primarily going to be just a screencast without a lot of motion on the screen. At the expense longer mpeg segments (and more latency) you may want to increase the group-of-picture size.
There shouldn't be a reason that the encoded screencast looks worse then how it appeared to you unless the encoder you are using is just mashing the quality down.
What platforms support 4:4:4 video? Youtube, Twitch, Vimeo, ... all don't.
We've all had enough experience with Zoom, Google Meet, Skype for Business, etc. in recent months to know that this is not something that works well out of the box. And that's before we get into issues like the fact that I'm using a 34" ultrawide monitor, and most streaming systems will have to downscale my desktop before encoding it, and the result won't look at all good for a viewer trying to watch on a 1080p laptop.
[1]: https://docs.microsoft.com/en-us/visualstudio/liveshare/use/...
But, honestly, if your intention is to reach an audience rather than simply to geek out over an elegant technical solution (no harm in that!), then just go with streaming. It’s not your bandwidth, after all, if you’re using Twitch et al.
I guess, though, that streaming has the problem of not letting you copy the code, not being meaningfully interactive, etc.
I'm not looking for a broadcasting solution along the lines of Twitch, so much as a solution to use with a specific audience of maybe a dozen students, that I want to be able to interact with to some degree.
NDI is doubly useful as it:
1. is wireless over the local network
2. allows you to use your phone/tablet's camera as a video source, which can be a reasonable webcam stand in (although latency will never be as good, so possibly better as a sort of secondary vanity camera)
(3. definitely works on Windows)
There are apps on iOS that will share the screen content and camera content and a quick google seems to surface the same for Android.As someone who used to work in TV too, the importance of good lighting cannot be stressed enough. It doesn't have to be expensive, but a reasonable, ideally diffuse source of light will make the biggest improvement to your stream vs an expensive camera (and some webcams may need manual adjustment via OBS to best utilise the available light).
[1]: https://obsproject.com/forum/resources/obs-ndi-newtek-ndi%E2...
OBS recognized my iphone as a video source with zero configuration, and zero latency (ish? low enough that I can't tell).
Personally I'm looking for a Windows solution primarily, but if I can open it directly in OBS, I might just run my MacBook and use the NDI plugin from the parent to stream that video to my PC.
I have been on the look for something like that in the past. I know of software sharing the camera via NDI, but it was my understanding that doing the same with the screen was not possible inside Apple's sandbox.
You can use AirPlay, of course, but then you're stuck with hoping that on the next OS update the AirPlay server software you're bought is updated quickly.
So please do name one if you're aware.
In terms of sandboxing, I think it may use APIs that are there for screen sharing on video calling apps. It shows a similar interface to the screen recording feature that was added in iOS 12.
It’s a more expensive setup overall, but it does make for a much richer ‘radio’ sound if that’s what you’re after.
So in other words, it’s easier to just use a good mirrorless camera.
I have a similar setup to OP, but I bought a used Sony a6000 and the same lens on sale, so the camera and lens only cost me about $500. You could use the Sony kit lens too, and it would still be a huge upgrade over any webcam.
Keyboard cameras make sense to me if somebody is streaming eg starcraft where they're hitting 300 APM and it's impressive to watch, but I just don't see the appeal of it for coding.
Guy who wrote this article made a mistake, his keyframe interval is set to 0, which tells his encoder its free to do scene detection... however, he's exploiting the nature of the encoder (the scene never changes, as its a static image) to create extremely large GOPs, but not as big as manually setting it can go.
Twitch, as do other platforms, have recommendations, but they'll ingest pretty much anything you give them. This means, you can send them 15fps or lower with a ridiculously huge keyframe interval of 10 or more (Twitch recommends 2, 1 is a saner choice for low latency usage, 10 is still gives you enough ability to interact with viewers).
I've toyed with code/static optimized streams, and using x264 instead of HW encoding on a Nvidia Turing (currently the best HW encoder), and playing with custom args: -refs 16, -qmin above 10, -keyint_min set to keyframe interval * framerate (allows 1 I frame per GOP, the rest of the GOP could be near-zero bandwidth P frames), and -tune stillimage (which sets lesser known options which sorta helped here). Static views of an IDE would use extremely little bandwidth.
You'd be optimizing for the IDE view part of a stream, not the stream of you, which would be in a corner of the screen.
Thanks!
There's also good old fashioned networking, too. Find social coders with a similar style to you (and a reasonable audience) that you could be friends with / mesh well with. Try to make friends with them. Try to do streams after their regularly scheduled streams and encourage them to send their active audience along to your channel when they are done for the day. (That's what Twitch Raids are; Twitch built an entire viral networking tool for that.)
With twitch alone it's easy to get lost among the other streamers, and I'm not necessarily going to dig through VODs either.
Putting a condensed version of your stream to a youtube playlist and having links to your twitch will help a lot.
It's not what you want to hear, but it is what I've seen.
For YT, viewers would have to already know who they're looking for and so they're not likely to "stumble" across your stream.
If you get Twitch affiliate or partner I believe you can stream on both YouTube and Twitch still just not simultaneously, at least that is what I have read. Not sure many big streamers have tried so not sure on the details.
It could be interesting to take this approach then "stream" it as well so you can provide feedback to people watching and also laugh at yourself a little bit.
Streaming could be fun, but if you're streaming something you're actively learning (let's say a new piece of tech while you build something), for me it would be likely 50 minutes of Googling and 10 minutes of coding for every hour. That's how I talk myself out of not streaming because I personally would get bored watching someone Google things endlessly.
What they really get out of it is, oh okay this person's a human too but they think about the problems they run into in this way, I could do that too and get a little bit faster. And then also they don't discouraged thinking they're total "noobs"
I always like to explain, no I'm not a genius I've just been doing this a long time. So anything I have a good answer on? I learned that through fire and didn't just pull it out of my ass lol.
One thing I was trying to demonstrate to my coworker is that with experience you know where you're probably gonna go from the start but you still have to do all the same mundane bullshit regardless to start :)
My main hitch is that I’m concerned about getting to comfortable and accidentally bringing up a config file that contains secrets, and then once those are streamed they’re out of my control.
1) recording a "session" (I use snagit, but any screen recorder that lets you narrate works), where I describe what I'm working on, what the goal is etc. It seems silly, but even if the only person that's going to watch the video is me it somehow helps keep on task. And the video journal aspect is actually interesting.
2) Focusmate.com - this worked for me for a while, but I'm a secret uber-introvert, so I dreaded the introduction part of the process. But telling someone "I want to accomplish X in the next hour" and then having them watching over my shoulder really works.
Maybe you should try the live streaming, but just leave out the streaming part? :-)
Else, it's good practice for a secret rotation process :)
Personally I like it more than OBS because all the integrated stuff inside the client, it's just a better fork really.
How does screen recording work? Is it easy for OBS to just capture the video output buffer and start encoding it, regardless of the OS? Or do different OSs have very different strategies for this? What about hardware-level cursors? (I think that's a thing?)
Software that wants to capture the desktop has to emulate the hardware cursor by getting the current cursor position and bitmap and blit it into its copy of the framebuffer. That's because the hardware cursor doesn't exist in the framebuffer, it's overlaid by the GPU during readout.
For the same reason screen-effects like "nightlight" don't affect the cursor in Windows, because the effect is applied as a shader, which can't touch the cursor. They could fix this by updating the cursor bitmap, but they don't.
Yup. Check out their capture "source" plugins:
https://github.com/obsproject/obs-studio/tree/master/plugins...
https://github.com/obsproject/obs-studio/tree/master/plugins...
https://github.com/obsproject/obs-studio/tree/master/plugins...
(I have done some speedrunning livestreams, but not coding. Well, not in a Twitch setting anyway, I've done talks with lots of live coding and really enjoyed it.)
There was a twitch-like platform for live coding once, but obviously it flopped.
I went searching for that exact site and couldn't find it (or maybe I did but regardless it was dead). I actually used it for about 5 maybe 10 minutes once upon a time because I thought the concept was cool. Watch me create a SaaS service on the fly. 3 minutes into it, I'm realizing I'm about to type in public IP addresses, log into secret management systems, pull data out of a CMDB which gives up a bunch of my internal system data... So I thought to only share a single monitor and use my second monitor for privacy related tasks. But then people can't see what I am doing and for long periods of time while i'm gathering CMDB data, no one sees any coding going on. At the end of the 10 minutes, I had about 12 viewers so I'm sure if I was doing somethign worthwhile it would increase a decent clip..
But live coding without planning is a security nightmare. Someone I knew once live coded their programming "homework" for a position they applied to and then shared their coding session with the interviewers. That takes the cake. He was hired on the spot, probably because he wasn't afraid to show his mistakes.
https://www.naut.ca/blog/2020/07/09/cheap-hdmi-capture-card-...
PS does anyone know how to get a better channel URL?
This is especially true in competitive programming where everyone is solving the same task!
Some competitive programming streamers:
William Lin: https://www.youtube.com/channel/UCKuDLsO0Wwef53qdHPjbU2Q
Errichto: https://www.youtube.com/c/Errichto
SecondThread: https://www.youtube.com/channel/UCXbCohpE9IoVQUD2Ifg1d1g
Alex Wice: https://www.youtube.com/channel/UCQmrwIwzEu8MxplJw9EUcAg
All youtube links because I do random old contests on leetcode/codeforces and usually at least one of the people above would have a screencast recorded (though unfortunately not always with commentary). Some of them also have twitch.
I was originally trying to implement this functionality by using NDI, but there were a few issues I ran into, namely resolution and framerate, neither of which I was happy about. Something about this article tipped me off to look up using USB to connect the iPad to the PC, which actually led me to setting up the streaming PC as an AirPlay receiver. After I made the switch over to using AirPlay, I had the whiteboard/telestrator functionality working on my OBS setup within 10 minutes.
Programmers have it especially easy in this regard since it doesn't require any cameras/lighting/tripods/line of sight whatever. Just record your desktop for a day and watch it in down time. I think you'll be surprised to see what deficiencies stand out as an observer that you've probably come to just live with due to complacency/habit. It helps prioritize areas to improve, and you can do this iteratively.
Watching people debug on twitch has definitely changed the way that I approach bughunting.
You guys should definitely check out Jordan's stream if you like the idea of watching someone fight the good fight against the dark-side of Go's opinionation.
I still get a bit nervous before I start streaming. I spend time rehearsing what I'm going to say and work on and how I'm going to present it... but I'm finding that is not very sustainable and am doing it more to have a dedicated couple of hours to hack on side projects and share my discoveries and knowledge with folks.
The interactive nature of it is neat and not as difficult as I had anticipated it would be but my audience is still only a handful of folks each week.
Give a try if you're thinking about it. You don't need pro equipment to get started with live coding. I use my phone for the camera and I pulled out my old 4-track and mic to record audio but it can be done with a headset and a webcam no problem.
update: Link to my stream: https://twitch.tv/agentultra
I'd very much recommend it if you want to stream something. I'd also recommend just getting started, I've been wanting to stream for a while but was always embarrassed that it'd look like crap, but better something that looks like crap than nothing.
It's not just that they're great ergonomically (which I truly need), but they're also highly programmable. I can imagine how a large set of macros could improve screencasts quite a bit.
More related to the article, I've used OBS for nearly all of 150+ screencasts and it's been fantastic. I tend to use Streamlabs OBS for Twitch and the fully open source OBS for all my YouTube videos. The plugin ecosystem is great.
Here is my stream: https://twitch.tv/evalprase
That said, this article does a great explaining the Twitch integrations. If you aren't looking into Twitch streaming, that portion can be ignored.
I've been using OBS for creating lecture videos for years. I use it mostly because when I started, it was one of the only free quality stream capture tools out there and I'd seen a few of the early Twitch streamers using it. Since I was teaching, I wanted to imitate the Khan Academy style drawings. The article uses an iPad, but I've gotten pretty comfortable with GIMP and a small Wacom tablet.
My setup (my equipment is a bit old, so it doesn't look like they are still sold):
* Samson Meteorite microphone: https://www.trustedreviews.com/reviews/samson-meteorite
* Wacom Small Pen Tablet: https://www.amazon.com/Wacom-Intuos-Touch-Tablet-Version/dp/...
* GIMP: https://www.gimp.org/
Your two most absolutely crucial components are your sound and your lighting. The sound should get picked up well so the viewer doesn't need to adjust their volume to listen. I know some of my videos have fallen short in this quality because of the mic's positioning.
Also, think about your voice and enunciating your words. Since my lectures are public, 20% of my channel's traffic comes from India and Germany. You don't need to necessarily slow your words (like I did when I started), but you want to make sure each word can be heard cleanly. You may not realize you have a hard to understand accent because it just seems natural to you. You can also mitigate this with subtitles (I've used rev.com for ADA compliance).
Lighting is the other important aspect because if you are going to stream your face, it needs to look presentable. You don't want the lights shooting directly on your face though because that can wash out you texture and color. Like in the article, you want to bounce your lights off a white surface for a softer illumination. I'd recommend reading some indoor filming techniques to get a good setup, since you are effectively on camera.
Likewise, know your eye line. I like to have my camera at just above eye level so when I'm lecturing it looks like I'm talking to my students, rather than looking down/up wherever your webcam is. This was also a tip I gave to a friend last week before he presented at a conference. Acting for the Camera is a nice book you can peruse for small tips like understanding your frame.
Finally, you're going to be very clunky when you start, even if you are at extroverted person. You'll need to become comfortable performing in front of the camera no different than in front of a classroom or audience.
Here are three videos illustrating this point:
[1] One of my first videos https://www.youtube.com/watch?v=PEYOixCgGHg
[2] Literally two months later, notice my increase in cadence https://www.youtube.com/watch?v=ltav5tp43RY
[3] Five years later https://www.youtube.com/watch?v=Dggl0fJJ81k
Once you start, watch some of your videos to see what you think is wrong or weird with them and try to improve.