![Mike Shah](/img/default-banner.jpg)
- Видео 674
- Просмотров 2 085 980
Mike Shah
США
Добавлен 6 ноя 2016
Teaching computer Science, primarily Modern C++, C, DLang, games, and computer graphics programming
I'm a teaching professor and Senior 3D Graphics Engineer who has worked in industry at various games and graphics companies.
Access Full Courses: courses.mshah.io
Free Community Forum: courses.mshah.io/communities/Q29tbXVuaXR5LTI3MzAz
I'm a teaching professor and Senior 3D Graphics Engineer who has worked in industry at various games and graphics companies.
Access Full Courses: courses.mshah.io
Free Community Forum: courses.mshah.io/communities/Q29tbXVuaXR5LTI3MzAz
[Dlang Episode 103] D Language - unittest 3 of n - More powerful unit test with metaprogramming
►Full DLang Series Playlist: ruclips.net/p/PLvv0ScY6vfd9Fso-3cB4CGnSlW0E4btJV
►Find full courses on: courses.mshah.io/
►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin
►Lesson Description: In this lesson I show you how to add more power to your unittest block if you like. Of course, there are many frameworks (e.g. unitthreaded, d-unit, etc.) that already have this for you from the dub package repository, but it's still neat to know you can customize things to your needs using compile-time reflection (i.e. the traits library). As always, share your interesting use cases with the community in the discussion below!
►Please like and subscribe to help the channel!
►RUc...
►Find full courses on: courses.mshah.io/
►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin
►Lesson Description: In this lesson I show you how to add more power to your unittest block if you like. Of course, there are many frameworks (e.g. unitthreaded, d-unit, etc.) that already have this for you from the dub package repository, but it's still neat to know you can customize things to your needs using compile-time reflection (i.e. the traits library). As always, share your interesting use cases with the community in the discussion below!
►Please like and subscribe to help the channel!
►RUc...
Просмотров: 114
Видео
[Dlang Episode 102] unittest 2 of n - Test Techniques (Pure, Whitebox, Blackbox, __ctfe, more)
Просмотров 2154 часа назад
►Full DLang Series Playlist: ruclips.net/p/PLvv0ScY6vfd9Fso-3cB4CGnSlW0E4btJV ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson I show you some testing techniques in the D programming language. The unittest block again is a simple feature, but we can combine it with things that we have lear...
Lobster, Programming Languages, and Game Engines with Wouter van Oortmerssen - Conversation #5
Просмотров 1,2 тыс.14 часов назад
►Conversation/Podcast Playlist: ruclips.net/p/PLvv0ScY6vfd_Hk1jw-NIDSOK-RhMOhEg3 ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this conversation I speak with Wouter Van Oortmerssen who continues an amazing career in programming language, compiler, and game engine development. Wouter has developed p...
Walter Bright - 5 Minutes, Dogged Persistence, and the D Language [Conversation #4]
Просмотров 1,3 тыс.День назад
►Conversation/Podcast Playlist: ruclips.net/p/PLvv0ScY6vfd_Hk1jw-NIDSOK-RhMOhEg3 ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this conversation I speak with Walter Bright who continues his prolific career as an engineer, and is best known for his work on C, C , and now the D Language Compiler. Thr...
OpenGL [Episode 39] Adding MeshTranslate, MeshRotate, and MeshScale
Просмотров 46614 дней назад
►Full OpenGL Series Playlist: ruclips.net/p/PLvv0ScY6vfd9zlZkIIqGDeG5TUWswkMox ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson I continue our refactoring of the 'MeshDraw' function, this time adding translation, rotation, and scale functions for our two meshes. We almost have a little fra...
OpenGL Episode 38 Refactoring MeshDraw and our Camera
Просмотров 34821 день назад
►Full OpenGL Series Playlist: ruclips.net/p/PLvv0ScY6vfd9zlZkIIqGDeG5TUWswkMox ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson I continue our refactoring of the 'MeshDraw' function, this time moving out the constant recalculation of the projection matrix into the camera class. We are now ...
OpenGL [Episode 37] Refactoring MeshUpdate and Finding Uniforms
Просмотров 34821 день назад
►Full OpenGL Series Playlist: ruclips.net/p/PLvv0ScY6vfd9zlZkIIqGDeG5TUWswkMox ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson I do a little bit of refactoring to continue improving our graphics framework, this time by cleaning up our MeshDraw and removing MeshUpdate (The best code is cod...
[Dlang Episode 101] D Language - unittest 1/n - The Basics (TDD, separate module testing, and more!)
Просмотров 6721 день назад
►Full DLang Series Playlist: ruclips.net/p/PLvv0ScY6vfd9Fso-3cB4CGnSlW0E4btJV ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson I show you how to use one of my favorite features of the D programming language, the 'unittest' block. The unittest block treats blocks of code effectively as func...
OpenGL [Episode 36] Mesh Abstraction Refactor Continued -- two quads
Просмотров 53821 день назад
►Full OpenGL Series Playlist: ruclips.net/p/PLvv0ScY6vfd9zlZkIIqGDeG5TUWswkMox ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson I continue the refactoring and we end up ultimately with two quads! I opt for a 'C style' API for creating meshes and discuss a few of those trade-offs. I would e...
Books and web resources for starting OpenGL, Math, and a graphics engineer career [Mike's Advice]
Просмотров 2,8 тыс.28 дней назад
►Full Series Playlist: ruclips.net/p/PLvv0ScY6vfd-kxPfRttOVYkyM2xal-x0U ►Find full courses on: courses.mshah.io/ ►Join as Member to Support the channel: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this video I provide a few resources that I've used along my journey to learn computer graphics. We'll start with free web resources first, and then we'll look at some of ...
cerr and clog (buffered vs unbuffered) - Stream-Based IO part 2 of n - Modern Cpp Series Ep. 192
Просмотров 692Месяц назад
►Full C Series Playlist: ruclips.net/p/PLvv0ScY6vfd8j-tlhYVPYgiIyXduu6m-L ►Find full courses on: courses.mshah.io/ ►Join as Member to Support the channel: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson we take a look at std::cerr and std::clog which write to the stderr file handle. These are also globally defined objects provided in the iostream header. The...
std::cout - Stream-Based I/O part 1 of n - Modern Cpp Series Ep. 191
Просмотров 1 тыс.Месяц назад
►Full C Series Playlist: ruclips.net/p/PLvv0ScY6vfd8j-tlhYVPYgiIyXduu6m-L ►Find full courses on: courses.mshah.io/ ►Join as Member to Support the channel: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson we take a look at std::cout, a globally defined object that has been around for a long time in C . But why do we still need it if we have std::print in C 23?...
std::print - Print formatted text!(C++23) - C++ I/O | Modern Cpp Series Ep. 190
Просмотров 1,7 тыс.Месяц назад
►Full C Series Playlist: ruclips.net/p/PLvv0ScY6vfd8j-tlhYVPYgiIyXduu6m-L ►Find full courses on: courses.mshah.io/ ►Join as Member to Support the channel: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: In this lesson we take a look at std::print function available in C 23! It is finally here, and we have a way to print out formatted text without the std::cout stream funct...
gcc 14.1 for C++23 - Compiling from source demonstration and explanation
Просмотров 1,7 тыс.Месяц назад
►Full CS Essentials Playlist: ruclips.net/p/PLvv0ScY6vfd9OxOzvroGivi0Q_0UtFzk1 ►Find full courses on: courses.mshah.io/ ►Join as member to get perks: ruclips.net/channel/UCA64pZbN5Mz5NxC3SO4qpDgjoin ►Lesson Description: This is an updated video on how to build large source projects, specifically the gcc compiler for version 14.1. In this version of the video I show you a little bit more behind ...
OpenGL [Episode 35] Starting Application and Mesh Abstraction Refactor
Просмотров 845Месяц назад
OpenGL [Episode 35] Starting Application and Mesh Abstraction Refactor
std::formatter for Custom Types with std::format (C++20) - C++ Utilities | Modern Cpp Series Ep. 189
Просмотров 826Месяц назад
std::formatter for Custom Types with std::format (C 20) - C Utilities | Modern Cpp Series Ep. 189
Lisp - First Impression [Programming Languages Episode 30]
Просмотров 1,5 тыс.Месяц назад
Lisp - First Impression [Programming Languages Episode 30]
Channel Update - Live streams, Training, Programming Courses, Free Video List, sRGB Color Article
Просмотров 802Месяц назад
Channel Update - Live streams, Training, Programming Courses, Free Video List, sRGB Color Article
std::format with STL Containers - C++ Utilities | Modern Cpp Series Ep. 188
Просмотров 679Месяц назад
std::format with STL Containers - C Utilities | Modern Cpp Series Ep. 188
Mojo - First Impression [Programming Languages Episode 29]
Просмотров 1,6 тыс.Месяц назад
Mojo - First Impression [Programming Languages Episode 29]
Carbon - First Impression [Programming Languages Episode 28]
Просмотров 2,5 тыс.Месяц назад
Carbon - First Impression [Programming Languages Episode 28]
Cpp2 - First Impression [Programming Languages Episode 27]
Просмотров 3,1 тыс.Месяц назад
Cpp2 - First Impression [Programming Languages Episode 27]
std::format Introduction (C++20) - C++ Utilities | Modern Cpp Series Ep. 187
Просмотров 957Месяц назад
std::format Introduction (C 20) - C Utilities | Modern Cpp Series Ep. 187
[Dlang Episode 99] D Language - version (for conditional compilation)
Просмотров 2322 месяца назад
[Dlang Episode 99] D Language - version (for conditional compilation)
COBOL - First Impression [Programming Languages Episode 26]
Просмотров 5562 месяца назад
COBOL - First Impression [Programming Languages Episode 26]
Haskell - First Impression [Programming Languages Episode 25]
Просмотров 9152 месяца назад
Haskell - First Impression [Programming Languages Episode 25]
Dart - First Impression [Programming Languages Episode 24]
Просмотров 5572 месяца назад
Dart - First Impression [Programming Languages Episode 24]
[Dlang Episode 98] D Language - static assert - catch errors at compile-time
Просмотров 2172 месяца назад
[Dlang Episode 98] D Language - static assert - catch errors at compile-time
[Dlang Episode 97] D Language - assert
Просмотров 2402 месяца назад
[Dlang Episode 97] D Language - assert
[Dlang Episode 96] D Language - Typedef and TypedefType - Type Constructors
Просмотров 1802 месяца назад
[Dlang Episode 96] D Language - Typedef and TypedefType - Type Constructors
Thanks Mike👍!
Cheers!
Lol, I was just thinking if unittesting can be meta/reflective. I was thinking of making some tests for my OpenGL state machine exercise that can automate various testing stages of the pipelines. Actually wanna take it further, but that was the simple of it. What I would love as a programmer and potential programming language designer is to just make any function isTestable? and give it optional parameters. The amount of asserts and tests I do just to say “okay now test this parameter, but do not use 0 because that will fail because I said so”.
D First!
thanks! it helped me a lot
Cheers!
11:34 , I think that destructor should not have any parameter list!
Indeed -- copy & paste error without actually testing (just in the 'discussion' or 'sketch' portion of the video). I'd need to think a bit about a use case for a parameter in a destructor -- perhaps for control flow on how you'd like to perform deletion for instance -- but the mechanism may not work as well as 'defer' or 'scope(exit)' in other languages.
thank you very much! I'm another step forward to getting this project built - one more library (VLC) to build from scratch to go!
Cheers!
auto is silly
Using it for regular variables probably is -- useful for local scope and generic programming however
Came here to update my knowledge about pointers, great explanation as always thanks. For me pointers are very similar to shortcuts in windows for example, just in a smaller scope. They both store an address and both reference to something whether it is some value or an executable, the idea is similar. They are not that hard as they seem to be, tho for many beginner's they are something unthinkable. But the idea of shortcuts in an OS for the same beginners is something intuitive.
Cheers! Nice analogy :)
Is it good if a library developer uses static asserts for error checking in his final output ? By "final output" I mean the code I uploaded to my repo.
static asserts should not have any runtime cost for the final product, as they are just executed at compile-time and otherwise stop the program from compiling if they do not pass. static asserts otherwise I would encourage folks to have, and you don't necessarily need to hide them in your implementation. Some folks do hide the test suite however, if that gives away critical information for some reason.
@@MikeShah Got it. Thanks Mike 😀
time 3:13. Why not even "read only" access to global static data is allowed in pure function.
If you make global 'const' or 'immutable' this is fine. The reason we cannot allow 'int global=3' otherwise to be used in pure functions is because if we have multiple threads then global data could be modified elsewhere, and thus the function would not be pure.
See more with pure here: ruclips.net/video/PAXHOEufVFM/видео.html
I watched this episode again; why isn't the compileStatic function not called twice? ah, I see: you did not execute the actual program 😅
I finally had time watch to the end, and loved it. A very enjoyable interview!
@@bastiaan9127 cheers!
This is probably the best opengl series on youtube. It helped me a lot on graphics programing. Recently, i've added bindless textures on my laptop. It works just fine, but when I pushed to github, downloaded it and used it on my PC instead of my laptop, I still see the stuff, but not the textures. So why is it only working on my laptop but not my pc.
Cheers, thanks for the kind words! Perhaps your laptop and PC have different graphics cards? Bindless textures as I understand are an extension, and not part of core OpenGL 4.5 or 4.6
18:50 in the for loop, it would be even better to have it as for(const auto &e : m_messages) since the element is accessed only for reading and not for modifying it!
30:35 ,the usage of words "move " and "undo " was confusing for me, but I translated in my mind as (and that is the output that I would rather see) : "move by x and y" and instead of undo : " move by -x and -y ".
Since the value of the move that is being written is not what is being output(i.e. c.x and c.y), x and y still need to be negated.
Learned a lot, too ;)
Cheers!
Learned a lot 🎉
Excellent!
It is weird I didnt get the notification for part one. But related, testing makes ‘computer science’ feel like ‘science’. Plus, I think we all started in the broad sense ‘testing behavior’ in some repl of some kind. Soooo you just type your expression and find out what happens 😂. Of course, this is not software testing, more empirical testing. That is my thoughts though. Anyway, neat we have made it past 101 episodes. Maybe I should watch this series one more time..
Me neither (?)
Not aure why the notification did not go out -- maybe a big from RUclips @@bsdooby
Would this be useful for defining simple magic numbers? so instead of #define MAGIC 1000 constexpr int value = 1000 in some sense, would it be more "C++-y" or would a const be enough?
Generally speaking, I prefer 'constexpr int' versus #define, as the defines are just a textural replacement, and you get the advantage of typecheck. Constexpr also sort of 'forces' a constant propogation or other evaluation for more complicated magic values alongside the stronger typechecking. Depending on your debugger as well, #define's may not expand well (unless you use -ggdb for gdb for instance) either, as the 'magic' value gets lost.
@@MikeShah thank you! your channel is a great resource
I remember asking Wouter if this is a good beginning language and he said no. And since there is dearth of tutorials on Lobster, this language is essentially built for more experienced developers that has experience in another language. 🦞
I could probably agree with that. Given enough tutorials and some fun graphics/game themes perhaps it could be over time if folks wanted to learn it as a first language. Generally speaking, I still recommend python as a first language -- or even D 🙂
Sigh... use the HDMI port for the ZV1 and connect it to a CamLink. If you use the USB to connect it to your computer, you're stuck with this bad quality.
why cant i find this documentation that you have opened, it looks like they removed so much from the sdl wiki
@@marks209 I think for sdl3 that might be the case. There may be a mirror to the sdl2 docs elsewhere otherwise
i tried lobster a couple years ago. it's a great 'batteries included' type of language. i just, at the time, didn't find the pythonesque syntax agreeable.
hey mike, iam super new to programming and my question is that what is size_t?? i ve learned so much from this playlist. all thanks to you but i am so confused at this point what in the world is this? size_t and vectors
Welcome! size_t is an 'unsigned integer', usually an unsigned long or some type that can otherwise hold lots of integer values. By convention we use it to ensure we don't access a negative index, as well as to indicate a 'count' or 'index' of something
👍!
Cheers!
39:41
Very detailed and informative explanation. thanks Mike for making such useful content.
Cheers!
thank you very much !!! helped me a ton
Cheers!
I learnt assembly on Amiga and used AmigaE a lot, there are new E compilers not just the original assembly one. My advice is, don't learn C or C++, find a language which helps you find errors, so strongly typed, not one which will basically force you in hours of debugging and wasting your life.
I think I'm going to have to try AmigaE. :)
@@MikeShah Search GH for EEC. This is the latest compiler which is being worked on, iirc. It doesn't contain the weirder parts of E tho, like the lisp cells.
Good explanation. One doubt since "s_instance" is created with "new" keyword. How and where to use the "delete" in this case? Also since the destructor is private will it ever be used in this class?
Once initialized it can effectively live forever an the operating system will reclaim the object. That said, you could add a member function (e.g. void DestroyInstance() or ResetSingleton()) if you wanted to reclaim the memory at some other time.
I have tried to setup sfml on windows several times and everytime i stumbled upon some kind of error that screwed everything and it took like 15 minutes to make it on linux, thanks for this great tutorial
Cheers! You are most welcome!
Hey, just a heads up for Linux users! Lobster does build fairly easily out of the box, BUT you will still need to set the path to the exe in the /bin directory if you want your command line to recognize the arguments globally. Some languages do this out of the box and others do not have to do that. But this is probably going to be helpful both when running examples and quickly iterating on code! Otherwise, it is just as simple as getting the repo and building! This is one of the easier make/cmake projects I built, so look forward to it! <3
Cheers, thanks for following up on this!
First time watching one of these. Really interesting conversation. Would love to see some insights on game engine architecture from Wouter.
Wouter has given some talks at the Rendering Engine Architecture Conference (REAC) previously that are available :) Otherwise diving into the Cube and Cube 2 source wouldn't be a bad place to start!
Thanks a lot Mike. 🙂
You are most welcome!
👍!
One more👍!
👍And thanks!
Cheers!
2:29 , in summer 2024 the API design for C++ got a 2nd edition! 3:22 , I believe that Professional C++ should be read before the API design book, because the API book assumes you already know enough C++11.
Indeed, I have a copy of the second edition already 😁 I can agree with that -- I've found that reading Professional C++ to supplement whatever I'm learning (so two books at once) had worked well for me. Thanks for adding your thoughts!
Walter Bright story telling is interesting and funny. Such a gifted man.
is that still a thing?
Indeed!
Looking forward to your next upload in this series!
Will be coming soon!
c, c#, c3 and c4 (carbon). Programmers are drawining in a sea of c's
C2, C0, Cyclone, Safe-C, there are many, many more variations :)
Thank you
Cheers! Thank you for your support!
I really like this interview and it gives a different perspective. Very nice to see Walter talking about motivation and giving Arnold as an example. By the way Walter himself is an example of dedication after what +20 years working on D for free... again awesome.
@@MNN-s2h truly amazing indeed! Really lucky folks like Walter give so much. It's more fun to do these interviews and understand a little more about them prior to jumping into the technical bits right away 🙂
ARM is going to be even more important going forward. Glad Walter is doing something about it
Agreed -- it's an exciting time for the D Language!
Hi Mike, small question, but I can guess an answer: why do you go through all the effort of making a mouseDelta, if e.motion.xrel is already a delta? Is it because passing the absolute position to a camera member function instead of delta will be handy later? Thanks in advance
I wanted to disconnect the SDL dependency from the camera if I were to use a different input API. If I'm being good, I try to minimize depenencies and just pass the information in :) When I first did this, I think it was also just more clear rather than having to remember a specific event (i.e. e.motion.xrel).
@@MikeShah That makes alot of sense. Thanks for answering, and again what a great series, it's wonderful you are going into object oriented C/C++ here too, I'm learning alot. Peace out!
Thank you for the interview with the leged, and thanks Walter Bright for the D language
Cheers!