 Selamat pagi, semua. Hari ini, nama saya Jiayu. Saya akan bercakap tentang beberapa pengalaman saya yang bekerja di App Engine, sesuatu, dan beberapa pelajar yang saya... dan sebagainya untuk mengucapkan perniagaan saya sebagai perniagaan dan juga bercakap sedikit tentang Dev Ops. Jadi, sedikit tentang diri saya. Saya sekarang seorang pelajar di SUTD. Sebelum ini, minggu depan saya akan memulakan terma saya. Jadi, saya menghubungi tahun ini dan masukkan perniagaan saya. Sebelumnya, di tengah-tengah tahun lalu, saya bermula menulis perniagaan. Saya telah menulis beberapa pelajar di beberapa pelajar. Terutamanya, perniagaan pertama yang saya merasakan mempunyai lebih banyak perniagaan dan yang sepatutnya menunggu. Ia hanya tentang bagaimana mereka menggunakan beberapa perniagaan untuk menghubungi perniagaan yang digunakan semasa perniagaan antara Prime Minister dan perempuan dia. Sebab itu saya bermula dengan semua ini apabila perempuan Google Cloud kita memulakan perniagaan saya. Saya juga penyelesaikan perniagaan, dan saya suka bekerja dalam perniagaan saya sendiri. Jadi, sesuatu yang saya bekerja, mungkin sebuah cara untuk bermain penyelesaikan, tetapi bukan dengan perniagaan Prime Minister, tetapi dengan perniagaan perempuan sendiri yang saya bermain dengan. Sebenarnya, sekarang, perempuan saya adalah penyelesaikan tanpa saya di Turf City. Dan perniagaan lain yang saya bekerja adalah cara untuk membuat sebuah tepung penyelesaikan di WhatsApp. Dan saya melakukan ini dengan sebuah teman saya, Tian, yang telah menghubungi di WhatsApp pada tahun yang lalu. Jadi, perniagaan bus E-Tay adalah perniagaan yang saya akan menggunakan sebagai contoh hari ini. Saya akan kembali ke detik sedikit nanti. Jadi, mungkin beberapa perkara yang berguna, saya ingin bercakap tentang... Saya mungkin... jika beberapa anda mengenali ini, saya adalah penyelesaikan penyelesaikan. Dan juga ini, saya juga penyelesaikan penyelesaikan keyboard layar user, tapi saya tidak dapat menemukan sesiapa-siapa yang... sesiapa-siapa yang lain. Jadi, jika saya bercakap tentang App Engine, seperti yang sudah saya beritahu, bus E-Tay keyboard bergerak di App Engine. Dan apa yang menyebabkan kepada saya, saya gembira untuk berkata bahawa ini juga adalah sebab kisah penyelesaikan penyelesaikan dari penyelesaikan penyelesaikan pertama saya. Bus E-Tay sebenarnya mempunyai sekitar 100 penyelesaikan setiap bulan yang sangat besar untuk saya. Saya tahu banyak aplikasi lain di luar sana, aplikasi lain dan chatbots, tapi ini saya sendiri. Jadi, ia bergerak untuk App Engine, dan perniagaan yang lain untuk pelajar, untuk pelajar dan penyelesaikan penyelesaikan seperti saya, adalah kursus. Jadi, perkara lain yang saya akan beritahu adalah yang Bus E-Tay juga bergerak juga seluruh-seluruh-seluruh di luar App Engine. Dan juga, yang berikutnya, dalam persembahan, ini adalah penyelesaikan penyelesaikan dari App Engine, dan ia dapat berkata-kata menjawab dan berkata-kata menjawab dengan penyelesaikan penyelesaikan yang penting untuk penyelesaikan penyelesaikan penyelesaikan di chatbot. Yang satu perkara yang App Engine mempunyai untuk saya adalah bahawa setelah pula, jadi di sini, anda dapat melihat dari 8 jam ke 7 jam, tetapi ia masih dapat menjawab di bawah kedua. Jadi, ini adalah penyelesaikan penyelesaikan saya sendiri untuk penyelesaikan penyelesaikan yang saya menggunakan penyelesaikan penyelesaikan yang saya menggunakan, jadi, yang pertama adalah menjelaskan dan menjelaskan. Saya akan kembali ke belakang itu nanti. Di sini, chatbots telah menjadi sebuah bahagian yang panjang dalam beberapa tahun. Ini adalah sebuah contoh sebuah website yang mempunyai chatbot. Mereka panggil diri untuk membuat platform chatbot, dan ia sangat modern, tapi sebenarnya mereka mempunyai lebih banyak cerita daripada itu. Jadi, di bawah, di belakang ini, 2,000 website sekolah sekolah. Ini adalah sesuatu yang saya lakukan semula pada tahun 2006, 12 tahun lalu di Sek2. Jadi, apa yang saya lakukan di Sek2 adalah chatbot yang sepatutnya menjadi sebuah bahagian saya. Mencari kembali, sekarang, saya melihat sangat kering. Satu-satunya perkara yang saya lakukan adalah mencubanya nama kedua saya, kelas kedua, dan saya mencubanya semua responsi yang saya melihat dan yang saya sebenarnya mencubanya. Mereka bercakap dengan perempuan saya yang saya nampak. Tapi, jadi, 12 tahun lalu, kelas chatbot tak berdasarkan bekerja mesin atau network neural, tetapi hanya sebuah pattern bergantung dan bagaimana yang saya mencubanya hanya mengenai kelas kedua yang anda inginkan dan mencubanya bagaimana anda inginkan menjawab. Sebenarnya, dalam beberapa perkara ini, ini belum berubah, ini adalah sebuah perkara yang tersebut adalah Google Dialogflow dan kelas kedua, semua platform chatbot ini hanya menggunakan kelas mesin untuk menggunakan kelas mesin. Dan Dialogflow adalah sesuatu yang saya menjelaskan tapi saya tidak pernah mencubanya. Jadi, saya akan kembali kelas kedua ini, kelas kedua ini memandangkan kelas kedua saya, kelas kedua-kelas kedua-kelas kelas kedua-kelas kedua-kelas ini adalah sebuah kelas eksplorasi saya kelas kedua-kelas kedua-kelas apabila saya pertama memulai program dan membuat projek sebenar dan saya memulai aplikasi HeroCo pada masa itu. HeroCo adalah platform yang menggunakan kelas tapi salah satu pakaian di dalam kelas kedua-kelas kelas kedua-kelas yang sangat mudah jika seseorang bercakap dengan saya selepas setengah jam, HeroCo menggunakan kelas kedua-kelas kelas kedua-kelas kedua-kelas kelas kedua-kelas itu akan mendapat lebih banyak kelas kedua-kelas sehingga sesebelumnya, saya kembali ke Gerade Abbas, kelas kedua-kelas dan saya mengedakkan lebih banyak berbahaya sekejap lagi. Sebenarnya, dia bukanlah seseorang yang mahu saya memperkenalkannya. Saya teman-teman kelas kedua-kelas Alfa-tester untuk membuat kelas kedua saya dan saya terus mendengar kelas kedua-kelas saya. untuk App Engine nanti-nanti, dan saya akan bercakap tentang beberapa motivasi untuk ini nanti-nanti, tetapi cerita-cerita adalah kerana aplikasi integrasi yang saya dapat menerima di dalamnya. Jadi jalan-jalan, kita akan bercakap tentang bagaimana sekarang, setelah saya menjelaskan, saya menjelaskan dengan semua perkara ini adalah, kemudian kemudian adalah untuk sebenarnya mengambil keadaan dan belajar dan memikirkan bagaimana beberapa perkara ini, memikirkan bagaimana untuk benarkan beberapa perkara ini dan saya akan bercakap, memberikan sedikit latihan di App Engine sebelum saya bergerak. App Engine sebenarnya telah diperkenalkan banyak tahun lalu di 2008 dan bahkan sebelumnya, saya akan menjelaskan dengan perkara yang terbaik adalah salah satu aplikasi yang pertama yang terbaik di luar dan terklasi sebagai aplikasi platform. Jadi untuk orang yang tidak mengenali termanya, saya akan menjelaskan bahawa anda ingin membangun aplikasi web sendiri. Anda akan perlukan hardware, anda akan perlukan hardware untuk mengerikan, anda akan perlukan koneksi internet sejak aplikasi web, kemudian, tergantung dengan sebuah bahan, atau apa yang anda gunakan, anda akan perlukan untuk memastikan semua aplikasi ini tergantung. Dan dalam menggantung aplikasi, anda perlu menjelaskan perubahan OS, perubahan software, dan menjelaskan bahawa anda boleh menjelaskan semua pelanggan anda. Dan ini, apabila perubahan infrastruktur seperti ini datang, jadi sebelumnya, anda perlu mempunyai perubahan yang terbaik, perubahan yang terbaik, untuk mengerikan sesuatu sendiri. Pada perubahan infrastruktur, anda boleh menjelaskan daripada pelanggan. Jadi aplikasi platform seperti ini hanya menjelaskan sekejap-kejap-kejap dan anda menjelaskan untuk menjelaskan sekejap-kejap-kejap-kejap daripada pelanggan anda. Dan semasa aplikasi platform anda hanya menjelaskan sekejap-kejap-kejap semua perubahan yang lain. Dan aplikasi platform adalah contoh aplikasi sebagai perubahan yang menjelaskan banyak-banyak fungsi yang banyak-banyak seperti HGTPS dibuat dengan perubahan yang baru-baru, SSL, atau perubahan, perubahan, perubahan, banyak perubahan lain. Dan apabila orang bercakap aplikasi platform, ada dua perubahan yang terbaik, perubahan yang terbaik dan perubahan yang baru-baru terkenal. Dan untuk saya, saya menggunakan perubahan yang dihubungi kerana ada dua perubahan yang terbaik antara ini, perubahan yang terbaik adalah yang perubahan yang dihubungi dapat dilupakan ke 0 maksudnya apabila saya menggantung perubahan, saya tidak akan mencabar apa-apa. Memang itu itu satu jalat saya. Di tangan itu perubahan yang berbaik tetapi perubahan yang dihubungi adalah bahawa perubahan yang dihubungi itu memasukkan perubahan yang berbaik dan menyelaskan banyak-banyak perubahan seperti ialah standbox, ia bermakna ia tidak dapat melakukan perkara seperti melalui sistem file tidak dapat melalui sistem file dan hanya mendukung sebenarnya 4 kali python, java, goh, dan php bagi yang lain adalah pengalaman flexi, penggunaan jadi sebenarnya anda dapat melalui apa-apa yang anda mahu dan ia lebih disebabkan untuk trafik konsisten jadi anda akan mempunyai untuk anda akan mempunyai untuk untuk selalu mempunyai beberapa instans selama masa tetapi jadi itu yang saya memilih untuk menggunakan pengalaman standar jadi saya akan berjumpa dengan tidak akan berjumpa dengan mudah tetapi saya hanya ingin bercakap tentang beberapa aplikasi yang saya gunakan dalam pengalaman standar dan bagaimana saya dapat menggunakan mereka seperti yang saya beritahu tadi ada data store adalah salah satu pilihan storage atau App Engine dan untuk saya jalan dari AWS, Lambda ke App Engine penggunaan yang penting untuk data store dengan dynamo yang boleh digunakan dengan kemungkinan untuk sebenarnya query, sort dan filter pada data store entiti compared dengan dynamo DB di mana anda boleh hanya anda boleh hanya mencari dalam pilihan yang dikawal pada key sort jadi ada masa saya perlu menulis aplikasi layar sistem untuk untuk menggabungkan pengalaman standar yang terbaik di dynamo DB jadi ia sangat yakin untuk dapat membuat ini dari pilihan data store dan untuk untuk kembali di tabak saya apa yang memakai data store ini hanya untuk menyelamatkan keberkian yang berlainan dari bus stop jadi anda meletakkan keberkian bus stop adalah seperti 96049 anda dapat hanya menghidupi data store dan melihat keberkian bus stop yang sama Tropicana kondor dan bus stop kode jadi ini hanya hanya screenshot bagaimana data store berlainan pada konsol selanjutnya jadi ini sebuah kota kalau App Engine standar beri sebuah API sebuah API sebenarnya sebab sebab sebab yang penting yang saya berlainan dengan App Engine mari kita jelaskan untuk menggunakan search full tag dan search joe spacial dalam sebuah aplikasi keberkian sebuah kota adalah untuk menggunakan keberkian sql database atau mungkin mempunyai keberkian ini tapi itu akan bermakna untuk keberkian dan mempunyai dan saya ingin mempunyai keberkian saya dan setidaknya App Engine mempunyai keberkian PSU search API yang mempunyai search full tag dan keberkian joe spacial jadi ini yang saya menggunakan untuk saya memperkenalkan saya memperkenalkan sekejap-kejap sekejap-kejap sekarang yang adalah demo saya jadi mungkin jika anda sedikit hilang mari saya biar saya biar saya biar saya balik ke sana disini saya akan menunjukkan sedikit bagaimana anda pakaian boleh memperkenalkan kota bus stop dan setidaknya menghentikan kembali ini seluruh untuk serius bus stops dan jika anda minta anda mungkin hanya melihat beberapa nombang berubah dengan bot yang terbaik dan jadi jika kita menungkinkan sekejap kita juga melihat fungsi bekerja yang saya bercakap tentang sebuah penerbangan ini tahu sebuah penerbangan jadi di sini kita bekerja untuk hubungan ke luar ke luar iya jadi minta maaf untuk mengenali ini sekejap sekarang mari saya balik itu itu bagaimana jadi itu menggunakan kembali joe spacial bekerja untuk memperkenalkan sekejap sekejap sekejap sekejap sekejap sekejap saya boleh berubah bus stops di sekejap sekejap dan ini sekejap saya akan bercakap tentang bukan akhirnya tetapi saya juga akan bercakap tentang bus stops dan kelebihan yang yang saya juga beritahu untuk dalam kes saya saya menggunakan bus stops dan kelebihan kelebihan hanya sebuah bus stops dan kelebihan untuk kelebihan jadi jika kita memikirkan bus stops kadang-kadang bus stop bus stop nama berubah setiap hari dan kemudian dan anda dalam apabila ini apabila ini berubah anda perlu there's no you have to get it out of the so when they change I'll need to update all my entities and the data store is searched for the new bus stop names I'll accomplish this is using a set of monthly monthly cron jobs to that will hit a that will that trigger a scheduled task monthly cron job that trigger some task queue job so also as previously mentioned task queue allows you to bypass the 60 second request timer that App Engine and forces and to work in the background and updating the close to 5 or 15,000 bus stops I can't remember the number takes more than 60 seconds and that's why it's important to do this in the background in the background instead of in a request there's so there's task queues and cron next I'll just briefly talk about okay logging nothing much it shows you all the logs by timestamp and different metrics that you can drill down on but since my application only receives one kind of traffic it's not that useful you can see that everything is just opposed to the same endpoint and but it just show timings and errors which could be useful when you're debugging one so the last feature I'll talk about is something that I only found recently but I realized extremely useful this is called it's called trace traces so application tracing is one way to actually really measure the performance of your applications and in App Engine integrates with the trace tracing the stack driver tracing and you can actually see for example this is a trace of a request that took one second and I can see that I actually spend half a second calling the search API and getting results and another half a second responding to the telegram API in another example here you can see that calling the getting ETAs from the LTAs API it takes 0.2 seconds followed by half a 50 millisecond data store get so data store is quite fast and another response to the telegram API so for performance for those performance oriented people the trace the traces can be a good starting point if you want to look for where the bottlenecks in the application and get rid of them so just there's there's about just the app engine features under the share about if you really want to look at how it's used you can check out my bot's quote which is open source but I'll just talk about the last step which is just after you've learnt and after you've learnt some new things all you can do is you can continue using it but what I like to do as well is to just go back to exploring and looking for new things to do and one thing that and so after I deployed my bot one thing that I started looking in two was this thing called DevOps which is really quite a another kind of hot topic now that talks about many things but it is called DevOps is just about development it's just a combination between software development and software operation so give an example software let's say you wanted to put a website online software development we could building building a website while operation would operation entails putting a website on the internet and ensuring that it stays on internet like if you receive lebih banyak trafik you need to make sure that it's make sure that you're able to handle that more traffic and back so DevOps is in the previous you see a lot of cycle sort of imagery this because it's also a continuous process let's say you wanted to update a website let's dev work again but when you want once you want to push those updates back out is also ops and what DevOps is sort of this is a picture I took from actually the AWS documentation but it's quite descriptive nevertheless it's about this feedback loop between building testing and deployment to your your delivering the applications to the customer and also connecting feedback from them and that's how it makes it a loop and the objective of DevOps is actually to decrease the time between creation between developing application and delivery so tighter feedback tighter feedback loops and development cycles one one tool that one feature not feature one aspect of DevOps that also right about is called continuous integration delivery and deployment what it means is is a emphasis on automation so imagine you were deploying your deploying application as talking about one one way would in the one way would be every time you write your code you manually run some commands push it to the cloud you run more commands scale it up and down or check logs like imagine a hero cool workflow keep push hero cool master when you want to deploy then even under the debug you could push out a new one or you could hero cool logs and manually view a log so that's all her manual flow and real-time DevOps so that's very manual but as I said DevOps is about automation and one of the sources one thing I read about automation was this was a is Google's site reliability engineering book and it talks about the evolution of automation and a sort of hierarchy of automation and this excerpt from it talks about how no automation as say when you wanted to do a database fail over is you notice the database is down and some engineer manually logs on and fails over the database that's right at the end halfway a bit down a chain it could have scripts so you have once you notice that there's there's something down someone at page then it just runs a certain preset script and it fails over the database and all the way at the end of the hierarchy is systems that don't need need automation so the database notices problems and automatically fails over and that's sort of the what what you strive towards in automation when in automation and that's what I explored and when I wanted to get around to learning it so how I how I worked for me for myself is sort of a similar process in the beginning my app engine projects I would update my code and then manually manually deploy it to my environments with the command line tool for example with cloud functions and lambda when you want to deploy multiple files you don't you need you can't just deploy as is you need to zip it up before deploying and so manually would mean zipping it up first then running a command and updating the function in the words to say sometime I wrote some scripts to do it so I just wrote a script there run it it would zip up the file and unload it for me but finally I started looking into into CICD to fully automate the process and this a chart of how the how the pipeline for bus ETA board currently looks like so my code after I develop my code I push it to I push it to my github repository and automatically is pushed to these CI providers that will put it down and run some and run tests on it and once this test pass they are actually the SDK and scripts actually invoked to buy the CI provided automatically and it pushes my and it pushes the code into into App Engine and into production or staging first actually so just so that's for that's regarding the how my code is deployed and considers integration I wanted to maybe give some go a bit deeper into this but perhaps I'll do so in maybe in a blog post or another format just briefly go on to other the next part of the feedback loop besides delivering a product to customers you also want to get feedback from them and one way is through analytics so similarly my application uses the Google Analytics measurement protocol which is for recording custom events normally you will have a track screen on a website but the measurement protocol can actually record any sort of events you want and I use it to track in both UD users and the popular actions in this screenshot this screenshot of from my to from my analytics dashboard and it tells me that out of more than 7 actually 60 close to 70% of all request to my board actually to refresh the ETA so if you remember there was the message that you can hit refresh on and it updates the ETA so that's the main that's what most users spend doing and the second most the lagging far behind the second most common action is actually a ETA text message which is sending a new message that request timings for a new bus stop and that from this I can actually see what's the main use patterns for my board most people just they just want to send a bus stop code and just refresh the timings until the bus arrives presumer beneath and but the other features I've implemented such as searching or geographic actually truthfully is not really used that much but it's just if anything I think it was fun for me and there are people who use it so is I mean is not wasted effort one one thing that I did and wrote about before was to use actually use cloud functions and the reporting API to actually display the numbers of the number of users that use my board in real time on my on my github page just as a shield it was just so it was just a just some side project that I did to implement this stuff to mix the stuff that I learnt and that brings me to my summary is all about in the the my own development process starts out with when I hear about a new topic or I want to do something new I'll I'll start pursuing this or explore experiment and once I think of a use case or something can do with it is when you go to learn more about it apply it and after you have made something of it you can move on to learning more things and that's about the end but since I have sometime I'll talk about I'll just briefly show a few examples so this this are just what this is just what a continuous what Travis or semaphore what the CI told us look like so what happens after you push a commit you can see that this this stuff are commit statuses and it shows what happens after the CI provider pulls pulls a commit and it runs the test and then they report back on what the status of it and the test is the CI provider after it it it will run pull down your code and run many tests and afterwards depending on whether it succeeds or fails so in this case exited to zero which means that for this build my test pass it moves on to deployment and is where many other many other things happen so there are many different CI providers with different speeds and things and something that I didn't mention just now is something called code coverage that you that is also sort of integrated into CI flows where you want to see how much of your how much of your code is hit by your tests in this in this screen you can see that the guys in green are actually covered by the test or the guys in red aren't so while 100% code coverage is something to is could be a good thing but is also kind of ambiguous metric there's no point writing test that don't replicate real life real life conditions either so it's just as a as a stat person it was just something fun to integrate into fun to integrate and display on my display on my page another one is just this just the dashboard the analytics dashboard that shows like there's actually one user going somewhere right now there are 65 users 65 people use my board in the last week and in terms of user retention it's actually not very successful probably have a group of core users and there's it but there's hopefully but this is just a small project of my own idea so it's not that a not that a big deal so anyway there's that would be that's it for that's it for my presentation today and if for those of you who are interested here's my contact here are some some of my contacts and my slides also already put my slides online is on my website if you want to take a look as them as well so thank you sorry oh that's that's really part of experimentation as well I just want to see just want to see more check marks and put more badges on my ring me yep yes I looked into the I did consider doing it but I because I at that at that time I didn't really want to since one of the since telegram it's just an API key and it just call you or else and it that's the part but Facebook requires you to create a Facebook application and set up many other gates that I didn't so those are just some hoops that I didn't want to jump through at at the moment but I do want to consider doing it and actually dialogue flow and other tools that I have been exploring I notice that they do have this sort of integrations for Facebook so maybe if I just that's what it goes I can just have a one-take appointment with these other platforms as well so you will definitely have more than one and you're sure because in Facebook there are many people you can every market much easy that's true but I present oh we have one can I ask how long do you spend on this project I started this project in 2015 but my development already is actually quite on and off so maybe right after after I say the first time I made it on Iroku then for one year I don't updated I'm like oh let's move to lambda and then I put on it already two weeks and then and then and then then I deployed and then I just sit on it for another year then oh there's a cloud functions beta and then afterwards I work on it for another few weeks and put it on there and after actually after so it's maybe it takes me about two or three weeks and then I made a new version but and with the most recent one of App Engine I did it in June and I actually didn't touch it for a while until LTA part 1 was going to put up some breaking changes to their API so I had no choice but to go back update my bot otherwise we'll have stop working so it's sort of being regrettedly it's sort of in maintenance mode right now but I do hope to go back in at some new features one of the one of the items in my backlog is I want to update feature parity with some of the other Basite apps out there just for the sake of competing yeah okay the status that that log bar may it seem like very long I know it's still sub-second but did you feel like the the telegram API was slow I was actually quite surprised at how long it takes for that because when I we found out this recently and I know that I was quite surprised by some of the timings of these things it's true I think the telegram API I saw off so but it could be because of the geographic locations although I do know they have a data center in Singapore but maybe the board API doesn't hit the Singapore data center goes to Russia every problem but one one thing that I have been thinking about is whether whether there's actually a point in that let's say calling this external search or data store just searching a static file since depending on how big the data set is in fact previous versions of my board such as a lambda and I'm just all I did was it does load a JSON file in the memory and and search it each time without any network round choose but I guess using an engine and search was good for the sake of learning anyway and in the maybe standard entity is one one reason why why is even if it's forwarded just reading a static file in my monitor edit in application haven't actually found anything to do with this tracing like anything actionable great okey terima kasih terima kasih terima kasih terima kasih