 Ia tak terlalu teruk. Ia tak terlalu teruk. Kamu nak kontrol? Saya tak bawa. Saya lupa. Terima kasih kerana menunggu. Kami ada Salsong. Ia diberikan kepada kita. Dan ia akan menyebabkan semuanya. Oh iya. Sebelumnya, saya akan menyebabkan. Saya tak bawa. Hai. Baiklah. Saya seorang seorang kedua hari ini. Dan saya akan bercakap tentang... bagaimana anda boleh membuat... aplikasi dan beberapa langsung program. Semoga ia akan menyebabkan sesuatu yang berlaku... yang berlaku tadi. Mari kita lihat bagaimana itu berlaku. Saya akan bercakap tentang framework saya. Frame web ini disebabkan Tanuki. Dan ia adalah Mascot Tanuki... yang ada di kiri-kiri. Jika anda mahu berada di sana, tolong berdiri dan beritahu saya nanti. Saya ada mereka. Dan saya ada berada di sana untuk semua ini juga. Ia boleh juga beritahu saya untuk mereka. Okey? Okey. Tidaklah. Saya tak ada botan atau t-shirt. Saya tak ada apa-apa yang lain daripada penyakit. Jadi itu... Dan itu penyakit terakhir saya. Selepas ini, saya akan bertahun-tahun. Mungkin saya akan bertahun-tahun dengan penyakit ini. Dan penyakit juga. Jadi datang dan beritahu saya jika anda mahu penyakit ini. Jika seseorang beritahu saya lebih daripada saya, saya akan beritahu mereka lagi. Okey. Mari kita cuba memandangkan bagaimana untuk menggunakan ini dulu. Tidak. Tidak. Tidak. Tidak. Tidak. Tidak. Tidak. Terima kasih, Tidak. Cuma selalu... ...saya selamatkan. Jadi nama saya Sal Shung. Saya bekerja dengan Power Singapura sekarang. Saya memandangkan pasukan ini dalam Power Singapura di SBE Digital. Tidak. Tidak. Tidak. Tidak. Tidak. Jadi saya berada di industri selama kurang 25 tahun sekarang. Jadi saya memulai program kerja saya di Java. Dari mana. Dan ia berjumpa pada masa yang betul. Jadi... Saya berjumpa di Java sebelumnya. Ia menjadi pembentangan. Okey, itu berlaku dengan saya. Ada sesiapa ingat Tumbling Dukir? Dari Tumbling Dukir? Tidak. Tidak. Dari mana, saya berjumpa... Saya berjumpa dengan Tumbling Dukir di Kofokon, Vietnam. Dan saya bercakap dengan pembentangan seperti ini... ...berkata-kata sama-kata. Dan setiap pertanyaan saya bertanya... ...tidak ada sesiapa yang berkata-kata. Tidak ada sesiapa yang berkata-kata. Dan itu bukan hanya saya. Bukan hanya saya. Tidak ada sesiapa yang berkata-kata. Saya harap itu bukan kes ini. Saya berjumpa di Kofokon sebelumnya. Saya bercakap dengan pembentangan yang berlaku di Kofokon, Vietnam. Saya juga bercakap di Kofokon, India sebelumnya... ...dan di Kofokon, Dubai. Ya, di Kofokon, Dubai. Bukan lagi. Saya akan beritahu kisah lain. Tapi, saya bercakap dengan pembentangan. Saya juga bercakap dengan beberapa pembentangan di Kofokon, Singapura. Kita akan beritahu nanti... ...bercakap dengan Kofokon, Singapura. Jadi, saya beritahu. Saya beritahu 4 pembentangan yang berlaku di Kofokon sebelumnya. Jika anda tidak tahu, satu pembentangan itu adalah tentang Kofokon. Pembentangan di Kofokon adalah Kofokon yang saya beritahu. Jadi, itu sangat tentang saya. Jadi, bagaimana jika anda mendengar pembentangan di Kofokon? Terima kasih kerana menangani anda. Tapi, ia adalah kecewa yang hebat... ...sehingga orang-orang seperti ini tidak berpura-pura. Kerana, tiada apa-apa yang anda beritahu... ...saya akan berjalan keluar dari sini. Jadi, anda tahu, pembentangan di Kofokon selalu berubah. Betul? Selalu berubah. Dan itu sebabnya, kami masih ada kerja. Betul. Pembentangan selalu berubah. Dan itu yang berlaku untuk kami. Semua pembentangan itu berkata, anda selalu berubah, anda selalu berubah apa yang anda mahu lakukan. Ini adalah sebuah batu-batu yang saya pasti. Pembentangan di Kofokon juga, saya pasti. Semua anda telah mengalami ini. Dan pembentangan di Kofokon juga berubah. Pembentangan di Kofokon berubah... ...dalam pembentangan di Kofokon. Kadang-kadang. Saya ingat, saya melakukan banyak perubahan... ...di satu masa. Dan salah satu... ...dan pembentangan juga. salah satu pembentangan yang besar untuk pembentangan. Dia memutuskan... ...dan membuat pembentangan di Kofokon yang dipanggil Elixir. Jadi, saya tidak pasti... ...berapa anda dengar tentangnya. Jadi, ini sangat menarik. Jadi, pembentangan di Kofokon berubah juga. Dan tentu saja, orang berubah. Jadi, hari ini, anda mengandalkan projek ini. Anda mengandalkan projek ini untuk projek ini. Sebelum esok... ...awak boleh keluar dari perusahaan. Ada orang lain yang mengambil pembentangan untuk anda. Atau, anda boleh berada di situ. Anda mungkin adalah yang mengambil pembentangan untuk seseorang lain. Dan itu adalah masa di mana anda berkata... ...tidak, ini pembentangan. Tidak, ia berlaku. Saya akan mencukar pembentangan. Saya akan menerima segalanya. Bagus. Ia berkenal. Ia berlaku banyak kali. Sebenarnya, orang yang mencukar anda... ...dan mencukar pembentangan untuk pembentangan... ...saya akan berkata, tidak, tidak, tidak, tidak. Berapa banyak pembentangan ini sebenarnya berguna? Dan kemudian, anda akan membuat pembentangan ini... ...berapa banyak pembentangan yang berguna, berapa banyak tidak. Dan kemudian, ia berlaku. Jadi, itu cerita. Jadi, apa yang berlaku? Satu-satunya perkara yang terjadi... ...pada semua pembentangan ini. Bagaimana pembentangan ini berlaku? Jika anda menerima pembentangan... ...yang berguna pada pembentangan lain... ...dan jika anda membuat pembentangan ini... ...dan mereka berguna pada setiap orang... ...ini berlaku. Ia berlaku segera. Kadang-kadang kita lupa... ...berapa banyak pembentangan ini. Ini sebenarnya, pembentangan sebenarnya... ...dulu dari... ...pembentangan Github. Mereka bergerak dari 3.2... ...untuk 5.2... ...pada satu masa. Beritahu berapa lama ia berlaku. Beritahu berapa lama ia berlaku. Ada apa-apa? Okey, itu... ...tidak, Tuan, hebat. Tapi ada apa-apa lain? 5 tahun. 5 tahun? Saya berguna kerana... ...mereka sebenarnya memilih ini. Mereka mengambil 1.5 tahun untuk memilih... ...pembentangan ini. Ingat, ini adalah pembentangan ini. Mereka tidak menolong... ...pembentangan ini. Mereka tidak membuat pembentangan baru. Mereka menolong pembentangan ini. Mereka mengandung. Jangan lupa. Mereka mengandung. Mereka sangat gembira... ...mereka memiliki 1.5 tahun. Dan... ...mereka mengalami... ...bagaimana dengan... ...sahit pembedahan di Storcom. Mereka mengandung. Mereka mengandung keadaan. Kita mengandung. Mereka mengandung. Jadi... ...ini adalah... ...situasi di industri sosial. Saya tidak mengatakan bahawa saya datang ke sini sekarang, saya akan berikan kecuali solusi. Saya telah bekerja pada masalah ini yang telah mempunyai saya dalam masa selama beberapa tahun dan saya telah menginturkan masalah ini. Ini adalah isu yang paling terakhir saya cuba mencubanya. Saya akan menjelaskan kamu framework saya. Jika anda fikir itu berlaku, tolong bantu menggantikan ini. Jika anda ada feedback, tolong beritahu saya. Sebelum saya mulakan dengan ini, saya akan beritahu saja bahawa masalah ini tidak adalah masalah baru dan ia telah telah dibuat sebelumnya. Sebuah cara yang paling terakhir saya mencubanya adalah untuk menghubungkannya daripada kecuali solusi. Dan itu telah telah telah telah telah dibuat sebelumnya. Ada sesiapa tahu, ada sesiapa akan beri jawatan di mana ia telah telah telah telah dibuat sebelumnya. Ada tempat yang anda telah melihat sebelumnya. Ia sebenarnya sangat berminat dengan semua anda. CGI? Baguslah, tapi itu bukan apa yang saya beritahu. Anda sedikit lebih awal, bila-bila. Ada sesiapa lain? Atau anda tidak tahu apa yang saya bercakap tentang. Saya akan menyebabkan sebab anda sebenarnya telah telah beri tangan sekarang. Jadi, micro-services dan docker. Sebenarnya, anda menghubungkannya daripada kecuali solusi. Jadi, jika anda menghubungkannya daripada kecuali solusi dan ia mempunyai kecuali, ia sangat mempunyai kecuali solusi yang tidak mempunyai sesuatu yang lain, maka anda tidak menghubungkannya daripada kecuali solusi. Kerana anda tidak mempunyai sesuatu yang lain. Tentu saja, apa maksud saya adalah, mereka sebenarnya membangunkan segalanya yang anda perlukan dan mereka akan membangunkan kecuali solusi. Mereka boleh membangunkan segalanya di satu micro-services. Selain itu, itu berlaku kadang-kadang, tetapi mereka berlaku di mana ia tidak berlaku. Dalam satu kes, ia tidak benar-benar berlaku dalam aplikasi sejujurnya. Kerana apabila kita perlukan aplikasi sejujurnya, anda tidak dapat menghubungkan kecuali solusi atau menghubungkannya. Jadi, apa tentang aplikasi kita? Jadi, mari saya menghubungkan sedikit untuk bercakap tentang aplikasi software. Jadi, aplikasi software tersebut adalah aplikasi software yang dapat dipakai dan dapat dipakai oleh seorang manusia. Seperti seorang penggunaan, anda memperkenalkan. Anda menghubungkan kecuali solusi, anda dapat jawapan. Sebenarnya, itu adalah aplikasi software. Plikasi software adalah aplikasi software pada aplikasi web dan kecuali solusi adalah apa yang anda tahu, HGP. Jadi, mari kita melihat kecuali kecuali solusi. Ini adalah kecuali sejujurnya dengan beberapa modifiasi. Dan jika anda menghubungkan itu kecuali aplikasi web, kecuali sejujurnya adalah metode pada URL dengan modifiasi dan ini adalah modifiasi pilihan. Saya tahu ini adalah sesuatu basic untuk banyak anda, atau saya rasa sebarang-barang anda. Beritahu saya sekejap. Saya akan menghubungkan kenapa saya bercakap tentang ini. Dan anda akan melihat bagaimana ini berguna untuk Tankey juga. Untuk jawapan, ia sederhana. Ia adalah kecuali sejujurnya dengan penggunaan status, kecuali sejujurnya, kecuali sejujurnya, kecuali sejujurnya, etc. Bagaimana dengan aplikasi web? Jadi aplikasi web selalu berjalan-jalan seperti ini. Anda akan mempunyai router atau multiplexer atau apa-apa yang anda nampak. Ini adalah seorang yang mengambil kecuali kecuali. Dan anda akan mempunyai kecuali kepada penggunaan berbeda. Di aplikasi berbeda, anda akan mempunyai kecuali kecuali kecuali. Ada yang menghubungkan kecuali kecuali atau penggunaan berbeda. Ada yang menghubungkan kecuali kecuali. Tapi pentingnya, saya adalah penggunaan berbeda. Ia adalah penggunaan berbeda. Ia adalah tempat yang sangat komedian. Jadi saya menghubungkan kecuali kecuali. Jadi ini satu cara untuk membuat aplikasi. Dan ini adalah cara yang CGI, FASCGI, Apache, NGNX, Mods, jika. Router menjadi server web. Server web adalah router. Dan kemudian ia menghubungkan kecuali. Kali ini adalah aplikasi yang berlainan pada server yang sama. Kemudian mereka bergerak atau sudah bergerak dan mereka menghubungkan kecuali. Mereka menghubungkan kecuali dan menghubungkan kecuali. Tapi yang lebih komong hari ini adalah model ini. Yang adalah model aplikasi. Jadi untuk kalian yang menulis java, ini adalah java yang sangat berlainan untuk kalian. Ini adalah aplikasi jawa yang kalian menulis java. Semua pendidikan di sini. Semua pendidikan di sini. EJB. EJB masih digunakan. Saya tidak pasti. Mereka juga pendidikan. Jadi ini aplikasi java. Java menggunakan. .NET menggunakan. Ruby menggunakan juga. Jadi ada Ruby di sini dalam periksaan. Hanya juga. Ruby menggunakan aplikasi java. Python juga. PHP dan sebagainya. Ini adalah model yang sangat komong. Tapi model ini adalah java aplikasi java. Maksudnya semua pendidikan anda di java. Semua pendidikan anda di Ruby. Semua pendidikan anda di Python dan sebagainya. Jadi ini langit program singapura. Apa jika anda menghubungkan kecuali pendidikan? Jadi setiap pendidikan anda diperkenalkan kecuali pendidikan dengan langit yang berlainan dengan langit yang berlainan dan sebagainya. Dan itu sebenarnya adalah idea yang berlainan. Itu bukan idea yang sangat kompleks. Konsep adalah setiap pendidikan anda sekarang berlainan di perawatan sendiri. Ia tidak bergantung pada apa-apa pun. Dan secara sekaligian, anda boleh diperkenalkan kecuali pendidikan yang berlainan. Jadi, tentu saja, anda boleh menulis segala-galanya dalam langit program yang sama juga. Itu tidak berlainan dengan anda. Tapi secara teoretis anda boleh menulis langit program yang berlainan. Baiklah. Ada kecuali pendidikan di sini. Okey, mari kita bercakap tentang pendidikan tangan Tanuki. Ada tiga pendidikan tangan yang saya membuat hari ini. Jadi, pertama kali, ia adalah apa yang saya nama pendidikan atau pendidikan pengawasan. Saya nama mereka Benz. Biasanya, ini hanya pendidikan program yang berlainan. Pertama, ia adalah pendidikan kecuali pendidikan dan ketiga, adalah pendidikan pengawasan. Saya akan beritahu sedikit tentang ini. Jadi pendidikan, ia adalah pendidikan yang berlainan. Tak ada apa-apa lagi. Mereka akan bermula dengan tangan Tanuki ketika kecuali pendidikan yang berlainan. Perkara yang telah diperkara akan menjadi JSON dan kecuali pendidikan juga akan menjadi JSON. Dan tangan Tanuki akan menghubungi JSON dan berlainan kecuali pendidikan. Bagaimana anda melakukan ini? Mereka mempunyai bahagian untuk pendidikan. Ini adalah menghubungi JSON dan kecuali pendidikan akan menghubungi JSON kembali ke serva Tanuki. Jadi itu adalah bagaimana berlainan. Sangat mudah. Ia sangat seperti CGI. Model sangat seperti CGI. Sebenarnya, saya akan berkata bahagian yang penting adalah yang CGI menggunakan variable kecuali pendidikan. Di sini, saya menghubungi jenis jenis JSON. Mereka tidak ada variable kecuali pendidikan yang berlainan. Jadi itu sangat berlainan. Perkara yang berlainan adalah serva TCP soket. Anda memulai Tanuki. Perkara yang berlainan akan berlainan dan kemudian ia akan berlainan. Setelah ia berlainan, anda akan menghubungi soket ke port dan berlainan ke port juga. Kemudian semua berlainan dan berlainan di jSON. Sangat mudah. USA, jenis JSON fade, itu sangat sedap, itu semua Startle. Apa-apa migran dalam perlainan, itu sudah di luar ini. Dan ini adalah jenis itu. Anda nampakkan ini shapes significantly mudah. Sebenarnya anda tidak perlu berlasa 아직nya. Ini berlainan yang pressures kemudian 고양 store awak. Jadi jika anda berlaini, You can write in Ruby, Python, Go, PHP, whatever it is. As long as you can pass JSON, you can pass this, you can take the information and then you can process it. What you just need to do is send this response back, okay? So if you can create a JSON, in fact JSON is nothing much more than a string, right? So if you can create a string and send it back, it will work too. What you need is a status. You need to tell what the status is, 200 in this case. If you want to add haters, you can just add haters. And if you want to add a body, you can add a body as well, okay? So that's a response. Let me show you how this works for Ruby, okay? So this is the simplest form of a binary. It's an executable file. You require a JSON library. You pass the argument. Remember, the argument is a JSON file, which is a request. I just take the params, which is the name, and I do a put string, okay? Change it to JSON. How it goes, you return. Go, a little bit more complicated. It gives a lot more processing. I added up a cookie here as well into the hater. And this is how you keep persistence, right? Because you need to persist between sessions. You need cookies. In fact, every programming language does this way. This is the wet way of doing it. I just make it a lot more explicit instead of a framework actually doing it for you. Now you have to do it yourself. But it's not that much more complicated. Listener, a Python listener. Sucker, you listen. Whatever you receive, basically you send out again. Here with some processing. And let me do a live demo here. Ops. Okay. All right. So how does the... Oh, can you see anything? Mira. All right. Here you go. So let me start the Tanuki server. Right, that's all you need to do. Start the Tanuki server. Tanuki is written in Go. Tanuki is written in Go. You see this form here? Let me show you how the code is like. If I find my cursor and show it to you, where is my code? So this is actually the demo file that defines how you route. Let me show you where is it? The handlers. So you notice here within... I'm going to stick this out. So you notice here the code here has a case and I will test the method. If I'm sending a GET request, what I'll do is I'll return whatever is after... Ruby has this strange thing called N. Basically, everything after this N is considered data. So I use this neat little Ruby trick and I return everything that's after here. And this is basically the form you saw just now. But if I send a post, what it will do is just say hello and whatever I put in under the name. And the name is basically the username. Let's see how this works. So basically it returns the information. So that's in Ruby. I actually did it in a number of other languages. This is the actual executable. I did it in PHP, like this is how it looks in PHP. This is a Python listener that I showed you just now. This is a very simple Ruby listener. This is the... Sorry, this is a simple Ruby bin. This is a simple Ruby listener. And I did a little bit more stuff as well. Let's see. I did something in Bash. Okay, so I wrote a handler in Bash. Pretty simple. Basically, I use this file called JQ. It's a JSON query. Basically, I just extract the information. And literally I just cat out this thing and send it back. Let me show you. Just to show you that I'm not kidding you. Okay. I hope this works. So this works. But how well does it work? So I actually put in some timing here as well. Actually, the Bash works pretty well. 25 milliseconds. 25 milliseconds. I did one in Rust as well. I know this is a Go programming meetup, but I did one in Rust as well. Rust is a nice language. So... Go is better. So you can tell the difference, right? So you say from Ruby down to Rust. I have it in Go as well. So it's actually quite fast. It's about 9-10 seconds as well. So this is the... This is the binary. Let me show you the listener. If I have it running. Let's see. So RubyListener is actually pretty fast. It's in microseconds. Let's look at the Go one as well. So... It's about the same. It's because the processing is very minimal, right? Actually, there's literally no processing. I just returned the data. If there's more processing, I'm quite sure the performance will change. So anyway, so this is Tanuki. It's not a very complex framework. And some might even dispute it to be called a web framework. But my rationale for calling a web framework is basically a tool to help you to build web applications. And the thing about this is, it doesn't help you to build web applications easily, because it is not about ease of writing web applications. You'll notice it's not so... It could be, depending on your code, it might not be so trivial to write full-fledged web applications with this. The thing is that now you can actually write web applications that are quite independent from each other. If you change one handler or somebody comes in tomorrow, the application actually works. But now you need to add in a new handler to do, add in a new feature. You could keep the existing codebase as it is. You write in your favourite programming language. Use your favourite libraries. Create another handler. And everything will still work. But over time, maybe you might want to switch them out. Because remember, all of these just depends on how it performs. You could switch them out one by one. Say, look, I don't like Ruby. It's not as performant. I want to switch it over to Go. So you switch over one by one. If the case where you need to switch in a different framework, I can't switch it one by one. Basically, obviously, I need to switch all of it. Because it's just one web application. But in this case, it's a web application where the different handlers are not dependent on each other. That's basically the reason why I wrote Tanookin. That's all I have tonight. Any questions? Yes, please. Okay, so serverless programming is not a web application. So this is a complete web application. I have another question. I see many languages you are running. So is it executable? You just run Ruby compiler. Every time request comes. So if I hit hello world in the Ruby. So every time execute a Ruby compiler to run that program, take the script and execute and then get the data. So what you just need is for... So there are three different types of listeners. So three different types of handlers. So the first is a binary. Binary is always local because it is called by Tanookin. So Tanookin actually calls the file. It's not actually running. It's just there. When you, as a user request for something to be done, Tanookin will route it to the correct binary. It will call it, run it in the process, send the data, the request as an argument, calling argument. So your handler needs to process it. You need to take in this as calling argument, right? You saw the Ruby coaches now is RV0. So basically it's the first argument. You process it if you need to or you just don't care and then you need to return a response in JSON that has three values. The status, the header and the body. And that's all. That's the binary. That's the simplest way, simplest, simplest possible. The more complicated ones where you need to start off a TCP socket server. Now you can start it off locally, which means you create this and you expect Tanookin to call this on startup. So you will start this up at a particular port of your choice, of Tanookin's choice, of not your choice, right? You don't have a choice. And then the request will come in, it will send to this particular port and you will return to the same port. You could actually even run a remote listener, meaning that you create the same listener. You put it in another server. Put it in another server. And this other server, you have to define the port now because Tanookin obviously will not be able to call this and start it up. So it runs in a separate server. You call this at the port, it will return to you. You can't call it. Secondly, you will expect there will be some network delay, latency issues and so on. But the good thing about it is if you have heavy duty processing in another server, you could actually spin off a really large instance and put it in the docker with a lot more memory or whatever it is and go crazy, right? And the whole thing could just return you one thing. And that's what I was trying to refer to early on as well. In micro services or whichever that floats your boat under. But ultimately, the idea is that as a single web application, you do not need to be restricted as a single web application under a single programming language, running in a single environment. So for example Ruby, you could write Ruby in 2.3. And then you could have another handler in 2.4. Ruby comes again 2.6. Okay, now you can write in 2.6. All of them using different libraries because you can bundle your gems together and so on and so forth. So they can run under a completely different environment. So answer the question. So last question. So when you say you have multiple listeners, so is it like proxy server? Become like proxy server whenever I request. So it listen to the port and just return the data. It does certain things. And right now, it's rather primitive. It's main function is like a proxy. But in the future, the idea is actually provide more capabilities within Tanuki itself. So you can do some pre-processing as well. But generally speaking, it does proxy your handlers. That was... Any other questions? Alright, thank you. Terima kasih.