 Pertama, terima kasih banyak untuk kawasan kamera saya. Terima kasih. Jadi, saya perlu berikan diri kepada saya. Terima kasih kerana menjadikannya. Terima kasih kerana menjadikannya. Okey. Kamu berasa sangat distan. Kamu berdua mahu datang dan melihat nafas. Helo? Hello? Kamu berasa sangat distan. Kamu mahu duduk di belakang. Kami mempunyai lemah di antara kita. Okey. Sebelum kita mulakan. Terima kasih kerana menjadikannya hari ini. Jadi, ini apa yang kita nama Rumi Christmas Party. Saya cuba menjadikannya. Sebenarnya, ini adalah sebuah tahun yang berlaku. Jadi, terima kasih kerana menjadikannya untuk menjadikannya. Terima kasih. Kita takkan tahu apa Cik Mendang apa? Arizona akan bercakap tentang apa joga bersama� Cik Dan juga, kita selalu membuangnya, jadi jika kita mencari kerja dan mencari jenis jenis, kita boleh meletakannya malam ini Okey, untuk orang-orang itu datang, jatuh di luar, jatuh di luar, jatuh di luar Jatuh di luar Jatuh di luar Jatuh di luar, jatuh di luar Jatuh di luar, jatuh di luar Jatuh di luar, jatuh di luar Jadi tentu saya yakin... Adakah anda menikmati makanan di kanak? Oh, These or No? Adakah anda menikmati makanan di kanak? ok, jadi makanan diisi latihan kerana referral candy adakah anda mahu bincang sobre referral candy? terdapat mengenai software Stylabet dan Singapore kita membangun app software yang membuat penggunaan perniagaan membuat penggunaan perniagaan dan mempunyai Dropbox atau Uber, bagaimana anda beritahu kawan dan anda mempunyai Freeride atau FreeSpace. Kami melakukan perkara yang sama untuk SME Online di seluruh dunia. Mereka adalah pelanggan di U.S. Over 1,000 pelanggan menggunakan kita. Orang yang lebih besar adalah Uniqlo, Tommy Hilfiger, Webox di seluruh kampanye dengan kita, Dr. Martin, dan banyak syarikat di seluruh dunia. Orang yang kita berpunyai untuk itu. Mereka juga mencari penyelamat dan penyelamat di seluruh dunia. Jadi, menggunakan penyelamat juga. 20% menggunakan penyelamat. Dan tentu-tentu, PEPPUL juga mencari penyelamat.com. Saya tidak fikir sesiapa-siapa pun ada di sini hari ini. Tapi jika anda tahu tentang penyelamat.com, mereka akan membantu anda mencari penyelamat. Jadi jika anda fikir anda ada peluang yang baik, mereka akan menghargai untuk memakai anda untuk membuat perniagaan. Mereka melakukan ini di U.S. Di Facebook, Google, etc. Mereka akan mencari perniagaan anda. Mereka akan mencari anda untuk mereka. Dan anda akan membuat penyelamat.com. Dan anda dapat melihat yang mana yang lebih baik untuk anda. Dan ia mencari penyelamat. Jadi, sejauh-jauh ini, mencari penyelamat di U.S. Dan mereka sudah dapat menghargai orang-orang di syarikat yang baik. Mereka sangat berharga. Jadi, mereka akan datang ke Singapura dengan cepat. Sebenarnya, mereka sudah mulakan operasi mereka. Jadi, hari ini, mereka juga mempunyai perniagaan dan perniagaan di sini. Pada masa yang sama, saya akan membuat perniagaan yang baik. Saya akan membuat perniagaan yang baik untuk membayar perniagaan. Jadi, saya akan menikmati perniagaan dan perniagaan. Terima kasih banyak untuk datang. Jadi hari ini, kami tidak hanya membuat perniagaan dan perniagaan di sini. Saya ingin melakukan sesuatu yang berbeza. Terutamanya, kami mempunyai banyak perniagaan di sini. Mereka tidak mempunyai peluang untuk bercakap. Kadang-kadang mereka terlalu penat untuk bercakap. Mereka mungkin tidak mempunyai perniagaan untuk bercakap. Jadi, saya membuat perniagaan untuk membayar perniagaan di sini hari ini. Kami membuat perniagaan dan perniagaan untuk bercakap. Untuk bercakap dengan perniagaan dengan perniagaan. Jadi, ia adalah sesuatu yang berbeza. Kami membuat perniagaan untuk pertama kali. Semoga pada akhirnya. Semoga kami tidak dapat melakukan ini untuk membuat perniagaan di RubyConf. Kerana, ia adalah perniagaan saya untuk membawa kamu ke sebuah perniagaan di Indonesia juga. Mereka seperti pengalaman, Jadi, hari ini, ia seperti beta-MEP. Kita akan cuba dan bercakap. Bagaimana cara ini? Mereka berjawab kepada pertanyaan yang susah. Baiklah. Jadi, tanpa lagi, saya akan memulakan perniagaan. Saya akan membuat perniagaan dan tanya beberapa pertanyaan. Lepas itu, saya akan memulakan perniagaan supaya anda dapat tanya pertanyaan yang susah. Jadi, kami akan memperkenalkan perniagaan saya. Pertama, kami mempunyai Ryan daripada GrabTaxi. Mereka adalah dari Flow Zero, dari Rivero Candy, Microchain, dari Neo. Untuk sederhana, saya ingin bercakap dengan mereka lebih sedikit tentang apa yang mereka lakukannya. Bagaimana mereka menggunakan Ruby at work, etc. Jadi, apa yang kita mula dengan Ryan? Hai, nama saya Ryan. Saya selalu memperkenalkan perniagaan Ruby at work seperti GrabTaxi. Tapi sekarang, saya melakukan lebih banyak pengalaman perniagaan engineering. GrabTaxi menggunakan Ruby at work untuk banyak perkara. Jika anda menggunakan pengalaman perniagaan, ia sebenarnya bercakap dengan Ruby at work semula di belakang. Dan itu adalah bagaimana kita menggunakan Ruby at work. Baiklah. Sam. Baiklah. Hari ini, saya menggunakan Flow Hero. Flow Hero adalah perniagaan menggunakan juga perniagaan produk yang sebenarnya adalah jason base perniagaan workflow. Dan ia mempunyai Ruby at work. Baiklah. Saya memperkenalkan perniagaan yang tinggi dan saya menggunakan pengalaman perniagaan untuk memperkenalkan itu juga. Sebelumnya, saya juga menggunakan untuk membuat perkara yang sama. Perniagaan pengalaman besar untuk menggunakan pengalaman perniagaan. Tapi ia bagus kerana ia sangat mudah untuk membuat perniagaan dan membuat semuanya. Kemudian ia akan membuat perniagaan dan anda akan membuat perniagaan. Baiklah. Dinesh. Ya, seperti yang saya beritahu tadi, kami membuat perniagaan SMB berdasarkan dari Singapura. Kami mempunyai sekitar 30 orang di perniagaan. Saya membuat perniagaan di Singapura, dan juga di Philippines. Saya membuat perniagaan untuk membuat perniagaan dan saya membuat perniagaan di Dinesh. Bukan. Saya beritahu tentang perniagaan. Maaf. Saya membuat perniagaan. Ya, saya membuat perniagaan. Saya membuat perniagaan. Baiklah. Bersiap. Saya membuat perniagaan. Baiklah. Terima kasih. Hai, saya Michael. Saya penyanyi. Saya membuat perniagaan di Ruby selama dua tahun. Sebelum itu, saya membuat perniagaan. Sebenarnya, saya membuat perniagaan di Singapura. Selama dua tahun, saya membuat perniagaan secara profesional. Saya membuat perniagaan. Sangat bagus. Ia sangat berbeza dari perniagaan. Saya boleh membuat banyak perkara. Ia lebih efisien dalam membuat perkara. Di perkara yang lebih besar, ia lebih mudah untuk dibuat. Mereka boleh membuat perniagaan. Mereka boleh membuat perniagaan. Bagaimana yang boleh saya membuat perniagaan? Saya membuat perniagaan. Saya membuat perniagaan. Saya membuat perniagaan. Baiklah. Pada pertanyaan, saya membuat perniagaan lebih banyak kepada perniagaan. Saya membuat perniagaan dan perniagaan. Jadi, kenapa kamu membuat perniagaan dalam perniagaan pertama? Membuat perniagaan kamu. Kenapa tidak P.S.P. atau J.S.P. Sebenarnya, saya membuat perniagaan. Saya atau perniagaan saya membuat perniagaan. Jadi, kami tahu perniagaan lebih baik daripada Python. Dan itu merupakan perniagaan yang lain. Pada masa itu, Rails datang dan keluar sekejap. Ia adalah sebuah ekosistem yang besar di Ruby dan banyak jams yang membuat perniagaan dengan cepat. Jadi, berapa lama itu? 5 tahun? Saya rasa sekitar 4-5 tahun. Sebenarnya, kami membuat perniagaan untuk membuat perniagaan di Ruby dan menggunakan perniagaan. Okey. Bagaimana dengan Sam? Kenapa kamu membuat perniagaan? Sebenarnya, saya membuat perniagaan. Tetapi, Ruby Erase membuat perniagaan untuk membuat perniagaan. Jadi, banyak perkara itu adalah untuk membuat perniagaan. Jika perniagaan membuat perniagaan, kamu harus menggunakan. Dan kamu perlu fikir terlalu banyak. Ruby Jam adalah hebat. Dan tentu saja, kerana semua jams yang sebenar adalah membuat perniagaan dengan perniagaan dan membuat perniagaan dan bermain. Dan sangat banyak orang membuat perniagaan. Dan ia membantu membuat perniagaan yang membuat perniagaan untuk membuat perniagaan. Dan kamu membuat perniagaan sendiri. Ya. Okey. Sebenarnya, mungkin bahawa saya akan menjawabnya. Jadi, saya dengar saya adalah perniagaan juga. Jadi, perniagaan kadang-kadang akan berkata, Oh, saya ingin membuat perniagaan di Ruby. Kerana perniagaan beritahu saya ia akan membuat perniagaan yang lebih tinggi. Jika kamu tahu, saya akan beritahu perniagaan saya. Adakah ini benar? Adakah kamu dengar perniagaan yang lebih tinggi untuk membuat perniagaan yang lebih baik dan perniagaan yang lain. Adakah ini benar? Pilihan saya dan itu saya tidak fikir ia bergantung terlalu banyak kerana perniagaan akhirnya hanya melihat perniagaan kamu. Mereka tidak melihat apa yang kamu gunakan. Jadi, jika kamu beritahu mereka bahawa kamu akan membuat perniagaan yang lebih tinggi. Okey. Kamu mungkin lebih mudah untuk kamu membuat perniagaan yang lebih tinggi. Tetapi, daripada itu, ia tidak sangat bergantung. Okey. Biasanya perniagaan tidak sangat bergantung. Perniagaan yang lebih tinggi mungkin membuat perniagaan dan membuat perniagaan. Tetapi, kamu berfikir bahawa pilihannya lebih tinggi ini lebih berkelihan tentang perniagaan.っぺennya, jika kamu mendapat perniagaan, kamu perlu memadamperkannya ke kecil mereka, dan mungkin ada considerasi di sana. Tetapi, keunggangan ini tidak meio betul-betul berkelihan. Jadi, kamu beritahu tentang perniagaan yang lebih tinggi. Apakah ini susah? Adakah kamu akan memikirkan sedikit bahasa yang lebih tinggi kerana lebih mudah dan lebih susah dan acabat keberangan? Biar semua itu tidak mudah dan Ia ada alasan yang kita cari. Jadi, itu adalah sesuatu yang kita perlu berlainan. Tapi saya akan kata, Ruby di general beri anda lebih baik untuk membuat orang yang menolong saya menggunakan Haskell atau sesuatu yang lebih baik. Dan itu menyebabkan startup yang digunakan. Dan itu berlainan dan berlainan. Jadi, Haskell mungkin lebih susah untuk membeli keadaan, tapi mungkin sesiapa pun yang mencari ia akan terpaksa dan mengembar dengan cukup untuk buat apa yang kamu buat. Jadi, saya rasa membeli keadaan adalah sesuatu yang anda kira-kira. Dan Rup, ia berlainan dengan Ruby. Jadi, Ruby tidak lagi adalah perkara yang berlainan. Jadi, ia lebih berlainan dengan orang yang mainan. Jadi, itu menurut saya, anda hanya perlu memastikan. Mereka tidak mencari perkara yang sama. Kerana GrabTaxi menggunakan banyak bahan yang berlainan. iOS, Android, Go. Jadi, Ruby. Jadi, GrabTaxi menggunakan bahan yang berlainan adalah ia sebenarnya sangat susah untuk membeli keadaan. Terutamanya, sebab kita pertama bermula di Malaysia dan Ruby sebenarnya bukan bahan-bahan yang berlainan. Mereka seperti seorang pelajar yang tahu C sharp, ASP.net dan sebagainya. Jadi, ia sebenarnya sangat susah untuk membeli keadaan. Kerana ia bukan perkara yang lebih susah, tetapi itu perkara yang paling berlainan. Jadi, kita seperti di antara. Jadi, itu bermakna anda mempunyai keadaan lebih baik untuk iOS, Android, Go. Saya akan berkata, ya. Saya akan berkata, ya. Menurut saya, ada apa-apa kata-kata anda? Untuk saya, apabila saya mempunyai perkara yang berlainan, saya dapat memasakannya di JQuery. Sebenarnya, saya dapat memasakannya di CoffeeScrip. Mungkin saya akan mempunyai perkara yang berlainan di JQuery. Dan ia tidak akan perlu memasakannya di JQuery. Jika saya cuba lebih banyak perkara yang berlainan, seperti java.net, ia akan mempunyai banyak perkara yang berlainan. Apabila anda meminta mereka sedikit lebih banyak perkara yang berlainan, sebagainya, saya tidak mengenai perkara yang berlainan. Saya akan menggurungkan perkara yang saya membuat dengan resimu saya. Memang, untuk memasakannya, mungkin ada suatu perkara yang berlainan. Tetapi dengan perkara yang berlainan, perkara yang berlainan adalah kecil. Sebab perkara yang berlainan sudah berlainan tanpa banyak perkara yang telah diri. Mereka dapat membuat perkara yang berlainan. Mereka semua akan tidak menjadi berlainan. Dan ia dapat membuat perkara yang berlainan. Jadi apabila saya memasakannya, ...saya tak perlu meletakkan segala-galanya. Atau saya perlu meletakkan... Jadi itu bermaksud jika anda dapat... ...pengalaman daripada orang yang tahu Ruby atau Rails... ...biasanya mereka lebih baik. Macam mana saya interpretannya? Itu berbeza antara mengenai segala-galanya... ...dan menjadi sangat baik dalam bahasa seluruh. Sebenarnya, pada masa yang awal anda ada C dan C++. Jadi anda dapat mempunyai pelajaran roket yang sangat baik. Tetapi, ia tidak dapat mempunyai segala-galanya. Ia tidak mempunyai segala-galanya. Rails menyebabkan segala-galanya yang sangat baik... ...untuk membuatkan banyak masalah dan segala-galanya. Jadi anda tidak perlu mempunyai... ...seorang pembangunan roket-scientist. Anda dapat mempunyai seorang lelaki yang lebih muda... ...dan anda dapat menghubungi dan memasukkan segala-galanya. Tetapi, ia mempunyai segala-galanya. Jadi ia tidak mempunyai segala-galanya. Apa yang anda fikir? Jaku. Cerakkan? Saya tidak tahu. Saya rasa orang lain itu adalah satu residential. Jadi tak Meineh dari yang kena berbunuh hanya kerja sikap-sikap di Singapore mmah... compute carrier. Tetapi di kawasan kita, saya akan kata bahawa ia tentang pengalaman, dan sesiapa-siapa yang berada disini akan menyebabkan. Baguslah, terima kasih. Jadi kita tahu bahawa Grapp Taxi dan SuperGrow berkongsi, anda fikir bahawa Ruby berkongsi dengan itu? Atau sebenarnya ia menghubungi anda daripada bergerak lebih cepat? Sebenarnya saya fikir Ruby berkongsi dengan banyak untuk membantu Grapp Taxi berkongsi. Satu-satunya orang, dia memutuskan lebih kecewa dan membuat kerja semula, bila saya menggunakan kemukahan atau menggunakan kesan dash dan sebagainya, dia berkata, anda akan melakukan ini dan itu saja yang anda akan lakukan. Anda tidak akan pergi dari keadaan ini, yang mengajar pengalaman untuk memutuskan masalah dan tidak terlalu jauh. Anda berfikir tentang semua kes, semua kecewa yang anda sepatutnya menggunakan. Baiklah, jadi pada masa itu, tidak ada apa-apa yang menggunakan, tapi kita perlu menggunakan kemukahan. Saya akan bercakap sedikit tentang bergantung dengan PHP. Anda ingin mengelibangkan kemukahan itu. Jadi sekarang, bagaimanapun, jika anda ingin memulai projek baru, anda akan menggunakan PHP atau menggunakan PHP? Sekarang saya akan menggunakan kemukahan yang menggunakan. Saya akan cuba menggunakan. Sebenarnya, saya akan menggunakan, sebab sekarang saya akan menggunakan kemukahan yang lebih jauh untuk saya, seperti pada perjalanan hari-hari saya, ialah Ruby and Ruby on Rails. Jadi, saya rasa jika saya perlu bekerja dengan projek baru, saya akan menggunakan Rails, yang saya telah melakukan dalam dua projek yang lebih kecil, yang saya telah melakukan sebelumnya. Sebenarnya, saya akan menggunakan kemukahan yang berjauh dengan baik, yang saya akan memasak dengan jauh dengan cepat. Saya rasa Ruby on Rails adalah sangat cepat untuk mempunyai projek baru. Saya akan memainkan kemukahan basic dan MPR dengan cepat. Bagi saya, pula pula beritahu P.H.P. Saya akan mempunyai sistem bergantung yang saya telah melakukannya. P.H.P. adalah pandangan. So, the reason it's flexible is that all the tools are there and it's very easy to protect with them quickly. And for me to go back to learn something like Laravel or some of the other PHP frameworks which have progressed very much since the last two years back. So for me it was a practical thing. If I need to take some time to relearn all the Laravel's framework or kick PHP framework conventions, it's going to be very difficult. Or rather you're going to take time and I think there's something I don't want to do as say if it's going to be a side project or something that will go on weekends or big nights. I really want to be productive and I think having something like moving on rails, I mean I'm not saying that you can't get the same productivity on PHP. If somebody who has been using Laravel or kick PHP for a while, which I had in the past, I could actually put together very quickly in the weekend. But then again, I was young. I was much younger. But nowadays I just want to focus on, my time is precious. I just want to focus on getting productive and getting a concept out. Just to get something out there and get some traction or get some feedback from people who might be willing to use. For example, when I worked on the ticketing app, I wrote it out very quickly. When I found the bug and when it went live, there was a bug and I was able to fix it very quickly. Just following the logs, telling the logs on the Heroku. I was able to find, oh right, because there's a problem with this regular object or this big pastin and stuff like that. I was able to debug it very quickly, which is something you can't really get out from PHP. Until recently, only until recently that PHP introduced like a debugger. They can just plug into your code very easily. They had x debug before but it wasn't as good. It's nothing to the level of tooling that you have in Ruby on Rails or Ruby overall. So I think, yeah, so Ruby on Rails is pretty much my choice about doing something right now. It's like sub-inspect, for example. Okay, thank you. So before I continue to ask more questions, I want to open up the floor now. So y'all have a chance to ask them any questions about Ruby or non-Ruby, but a company as well. But grab taxi. Oh, I'm sure I've done that, you know, for Ruby, right? Because it happens to exist in these little gems. So once you put it in the top of it, it's going to have to find small bugs that exist in the gem. So what do you do about that? It's a general existence. It's still a big trend. It still feels so large. Use the right gems. Yes, yes. Are you usually to be quite gentle inside a gem, or do you just deploy it? We can. Y'all look at the gem? Occasionally we do. Because sometimes the documentation of some gems are just not very well done. So you just need to look at the code and see how it's done. For example, I was using Active Merchant. I was using Active Merchant for e-commerce. And the documentation for Stripe was very sparse. So I do look at the code. Alright, this is how this is done. This word is perhaps being fasted and stuff like that. So I guess you can... The good thing about being open source is to open it up. Look at the code. If there's a bug, you know there's a bug, which I found a bug, actually. On Active Merchant, I actually found a cool request. And it was eventually merged into the main branch. So being open source has its benefits. We see a bug. We see it at the code. We can make a fix. And we can submit the fix, which is we should then, you know, everyone will benefit from that fix. Ya, I think looking inside the library is pretty common. Especially if you're using it and you see kind of behavior that's not expected. For maybe the smaller libraries, like the more well known ones are usually pretty well controlled. But maybe the smaller ones, if they're using something it's quite normal to look in there. Again, like Michael mentioned, because it's open source, it makes it much easier. And again, the Ruby community is pretty open to things like code request and fixing it and answering questions if you have. So that helps. Even if those doesn't work out for you, you can actually debug the underlying gem that you're using and it's actually very easy to do it. When did it solve the problem? Sorry? In the bug that you found in the FX machines. It was... Because they didn't run the PHE conference. It wasn't actually a bug. It was more like a flag which was in stride. We can actually pass a flag which would trigger an email receive to be sent to the payer. And I tried to pass a flag into the options object, the hash. But apparently, that option was dropped as it was not accepted. It's not passed on to the request which I found would be strange. Because I would think that sending an email receive would be a usual use case for subpoint e-commerce thing. So apparently, they didn't think about it. Or, it could be a new flag. For whatever reason, it was never there. Because the gem that I won't use in merchant is actually pretty big. So there are many different components and it's like one library that supports PayPal, Braintree, Stripe, so many others. So, it's a fairly huge library. So I looked into gems all the time that's one of my evaluation criteria for using the open source libraries. Check that. It doesn't have a lot of issues. Check that. It doesn't have a lot of open pool requests. Check that. The commit is pretty recent. Check that. There are specs for the open source library. Go in, take a rough look of what is it before you decide to use it or not. Sometimes, the gem could just contain 50 lines that it might be better for you to just code it yourself and put it in your code. Rather than just a gem. I recommend checking out Ruby 2 Box. Ruby 2 Box is a website which shows you the different gems that can be sorted by categories. So, a particular category of gems like login or logging or whatever stuff, you can even show you the gems that are in the same category and tell you how recent was their last commit, how many bugs was filed, how many pool requests was there, what issues. It's a very good tool for evaluating gems. And if the gem has a GitHub repository, you can check out whether they have Travis, CI, so that at least they are running their chats and it's still green and not red or ember or something else. And also, we can say when it was last commit. Although last commit sometimes can be seen, but because I use some of the Ruby gems that are actually wrappers for C++ libraries. And they are maybe like 5 different developers roundable using it only. So it's probably like last two years and then nobody touches it. It's popular stuff. It should be well maintained and everything. So, looking at the code like what Michael say is for me, because I know the C++ library forever, I know all the prams on command line, I would ask myself should this option be in the hash that I pass in through the wrapper gem. So, and I look into the code to see whether do they just pass whatever I pass into the gem to the library or do they to exclude or accept or whatever else. So, just full request and put it in here. Jay? What is your benchmark for too many full requests? Depends on the gem. Ya. I mean, it depends on whether they actually answer the full request or not as well. You know, whether it's just stale as in nobody cares and then they are always trying to ping, you know, where's the maintainer, where's the maintainer or rather it's like people try to make full request and the author is trying to answer them and it's just not moving because of differing views and opinions. So, like rails, right? Obviously, people want to make a lot full request but there's always differing views and how the core team wants to work versus number of people who wants to make, you know, commits the code. So, there's a balance. I don't think there's a hard number, say. And I suggest looking at the branches because they may have accepted full request as an embroidered but not mastered. So, they could have like branched out the code and then try out the full request and say, Ya, it's not quite what we want, right? That's why they didn't allow that on master. Question? Yes. This is my question but we mentioned really interesting to know why I'm allowed to take a survey there and be there in architecturally or an idea that you'll probably be ready to work and, you know, how you look back at it and sort of actually today was an action. Ya. Don't be late. I'll pass it on to someone. Don't be late. I think I'll take a bucket. Sessh. So, I'm no longer part of our engineering team but they have to live with some of my um, wrong choices. I think one of the top lines right now would be we take data mapper. Oh. Ya, so, at some point the reason we picked it initially was you know, at that point they were kind of about the same stage and the same stage data mapper was more as skill like no-stakes so we were looking at some kind of new as skill databases but I mean, I guess the way to think about these things is you if you look back on it and like why do you choose this part versus that part you'll be beating yourself up a lot of many, many things not just language or library choice, right? You have to think about it in terms of where you were at that point where you have 10 parts in front of you and you know, all the right choices you make is what matters at the end of the day and just make sure you you know, make decisions in a way that you can fail gracefully so don't try to not make mistakes try to make decisions where even if the decision turned out to be suboptimal your startup isn't going to like die, right? I'm not going to not be able to find developers to improve it so it helps to think about it that way, I guess Is it available for app or available to people? So right now we are 3.2 3.2 okay but it's some strong thing So for me it's not really failure it's just not efficient code let me share with you I wrote a massive important like many years back and the reason why I started Ruby because I wanted to access on-pack rails I wrote it as a red task and then it has to access the models because I want to insert those lines every row into the model and because the source data is junk I have to like use a really good parser, right? a really good parser that's non-indexistence so I chose Ruby because it's fast I can do red jacks I can do all sorts of stuff on the strings and I insert them but years later then I figured out that it's actually a better way to do it so could I have done it earlier on with a different method that is more down to C or more down to Postgres Direct I could have but it will be harder to debug because I took like one and a half months to debug that parser alone because the source data is really junk so if you run something at really low level where you cannot debug you cannot pull out the debugger in spec and everything but it's more efficient but then you will never finish your code and then it's not going to help you in your work I rather get it done it could be slow it could take like two hours to run but it's there you can debug it and everything and then knowing the logic with those specs with those aspects now you could reconstruct the whole program in a separate language or a different language that's more efficient I go as Delish said don't be afraid of making mistakes I think we work with a we work with an understanding that with the knowledge that we have at a point where we implement the code the knowledge that we have right now at a point we wrote the code we think it's the best that we can do and based on what we know and what we think the client wants we build that piece of code for the client or for your company so I think we take that approach as best effort in getting things done I think when we build things iteratively we have always opportunity to go back and refactor I guess everyone should take a point to write tests for the code so that if you run when you go back you do some refactoring it will be much easier when you do that I will even go as far as thinking about feature test as well if you build a web application feature test on top of unit test which will make it easier for you to look at behavior of your vector code because to be honest when you work on a code for the web beginning you won't know how you scale or how you use it like I wrote for a client of ours we wrote a the RS API we tested it with the test data that we had it ran very smoothly there was no problem with the migration the data but we tried to load it up in snapshot of the production data that's when we found some bottlenecks so it's only when you look at when you actually test it with production data that you realize oh wait we should actually do it this way we should do it that way because if you don't want to know what to actually test it with actual production code and in the particular situation it wasn't the fault of the Ruby it was just I was meeting some index in the database so you could the problem may not even be in your code somewhere else like in black cases it was just that I was doing a full table scan on a table which didn't have that data index that I needed for the columns that I had so adding the indexes sped up the migration job much in fact of 10 to 100 which is amazing so it's about doing your knowledge that you have now build something to get that out of the door get the client to accept the idea or even accept the story and then when you start having problems take another look at it right I think I think one thing to do really have test courage is very important nothing is making sure that you write the code in a way that it's easy to fix easy to change things yeah that's done a whole discussion altogether how to write code in a more maintainable manner there's a whole other discussion I always talk about the term called spaghetti code which you when you first prototype your app you have this only one method class and everything is inside now but then you shouldn't go to the other extreme like Java developers where you orchestrate like 50-200 methods in the class before you even write a signal of code so Ruby allows you to write something make it okay refactor refactor refactor if you want to test you're very safe I'm going to give one more example on that practically it's for the use of tools use the right tools for the right tasks that's number one number two when I'm writing a little background app that will scan all my HTTPS connections to ensure that the signal that's certificate is not some government elsewhere in the world I first prototype the parser in in RRB because it's fast it's easy I just fire up RRB and do my parser so once I get my regex correct then I rewrote the whole thing in Node.js because I wanted to so yeah so that's how I come like switch between the two okay yeah so one of the biggest failures that I had was something was that last year grab taxi actually attempted a major rewrite we wanted to move a lot of our stuff into rails instead of the whole rails and Node.js architecture that we had at that time and then that rewrite would require would require a very it requires a very high concurrency setup and that is not something that Ruby is very good at so that I would say rails is good for Ruby or rails is very good for a lot of stuff but it's not good for high concurrency stuff so and also so when you when you consider what technology you want to use think about the characteristics of that technology and then decide on it and also don't take rewrite lightly like when someone tell you that you want to rewrite rewrite something think about it before you actually go and do it so you have to rewrite it actually failed because it require it require a lot of high concurrency so if you just stick with what your head or you rewrite it in another language or whatever so we we learn a lot from that attempt at writing from Node.js to just rails and then like about about 6 months further from that point 6 months down the line we actually started writing parts of it in Go so now some of it is in Go right now I have a failure to share so I've been doing Ruby for 8 years now so in my first 3 years I wrote code without writing test so some people is still maintaining my code I'm so sorry but I'm always writing test now I know my mistake so please don't please start to write test okay do we have other questions yes your favourite way to deploy Ruby app to production braver way to deploy Ruby app to production hero code hero code the one second answer hero code it's the simplest for now I mean for prototyping part prototyping deploy straight up to hero code and then it works then case close move on next hand technically it works but for your wallet I'm not quite sure but technically it works very well ya it works a bit differently I grabbed actually because our real stack is so complicated like it connects to multiple databases and stuff like that so we actually have Ansible scripts to handle a lot of our deployments right what do you do for deployments? so we have a rate script that the team has written that I use but say that if I was starting from scratch against haroku or elastic beanstalk and that gives it a bit more control especially if you need something customer I recommend that you have AWS if you need more control and more I have apps on digital ocean that's because haroku wasn't able to support the app I was trying to run so I deployed it on digital ocean why didn't I use AWS because it just felt easier to deploy on digital ocean so I'm still with digital ocean for that app but I'm using for the database I'm using RBS in AWS because I don't want the database to be on that server and that makes sense in the initial days though you should initial days you should ask yourself if my app cannot live in haroku why there isn't security decision that haroku guys made and it's good for you but at the later stage after like half a year one year when your app is mature then maybe maybe you'll leave haroku and all but in the initial days 3-6 minus if they want you cannot run in haroku so it's really really wrong yeah unless you're doing some rocket science I think for those of us who work in agencies usually process the main thing and so immediately go for AC2 but I thought agencies usually transfer the cost to the client so no you can always run in the free tier just for testing and when it goes live just switch it on to one of the hobby tiers when it's really go live easy for prototyping and testing so I think one of the pain points I feel when I use my digital ocean is right now like ruby is upgraded and then ubuntu is upgraded right I have to do it myself like I don't have time you know can someone help me to do it for environment haroku you know these are all invisible to me so it just works so I don't care otherwise I might be facing security potential security problem which I think there was one with the I can't remember what it was but I have to patch it passenger I was using passenger so there was a bug with passenger I have to patch it on the OS level instead of you know just letting someone handle it for me when I do consulting or when I work for somebody depending on the budget level which is like from zero to like $6,000 for infrastructure I recommend also some stuff and I recommend even running on Mac mini you know last time as well and I still do if you have like not much budget to run away but yeah folks at Nectars I.O and Hiroku they have done new packs they are really really good for your apps they solve a lot of issues so even if you are not going to use it you should look at the new packs how they configure the stacks other questions? we need one or two more questions so can real scale can real scale almost specifically how much does the extra server cost how does it affect the bottom line so maybe the question can you tell us how many servers you are using for us we are using about 30 servers 3.0 okay 3.0 okay so it's not just it doesn't just come down to the amount of money you are paying for infrastructure it also comes down to how much time does the engineer need to spend to learn this new language how much time does the engineer need to spend to get a particular feature out whereas when you do rails there are like 10,000 different gems out there whatever you are trying to do it's very likely that the gem already exists but in terms of so do you think that I'm sure grab taxi has a lot of traffic so do you think 30 servers right now is like is it a buffer already for you know more traffic from I don't know Indonesia or whatever so so grab taxi's traffic actually has a pattern so you can estimate how much how much instances you want to prepare for but 30 instances is definitely overscaling we are we are just setting it more so that we can have a good holiday right so if it works for grab taxi you should work for your start um this question is always asked right many many times and you have to understand the nature of the app it's not to say that Ruben Rose cannot scale if you don't know your pattern of the app the nature of the app and you write it in a different way of course it's not going to scale very well like I don't represent Viki anymore but Viki uses layers and layers and layers and layers of cash because they know their app so well they know it's more like one guy contribute 100 guy 1000 guy so they cash it so well and it provides CPU power for the contributors along CPU power for the contributors but everybody else reads from layers of cash so if one layers of cash is busted it takes another layer of cash reconstruct the first layer of cash if the second layer is busted it takes a later layer of cash and so on so if you do that then the request never hits your controller that's the bottom line you don't want any request you don't want to hit your post-dress or your application controller so the things that come before it will help I'm not saying caching is like performance but it's perceived performance your users but if you're on the app where read and write is very important that you need instantaneous write broadcast and everything then you should really take your DB very well and scale your DB very well Action cable runs on a bit of read is right so ya you should you should you can tell from why didn't they use post-dress it's not that post-dress is not scalable it's probably not the best DB for the job ya so what about the next? I doubt that so I would tend to agree I think the architecture for scalability it's not so much a language or framework issue it's very domain dependent so what we do now and full candy it's a very different type of app so you know we for us right now in terms of scalability just pay more and get additional server because that's a minor cost compared to say what we can do and stuff but I used to get greener and that there's no way you could build that and something like rails for what we did that has to be a C or C plus server that we build ourselves so because the thing is the traffic patterns are different the way the service is used is different so it's a very domain dependent kind of on-site architecture think about you won't know where the bottleneck is until you actually you can architect it very well but you have zero users so so look at build something quickly MVP get it out of the door get some users to hit your app and then from there you can tell where your behaviour of the app should be the kind of app that is is it more CPU intensive is it more database intensive is it more IO intensive or whatever finding out where the bottleneck is and then attack those bottlenecks I mean I wrote an app I wrote an internal app recently so at the end one of the bugs in Tripido Tractor was the job the job to run it again with baskin timeout and can't run it anymore like what happens going on it turns out the job took a bit longer than it's supposed to on your Google and you're going to queue with the process she's like okay so there's no way around this which is things like getting jobs so like getting jobs which basically you click it you fire off something to a queue and you run it in the background from user perspective it's like wow it's already running you get responsive the app queue is more responsive as in perception is more responsive but actually what it's doing is it's firing off something in the background to trigger that job so ya very simple optimisation but knowing where the bottleneck is helps a lot and designing the application so if you want to know Shopify Shopify is also a Ruby on Rails app they've been running on Rails for a long long time even a CTO tweeted that Rails can scale because they are still on Rails okay maybe one last question from the floor before I any other questions from the floor yes how mature do you think the Ruby ecosystem is what the features of the language you do not like features of the language you do not like and how mature is the ecosystem so I work on occasionally I work on the GoStack in GraphTexy also so when I compare it with the Rails ecosystem I actually think the Rails ecosystem is much more mature like just now Michael mentioned that Ruby's cooling is very very mature like all the Go guys still envy the Rails developers for the amount of metrics of it for free and then it's been around so long that you can just see it that when you compare it to a new language like Go a fairly new language like Go the maturity is just there and what feature I don't like about Ruby I would say the inclusive and non-inclusive dots like if it's two dots it means one it's yeah I don't even remember yeah the range okay Sam For me I've always liked the concurrency languages very well and the way that Ruby does it concurrency is resonate with Python-tested if there's any Python guys here so kind of hope that that will improve where the VM understands that AI need a threat it figures it out I need more CPU power I figure it out which is more efficient more like but otherwise syntax-wise and future-wise I cannot complain I think it's really very elegant how it's done the decisions that the core team do is not not silent to any area not performance not syntax not wow factors not this not that very balanced and which is why which makes real even better right so I cannot really complain yeah and because I think it's relative you know my perspective is more is there enough of you know so much of language is there enough of a community around this can you find developers can they adapt to speed quickly can they start becoming productive with the language quickly and I think that to large extent is yes in terms of what I don't like I mean nothing comes to mind you know the syntax the thing is again probably a different perspective I see the language one of the tools to achieve some purpose a business purpose making the customer happy in a certain way and when you look at it from that perspective kind of syntax issues kind of melt away that relatively easy ways to construct solutions around bad syntax or bad language feature or whatever let's see so we use rails a lot we find that there are some um behaviors which are only specific to rails and active support active support gives you like for example a new class you can't use a present dot present on a new class outside of rails and you guys use a dot present pressure mark so anyway there's only in rails and only in active support that gives you that kind of thing you don't find it outside of rails so for somebody just working on moving on its own as if maybe using Sinatra or something else that doesn't actually have active support sometimes it's a bit of a culture so that's that's my only kind of like fear the fear of using a framework like rails is that you might get vendor locked in like oh shit I can't move out of this but so far the decisions that the core team has made in terms of rails and active support and all these other things I think it's been pretty good and we agree with them and I think all the convention you get things done very easily and very quickly yeah but it does give you a sense of lock in as you move out of that comfort zone you end up having to reinvent the wheel a fair bit in terms of stuff ecosystem wise I think as a php developer I think the php community is also moving trying to emulate the Ruby community as well like under having gems make it really easy to build your dependency management so easy in Ruby and on rails with php they've only recently gotten around to doing dependency management using dancing core composer so I think for them for the php community it's a kind of like we're trying our best we're trying to we understand what TDD is but we don't quite have the right tooling to get this thing done or other language itself may not just support the things that we could actually do in Ruby right now so I mean yeah so I can only compare from the php perspective person I think Ruby the Ruby community is definitely more mature for looking and always always pushing the boundaries in that sense php community is following some power play and catch up but I think there are some legacy issues that the php community are going to deal with like there's still there's still people who aren't using php4 so you know fragmentation fragmentation is yeah hard to deal with I think one thing I really like about Ruby is that you can create virtual environments you can run multiple versions of Ruby easily on your machine if you're using rbn for rbn in the php community there's no accepted way of doing this right now even python this is it's also quite advanced in that sense you don't use have your virtual ad which makes it easy to create virtual environments where you have python or a certain version running on your folder which is quite cool php3 doesn't actually have that no actually have it's okay you don't have to keep bashing I don't have an DM an DM doesn't have that in fact equal system-wise our only comment that the node guys has caught up very quickly within a rush of period of time I cannot really compare the two equal system as in how mature how big how big because they constantly change but close enough what's interesting to note is that bundler and jam wasn't the first packaging system around right the Java days the guys has it as well but implementation is very different and the equal system didn't really think alike as nobody forces them in one direction so you have packages that kind of conflict with another packages versioning didn't work very well and then you could have packages that you install and it's there but you can never include a class never import a class so but I've never had that problem with Ruby so long as the germ is quite decent as in desk code if it's a real gem it normally from forms of convention it forces itself in red places you can always require them whether it's copy script or Ruby classes so it's very different and also I think because of Rails because of Rails Ruby Gem developers so far encouraged to solve different problems in the MVC stack or MVC pattern but you don't have to worry about a lot of things right whereas say in node if you the first thing in node you have to ask am I an express client or not express client right that's number one that's already put off sometimes so what happens is there are a lot of node developers when we build MVC we build various specific MVMs that does one function very very well and that's it but the number of huge packages are fine few that has zone of languages because it allows us to go really modular right but okay I need to bring it back to the question about the maturity of the community to add on to what they have said so far I think the Ruby community is really doing well what you should do is really go to the conferences so this is one of them but at the same time we can venture out to the conferences in other countries especially go to Japan so next year they will be doing in Kyoto in September if you can go and visit and talk to the people that get to know the community they are all very friendly people go read Chiyon's blog post if you want to know why you should attend conferences you can share the link and at the same time I think the Ruby community is very open to helping people there has been around for so many years so I think we all just want to play a part in making the community even better what I don't like about Ruby I really can't think of anything maybe the new try syntax maybe that but nothing else so let me bring back the panel so that we can close it soon final question from me what do you think can improve with the local Ruby community but if they need to improve with the local Ruby community I can start first I actually like hope that during the college days the NUS days or whatever you say that they also pick up rubellarios and not wait until they finish their degree they graduate and they were looking for a job and they try to pick up whatever's up there because the schools normally teach them Java or .NET and that doesn't really really help unless they're trying to look for a job in the bank anything else you all see that you feel needs to improve in the local Ruby community so maybe what I would add is so there's a lot just like an incredible incredible amount of talent locally and regionally I think one thing that we can do better and is and I say this at the same point I grew up here I was born here at that the Asian mindset is to be less vocal and you know less out there less public with stuff discover less public about you know talks to give it's good that we have kind of conferences coming up but I think if more people in the community just show the rest of the world that hey you know there's a lot of cool stuff cool stuff happening in Singapore and Asia or Southeast Asia you should come check it out you know that would go a massive way in terms of making the community be seen in a better life internationally for me my general experience with Rails the first in Singapore in Malaysia they are generally generally more quiet they are not they don't speak up enough like and the other thing is that I will I think I think being able to bring Rails to the college community the high school community is very important because once you show them that there is something else other than dotnet they will be oh okay there is another word out there okay Michael or a car like I was was talking to this name just now about to see if it chasm between people who are beginning Rails and people who are intermediate or really make a decision to make a career doing that as in you see a lot of people attending Rails Girls and all these other you know beginners beginerish kind of kind of things nubish kind of things like the movie, tea party and all that stuff and how many of them actually progress on to become hired or go into doing this as a career something I'm kind of concerned about I think it's concerned across the board about Singaporeans or even the locals choosing to become an engineer rather than rather than going to work at a bank or something like so I think making a conscious choice to make this a career and to be good at it become craftmen and doing software being a software craftman basically and getting better at what you do I think sharing sharing the knowledge of what I think so far we've been really good at sharing knowledge I think we should continue to do that sharing knowledge about best practices things you've done and invent more, create more things and share with us and I think it will be exciting to see Okay, so I think that sort of sums up the mentality of mine Yes, yes I would just like to mention that I live in the United States and the way I found out about you guys is by googling and seeing the video that you've been posted so I've seen Winston and watched the video a couple months before he was coming to Singapore if you like the world to know more about what you're doing make more videos Okay, so So thank you Michael for doing all of the hard work in translating This team are doing a great job in pushing out our community to the outside world so thank you so much to him and this team and we're looking for volunteer but I guess across the board we hope that everyone can speak up more participate in the meetups more so that we have more talks scheduled for everyone to learn from one another Alright I hope you guys enjoy the session today if you have more questions feel free to approach them individually some of them are hiring right so talk to them see if you can get your job today interview that there are rooms to do it Alright If not can we give another round of applause Thank you so much to them and again thank you to our sponsors today thinkoblogs.com Q3 do you stay around is there still food? I don't know Ya, there's still food So please continue to stay around have food minggu around come to each other stay Merry Christmas Alright Thank you so much Thank you so much Thank you Thank you Thank you Thank you