 Hi guys, yeah, I just went to this event in March. It's actually like three days conference, it's actually a two days conference and the last day is actually hackathon. So it's in Tokyo. It's actually the first time it has the hackathon. So they are giving like a lot of luxury prices like Nintendo Switch for the guys. And yeah, so I'm introducing myself. My name is Amy Xiong and I was software engineer in TigerSpike which is just around Tanjong Pagar. So yeah, so this is my contact and so just a brief introduction about TigerSpike. It's just we are actually a digital product company that we have user experience, user experience services and app and web company. So this is like emotion journey mapping for me throughout these three days. So you can see mostly it's actually a happy kind of emotions and so it's actually is a very fruitful experience for me. And the last time I'm sort of like brain dead because I've actually learned a lot of stuff. So yeah, and so actually before the two days conference, they actually have networking session. So they actually break, they actually like anyone can join to, they have an event that for you to walk to Observatory Tower for you to have like a networking session with all the developers. So you can actually use this chance to talk to everyone and like you know like different developers that are working of quite a lot of interesting kind of stuff. So this is the schedule mainly and you can see there's actually different talking duration. So if you can see there's a lightning, it usually is around five to 15 minutes of presentation. So and most and others around 20 to 40 minutes is a longest presentation. So that mostly all of them actually talking about their site projects and some SWIFT practices. And in this year I noticed there's quite that there are some machine learning VR and some object protection in the presentation which I find quite, it's like a different kind of thing that we normally do in a mobile environment or web kind of SWIFT stuff. So yeah, conference highlights, that's a disclaimer. I won't, I'm not going to repeat the whole presentation and I wouldn't, I didn't, I wouldn't be the best person to explain all of their awesome presentation. So I'm actually, I will only choose some presentation that I find interesting that I'm actually interested to know more that's why I do some research on it. And and that's for some, that's after this I will say I will actually show that there's some presentation that I also find it interesting but I doesn't have a chance to show it for today. So other than that I'll actually attach some Google's, some slides from them, the presenter's slide. So it's actually good for you guys to look at it, it's actually very, in very detailed information. So the first topic is cross-platform. So cross-platform, before this I thought cross-platform is more like a hybrid app which is, I don't really like to give, I mean before this I've had experience with all these Fungab, Fungab and some other platforms don't really work well with native. So, so I don't really have a pleasant experience with that. But so right now for cross-platform experience, there are two interesting presentation. One is actually Swift on Android which is, you try to plot the Swift into Android and build your own tools. It's actually about React Native. So Eric Wing is actually, he's not only an Android developer and also a Coco developer who actually, he has his own STK called Blur STK with another R. So he's giving a lot of opinions on how he actually developed his STK that must over some difficulty in porting the Swift to Android environment. So and Ota, he actually made the, he actually contributed a lot in Coco Ports for the previous five years. So he will actually talk about his experience on building React Native in React Native projects. So back to Swift on Android, main questions like, so do I, right now, do I, can I write Android in Swift? So sadly, it's actually, you know, it's, so to build Android in Swift we have to go through quite a lot of process on doing it. And so, and next slide is, so next slide is actually like, it's possible but it will be painfully inconvenient for you guys. So, so but the whole concept of Swift to build on and to use Swift on Android is the fundamental stuff that if you got a live, see, mix everything possible. So you have to kind of, by, by developing Swift on Android, you have to overcome some linkers, errors, which is, I'm not sure you can find a lot of people can answer you on Google or Stack Overflow. And you have to develop a method that interface the JNI, the Java interface. And in this case you have, you might need to resort to some hacks or code generation. So, so in this case, so I'll explain it on C. So, so you can imagine like C is like a building block for everything. So if on Swift can actually talk to C. So, and so if you got a library that you want to use it in Android, as long you actually must it, you can actually talk to it. So, and for the build system, libraries and language, you will see that you like, let's say UI kit is not really the like, it's actually considered the UI. It's not really like the language of the Swift. So mainly for Swift on Android, we're actually using Swift call for that. And build system, you will see like for like X code, build system, Android Studio and Visual Studio, which is actually way more different with each other. So language, the language will be the one that we use to standardize and to try to talk with each other. But I mean, because right now the platform vendors won't be actually, they won't really have an interest to build the platform that we can to let the language to communicate with each other. So, so yeah, you can try to use Swift package manager, Swift compiler, like X code, like how X code actually does and reproduce their commands. And from what Eric mentioned in his presentation, he actually mentioned like, actually quite pain and hard to scale as it's as you have to went through a lot of process to do them. So, so another, another way is a CMake, which I tried to know more about it to see. It's actually like a cross platform meta build system. So, so similar, like you need to list the file that you want to build in a text file. So, CMake will actually like create a native project for it like, like a Visual Studio and X code and make files. So in his blur SDK, he handle the build system and challenge using the CMake inside his SDK and provide like, provide convenience of deployment ready prebuilt libraries for, for, for us to use. So, so Eric actually, Eric Wing actually produced, he actually released his beta version of blur SDK and he actually demo his gaming, demo his flappy bird in iOS and Android by using his SDK and yeah. And for the, so for the libraries in writing in Android. So, so you can see right now there's a native and you can, you can actually, you can speed as three categories. So native Android only development or cross platform development like the non-native GUI, but it's usually common to be used in video games. And if it's actually C library against, again, you can use it in Swift and cross platform native GUI. So he actually suggested IUP, which is possible user interface that to help you to develop Swift on Android more easily. So, so move to react native, which is before this, like I said, I, I have, I heard about it. I know it's actually, it's actually a JavaScript, you write like JavaScript syntax, but I'm not, I don't really have the idea of playing with it for mobile development. So after hearing, after, after auto share his experience by moving away from Swift, and typically it's actually native code. So he, he decided to move away because he found like the effort for, for two hours and junior and not the effort of fixing and developing and not to be the same for one web engineer. So they are, they are team actually decided to give react native a shot. So, so he, he goes to explain quite a lot of the development pattern and they end up choosing react native at that stage because they find it, there's react native is still a development, is still on their development phase. So there's still quite a lot of improvement. So to explain what is react native, react, react is like, it's actually a Facebook project that they actually offer a single direction component model, which is you data can only flow, flow down. So that can replace the whole MVC set in front of, in front end application. So, so react native is like the implementation of react where instead of having abstract web page, so web page doms, it creates a native view hierarchy. And so do note that, do note that react native does not includes view controllers. So it's like a MVC model from Apple Coco framework that doesn't directly map into the react native. You need to write JavaScript, which is react native that interact with a view hierarchy. And it doesn't, and, and it's, it doesn't like transform your JavaScript into native code straight away. So, so to, so yeah, react native is a cross platform. And it, so you can actually build it in the Samsung TV, Windows 4, Android 4, or even a web page in react native. So I, I haven't really have a time. I mean, I'm actually going through some react, I'm actually trying to learn react native right now to know, to try to play around the ideas of doing some better project by using react native. I think I will show it up on GitHub later. So next topic, I'm home, I'm not, I hope I'm not too fast. Next topic is actually at transport security. So the presenter is actually a Japanese called, I mean, the hand is called Niwa Tako. So in, in Tricep Tokyo presenter can choose to present in Japanese or English. So when let's say if the presenter present presented their presentation in Japanese, we will have a live, a live translation. So a live translation. So you have to like listen to it. And it's not necessary 100% accurate, but it's actually good enough for us to understand what they mean. So at transport security is actually Apple implemented and forced it to improve the privacy and data integrity to ensure that your app network connection is following industrial, industry standard protocols. So it will, it will protect the user that the protect the user to trust your app that does not accidentally leak information, information to malicious party. So, so yeah, this is one of the topic that when I talk to different developers, they see like what kind of topic that you that you find interesting throughout the first day or second day, this is one of the topic that most of the people actually quite interested. So that's right. And so last year, I buy right Apple and force that we should actually, when we submit all the app to the app store, we should have enforced the ATS, the app transport security. If not, they will actually reject it. But last year, December 21st, they actually like say, they're going to delay it until when they until the next announced. So yeah, but it's actually it's actually good to implement as early as possible. And then our stand, this is the three, three variables that that Apple provide in our newly introduced it in our stand. So I will be kind of this like the proper explanation from the Apple website. So it's actually it's actually ensured that if it if you set it to yes, it's ensured that your media will actually has been if you say it to yes, means you actually do. You actually doesn't really follow the the ATS standard. So it's a key. You say, Oh, it's actually safe to use it. But even though it doesn't really follow the ATS standard. So this is for media. And this is quite similar. But this is for web content, which is like our web view. And it's usually we use it for our embedded browser. So you will actually encounter this problem. Let's say you are actually your web view actually connected to some HTTP website. So you will end up having a failed connection or some error connection. So so the next one and that's a lot local networking is actually a lot is actually more usually use it in for the intranet. So so do note that if you set or I mean, if you set the key to yes, you will need to justify to app stores that why do we need to set it to yes? Why are you not following the proper standard app transport security? So I showed a graph. This is one of the slide from the presentation. And so normally for HTTP web, web view, and this is WK web view, and you and UI web view and NS session. So normally on HTTP, it can it still can go through right now for but for ATS unsafe HTTPS, it won't. It will actually block the user from connecting to it. So for safe HTTPS, of course, it will be if it's okay to go through. And but unfortunately, in 10.2, there's kind of like a bug that even though by right for unsafe HTTPS, they shouldn't. So they are not, they can't really connect it to the they are not allowed to connect it. So it's considered a bug in 10.2 in for the for the web content. And say let's say for different combination of ATS in hours nine and 10, you have behaved differently. And from what I checked, get it from online, there's a source that he tried to compile it may make a clear statement. Like if let's say you're in hours nine, and you're asked in hours nine, and hours 10, if you are setting like one of the flag to yes or no, work out in that view, will it be allowed? Or it or in the URL session, whether in hours nine, is it is it allowed in 10 or nine? So this is like a guide for if one of you want, I mean, if the app actually need to connect to hours nine and 10. All right. So what's like three? And it's actually one of the topics. There's, there are actually quite a few presenter present on this, but I choose Yuzuki Ito. And he he presented his presentation actually tried to like persuade like why Swift, but because usually for server server, we use Python Ruby. And Swift is not really a common language that come into mind when you want to develop for server. So but why Swift? Because Swift is considered a safe language. So you you have types protocol associated that it will actually helps you to code safely. So and you have an X code that you actually help you to have, you can have the breakpoints for you to debug. So and in his project, he showed the back end service with Swift, which is actually by using Swift, we can claw crawl the website. So I crawled a website content by using Swift. And another project, another his personal project, he's actually used Swift that works with Raspberry Pi that to, it's actually the program air pressure sensor that runs every hour. And it will use the HTTPS post to publish the result to that by using the API. So which is one of the I find quite and you can one of the use case that you can play around. So there actually see like what kind of what kind of server Swift framework that that has in the market. And I find this tree is perfect is considered the most popular one considering the the stars. Yeah, so perfect. And it's actually from IBM. And vapor, I mean, all is actually open source. But kitchen, there's a IBM provide IBM, IBM actively support kitchen for Swift. So they even gave a presentation in 2016 on the topic of going server side with Swift open source. And so which they are using the IBM inquiry, a start company called strong loop, which is actually the maintainer of ExpressJS, which explain why the syntax in kitchen is somewhat similar to ExpressJS, which is if you if you don't know ExpressJS is one of the one of the routing language in for server. So they have free trial for 30 days for Kittura. And so I decided to try out the sample. It's just like a normal setup thing. It's not really hard to set up, which is quite a pleasant if it's not really intimidating. And the documentation so far is quite clear. So the last time I checked is actually they have 9,000 stars, well documented and syntax is also quite similar to ExpressJS. So in here, the every Swift project actually use the Swift package manager. So they will have a package JSON, mean Swift file. So so yeah, it's actually it's actually quite it's simple to set up and I find quite a lot of tutorials online to for me to get get my hands on server Swift on vapor. So yeah, this is also one of the my site projects on server side. So I've got quite a lot of pending stuff. So perfect is perfect the most. So it got 11,000 stars. And it aims to be the rails for Swift. So they are trying to make a complete framework that allows you to do anything that you want to do in Swift. We shouldn't, I guess. So usually, I find it's quite easy for you to deploy your web to Heroku. So you can like take your code, initialize it to get rapport, and just push it to Heroku. And it will actually detect what type of application that you have. They will compile it. And so if, if, so if let's say Kerakor cannot automatically detect Swift, you can set a custom build pack that that help you to detect, I mean, like detect, build and run the project. So potting library to Swift. He actually like kind of say it's quite easy to pot library to Swift. So you just need to find a C base library, rabbit it with Swift, rug it into more Swifty way. And let's say, Libcur, Libxml, MySQL connector, kind of thing. So you can try your hands-on on like batch programs, API server, in how, in how deployment tools, command line, just script, script it with Swift. So another really simple casting that I tried my hands on. So, um, like, hello, similar, quite easy, like hello world. So it's just like, it's nothing difficult. It doesn't, doesn't look really daunting. It looks very scary to me. Like, so I, that's why it's actually encouraged me to dig more, to do an explore more in server sites with. So yeah, I think I repeat my thoughts. So yeah, it's quite, I will actually continue my site project in server Swift. And testing, one of the testing presentation that I like in is actually making more objects more useful from John, from John, he actually, he's working for American Express. So he got like a few mock recommendation for testing. So usually we, when we create unit test, when we carry create unit test, we need to test whether this function has been run or not. We actually use Boolean. But he said, it's not really recommended to use Boolean. What if it actually run twice or three times? So it will actually like, let's say it might be actually set it to from true to false and back it to true. So you end up, you thought you actually run it. So it's best to use integer instead of Boolean. And he, he introduced, he actually provide a code out in my, in my, in my, in my slides later, I will provide a code project from him that he actually used the file line to assert in the half a class. And he, I mean, he recommended this message for all the assert test, which is quite obvious because you might end up doesn't know what's the unit test is about. Maybe a few months later. And he said, to make your unit test less fragile, you should try to use, you should use predicate instead of equi, equility. So it's like, so predicate, let's say, I will, I would show an example later. So in, in this presentation is actually using a GitHub, I mean, a library called hand plus matches. And, yeah, so this is the sample for the file line. So why, why, why, why we need to use file line is because let's say if we actually do a mock, mock, this is the test, this is the testing that whether the order the right thing and the code actually code the right thing. So we try to make a false unit test, I mean, try to fill the unit test by saying by right, they should code, they shouldn't code three, three bowls of, three bowls of, three bowls of ramen. So when it failed, the error went back to the helper class, which is, let's say if you have a lot of unit tests that actually, that actually came up from, actually use this helper class, you might, I mean, all the arrow actually end up pointing to helper class and you doesn't know which unit, you can't know it right away that which test cases failed. So that's why by using file, file line, it will direct it back to the field test case. So you will know which test cases failed instead of the helper class. And yeah, so for the predicate handcraft matches are it actually has a lot of other language is it can it can be available in Java, Python Ruby, obviously, and I think there's recent, recent one is Swift. So, so yeah, this is the GitHub. And you can see the by using by, he recommended to use the predicate is by the, let's say, let's say the both, it doesn't need to be two, you can, if it's greater than two, greater than or equal to two is considered past, and you can straight away pass the test, it doesn't need to be equal straight away, if not, it's actually quite fragile. And let's say a contains in any orders, have prefix of Thomas before this actually Thomas go and yeah, have suffix prefix contain any orders or anything for a soup will pass it. So yeah, predicate. So and after this, I actually went on looking for some see if there's more testing frameworks or testing library, I found like nimble is having predicates and matches for this as well. So so I and actually more developers than I know use nimble. So yeah. And this is kind of like improve user engagement is actually I choose this because I find some, some designers like doesn't know the full potential of hours. So let's say they're don't really use much call spotlights or user activities where markup 3d touch. So I mean, if you want to tell me if we tell them that hours actually provide call spotlights or this kind of it actually improve user engagement in the app. Let's say it helps the user to find the items more quickly, find the items quickly. And let's say for call spotlights, actually it did the app search searchable on the spotlights. And for user activities, it actually saw the app state and restore and to restore it at a later time. But Markup is quite Markup is considered one of the common common in app feature and 3d touch to for building an application in 3d touch, not only the outside at the outside, but also you can use it inside the app that you can straight away navigate to the detail page. So this is like one of the things that you can suggest it to your fellow designer in your company. Yep. And app formatting is quite so right now we our company is trying to move away from storyboards if we can. So we are trying to code everything. We try to code things in in programmatically. And so to to code things in to be more organized, because like try to do it in the styling. So it's like we have a let's say we have a primary button, negative button. So you just set what kind of the style for primary button should be in ABC medium form. And the title should be invite. So you actually have a customer. So what if in the future that you designer decided like all the buttons should change colors, change pad, change padding or change with or something, you can you can go back to the one you can go back to one file and change it. And it doesn't need to go back to all the storyboards to change it. It will be really painful. So this is how we use it for I mean, use it when we call it. So you can it's actually quite straightforward that you just apply it just have your UI button and apply the primary style to the button. So not that difficult for this is like one of the rugged to be more 50 way file organization. So sometimes we used to organize the file into like there's a view model. There's a view model and there's a view controller. So you sometimes the view model is inside the view controller. So and sometimes when you have a screen, you have a feature that actually share among all the screen. So it doesn't know where to put the file actually. So in one of the presenter actually suggested to categorize it in application components and UI. So application will be like the base stuff like all the delicate stuff in long screen storyboards. So the components will be like, yeah, components will be like authentication comments, which is like things that will be used across the UI. So you I will be all the view controllers and protocol for this for the screen. And okay, so topics that I wish I can cover it today, but I can't. So you can look it up from the link that later I will be sharing up for for all the slide. It has all the the site is quite detailed. So when you read the slide, you will understand it. And that's actually at the realm realm website that she start releasing a lot of the records for that day. So you can actually take a look at it as well. All right, take away, take away from price with Tokyo, not only about technical stuff for three days, which is quite tiring for me. So it's actually quite a joyful experience. So if you let's I would really like to encourage if you got a chance, you should go to more conference overseas. You just talk to different people. And they actually coming I met with a random guy during the networking session. And he actually he was one of the presenter on the first day. And he says working for a genetic company thing to genetic company. So so yeah, it's actually quite fun to know about other company processes, how they do their testing, how they carry carry out their scrum, their agile, and their side project like all these object detection, accessibility or like inclusive design. And she quick just quite fun. It's just different from your normal days of commercial mobile project. So yeah, so after this Swift Tokyo, when you see like different people present, that's why it actually encouraged me to come back and try to present hopefully it's not really a bad presentation. So yeah, so so I joined the hackathon halfway. So so I believe next year they will still have that hackathon and workshop like Eric from the Swift on Android, he actually provide a workshop. So you can if you don't want to join hackathon, you can join workshops. And yeah, it's actually have a chance to introduce TigerSpike to other developers. So yeah, this is the slides link. And you can download it. I zip it up and zip it all things all the things together. So that's it. Thank you.