40 3NF good enough
15:04
Жыл бұрын
30 from sql to Relational Algebra
17:09
10 performance of SQL queries
9:04
configuring SML and prelude in emacs
10:55
RA SQL Part 3 10 Count
10:20
3 жыл бұрын
RA SQL Part 3 20 Other Aggr
14:42
3 жыл бұрын
RA SQL Part 3 30 Group By
24:16
3 жыл бұрын
RA SQL Part 3 40 Having
16:57
3 жыл бұрын
RA SQL Part 2 20 NULL
22:36
3 жыл бұрын
RA SQL Part 2 10 Unknown
11:02
3 жыл бұрын
RA SQL Part 2 60 Natural Join
17:22
3 жыл бұрын
RA SQL Part 2 70 Other Joins
25:10
3 жыл бұрын
Пікірлер
@oualidlaib5965
@oualidlaib5965 17 күн бұрын
You are such a great professor, can you tell us you name, or Email?
@jazzyBit
@jazzyBit 2 ай бұрын
😮
@aliysher
@aliysher 4 ай бұрын
Thank you
@Simple_Guy-247
@Simple_Guy-247 5 ай бұрын
Hello, I have been watching your videos and find them helpful. I am teaching myself all this stuff and you make the topic easy to understand. You have a great channel, and I will be watching more of your videos from the beginning. I am disappointed that KZbin’s algorithm did not recommend your channel sooner. Please keep up the good work!
@zastre
@zastre 7 ай бұрын
Funny -- I use a black background for my macOS terminal and for my Obsidian client, but the white background looks better for your slides. Dunno if that it just me always using default PowerPoint backgrounds in my own work. 🤔
@zastre
@zastre 8 ай бұрын
It feels is little disorienting to me to frame a generator as a stream, but the way `next()` behaves whether on a generator or an actual input stream helps to unify it all in my head. I hadn't made that connection before. Thanks!
@zastre
@zastre 8 ай бұрын
Very clever. I hadn't known about `sys.getrecursionlimit()` and `sys.setrecursionlimit()` let alone `RecursionError`. This kinda/sort metaprogramming in Python is fascinating.
@zastre
@zastre 8 ай бұрын
That's was a helpful overview of the feature, along with the gotchas. You also motivated me to finally figure out how to switch between Python versions on my macOS laptop so I can go back and forth between `3.9` and `3.11` (and any others) without tearing out my hair. I know that `match` isn't a `switch`, but it's close enough to eliminate that weird Guido-asserted absence in the language. I should try to teach pattern matching this fall in CSC 110...
@bzboii
@bzboii 9 ай бұрын
idk why but i much prefer the "full" syntax for creating a named tuple class ```python class Foo(typing.NamedTuple): ""Foo class""" bar: float = 0.0 baz: string ```
@ale_on_unix
@ale_on_unix 9 ай бұрын
amazing bro!
@ksw8514
@ksw8514 9 ай бұрын
Lazy computation may be a widespread feature of functional languages, but it's definitely not one of the principles of functional programming.
@julians.2597
@julians.2597 8 ай бұрын
It is a direct consequence of the core FP principle of referential transparency, though. the temporal context of function execution is irrelevant, so you can avoid evaluating everything until it's strictly necessary. Or you can precompute it at compile time, whatever floats the boat.
@ksw8514
@ksw8514 8 ай бұрын
@@julians.2597 Exactly, that's why it's a widespread feature, but a consequence is the exact opposite of a principle ;) FP enables lazy computation, but not using it doesn't make it less FP.
@jackbarrett3599
@jackbarrett3599 10 ай бұрын
the dark background is nice!
@glenospace
@glenospace 10 ай бұрын
As a KTH student from 2004, Kattis is still alive! Whoho
@dmgerman
@dmgerman 10 ай бұрын
and the number of its problems keep growing. Great resource. Thanks for your comment.
@CrYpt001
@CrYpt001 10 ай бұрын
print(next(iter(sorted([ {'value':x,'name':y} for x,y in zip(sys.stdin,['Monnei' , 'Fjee','Dolladollabilljoll'])],key = lambda i : i.get('value')))).get('name')) . Joking aside , very nice video
@dmgerman
@dmgerman 10 ай бұрын
I used to write code like that. Then I could never read it again ;). Thanks for the comment.
@PowderedBonuts
@PowderedBonuts 10 ай бұрын
I really have enjoyed this series! Thank you for the time and thought you’ve put into it! Question for you: do you find yourself using comprehensions or map/filter/etc more in your projects and why? I appreciated your honesty in the comprehensions video, stating directly that they are the “pythonic” way of doing functional programming. I can’t stop myself from liking map/filter more though. It feels simpler and more powerful somehow.
@dmgerman
@dmgerman 10 ай бұрын
I came from a Functional programming background, thus I use filter and map. But they are relatively equivalent. For python people, generator comprehensions are more pythonic than filter and map though. Personally, I think it does not matter much, as long as you are using a generator comprehension. I think the difficult part is to get into the habit of stop instantiating lists when it is not necessary. thanks for the comment.
@PowderedBonuts
@PowderedBonuts 9 ай бұрын
@@dmgerman I had some other thoughts while implementing some of your ideas in a project. I noticed you don’t use type hinting in your videos, any reason for this? I try to use them as much as I can. I noticed the python type system doesn’t really work very well with map/filter. It’s useable, but definitely does not work as seamlessly as my limited experience with Haskell has proven it can be. Another was an observation that you can’t clone generators. I found this while trying to make a function that filters any exceptions from valid objects in a map and returns two separate generators. You can only consume either the valid objects or the errors since the generator is destroyed and they actually point to the same object in memory. It’s made me consider rerouting to list comprehensions so I can keep both. There may be another way that I haven’t found yet to keep both though, just noting a limitation.
@CrYpt001
@CrYpt001 10 ай бұрын
By far the best python feature
@calvinkhor890
@calvinkhor890 10 ай бұрын
thoughts on EntilZha/PyFunctional and kachayev/fn.py for nicer notation?
@dmgerman
@dmgerman 10 ай бұрын
I think both are good projects with different goals in mind. For instance, EntilZha/PyFunctional is very Scala-like (which I like very much). I haven't used either one, but I think there is always a small risk of bringing new non-standard dependencies to a project. But if you (and others maintaining your code) like one of them, why not? I might dedicate a video in the future to each library (kind of intermediate level). thank you for your comment.
@VincentSchumaker
@VincentSchumaker 10 ай бұрын
Dark theme, yes!
@dmgerman
@dmgerman 10 ай бұрын
While I prefer to write code in white background, I can see the appeal to have a dark one while watching a video. Thanks for the comment.
@airatvaliullin8420
@airatvaliullin8420 10 ай бұрын
and also you can run recursive fibonacci using lambdas and a valrus operator :)
@dmgerman
@dmgerman 10 ай бұрын
The idea, correct me if I am wrong, would be to create a lambda inside the lambda and give the inside lambda a name (so it is no longer anonymous) and then call this lambda. Probably very unreadable code.It might be an interesting video to try to understand how closures work.
@airatvaliullin8420
@airatvaliullin8420 10 ай бұрын
@@dmgerman not exactly, but you're completely right that it would be unreadable. So, you give a name to the outer lambda function and then use this name inside of that same lambda: >>>(fib:=(lambda n: n if n in {1, 2} else fib(n-1) + fib(n-2)))(9) 55
@dmgerman
@dmgerman 10 ай бұрын
wow. I really need to read the semantics of :=. It means that fib is created _before_ the right hand side is computed, which is very different than a typical assignment (e.g. fib= ...) , where the left side exists only after the right hand side is evaluated. I appreciate you took the time to share it.
@airatvaliullin8420
@airatvaliullin8420 10 ай бұрын
@@dmgerman indeed, quite a peculiar sematic. sure, thanks for your content!
@jen24499
@jen24499 10 ай бұрын
And you actually can create variables in lambdas using valrus like this -> 'x = lambda: (c:= 22) and (lambda: c * 20)' and then run it like x()() or 'x = lambda: (c:= 22) and (lambda inp: inp * 20)(c)' and then run like x()
@dmgerman
@dmgerman 10 ай бұрын
this made me laugh 😂 a lambda within a lambda! Thanks for sharing.
@zastre
@zastre 10 ай бұрын
I luuuuuuuuuv named tuples.
@hriscuvalerica4814
@hriscuvalerica4814 10 ай бұрын
Looks nice ! When you are a bit further in the series i would like a video where you solve a couple of problems using the functional approach .
@dmgerman
@dmgerman 10 ай бұрын
Yes, that is the idea. If you have any suggestions for problems to solve, let me know.
@julians.2597
@julians.2597 10 ай бұрын
​​@@dmgermansomething like a small webserver with sqlite or a text file transformation CLI, maybe CSV -> JSON
@_iltax4400
@_iltax4400 10 ай бұрын
Great video, straight to the point and easy to follow. Keep it up!
@dmgerman
@dmgerman 10 ай бұрын
thank you for the feedback.
@luckyluc9972
@luckyluc9972 10 ай бұрын
Are tuples with 3 values always called tuplets? That was my first time hearing it, and it was adorable
@dmgerman
@dmgerman 10 ай бұрын
Yeah, I keep making those mistakes. Thank you for the comment.
@luckyluc9972
@luckyluc9972 10 ай бұрын
@@dmgerman I will forever call tuples with 3 values a tuplet.
@hriscuvalerica4814
@hriscuvalerica4814 10 ай бұрын
Yeah . Using recursion is kind of a pain in python . Basically i only use it to traverse shallow trees where i know the depth beforehand .
@mcuria
@mcuria 10 ай бұрын
1000 of depth is not a shallow tree, consider using a balanced tree for such cases.
@hriscuvalerica4814
@hriscuvalerica4814 10 ай бұрын
I never said it was . The important this is knowing the depth because raising the limit is a hack
@VincentSchumaker
@VincentSchumaker 10 ай бұрын
Love the use of org-mode; not a huge fan of the light theme, though.
@dmgerman
@dmgerman 10 ай бұрын
Thank you for the feedback. I have been considering using a dark mode. I just need to find one that I like.
@Pastellsdj
@Pastellsdj 10 ай бұрын
Interesting series. Keep it up!
@hriscuvalerica4814
@hriscuvalerica4814 10 ай бұрын
This is excellent . I appreciate this very much .
@ilan054
@ilan054 10 ай бұрын
Sounds awesome, thank you!
@TheBambooooooooo
@TheBambooooooooo 10 ай бұрын
Dicts not matching exactly arguments is not necessary if function itself has something like **kwargs
@dmgerman
@dmgerman 10 ай бұрын
True. I'll leave that for the advanced videos. Thanks for pointing that out.
@vorsprungdurchhektik1170
@vorsprungdurchhektik1170 10 ай бұрын
looking forward to this
@TheBambooooooooo
@TheBambooooooooo 10 ай бұрын
Same
@randomsearches369
@randomsearches369 10 ай бұрын
wonderful man!
@HarrisMiller-hl5lc
@HarrisMiller-hl5lc 11 ай бұрын
I was following until the part you created fill or ask to go to bright space, I have prelude working but not sml, please help
@Xboyplays
@Xboyplays Жыл бұрын
After watching this video, I still do not understand what is good about 3NF
@Xboyplays
@Xboyplays Жыл бұрын
Is it just for error prevention?
@Xboyplays
@Xboyplays Жыл бұрын
3NF & BCNF help reduce updating errors. BCNF does so at a lower duplication cost than 3NF
@alyssafoglia6352
@alyssafoglia6352 Жыл бұрын
this is so helpful thank you
@Xboyplays
@Xboyplays Жыл бұрын
At 8:42, what is a doable ?
@Xboyplays
@Xboyplays Жыл бұрын
First
@willing_to_learn
@willing_to_learn Жыл бұрын
Are you planning to support multiple dicts, and in particular support loading yomichan-style dicts? Probably not that difficult given than yomichan-import exists but idk for sure since I haven't tried. There are just so many very useful yomichan dicts that basically any future JP dict program is going to have to support at least parsing them to see much adoption tbh.
@dmgerman
@dmgerman Жыл бұрын
Currently Yomikun only has basic definitions for words (at most one line) that are used for the automatic popups. For the actual dictionary lookups, it uses an external program (currently myougiden); such program is the one that needs to be able to use other dictionaries. It would be easy to add support for other programs (having more than one dictionary backend), but so far, myougiden has been good enough.
@moongihong2794
@moongihong2794 Жыл бұрын
impressive
@cameroncarter3332
@cameroncarter3332 2 жыл бұрын
Thank you. I can't believe I downloaded a file randomly from a youtuber online but it worked. Lets hope its not a virus. What do you do for a living?
@yesitskush
@yesitskush 2 жыл бұрын
He is our professor at University of Victoria! Very intelligent ofc.
@DefinitelyNotAMachineCultist
@DefinitelyNotAMachineCultist 3 жыл бұрын
Wonder how stuff like org-roam and emacs-jupyter might fit into a framework like this.