Recording the Screen?

I was asked if I can record a C-Programming-Course on Video for a small
amount of people. Maybe the Video will later be published on Vimeo or
Youtube. I need a relative good quality therefore.
I would not like to be in picture. I think it is okay to write a program
on screen while explaining what I do. I prefer my Raspberry Pi 400
programming in C for the clarity of Linux-API and the natural
relationship between C and Unix.
Is there a hardware that can do this? KAZAM & Co seem not to work
properly. What do professionals do?
FW
Reply to
F. W.
Loading thread data ...
Oddly enough raspberry pi aside, I would also like to do this for the purposes of teaching a friend how to use a bit of quite complex software...
its done on You tube all the time
Record what you are doing and then record a voice over explaining it...
--
In theory, there is no difference between theory and practice. 
In practice, there is. 
 Click to see the full signature
Reply to
The Natural Philosopher
Zoom (or any meeting system with screen sharing and recording) can do this, run a one person meeting, record it and share your screen to present the code.
--
Steve O'Hara-Smith                          |   Directable Mirror Arrays 
C:\>WIN                                     | A better way to focus the sun 
 Click to see the full signature
Reply to
Ahem A Rivet's Shot
What others have said, but base it round "The C Programming Language" edition 2 by Kernighan & Richie - that edition covers ANSI C and is still the most readable book on learning to program that I've seen. Besides each chapter contains both good example code and programming exercises.
For afters, point your students at "The Practise of Programming" by Kernighan and Pike - also a very well written and readable book.
I taught myself C from the first of these and wish the second had been around at that time because it tells you the stuff that books that about programming languages don't usually mention: how to write well- structured, nicely laid-out, readable code that uses meaningful names for functions, variables etc. Crucially, it also contains tips about writing code that is easy to debug and maintain.
--
Martin    | martin at 
Gregorie  | gregorie dot org
Reply to
Martin Gregorie
Writing code that is readable, well-commented and not "too clever by half" is essential with a language such as C. All too often I tried to understand other people's badly-written, sparsely-commented (*) and over-clever code. Unless speed is paramount, there is nothing wrong with writing code which takes lots of simple steps, rather than writing very terse code which is very efficient but has lots of side-effects of variables and other pitfalls.
K&R have got a lot to answer for with their habit of teaching people to put the opening brace of a loop or if statement on the *
same* line as the loop/condition, rather than telling you to place matching open and close braces at the same level of indent so you can look for mismatches. OK, modern pretty-print programs or web sites can be configured to use a variety of styles according to personal preference.
I always have a mental block with pointers and pointers-to-pointers, and get my & and my * all muddled up. That's one thing that I find a problem with C.
(*
) Comments, if present, which are restricted to telling you *what* the code is doing (which you can probably work out anyway) but not *why* they are doing it this way rather than that.
Reply to
NY
Just to add my almost 40 years old 2 cents: All too often I tried to understand *my own* code only a few days after I have written it.
Mind you: at the time of writing, everything is absolutely clear and well commented and documented and everything. A few days later, with a different mindset, it is absolute gibberish, unintelligible.
A year later, it could as well be "other people's badly-written, sparsely-commented (*) and over-clever code".
+1!
If you, like me, use "vi" and use "%" a lot to find the corresponding opening/closing brace of a compound statement, this:
# if USE_A if (x == A) { # else /* use B */ if (x == B) { # endif
is deadly! NB I even put braces in comments after the # if ... /* { */ # else /* }{ */ # endif /* } */
i++; /* increment i */
Josef
Reply to
Josef Moellers
I tested kazam on my Intel desktop here, and its doing everything OK - web cam microphone, tracking the mouse cursors and recording the desktop... it was even able to record a windows XP virtual machine..
--
"I am inclined to tell the truth and dislike people who lie consistently. 
This makes me unfit for the company of people of a Left persuasion, and  
 Click to see the full signature
Reply to
The Natural Philosopher
I'd forgotten that they commit this crime, but IMO that doesn't detract from the rest of the book.
Tell me about it! TSC (who wrote FLEX for the 6800 and 6809) were famous for adding a (mostly useless) comment to every assembler statement, i.e.
ADDA 1 # INCREMENT A
This is exactly the sort of thing that "The Practice of Programming" denigrates as bad style, but that programmers who are old enough to know better still persist in doing.
Mind you, I've seen worse, much, much worse. I still vividly remember seeing a COBOL accounting suite in which:
- there were no comments.
- all paragraph names were numbers and not in numeric order in the source.
- All record names and field names in both FILE and WORKING-STORAGE sections took the form XX99 where XX was the file identifier, so you might see:
FD CR 01 CR01. 05 CR02 PIC X. 88 CR03 VALUE "Y". 05 CR04 PIC X(30). ....
FD LP 01 LP01. 05 FILLER PIC X(10) VALUE SPACE. 05 LP02 PIC X(30). ....
and so on through all the input and output file definitions. WORKING- STORAGE as the same except that every blasted data name in it started with WS.
... and then they committed the ultimate crime of using ALTER statements as well.
Also memorable: programs that had been modified by one Ken Eagle, who I never met, but his chicken tracks were easily recognisable because any numeric variables he added were called KENn and and character variables were called EAGLEn (where 'n' was a digit starting from 1 and incremented for each additional variable.
--
Martin    | martin at 
Gregorie  | gregorie dot org
Reply to
Martin Gregorie
yeah. Compare the two statements that will probably produce identical compiled code...
x=(y=test(z)? 11: 10);
OR
if (test(existence_of_the_cosmos)!=0) /* a non zero results indicates we need to use the smaller value for life_expectancy, this is because people don't survive without the cosmos */ life_expectancy=11; else life_expectancy = 10;
I agree wiv dat.
Indeed, I never managed to create an array of pointers to functions and get a compiler to call different functions depending on an index value.
Mind you it was a very basic compiler.
Another hearty thumbs up.
--
?It is dangerous to be right in matters on which the established  
authorities are wrong.? 
 Click to see the full signature
Reply to
The Natural Philosopher
I have often looked at code and thought, " bugger me, this seems to be well written, I wish my code was this good", only to realise that in fact it IS my code.
And I have totally forgotten how it works.
When you programs you reach a peak where all the issues are 'in your mind' and you can clearly write them down as compilable code, but a week later you have lost all memory of what the salient issues even were..
--
"What do you think about Gay Marriage?" 
"I don't." 
 Click to see the full signature
Reply to
The Natural Philosopher
SECONDED!! loudly :)
--
Steve O'Hara-Smith                          |   Directable Mirror Arrays 
C:\>WIN                                     | A better way to focus the sun 
 Click to see the full signature
Reply to
Ahem A Rivet's Shot
In any language all real code should be as clear, simple and obviously correct as possible - you owe it to the poor sods who are going to be trying to track bugs through the code long after you've left to make it that way. They will spend a lot more time on the code than you will - so give them a few minutes more and make their life easier.
--
Steve O'Hara-Smith                          |   Directable Mirror Arrays 
C:\>WIN                                     | A better way to focus the sun 
 Click to see the full signature
Reply to
Ahem A Rivet's Shot
I've seen code along the lines of :
for (i=0; i
Reply to
NY
Agreed. Its a very good idea to revisit comments a few days later to see if they still make sense.
Comment handling is one reason I prefer Java these days - mainly thanks to the wonderful 'javadoc' utility. Its big benefit is that all documentation for a set of classes is in the source code files and javadoc generates a set of nicely formatted, linked HTML pages from it. I've not seen this done, but it should be easy for the senior developers to write module-level descriptions as a .java file with the overall description formattd as a class-level comment and follow that by a set public method descriptions, each formatted as a method-level comment followed by an empty method definition. Then each file is simply sent to the developer who implements it. The benefis is that the documentation is then consistently written, complete and, since its integral with the code, should (in theory - HAH) never get lost of outdated.
I'm really surprised that no other language seems to have the equivalent of the javadoc utility: I wrote one for C, which produces HTML documentation using a similar layout to the K&R book. Works for me, anyway.
--
Martin    | martin at 
Gregorie  | gregorie dot org
Reply to
Martin Gregorie
There is the converse: if you write severely obfuscated code (which you know works perfectly) your job security is guaranteed because no bugger else can make head nor tail of it if any functional changes are needed to it.
I worked with a guy like that. No social skills, no ability to edit what he said and to tailor his explanations to suit the person he was explaining to, no ability to detect people's eyes glazing over. It was said that you must never ask him a question because he would answer it in minute detail, then answer all the other related questions that you should have asked him, and then apologise (after a quick yes/no had turned into a 10-minute lecture) for giving you "just a quick overview". A conversation with him was really a brain-download with no flow-control.
He was a walking lookup table. He had committed to memory all the STD codes and a lot of the first few digits of subscriber numbers so if you asked him "where has the code 0296" he'd say "Aylesbury - and if the subscriber number starts 61, it will be Stoke Mandeville, whereas if it starts 62 it will be Bedgrove" etc. He had also memorised a lot of car dashboard instruments, so if you showed him a speedo, he could say "ah, that was used in the Cortina L between 1966 and 68, the Corsair GL between 67 and 69 and some models of the Escort - but if the digits were in this font instead, it would be the version used in the Zephyr between 63 and 65".
Probably fairly advanced on the autism spectrum, but a damn clever guy. He once discovered a bug in a device driver that had been supplied with a network card, reverse-engineered the EXE file, fixed the bug and recompiled it so we could supply the corrected driver - and then offered the fixed code to the manufacturer for them to use if they wanted it.
Reply to
NY
Agreed generally, but the original strcpy code is cute (and breaks nearly every modern style principle).
while (*d++ = *s++) ;
I'll bet it compiled really nicely on a PDP-11.
--
Steve O'Hara-Smith                          |   Directable Mirror Arrays 
C:\>WIN                                     | A better way to focus the sun 
 Click to see the full signature
Reply to
Ahem A Rivet's Shot
The comment reveals that both versions are wrong. An excellent demonstration of useful commenting.
But we have lost y which might be used elsewhere, if so it should be called something like cosmos_exists, assigned before the if and used in the if.
--
Steve O'Hara-Smith                          |   Directable Mirror Arrays 
C:\>WIN                                     | A better way to focus the sun 
 Click to see the full signature
Reply to
Ahem A Rivet's Shot
The only catch with that is that most of the people who write code like that never stick around anyway, they usually get bored IME.
I recall seeing the source of the BASIC (a 16K ROM) for one early Z80 micro, it had been written in Z80 assembler in six weeks - there were a few comments at random intervals which clearly contained the handful of details he needed to pick up from where he left off. After he moved on (fixed price job I think) nobody ever changed any of the code.
I did once perpetrate a piece of code[1] that nobody on the team understood (the code review consisted of the reviewer weighing the printout in his hand and saying "It works doesn't it" - after everyone else had refused to review it). In my defence the problem we horrendous and the solution was no nastier than it needed to be given the problem and C as an implementation language.
[1] Imagine a recursive descent parser in which the tokeniser provides a list of possible types for each token, the text may match multiple productions and noise is tolerated in some places in the productions as well as between them. The final return is the set of productions that consumes the most text.
--
Steve O'Hara-Smith                          |   Directable Mirror Arrays 
C:\>WIN                                     | A better way to focus the sun 
 Click to see the full signature
Reply to
Ahem A Rivet's Shot
I've done that at work - by using powerpoint. Create a new presentaton, click 'insert' in toolbar - to the far right pick 'Screen recording' you'll then get to select the area to record. When done, right-click on the recording and save as movie.
I think it records sound too - not sure. Else you need to add sound later with some kind of mixer.
But it is Windows and MS. not free at all. And not pi-compatible.
Reply to
Björn Lundin
ffmpeg can capture and record both screen activity and audio, simultaneously, and is available for Raspbian (and other Raspberry Pi) distributions.
[snip]
HTH
--
Lew Pitcher 
"In Skills, We Trust"
Reply to
Lew Pitcher

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.