{"id":17044420,"url":"https://github.com/srush/virtualteaching","last_synced_at":"2025-03-23T02:27:54.980Z","repository":{"id":66268245,"uuid":"303423232","full_name":"srush/VirtualTeaching","owner":"srush","description":"DIY setup for virtual teaching on ubuntu","archived":false,"fork":false,"pushed_at":"2020-10-12T16:12:20.000Z","size":1971,"stargazers_count":39,"open_issues_count":0,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-01-28T05:41:19.317Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/srush.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-12T14:48:22.000Z","updated_at":"2024-01-04T16:51:14.000Z","dependencies_parsed_at":"2023-06-13T04:30:36.576Z","dependency_job_id":null,"html_url":"https://github.com/srush/VirtualTeaching","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srush%2FVirtualTeaching","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srush%2FVirtualTeaching/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srush%2FVirtualTeaching/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srush%2FVirtualTeaching/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/srush","download_url":"https://codeload.github.com/srush/VirtualTeaching/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245046961,"owners_count":20552307,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-14T09:34:22.248Z","updated_at":"2025-03-23T02:27:54.960Z","avatar_url":"https://github.com/srush.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# DIY Virtual Teaching\n\nThis page documents my Ubuntu setup for virtual teaching in Fall 2020. This setup was designed to be pretty minimalistic. I wanted to spend as much time on course material as possible, and make the virtual classes feel casual and interactive.  \n\nI use this setup to teach \"Machine Learning Engineering\" at Cornell Tech with ~100 students. The course is taught in 3 1-hour sessions: 2 morning / 1 late evening for international student equity.\n\n\u003cimg src=\"Screen.png\" width=400px\u003e\n\n\n## Constraints\n\n* Interactive mode. (Many of my colleagues swear by the flipped classroom setting, but I haven't mastered that yet.)\n\n* My apartment is ~700 sq feet. My partner uses the main room, so I am in the bedroom. I roughly have a 4 foot x 5 foot space. \n\n\u003cimg src=\"desktop.jpg\" width=400px\u003e\n\n\n* Needed to use my linux desktop (https://system76.com/) for streaming.\n\n## Equipment\n\nI spent roughly $500 on additional equipment for teaching. I am relatively happy with these tools, if I were to spend more it would be on a nicer camera. \n\n*  \u003ca href=\"https://www.amazon.com/Blue-Snowball-Condenser-Microphone-Cardioid/dp/B006DIA77E/ref=sr_1_5?crid=275YURS34P97Z\u0026dchild=1\u0026keywords=blue+snowball+mic\u0026qid=1602514615\u0026sprefix=blue+sno%2Caps%2C137\u0026sr=8-5\"\u003eSnowball Microphone\u003c/a\u003e\n\n*  \u003ca href=\"https://www.amazon.com/Logitech-C920x-Pro-HD-Webcam/dp/B085TFF7M1/ref=asc_df_B085TFF7M1/?tag=hyprod-20\u0026linkCode=df0\u0026hvadid=459641872450\u0026hvpos=\u0026hvnetw=g\u0026hvrand=9866461222765604603\u0026hvpone=\u0026hvptwo=\u0026hvqmt=\u0026hvdev=c\u0026hvdvcmdl=\u0026hvlocint=\u0026hvlocphy=9004331\u0026hvtargid=pla-943627420681\u0026psc=1\"\u003eLogitech 1080p Webcam \u003c/a\u003e\n\n*  \u003ca href=\"https://www.amazon.com/Neewer-Collapsible-Reversible-Chromakey-Background/dp/B00E89Q5OY/ref=sr_1_4?crid=3M4SA7NOXXFO0\u0026dchild=1\u0026keywords=green+screen\u0026qid=1602514709\u0026s=electronics\u0026sprefix=green%2Celectronics%2C144\u0026sr=1-4\"\u003eChromaKey Green Screen\u003c/a\u003e (super worth it, highly recommend)\n\n* \u003ca href=\"https://www.amazon.com/Workbench-Reading-Streaming-Architect-Drafting/dp/B07P1G8CD4/ref=sr_1_20?dchild=1\u0026keywords=usb+ring+light\u0026qid=1602514764\u0026sr=8-20\"\u003e Workbench Ring Light\u003c/a\u003e (particularly useful for night class)\n\n*  \u003ca href=\"https://www.amazon.com/Dell-Screen-LED-Lit-Monitor-P2419H/dp/B07F8XZN69/ref=sr_1_6?crid=1KXV0WO6KP1FR\u0026dchild=1\u0026keywords=dell+monitor\u0026qid=1602514839\u0026sprefix=dell+%2Caps%2C150\u0026sr=8-6\"\u003eSecond monitor\u003c/a\u003e (makes it easy to switch streaming scenes)\n\n*  \u003ca href=\"https://www.amazon.com/Sony-MDR7506-Professional-Diaphragm-Headphone/dp/B000AJIF4E/ref=sr_1_2?crid=398Q1YQ4STQ8Y\u0026dchild=1\u0026keywords=sony+studio+monitor+headphones\u0026qid=1602514906\u0026sprefix=sony+studio+monit%2Caps%2C146\u0026sr=8-2\"\u003eSony Studio Headphones\u003c/a\u003e \n\n\n## Streaming\n\nAt Cornell Tech, we use Zoom for teaching (and everything else). So I needed to stream through that. \n\nOn my side, I use \u003ca href=\"https://obsproject.com/\"\u003eOBS\u003c/a\u003e to stream my class. It seems to be the best tool and FOSS so that's great. \n\n\u003cimg src=\"obs.png\" width=400px\u003e\n\nThe OBS tools are super easy to use. I was able to create some windows that let me show my terminal (Konsole), webcam, and browser windows (Firefox). I have a couple of different Scene templates that I switch through during class. Everything was intuitive.\n\n\u003cimg src=\"scene.png\" width=400px\u003e\n\n### OBS Setup / Issues\n\n* In order to use OBS with zoom, I followed the setup instructions here: https://www.eigenmagic.com/2020/04/22/how-to-use-obs-studio-with-zoom/ \n\n* An alternative approach that works just as well is to create Preview window in OBS and then to share screen that window during class. \n\n* The XComposite screen share in OBS is quite buggy in Ubuntu. I had to switch from the default desktop to Gnome and use Firefox to get it to work. \n\n* The default streaming setup was quite low quality. I had to go to Setting-\u003eOutput to turn it up to something reasonable. \n\n* In order to use the green screen, you need to add a Chroma filter on the camera output. This works well if you have enough light. The ring light helps with this for my night classes. \n\n## Additional Class Software\n\n* \u003ca href=\"https://slido.com/\"\u003eSlido\u003c/a\u003e - used to answer questions and comments during class\n\n* Canvas Quizzes - used to give in class quizzes (mostly for attendance sake)\n\n* \u003ca href=\"https://classroom.github.com/classrooms\"\u003eGitHub Classroom\u003c/a\u003e - for grading and distribution\n\n* IPython / Notebooks - useful for in-class code demonstrations and question answering\n\n* \u003ca href=\"https://witeboard.com\"\u003eWiteboard\u003c/a\u003e - used if I need to draw diagrams on my ipad for technical explanations\n\n* Affinity Designer - ipad app used to draw class diagrams\n\n## Slides\n\nI decided to try out less technical slides this semester to avoid any resolution issues with streaming. My slides are written using \u003ca href=\"https://revealjs.com/\"\u003erevealjs\u003c/a\u003e through the \u003ca href=\"https://pypi.org/project/sphinx-revealjs/\"\u003esphinx\u003c/a\u003e plugin. There is an example in the slides directory. \n\n\u003cimg src=\"slide.png\" width=300px\u003e\n\n\n```bash\n  cd slides\n  pip install -r requirements.txt\n  sphinx-autobuild -b revealjs source/ build/\n```\n\nThis will launch the slides at http://localhost:8000/example.html#/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrush%2Fvirtualteaching","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsrush%2Fvirtualteaching","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrush%2Fvirtualteaching/lists"}