It was an excellent video. Do you know what the old songs deserve to be heard forever? Written by Dick Farley, and I had the great pleasure of bumping into his son and sister one night, and I didn't realize that their father had written that song. I thought it was a song that was out maybe a couple hundred years ago, but no, he wrote it, so there you go. Right, we move on at eight minutes in front of nine o'clock on a Monday night, Monday night session, and you just chinned in, you're welcome along. We are streaming live in all the platforms, and we say hello and welcome first time, Gerald O'Donnell and Trevor Sexton. You're both welcome gentlemen. Thank you very much. It's lovely. Is your first time up here in Hylen Bridgill? It is, yeah. Well, you've been on Donegal. You want a vodka? There's no ice to me. Go to the shop and get ice. Come here. First of all, welcome, but you've been up in Donegal because a good friend of ours just messes earlier on tonight. I was there to say to them, two boys are sitting today, so... And how'd you find the place? It's changed since the last time you were on it. Yeah, they've been done the last time. From the first time I was up, it's transformed. It's an amazing place. Were you in the cottage? Yeah, I did one of the live videos. Oh, did you do one of them? One of the, yeah, pre-recorded. We're actually doing a concert on the 13th of May in the cottage. That's right. For the official opening of that new building, Emerald Guitar's new building. Oh, that's brilliant. He's a great ambassador for the music, and he makes brilliant guitars as you can see yourself. We picked up two new babies today. Does he know you took them? Don't tell him. He knows we took one of them each. He doesn't know about the other six that's in the van. Don't tell him. No, and I'll say no, and he doesn't mind, that's the kind of ambassador. As long as you're there happy. I'm an owner of For Me Self to you. Lovely. This is a beautiful, beautiful nice place. But anyway, listen, first of all, you're up here. Thanks for making the journey, because it's a fair old trip up. It's a fair old trip.  And I'm even, we call it West Limerick. Well, it's just you're forwarded away again. You're right out nearly in the Atlantic. But come here, how did you form? That's what I wanted to know first. Back in 2018, Ger was putting a video, one video every week, out on his social media. His YouTube channel and Facebook page. And I'd been watching him, like the picture quality was great, and the sound quality was professional quality. I was watching him going, Jesus, they're really good. He was doing solo videos and videos with loads of other artists, all genres.  We'll actually sing it for you in a while. A song called Fairytale, and Ger's seen it. And I'd left a few comments on his videos, saying, really enjoying the videos. Looking forward to next week, that kind of thing. And so Ger saw my video, and he sent me a message, and we should do a video together. And that's how we started. And Fairytale is your current single, isn't it? Well, at Fairytale, we put it out on January 1st. And it went into the iTunes charts at number one. Well, there we go, number one. So it was my first ever original single putting out, so that was nice. That's a nice feeling. Well, we're going to talk more, but as we always do, we like to get on the piece of music first. So first up first, you're going to do? Yes. We'll do a song by David Francie. David Francie's a Scottish composer, and he's living in Canada all his life. This one is called the Torn Screen Door. It's about leaving the agricultural way of life behind out of necessity. David Francie. David Francie. David Francie. Check it out. Oh, he's great. When you're ready, lad, thank you. All righty. There's a red barn standing held together. I'm Ger O'Donnell and Trevor Saxon live in studio. And we're getting an unbelievable response on the socials here. Let's have a quick look. Johnny Walson watching from Dallas in Texas. And Michael Darcy in the Atlantic. Trump's Great David Francie song. I must check David Francie. I love doing that, General. Oh, he's lyricist. I love doing that. And Owen McGonagall, Great Lads, had them play in my barn Boston a few weeks ago. Top musicians and soundmen. Keep it going. There he is. Fair play. And Deborah O'Connor Doyle, good man. Great job. And Donald Hazel Duncan is watching in Gravenhurst in Ontario, Ontario. And Katie, hello to you. William Dundun. I'm sitting at home beside the fire. Listen, folks, it's great to have you all with us. You're more than welcome. Highland Radio on a Monday night. And we just played the brand-new track from a good friend of ours. I know that a good friend of yours. George Murphy. Oh, yeah, of course. We played the... We got the first airplay. And you're playing the... Jewy Dins of Yarrow, isn't it? It's a great song. Do you know the thing about it? When I heard it travel the first time, I thought Jimmy sent me the wrong song because it didn't sound like George kicking off. Do you know what I mean? No, no, no. He's very, very subdued. Wow. It's lovely. It's absolutely amazing. Absolutely amazing. It's a nice area for that, too. But we're looking forward to him. He's coming up just in the 20s. He came up here one more night. He's a great, great fella, like I have to say. George's song. But he's playing on the 27th of April in the Millennium. Millennium. And you guys are special guests. We are. We're with him. Yeah, yeah. And we're with him as well in Victor Street on the 11th of May. We've done a few shows with him already this year as part of his tour. And we did a concert in Dublin in the Unitarian Church there just weekend. The weekend gone and George was our guest. Oh, brilliant. Very good. So we fall in and play with each other whenever we can because we just get angry. We get angry at each other. But he's doing great himself, isn't he? Yes. He's a good lad. He's the only one. He's just side to the earth, do you want me to? We had a couple of friends from that neighbour out here. How do you drink if you're blind, sorry? He was in good company, I can tell you. Well, we'll give him a run for his money, let me tell you. But yourselves, lads, as I say, you've been touring. You're just back from America. That's right. And is that the East Coast or right round? The East Coast. The East Coast really. We did New York, Boston, Baltimore, Philadelphia, and we did a couple of upstate New York as well. Is that your first time over there as a club? As a duo, yeah. It's the first time together, yeah. But you don't go on their names, do you? We kind of got known separately under our own names. Yes. And then when we joined together, we were thinking of a band name for a while and then a few people had said to us, if you pick a band name people are going to go, who's this? Exactly. We already kind of had a following. You're big on social media. We're big as well. We're big anyway. Very good. Yes. Yes. Well, you're bigger in social media. I'm only joking. Jerry, before we started playing together, he had a huge following on social media on his own. And I've kind of jumped onto his band. That's down to his crying. Very good. Jerry, yourself, if you don't mind, Trevor said that you were making videos and you were professional. What's your background? I have many backgrounds. If we were into it... We told you not to ask this question. Right. What's your legal background? What I can talk about is... What else you can talk about if you don't mind? Well, my background has so many... Totally music. Is it all music, I mean? It's a lot of music. It's a lot of music. I was a music teacher. Right. For several years. Until you were throwing, right? Secondary. I loved gigging. But for 20 years, I played in a wedding band. Okay. And I did all that kind of pub scene, wedding scene. As well as... As well as... As well as... Teaching. Oh, yeah, yeah. Well, I didn't gig so much when I was teaching. Right, okay. But after teaching, I gigged quite a lot. Okay. And that was my main thing for many years. And I still remember... I was going to bed one night in 2018, early 2018. And I was like, I need to get out of this. I can't... If I keep doing this, there's no... There's no getting out of it after a few years, you know? Not that it's a bad place to be. No. Because it's a lovely... It's a lovely living. And to be able to make your living playing, you know, over sounds... It's... I mean... Was it a bit of Bourneite, was it? It was a great living. No, I think I just... That... Right. I was done. I don't know for long enough. And I think I just needed a change. And I wanted... I had written so much music. And it's never gone anywhere because I've never been able to... Right. Give it a platform. Okay. So I was there... I was lying in bed and my wife was there. And I said... I was downstairs for a few minutes. So I went down and I sat down with the piano. I set up a camera, some microphones. Now, I've recorded many people for years. I have a good audio set up. The recording set up. So I did set up the microphones properly. And the piano on the vocals did a couple of takes of... Tom Waits Gravefruit Moon, I remember. And I just sat... Just put the videos together. And I would have had a background in the media. I did that in college. Right, yes. So I edited the videos, put it together in a few minutes. Threw it up on Facebook. Went to bed. And thought not. Fallen Day had exploded. Well... Okay. I might be one off. I wouldn't expect it to happen again. I do one a week and let's see what happens. And I said this is my way to get my music out there. If I never go that route gigging, that's okay too. But maybe I'll be able to mix two worlds. So I mixed the two worlds for a while. Work well? Yeah, it worked great. But I needed to take a step. Away from the cover scene. To the theatre stages. Which is risky. This is a big risk, all right. But obviously there was a spark left there. Oh, there was a spark. There's many sparks. Yeah, yeah, yeah. There was one moment that I'll never forget. And it was a long time ago. You always chased this feeling. I was playing in a band in Germany. We did a tour years ago. I was 1980, 1990, something like that. And I was with this rock band. Kind of like the Cranberries, that kind of thing. Yeah, yeah. And we went over it and we played an original song that we had put together two months beforehand. No, it was the vocalist who did most of the writing. But I was kind of part of the chord structure and how the feel of the whole thing. And I felt a bit of ownership over it, you know? Yes, yeah. First gig in Germany. We were in a place called Cafe Hann in Frankfurt. I'll never forget. And we went out on stage. The first song went great. We did this new song a second. We get a little bit of the way because it's fresh. You know what I mean? Yes, yes. So we got into the song and got to the chorus and the whole place started singing. And I went, what is this? Singing your song. Singing our song. Wow. Yeah, yeah. So it had been played in radio and everyone's singing along. That feeling. Ah. You chase. Yes, yes, yes. You chase. Only a lot of people say that. Yeah. And there's nights I've sat at different venues, you know, down through the years. And that feeling. I love sitting, watching some people singing along to someone's song.  Yeah, that's great. You know, atmosphere. Brilliant feeling. Because a good feeling for me, you know, you can go, Jesus, that's good.  It's a special thing, aren't you? Aye. And George, George Murphy, he just, he sent me a video a couple of weeks back on WhatsApp. They were playing a session. He's, they do a weekly session in the Ballmount House. Just on the road from George. Oh, it should be Brewer Bizarre all the time. They sit in and play a few tunes. And anyone is welcome to bring their instruments and sit in and do his song. His father and old Bizarre. That's right, yeah. I've done it a night with him. It's a great crack. But George sent me a video of a lad who had sat into the session and he was singing a song that I'd written. Wow. It's the fairytale one, the one we've seen. Yes, yes. I don't know how true it is, but they say when people start singing your songs at sessions, your song has become part of the tradition in everything, you know what I mean? It was an amazing feeling. It was an amazing feeling. Exactly.  Yeah. Especially when you weren't expecting it, you know. And it was, Kim Varner said it was wonderful to meet these two long distance during the pandemic. Jer was kind enough to help with our mental health by providing live concerts. Through this, we met Trevor and loved his music and talent as well. They are very much, they are a big part. They are such fantastic musicians and worth the rest of it. And the next stop is a little late show.  You have to get that. Thanks. Who's that? What's that one? The next stop is in, they're going to turn over to the late, late show now. It's a little bit early. Paul Kelly, Stout and Llamavari watching, loving this, brilliant stuff. But that's a lovely message from someone there that you're watching music done for. Yeah. Yeah, Jer was doing, he does a video concert. I'd have one regularly. I think it was, ah, no, no. It's done every Wednesday, I think. But there might be some more things. I've been through COVID, I did. Are you enjoying that more now? Are you enjoying that end of things now, Jer? You know, are you getting the benefit out of that? And your own well-being, rather than the band scene? Ah, yes. But it wasn't, like, I wasn't in a bad place with the band scene. No. But obviously, it was a great job. I've worked hard jobs, where you know, you get up in the morning at five o'clock and you know, you slug. You just need to change the direction of your music, because I've got a boss, do you think? I know, I needed an outlet for original material. Good, that's good. I write all the time, and I'm always, you know, I... You've written for Delores King, haven't you? I have, yeah, yeah. Actually, yeah, her last song. My Refuge. Yeah, that's the one, that's the one. No more, do you? Great singer. Oh, magic. Sean, we have Sean a few times. Oh, I played with Sean a few times, and he's just... We have had a lot of beer. He guessed it with us. A few months ago, we did a concert in Milton Melba, in George was one of our guests. But Delores... Or not George, Sean. I didn't know what to expect. And the first time I met Delores was... She got a Lifetime Achievement Award from Graham Cuell. And I was asked, any chance I'd come and play the guitar with her? And I went, yeah, absolutely. You don't say no to those, you don't say no to those. No. And we didn't even... The rehearsal was the soundcheck. There was none? No rehearsal. Still none? Straight in. Straight in, no kissing. And so we came out on stage, and we had a quick run-through. Tried a couple of keys, great. The next thing she took off. There was a whole load of crew setting up stuff. Everyone stopped. This is incredible. Her voice was just beautiful. It's natural in both of them. The uniqueness of stuff. What's the family thing? The brother Matt. Beautiful voice as well. It's not just that there's loads more as well. She gets together and put a big show on. They have done, yeah. Sean's just amazing. Delores is something else too. We're going to take a quick ad break. When we come back, can we get another piece of music? Absolutely. What do we do this time? It's a song called Martin Bay. We came across it by total accident. And as far as we can make out. We could be wrong if there's anybody out there in Radio Land who knows better. Could you please text in? We think that this is the only song that we have as a nation, as Irish people. It was actually written by somebody who was exiled to a penal colony. So we have loads of songs about exile and people being sent away to a foreign lands. Of course. People writing about it. We're going to imagine what it must have been like. But we think this is the only one that was actually written by somebody exiled. Vince Fontaine. Two boys are legends. I'm Jerry's biggest fan, plus his best-looking cousin. And Morris K.  As your number one stalker. I'm so proud to know you. Here, stay tuned, K. The rest of your game, we're going for a quick break back with more music on Highland. Don't go away. Brian Adams is back on tour in 2024. Join Highland Radio on our trip to Dublin to see the man himself at the three arena on Tuesday, the 21st of May, 2024. Your trip includes luxury transfers, bed and breakfast at the four-star Carton Hotel Blanchestown. Your standing ticket to the show and a shopping trip to Dublin City Centre the following day. Find out more on the outlet at HighlandRadio.com or call us on<PHONE_NUMBER>. Are you building, rebuilding or renovating? What heat pumps or solar panels would suit your build? Come along and speak to the experts efficient renewables on heat pumps and solar panels. Get advice on installation and grants available. Visit the efficient renewable showroom in Newton Cunningham and see these products in operation for yourself. For your weekly G-new stories and analysis join me, Brendan Vinney, this Monday and every Monday for the DL Debate. This week I'll be joined by Chief Sports Leader with the son, Jason Byrne, plus county PRO, Sinead Breen will be on the show and we'll have interviews from the Donegal senior football players and management as a look-ahead rostered championship. This is the DL Debate. This Monday, just have the 7pm news and podcasts at the Highland Radio.com. The DL Debate with Sister Sarah's Ladder Kenny serving food you'll love in Sarah's kitchen. Yeah, we're back in again here at Highland Radio on the Monday night session. Gerald Donald and Trevor Sexton have joined us. An Alastair City is looking forward to you playing in me at the cottage. So, right, whenever you're ready, lads, take it away. Alright, Martin Bay. Absolutely, man. Some songs, isn't it? And do you see the fact that you told me that story before that? You get a more sense of passion with the DL because of, wow, do you do that a lot in your set? We do. We wouldn't do it every night, but we do it a lot, yeah. It's actually, it's our next single. We just have it recorded, so it'll be our next single. Hopefully before the end of the month. Maybe. Definitely. Definitely before the end of the month. The thing that was holding us up was I was moving my studio from the house to a purpose-built studio that I made out at the back of the house. Good, man. And half of the gear was between but it's all in now. Well, it's not all in, but it's enough to mix and the room is ready. There you go. Martin Bay will be released before the end of the month. You heard it here first. We're looking forward to it, you know, and let me tell you the funniest product. And you do all them recordings yourself, and I'll tell you what, these lads are just real class. Well done lads, Nicola Maloney. So proud of our cousin, Trevor, listening in Castle Mahon in Limerick. Hello to you. Oh, Limerick. And Jair, oh my God, Noreen Ford, Jair and Trevor were here recently. Seen them in Rory Dolan's in Yonkers in New York. These pair are gifted with music and song. You're right, Noreen, you're right. Everybody listen to this. Everybody listen to this, right? Spread the word about Trevor Sexton and Gerald Donald. Just go and see these guys live, the most naturally talented guys you can hear. Brilliant. And we're much better looking live than we are. Oh, they aren't fairness now, they are. Find looking fellas here now. Where's the one I seen from Cale Donoghue said, Oh, no, you don't know. You put that up to angry say this where word. That's right. What do you call them? Marcy, where was that? Oh, they're coming up here now. Where do we get them? No, we lost it to me, don't we? All right, well. Who we got? Who's that? M. M. Dotty Lamont listening from Bahrain. There you go. We want to bring us to Bahrain for a concert. There you go. No problem, we'll play an awful. You're no longer going to Bahrain. Hey, tours, tours, you have just completed an American tour, you're heading to the UK in July, and then you have a Dutch tour later, and then two Canadian tours. That's the plan. If all works out well. So the two Canadian tours are still being kind of organised. The Dutch tour is happening, and the UK one is happening. And I would say at least one. America again. Well, again, one. Definitely once and not twice. Hang on for a second. Marine Sexton, don't know who he is. Simon Brilliant guys, a big hello from all the Sextons here in Camus. Yeah, that's the one place. Especially Chavar's little girl, Ariana. That is me. And Michael Breen says, we're getting Nancy Spain. With one song left and the lads know what they're doing themselves. Oh, we got to do freighter. Oh, there's no problem. But come here, once again, there will be special guests of George Murphy's and the Millennium Forum, and we're looking forward to heading down that night. It's a brilliant venue you've ever been on before. I haven't. No. An amazing venue. Absolutely brilliant. It's in the heart of Derry, right in the city, and it's just pure class. You will enjoy yourself, because it's just got everything perfect on it. We're looking forward to catching up. Don't be one bit worried. We'll certainly take it. That's what you want anyway, between you. It's been an absolute delight. Haven't you here really, really enjoyed your company and the craic? We're going to go for another break. No, no, hold on. You can go for a break, because I need to reach in. And they're playing two absolutely beautiful emerald guitars, which are just a credit they don't go and credit the Alice during the team. We just love them, Derry. We'll be back after this. Don't go away. Don't miss the BAFTA award-winning comedian Michael McIntyre's brand new show, Magnificent, at the SSC Arena Belfast on Friday the 31st of May, 2024. As always, Highland Radio make it easy for you as we look after all your needs. We will provide luxury transfers overnight stay at the Clinton Hotel Belfast on a B&B basis, your ticket to the show, shopping time in Belfast City Centre. For more information, go to the outlet at highlandradio.com or give us a call on 07491-25000. Michael McIntyre in Belfast. The CFC interior stock disposal sale is now on. Due to renovations, an incredible £1.5 million worth of stock must go. Don't miss our highest ever discount on selected ranges across all departments. The stock disposal sale at CFC Interior's Derry, Cookstown and Abbey Centre. See you now on. I can't wait to be talking to myself after that. Listen, you're welcome back 25 minutes after 9 o'clock. Don't forget Nathan Boyle's on the way and I'll also be talking to Danny McIntyre ahead of his gig in the Baller Theatre this coming Thursday nights along with his band Thulus, part of the Ghost Lights session. So we're looking forward to that. But I'm in studio and get the great reaction, absolutely brilliant reaction. It's Gerald Donald and Trevor Sexton. And your gig in... Actually, we mentioned the Millennium Forum, but you're also playing in Derry again. You have another venue. Up this end of the country, we have a couple of things coming up. We've got the Millennium Forum obviously on the 27th of April with George Murphy and the guys. We have Tuber Curry. We're in Murphy's Hotel on the 1st of May. No, I don't know whether there's any tickets left for that or not. It's a fairly intimate one. I think it might be fairly well-stocked already, but we'll see. And we're in the Brassneck in Derry. This is the new one to us. And it's on the 6th of June. He didn't say that's up in the diamond somewhere. Up in the diamond. I don't know where the diamond is, but... I don't know where you get a Brassneck in Derry now. Ah! Yeah, so the tickets there are available. They'll be available actually this week from the Brassneck. And there'll be... Look at our social media as well. What are you commanding? Social media? So, Gerard O'Donnell Music. Oh, bring that up. Trevor Sexton. We didn't join up on social media, yes. We don't like each other that much. We didn't get married at all.  What does it say? It's been a delight having you up here. The Brassneck, there we go. It's a gastropub in the diamond in Derry. OK. And if you want information about tickets, you can email them at brassneckkitchen.hophill.com. There we go. Information right away. That's what you call executive producer stuff. Thank you, Jimmy. Right, lads. Final song. And once again, we genuinely appreciate you coming on here because it's a great sound, a great track. Oh, thank you. We look forward to catching up with you in the Milan M Forum. This final song. It was one I wrote over 20 years ago called Fairytale. I had a job as a delivery driver at the time and I was touring along the road on my van one day and a conversation came on the radio about the origin of the Disney Fairytale, like the Cinderella and Snow White and all that kind of stuff. And I don't know where the song came out of, I just pulled the van over to the side of the road and this song fell into the back of an order sheet for the company. I was orphaned for it. I'm going to give them a plug because I worked with them for years. They were called Hunt Office Technology back then but now they're called Hunt.ie to do all office supplies. A big huge company now. They were a small outfit when I was with them but that's where the song came from. There you go. Actually, before I forget, I have to give a big shout out to a couple of friends of ours, Liz and Yvonne Cain. Oh, yes. They, last week they won the Gradham Cull for the best group. And we know them from Johnny Madden's Crews and playing music with them. But also, I'm going to get emotional now, Cain. My first cousin, Derek Eke, won the Gradham for Musician of the Year just last week. Trevor's an emotional character here now. Emotional character. That's okay. You just do whatever way comes out, Trevor. Just to Derek, we're super proud of you. Super proud of you. I'm sure you are. Well, that's lovely. That means a lot. Well done. We wish them well. And thanks very much, as I said to you yourself. Sorry. You're welcome. You're okay. Nobody listens to this, am I wrong? No, no, no. I like emotion. Don't worry. It's lovely when you feel that way but someone saw the best look. I think what you're going to do is fairy tale and we're really looking forward to this one. Whenever you're ready. Okay. I was happy. In the freezing. This which makes this role here so the fact that on Monday night you two gentlemen are going to come gift in your music and you're sharing it with us. It's absolutely beautiful. Thanks very much indeed. Absolutely amazing. Thanks for having us. Everything that comes with the song, the style and everything. We've loads with too many people coming through in the thing. We had a spin for many years and there's four of us. We've had four or five guitars and four as well. And we're starting in Top 3 and four as well. And we've had four of us, and we're starting in Top 3 and four as well. That's very good. I'm coming in. I'll go into it. I'm coming in. Hi. Thank you very much, that's the last of our J.O. Donald Trevor section.


So, here we have a 4 pin RGB header and a 3 pin ARGB header. So, what would happen if, let's say, we plugged in one of the RGB products directly into one of the RGB headers? And what happens if we plug in the header itself to one of the RGB headers? Is there going to be an explosion? Let's find out. Alright internet, today we're going to be doing something kind of dumb. We will try to plug something into a hole which it was not meant to receive. Or we're going to plug something into something which shouldn't be plugged into. We are talking of course about the NZXT AER RGB2 ecosystem of products. So, we sell a lot of NZXT products here at the shop and AER2 has a whole line. So, there are the usual fans, there's the underglow which you can stick underneath your case to have the light spill out underneath. There are the LED strips and there are the RGB cable combs. All of those products plug into a NZXT hub. It's easiest to get with the fan pack. NZXT sells these fan packs where you can get 3 or 2 fans and it already comes with the controller. So, the heart of a typical NZXT setup is the control hub and here is the hub. It comes with 4 channels, 1, 2, 3, 4. It connects by a USB here to the motherboard. So, trace the wire there to an internal USB header on your motherboard. So, trace the wire back, brings you back here to the control hub. Power is through molex. So, that's the power and you'll notice each channel leads to a different accessory. So, this channel leads to the underglows. This channel leads to the LED strips. And this third channel leads to the fans. So, the fans are daisy chain to each other and then they finally connect to the hub here. So, actually we are not using one channel. There's still one more channel. So, that's the basic NZXT setup. And again, to review, it's plugged into an internal USB header. This is the USB and it plugs in here to an USB header on the motherboard. So, where is this thing? I promise like we're gonna try to plug in something where it shouldn't be plugged into. The NZXT hub plugs into an internal USB header and that is not the standard or that's not the default thinking for RGB. For RGB, most products just ask you to plug it into the header on the mobile. So, your motherboard can have a 12 volt 4 pin RGB header or a 5 volt 3 pin ARGB header. Or if your motherboard is fancy, it can have both an ARGB header and an RGB header. But where I'm going is usually for RGB, you plug them into one of those headers. You don't plug them into the internal USB. You plug them into the RGB header or the ARGB header. So, we got the thinking and we were like, yes, you know, we follow the instructions of NZXT and we plugged everything where we were supposed to plug them. The controller is nicely plugged into the internal USB header. But if you take a look at the internal USB header, you know, it's kind of like this could go into a 4 pin header or even a 3 pin header if, you know, you want to force it. We were thinking like, could there be a situation where you're a customer? Yes, you got this nice fancy RGB but you're not really, you know, you didn't really look at the manual or you didn't let hardware sugar install it. And so, you're rushing and you're like, RGB means RGB header on the mobile. So, two scenarios. What would happen if we plugged in a NZXT product not into the hub but into the RGB header of the motherboard? And number two, what if the hub, instead of plugging it into an internal USB header, we plugged it into the RGB header? So, really, it's not too far-fetched because again, the default state is oh, RGB equals plug into RGB header. It's only NZXT and Corsair, some of the more premium brands which insist on, oh, you need a hub and that hub plugs into an internal USB header. If you're rushing, you didn't really read the manual and you take a look at the header, the USB header, easy enough to mistake it for, oh, this goes into the RGB header. Will the component fry? Will it work by some miracle? Will it destroy something else on the motherboard? You're gonna find out. Let's plug it in. Okay, you're nuts. If you think we're gonna be plugging in this expensive NZXT things into a motherboard that might fry the product, we're not that rich. The shop doesn't make enough money to cover YouTube videos like that. This is not Will It Blend, this is not Mythbusters. So, don't, sorry, short, sorry to say, sorry to lead you on. Sorry for the clickbait. We did not plug in the NZXT into the motherboard directly. We actually already know what happens when those two scenarios occur because it actually happened to our customers. And this is why I know it's not too far-fetched because we've had actual people who bought stuff from us, come back to us and say, I think the product we bought from you is busted because it's not working. And after, back and forth, after discussing with them, we discovered the problem was exactly that. They plugged in the NZXT product directly into the RGB header or they plugged in the hub into the RGB header. And so, what happens? Fortunately, we don't need to damage our own products. Our customers' products took one for the team. And this is what happens. Apparently, the product itself shorts out. So, we had one guy who plugged in the underglow into the RGB header and the underglow was frozen in blue and not all of the LEDs were on. And you can't find it in CAM anymore. CAM won't identify it, CAM can't see it as, oh, I have an underglow in this system and I can control it. Another customer plugged in the hub. So, he put all the fans, stuck them into one channel and then plugged the hub into the RGB header. Same thing, it fried his fans and the fans were all blue and again, they could not be detected in CAM software. Interesting question which I don't know the answer of is, is the hub still fine? Like, if you remove the fans from that channel and then put in working NZXT products, will that hub still work? Is it only that channel that's broken or are all channels still okay? Is the hub itself still fine? That one, I don't know because the customer did not have any other NZXT products he could test that he could try them out, plug them into the hub to see if they were working. So, we did not need to do death and destruction to our own products, the products of our customers and their feedback is enough to show, to demonstrate that this is what happens. Please do not, if you have NZXT AAR2 and probably even AAR1, those things go into the internal USB, plug all of the products into the hub and then the hub plugs into the internal USB header. If you don't have an internal USB header, you can buy these sort of add-ons, NZXT sells them, sells a version as well where you get additional USB headers. Don't try plugging them into your RGB header. There were no reports about damage to the motherboard itself, but the products themselves, what you plugged into the RGB header, get fried. Most likely because an RGB header uses 12 volts and I'm not sure if NZXT uses 5 volts, so it's an ARGB system, but most likely 12 volts is too much juice for the products to handle and it fries them out. And interestingly enough, it fries them out in the same way because they all turn blue. That is the death color for the NZXT products once you've fried them. So, sorry, not sorry for the clickbait. I thought it was an interesting topic to talk about. To be honest, we haven't reached that point yet where I will willfully destroy products that we have in shop. We're trying to save them to sell them to you guys, but I thought it would be useful for people to know that to keep in mind when you buy NZXT or Corsair that these are sort of proprietary systems that do not interface with the RGB header. So you also can't use the usual MSI Mystic Lite or Gigabyte Fusion or ASUS or Async or any of the other motherboard RGB-controlled softwares because these guys, Corsair has IQ, NZXT has CAM. They have their own proprietary software. So be safe. Make sure that when you plug something into a hole, that hole is meant for that plug or thing or whatever it is you're plugging it into. Thanks for watching. So I hope that these basic tips helped you. If you found this video helpful, please drop a like and hit the subscribe button. For your PC needs, consider buying from us, Hardware Sugar, Atlasada or on our website. You can find links in the description below. And thank you for watching. See you next video.


As Marc said, I'm very happy about this conference. I'm really happy to see you guys and that you guys could make it. I'm really not a very good speaker, but I will try to do my best. And sorry for my French accent. So yeah, so this is going to be a one hour keynote about the state of Ruby Motion, basically the past, the present, and the future. So if we look at Ruby Motion yesterday in the past, it was about two years ago when I started the project. Actually, I was working for a company here in the barrier that makes fruits, or I was working for Apple. And I decided to leave the company to do my own thing. And because I couldn't stay in America, I had to go back to my home country, my home country of Belgium. And when I think about Belgium, I think about this. This is the best picture I have in mind for Belgium. It's actually a beer. It's pretty the best beer, I think. And I think Marc would probably agree with me or not. Disagree? Anyway, I worked for about eight months on Ruby Motion. And I think it was in May 2012. I think it was the fourth May. We actually shipped it. And I was very surprised about all the interest that this project received. I really didn't expect that. I thought it would be a failure, actually. So I was extremely excited. And I think that was the first day we released it. We had this huge article on ARS Technica, which gave us a lot of attention. And then it started growing very fast. And today, Ruby Motion is really not what it used to be two years ago. First, I'm not the only one working on Ruby Motion anymore. That's a good thing because we can get more releases and more backfaces. And actually, we are five people. We are actually three people full time and two people part time. So the two guys that you saw just a few seconds ago were our full time people. Eloy is working from Amsterdam, actually on a boat. He lives on a boat, which is great, right? He's actually building a new boat. So he's really a boat person. That's what I can say about Eloy. She's also known as Watson, lives near Tokyo, Japan. And Watson is like our bug fixer. He fixes bugs when we sleep. So this is great. If you wake up and you can see bugs fixed. And I work from Belgium, but I just drink beer and eat waffles all the day. So I don't really do stuff. And then we have two part time guys. We have Colin, of course, who's going to speak later today or tomorrow. I don't know today, right? And Colin is our community manager. He maintains the Google group. He does all the interviews on our blog. And Colin lives in Denver, Colorado. So I must excuse if I didn't put the pin correctly. I'm not really good at geography. I think Colorado should be right there. And finally, we have a French guy who lives in Exxon-Provence. And you know what? Because of the stress, I forgot his name. Geoffrey, Geoffrey, man. That's going to be tough. He's going to hurt me. Geoffrey is very lucky to live in the south of France. And he helps us with support. Anyway, we are actually doing very well. And a lot of people are always afraid that it's a startup and we don't have VC money. We actually bootstrap 100%. And we didn't take investors' money. And we're actually doing well. Oh, and I can't really tell you how much money we make. But I can show you this graph that I made a few days ago. And I can give you the actual numbers. But we are doing actually very well. And we don't really need investors' money. At this point, I also manage the company very conservatively. So we are doing great. And we have a lot of cash in the bank also. So if there is anything that could happen, we could actually maintain ruby motion for at least a few more years. And actually, I'm very excited that ruby motion is used by a lot of people actually today. And I would like to show you a few of these guys. And first, we have Djokely. And Djokely is a very nice application that you can use with your friends to find concerts. They first launched in New York City. I know they are available in most cities in America. And it's actually great. It's very well-polished. The design is awesome. And it's all written in ruby motion. And Colleen here is actually working for Djokely. It's his main job. So this is very nice. And Jimdo is also one of our other success stories. It's actually some sort of an application to make websites. It's from Germany. But it is extremely popular. And their iPhone and iPad app is written in ruby motion. And I just discovered recently that Julian Anderson, the actress, is using the application. And she's what I really like here. I was a big fan of the X file. So this is big for me. Bandcamp is also another great success story. It's an app that actually is basically some sort of a network of independent artists where they can publish their music. And their iPhone app is all written in ruby motion. And it is actually a very interesting app. You can stream music right away. And they actually put the music in the background if you actually shut your phone off and start it again. So it's all written in ruby motion. And they make very nice, very interesting things with all the APIs of iOS. Oh, we also have Frontback. Frontback is a very popular app. Basically, you take a picture of you and then what you see. And they make a picture with both pictures. And they have a social network base on it. It's actually very, very popular. I think my wife uses it without even knowing that it's written in ruby motion. It's pretty big.  So it's pretty the largest ruby motion installation. Oh, and finally, we have a dark room. It's like a text-based action game, more or less probably more like an adventure game. And it was usually a web app. And a guy named Amir Rajan decided to port it to iOS, to the iPhone. And so don't really look over the graphics because they're all text-based. And it's all buttons and text fields. But the game is extremely addictive. And it went, actually, I think it was a few weeks ago. It was the number one paid app on the US App Store. So the entire US App Store, including all the apps, including apps from Apple, a dark room was over that. It was the number one. I think it stayed at for 15 days. So this is extremely addictive. And I never played because I don't have time for that. I know that I'm a weak person. But my wife actually played for a few weeks. And she said that it was extremely addictive. And anyway, today we have this conference. And I'm really excited about that because there is no way I could have told you that we would have a conference in San Francisco two years ago. If you could go back in time with the time machine and tell my past self that we would do that, I would ask you what you are smoking. And if you still have some, for me, it's like a big achievement. Anyway, we are not here for that. We're here for tomorrow. And I would like to show you what tomorrow will be for Ruby Motion. So it's going to look like this. So as you can see, the future is flat. So here we go. On the left side, you have the old Ruby Motion logo. Well, not the old. The current one. And on the right, you have the new one. So I would like you to take a few seconds to actually look really and convince yourself that the logo on the right is the best, right? It took me some time to get over it. I didn't design it, of course, but it took me some time and now I'm pretty confident it's the best logo. So we have this nice typeface also, a nice font that goes with the logo. It looks good, I think. And anyway, the future is really about Ruby Motion 3.0. And today, we would like to show you a sneak peek of Ruby Motion 3.0. And we would like to show you three features. You see Ruby Motion 3, three features? They might be more features in Ruby Motion 3, but today we'd like to show you three of them. And the future number one is performance. And for that, I would like to welcome Shizuo on stage. Watson. Hi, good morning. I'm Shizuo Fujita. Call me Watosun. I'm very happy to see all of you today. Thank you for coming. The first feature, we've changed many Ruby Motion internal for performances. So the subject in my section is improvement to Ruby Motion performance. Okay, let's begin. The first, I handle two topics in my section. The first topic, I'll show you performance measuring tool. I created two gems for measuring performance. These are Motion Benchmark and Motion Benchmark IPS. These were created for CRuby, MRI, with other also. I just repackaged these library for Ruby Motion. So, Motion Benchmark and Motion Benchmark IPS have methods which are compatible with original libraries. Okay. Motion Benchmark can measure the time of executing the method for processing. The time will be displayed on terminal, like this picture. Very useful. And Motion Benchmark IPS can measure how many times it executes the method per second, like this picture. I measured Ruby Motion performance using these libraries. Okay. Next, second topic. I'll show you how much we've improved Ruby Motion performance. First, Method Dispatch. Method Dispatch is about the time of method calling. It means booting time of method. This is a simple call in this slide. If you select one method, which have simple content like this call. You can measure the performance of Method Dispatch. Method Dispatch is now 1.8 times faster. This performance influences almost all Ruby and Objectivity method calling. So, this performance is important. Okay, next. This is Raterals syntax for range object. Range object will be created 2.2 times faster than Ruby Motion 2.0 using Raterals syntax. Great performance. Okay, next. This is Raterals syntax for string object. String object will be created 1.6 times faster. Great. And this is string interpolation calls. It is 1.8 times faster. Raterals and interpolation are very basic syntax and very important because I think everyone using these syntax so many, many times. So, very important. Okay, next. This is string concatenation using string plus method. It is 1.8 times faster. This is an array concatenation. It is 1.5 times faster. We have improved many, many performance. Unfortunately, I can show you all of the performance in my section. So, in here, I picked up some performance in this table. Okay. I'm sure you can find Ruby Motion has great performance now. So, I will publish a table in online for more detail. Okay. Now, Ruby Motion has great performance and 2.0. And we will continue to improvement in Ruby Motion performance. If you find slow performance, please tell us, we will fix it. Thank you. I would like to point out that this is the first time Watson gives a presentation in English. So, I think he did a great job. And so, for feature number two, I would like to welcome Eloy on stage. Good morning, everybody. I'm glad to be here and I'm glad to see you all and I would like to talk to you all later on. Hopefully, all. So, for my section, we are going to talk about the Rappel, probably one of the Ruby's best friends. And while Ruby Motion is probably, has been the leader of the pack in the Objective C developer tool arena, with regards to a Rappel. We have a feature such as a view selection. It has always been just that. One code line evaluation. So, it's great to try out something, but if you have tried it out and you want to back to your code base, you have to remember to either copy paste it and well, I mean, it's annoying, you'll get all the extra syntax as well. So, it's great to try out APIs to query the current state of your application, but arguably we need something better for your application development process. Because, well, yeah, this is so last week, a simple Rappel. So, we need something better. Enter real code base reloading. With this in place, it will finally be possible to develop your application without having to quit, recompile, and relaunch your application. Just as Epic get intended. Okay, so before we get into the details, let's speak, let the demo speak a thousand words. Okay, so, since everybody works on timer applications, it's probably a good way to show it. This is one of the demo applications that comes with the Ruby sample code repository. And here I've already launched it. It's running, and here is the code for it. So, while it's running, I figured that white and blue, it's just too conformant. So, what we can do, for instance, is change some colors, flip the frames, change some colors, just save, and there you go. Oh, it's purple, but apparently not that much, that visible, so let's change that back to white in this case. There you go. Okay, so that's that. But, I mean, this is not a typical Ruby application, right, a room motion application. We're running on the project to see runtime, and there's many run loop sources going on at the same time, probably. In this case, we're going to show that by a simple NS timer, but in your case, that could be delegates coming in from, I don't know, maybe a web view, or, oh no, you don't have that on iOS, but any other type, of course. So, for instance, let's start the timer. Oh, something happened. Let's go to the terminal, and the terminal's too large. Right, so, a message was sent, timer thread, that has to be timer fired. So, because obviously, I'm a developer, and I make mistakes all the time. I just say that now to make you feel good. So, I misspelled it here. What would happen normally at runtime if this came in from a run loop source is that your application would just crash. On iOS, on the main thread, run loop, raising an exception means crash. On OS 10, it's slightly different, arguably more annoying, but this is what would happen. So, what we do is, because this is something that you will run into, is we catch all those, and in this case, it asks you, would you like to redirect this message so that I can just keep on working, or would you just like to ignore it? In this case, let's redirect it to timer fired. I'm just gonna hit enter, I don't know, it's not on the screen right now. And there it goes, it will just redirect to the right place. Okay, clearly I need to fix the UI there. Anyway, so that's running, that's nice, but now that I, let's say I changed something else, and I save again, you see it jumps back, right? Because in this case, it's getting reset in the view will appear method, but the timer is still running, and that might not be what you want. So clearly, we're doing the naive thing, we're just calling your view will appear, which will work in most cases for just the simple stuff, but if you need more, what we actually do is we define a method on all UI view controllers called remote and did reload source, and this will be called on your view controllers, and you get to do whatever custom resetting or ever you need to be able to get the best feedback loop. So if we save this, then it should just reset back to initial state, and yeah, that's pretty much the demo for, well, I mean, it's pretty clear that this should be able to get you, your application developed pretty quickly. Let's do the dance again. All right, so just a bit more on the details. Traditionally, this is what in Roo Emotion 2, this is what happened, right? So the tool chain, you hit the build command, the compiler will compile all of your source, it will tell the sim tool to launch your application, and it will set up the REPL, but that's that. So now what happens is that the sim tool will start watching all of your project files, including resource files and what have you, and any time it detects a change to any of those files, it will tell the compiler to recompile it on the fly and the sim tool will inject it into your application again. And like I showed before, that's, the arrow should have been a bit more to the left, Laurent. I guess your OCD wanted it in the center of the big thing. Yeah, right, so obviously just injecting is not enough because the application will be running and you will need some kind of way to reflect the state as you want it, so you get the Roo Emotion Did Reload source message send, and by default, that message will be implemented on all your view controllers and it will call view will appear and view did appear, which may or may not be enough for your controller. You may override it completely or call super and it receives the file names of the files that were loaded if you need to perform some reflection on that to see if that's the view controller that you want to actually work on. So to conclude, there are definitely still some corner cases, for instance, with OS X applications, some people like to develop their OS X application in running inside a sandbox, obviously, test that it will work as intended, but that means that you're not allowed to make any file system changes inside the resources directory of the application bundle, so we'll probably have to add some runtime patching of methods such as an image named, so that it actually also looks in one of the directories where it is allowed to make changes, but we expect those types of issues to be ironed out during the next month, where we'll work together with people working on real applications and give them the opportunity to give us feedback. Well, that's it. Back tomorrow. Thank you, Eloy. Okay, I know I'm going to show you the last feature that we want to show you today. And the feature number three is a new platform. I will try to speak in a microphone. All right. So the new platform, we actually thought a lot and we got a lot of feedback from you guys and we decided to implement BlackBerry support. Because BlackBerry has this huge market share and I think pretty much 90% of our customers ask for BlackBerry support. So here we go. We'll be motioned for BlackBerry. I'm not joking, by the way. No, I'm joking. Okay. So can you guess what the new platform is? Android. It's okay, it's okay. So why did we actually port to be motioned to Android? Because we already have iOS, right? Well, the reason is that Android has a much bigger market share. There are lots of people who really want to do Android applications. So I took these numbers from Google yesterday. I typed Android market share and I found these numbers. So I'm not sure if they're correct, but clearly Android is winning in a way. And this is for the smartphones and this is for the tablets. And in 2012, apparently according to this website, iOS was as a bigger market share over Android. But now it's different. iOS is shrinking, Android is growing. And this is the number from last year. So maybe this year it's gonna be different. But clearly, there is some interest in writing applications for Android. And right now you have to write applications in Java using Eclipse and writing XML files. You see where I'm coming. So and with RubyMotion 3.0, you can finally write full-fledged Android apps in Ruby. So you don't have to use Java. Okay, so this is Hello World in Java. So it's actually not that bad. I think it's better than Objective C, honestly. But so we create an activity, which is a class in the list from Android App Activity. We have this method on create that you have to overwrite to actually customize the user interface. And here we actually create a text view. We set the text property of the text view to Hello World. And then we assign the text view as the content view of the activity. All right, this is a very simple Hello World. You can actually shrink the constant lookups in Java by importing the packages. But here I wanted to make it as short as possible. And this is the same in RubyMotion. And this is, no, Java, Ruby, Java, Ruby. So actually, as you can see, you can type text equal instead of set text, the same as in iOS. And you can just create classes and inherit it from Android classes, Java classes, exactly as in iOS, like you would inherit from Objective C classes. What's else? Yeah, you can build a literal string here, Hello World, and pass it to Android, and it works. Just like in iOS, Reversion for iOS, or an OS then. But anyway, I'm going to show you very quickly how it works. So of course, you get to use a simple command line interface, actually the exact same command line interface that you use to build iPhone and iPad and Mac apps. So to create a new project, you type motion create dash dash template Android, then the name of the project is going to create a directory with a bunch of files in it. So it will be exactly the same, it's exactly the same as if you already use RubyMotion, honestly, same experience. So we have a reg file by default, and in the reg file, we have a bunch of tasks already, pretty fine. So obviously the default task is going to compile the application and run it in the Android emulator, right here. But it takes a lot of time, like you don't even imagine, like honestly, you need to be very patient if you want to use the Android emulator. So we really recommend to run on the device. If you have an Android device, you just plug it, and actually you don't need to do anything, you don't need to get a certificate or a provisioning profile. Android is awesome. So you just plug it and type regdevice. Honestly, that's all you have to do. Oh, I'm sorry, you have to enable debugging on the device. So that's just a three step, but it's very easy. Yeah, Android is very easy for developers. So you type regdevice, and then it starts on the device. Here it's Nexus 7, it's my main Android machine. But it works on, we actually tried on Samsung phones, and there's a reason why it wouldn't work as well. And it runs right away. It actually installs the application, then it runs, it starts the main intent of your activity. I'm trying to get into Android programming, but I think that's what it does. And then you actually, it starts logging messages, and all the messages logged by the application will actually be in your terminal. So once you're ready, and you want to ship your Android app to the world, you can type, break, release. It's going to build the application. But then at one point, it's going to ask for the code signing key store that should be used to actually code sign the APK. And for that, you actually need to generate a key store file yourself. But the great thing is that you don't have to add to do that with Google. You can generate the key store on your machine, and then save it somewhere. They're probably on a safe place, and then just use it. So you don't have to get the certificate from Google either. So it's actually very easy. And once you do that, you type the password, and then you get an APK file that you can just give to people or give to Google. And for a hello world, this is what you get. So it's about half a megabyte. We actually work a lot to get it. Someone is calling you, Colin. I'm not going to take the call, right? Okay, let's keep on. So you actually get an APK file. An APK file is more or less a zip archive. But here, as you can see, it's half a megabyte, which is great. There is actually a limit on the IPK size. I'm a bit stressed out, so I don't remember. I think it's 10 megabyte or 15 megabyte. And if you go over that, you need to ask Google permission to have virtual disks attach to your application. So it's kind of weird. But here it's half a megabyte by default. So if you start adding code, it should actually not grow that fast. All the big files will actually be resource files. So it's great. There are actually many platforms that do Android development by default. You have a five megabyte application. So this is very important. And obviously, you keep to use your favorite editor. That's one of the main interests of RubyMotion, right?  It's way worse than Xcode, you see? X, compared to, Eclipse compared to Xcode is like, I don't know, it's like hell and something before hell, I'm not sure. So I actually to show you how bad Eclipse is. Two days ago, I opened an Android project that I created a few months ago. I just used Eclipse and did open project and this is what I got. And I have all this red stuff in front of each line and I have no idea how to think that I tried and it says, I can't find the package. And they say, okay. And it's really, really weird. Honestly, I have no idea how Eclipse works.  I know people are actually like it, but it's really hard. It's also very slow. So obviously, I prefer to use Vim to write apps. And you can use any text editor which will be motion for Android. And actually, if your editor supports CTAX, you will have auto-completion or Java APIs. And I have only tried it with Vim because I think everyone should be using Vim, but if you have enough memory on your computer, you can try Emacs. I don't have enough memory on my machine. I have only four gigabytes, so I can try Emacs. But on Vim, it actually works nice. And this is just that, oh, this is the timer app. It's written 400, so I'm going to show it to you after. And one of the things also great with remote motion for Android is that you don't have to write XML files. If you have done a little bit of Android programming, it's all about XML. Like, it's an XML file for the project, XML file for the resources, XML file for the strings. It's like insanely in XML, like you live in XML. And here, you can actually write the user interface in code, so no need to use XML files for layouts. The project file is actually a rake file, so you need to use XML files for the Android manifest. The Android manifest is generated for you. So the idea is really to not use XML and just use Ruby and your favorite editor. Thank you. But this said, if you want to use XML, you can. There is nothing that prevents you. So in Ruby Emotion Project, Ruby Emotion for Android Project, there is a resource directory where you have all these application-level resource files, and you can create, I think, it's a string sub-directory and put your XML files there, and you can create a layout sub-directory and put your layout XML files there. So you can do the same thing as Google recommends you, but honestly, we recommend to do that in code. A little bit like for iOS and OS X, we don't recommend to use interface builder. It's the same here. And the great thing is that we can finally share code between iOS, OS X and Android, because it all uses the same language, Ruby. So obviously, if you write an iPhone app and an Android app, the user interface is going to be platform-specific so that would be this very specific code that you write for, for example, Android activities and UIV controllers. But the rest of the code, the backend code, is actually portable. There is nothing iOS about it. And you can just, if your architecture project well enough, you can share code between all these three platforms. And I think this is going to be a very big deal. And now let's try a demo. And I'm going to pray the gods because this is very hard. Okay. Now what? I think I'm going to mirror all the display. It's gonna be better. You got a message. Okay, it's much better. So let's go here. Can you read the font? I'm gonna make it a bit bigger. Okay, so let's go on TMP and create a new Android project.  So I can get to arrow and I can type regdevice. And here I actually have a Colin's phone connected to my computer. So if I type regdevice, oh, I forgot. That's a good thing. Because I need to set the reg file. I need to point the reg file to the Android SDK and SDK. So this is only because I use this very early version of RubyMotion. In the future, when you install it, you will provide it at installation time. And then it's all good for your project. So yeah, I just have to provide the SDK pass and the SDK pass. Anyway, I do that, type regdevice. It builds my application. It signs it. It installs it on the Colin's machine and here we go. It's only right here, but actually, I can show it here. Here we go. Can you see that? Okay, here we are using a BBQ screen, barbecue screen, I guess. It's like an Android app that you can use to project the content of your Android device on your Mac. So we use it as some sort of an emulator because the emulator is so slow and here it's fast. So I'm gonna put the device here. So yeah, by default, you have just a low and a black screen. So I'm gonna type something there. So if I do control C, it quits the application. Now I can edit it. And so by default, you can see we have our main activity and we have our own create method, but we do simply nothing, we just call super. And now I'm going to do something. I'm going to create a text view. And each widget that you create in Android, you have to provide a reference to the activity. I think it's called a bundle. Honestly, I'm learning on Android the hard way, so then you can set the text property to something and I will say, hello. Okay, oops, let's close the string. Then I can type serve.contentView, assign it to my label. And we should be good to go. So I can go back here and type regdevice. We don't have code reloading yet for Android while working on it. It starts the app and it's actually not connected. You see, that's the demo code in action. It's actually, the message is actually on the screen, but it's a program with the Android app to project it on the Mac. Oh, now it's working. Okay. Okay, so we just had to reset the app. So I'm going to start it again, like here. Okay, here we go. Can see the message here? Hello, one, one, one. So it's actually working. And actually, again, if you want, I can go there.  I mean, on all the home button. Okay, oh, no, I don't want to take a picture. I think Android is great for developers, but for users, it's, you know what? I'm not going to show you that because I'm afraid it will break the demo. But anyway, yeah, RubyMotion for Android app, they start as fast as Java apps. There is no thing required. Of course, you expect that, but if you have tried to use a Roboto, which is a Ruby for Android, you might see it takes like five seconds to bootstrap. And here it's just as fast as Java apps. So now I would like to show you other, a few other samples that I've been working on. Okay, so here we have our hello, a very basic hello application. You can type break device to shoot to you. And this is the same hello sample that we have for iOS. So it shows hello, RubyMotion, then you can click, right? And if you drag, it say, oh my God, I need, just sure, okay, very simple. And I'm going to show you the source code. We have just one file for this sample. Here we create our text. We actually set a bigger text size. It's because I use an Android Nexus 7 at home, which is a tablet. So I need a bigger font. And here on Colin's phone, it looks bigger. So, yeah, you have a lot of resolution screens in Android. So you need to actually, it's not as easy as in iOS, I think. You need to make sure that you don't build your eyes that are really, that are optimized for all the platforms that you target. But anyway, here I have this method, dispatch touch event, which is another method of the activity class that you can overwrite. And then you get callbacks when the user actually touches the main content view of your activity. And here I actually check if it's action hop, which means that we actually hop the finger from a touch event. I can just increase the counter, set the text. And what do I do here? I set the background color to black. I ask because if we actually move, I set the text to, oh my God. Here I actually set the text to a completely random color. So as you can see, the rant method is actually implemented for notion 400. Anyway, that's a very simple app. I'm gonna show you a few more. Or the paint went, oh, maybe the timer. Yeah, let's do for the timer. Boom, here I have a timer up. And I can actually click here and start. Stop, start, stop, wow. Now you can make, now you can make money. Oh, no, no, no, keep it that way. So yeah, timer up, very simple. Let's see the source code quickly. I have a button listener, which is some sort of a special class that we actually, that you actually pass to a button and that will be used. The onclick method of this class will actually be called when the button is tapped. Anyway, then I have a timer task, which is an object that you pass to an Android timer. And here the run method will be called. Anyway, here I have my main activity. I have my label somewhere on screen. Then I have my button somewhere on screen. And here I actually use an Android widget linear layout. Which is in Android, you can actually build using interfaces based on layouts. And you have vertical layouts, horizontal layouts, grid layouts. So it's very similar to Java something, Java Swing, Java Swing, I think. Yeah, I done some Java programming at school. It was AWS abstract window toolkit. Yeah, they actually take the same, I think it's very similar. So, and this is actually something I like because in iOS, you don't have that. You have to build your own packing view. Well, now you have auto layout, but this is actually very nice. So here you can build your, I actually have a vertical layout view and then I have two views that are packed vertically. I have my label and my button. And here I set the gravity to center horizontal which means that the view will be centered horizontally. Anyway, simple, I have a button that toggles my timer. Here I start my timer. Anyway, that's very simple. Oh, there is one thing that's actually interesting that I wanted to point to. Here at the beginning, I create an Android OS handler object. The reason is that if you use Android timers, your callback may actually be called from another thread, not the main thread. And if you want in this callback to change the user interface here, I actually want to set a new value for my label. I want to increase the timer. I have to do that from the main thread. So what I do here is that here, when the on create meta is called, I know it's the main thread. So I create my Android OS handler object and I store it in an instance variable. Then here, here when my timer runs, I actually use the post method and I pass a block and I know that this block will actually be executed inside the main thread. So you can actually see Android underers a little bit like GCD. They are not really the same but they can actually send tasks from one thread to the other. And what's great is that normally you're supposed to pass an object that implements the renewable interface but in remote motion for Android, procs implement renewable. So you can just pass a proc here. So this is nice, right? You can just do the lambda funky syntax and you cannot do that in Java. You have to create an anonymous class and this is insane. Anyway, simple app, let's see. Or the paint one is funny. I'm just going to show you, I'm not going to show you the source code for this one but it's a simple app and you can start drawing lines and each line has a different color. Then you have a clear button here that removes the screen. Actually, I can just show you quickly, yeah. We have our own touch event here. Actually, this one is the big deal. The underer method on the very, here we actually subclass Android view view. Android view is a package and view is the class in the package. So here in Ruby version for Android, you need to provide the whole thing. Android view view, that's made some weird but that's the way it is. You overwrite on draw and then you can, here we draw on the canvas all the passes that we have to generate when the on touch event method is called. And before showing the final one, I'm going to show you this one. Web view demo is a nice sample that shows you that how you can integrate a web view inside an Android app and then provide and expose a Ruby objects that web view. So here I have my SQL, this is a web view. This is HTML and CSS and JavaScript. And here if I click the, click me, I think it's a element, you click. And as you can see, I have a message here from the terminal. The message is actually printed the terminal then routed back to my Mac. And if I show you the source code, let's see, here we create a web view. Then we actually specify here the demo JavaScript interface as for the web view. And demo JavaScript interface is actually right here. And it has this click on Android method. And this method will go from JavaScript. And the thing is that since Android API level 18, which I think is KitKat, or I don't know, you have to provide a special annotation to the methods that would be called from JavaScript. This is for security reasons. Actually before API level 14, all the methods were exposed to JavaScript and there were huge security vulnerabilities like Android was very insecure. And then Google changes mine and you need to provide an annotation. And so in Java, you can actually provide annotations to a lot of things, at least methods and classes, pretty more. And annotations in Java are just objects. So here we actually extend the compiler, the remote and compiler that, so that you can actually provide annotations. And here I provide the Android, WebKit, JavaScript interface annotation to my click on Android method. And if I show you the assets file, I actually have my demo HTML. And here, here as you can see, I, when you click the, when you actually hit the A HTML element, I'm sure it's called, it's going to call a click on Android. And it's going to call our Ruby method, which is great, right? I don't know. Anyway, and finally, I'm going to show you a funny app that I wrote actually a few days ago. It's called conference and it's actually an application for this conference. So it's a schedule application. It's really not as good as the iPhone version because I'm bad at design and I also learning Android the hard way. But basically here we have a list view. It's actually a custom, it's actually a list view with a custom adapter. The adapter is what provides the data and look and feel for each row. So here we have a custom one because we have, as you can see, we have the time for each session, which is centered vertically, then on the right we have the title and then a description of the speakers. Oh, and the schedule is not up to date, by the way. We made last adjustments yesterday, so don't read it too much. But we have a list here. And here we have this menu, this drawer. And this drawer actually is, this is not code that comes from with Android SDK. It's actually code written by Google inside what they call an extra package. So this extra library, this GAR, this jar, it ships with Android, but it's not part of the built-in Android APIs. So here if you want to use it, you need to vendor it. So in Ruby Motion for Android you can actually vendor third-party Java libraries. And here we actually vendor this tiny library written by Google who's not part of Android. So it works exactly as you would expect in Java. So I can see the day two, I can see the venue, and this is actually interesting. It actually shows the venue in Google Maps. And believe me, it took me a day to do that because you don't have a map view in Android by default. You need to use the Google Play Services library. So it's a third-party library written by Google. So you need to vendor it, then you need to initialize all the map view stuff. You need to configure Android Manifest file to have all the permissions required for your app to actually connect to the Google Play something. Then you need to get an API key from Google to use Google Maps. So it's not that easy, but as you can see, it works fine in Ruby Motion. So all the steps that are required normally in Java, you can do that in Ruby Motion. And I have a sponsor here, very simple. Oh, actually if you click on the sponsor, it's gonna open the URL in Chrome. So that's called an intent, I think in Android. You can correct me if I'm wrong. But the great thing is that here, if I actually go back, it goes back to my app. So there is some sort of navigation thing going on here. And then we have the above screen here. Very simple. And I'm not going to show you the source code because it's not as simple as the other samples, but it will be on GitHub later today. Okay, this is all for the demos. So I can actually go back here. Okay, so thank you. So how does it work actually? That's a good question, right? So I'm gonna spend the last part of the talk explaining how it's implemented. So first let's talk about the runtime. And the runtime is Ruby. And more specifically, it's a brand new implementation of Ruby. So it's new code. We didn't actually take any code from RubyMotion for Objective-C. I actually wanted that on Jelly, but then I realized that it wouldn't work. Simply because we are trying to make the best implementation of Ruby for Android development. And so there is pretty much nothing we can take from RubyMotion for iOS. So it's brand new. So I told myself that I would never write Ruby again, and I... Anyway, and the first thing is that it has a unified object model with Java. It is exactly the same ID as we implemented RubyMotion for Objective-C, the Objective-C runtime. So basically, we have RubyMotion and Java, and they are all running on the Dell VQtune machine on Android. And here with RubyMotion, we actually use the Java native interface to actually reimplement the entire Ruby object model on top of the same runtime that's going to power Java applications. So, and of course, on top of that, we give the entire set of Android APIs that are written in Java. So from RubyMotion, you can access all the Android APIs written in Java that as you would do in actual Java code. The runtime model is really unified. More specifically, Ruby classes are always Java classes. Ruby methods are always Java methods. Ruby objects are always Java objects. And Ruby exceptions are always Java exceptions. And this is Versa. You can take a Java class, and it will look exactly as if it was written in Ruby. When you get a Java object from a Java API, you can call methods on it. It will work. Same runtime. And exactly the same way we implemented RubyMotion for Objective-C. This is obviously good for performance because there is no bridging involved here. Also, the built-in Ruby classes have been rewritten on top of core Java classes. Again, exactly like RubyMotion for Objective-C.  It's not the full list, but string, it's actually based on Java LAR care sequence, which is an interface, not a class, but with our string class, which you implement this protocol, this interface, sorry.  And there are lots of APIs in Android that expect Java LAR care sequence. One of them is actually the setText method on our TextView class. If you remember in my demo, I typed label.text equal a string. And that method expect Java LAR care sequence. So, it works. No conversion. Arrays are actually Java-util-array list. Ash are actually Java-util-ash-map. The numeric types are based on the built-in integer and numeric classes of Java. The big name is actually a Java math big integer. So, Java already has a big name class, so we use it, why not? Regular expressions are based on the Java regular expressions. So, a regapse in RubyMotion 400 is a Java-util regapse pattern. And the match object is a Java-util regapse result or something, I don't remember. But the great thing about regular expressions in 400 is that they use the same library that we actually use in RubyMotion for Objective-C. It's called ICU. And so, it behaves more or less the same way. So, they won't be any major differences. As far as I know, they shouldn't be any. And finally, RubyMotion threads are based on Java lang thread. Threads in, at least in Android, are fully Pusik threads. They run completely re-entrantly. They're fully concurrent. And the runtime in RubyMotion 400 is also fully re-entrant. So, there is no global lock. There is nothing that prevents you from having two threads running at the same time. It is very similar to a red notion for Objective-C. And this one is a bit tricky. We have memory management. It's completely automated. And it's completely delegated to the Dalvik return machine. But the great thing is that Dalvik has a great garbage collector. It is way better than what iOS has, honestly. It's like day and night. First, it's generational. So, it does a few, it does many passes. And you try to collect the young Objects quicker than all their Objects. It's fully concurrent. The GC runs on separate threads. So, for example, each Objects can actually be finalized in completely other threads than the threads that were actually created. So, it's actually very, very nice. And each thread has a per thread allocation pool. So, when you do allocations, it's not actually sending messages to another thread. So, it's relatively fast. So, allocations are actually very nice. I forgot to mention that, but the Android GC also supports, also can obviously resolve retained cycles or cyclic references. That's obviously a fact because they are a real GC. And they are basically two, they are more than two types, but they are mainly two type of references that the runtime creates. The remote runtime. The local references are created by default. So, every time you call a method and that method returns an Object, the runtime is going to return a local reference to it. However, if you actually explicitly set a strong relationship between an Object and another, as an example, if you create an instance variable, this is going to create a global reference. But global references are done explicitly. They are done by you. You actually know when you actually create a global references. The description of local references is determined at copine time, as I'm going to show you in the next slide. Basically, the compiler determines where local references are no longer needed. However, the description of global references is done at runtime. So, it's really, for example, if you have an instance variable and you set this instance variable to a new value, the order value, which is a global reference, will be destroyed. So, it's more like a runtime thing. Yeah, as an example, x equal object.new is a local reference and at x equal object.new is a global reference. Obviously, when an object doesn't have any reference to it, it is promoted for garbage collection and it can die as soon as possible. And since the GC is actually a completely concurrent, it can die right now because it can happen on a thread running next to the thread you're currently using. So, let's take a very quick example. I have a full method with a few lines. So, let's try the first line. I create, I do x equal object.new and this is going to create an object x. And this is a local reference to my object. Then I do y equal object.new and this is going to create an object y. Again, this is a local reference. Now, I do at z equal object.new and this is going to create an at z object but this is a global reference here. Now, actually at the end of this line, my object y dies. We actually destroy the local reference, y, exactly. Because if you look at the rest of the method, the y local variable is not used anymore. So, the compiler knows, hey, we don't need this object anymore. So, we just destroy the local reference and at this point, the object can be destroyed anytime. At least it doesn't have any reference attached to it anymore. Then we can call the bar method. The bar method again, because we like bars. Then we can print the value of x. So, it's going to print something and at the end of this call, obviously, as you can expect, x dies. We destroy the local reference because at the end of this method, we don't use x anymore. And the global reference, obviously, remains alive. And as long as the object remains alive or object at z will remain alive. So, I hope that was clear, but anyway, we have documentation for it. So, now I'm going to just talk quickly about the compiler and the compiler is based on LVM, obviously. So, the Ruby files are actually statically compiled into machine code. In Ruby Motion 408 app, we don't use Java at all. We compile straight to ARM code. Very similar to iOS and OSN applications are compiled. So, this is straight machine code. As an example, if we have our main activity with one method on create, it's going to generate this LVM instant representation. We actually have two functions. The first one is going to be as you have a message. It's actually your wife. It's okay. The first one is actually the implementation of the on create method. So, this is the Ruby code that will be compiled into machine code, pure Ruby. And then we generate a second function here. It's at 2881. It's actually a unique number. We don't control that. And that method will actually be the one that will be inserted into the Java runtime. So, we use GNI for that. GNI provides you a way to register native methods. And this function actually complies to the GNI expected interface. The first argument is actually a GNI environment. And the other ones are the Java arguments. So, we need to convert some of the types from Java to Ruby. Actually, most of the time, this OCVAR to RVAR will just pass away the pointer because there is no conversion needed. Sometimes, we might have to convert certain types. Then we can invoke our method defined earlier and then we can just rescue exceptions and do things. But basically, what I would like to show you is that the Ruby stuff is always compiled into machine code and registered into the Java runtime. And this is, by the way, the exact same way we do our notion for Objective-C again. Very similar. The compiler will also generate decks by code for Java interface, for classes interfaces. The reason is that in Android, while at least in the GNI implementation of Android, it is not allowed to create classes at runtime. They don't implement the full spec of the GNI specification. So, you cannot create classes at runtime, sadly. So, for that, we need to create the decks by code to actually create the classes. But the methods are truly native. But the class structure is decks by code. So, as an example, here we have a new class with two methods, onCreate and onTouch. Sorry, dispatchTouch, even. And we're going to generate this decks by code. I forgot to mention, decks by code is the by code we read at runtime by Dalvik. And here, we actually have two virtual methods. As you can see, we have dispatchTouch, even, and onCreate. And we just define, expose them. And before that, we actually expose our main activity. And we say that it is a superclass of Android app activity. All this stuff is created by the compiler for you. If you look carefully, you will see that the access of each virtual method, it's publicNative. Native means that the code is not there. The code is not by code. The code is machine code somewhere else. We emit, the compiler emits dwarf metadata, which is very specific support to provide proper debugging information. So, as an example, if you dwarf dump the library that we generate, you will see a bunch of information. You will see that we have file and source line information right there. So, if you have an app that creates an exception at runtime like we call food and food call does not exist, you will get an exception and you will get the proper file and line information, which is something you expect, but I had to write it. And finally, a very quick talk about the build system. The build system attacks all the RB files and all the resource files and generate an APK for you. So, if we look inside the APK, it's actually a zip archive. So, you can just unzip it and look what's inside.  The first one is lippelow.so. It's a share library that contains both the source code, sorry, the machine code of all your RB files and also the machine code for the RubyMotionRuntime. So, it's all zip into a share library. And RubyMotionFrontreadApps are using NDK, the native development kit that allows you to have a machine code and Java code at the same time. And this code would just be loaded at runtime. Then you have an Android manifest.xml file, which is the project's configuration or, yeah, project configuration. And it is very similar to the info.plist file that you have in Objective C project. And this file is actually generated based on values in your REC file. So, you don't actually create it. It's done for you. Then you have the classes.dex, which is the DEX bytecode for the class structures of your program. So, again, it only contains the class interface, not the real code. The real code is in the lippelow.so library. Then you have a resource directory where all the resource files of your app will actually be there. And you can have both raw resources, like assets, and then application-level resources, like all the XML files I was looking about. You can have both of them in the project. And the build system is smart enough to do that. And you also generate the famous r.java class so that you can actually access these resources from the code. That's an 100th thing, but it's there. And finally, there is meta-inf directory, which contains the code signing information for your app. So, if you actually create a release build, it will contain your public key, the public key of your key store that you generated. And there is something I forgot to mention is that the conference app I showed you a few minutes ago, it's actually on the Google Play Store. I submitted it and they approved it in two, two, or three hours. Actually, they don't even approve things. I think it just automated. So, this is another great thing about Android. You can, well, a great thing and a bad thing, I guess, but the app is there. So, if you have an Android device, you can try it. Now, you will see that it's two megabyte. It's actually because it bundles the Google Play Services library, which is already two megabytes. So, the application is not that fat. It's just that library that we ship. This is for the maps view, by the way. It runs on pretty much all the Android devices I could find, which is my Nexus 7 tablet and Colin's phone. I'm not sure if it's gonna run on all the Android devices. Actually, when you submit this, it says that you have, you can generate 200 devices, anyway. So, let's recap. Remotion 3.0, with performance improvements, with faster development cycles, thanks to code reloading, and with Android support. So, you can finally create Android apps in Ruby. You can share code between iOS, iOS 10, and Android apps, and you use the same experience. So, no Eclipse on Android, no Xcode on Objective-C. Use the same development experience. So, this is a preview of Remotion 3.0. This is a sneak peek. The only reason we are showing it to you today is because we need your help to actually make sure we can deliver it to everyone. So, we cannot give Remotion 3.0 to everyone at this point. It's still in early development, and we really need help from the community, which comes to my last slide. We need you. So, starting from today, actually a little bit further in the day, I will do a blog post on our post, and we actually ask for interested developers to actually try early builds of Remotion 3.0. And we really need your help because especially for the Android support, the Android support is brand new. It's a new implementation of Ruby. And when we ship Remotion for iOS, it was already based on Mac Ruby, something I work on for five years. So, it was well-tested and solid. This is not solid. This is brand new. So, we really need your help. And we're looking for a bunch of profiles. We're looking for people with Gems that may exist in Android. So, I'm thinking of you, MotionKid, Babarap, Promotion, all the stuff that may make sense on Android, and you want to port it. And also, if you have applications on the Apple App Store, and would like to port it to Android, and would like to try early builds, you're welcome. And we really need people who are able to deal with frustration and pain, because there will be bugs. And we will need you guys to report us feedback and make sure we can test early builds. And hopefully we can deliver Ruby Motion 3.0 to everyone later this year. But we will actually ship it when it's good enough for us. And that's all. Thank you very much.