 Bersenang. Bersenang. Adakah kamu okey? Bersenang. Bagus. Bagus. Hai. Hai. Saya baru-baru kelas SOS. Saya baru-baru kelas SOS. Sebelum beberapa bulan lalu. Saya akan berjaya. Sekarang saya bekerja di Ketel. Okey. Saya ingin berkongsi dengan anda sesuatu yang terkenal sebuah sistem komponen entiti. Ia adalah sebuah pattern desain. Sebenarnya, ia hanya telah digunakan dalam perkembangan permainan. Tetapi, pada masa yang baru-baru, ia telah melihat lebih banyak penggunaan dalam sistem distributasi. Jadi, ini sebuah struktur saya. Pertama, saya akan bercakap tentang beberapa bulan lalu dengan sebuah kode biasa yang anda boleh belajar dari kode biasa. Selain itu, saya akan bercakap tentang beberapa bulan yang terkenal tentang sistem komponen entiti. Saya akan menyebabkan beberapa jenis contoh sistem komponen entiti selepas perkembangan permainan. Selain itu, saya akan bekerja sebuah kode biasa yang saya akan menyebabkan sebuah kode biasa yang baru yang saya akan menyebabkan. Okey. Saya akan mulakan dengan beberapa jenis kode biasa sebuah kode biasa. Berapa banyak jenis jenis berkode biasa dalam perkembangan? Berkode biasa. Jadi, terutamanya jenis permainan atau jenis jenis kompleks yang berkode biasa. Anda akan melihat kode biasa yang terkenal sebuah kode biasa. Anda mempunyai jenis kode biasa yang berkode biasa dalam perkembangan entiti. Kemudian, anda mengkode biasa dengan beberapa jenis kode biasa seperti jenis kode biasa. Kemudian anda mengkode biasa untuk jenis kode biasa. Di sini, kita mempunyai sebuah kode biasa dan sebuah kode biasa. Jadi, sebuah kode biasa yang boleh dibunuh. Kerana ia berkode biasa. Tapi masalah dengan kode biasa adalah jika anda ingin memperkenalkan sebuah entiti atau kode biasa yang boleh dibunuh dan dibunuh. Bagaimana dengan kode biasa dalam kode biasa? Ia perlu dibunuh. Jadi, saya rasa kode biasa perlu dibunuh. Jadi, saya rasa kode biasa perlu dibunuh. Tetapi, kode biasa tidak memperkenalkan. Jadi, ia tidak memperkenalkan untuk memperkenalkan entiti seperti kode biasa yang tidak memperkenalkan keadaan, menggunakan kode biasa dalam kode biasa. Jadi, ini adalah sebuah kode biasa yang memperkenalkan dan memperkenalkan keadaan. Sebenarnya, ia memperkenalkan keadaan dan memperkenalkan keadaan untuk memperkenalkan entiti baru. Jadi, ada beberapa kecuali yang memperkenalkan kode biasa. Pertama, ia adalah kode biasa. Jadi, kita telah melihat kode biasa dalam kode biasa. Tapi, kode biasa adalah kode biasa memperkenalkan kode biasa dalam kode biasa. Jadi, kode biasa mengelakkan beberapa kecuali dalam kode biasa dan kemudian, ia memperkenalkan kode biasa dan memperkenalkan dari kode biasa. Pada masalah, mana kecuali kecuali kecuali dari kode biasa yang memperkenalkan kode biasa atau yang memperkenalkan kode biasa? Bukan sebuah kecuali. Salah satu masalah, kita akan menghubungkan kecuali kode biasa. Kode biasa untuk bermain. Kita ada, untuk contoh, kecuali kecuali dan kecuali kode biasa. Kode biasa, kode biasa, kode biasa, kode biasa, perang, pelajar, tapi apa yang kita nak buat seorang kode biasa? Bukan mudah. Dan kemudian, kecuali kecuali dengan antipaton yang adalah sebuah kecuali yang besar untuk kecuali kecuali atau kecuali kecuali yang besar dengan kecuali kecuali atau kecuali kecuali kecuali. Setiap masa, setelah kita mempunyai ini, banyak kecuali kode biasa akan memperkenalkan kecuali kode biasa. Jadi ini berlaku selama-lamanya. Jadi ada beberapa kecuali kecuali dengan kecuali kecuali kode biasa. Selanjutnya, saya akan beritahu dalam kecuali kecuali antipaton yang ada di dalam. Jadi, lagi, tradisional, ia dipakai di perubahan permainan kerana masalah yang telah diperlihatkan. Mereka memperkenalkan dengan kecuali kecuali yang besar untuk menggunakan kecuali kecuali. Dan lagi, ada beberapa masalah yang digunakan dengannya. Jadi, sebuah kecuali yang telah dipakai di antipaton yang ada di dalam adalah kecuali kecuali kode biasa dan kecuali kecuali kecuali kecuali kecuali kecuali kecuali kecuali. Rasupuh peminat perambahan ia mencari isu yang anda lihat di pagan sebelumnya. Rasupuh peminat perambahan ini mengalakkanย Flying Komponent dan Kylin Bersentuh perambahan B serta total remaining peminat dengan dēiப doang. South Termang Aspek objek domen. Jadi, Mereka mempunyai objek yang digunakan Dan memakai entiti Untuk menjelaskan kebebasan. Jadi, mari kita jelaskan ke contoh. Jadi, Ini adalah soalan. Bagaimana kualiti yang akan mempunyai Kualiti yang akan mempunyai Kualiti yang akan mempunyai Ia Ia Ia Ia Mungkin ada 1 meter yang panjang. Kualiti lain adalah Ia Ia Ia Ia Ia Ia Bagaimana kualiti yang akan mempunyai Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Ia Sebenarnya, tidak hanya kemungkinan hanya dapat mempunyai kemungkinan lain yang anda boleh memikirkan. Jadi, ini adalah komponen. Komponen adalah kemungkinan kemungkinan yang mempunyai kemungkinan yang mempunyai kemungkinan. Ia mengambil entiti dengan sebuah kualiti. Contohnya, seperti yang anda lihat, ianya kemungkinan. Dan ia hanya kemungkinan kemungkinan. Ianya seperti kemungkinan. Ianya seperti kemungkinan atau kemungkinan. Dengan beberapa kemungkinan. Apa yang anda nak beritahu? Jadi, kecuali kemungkinan yang kedua adalah... ...an entiti adalah komponen agregasi. Ia adalah sebuah kualiti. Ia adalah sebegitulah ID dan sebuah kualiti. Dan kemungkinan lain. Ianya hanya sebuah kualiti. Dan sebuah kualiti menerima entiti adalah kualiti. Jadi, apabila anda memikirkan entiti kemungkinan... ...tidak ada apa lagi. Tetapi sebuah kualiti... ...sebenarnya ia adalah kualiti. Contohnya, sebuah kualiti... ...sebenarnya ia adalah kualiti. Dan ia mempunyai kualiti. Kami mungkin mempunyai kualiti yang lain... ...dengan sebuah kualiti. Contohnya, kualiti kualiti... ...sebenarnya ia adalah komponen agregasi dan fizikal... ...tidak ada sebuah kualiti, tidak ada sebuah kualiti... ...dan tidak ada sebuah kualiti. Jadi lagi, entiti adalah... ...kualiti agregasi. Tiada apa lagi. Jadi, ia bukan sebuah kualiti. Ia adalah sebuah kualiti, kualiti dan kualiti. Jadi, kualiti yang paling menarik... ...di ECS adalah sistem. Jadi, sistem adalah apa yang membawa... ...kualiti dan komponen. Ia beri mereka kemahiran. Jadi, komponen hanya memberi awak kualiti. Tidak ada sebuah kualiti... ...tidak ada sebuah kualiti. Tapi sistem adalah... ...yang satu teruskan membawa... ...berkualiti... ...selepas semua komponen yang ia mencari. Berserah, kita mempunyai komponen agregasi... ...yang menarik semua komponen... ...tidak ada kualiti. Dan sistem membaca dan menarik kualiti... ...dan mempunyai kualiti... ...dan mempunyai kualiti yang baru... ...mencari kemahiran. Dan lagi, hanya komponen yang menarik. Tapi kerana entiti mempunyai komponen... ...dengan kemahiran transitor... ...entiti sendiri. Jadi, kita gunakan sebuah contoh. Mungkin kita mahu mempunyai... ...berkualiti, berkualiti, dan berkualiti. Jadi, kita mahu... ...saya mempunyai komponen yang menarik... ...dengan kualiti Z lebih daripada 10. Pada masa ini, kita hanya menarik kemahiran... ...tidak ada kualiti. Atau... ...kalau kita mahu pastikan bahawa... ...mereka berkualiti di dunia kita. Jadi, bagaimanapun semua komponen... ...mereka akan mempunyai kualiti... ...tidak ada kualiti. Jadi, siapa yang mempunyai... ...berkualiti... ...kualiti sistem? Kualiti sistem? Pada masa ini, kita mempunyai sistem agregasi... ...tidak ada kualiti... ...ketika lagi adalah ketua ke atas. Dan sistem kualiti... ...saya mengajar yang зambah dan kualiti pada setiap. Jadi, seima jenis ini... ...tidak ada pada satu kebutuhan. Selain sebagian negara, sistem agregasi... ...cidak ada cuma kini... ...kalaupun hal yang berlaku. sistem agregasi untuk menjadi antara. Jadi, this is the typical dataflow in entity... ...quad systems... ...if some events screen, which could be like stream of... ...timesnames... ...or stream of gravestia events. Baiknya, kita mempunyai sistem agregasi... Saya akan mempunyai keterangan sehingga jika saya mempunyai keputusan untuk semua kesejaian yang dikorek. Saya akan mempunyai kesejaian yang dikorek. Anda boleh menghubungi saya pada masa jika anda tidak memilih keterangan. Saya akan membuat keputusan ini kembali. Kemudian, sistem agar berlumput untuk semua kesejaian yang dikorek dan mempunyai kesejaian yang dikorek dengan beberapa kesejaian. Dan itu memberikan kesejaian dan menghubungi keperluan yang dikorek. Di sini ada sebuah kesejaian yang sederhana. Jadi, kesejaian yang dikorek berlumput seperti ini. Kita mulai dengan sistem yang berlumput untuk beberapa keadaan di luar. Seperti sebuah kesejaian yang dikorek. Dan sistem berlumput untuk memperkenalkan logik yang dikorek dalam kesejaian yang dikorek. Kesejaian berlumput untuk keadaan sistem ini dan menghubungi kesejaian. Jadi, ia hanya sebuah kesejaian. Kesejaian berlumput untuk mengubungi kesejaian dan menghubungi keperluan yang dikorek. Dan kemudian, keadaan sistem yang dikorek. Dan kemudian, keadaan sistem yang dikorek kerana mempunyai kesejaian yang dikorek mengapalikkan keadaan sistem yang dikorek. Jadi, ini satu cara untuk membantu kita memikirkan tentang ECS. Anda boleh memikirkan seperti tabung yang berlumput. Jadi, setiap keadaan dikorek adalah tabung ini. Jadi, setiap keadaan adalah tabung ini. Dan kemudian, keadaan sistem yang dikorek. Jadi, pada pula-pula, anda mempunyai tabung ini dengan tabung ini. Pada tabung ini, keadaan, keadaan, dan keadaan. Pada tabung ini, anda boleh mempunyai keadaan sistem yang dikorek. Jadi, ini satu cara untuk mengubungi kesejaian yang dikorek. Jadi, contohnya, pada pula-pula, keadaan sistem yang dikorek dengan keadaan dan kumpul yang dikorek dibandingkan. Mungkin kita mempunyai keadaan sistem yang dikorek mengalami volume yang dikorek. Bagaimana anda mengalami keadaan. Kepada keadaan sistem itu, kita akan mengenai keadaan dengan setiap kumpul yang dikorek. Dan kemudian, setiap keadaan, menurut beberapa keadaan. Ini satu keadaan lain. Jadi, saya harap, semua orang sudah selesai. Tapi keadaan sistem yang dikorek. Ada sebuah pertanyaan yang dikorek? Jika anda mahu membuat sesuatu keadaan yang dikorek, seperti dua kumpul yang dikorek bersama, apabila anda meletakkan keadaan. Jadi, hanya untuk mencari-cari lagi, anda mempunyai dua kumpul, anda mempunyai keadaan sistem yang dikorek untuk mengubungi dua kumpul pada masa yang sama. Apabila kumpul yang dikorek bersama, atau anda mahu membuat sesuatu kumpul yang dikorek. Ada sesuatu keadaan yang dikorek, yang kita akan meletakkan. Baiklah. Terima kasih. Ada beberapa perkara yang baik tentang ECS. Pertama, perkara terbaik untuk mengkorek. Kerana bagi contoh, tetapi, anda mempunyai keadaan, sistem fisik, sistem AI, sistem pathfinding, sistem gravitas, sistem ini berkumpul dari setiap orang. Mereka hanya mempunyai kumpul yang berbeda dan kumpul yang berbeda. Ada secara separationsa kemungkinan, setiap kumpul hanya satu perkara. Jadi, anda mempunyai keadaan, dan anda boleh membuat, bagi contoh, ini bagaimana anda membuat kumpul, anda hanya mengambil entiti, anda hanya mengambil kumpul yang ada. Terima kasih. Itulah perkara yang lebih damai dengan penggunaan. Masa lagi, anda boleh mulai, kemudian bahagian sebuah kumpul penting, anda boleh memilih lampu-pintang dan terjemuss. Bersanjur untuk penggunaan unit. Berkumpul berarti, kumpul setiap kumpul lagi memiliki memberi sebuah kemungkinan dan, setiap kumpul kumpul adalah seperti sebuah unit. Anda dapat mengubahnya hampir dengan seberang. Anda juga boleh mengambil Contohnya dengan Mock atau Demo komponensi di Runtime. Yang lain adalah bahawa jika anda memutuskan data dari fungsi yang digunakan, bermaksud bahawa anda mempunyai komponen yang sama, tetapi anda dapat mempunyai sistem yang berbeda dengan komponen. Contohnya, anda mempunyai komponen grafis. Mungkin anda boleh mempunyai komponen wind yang menjadi berbeza. Anda juga boleh memperkenalkan objek di Runtime, seperti yang anda lihat dan memperkenalkan sesuatu. Anda boleh memperkenalkan Runtime tanpa memperkenalkan komponen dan memperkenalkan semua komponen di Runtime. Dan ini juga menghargai komponen. Kerana sistem anda dapat sangat mudah berdiri untuk memperkenalkan komponen berdiri dan memperkenalkan komponen. Tetapi, anda dapat memperkenalkan komponen untuk ECSS. Jadi, perkara pertama adalah, ramai orang belum pernah mendengar ECSS sebelumnya. Bagaimana jika anda pernah mendengar ECSS sebelumnya? Baiklah. Baiklah. Tetapi, ramai orang masih belum mendengar. Siapa yang menerima tangan? Jadi, bagaimana anda mendengar? Oh, betul. Baguslah. Tapi sebelumnya, anda tahu apa yang ECSS ada? Mereka adalah bahawa banyak orang tak pernah mendengar. Jadi, bagaimanapun, bagaimana saya mahu membuat web menggunakan ECSS? Bagaimana anda dapat melakukannya? Bagaimana anda tahu? Anda tidak tahu bagaimana menulis? Bagaimana anda melakukannya? Yang kedua adalah, anda perlu mengandalkan komunikasi proses. Untuk contoh, bagaimana anda mengandalkan sistem dan komponen berdiri? Pada masa yang anda tidak mempunyai untuk mengandalkan masak-masak antara proses. Contoh, jika anda bercakap tentang elixir, anda mempunyai beberapa aplikasi untuk mengandalkan itu. Tetapi, bagaimana anda mengandalkan jawa atau c, anda mungkin perlu mengandalkan masak-masak jawa atau sistem pakar atau sesuatu yang tidak mempunyai aplikasi yang berdiri. Jadi, itu satu kompleksiti yang lain. Yang lain adalah komunikasi interkompon. Pada masa sistem, anda perlu mengandalkan atau mengandalkan beberapa kompleksiti. Contoh, bagaimana anda mempunyai satu sistem yang mengandalkan masak-masak antara proses dan perlu mengandalkan masak-masak antara dan mengandalkan. Atau, apabila sistem mengandalkan atau mengandalkan masak-masak antara proses. Ya. Jadi, ada beberapa suatu kompleksiti untuk itu. Sekali lagi, anda boleh pergi ke tempat ini dulu. Jadi, ECS tidak sangat mengandalkan seperti MBC. Ada banyak pengalaman dan banyak kemungkinan yang berlainan dalam penggunaan. Untuk mengandalkan penggunaan itu, apabila komponen perlu berbincang dengan orang lain, anda mungkin perlu mempunyai sebuah channel yang lain untuk komponen yang tidak dapat diperkenalkan. Jadi, mereka dapat memperkenalkan dan mempunyai. Ya. Jadi, sekali lagi, ini menjelaskan beberapa kompleksiti yang anda perlu kira jika anda membangun dalam ECS. Sekali lagi, masalah adalah komunikasi inter-system. Apa yang terjadi apabila dua sistem perlu mengandalkan komponen yang sama? Contoh, apabila kita ada dua komponen, satu memperkenalkan dengan minus satu, satu memperkenalkan dengan 10. Itu mempunyai kemungkinan. Pada penggunaan kompleksiti, sistem yang berlainan, mereka akan berbeza. Jadi, bagaimana anda mempunyai? Jadi, sekali lagi, ini menjadikan kepada anda. Anda dapat memperkenalkan dengan beberapa cara. Atau anda dapat menjadikan bahawa semua kompleksiti diperkenalkan. Sekali lagi, ini menjadikan kepada anda. Sekali lagi, ada banyak kemungkinan yang dapat diperkenalkan. Ia bukan kecuali kecuali. Jadi, satu lagi kemungkinan. Pada kemungkinan terakhir, kemungkinan yang terakhir adalah penggunaan kompleksiti yang lebih berlainan. Jadi, pertanyaan ini adalah, siapa atau mana kompleksiti berlainan kepada kompleksiti? Jika ada kompleksiti yang berlainan, ada kompleksiti yang berlainan atau kompleksiti yang berlainan? Kompleksiti yang berlainan? Maksud saya, ada entiti yang berlainan? atau compel? ada quatre kemungkinan yang berlainan? atau gaya? Sekali lagi, siapa mengenal apa dan siapa mengenal yang? Jadi, Entiti ini membuat kompleksiti sendiri atau ada sebuah kompleksiti yang berlainan?ITor yang berlainan? Jadi, saya mengenali, saya mengenali, untuk membangun bahagian. Jadi, anda perlu mengambil adik untuk sistem anda untuk mempunyai komunikasi proses. Bagaimana dengan masa? Bagaimana dengan masa? Bagaimana dengan masa? Jadi, saya akan menunjukkan kepada anda beberapa pelajaran rekanan ECS di luar dan permainan. Jadi, kemudian, ini mempunyai sebuah begitulah yang mempunyai produk tersebut yang dipanggil Special OS. Yang penting untuk mengambil sistem komponen sebagai penghantaran. Ada beberapa pilihan untuk produk ini adalah untuk mempunyai dunia luar yang besar. Contohnya, sebagai penghantaran tersebut, ini adalah sistem penghantaran untuk mempunyai permainan dengan 100 atau 1000 pendidikan. Ini adalah simulasi network, simulasi internet topologi yang anda dapat periksa semasa jika jika sebuah ruptur di UK berlaku, apa yang akan berlaku dengan seluruh network? Kemudian, dengan semua ini, perkara yang penting adalah penghantaran besar yang mempunyai simulasi di luar terhadap pilihan ECS. Ini adalah pilihan komponen yang penting. Jika anda melihatnya, ada penghantaran yang bersendirian dari beberapa komponen, komponen fisik dan penghantaran EIS yang diberlaku oleh sistem penghantaran. Jika ini, saya akan beri pilihan penghantaran. Jadi, ini bagaimana yang diperlukan sekarang. Sekarang, ada sebuah sebuah sebuah sebuah sebuah ruptur. Saya akan mengambil beberapa detik tentang satu permainan yang tersebut di LXU. Sebelum itu, bagaimana jika anda pernah dengar dari LXU? Jika anda pernah menggunakan LXU atau menerimu di LXU. Ya, LXU sangat bagus. Anda harus mencuba. Jadi, LXU adalah sebuah langit yang tersebut. Saya rasa tidak lebih kuat daripada 3 atau 4 tahun. Ia adalah sebuah langit yang tersebut kepada R-Line. Berapa banyak anda dengar dari R-Line? Baiklah. Bagus. R-Line tersebut kerana ia digunakan oleh WhatsApp. Di mana mereka menerima beberapa nombor yang luar biasa di mana mereka mempunyai satu masin, satu kanan, menerima 2 juta berlaku pada masa yang sama. Jadi, itu beberapa nombor luar biasa. Mereka melakukan sebab rancangan terkenal R-Line. R-Line adalah sebuah langit yang berlaku pada tahun 70-an atau tahun 80-an oleh Ericson, oleh Ericson. Dan ia digunakan untuk berkomunikasi seperti berlaku. Dan sebab dan salah satu tanpa R-Line adalah R-Line berlaku. Jadi, apabila anda mempunyai telefon, anda tidak menunggu seseorang yang berlaku untuk berkata, oh, maaf, kami berlaku dari internet. Sebenarnya, sebaiknya. Jadi, tanpa R-Line adalah ada R-Line berlaku. Ia bermaksud R-Line adalah 9999% sejauh masa. Maksudnya, ia berlaku sejauh masa. Jadi, teman-teman yang mempergunakan R-Line adalah WhatsApp, lagi untuk Pemeriksaan Min Facebook Messenger, dan beberapa projek terbuka yang anda boleh gunakan sebelum R-Line dan Q, seperti berlaku dan Reac, seperti yang saya menunjukkan. Berlaku juga. Jadi, perkara yang terbaik untuk berlaku ada beberapa perkara yang berlaku bagaimana anda boleh menggunakan Scala atau Aka atau berlaku dengan Scala atau Aka. Baiklah. Jadi, Scala dan Aka adalah sebuah ektara untuk Scala. Dan sebuah ektara yang berlaku yang telah diberlaku di selanjutnya. Dan Aka sebenarnya mempunyai sebuah lelaki lain. Ada seseorang yang mempunyai sebuah lelaki lain. Siapa yang mempunyai Aka sebuah lelaki lain? Lelaki lain? Siapa yang mempunyai itu? Ya. Ya. Saya mempunyai lelaki lain. Ya, tentu saja. Jadi, ia adalah lelaki lain. Dengan Alexia, kita boleh menggunakan ektara yang berlaku dengan sebuah lelaki lain. Jadi, ia mempunyai ektara yang berlaku yang akan kita lelaki lain. Tapi pada masa yang sama, lagi, ektara yang berlaku adalah sebuah lelaki yang terbaik. Jadi, bagaimana anda mempunyai ektara yang berlaku? Bukan terbaik. Alkaranat, Alexia memberingat dengan sebuah lelaki yang berlaku yang panjang. Kita lihat beberapa ektara itu dan saya rasa kita akan ada ialahnya. Ia mempunyai Ohak dan kemari yang berlaku Ohak dan kemari yang berlaku dan kita tak boleh berubahPetan dan tidak ada hal yang sesuai dan tidak ada hal yang berlaku untuk sebagian gangguan sebagian kemari. Dulu lagi, kita kata tentang hal itu. Ibu menggunakan kemari. Ibu bercanda bermakna Kamu boleh mengalami tipe spesifikasi, tetapi kamu tidak perlukan mereka. Mereka mempunyai sebuah tool untuk membantu kamu memastikan bahawa perkara-perkara yang berlaku di kumpulan. Untuk mempunyai sebuah tipe spesifikasi, semuanya ada demo untuk kamu. Kamu boleh menghubungi kode alang dari Elixir. Sangat cepat dan mempunyai kemampuan metaprogram. Jika kamu mempunyai kemampuan metaprogram dari Elixir, kamu akan mempunyai sebuah kode alam. Sebenarnya, setelah kamu mempunyai kode alam, kamu perlu menjelaskan model sepenuhnya. Jadi, kamu perlu mengalami kemampuan metaprogram. Sebenarnya, tipe spesifikasi adalah salah satu tipe komputation di mana kamu boleh menjelaskan spesifikasi yang lain yang lain. Adakah proses sebuah mesej dari sebuah pembantu saon. Dan membuat sebuah pembantu saon, kamu akan menipukan lagi. So actors can send messages to other actors, receive messages to other actors and create other actors. So for example, you have this diagram here. You have an actor A who sends two messages to actor C. Similarly this actor B that sends a message to C. And in response to these messages, actor C can do any of those things. You can send messages back to A, back to another or to some other actor. Or you can spawn new actors so that you can distribute the work to other actors, for example. So actors here in elixir, these actors are called processes. And it's the key abstraction in elixir and airlines comparison model. I'm just going to start with the demo. 2P Ya, it's too high-rise already. And it's chilling on the top. Oh. 7P Is this big enough? So I'm going to open IEX, which is elixir interpreter. Let's create an actor. Process again, same thing. So here I'm creating a new actor that's supposed to listen for messages from other actors. And receive takes is sort of similar to a switch case where it accepts messages of a particular format. This is pattern matching, which I'll explain again later. It takes messages of the format that looks like a tuple with two items, sender and a message. And then in response to that message, we will output a message that says, oh, this other actor sent a message. So it created an actor and it returns a PID. PID is a process ID. It's an address of where that actor lives, essentially. So now we can send this actor, Jeff, a message. Before that, I just want to make sure that so the terminal itself is also an actor. So let's send Jeff a message. Tell it, oh, I am the sender and this is the message I want to send to Jeff. So what happened? We send Jeff a message, Jeff listen and responded, oh, this PID sent this message. And the third line is just a return value from the sender. So that's the basic concurrency primitive in Alexa. As you see, we saw three things. Spawn creates new actors, receive, listens to messages from other actors and sends messages to other actors. And with these basic primitives, you can do a distributed system. But you can screw it up pretty quickly if you do it with only those three primitives. That's why Eulang has this thing called the Eulang UTP. UTP stands from Open Telecom Network but Telecom Platform, but it doesn't really mean anything. It's a collection of battle-tested distributed systems patterns for building for tolerant applications. So one of these patterns is something called a GEN7, but essentially it's like a high-level extraction for building distributed systems. So I'm going to show you an example of GEN7. So this is a GEN7. So again, this is an extra syntax. As you can see, it's pretty readable. It's like Ruby. So it starts with the bottom here. So the bottom half here defines how the server or the actor responds to different types of messages. This is another thing about Alexa is that it has pattern matching. So you can see three different functions. They have the same number of arguments but different parameters. I mean the same number of parameters but different arguments. So for example, the first handle call, they cannot click. The second handle call takes a click as the first parameter. And the third handle call takes some tuple as a parameter. So pattern matching is a way to declaratively describe when you want to practice and efficient as well. So again, these defines how the actor responds to messages. And the top part is just some syntax sugar to make calling and sending different messages more easily. You can just have a method call to this module. So next, we're going to look at ECS interpretation in Alexa. So we're basically building this. It's a bunny holding clock. So we're just going to start up the system. So let's create a bunny. So I'm going to show you how an empty system, an ECS might work and later on we'll go through actually the implementation details. So this creates an entity, the single component called a time component. And we pass it some parameter, example each. So so this bunny entity as you can see has a list of components and an ID. So this ID is just used for reference. It's some metadata that helps us find where the entity is. And also have a time system. So the time system again enumeris over all components that it's in charge of according to some event. In this case, the event is I make the time system do something. So let's create the bunny again. Why is it still zero? Any ideas? It's because one of the things about Alexa. Any ideas? Why is it zero? Even though it's even to work, exactly. Object never change. So he's not a coach for if you are to use immutable languages. I have a reload method. In normal object-oriented languages or immutable languages, this would work. But it doesn't work for immutable languages. Why? Because there are no such thing as instance methods. There are only class methods. So this returns the actual new state. Okay, here's another question. Why? Because it's immutable, exactly. So the entity reload returns a new object in the latest state. The bunny wasn't modified at all. So what you should do instead is something like this. This gives you the actual state. So let's try another thing. Let's add a component to this entity at runtime. Let's create one of the different age so we can tell the difference. And now our bunny has two time components. It's holding two clocks. One of them each of four and one is the age of 100. So we can just create extend entities at runtime. Of course I'm using just simple time component but for production use any kind of component. This is just the basic overview of how it is as well. Any questions? Yes. So for the when the system updates the components are the component for each component. Is each component share what are the entities or component only belongs to one entity? So what you can update component. So we call it look for component and then update or rather it pulls the latest state. The actual state. So let's look at the actual interpretation. He's only seen how things would work. So let's look at the component itself. Component again entity. So an entity is just an ID and some components it's an array of components. And this is an example of gradual piping in Elixir. If you notice at each method I have something called a spec which defines the input and outputs of this method. But actually if I remove this the code will still run. Elixir as gradual piping means that it's not compulsory to have proper types in your code it just helps you debug it when you compile. Means that if you don't have this it will still run at runtime. So that's something called gradual piping if interested you can work for it. So for example with types I can define how my things will have an ID type something called an ID the list of component and so here when we build a new entity you can see it's just a data object it just returns a struct or a dictionary with some random ID and the components. Let's look at the component. Component has an ID again just for reference and state. Component is a data object usable data object for a specific responsibility or purpose. When you create a new component this might not make sense if you don't know so when you create a new component you create a new process to keep state we register that process into some common registry for our systems to access and that's it. There's just some setters and getters for the system Funny as a system So this is a time system It has a single public method called process which enumerates over all the components that it's in charge of What's this? You want to tell me what this is? What's this? What operator What is this operator called? If you use bash, I think you should know this Ya, it's a pipe Okay, let me just demo It's one of the two things about So normally, let's say you have a string You want to make it on upper case So you can't this Oh, but I changed my mind I want to make everything down case upwards You'd see this quote nested a third cause So this can get so bad that you have to extract that parameter there should go to variable first so it's more clear but if you have pipes you can do it Bash You can model a code as a series of data transformations from one input to another and pass it on to the next So this is quite a lot of readable code if you're writing a library and you see a lot of libraries use this pattern a lot So in the process method again, for each component we trigger a dispatch How many of you have done functional reactive programming Have you heard of it? Okay, no way So this is sort of a bit inspired by functional reactive programming I think if you use something like React Redux you would come across this The dispatch here is a pure reducer It takes some state an action and returns a new state based on that action So for example It's like a switch case Depending on the kind of event that your system receives how does that affect the state Essentially this is what the dispatch method does If it does like an increment event somewhere then the state would look like this If it does a decrement event somewhere it would do this Otherwise it just returns So this is an example of pure reducer If you want to learn more it's not a language but I won't go into too much detail and that's it Okay, so that's pretty much most of the content but if I close let you just conclude So entity component system is an overload architectural pattern that is mostly used for game development It overcomes some of the drawbacks of OOP style inheritance It has become a great fit for distributed systems Again, you've seen start-ups just building ECS type services And another thing is branching out into unfamiliar domain so I'm not exactly a game developer but actually ECS is mostly for game development and I think it's nice to go into domains that are not necessarily OOP to learn more about things that would not otherwise come across and share with you an example of the talk So that particular model programming it figures it all out and then they teach that to the next generation So that second generation think it grows up thinking oh, it's all been figured out we know what programming is we know what we're doing they grow up with dogma and once you grow up with dogma it's really hard to break out of it Do you know the reason why all these ideas come out in the spiritual time period the 60s or 70s why did it all happen then it's because technology goes late enough that technology could actually do things with computers but it's still early enough that nobody knew what programming was nobody knew what programming was supposed to be and they knew they didn't know so they just tried everything but mine were totally free maybe the program like that they just tried anything they could think of so the most dangerous spot that you're going to have as a creative person is to think that you know what you're doing because once you think you know what you're doing you stop looking around for other ways of doing things and you stop being able to see other ways of doing things and it becomes like these guys over here kind of coding along so much shows them so much shows them Fortran and they can't even see it just goes right over their head because they know what they're doing they know what programming is so they totally miss out on this much more powerful way of thinking so the message of this talk it's not really this stuff the message of this talk is if you don't want to be this guy if you want to be open receptive to new ways of thinking to invent new ways of thinking i think the first step is you have to say to yourself i don't know what i'm doing we as a field don't know what we're doing i think you have to say we don't know what programming is we don't know what computing is we don't even know what computer is and if you truly understand that and once you truly believe that then you're free and you hit the game again thank you I want to say if you stop, i don't have to say i don't want to say