GopherCon Europe 2023: Go Panel
42:37
Пікірлер
@Daddy-u8n
@Daddy-u8n 23 күн бұрын
Good presentation thank you for sharing Rabieh Fashwall +1
@benitoe.4878
@benitoe.4878 Ай бұрын
I just learned delve and feel the endless stream of print statements that I produced in my life will finally diminish ;-)
@jub0bs
@jub0bs Ай бұрын
FWIW, I've since nuanced my stance on the functional-options pattern. If you're dead set on implementing it, I remain convinced that the tricks I presented in this talk still stand. However, I ended up re-implementing my CORS library with a more traditional config-struct approach, and I'm quite happy with the result; see jub0bs/cors.
@vinya_q
@vinya_q Ай бұрын
Great talk! Easy to follow examples with proper explanation.
@nalakajayasena2343
@nalakajayasena2343 2 ай бұрын
Very insightful talk - thank you. 🙏
@martingallauner
@martingallauner 2 ай бұрын
Really good talk. Thank you Robert
@felix.geisendoerfer
@felix.geisendoerfer 2 ай бұрын
Link to slides: docs.google.com/presentation/d/1rnCYgT41quuSKk-p9o7WOfzI5xoUAgEG4MTlZljjenQ/edit#slide=id.g1e07bf1996f_3_1588
@andboson0
@andboson0 2 ай бұрын
woah thanks for this!
@angeloss1989
@angeloss1989 3 ай бұрын
Nice one Agniva! Great presentation!
@TechTalksWeekly
@TechTalksWeekly 3 ай бұрын
This is a fantastic talk and it has been featured in the last issue of Tech Talks Weekly newsletter 🎉 Congrats!
@mr_wormhole
@mr_wormhole 3 ай бұрын
if Go users are stakeholders, then why there is no donation page like zig does for external users? Does it look unprofessional in an enterprise setting if they asked for donations?
@thrawn01
@thrawn01 3 ай бұрын
He had me at "I was able to find this really scientific graph on the internet" 🤣 Thanks for a great talk, really enjoyed it.
@sashe4264
@sashe4264 3 ай бұрын
I can vouch for that, he's very friendly and approachable🙌
@raghavroy815
@raghavroy815 3 ай бұрын
Woo!
@VitaliiPopov-r9u
@VitaliiPopov-r9u 3 ай бұрын
Making additional layer for database is hard way. You can avoid a lot of problems put repositories near domain entities.
@RamiAwar
@RamiAwar 3 ай бұрын
Love it! Can't wait for LanggraphGo 🙂
@gustavorangel729
@gustavorangel729 3 ай бұрын
Great talk, thank you so much!!
@asiraky
@asiraky 4 ай бұрын
Hate to be pedantic but putting a dep in your server is literally global state. Not saying you should t do it btw. Great talk
@ДмитрийВасильев-я6б
@ДмитрийВасильев-я6б 4 ай бұрын
Putting text in floating boxes does not make it visual language.
@chatenilesh
@chatenilesh 4 ай бұрын
Nice talk :)
@jacobdavidcunningham1440
@jacobdavidcunningham1440 5 ай бұрын
really cool talk
@YeXiang-n4f
@YeXiang-n4f 7 ай бұрын
Really instructive for me, I'll try in my project.
@rmschindler144
@rmschindler144 8 ай бұрын
archmage! . love it! :)
@rednafi
@rednafi 8 ай бұрын
This was such a concise and engaging talk. I love discovering talks that aren't thrown around everywhere and this is definitely one of those gems!
@ruslangabitov5202
@ruslangabitov5202 8 ай бұрын
Great talk. Thanks for sharing
@Sourcecodemastergoaheadcheater
@Sourcecodemastergoaheadcheater 8 ай бұрын
You ready 2 connect yo nuts to yo brain if u get me. Stop thinking dirty mkkay 😂 🔩🔩
@karlmatthias2698
@karlmatthias2698 8 ай бұрын
Why was Ken Thompson written out of the history at the beginning of this talk? Otherwise great talk.
@kamilziemian995
@kamilziemian995 Ай бұрын
It is weird omission.
@MomchilAtanasovHome
@MomchilAtanasovHome 9 ай бұрын
This was very informative. Thanks!
@sudharsan4040
@sudharsan4040 9 ай бұрын
One of the best session on OTEL. Thanks a lot. Very detailed 👏
@sealoftime
@sealoftime 10 ай бұрын
In my opinion, functional options add so much complexity and hurt performance just to make your code more "expressive" and "clear at call-site", that they are not worth using in the majority of cases.
@jub0bs
@jub0bs 10 ай бұрын
Complexity in the implementation (hidden away from users) or complexity in the interface? Obviously, you have to strike the right balance between the two but, as a library author, I don't mind a bit of complexity in the implementation if I can spare my users some complexity in the interface; that's the power of information hiding. As for performance, if functional options are invoked once at startup (not on the hot path of the program) as in my example of a middleware, any incurred performance hit is unlikely to matter much. Finally, note that many of the "principles" (e.g. fallible factory functions) I discuss in my talk are applicable to the traditional config-struct approach.
@sealoftime
@sealoftime 10 ай бұрын
@@jub0bs I might be biased, since I tend to see functional options being used for required config options, or fail if there is no other special functional option (like consumer group options in franz-go Kafka client library) In theory, functional options do help with the clear interface, when they are combined with traditional options. But in practice, they are very easy to implement poorly Thanks for your replies!
@jub0bs
@jub0bs 10 ай бұрын
​@@sealoftime I agree that functional options are difficult to implement "correctly". The idea for my talk indeed stemmed from my observation of frustrating implementations of that pattern in the wild, which led many members of the Go community to altogether dismiss (unfairly, IMO) the pattern.
@nexovec
@nexovec 10 ай бұрын
This makes me appreciate slog even more.
@wazzzzzzzzzzeg
@wazzzzzzzzzzeg 11 ай бұрын
I think the unit and integration tests are not comparable, it's like apple vs pear case. Each testing level has own advantages and disadvantages. Unit test is good, when you write new unit or new code for a unit, and you need a quick feedback. This can work even if the feature is not implemented fully since it's about testing the unit. In addition, from security perspective unit tests can test the "impossible" paths within the code. And yes, the unit tests are relatively simple compared to the higher levels of testing. Integration is good, when you want test the feature itself. So, units can work together to serve in a proper way. Testing deeply the feature most probably will require more complex code. Both of them are important and they cannot replace each other. I also think based on my experience in SW development that for a good product at least two different levels of testing are needed.
@dmxrahul
@dmxrahul Жыл бұрын
Great talk! Learned so much :)
@mikeschinkel
@mikeschinkel Жыл бұрын
The example for “structs not being expressive enough” (~7:00) artificially limits itself. They are easily expressive enough if you relax the arbitrary imposed constraints of requiring the value of MaxAge to be the only thing affecting the actual MaxAge header by adding an additional property that controls the caching part and determines whether to include a zero MaxAge or omit it.
@mikeschinkel
@mikeschinkel Жыл бұрын
At 25:13, the argument to use multiple packages can be more simply handed in one package when you use structs by embedding a ‘Risky’ type in you main struct.
@mikeschinkel
@mikeschinkel Жыл бұрын
Two arguments against structs are the “visually noisy” data, and the “harder to read docs.” That is clearly the presenters personal preference as I find the exact opposite to be true. That said, I can work with either so I don’t find either of those to be compelling arguments for or against.
@mikeschinkel
@mikeschinkel Жыл бұрын
This is a big one for me, on ~24:30 the argument is made that using functional options allows for compile time errors, which is great for this rare-case need, but then the presenter relegates handling of more commonly occurring errors to run-time rather than compile-time - ~10:00, ~11:30, ~12:00, ~12:45. Alternatively he requires the developer to discover special cases in the docs rather than make them explicit in a struct, e.g. by having two properties - `FromOrigin` and `FromOrigins` - so usage is obvious for both implementing and reading, and returning an error if both are used. IMO, the common case should trigger compile errors and the rare case should trigger panics, and not vice-versa. This is, of course, if we have to choose.
@mikeschinkel
@mikeschinkel Жыл бұрын
Lastly, It is clear to me that the presenter really prefers functional options to structs as options because all of his pro and con arguments are biased towards functional options and against struct options. That does not make him wrong per se, it just means he is a human with an opinion. But an inexperienced and/or naive viewer might not be able to discern the bias in his arguments and instead consider his arguments as if gospel. Hopefully my comments can balance our that bias so that the inexperienced and/or naive viewer can evaluate their choices solely on the merits and make their own decision.
@jub0bs
@jub0bs Жыл бұрын
@MikeSchinkel Ok, but then wouldn't users have to set two fields of the config struct just to specify that a custom max age be used? Compare that to one option call, which is more ergonomic in my opinion.
@jub0bs
@jub0bs Жыл бұрын
Great talk, and great delivery! I particularly enjoyed the explanation of the singleflight package (starting at 10:40).
@ryanlancer86
@ryanlancer86 Жыл бұрын
The purists must be furious when she says golang instead of go 😂
@apina2
@apina2 Жыл бұрын
I _knew_ that this guy was a man... based just on his website. What's up with the weird furry chat avatars, multiple personality disorder larp?
@ramilm9793
@ramilm9793 Жыл бұрын
Nice presentation, context canceling in errgrouops is what I definitely would use
@adamsribz
@adamsribz Жыл бұрын
Excellent talk. I've been using this pattern for a while, and you've given me a few new ideas to add to my toolset!
@mmulawa
@mmulawa Жыл бұрын
That was a brilliant talk (not too deep and not too shallow) and with go examples, thank you!
@adetunjii
@adetunjii Жыл бұрын
Great Talk.
@ysoldak
@ysoldak Жыл бұрын
That’s a roll, not loop, Ron 🤦‍♂️😂 Great energetic talk!
Жыл бұрын
Very interesting talk Maciej, great work here and there! 😉
@Descartes-sk8uz
@Descartes-sk8uz Жыл бұрын
Conferences that post videos without the questions are lame.
@jub0bs
@jub0bs Жыл бұрын
Perhaps, but there was no Q&A after any of the talks at GopherCon Europe 2023.
@dogaarmangil
@dogaarmangil Жыл бұрын
Webassembly is here to stay. 🙋‍♂8:08 𝗗𝗶𝗱 𝗮𝗻𝘆𝗼𝗻𝗲 𝗻𝗼𝘁𝗶𝗰𝗲 𝘄𝗵𝗮𝘁'𝘀 𝗺𝗶𝘀𝘀𝗶𝗻𝗴 𝗶𝗻 𝘁𝗵𝗲 𝗨𝗻𝗶𝘅 𝗽𝗶𝗽𝗲 𝘀𝘆𝘀𝘁𝗲𝗺? That's right, 𝚜𝚝𝚍𝚞𝚒 for user interactions. Neither stdout nor stderr is suitable for interacting with the end-user during an interactive session (print a question and read the answer, etc). If you are using stdout instead of stdui then the output can't be piped, same with stderr.
@rmschindler144
@rmschindler144 Жыл бұрын
Very good point about the conspicuous absence, in this prevalent *nix paradigm, of an `stdui`.
@spacegauch0
@spacegauch0 Жыл бұрын
This was so much fun to watch! Thanks for sharing it!
@enunna
@enunna Жыл бұрын
There's a reason file operations are reminiscent of tapes........
@supersonictumbleweed
@supersonictumbleweed Жыл бұрын
I always enjoyed your blog and I'm positively surprised by how enjoyable this presentation is
@wolpumba4099
@wolpumba4099 Жыл бұрын
*Summary* *Introduction* - Speaker: Xe Iaso - Topic: Integrating WebAssembly with Unix Philosophy - Goal: To simplify programming by compiling third-party libraries to WebAssembly. *Unix Philosophy* - Core principle: "Everything is a file." - File handles in Unix are arbitrary integers, indices in an array in kernel memory. - Basic model: Open, Close, Read, Write, Seek - Network sockets and processes are also treated as files. *WebAssembly (Wasm)* - A compiler target for an imaginary CPU. - Intended to be a level below JavaScript. - Initially lacks capabilities like file systems or internet connectivity. *WebAssembly System Interface (WASI)* - Provides semantics for IO, files, file systems, and basic network operations. - Makes WebAssembly more like an OS. - Allows for cross-platform compatibility. *Crabto Espionage Technique* - Embedding Rust programs into Go programs using WebAssembly. - Uses the Go library Wazero for WebAssembly VM and WASI hooks. - Allows for the use of C libraries without needing a C compiler. *Practical Example* - Markdown parser written in Rust, compiled to WebAssembly, and embedded in a Go program. - Demonstrated a live demo involving an echo server and client. *Advantages* - No need for multiple compilers or cross-compiling. - Isolation and security through WebAssembly. - Enables plugin architectures. *Conclusion* - By understanding and leveraging the Unix philosophy, one can simplify and extend programming paradigms. - Encourages the audience to think about how they can apply these ideas in their own projects.
@supersonictumbleweed
@supersonictumbleweed Жыл бұрын
You can just copy transcript from KZbin you know
@supersonictumbleweed
@supersonictumbleweed Жыл бұрын
But thank you nonetheless!
@TheDiveO
@TheDiveO Жыл бұрын
🤚I even possessed and used QIC tapes in a Wangtec QIC drive for backup; even restore.