Okay So for those of you don't know me. This is my name. This is where you can get me on on Twitter at Nick's. I'm a Rouse developer long-term Rouse developer. I'm from Wellington in New Zealand and I'm now obviously living in London I'm working on this. This is called gelato.io. It's my startup It's a tool for Having really cool API documentation. So if you've got an API you want to get some more developers onto it You want to make your docs really cool come and see me and I'll and I'll get you in on the better of that So you might have noticed that I have a bit of an accent and I'm not from here completely different to Aaron's accent, obviously We we actually came the long way here So we went like this and all the way from Shanghai to London. We were actually on a train So apart from a little sort of gap in the Baltic States Where are the EU is apparently still building the tracks makes it hard to catch trains? So yeah, I feel like we I know a decent amount about trains and journey So I thought I would take you on a bit of a train journey today So this is all about the things I've learned and the problems I've encountered and Things you can do when you're building something with in the JS and so that's my beautiful title slide The alternate title for my presentation. Can you tell I like titles? I've had three title slides is how I learned to stop worrying and love the hamster Speaking of which I'm obviously pretty new to Ember. I've only been doing it since about October last year So I might get stuff wrong In fact, I probably will get stuff wrong if I do please let me know afterwards because that's how I learn new things So like I said, we're going on a bit of a train journey So I thought I'd use something that you guys are probably all familiar with but like I really love the underground But everybody here is like this is the worst thing ever So we've got five stops First off we're going to talk about getting on the right train obviously pretty important. Then we're going to talk about getting set up We're going to talk about some translation difficulties dealing with isolation and insanity and then the Zen of Ember The train is now ready to depart. Please mind the closing doors So the first ever any successful train journey is obviously getting on the right train So I was building my startup I knew what I was going to build and I knew that this was the kind of UI I needed This is what a modern web application looks like it's got this dynamic responsive UI And yeah, I also knew that there are a bunch of different ways I could get this heaps of different JavaScript frameworks in fact almost too many We kind of had this I had this sort of paradox of choice. So this analysis paralysis effect where you know There were so many good options, which one was I going to pick? One thing to keep in mind is that it's not just about going fast. I love this here So this and the slide I showed before is a picture from the Shanghai Monorail And I love the Shanghai Monorail not just because it's the world's fastest regular commuter train And I got to fly at four hundred and thirty kilometers an hour along magnets But also because it's a really really awesome development metaphor You see that the Shanghai Monorail leaves from Shanghai Pudong Airport and goes to half way to wherever you want to go At which point you have to get off get on to the regular slow crammed subway and get into Shanghai proper So it's a really good reminder that going fast is all well and good But where are you ending up? What's the problem you're solving? What's going to matter to your customers and what's going to make you money? So obviously for me I had my problem. I knew what I was building. I was building July 2. I so I knew I needed this Dynamic responsive UI looked on the ember website and lo and behold the first words are and it's all for ambitious web applications Great that sounds like me. I'm definitely building an ambitious web application I need to make sure that I'm pragmatic not idealistic because it's a startup. It's just me I don't have a whole lot of money I can't spend three months spending my wheels trying to get the right dependency injection framework going and so There you go. The next line on the on the ember.js homepage. It's more productive out of the box. Excellent sounds like me And then the last thing is well, basically I'm dumb. I need lots of hand-holding I need to get up to speed and need a nice easy ramp up And so again guides.emba.com is a really really great resource and there are a lot of tutorials out there And a really really great community. So yes, great This actually happened after I picked ember as a language and it kind of reinforced my decision I was initially sort of worried about the Google ability of ember if you will excuse the terrible pun But then you heard I started talking about this idea of stability without stagnation Which I really like, you know, I've got a business to to make customers. I've got to make money So I don't want to have to go rewrite everything just because some programmer somewhere decided that there was a slightly better version of Ivory Tower and now I should have to write everything in a new language This is what I was doing. This is what my JavaScript code used to look like admittedly It would get a bit more complex every so often and it would start to become a copy script class but effectively what I was doing is I was Listening for direct DOM events on DOM elements and going and updating Another DOM element of the same DOM element based on those so it was kind of an if this then that or this or do the other thing You know this kind of procedural thinking So this here, this is the handlebars you need to give you that dynamic response of UI example I showed you earlier and this is when I when I wrote this for the first time This is when I knew that I had the right tool for my job So it was much more declarative much more about here's what you need to give me the UI I want rather than in this case do this but do this but only if it's a you know If it's a rainy Tuesday, and I'm wearing a blue t-shirt do that It's much more about you're declaring what your application looks like All right, so great. We're on the right train. We want to get set up. This is a train in Vietnam So I'm a pretty stuck in my ways rails developer. I I knew what I wanted I knew the tried and true so what do you do when you want something new as a rails developer you go and find a gem You go install the gem and then so of course I ended up with ember rails Now ember rails is a really nice gem.  I had issues with getting the asset pipeline to work at all or in a performant way I had deploy problems that testing set up was either non-existent or I really couldn't work it out And there was a distinct like the main issue for me was that was a lack of standardization There was no obvious place for all of my components to go. There was no obvious place for all of my controllers to go So what I did is I went along to the ember linen project nights and in And I think multiple someone's there suggested that I jump on to ember CLI. Thank you for that Jumping on the ember CLI is like getting on to one of these sweet bullet trains He's got like 250 kilometers an hour and you wouldn't notice they're as smooth as butter. It's really cool Suddenly everything made sense like everything had a place. I knew I had my bearings I had testing baked in I even had an ember command And this is brilliant coming from rails because I was used to having that rails command To do everything for me used used to having the God command. So it was nice to be able to do in the s in the G Ember test and just have that working First issue I ran into Ember CLI ships with its own server and then you've obviously got your rail server with them You're the embassy li server runs by default on port 4200 and your rail servers running on port 3000 So you're technically speaking cross origin. So now you've got to go and Set up all the cross origin resource sharing headers and do a whole bunch of really boring stuff to try and actually get Two apps that are both running on your local machine talking to one another So I did this I just chucked in the rack reverse proxy gem and effectively just transparently proxied anything Beyond the slash app and in my rails application just Transparenly proxied that on to port 4200. So yay as far as they're concerned. They're both on the same post no cause problems You only have to do that for development because it's just like a couple of lines of engine xconfig to do that in production And you've got a nice compiled slug. So yeah, if anybody wants to steal that, I'll probably put the slides up Another thing that I really wish I'd kind of understood better when I got into ember CLI was ES6 modules Ember CLI makes really really heavy use of these and I just kind of thought I can figure it out So this here is a copy verbatim from this blog post by someone a lot smarter than me He's one of the founders of discourse. So you should go and read that blog post if you if you're like me And you didn't don't really get ES6 modules. It's worth understanding one of the things that again didn't seem to penetrate for me was that Was that the ES6 Resolver of sorry the ember CLI resolver does some clever things with the paths So if you've got a mix in an app mix ins it will do your app name slash mix in slash super mix in so you your app Will map your app name will map on to the slash app folder So initially that's confusing but then you're like, oh man, this is really cool If I want to import something from my app, I just use my app's name It works for ember CLI add-ons as well So if you happen to be using the ember CLI accounting add-on accounting.js add-ons everybody say thanks to Miguel You can import functions from there just using the name of the add-ons You can just do accounting slash format money really really cool to have that resolver around to do all the path munging or that rubbish for you Another sort of part of the ember CLI story, which I think is potentially a little bit undercooked or maybe still working on Is installing third-party libraries? I think I've managed to figure out a way that this works for mostly everything So we'll see we'll go through my sort of flowchart and we'll see what you all think So the first thing I do if I want to install a third-party thing is I check ember add-ons comm see if somebody's been really nice And made an embassy a laishim for me if there is it's really easy to install it ember install add-on Namely add-on bam. You're done jobs done There's no ember add-on. Okay. Well, hopefully there's going to be an NPM package Most modern things have an NPM package somewhere and you can install that really easily NPM is still whatever the library is called Don't forget the dash dash save dev I had no idea what that meant initially and then I realized that what that does is it persists your your third-party library version everything to your package.json in a similar way to your gem file or Kind of like a cross between gem file and gem file lock And if you don't have that everything is going to break on production on other people's machines because it's not going to have any of your dependencies No NPM package. There might be a bowel one So for a bowel package you can look on bowel.io or I don't really like this search thing So I just look for a bowel.json and to be fair most things have that Installing a bowel package is pretty easy similar to installing an NPM package Again, don't forget that dash dash save dev And then the one other step you need to do is you need to make sure that broccoli knows about it So you need to pop it into your brock file.js Normally in the bowel package There's an AMD or required js compatible file that's been built in like a slash disk directory That's called like you know dist everything that's in this third-party package.js and you can just import that file and In the CLA will work its magic and so you can actually use it Last resort, what if there's no bowel package? This is some like jQuery plugin that's been gathering dust on GitHub for six years You still can use it with in the CLA You just slap it into slash vendor and then same thing you would use you import it in your brock file So just import vendor your lib, whatever you might also have to add it to js and RCs If it's a global like on window so that your test stop complaining This is our mascot. He's a panda called Mr. Pung from Hong Kong Sitting on one of those bullet trains kind of contemplating is what I was going for there Seems you can't see his face. It's hard to tell One thing that I'm still like kind of trying to work out is asset sharing So I have the rails app serves the log in log out forms or that rubbish and the ember app does the application itself They obviously both have buttons the buttons have the same CSS I want to share them should I be serving that CSS through the asset pipeline with sprockets Should I be serving that CSS through broccoli and through the ember asset pipeline? How do I share those things around and so I'm interested if somebody has a solution to that? Maybe they can tell me about it and I can steal that All right, third stop Dealing with translation difficulties. So for those of you who don't read Cyrillic. This is a Starbucks coffee in Moscow And it's fairly easy to get your rails app spitting out JSON that ember can understand Most people tend to use active model serializers They've recently embarked on like a pretty ambitious rewrite and I think that's sort of dovetailing in with the JSON API stuff So my suggestion is to stick with the 08 stable tag for at least now that's worked really well for me This is the config you need to put into your serializer classes to have it generate JSON that ember can understand You need to tell it to embed IDs and include models So this is the JSON that you get out basically So if you have a developer and a developer has many meet-ups What will happen is because you've told it to include IDs developer will end up with a meet-up IDs Property which is an array of IDs obviously and because you've told it include true It will side load the meet-ups for you which means that you get all the meet-up information without having to do a second Ajax request. So that's really really cool Another problem I hit and this was kind of an issue of my own doing I decided that I was going to use these Instagram IDs Which are really really cool. They are sort of these pseudo time stamp shard based unique IDs That you can generate with a postgres stored procedure I won't talk too much about them because the blog post is really cool when it's with Chahia So basically the idea behind them is it's kind of the same as UU IDs You don't want to leak the information, you know users slash 63 means you've probably got 63 users if the next one is user 64 Not entirely necessary, but kind of cool worth noting that they are 64-bit integers and by default Active Model Serializer will send them through in JSON as integers and we all know that JavaScript does not deal with 64-bit integers Very nicely. In fact, it doesn't and the 53-bit integer you get back instead The supplementary integer it looks sort of kind of like this. So initially you're kind of thinking, huh That's really weird. Why is that ID not found? And then you realize 64 bit So this is the monkey patch that I use for Active Model Serializer to get it to treat everything as a string ID So it's pretty simple. It's Ruby, you know monkey patch bust up in the class tell it to treat everything as a string Cause it back up again If anybody wants that code then more than welcome to steal it Jbooter I think a lot of people grab Active Model Serializers and they think yeah Jbooter I don't need that. There's kind of a reason it's the default for Rails It's a really good declarative way of talking about the JSON response from a particular action And it's really good when you need to paint outside the lines slightly You can do stuff with a whole bunch of methods in your serializer and things like that But I find that it gets really unwieldy really fast and this also means you can access your view Helpa logic So if you have stuff for avatars or images or any of that kind of asset path stuff asset pipeline stuff You can access that in Jbooter. So definitely worth checking out This is New Zealand by the way You should all go and visit We're contract bound to Pitch New Zealand to everybody who's not Akiri And they sign it on our visa You kind of get this uncanny valley effect a little bit when you're going from Rails to Ember in terms of the terminology Because they're both MVC frameworks they tend to use the same terms But things that are called the same don't necessarily have the same job Or work the same across both frameworks Models nice nice and easy They're basically the same across both frameworks Controllers a little bit hard So the thing that does the job of retrieving model information from the database And then kind of pushing it up the stack with minimal processing in Rails We call that a controller in Ember that's called a route So And this is extra confusing because in Ember you also have controllers But their controllers are closer to what rails people would potentially Call a view model maybe So in rails you have kind of the view helper view model stack And then in Ember you have components and template pairs And they can be nested down and things like that I just about put controllers in there But Ember 2.0 controller were going away So I put component there So just imagine it sees routable component Another thing that really really confused me And again it sounds silly But it was just a bit of an a-half moment when I finally figured it out Is the actual definition of the routes So in rails and your routes.rb you save resources hamsters You get those seven magic actions You get the index get update all of that In Ember when you say that you just get the collection routes You don't get all the edit and all of that guy So you just get the tutorials route and the tutorials index route You also get the loading and error kind of substates But you get those for everything So if you kind of want a similar routing call To what you've got in rails You need to define each thing individually So you can do that by just passing a closure To the second parameter of the resource call So it seems obvious but it's really confusing Because the API is super similar In rails it's called resources this And it spits out a bunch of them In Ember resources this only spits out the collection ones What we'd call index in rails land Dealing with isolation and insanity So if you take this video and loop it for about three days That's what riding a train through Siberia looks like It doesn't change much This is Mr. Pung again He's staring out at the Gobi Desert And the testing story in Ember CLI Sometimes feels a bit like this They've kind of gone down this path Of having each unit completely and utterly isolated From anything else So they have this really cool needs functionality But this is the actual needs array From one of my components And you can see that it just gets crazy fast And we're talking about a pretty small app We're talking about something that I can bust out in four months So it's not huge So effectively for those of you who haven't seen Has everybody seen the needs stuff before? Do I need to explain that? General nodding of heads Okay, I won't explain that So sometimes this is me Literally herding yaks in Mongolia When there were yaks I was like I am going to chase these yaks And take a photo of it So that I can use it in some tech presentation At some point They're pretty fast You've been doing well to get close enough to shave one And they jump as well They jump over the little ditches and everything So anyway Sometimes it felt a bit like yak herding testing Sometimes it was a bit like yak herding Going through and writing tests in embassy ally Because you would have to go through And if you had a CSRF service That was generating getting a rail CSRF token You'd have to fake that out for your component test If you had an embedded data store A DS store, you'd have to fake that out If you had models coming out of the store You'd have to fake those out And so you end up building this whole like House of cards around before you actually Can test the bloody thing that you're trying to test As you can tell it drove me a little bit nuts Fortunately that has changed Yes So This landed this morning actually I jumped on IRC I chatted to Robert Jackson It turned out that the thing I wanted Needs going away Was like 90% done And he pointed me to the last 10% I got it done and we landed it So you can now just specify integration true And that means you get to decide what subset Of your application you want to test at any point in time So thank you Robert And thank you Jamie for steering me In the right direction and everything It's actually really really really easy To pitch in on this stuff And I love this IRC process I mean obviously the one sign Of a healthy open source project Is that they encourage and welcome contributions A further sign of a super healthy open source project Is that there's a transparent and easy process To go through in order to get those contributions accepted So this is really really cool In order not to go insane When you're in a very confined space For four days and you can't leave You need to remember to clean up after yourself So again where else developers We're used to each request being largely item potent We're used to getting a brand new clean slate Every time somebody does a get or a post or a put Or whatever Done work that way in Emberland You were going to be in this browser environment For a while those transitions That Aaron was talking about Are not getting you a whole new browser environment So you best be tidy If you're going to do something like this Inside a component So here we go I've got a component What I'm doing is When I'm inserting the When the components inserted into the page I'm saying I want to do this stuff When the windows resize So I'm listening to a jQuery event Outside of the component element When the components inserted If you're going to do that You've got to do this as well So when you're destroying the element You've got to go and unbind that resize listener Because obviously Ember can't do that for you Ember doesn't even know about it Destroying the components Not going to do it by default Because your listener is on window So you've got to remember to do that Otherwise this is what happens Somebody decides to resize the window in your app And you end up with like 358 exceptions In your array gun and your email inbox Is screaming at you So yeah make sure you do that This error message Coming from one of your handlebars templates Cannot read property description of undefined This one had me tearing what little hair I have left out It was so frustrating It's like that will remember what does it mean What this means Well can anybody spot a bug? Yeah see exactly it's really tough to spot Bam!  So yeah if you see this Cannot read property description of undefined And it's coming from one of your templates And you don't even have a property called description You've never thought about description Or like told Ember about it at all That's what's happening You've nested the bloody things wrong Yeah so I'm probably going to try and Land a patch to make that say You're a dumbass and you nested things wrong Heaps of really good resources We've already talked about the forums tonight This is Jamie and Aaron helping me out Thanks guys It's really really good to go on there And the best part is If they help you out and it's useful You can go and buy them a beer at the pub Really soon There's also this guy called Chris Ball Who's made a really cool resource called It covers a bunch of what I talked about tonight And a heap more stuff So definitely we're checking out There's a mailing list on there So you can just get emails Last but not least The way of the hempster So again being kind of a stuck in the mud Rails developer I was writing everything in coffee script Because that's what you do in Rails land And you know You abide by the rules of DHH Ember seems to be a bit more On the ES6 side of things So I went ahead and Drunk the ES6 decaf cool ad So you still get all of the really nice things That you want from coffee script In ES6 You get If you've got those fat arrow functions The lexical bis functions You can do the same thing You just need to add a few more special characters You actually do need to have those Method parentheses at the front there unfortunately You also got string interpolation In ES6 they're called template strings All you got to do is replace those double quotes With back ticks and swap out your hash For a dollar sign And you've got string interpolation Awesome There is a ton more to ES6 That does not even count As making a scratch on the surface Babel is the new name for 6 to 5 That is the JavaScript transpiler And they've got a really good learn ES6 section So I suggest you check that out Computed properties in the ember object model So computer properties are kind of Like an ember object superpower They're really really cool So just a couple of them That came to mind when I was writing this Alias So you can get a two way binding Which means that if I update API resource or resource They'll both stay in sync Really really cool If you're like me And you like to save a bit of typing You can use it for Like a default value So if you want a one way binding That's really cool And you can also do these kind of Enumerable style Properties where they'll go through And so that changes made Berlin will be true If any of the properties In the parameter list are true So that's really really cool as well And you can extend that out So you can observe Any of the Elements of an enumerable So here I have a model The model is a meetup Meetup has many talks And this computer property Will go and set that talks change Berlin to true If any of the dirty Berlin's on any of the talks change So that's really really useful When you have a belongs to And you want to set the dirty Property on the parent model Again turns out that There's lots of help around So guys at imageas.com Has a whole object model section And it's definitely worth At least skimming through that There's a ton more of those Computer property macros And they're all super super useful Initially I was kind of treating Handlebars a bit like ERB So I was thinking about it In a procedural way I was doing these ifs And if you try and treat Handlebars like ERB You're going to have a bad time Because it's not like ERB at all This is how you should do that So here in my model I just add a computer property Called display title And what that does Is that goes and sets the title To unnamed if the title is If the title is blank Otherwise it returns That the model title And because I've got title As the first parameter To the computer property there It'll update every time The model's title updates And I can just do that In one quick handlebars tag Brilliant This is really nice I've got my domain Concept represented in my model It's in a testable Reusable kind of way And it's more declarative And less procedural So I'm actually talking about Here's what this looks like Rather than here's how this behaves Another really stupid thing That nobody told me But I wish I'd learned earlier Is that you don't have to do Get, get, get, get, get, get, get You can just chain them on Like I'm airing my dirty laundry here It's all the stupid shit that I did You've also got first object And last object Thanks Jamie for telling me About that one On any ember innumerable So you don't have to use Like any nasty hacks Or what I was doing Was using underscore js Every time you don't need it Embassy li also has A bunch of things That you never knew you needed But now all of a sudden You cannot live without And for me that's definitely Live reload I kind of scoffed at this You can get it set up for Rails But it was kind of like Eh, it's not that tough To press the refresh button Oh my god, this is awesome It makes me feel like a wizard Because by the time I've Command tabbed back to my browser It's refreshed and I can click everything Ah, it's so cool I knew that I'd kind of Converted over to this When I found myself staring At a vanilla Rails app And thinking, why the hell Isn't it refreshing? So that's the end of our journey We're in London This is London from the top So thanks very much to Giselle And yeah, thanks to Flickr people For the photos Yeah, questions? How was the Wi-Fi? Actually in Vietnam I bought a SIM card For like seven New Zealand dollars With unlimited data So seven New Zealand dollars is like Three pounds, fifty pence Yeah, and that was Not quite that bad And it was free unlimited data And I was sitting there On the train coding away It was great It was better than Russia Can you say about the fuselage To your model page Where you were looking at The computer title The way I would normally do that Is put the computer property In the controller Because controller really is a view model Yeah So I keep the model clean With the raw data And then if I'm going to Place that with unnamed Or something else that's different Put that in the view model So I keep the model clean Especially if you're using something Like embedded data You're not editing the model You just post it back And it's excellent interface It's the same as the data You actually post it back Yeah, I mean embedded data Won't post that back By default But if you look at the model It would look as if it would Yeah, I think you could definitely make An argument for putting it Into the controller or the component Because it is a display thing In this case I'm using it everywhere So it just sort of made sense To me to put it at the highest level Basically because the only other option Would be putting it in a helper And sharing it across And it just seemed way too complex But yeah, you're quite right In general you probably should Put that stuff in the component Rather than in the model Also I'll just back up Two things Which is the get, get, get Caught out by that I only learned that recently And the embedded computer stuff In the guides there's loads And they're really powerful And you can chain them So something like that You could do that with computer properties By chaining them But then you get into this sort of Like I've got four extra Computer properties on my thing Just to have one thing But if you've not looked at it It's been five minutes It's really great And there's community Supported ones as well Oh really? Yeah, someone's Someone's written for you I have a friend named MRCPM Most of the initiative with me I know I am the manager And he's basically a bunch of Useful general groupos And he found one of them One of the main things That has to give to the world Is that you can actually Compose computer properties And you don't need to create Extra keys That you don't care about You can say something like An embedded computer And inside you use an embedded Computer port And inside you do an embedded Computer default value Nice What's that called? MRCPM? No, no it's not It's MRCPM MRCPM Alright Man, I seem to run into Your stuff on the internet Everywhere I look Miguel It doesn't use CLI on the middle Because it started before It was a thing But it's another movie It's pre-CLI It's pre-CLI It's answer history Sweet, anything else there? Everybody's looking at me already Sorry, can you go back to the slide When you were registering The jQuery component You were watching the window resize Watching the window resize It's clean up after yourself Yeah No, the next one This one Yeah Yeah Will destroy element and did insert It's kind of annoying that Those hooks are not named As two sides of the same coin Like it should be Did insert element or like Will uninsert Will remove element or something Like there should be First born problems Yeah Alright, that's enough from me Thanks


We see in several African nations the eruption of unending and intractable civil wars. They are indeed linked to structural violence and linked to the legacies of colonialism and neocolonialism. In the Caribbean you haven't really seen any sort of physical violence erupting as regards the structural violence of climate change. I believe that that might come if we take for example the case of Jamaica. You had the IMF International Monetary Fund coming in during the international economic global crisis of late 70s and early 1980s. And Jamaica was simply hard strapped for cash. They had nowhere else to turn to. They turned to the IMF and the World Bank. And the IMF laid out structural adjustment programs. And those programs went a bit too far. They had conditionalities. They said if you want these loans you have to do these things. And it was a long list of things that they had to do. Cutting back on public expenditures for health and education. As we now see that those structural adjustment programs, it's a sort of cookie cutter approach. It doesn't work for all economies. And therefore the Jamaican economy, it's parallel into an unending debt crisis where Jamaica had to go back to the IMF to get more loans. And therefore there are more loan conditionalities. So they're caught in a cycle of structural violence, right? Where you find an external agency really controlling the puppet strings of that economy. And they're not having a sustainable independent ground in which they could stand to lead their own economy on their own ground. But of course in subsequent years you have seen a skyrocketing in crime and violence in Jamaica. Where the crime and violence did not happen overnight. It doesn't exist within a vacuum. It emanates directly out of that lineage of colonialism. Of the country being plundered and then subsequent to that IMF intervention. And in my estimation that intervention, economic intervention going too far. So you find that Jamaica is caught within a web of repaying their loans and just having to borrow money to pay for those loans. That's a clear example linking structural violence with direct violence within the Caribbean. If we don't come more together, it starts to be able to push back against IMF and World Bank and International American Development Bank to say, hey, these policies, they're benefiting you wealthy countries but they're not really benefiting the poor countries until we can really push for more regionalization. We'll continue in this whole cycle of just responding to external threats, external interventions and external control.


Hello everyone. This video is about using SSL with OpenShift. There are a couple of different options that OpenShift provides for using SSL, and we will look at those different options. To begin with, I have deployed a KitchenSync Java application. It's already running and it's not using SSL. Let me open this and show it to you. Put in a new window. This is the Java application running. If I try to use it with HTTPS, it says no service available, but with HTTP, it works. Now let's see what kind of changes we need to make through this application to enable SSL. We have an application that has no SSL, and the way in which this is set up in OpenShift is there are a bunch of parts, for example, for your application running, and there is a route that is configured inside the router and as a user, you are trying to reach this application with the HTTP-based URL. It goes and hits the router and the router redirects it to one of the parts. This is how a simple application with no SSL works. The first step, we'll see how to enable SSL for this application using a process called EdgeTermination. In EdgeTermination, the user asks for the app using HTTPS-based URL using SSL between the browser, the client, and the router. The traffic is encrypted between the browser and the router, and the SSL terminates at the router, and from there on, the traffic between the router and your application, which is within the scope of your environment, could be unencrypted. In order to enable EdgeTermination, we have to make a small change to this route. So let's have a look at the route. I'll switch the project. Let's see what routes we have. Now, we'll edit this route for the change that I'm talking about. Here, under the spec, you see the host. This is the host name or the URL. Right under this, I'll add a section called TLS and we'll set the termination as EdgeTermination. I'll save this. At this point, SSL will work with EdgeTermination and TLS termination occurs at the router prior to proxying traffic to its destination. The TLS certificates are served by the front end of the router. So they must be configured into the route if you have TLS certificates to be configured. Otherwise, in our case, since we did not configure any certificates, TLS default router certificate would be used for termination. So if I test the application now with HTTPS, this application is running. Earlier when we tried HTTPS, we got a service not available, but now it is running with HTTPS. That means the TLS Edge termination is working. Now, we'll see how to configure a certificate into this route. So first, for this purpose, I'll use a self-signed certificate. I'll create a self-signed certificate using the key tool. So let's say I'm using key tool to generate a certificate. It's a self-signed certificate. It'll generate a keystore.js file. It has a password supersecret and all that stuff. So I keyed in all the values it asked for, and now it has generated a keystore file. Now, in order to use the certificate and the private key that got generated along with this, there is a little curve on a Mac. I have to convert this into pkcs12 format thanks to my colleague Ram who has provided this information. So all I did is I used the key tool to convert this key format from JKS format to the pkcs12 format. Here is my output file. Now, I'll use OpenSSL to see the values of certificate and private key. This OpenSSL, it shows me... I'm just passing that password that I set as supersecret before, and now it is showing me the private key and the certificate. I'll be using this information to... Let me first copy the private key and certificate. Now, I'll edit the route again to add this private key and certificate to the route for edge termination. Right below where we added the termination as edge, I will add the certificate and key sections there. I pasted the value of key and also placed my certificate here and I pasted the value of certificate. The alignment is important in a ML file. I'll say this route with these changes and now my route is ready with my certificates as well. So that is how edge termination can be used with certificates. Now, let's talk about the next type of termination model which is pass through. In this case, the encrypted traffic with pass through termination, the traffic is sent straight to the destination without the router providing any TLS termination. Therefore, no key or certificate is required at the router level. So you would not configure anything into the route. On the other hand, the destination part would be responsible for serving certificates for the traffic at the endpoint. So we would have to some way provide the certificate that we created earlier to the destination and we'll go through how to do that. So for this purpose, I created a new project. I called it pass through. Let me switch over to that project. Now, if you remember, we used this command, the key tool command to create the key store earlier. We'll be using that key store. I'm not running this command now, but I just wanted to show you what we did before. We created a key store by using this command and we had a password of super secret. We will be using this password as well. Now we have a key store here that we created earlier. So we will use this key store to create what we call a secret in this project. Secrets are storage for sensitive information such as keys, passwords, and certificates, and these are accessible by the intended pods. So remember what I said before? We have the traffic reaches all the way to the pod and pod is responsible for serving certificates and the secrets are a way in which we are making the certificates available to the pod so that it can serve those certificates. So all I'll do is create a secret now by using this command. I'm saying OC secrets and I'm creating a new secret. The name of the secret is EAP app secret and I'm using this key store.js file which has my self signed certificate. I'm mounting that certificate now as a secret into this project with name pass through. Now if I say OC get secrets, I should find all the secrets associated with the project. There are some secrets that are created when a project is created by default. Builder secrets and deployer secrets and the default secret are those. What you'll see is this is the one that just got created and if I look at what the secret looks like, OC get secret as a JSON. I see that this secret has some metadata and the data of this is coming from the keystore.js file and this is all the content. Easy. Now there is one more step to use this secret. We need a service account and the service account will allow your application to use that secret in order to enable that SSL traffic. Let's look at what service accounts we have right now. I can say service account or simply SA. Right now there is a service account for builder, service account which is default for the project and a service account for deployer. We'll create another service account. I am echoing a JSON here to create based on this file that is echoed here. I am trying to create a service account and I am naming the service account as EAP service account and I am also saying that this service account would be using this so and so secret and this is that EAP app secret that we created in the last step. The secret got created first and we are making the service account use this EAP app secret. I will run this command now and now if I look at the list of service accounts, EAP service account is now created and if I look at the contents of the service account, one of the secrets that it is using is this EAP app secret that we created before. Now we are ready to launch a HTTPS based application and that part is easy because we do have a template for creating an HTTPS based application. So I am creating a new application and I will create an application based on a template and for this I am using a EAP HTTPS STI template. STI stands for source to image. So if I will change a few parameters, I will call this secure application and then let it pick up the default host name. I don't want to change that. I will just run the default KitchenSync application that this template deploys. I don't want to change it but what I am interested in here is look at this EAP HTTPS secret. I want to use the EAP app secret. This is the one that we created. The default name is given as EAP app secret. That's the reason why I mounted it that way. If you wanted to create a secret with a different name, I could have called this my secret and then I could have changed the name here. I am also saying that the key store files name is keystore.jks. If the key store name was different, then we could have changed this name. Now the HTTPS name, I call the alias as self signed. I will call it the same here and the password, remember when we created the key store, we gave a password as super secret and I am using the same thing here. Now I will just press on this create button. Now this will go ahead and deploy the default KitchenSync application that comes with this template and as you can see there are two routes that got created. One is the regular HTTP route which is not secure and the other one is the HTTPS SSL based route. So two routes for the same application got created. Now in a couple of minutes, there will be a build process that will get started and once the build is complete, the application will get deployed. This will take a couple of minutes so I will pause and I will come back once the build and deployment is complete. Now the application is built and deployed. I will scroll over to the HTTPS based route and let me open that part of the application. So the security warning and here is the running application using HTTPS. Now in this case, this application is using pass-through termination. If I say OC get routes, I see these two different routes. One is the secure route, this HTTPS route and this secure route is set with the TLS termination of pass-through. Let me also show it as YAML so that you can compare with what you've seen before. Here the termination is set as pass-through. Now who set this pass-through termination? It's coming from the template. When you deploy that particular HTTPS STI template, the termination is set to pass-through when the route got created and all we did was we set up a secret and we enabled secret via the service account. Now the pod can serve the certificates by using the secret. Now the third kind of termination method that OpenShift allows is called a re-encryption termination. In this case, a re-encryption is a variation of the edge termination where the router terminates TLS with a certificate and then re-encrypts its connection to the endpoint which may have a different certificate. Although the whole path on both sides of the router are encrypted, the re-encryption to the endpoint happens with a different certificate. Although I don't have an example to show how it works, the architecture guide talks about how it can be accomplished. Just like in case of edge termination, you would have TLS and the termination set to re-encrypt. In this case, you will provide two different kinds of things. One is the key that is used just like in edge termination, the private key, the certificate, and if you have a CR certificate, you would provide that as well. And for re-encryption, you will provide a destination certificate which will be used for encryption behind the router, that means between the router and your pod. I hope you enjoyed this video. Thanks a lot for watching.


You've got Ian up next, Toby Kiss, Venusol, Tocco, Dusclops, Ryperia, and Incineroar. Okay, so this is more along the lines of the sand, the palisade, that's what we want. I'm gonna get you set up, boyo. Um, what is the best approach to this? I do worry about Venusol in the sun. If we see that lead, it makes things super, super awkward for us. I might just lead itself, go on palisade, to be honest, you know. If we see, uh, we could say, hmm, hmm, hmm. I definitely won't talk. I do, I won't talk, kiss here. Just for the Venusol, really. That would be the only reason. My brain is fried. Okay, let's go for what we've been doing. Uh, let's go palisade, actually, for a little bit of a change. And just talked about the Tocco kiss, but we're leaving it behind yet again. KC, hating Incin, but it's too good not to use it. Yeah, I think that's like most players. I really like Incin, um, but I, uh, I know it's, it's not the greatest. It's not fun playing against it sometimes. Let's do, I have A.V. Woodhammer and the extra damage, it's a few cuts. Yeah, I like Woodhammer and Willa Boon. I know a lot of players are kind of often not to run it, but I think if you've got like helping hand support on your team as well, it's super nice. Okay, so, hmm. We've got a couple of options here. We could potentially, we can go struggle bug, we can switch into Indeedy, get out to rain up, avoid any fake out, stall out a turn of their max, smooth. Um, they're just, they're probably just going to double into itself, or to be honest. I think they've got to fake it out though here. I think they have to fake it out. Let's go for this. Let's bring the Indeedy in. Now we've got no fake, we've got no way to stop sleep. We've got safety goggles on ToaKiss. That was the kind of like the best we could do, Stu. That was the best we could do to stop sleep. And KC, yeah, I'm playing the Eurocup, so I didn't play this week, but I think, I think from what Jamie was saying, I'll probably be in the team next week. So, hopefully that all works out. Are we just going to get sleep powder? Sleepy, sleep time. Unless it misses. The amount on it is, sleep powder never misses. Okay, well it's in to Indeedy, and let's see if they fake out. Okay, we could use this opportunity to now, or the shuriken, Palestine, get it in. Although like, we're just going to be sleeping again, aren't we? It's not ideal. We could just use this opportunity just to try and struggle bug again. We're going to get put to sleep. Not really much we can do. I mean, if we want to take the opportunity, we go for getting Palestine set up, I think. Sleep powder are very strong against us. Sleep powder are wrecking, wrecking us.  Yeah, just pull out Serena against relaboom. It's like, yeah, what are you going to do? And Iggy's cave, thank you so much for the follow, my friend, joining this stream tonight. I hope you enjoy it. Okay, so the Vino switching out is actually super perfect for us. Long as we don't see, well, I mean, Incy can do what it really wants now, because I mean, we're going to have plus six defense. So we should be all right. And then we can start boosting our special defense and just chucking attacks at this team. I guess you switch the Venus door out. Right, do now. I mean, we could, is it Incy going to switch it out? I'd be better off just keeping. Okay, let's see about this. We can ask, how slow is the right period going to be? Is it going to be slow or is it not going to be slow? Because we could potentially final gambit into Incy. Yeah, we'll do that. We'll get rid of, are we going to get rid of Incineroar? Probably not, though. Probably hangs on. That's the issue. And I'm just going to protect and be, where's the turn here? Okay, so right here if I take it. Show up as a player. We could have showed up. I don't know if we need to right now, though. Okay, while we get Incy, this is the problem now. This is the bad problem. Because now Venus just comes back in. And somehow we clicked show up. How did that even happen? Right, again, kiss here would have been amazing with that. Follow me, safety goggles. I should stop talking about it over and over and just bring it. Could we, we need a, we need a, we need a big wake up. This is how tired I am, guys. KCVGC, thank you so much for the follow me. Hope you do enjoy the stream with us tonight. Okay, we need a wake up from DD. And this is why we didn't click it. It's because I've got my moves all the wrong way around it. Normally I protect that. Do we just max? I feel like they're going to put us to sleep. If they max, then that's all right. They've got a max Venus all. I'd feel better if they max Venus all right now. Because then we don't have sleep to deal with. KCVGC, I'm walking on cloud nine tonight watching some VGC makes this all better. Awesome dude. That is great to hear me. Right, Venus all we don't have any sleep issues anymore. So that's great. If DD can wake up now very soon, that would be ideal. Because we can max Palestine, we should be able to take at least one attack from the Venus all. Okay, DD's sleeping. We're not taking that. We're not taking that if we max. There's no way. It's lipo. That's brutal. Okay, they double into Palestine. We needed to max that turn to be honest and call it. Could we? So risky, like I want to max with DD and go. But it's like, do we wake up or do we just stay asleep? I think we've got to, to be honest. Let's go for it. Let's go for it. I believe in RNG tonight and we'll go for an earth part into right period. I have faith that indeedy will wake up. Yeah, let's do it. We're going to wake up with DD. Come on, the max. That would be a great mechanic.  There we go.  But yeah, probably not a good idea because it would just make max moves like max max and even even more burst. Come on, DD, please wake up. Come on. Yes. Get it. Come on. Come on, knock it out. Oh, here are DD. You are the best, the best Pokemon in the entire world. Come on, Palestine. Awesome. Awesome. Could we even get a better turn than that? That just, yeah, you just had to believe. Oh my God. There we go. That's how we do it, boys. That's how we do it. Down here on a beach with our sand castles. Mill DD is so good. Okay, we've got poor old talk all against the world now. DD, this is why we picked you. You don't need anyone else. You just need you every game. Got to feel bad for Ian because we do get lucky with that one turn. Well, yeah, one turn, wake up. Bucket and spade, gang, digging for luck. Digging for those nuggets of luck. Popping nuggets out like no one's business. Playing Farathorn, already looking pretty tricky to deal with. I mean, Faro's not too bad. Palestine, if we get it set up, just donks on Farathorn. It can't really do too much to us. Then we've got Dragapult. We've got Hat, Garrados, Snorlax, and World of Heat. Garrados is something I really thought would play nicely with the DD, the Selgo Palestine call. Because then you get the Intimidate, you've got the ground resist, and you've got a nice water type that's got a move that can beat Rillaboom, and it can tank and take on the Pozum water types as well. I feel like Garrados would be really good in this build. I should have put it in. I should have put it in. Okay, what are we going to do here? Dragapult, I think we need... Okay, we definitely want Titar in this match for sure. Could we just go for Palestine set up straight away? Why not? Everything's physical except the Rotom and Hat, and I think this one might be a good one for good old P2. Yeah, let's bring P2. We haven't brought it to the party yet. I don't think we need the boost with the Selgo. Let's see if we can make this one better than that last one. I don't think we're going to get a better match than that last one. That last one was insane. And I tried to fix the sub count, like the sub thing we've got over here going on for this Rillaboom emote that is up for grabs next. We're like three subs away, guys. We're like three subs away from getting it. So the counter is wrong. I just couldn't get it fixed in time before the stream. So I will do that for Monday for sure, but just to keep you guys updated. Yeah, water shuriken, max, and go for... The only downside would be if this dragapult special and then we're super screwed. Super screwed.  Well, fantastic. It's the dragapult. Johnny's straight away special pult. Here we go. Gonna be the only special pult I played season five. There's a water shuriken. Oh, it's gonna... It's gonna fan in four stars, isn't it? So we're gonna miss out. You have C-fan. How are you doing, mate? I hope you're doing well, dude. Nice Rillaboom emote. Thanks, dude. Do that myself. And then everyone's now like, oh, okay. Well, I'm not subbing now. Now, but I do need to get some done. Johnny had a great idea for em. Where's that shurik when we need it? Can we pull through? Okay, well, that's a pult.  Over the top damage. It's a shame. Okay. There it is. There's the leap seed. Can we get through these turns to get a shore up pop? Did we bring kiss in the back? No, we brought P2. Okay. Again, kiss keeps coming up every time. I'm like, did we do it? And no, no, we didn't. Big gara coming in. Big garrados. Garrados, garrados, garrados. Can we find a gambit here? Just get rid of you. Give us a little bit of room. I think we probably can. I think we take whatever garrados throws at us, to be honest. Um, I'm a phantom force. What do we do? Nah, I'm just a phantom force. Nick, how are you doing, mate? I hope you're well. Long time no see, dude. Hope you are keeping well, my friend. Okay, so we're going to get garrados coming out. We're going to find out if my theory... Oh, it's a pharathorn. Ha. I'm not what I expected to max. Okay, it should take garrados down. And I don't think pharathorn is definitely not taking us down here. We should do a nice chunk to it. It's ideal. But I mean, depending on what they've got as their last pop, when it does give us the opportunity to get a short pop, there's nothing. There's nothing. The grassy terrain is super helpful for us here, because it just gives us that little bit of recovery that we do need. What's their last Pokemon? There's a seed. Do we just max guard this next? It does depend on what they bring in, I think. Or bring in P2. I don't really want to bring Tita to this wall just yet. I think we have to just attack that. Just double into that, I think. It's probably going to protect. But I still think we take whatever pharathorn throws out at us. Okay, they cancel. Okay, we get into my opponent. Stevo. An exodrail. Toadkiss. Perilaboo Rotom Fan in DD and Incineroar, so okay. What are we going to see from this team? I do like Palaisan's here, but I do think we need our trick room support. And we definitely need Tita in this match. There's so much work against Insie, and DD, Fan, and Toadkiss.  We do need our terrain for sure. Are we forcing the Palaisan? We'll force the Palaisan again. Whether or not we want Kiss or Tata, I think we have to bring Tata. Like as much as I want Kiss here, I think we have to bring Tata. We'll go for it. Bev'em, enjoy the walk, my friend. Enjoy the walk. I'll see you soon, dude. We've got Rotom Fan and Exodrail. I mean, it's very tempting just to struggle, bug, and expanding force here. But I feel like the Rillaboom will make its appearance. Rillaboom's definitely coming in. Probably for Exodrail. Or is it? No, maybe the... Okay, let's go straight for Palaisan's here. Switch Palaisan in. Hopefully you don't see a Max Airstream from this Rotom into Palaisan's. That'd be like the worst, the worst case scenario here. Nothing Maxing on my opponent's end, which is a good sign for us to start with. So we'll get a plus 6 defense, which is good, which helps us massively against this Exodrail. I'm hoping maybe just an air slash into itself, or like the double up into that slot would be perfect right now. And of course, like, fine. Selva takes it, but we're going to see this Rotom do discharge. Okay, we're going to take... Yeah, okay, that's good. Did we get Didi? Yeah, we have to get Didi back in. We can't bring Titor in just yet. Now, do we expand in force? Force is all for the Exodrail. The issue again is, like, we could potentially...  And I think my opponent probably feels... Yeah, I think we got the Trick Room. And I think we maxed and got into... I feel there's enough reason for my opponent to maybe switch something out now, just because the Palaisan's set up. And you probably want to try and get really boom onto the field to override the terrain if you can. But then again, there's no reason for my opponent not to just throw rockslide discharge again. Just, yeah, I'll max. And the thing that I'm fearing is the max airstream and double into Indeed to stop the Trick Room getting set up for us. I'm hoping they got into Palaisan, which we should be able to take. Because if we get a Trick Room up here, I think it's... Maybe, we'll see. But not getting a Trick Room up makes it really boomerang. Please don't go into Indeed. Go into the Palaisan max-fantasm. Yeah, okay. Well, I don't mind that at all. As long as we don't flinch. Touch wood. Come on. Come on. RNG gods, be with us. I think that's like, yeah. I think it's Scarf Expert as well.  Albert game. I'll give this sub if you win. Okay, dude. Deal. Let's do it. Right. Really boom coming in with that tasty terrain. Going to mystic fire. Going to mystic fire the roster. Because if Indeedy goes down here, we can get T-Top onto the field. We will have to get rid of the Rillaboo. Yeah, okay. So this next turn, this isn't bad. Because it's light bulb. Okay, right. Ends what they got in the back as well. So we need to be like super careful with what they got in the back. But like this next turn, we need to protect T-Top. New Rillaboo. As a grassy glide will get us, I would say, 100% with that light bulb. There's no way. What have they got in the back? They think we'll go down to Max Phantasms now. But it's super tempting, I think, for my opponent to get the T-Top right now. But it's obvious that we protect, right? That's the other thing. Is it too obvious that we just protect? So they switch into NC and then get all the knockouts for free. Now, let's go for it. We're going to take this chance. I want that. I want that gift. Okay, maybe. Maybe it's on. Depends if it is. If it... Okay, there's a grassy glide. But we take it because of our super huge Uber defense. Right, well, we're going to lose Palestine here, but it does the job we needed to get rid of that Rillaboo, which is good. And with the trick room still up, we're not in the worst position. But it all... It comes down to what my opponent's last Pokemon is. If it's Incineroar then, yeah, that's great. Although it's a little annoying because we can't really protect on the fake out. We should have just attacked with Tito. We should have been a bit more ballsy. But yeah, NC. Okay. And minus two defense as well. I'm going to go for the double protect because if we get it, then we can avoid at least a bit of damage. But it all comes down to what this Incineroar's got as an attack. But yeah, we don't get it. There's a fake out. I guess fishing for the paralysis, it makes a lot of sense to do that. Right. Okay, we just need some rock slides then. Rock slides to hit. How many turns of trick room we got? Two? One turn of trick room. Rotan probably protects here if it's got it. We haven't seen it so far, but it would make sense to have it. Don't protect. Okay, well the Rotan's gone. Yeah. And there's no way this NC survives. Okay. Here we go. And we get the flinch to top things off and just put the icing on the cake for us. Okay. Right. Well, that's fine. Damages then back to normal. And there we go. We can just go for a super power for that super Tito. Still do some decent damage because of that minus one that we are on. Man, brutal. Okay, but not quite enough. We do pick up the win. Locking NC. Yeah. That flinch definitely mattered, but we'll take it. We played for it. We get it. Okay. Well, good game to my opponent. We get a little bit lucky. A little bit fortunate there. But okay, friends, there you go. If you want to play Palestine, have a bit of fun on the ladder. There you go. Have a little bit of fun with it. It is a lot of fun if you can get it going. Palestine is crazy strong. It's just a variation on some of the different Palestine builds that you'll see at the minute. There's definitely things that would change with it. And it's probably something I'd like to revisit again in the future after working on it a little bit more, I think, with a bit more time. And especially after tonight's session, I think it's a good one to take forward. But if you do try it, have a lot of fun with the rental. And yeah, I'm going to say good evening to you all. Thank you so much for coming out to the stream. We're back on Monday with a new team, like I said, 8pm as always. So have a great weekend to you all. For all those players taking part in the Players Cup, judges everyone else. And have a great tournament. I wish you all the best of luck. And I'll be rooting for you all to do your best in this tournament over the weekend. And I'll see you all Monday. Thank you, friends. Take care of yourselves. And I'll see you all for the next one. So until then, take care. Bye-bye.


to Wikimania. I'm Stefan from Germany. I think some people know me better as Fussi, that's my nickname. Der Rieft from my second name. I want to give you a short introduction to our wiki voyage bubble and how we use wiki data in our project. So as a start, just some information about myself. I started editing in 2005 and then I created with some other friends the wiki voyage project and I led it to the wiki media foundation in 2012 and since then we are part of the family and there are two contacts because I want to introduce some of our modules that use wiki data and if you have a question you can contact these two guys at the bottom, that's me and my colleague Roland and if you have a question you can drop us a line. A very very short look back because maybe somebody, not everybody knows it, that before we became a family member we had an own database created when we run the wiki voyage project for ourselves. It was called location database. It's of course not that big as wiki data is now, but it was quite useful. This database saved the geographical hierarchy, the inter wiki links and the coordinates and that time and of course this database died when we moved our project to the wiki media servers. Why wiki data? Yes of course we were anxiously waiting for the database because we have many information that are just short facts or short values and like addresses, phone numbers, coordinates, opening hours, features of place, crime data and a very special two wiki voyages that we are not urgently need sources or references so we can live with articles without it and one of the big advantages that we are small communities so if somebody adds some information we can see it easily in all language versions so that's a big good support for us. To give you an overview of how we use wiki data there are some statistics we have articles that have 350 database accesses in one article. In the past it happens that we got time outs when our articles were passed but at the moment the performance is quite good. You see two of our articles which use wiki data quite heavily so you can see we have in Vienna 250 templates called wika that all use wiki data and so you have some information how much we use it. This is just a screenshot of one article it's a small article but I have marked all the information that comes from wiki data in one article so you may have a good overview of a visual impression how we use it and maybe you can see that's the half of the information are not directly in the article but that are fetched from wiki data. Yeah of course there are some challenges that we faced in the past or still face so of course stamina is not that's normal people have to fix it it can happen that values are deleted or changed sometimes unintentionally but I think the community and some bots can fix it. The second challenge is the changes of data models we used wiki data from the beginning so it can happen that you write a module that works today and tomorrow it doesn't work properly because the data model and the information change so I wrote an as an example I wrote a module that find to every place on this earth the first level province of a country and meanwhile there are additionally additional properties that I have to process that makes the whole process a little bit more difficult second example is the osm in the past we could save only relations but later on osm entities were possible but just with the prefix but now we have separate properties for every information so wiki data is changing permanently and if you write a module you have to sometimes improve your modules as well so sometimes it can be quite difficult to find the right value we have ranks like preferred normal and deprecated ranks but sometimes the preferred value is not the right value it can happen that's a value this is has a preferred rank but it has an end date there are qualifiers starting date or end date so you have you can have a value that is preferred but actually outdated so what how to handle this there are many decisions to make how you handle these data and yet these qualifier that's just called off but in the meantime it shouldn't be used any longer so sometimes if you want to fetch some information from wiki data you have to run analysis how is it saved in wiki data so that's why we notice that we need several modules depending on the data type we want to get from wiki data so I wrote modules for every data type even simple string values can be difficult as you can see the postal code of the Malaysian province Sabah is saved as a range value just just a normal string and if you look to Chiang Mai you have a big list and this this big list can make your info boxes blasting so we had to create a module that fetches strings and you can in this example you can give a limit of values and if the the count of values is bigger than the limit then this module creates a range value so you can see in our info box on the left side the huge list of Chiang Mai is reduced to such a range value different problems can can happen if you want to have numbers the problem can be especially if you are have information from us they have are not in the value in the unit that you want sometimes values are saved in miles or feet and the german wiki voyage wants to have meters and kilometers and so I have implemented automatic conversion you can say which unit you want and if it's not saved on wiki data and that unit it takes it makes a conversion for you and then it you get your information get displayed in the unit you want to have like the aria and altitude um the next feature are our get item modules so if if you have an item on wiki data is as a value so you you have the option to see just the text like the bonus program of Chiang Mai or if you want you can get a link provided and the link that is provided has a priority the first priority is that the link goes to the german wiki voyage if an article exists if not it uses the german wikipedia and if this one fails it goes over to the local wikipedia so if you have an article about Thailand it would go to the Thai article in that case yeah we have special modules for getting images to be put in the info boxes um if you want these uh flags or coat of arms or seals you can easily just use the first letter if you write in your info box ah okay thanks um so you can just use in the parameters the first letter and then it will show us coat of arms or flags or something and special features are the location maps you can choose for the whole wiki which kind of maps you want to see so there is a priority list of collections and in the german wiki voyagers decided to use the green ones the green autographic maps but just by changing the item in this this one parameter so you can change all articles uh at the same time and display another location map and we have a special module that's climbing up the geographical hierarchy on wiki data and it determines the first level province of every town in in every country so and we have a few modules that are designed just for one purpose because some information are more more complex like uh web links so we add the we add automatically the language of the website and the module tries to fetch the best one for your purpose so in this priority you can fetch the german website or english one and if you don't find it you get a local one and there are of course some very special entities like uh like capitals special example is south africa that has three different capitals so it's formatted and fetched and you get even then the the kind of capital um all our modules um can be used within the text and it has an option to be a part of the info boxes so you can just start an info box with an open opening template and then just add one of these modules and get your content displayed if you use a parameter and uh and leave the value out then it's fetched from wiki data but you can give also a local value which is displayed in that case instead of wiki data but in the background there's a comparison with wiki data so the result of this comparison is is showed in i i made some uh screenshot of the hdml so you can see that the result is shown in in classes and if you use a gadget so you can color the information also it's shown in the tooltip so if you open an article and see it in red or green then you know if it's green the the value on wiki data is the same as a local wiki so you can just remove it in a local wiki or if it's red you can decide um should i fix wiki data or is my local value the wrong one so i can just delete it as well and use wiki data in future and because we use these classes so maybe in the next step could be to develop some gadgets or features that use these classes and make for you a form that uses the api of wiki data to to change the information easily so you don't have to go over to wiki data and it's easier for newbies just to add wiki data from here it could be the next step that's why we have implemented it and i think it's uh quite useful so on the biggest module is our wikard it provides information about all places that are in articles restaurants museums temples whatever this module creates all the information it creates the pin on the cartographers map it it it it creates micro formats for external tools to save automatically the addresses of phone numbers it formats the phone numbers that you can easily call or Skype to this place and there's an info box that you can create with just the button that's quite useful on the mobile version when you when you are in a foreign town and just jump into a taxi it creates for you this this text for the taxi driver so the article recognizes okay i'm an article in thailand so it creates even in Thai language please take me to this place so i think it's quite useful when you are on travel just to show the taxi driver yeah take me there please so wishes of course uh this is our experience we have some wishes meantime sometimes um the the interface is quite difficult especially for newbies is still i have to say quite nerdy so what we originally would need is a coordinate picker you still have to copy it from anywhere in inside the form and even if you see you have different inputs for for date values that result in different values on wiki data so if you try to type gen it it's just created with date if you uh why january yeah it's the german one it's just the months so and the date output is this localization but if you want to type in local values it's not recognized so the german october is showed to you but you cannot input it and sometimes it's quite tricky if you copy it from from other websites there are non-breaking spaces that are not recognized as really spaces so maybe there is still some space for improvement and if you type after every single letter it's a lot of internet traffic if if you have a low internet it can be yeah you need some patience patience to to input your data okay so and of course i think these wishes are from several communities it would be very nice to to edit wiki data from outside or from the local wiki i don't know how the current developments are on that side and of course mobile editing is not i've tried it on my way here and actually it's not really possible isn't it yeah that would be cool if if you can add your data mobile on mobile so the next problem is we have a lot of information that we use regularly so if you if you use a model several times you have an access to internet several times there are many information that are needed all the time in one article so it's like calling codes iso codes and phone area codes at the moment we do we make a sparkle request and then we copy it to an editor format it as a lure table and then save the lure table in our local wiki so i feel easier access to this information it would be cool to have a tool i don't know if some exist i ask around that can do it automatically create a lure table and save it maybe as a cron drop or a bot i don't know if a bot exists at the moment but at the moment it's it's more manual work to copy this information but to reduce the access it's quite useful to have some permanent information your local wiki and one thing that would be useful is some better functions so some lure functions we have at the moment just get the best statement but if if you remember the problem at the beginning the best statement is not the current one always maybe that it would be useful to have a lure function that gets the most recent value and other informations like the last edit date is not available via lure just via apa there are some wishes we have at the moment currently yeah and constraints i saw i i think it it's it's there are more discussions about constraints do we have some more or or should we have some more or not we would like have some more but i know and not not everybody wants and of course more data one one data that we miss is climate data you want we would like to create this climate diagrams but at the moment we have no information about that on wiki data and it would be useful to have some i got the question in the meantime do do you have an idea how for how client communities could coordinate better with the wiki data community regarding data model changes oh at the moment not really it's quite difficult you have to to to browse around many discussion sites on the properties yeah an idea at the moment not i have to admit but there is lydia maybe you know something about it i have some ideas one of the things that came up earlier in a different context also modeling challenges was to do one of those community days that we've been doing in the past around data quality and like geographical data uh to do one for data modeling uh where people like uh you from wiki world could come um and and bring up a challenge and discuss that with the community so that is something that i'm uh gonna bring up with the team and see if we can make that happen thanks and i think yeah i got the sign the time is over and thank you very much too thank you and see you in one of the next sessions around thank you


We have developed a novel framework for handling missing values in time series data. The framework uses three different missing value fixing algorithms, which are then incorporated into a deep recurrent neural network, DRNN. This DRNN is composed of long short-term memory, LSTM, layers and fully connected layers, and is trained with real, world air quality and meteorological data sets from Jingjingi area, China. We compared this framework with two other baselines, a deep feed forward neural network, DFNN, and a gradient boosting decision tree, GBDT. Experimental results showed that our proposed DRNN framework outperformed both DFNN and GBDT, demonstrating its effectiveness in handling missing values in time series data. This article was authored by Jfan, Culey, and others.


Morning everyone on our way to work. This is Tuesday when I'm filming this Welcome to Tuesday. We have all decided right that it is Tuesday not Tuesday No, we haven't we haven't made up our minds on that. Okay. Well, whichever one you like better. It's Tuesday or Tuesday today We're gonna go and do some trucking Very excited We have to pick up a load and win a peg first thing Two loads actually well two parts to one load We gotta go and pick one up on the west side of Winnipeg and go pick up the rest of it on the east side of Winnipeg And then go down to a small town called Latallier My interior lights seem to be on inside the truck Oh joy Let's go see if she'll start Oh, man She's got oil in her so Let's start her up now. I don't know why the lights run. I hope they weren't on all night I don't know why they Why are we your lights on did someone come in here and turn them on for you? Oh, I'm warmed up ready to go The sun is about to join us Let's get going There's the sun Got the whole lot salted yesterday or sanded sand They did back here a little bit and they did a really good job around the trailers there Which is awesome because we were having trouble getting stuck Right in the middle of the of the lot on the flat ground because it was so icy It's a skating rink and now we've got some good traction again I didn't even see them come in here I don't know when they came but I came to the back here at one point during the day. I'm like, uh, look at that I don't know if we get an outside person to come in and salt the yard or Because I don't think we have our own salt shaker here Now well We got to find a step deck. I think I'm gonna take this one right here 104 db You look friendly You want to hang out today? Look like you're in decent shape Sending back here all alone. You want a friend? Let's be friends. Let's be friends. They're gonna hook up. I'll pull it out here. No frozen brakes. Thank goodness Ready set to go. I just had to pick up a charger I forgot my phone charger in my pickup over there I swung past here to grab that Now we're on the way this gate should be working by now If not, we'll have to do a u-turn and go back pull the other gate Where's my seatbelt buckles that always folds down in there There we go. All right Ah Walk my pickup keeps the bad guys out We got freight waiting for us two pickups today. I'm sure hope this gate is working right now Ha ha Open sesame So probably about a half hour drive and probably not even 20 minute drive to my first pickup And I forgot to bring my lunch today So I got to stop and pick up food somewhere before I get hungry a little triple quadruple check We've got the first part loaded up. That's it Got the whole bottom there to load up on the east side of Winnipeg yet No idea what's in here or anything, but I got it all tied down ready to go As soon as I can find the Oath hoax, I think they have a driver's Porta potty around here somewhere Just in case you're wondering if you if you needed that information It is the vlog after all. I'm a sharer. All right, here's my chance The other side of the city And then all the way down to the u.s border La Talie where we're delivering this stuff is the last town on highway 75 Before emerson, which is the border town At the border with the u.s So I guess it's the second last town before the u.s and bishop grand and Winnipeg is known for its interesting Intersections It's like they have to be different. I don't want to do it the normal way even if the normal way makes sense That's why it's the normal way. That's what everybody else does No, we're winnipeg Let's do it the hardest way possible This is a whole new neighborhood here though. It's only built in the last like five or ten years Oh, you can get a house in here starting at the low low price of like 800 thousand dollars. Oh, yeah For all some parts of canada that is actually very low. I think you might even find one in here for 500 thousand But for winnipeg, that's expensive But look what you get for that like these are some big houses Some really nice big houses in here You just got to hope and trust that they were built right and aren't gonna fall apart 10 years down the road Because they put them up in a hurry like they go up fast That's a deacons corner on the east side of winnipeg Just checking my straps while i'm here. This is what we loaded up on the west side up on the kick And this is the stuff we loaded up Here on the east side of the city This is all going Down near latalia if you guys on hold on sorry, didn't mean to make you all dizzy there You guys ready? Buckle up That means you too buckle up don't want you to fall out 100 and 110 kilometers from here So just over an hour About an hour and 15 hour and 20 minutes rare that there's no weight at this driveway Usually we have to wait for tons of traffic nervous or scared of uh trucks So when you're merging on to the highway They usually move over for you unless up there those stubborn four-wheelers that there's too much work for them to change lanes You know, I guess that's Depending on the person depending on the day, right and bar. I've never actually been inside every time I come here. They're closed And then when I do come here like right now, I don't quickly I don't have time to quickly run in And for the last year or so like this time last year I couldn't go in there if I wanted because everything was shut down, right? But it's a nice place from what I've heard and they've got some parking here As you saw there trailer is now empty. I'm just gonna drag My 33 year old butt that shouldn't be in this bad of shape Up on the trailer deck here and get rid of some of this snow Walk, definitely don't want that rock. I think you even got a couple rocks on here Yeah, let's not take those with us. Okay. Those are going to go through someone's windshield That would be a bad day for them And for me a lot of paperwork and a lot of explaining All right, what's uh This off of here this snow. That's no word with that I'm gonna best get that off of here. Everything else is clear Oh, well one more rock definitely want the rocks off. Okay Yeah, so uh empty trailer The day was a success Another delivery by trucker jar Okay, oh I swear those Those decks used to be lower It's a long way down. I'm just kidding. That's not that bad. It's not that bad Okay Time to go back to the yard In a second, I'm just gonna strap you in here, right? Gotta make sure we put our seatbelts on, right? Okay one second guys one second Hold on Hold on I usually cut that part out, but you know what just for you. I'm leaving it in there Okay You're welcome See if there's anything else for me today or uh if we're going home Oh, it's not like my brakes were on there. What was that? Did I sink in a little? No Ah, maybe my clutch just needs to be adjusted again. All right. Well The us of a is that way south we are going north Though I miss traveling down there. Don't don't worry guys. I've been telling my uh My load gauze that I'd like to stretch my legs a little bit sometime soon A little bit further there. They'll get me there right now. I'm needed here though. Okay, so I got to go where I'm needed. That's what a trucker does Trucker goes where he's needed. This is a nice little town. I actually almost bought this lot A few years ago right here beside the uh their arena But because it's beside the arena here and all off on its own I ended up not getting it. It used to be an old house here But whoever did buy it knocked that house down and built this house They did a really nice job Yeah, I was gonna buy this property here and build a shop right behind it there by that truck parking in the back And then I'd be right on the main road into the u.s So every time I went on a trip down south or came back home I'd be going right past my house and I could pull right in there. I'd have a nice shop But I ended up buying out closer to steinback instead and you know Life led me to brit And had I done anything differently, I don't know if I would have met her I mean we met on the internet. We're a true 21st century couple but uh So we probably still would have met But I would have lived much further away from where she was at the time. She lived in winnipeg I don't know life definitely would have been different though But at least I'd have truck parking right in my backyard, right? That's what I was thinking Not much better deal now. Now we got land out in the bush east of here On the other side of the river deets eat turns out just the way it's supposed to right Lights are off interior lights are off I can't believe she started today. I wonder how long those interior lights were on then. Were they on all night? If they were that I mean, I got a new alternator But man Another day. Let's go say hi to the dogs See our solar light got some good sun today Yeah, we get a little sun here in the wintertime sometimes. Uh, it doesn't get very much of a charge, but Yeah, it's lighting up the yard nice now This uh, isn't actually plugged into electricity It's got a solar panel on the roof and that charges it during the day and then it's our Security light at night and it actually works really good. Got it at canadian tire for like 60 bucks or something year or two ago Works really good. Let's see what they're all up to back here Hopefully staying out of trouble Diesel what you doing? Frank? You're not eating anything. You shouldn't are you? Frank? She got there He likes some uh, he likes to recycle. Did he go back in? Come on chef diesel. Come on Come on guys. Yeah, I got all my work stuff here. I put everything away now Well diesel it's up to you It's always up to me man. That's why I'm a yord Yord of the weasels and the weasels Your hands are cold again, man.  It's a very nice shade of gray and light gray Do you want to play with my rope? You can play with it if you want this one This one Yeah Let me get hold of it. Let me go hold of it one second. What's it? Okay. Okay. Now you pull that way Well, hey, you can't use your paw. That's cheating. Okay, just my mouth. Okay I gotta use my paw. Oh Okay, hold it. Oh I win That's not how you play tug of war. He thinks he knows everything that one is a young pup Teenagers, you know you story got to deal with him diesel. I was a teenager once Come here. Let me tell you. Let me tell you come here. Now you tell me from there. I'm good. I'm good like you Once I was a teenager rebellious thought I knew everything No way you still think you know everything. Yeah, but now I actually do Mom said that's not true Mom said you don't know everything. She told me mom knows everything. You should ask her sometimes. She's very wise It's very smart. I always wanted your mom. Thanks for getting me one The only time I saw she wouldn't get me one you didn't think that I didn't know if you could snag us a good mom or you're like I have my doubts Why why are you painting my why are you painting my teeth? Stop it. Now for all of you out there. I hope you come back small. Maybe gotta let me talk again And britt is once again working late tonight Her schedule like I've said before is kind of opposite for mine. She starts later in the day I start early in the early morning and then she works later and I get home before her so I'd like to uh Include her in here more, but we'll see what we can do in the weekends very often on the weekends We end up just taking that time to relax and catch up with everything But trying to stay on top everything so that we can get you a good dog vlog and a good family vlog on the weekends okay Should be good. I got invited to a blue bomber game coming up soon with my buddy james and his family I'm actually pretty excited. I haven't been to a blue bomber game since I was probably like four I'm not really a big football fan blue bombers is the winnipeg Like football team like american football. We have we have our own football league up here I'll show you guys. I'll take you guys along if they're okay with it And if not, I'll just show you the game But uh, you you've met him before you've met him. It should be a good time. I'm looking forward to it So there's that coming up on the weekend Not this coming weekend the weekend after that Don't forget to subscribe if you haven't already. We're gonna make another video tomorrow. Who knows? What'll happen then? How's that for a cliffhanger It's hard to it's hard to give you a cliffhanger. That's not much to say


Startup company, the Startup or Startup is an entrepreneurial venture which is a newly emerged business venture that aims to meet a marketplace need, want or problem by developing the viable business model around products, services, processes or platforms. The Startup is a new business venture designed to effectively develop and validate a scalable business model. Startups do have high rates of failure, but the minority that have gone on to be successful includes companies that have become large and influential. Evolution, the typical early tasks in forming the Startup are assembling the team to secure skills, gaining the know-how from knowledge, collecting or finding financial resources, and others elements to conduct research on the target market. The Startup will then begin building the first minimum viable product MVP prototype, to validate, assess and develop the new ideas for business models and concepts. A shareholders agreement SHA is often signed to confirm the commitment, ownership and contributions of the founders and investors and to deal with the intellectual properties and assets that may be generated by the Startup. Business model for Startups are generally found via a bottom-up or top-down approach. A company may cease to be a Startup as it passes various milestones, such as becoming publicly traded on the stock market in an initial public offering IPO or ceasing to exist as an independent entity via a merger or acquisition. Companies may also fail and cease to operate altogether, an outcome that is very likely for Startups, given that they are developing disruptive innovations which may not function as expected and for which there may not be market demand, even when the product or service is finally developed. Given that Startups operate in high-risk sectors, it can also be hard to attract investors to support the product-slash-service development or attract buyers, which is why it is recommended to find investors within similar fields to which the Startup may be operating in. Startup development phases the size and maturity of the Startup ecosystem is where the Startup is launched and where it grows to have an effect on the volume and success of the Startups. The Startup ecosystem consists of the individual's entrepreneurs, venture capitalists, angel investors, mentors, advisors, institutions and organizations top research universities and institutes, business schools and entrepreneurship programs and centers operated by universities and colleges, non-profit entrepreneurship support organizations, government entrepreneurship programs and services, chambers of commerce business incubators and business, accelerators and top performing entrepreneurial firms and Startups. The region with all of these elements is considered to be a strong Startup ecosystem. One of the most famous Startup ecosystems is Silicon Valley in California, where major computer and internet firms and top universities such as Stanford University create a stimulating Startup environment, Boston where Massachusetts Institute of Technology is located and Berlin, home of WISTA the top research area numerous creative industries, leading entrepreneurs and Startup firms.


Hi, everyone, Sean with jaspyscasebreaks.com here doing 2020 Mosaic football hobby, one pack break, random team number 42, where we're giving away six spots in the 2020 National Treasures football, random team, two box break. Only one filler left, pack 43, which is in the store now and six spots straight up in the break. And we can do that tonight. So 32 spots. It's a random team in NFL and a one pack break of 2020 Mosaic hobby, no vet common ship. At the end of the break, we'll take all 32 customers names, randomize them in top six names each when a spot in the NT football random team break. Here is our list of customers from Kevin Miakawa down to Simon Meyer and last spot mojo and our list of teams from the Cardinals down to the Washington football team. Dice roll for the randomizer for the break itself, separate dice roll, separate randomizer at the end of the break after the pack to give away those top six spots three and a three six times, six and final time from offer down to drew six times on the randomizer and six times on the teams, six and final time from the Jaguars down to the Browns six times on that randomizer there for the teams, six times on the customers and six times on the dice. So we're not going to read through the full list here, but since this is 2020, we'll take a look at some of the highlights potentially in here. Chargers, Herbert, Terry Cahill, Bangles, Burrow, Matthew Shearer, Jalen Hertz for PJ, Jordan Love for Matthew and Tua for PJ, there you go. It's a no trade window since this is a filler pack, it's print and rip and here's our pack. And there is the finalist. And we got an auto, Shaquille Barrett, Tampa Bay Buccaneers, Ofer, Abramson, Jordan Hicks for the Cardinals, Chris Maxwell, another Jordan Hicks, this one is a red, non numbered for Javi, red, Chris Maxwell, Tua introductions for the Dolphins, PJ McNeely, Denzel Mims for the Jets, Matthew Shearer, Henry Ruggs for the Raiders, Drew Stanford and Chase Claypool for the Steelers and Rosario Carrucci, there you go. What's up Chris, how are you man, just saw your chat. Pop back over here to the randomizer and let's give away those spots. So it's top six after a four and a six, ten times. Here's the original customer list from Kevin back down to Simon Meyer, ten times on the randomizer, good luck. Top six, tenth and final time, okay, so ten times on the randomizer, ten times on the dice, top six names, so from seven down to 32, thank you guys very much for getting in on the break, hopefully I can do better for you on the next filler, next one is in the store and last filler for NT football. Congratulations David Garcia, Matthew Shearer, Matthew Shearer, PJ McNeely, Matthew Shearer and Simon Meyer with that last spot mojo, top six names, each gets spots, ten times on the randomizer, ten times on the dice and top six. That was 2020 Mosaic football hobby one pack break, random team number 42 from jaspyscasebreaks.com. I'm Sean, jaspyscasebreaks.com, thanks for hanging out, we'll see you next time.