I'm very excited to be here at DroidCon India. It's my second time to the country only. So thanks to Hasgeek and everyone involved there for bringing me out to Bangalore. I hope you enjoy my talk, as well as my talk tomorrow. So before I get started properly, I'm Australian. Apologies if I use any strange words if you can't understand me, anything like that. I'll be offering advice on my accent at, I think, three o'clock today, I think. In the speaker connect room. So I'm from Hobart in Tasmania. So before I get started, Ricky Ponzing, David Boone, you all know about that. So I've been working as an Android developer for the best part of three years now. And one of the great things about working in mobile is that the field changes so much. And every job I've worked in the field, I've come away with a different and interesting story to tell. This one's about the job I work for currently. I'm going to be talking about the challenge of building mobile apps that run on multiple platforms. Now, I don't know about your experience, but mine is that for every time I've developed an Android application, I've been doing it alongside an iOS application of some sort. The project I'm working on is slightly different in that we have a really large common code base that runs on both iOS and Android. And I'd like to explain to you how that's done. So now, when you think about cross-platform apps, the most important players are things like PhoneGap or Titanium or Accelerator, things like that. These produce 100% cross-platform apps right down to the UI. Now, I'm a view of that making apps 100% cross-platform doesn't lead to the best results on any platform that you can target. You need to make separate design decisions for each platform, and that usually involves using each platform's native UI kit to make the best possible app you can on any platform. But you already know how this talk's going to end. You've read the title of the talk, you've read the abstract. This talk is about making cross-platform apps with native UIs. By having our core logic be portable, but by having UI in the native toolkit of the platform that you're using. And the platforms that we're going to look at today are iOS, Android, and Android. So, yeah, that's the talk. You can do this. It's great. Do it. It's completely possible to do this. It's a good idea. We're shipping an app that works on both iOS and Android, and the bulk of its code is the same. So what I'm going to focus on in this talk is something completely different. I want to know how we got to this point. So the talk I'm going to talk about is things that I wish we'd known when we started on these efforts, lessons that we've learned, and design principles that we've adopted since we started this project. What do you need to do in order to design an app that can run on multiple platforms? So rather than looking at code, I'm going to be looking more at engineering concepts instead. And the most important thing that I want you to take away from this talk is an understanding of modularity and software design, what it is, how to spot it, and what it lets you do. The payoff for this talk is that you'll understand the engineering tools that are necessary to make cross-platform code. So we're going to cover three things. The first is some engineering theory, how to think about app design to make your code portable. Then I'll show you a possible pathway to making portable code that runs on both iOS and Android. Once you have usable portable code, you can put a UI on top of it. And then we'll look at some design patterns that make designing portable code much easier. So let's begin. First up, we're going to talk about how to produce a modular piece of software. I'll cover some ideas that hopefully you've seen before when writing software, but I'd like to do a good job of linking these things together in your mind. So you'll hear at a mobile development conference. So you'll probably know about mobile development, right? What's astounding to me is that mobile development is only really a new field. Mobile development, as we know, it didn't really happen until 2008. That's when the first iPhone SDK came out and the Android version 1 came out in the same year. Now, five years is quite a long time in computer terms, but I want to go back even further. We want to go back to 1974.  James Bond was a comedian in fled trousers. Richard Nixon was running the United States and this man here wrote a paper called On Scientific Thought. Now, this man here is Edgar Dykstra. You've probably heard of his algorithm and things like that. Well, he wrote a paper in 1974 in which he was asked how best to analyze a computer program. Now, he noted that for any program you can consider any number of things as worthy of analysis, but that rather than considering them all at the same time, it's best to analyze things as a sum of their parts. Considering each aspect separately allows you to think about how each part of your program works in isolation, and then you can only think about two aspects when they interact with each other. This thing has come to be known as a separation of concerns. You might have heard about that. Now, Dykstra was actually asking his talk how to analyze the performance of an application, but these days we think about separation of concerns as dealing with different subsystems within a greater application. So what is separation of concerns and why do we care about it? Well, to answer that question, we first need to know what a concern is. According to everyone's favorite knowledge source Wikipedia, a concern is anything that has an effect upon the system as a whole. It could be something that interacts with a database. It could be something that displays things to a user. It's basically anything that can affect any observable part of your application. That's pretty vague, so let's look at things that don't have separation of concerns. Or actually, firstly, just separation of concerns is the act of dividing things in your application. So each observable part of your system is dealt with by a different piece of code. And in particular, separation of concerns means that you can design each aspect of an application separately from each other and only have these aspects interact when absolutely necessary. So here's an awful diagram to explain what doesn't have separation of concerns. An app where concerns aren't separated has all the features of the application in one logical piece of code. Now, if you've seen really bad PHP scripts, you've seen something that looks like this. This is something like SQL queries on one line followed by outputting a line of HTML on the next line. The concerns of querying the database and outputting information aren't separated there. An app which does have separation of concerns has several logical units of code that are only joined at a very small point. Now, the point where these two separated concerns meet is called the interface. Now, when you're talking about designing code, this is called the Application Programming Interface, or API. So the key observation at this point is that if you have code that exhibits separation of concerns, it is modular. So we know what separation of concerns is. Now, what's important is why you'd consider it as important at all, why you should consider it. So say you have a massively multiplayer game of some sort. I'm not going to name any brands here. Sending stuff across a network is a pretty important feature of apps like this. Because it's multiplayer on online, you need to communicate with other players over a network of some sort. So you're going to need some sort of network to send things over. Now, say you've also got on the same thing a banking app. Internet banking applications need to contact your bank so they can find out how much money you have. Now, these things seem like they have completely different purposes, but they've actually got a pretty core feature in common. They like to send stuff over networks. So you can think of these apps as something that sends stuff to a place, but you can think about it differently. Instead, you can think about what you want to send and where you want to send it. These are two separated concerns separated by an interface. That interface is your TCP IP sockets library. Because basically to an Ethernet cable, there's no difference between a banking app and a game. Now, this is a pretty powerful idea. You might think of this as trivial, but until very recently there was no difference in terms of how things worked between the telephone and the telephone line. Once you had the idea of separation of concerns, you got the Internet. Other examples of separating concerns is, for example, a splitting CSS from your HTML and your web pages. And this is just a concrete example of separating information from your presentation to separate concerns. Now, to conclude our discussion on modularity, there's one more thing I need to explain. The consequence of making modular code is the existence of a thing called coupling. So when an interface, that's some code in one module needing to interact with another module, and when that interface is implemented, this generates a point called a coupling. Couplings are two points or a point where two modules become unavoidably linked. The more coupling is required between two modules, the less separated the two modules are. So coupling comes or has many consequences, and I'm going to describe two of them. The first one I'm going to refer to is breadth. Breth refers the full range of places that you need to implement in order to fulfill an interface. So where all the joins are between two modules. If you have two features, then broad coupling means that you have lots of points that need to be joined in order to communicate between the two aspects of your code. In object-oriented terms, this means you have lots of methods at your interface, and each method communicates a very small amount of information. If your coupling ends up being very broad, then there's effectively no difference between each module. They're the same thing because they're joined together at every possible point. So there's no point in separating it. Now depth refers to the amount of stuff that you need to communicate at a single interface in order to get information between two parts of the system. Deep coupling is code that minimizes the number of coupling points, but in doing so has to provide a large amount of information at each coupling point in order to make the interface work. These in object-oriented terms look like methods with lots of parameters or parameter objects that contain the information that needs to be transferred. If your coupling ends up being very deep, then it means that you're basically transferring all the state from one module to another. Basically, no modularity there, either. So the takeaway message here is that the stronger the coupling between two things that could be modules, the less you can consider them as separate parts. So here's a graph to help you figure this out. If you have deep coupling, then you maximize the amount of information transferred at the interface at the expense of ways to transfer it. If you have broad coupling, then that maximizes the number of points where information can be transferred at the expense of making your interface more complex. So the ideal is to minimize both the amounts of information that needs to be transferred, as well as the number of points where it can be transferred. So in summary, if you have flexible code, your concerns are separated. Now, if you have separated concerns, you can view your code with much more modularity than you would have before. And coupling is the result of needing to communicate between modules. You should be able to reduce coupling as much as possible. So we know that a modular program is one that features strong separation of concerns. Now we're going to see why this way of thinking is so important to producing maintainable cross-platform apps. So if you have a project that needs to maintain clients on multiple platforms, you then need to figure out how to make the same logic for each platform. Now the trade-off is always going to be between being completely cross-platform, which means that you don't have an app that fits in well with the rest of the apps on your system, or writing the entire app for each platform, which is going to double your code base, means you have to test everything twice.  So the alternative is to make it so that as much of the same code can be run on multiple platforms. So let's look at how you would do this. The first step is to choose a language that facilitates deploying code onto multiple sorts of devices. Now we're all Android developers here, which means that we're pretty comfortable with coding with Java. But the problem is that if you have a huge Java code base with lots of rich functionality, this is not going to help you on iOS because iPhone developers are going to be writing all their stuff in Objective-C. So if you begin in the native language of any platform, you're going to end up with a code base that doesn't run on the other platform. So writing everything in Java, it's not an option. So to figure out what language might be appropriate, let's consider what features we have in both languages. Now both are object-oriented. Now I say here garbage collected, that's not strictly speaking true for Objective-C, but it has automatic memory management that's close enough to garbage collection that it doesn't really matter for our purposes. And both have effectively static linking, so the names of methods within your classes and the names of your classes have to be fixed at compile time. So for Azdec docs, which is the application that I work on, we chose C++ as our code base, so that's what we're going to be talking about today. I personally don't really like C++ that much as a language, but as a language for a common code base, it actually makes a lot of sense. It has most of the features that I've just described. C++ mostly has manual memory management, so out of the box it's not quite as usable as a common language, especially for Java, because if you're putting Java objects on top of C++ code, you expect garbage collection to work. So in our case we use Boost Smart Pointers. These give us automatic memory management and the semantics are close enough to garbage collection in Java that it's close enough that you don't really care. So let's talk about using C++ on mobile platforms. If we're going to make an app with logic written in C++, then what we end up with is basically on the right, you have an Android app that uses a standard Android UI toolkit and you write your UI code in Java. And then you have your common logic code written in C++. Then if you want to make an iOS application, this looks pretty similar, except instead of writing your UI code in Java, you write your UI code in Objective-C using the iOS framework. Now getting C++ into Objective-C, this is surprisingly easy. Objective-C is just a thin wrapper on top of C and you can actually embed Objective-C calls in basically any language. So what about C++? Well, that's pretty easy. There's a language called Objective-C++. You just embed your Objective-C calls inside C++ code. The code compiles as you expect it. So this makes it really easy to take advantage of C++ from within Objective-C. Perhaps too easy. It basically just works. Now the situation in Android is considerably more complicated. If you want to make this process easy to manage, you have to spend a bit more time thinking about how to make things work. So let's take a look at why. Android works in a managed environment. It's kind of sorta looks like a Java VM. You write your code in Java. You execute it on this magic, not quite a JVM thing called Dalvik. Now despite not being a Java virtual machine in its entirety, it still provides a lot of features of Java. You get this thing called the Java-native interface. And when you combine that with the native development toolkit for Android, it lets you take advantage of code that is compiled down to machine code from within the safe managed constraints of Java. So basically it works like this. You declare a method as native within your Java code. The JNI figures out what function you need to call within your C library.  Easy. Now the problem, it's not actually that easy. The problem is that the JNI is actually quite complicated to write. This is a simple function that just takes a string from Java and then sends it back to you from C. C++ in this case. And for just for a simple function like this, there's already three complicated things that you have to do. Firstly, you have to get this method name up the top. Absolutely right. So this has the name of a class that your stub in Java is going to be in. It has the class name. It has the method name. This stops you from refactoring easily because if you change the class name, you change the method name. You have to find the C++ method and change its name as well. Getting variables out of Java land is also really difficult. It's got a complicated API with lots of words. And you have to manually manage your memory from within C or C++. So if you have any degree of complexity at all within your native code base, it's going to be impossible to get this right and maintain it. Once again, refactoring is really difficult and that's something you'd like to do within Java. So instead it makes much more sense to automatically generate code to bridge the gap. If you write your native cross-platform code in C++, then you get a tool called Java CPP. And this generates C++ code that matches the Java native interface for you. So you can make Java classes match up with your C++ interface. So Java CPP lets you construct wrappers. Sorry, wrappers. Yeah, wrappers are classes that you implement in Java. These contain instructions for Java CPP to generate your JNI code for you. Basically, you write one Java wrapper class for every C++ class that exposes an interface that you need to call. So to give you an idea of how simple this is, this is a C++ header class stub with a really bad set of indentation. So here's your public interface methods in C++ and here is the Java CPP implementation of that. All you need to do is declare each method that you want to generate code for just by saying this is a native method. You need to tell Java CPP what the name of the C++ class is and you need to tell Java CPP what C++ headers to include. These are all done by Java annotations. So basically all the configuration is actually done within your source code. You needn't even worry about there actually being C++ code there. It's really cool. This spits out a C++ source file that you can compile with the NDK. If you're using boost smart pointers, which we do because it makes our memory management easier, all you need to do is add this extra information. You say that this is wrapping a boost shared pointer instead of just a straight class and you need to say how to actually access the method on the C++ site. Once again, everything done with Java annotations. It's really good. So what you end up with is something that looks like this.  Now it should be clear to you that the interface here is the point where you do the wrapping between C++ and Java. So that means that whenever you change some C++ code that touches the interface, you have to update the matching Java code. So if Java needs to get some data out of C++ land to display things, then you're going to need to wrap a new class or method. So this increases your maintenance burden at the interface. So what I'm saying here is that every point where you need to relate between C++ and Java code, you introduce an unavoidable point of coupling. The more classes and methods that you need to wrap, the more broadly coupled the two aspects of your code, the portable core, the native UI, the more coupled they become. So if you don't think about structuring your interface correctly at the start, then you're going to have a difficult to maintain tightly coupled mess. So in summary, UI versus logic, all depends on the separation of concerns. And if you want to make your Android code talk to C++, you need to have wrappers, and wrappers introduces coupling. So we now know that if you decide to split your logic and your UI into a portable section and a native section, it's easy to end up with a difficult to write mess that's tightly coupled and is in two languages, which makes it even harder to maintain. So to finish up this talk, let's look at some design patterns that can help you think about how to separate your code into native and portable sections. So to remind you, we do this, we have design patterns to make it obvious how to separate your concerns. And what we're caring about separating is separating UI and logic. So the first one, you've probably heard of this one, it's MVC, Model View Controller. If you do iOS development, this is basically the pattern that iOS does encourages you to do to natively structure your app. So basically this involves separating each of your code into a model, which deals exclusively with the storage of data. The view, which deals exclusively with the display of data and taking inputs from your user. And the controller, which intermediates between the two. So in reality, the code is actually meant up more like this. Model connects to the controller, connects to the view. So if you're trying to separate between portable code and native UI code, then the interface between the two should probably sit between the controller and the view. The problem with MVC though is that it doesn't define a way to link up your view and your controller. So this means that the coupling between the view and the controller can be very strong if you don't plan things well in advance. If you need to write a wrapper between the controller and the view or you haven't planned on how you're going to link things up, it's going to be difficult unless you've actually planned to wrap things. So this problem is solved by a newer approach called MVVM, Model View Model. The point of MVVM is to make sure that there's a standard interface between the low level code and the display code. So as with MVC, we describe the components of MVVM in the wrong order. It actually looks something more like this. You have the model, which connects to the view model, which connects to the view. The basic idea is that you have a model and the model may actually also include the controller and a view. And the difference is that the view code and the low level model code is joined by a new class called the view model. Now the role of the view model is to give the view the set of information it needs to display stuff. And the view can set properties on the model to update the underlying code. So this means the interface between cross-platform and native code becomes between the view and the view model. But the difference is it's really obvious which bit of native code to wrap. You wrap the view model. It contains everything that the UI layer needs to be able to update things in the underlying code and to receive information from the underlying code. If you've used Django before, the Python web framework, you may be familiar with something like this. You have a model and a Django view, which is basically a controller, and you export data to the web through a view model that is used to render a template. Another pattern that we've adopted at ASDEC docs is to use a published subscribe event passing model. So the way that published subscribe works is that in our case we have an aggregator. Bits of UI tell the aggregator that it has an interest in certain types of events. So when an event occurs somewhere in the app, we publish that event to our aggregator, and that tells all the UI events that are all the UI aspects about the event. Now in practice, the events get raised on the portable side, and events get listened to on the UI side, which means the aggregator itself becomes the interface between the portable code and the native code. And this means the only things that need to be wrapped is the aggregator itself, as well as the different types of events you pass across the interface. This approach reduces a lot of coupling between the UI and the portable logic. So this is the point where I actually talk about the stuff I do in my day job. So I work on a file synchronization and management tool for business users to set docs. Now pretty early in the product's life, the decision was made to structure our code so that we had a portable core and a native UI. This is because we do a lot of things relating to correctness and security. Bugs can be shared across multiple platforms, so if we see a bug in one platform, we know that we can fix it in the other. We can make the same security guarantees about every platform that we target. And we're also a very small team of only, well, seven developers now. If we couldn't target multiple platforms, so we couldn't target multiple platforms if we didn't have substantial reuse of our code. Now, we pride ourselves on making an app that actually looks good and works well on both major platforms. We have a tool that looks at home on iOS, which is where it was originally designed. But we also have a version that looks great on Android. For that, we've needed our UI to be native and idiomatic on both platforms. So we have clients that are actually out there in the wild released on both iOS and Android. We actually have two iOS versions. We have an iPhone version and an iPad version, as well as the Android version. This approach separating portable core, our portable logic, and our UI as native has worked surprisingly well for us. And that gives me an opportunity to explain some lessons that we've learned. What we've learned, where things can improve. The first thing is that you should design to be portable from the outset. We made the active decision to make our apps work on multiple platforms. This means that we made active decisions about what code belongs on a single device and what code belongs on all devices. Now, sometimes we get these ideas wrong. These design decisions were incorrect. When we discover that we've made the wrong choice, that is we've put too much logic on the platform-specific side of the code, when the next developer goes and writes that functionality, instead of re-implementing it specifically for that platform, we take it down to the portable level so that if we come and have another client later on, the third person developing doesn't have to completely re-engineer everything again. Re-engineering functionality, a whole heap of times, this doesn't scale. You need to plan for things to work in multiple languages. C++ is a really complicated language as we've discovered. If you do things that depend on C++'s language constructs, its semantics, then that's not going to translate very well down to Java. Java doesn't have standalone functions. It doesn't have function pointers. It doesn't have copy construction in the same way that C++ does. If you want to write code that wraps C++ and the C++ code uses weird features that don't have an analog in Java, you're going to have a difficult time. So make sure that you only use constructs that have analogs in every language that you're going to be writing your UI code in. Plan for wrapping, figuring out how to wrap a C++ class effectively is a really large sync of developer time. It turns out that designing for iOS in the first place was a really bad idea for us because there's no real effort to call C++ stuff from within iOS because you have Objective C++. It's all the same language. So you need to think about how you're going to separate your code base in that case. Starting on Android first, really good idea because it's so difficult to figure out where the interface is. That means you actually plan more when you're doing the stuff for Android. So thinking about how C++ classes will look in another language is a great way to figure out what features of your common language to drop. So things like operator overloading don't work for us. Copy construction also difficult. C++ is a surprisingly unopinionated language as well. It will allow you to do basically anything you want within reason as long as the language... There's a feature in the language that lets you do it and there probably is. So decide what features of the language you want to use. Figure out what your design goals are for your project and then choose a subset of that language that will let you achieve these design goals because you're going to have multiple languages calling your cross-platform code. Also, make it really clear what code provides logic and figure out how a UI can attach itself to that logic. The most important separation of concerns you have when you're separating your portable logic from your native UI is between UI and logic. So choose design patterns for your interface that make this separation really, really clear. Model, view, view, model works really, really well for us in this case because it gives you a really obvious target point for what you're going to wrap. So in summary, structure your code to avoid coupling. Where your UI needs to get stuff out of your logic layer determines where the coupling is going to happen. Reduce the amount of coupling that you have and it's going to make it easier to write the UI. So aim for simplicity in the cross-platform interface. So in conclusion, that basically brings us to the end of the talk. We now know that you can write apps for each platform with a native, consistent UI for each platform, but with a substantial common code base. So how do we get there? Well, we started off by looking at the separation of concerns, which is basically the key idea in this entire talk. It's the basis of making modular, manageable software. And this is true because separating concerns gives us modularity. It gives us a chance to manage the complexity of a code base and the interfaces within it. And it results in easier interfaces to understand and to write code for. It also gives us portability. By separating concerns, it can make part of our code run on one specific platform but keep the rest of our code deliberately cross-platform. And that is the end of this talk. I have office hours at SpeakerConnect 3 p.m. today and 2.15 p.m. tomorrow. I've also got a talk on tomorrow on writing web services, which I strongly encourage you to come along to. So that's the end. Are there any questions? So can we get a mic over here and then there? So, yeah, over there first. Hello. Hi there. This is Pankaj here. So you talked about how to use common code which would be built in C++ on platforms like iOS and Android. But what about other platforms like, let's say I want to use the common code based on Blackberry and Windows as well? So, yeah, I mean, what do you think? I mean, so the answer is we were targeting originally can use C++ using the G++ compiler. Our iOS code base now compiles on Clang. So we made sure that our code works on multiple compilers because when you're writing code for Windows you only really have one option and that's the Microsoft compiler. And I believe we're working towards getting Windows working and our portable stuff worked as well on Windows as well. File system differences are like behavior file systems was our biggest hurdle, I think. But, you know, the approach works. It works on every platform we've extended it to so far. So the next question is there. Any idea how the C++ approach compares with using Csharp as in Xamarin? So we haven't tried that one because basically we only have a C++ code base. I'm not completely sure. I haven't looked at how the Csharp stuff works from the point of actually connecting the native Android UI toolkit into Csharp. I haven't seen if there are any bindings for that. But I believe that would be the biggest hurdle that you have. But that said, it's zapping, did you say? Zapping. Okay. So I believe that provides its own UI toolkit as well. So if you're using Csharp, then use the Csharp toolkits. That's not the approach that we talk. We wanted to use the native UI toolkits for every single platform. Hey, anyone else? Okay, one there and then there and then there. Hi, my name is Santosh. Hi. How does this approach vary from hybrid applications which is commonly out there, like HTML5 and stuff like that. So the development cycle and the way it is modular. So what do you mean by hybrid applications? I mean developing using HTML5 CSS and JavaScript and using something like PhoneGap or Titanium tool. So my view on things like PhoneGap, Titanium is that you can produce an okay app on multiple platforms but because the UI toolkit is sort of targeting the common subset of both platforms. You can't make something that's really idiomatic on each platform that you target. So if you want to make something that's really well behaved on every platform you've got to produce a native UI for each of them and I don't think PhoneGap or Titanium either of them produce something that would have worked in our case. You mean it's not more native? Sorry? It's not more native, is it? Something which using PhoneGap is not more native than what we do here. Is that what? Well yeah, PhoneGap, Titanium don't really produce something that's native enough. Okay, thank you. So I think there's one more over there. Hi, I'm Srikanth. So one interesting question I have is that why not JavaScript as a common language that powers this common UI logic and all this stuff? So I think I can say C++. I love C++. But what I felt is that this modern operating system, the mobile operating systems basically are making JavaScript as a first-class citizen. Once again I don't think JavaScript would have worked in our case. Just because we have we needed performance in searching and crypto and stuff like that for us, but it's something that can be done I've heard of other people using the JavaScript engine that's built into the platform as a way of doing the common code base. So you can do that in our case we didn't. But the concerns are still the same. Okay. One more? I'm trying to do something similar to what we have accomplished but then what I'm targeting is Windows, Linux and Android. But then the problem that I'm facing is basically that the threading part is just too complex to be managed from single library. Say we are developing using C++ but the problem is say if you just target using Linux you can use pre-threads but then the threading is different for Android. You don't have that concept exactly the same concept that you have in Linux as well as it's a different ball game. Okay. Or else the thing is if you use threading on the Java side then you'll have to make sure that you don't get those ANRs and all that. So you're talking about making sure that things behave responsibly on the UI side as well? As well as on the logic side because threading and network requests Right, so in our case what we actually discovered was a good approach was to do the threading and related things actually on the Java side and provide a C++ interface back into that. Judiciously choosing what bits of the Android toolkit and likewise the iOS toolkit to make use of and providing interfaces from C++ back into the native options worked quite well for us as well. All the threading is managed on the Java side That's it. So threading is managed on the Java side. One more question is have you used the Java native access? Sorry? Java native access? No. Cool, so I... Oh, one more? Okay. Let's go for this one, make it the last one and then we can have lunch. So you don't like using a C++ is a good idea to complicate a language to learn in the first place then it becomes difficult when you introduce templates and other things and in order to become a good C++ program itself takes a lot of time and developing an application in C++ also means the development releases time will also get increased. How do you justify the cost in that? Yeah, so C++ was I agree, it's a really complicated language. You can pick subsets of it though that make it easier to code. Pick something that translates well with Java and you end up with a C++ that's manageable so you don't do weird things with constructed behavior stuff like that. Using smart pointers gives you better memory management semantics than you would otherwise get. Basically, if you code free for all in C++ you're not going to be able to wrap it in Java because there are features in Java also C++ that don't translate down to Java but using the set of C++ stuff that you have actually makes it a lot easier. The other thing is that if you're going to go for native compile code you don't actually get that many choices. You get C++ and if you use a weird forked NDK you might get Objective-C as well. You've got to pick what the NDK provides if you want compiled code and you can either go for not object-oriented at all with C so super complicated with C++ you take your pick. C++ works well for us. You just have to be disciplined in picking the subset of features that you use. With that, I think I'm not going to keep you from lunch anymore so thank you all for listening and I hope you enjoyed the talk. Come see me at Speedy Connect 3 o'clock today if you have any more questions. Thank you.


Meet American woman who has stolen actor Guillaume Dabula's heart. Generations the legacy actor, Guillaume Dabula who plays the role of Kumkani Gaddafi Kumkani is a heartthrob and it is mostly because of his physique. The actor is always on the man crush Monday, MCM, list for many South African women, but he has recently confessed his love for Shaqari Richardson, an American track and field sprinter who competes in the 100 meters and 200 meters. Of course, the actor is a married man, but we reckon his love for Richardson has more to do with her physique and her athletic skills. Taking to his Instagram, we all posted a video of the sportswoman alongside a caption that read I'm in love. In 2019, Richardson rose to fame as a first year at Louisiana State University, running 10.75 seconds to break the 100 M record at the National Collegiate Athletic Association, and CAA, championships. This winning time made her one of the 10 fastest women in history at 19 years of age. Just two years later, Richardson ran a new personal best of 10.72 seconds, becoming the sixth fastest woman of all time and the fourth fastest American woman in history. However, at the beginning of this month, it was reported that she had tested positive for a substance that is the main psychoactive component found in marijuana, this after her 100 M final at the US trials, invalidating her results and making her ineligible to compete in the 100 M at the Olympics. After successfully completing a counseling program, she accepted a one month period of ineligibility that began on June 28, 2021. In February this year, many women were heartbroken after reports that he would be leaving generations, the legacy. But he vehemently rubbish those claims, saying he is staying.


Hello everybody, Edward Lauren here. Today we are going to be talking about the nocturnal readers box which is a horror themed subscription service that is charged monthly on the 15th of every month. Back in May the company began to have issues with illnesses and shipping. Complaints range from laughing off complaints, calling customers liars, unverifiable tracking numbers. We'll get to more on that later in the video. Missing items, broken items, and items not as described and changes to wording in TOS. Those are the allegations. I have spoken with Vincent Huara, if I pronounced your name wrong I apologize. I have spoken to him on Instagram and my interview with him is public knowledge and posted on my Twitter account. All links to all proof of everything said in this video will be posted down in the comments below. As of the shooting of this video, refunds have started rolling out if the customers are requesting them. At this time I am going to read through every email that has been sent to customers and newsletter subscribers alike since June 8th. I myself am not a customer but I do subscribe to their newsletters and I have received these newsletters myself. Links to these newsletters can be found in the description below. This first email was sent on June 8th of 2018. It reads, update. Okay so I have the shipping manifest for June updated and shipping will begin tomorrow. This is important to note for later. The shipping manifest for June updated and shipping will begin tomorrow, Monday June 9th. I have to wait six days before July can ship but everything is ready to go for it as well. Thank you all so much for those of you who have had patience with us while going through this difficult time. It honestly means the world. Then, king box production update. So we got in the cutting dies and they are perfect. The foil printing dies are still being worked and should ship back soon. I have a call with the publisher to see how long the process is after that comes in before I can get my early copy dummy copy for slipcases. Either way if you have not ordered it yet do so this week as we are ordering shirts soon and will finalize numbers with the publisher the week after next. So don't delay any further. Once again there are links to all these emails if you either want to read along or want to check my reading of them after this video or during this video. Next we are going to the email dated June 18th. Delivery update. Okay so we've had some delivery issues in the past but this is unlike any of those. This is going to be important come later when I ask Vincent about previous issues. Last week was basically a wash as everyone except myself was out with the flu. One still hasn't come back and is in the hospital getting rehydrated. We are a company of five people so it's not something that we could have planned for or could afford to help but in all caps the crew is back in the warehouse and I've been told we have only a couple hundred left and tracking will go out tomorrow for those left. I know it sucks to pay for something and have to wait this long and we apologize for that. Hopefully when you get the box it will be worth it for you. I will be out most of tomorrow making sure we get all the tracking and stuff done so if I don't immediately answer your email I apologize. The giveaway is not drawn yet as we've been pretty busy but it will be announced by the end of the month and we don't know if you saw it or not but we added clowns to our greatest fears box so that's something that troubles you beware. King box. King box update. Everything is on track to ship early mid-July. It went to the printer and is being reviewed. It should head to the binder at the end of next week and our foil stamping should be done soon as well. I have a dummy book for those wanting a slipcase by next week. Super stoked. Last step is to print the DJs and big dust jackets and bind them and ship. It's going to be tight but we are working on it. We are moving on to June 24th. Okay this one is titled delivery update. Excuse me. Hey sorry for the lack of responses and updates. Vincent has been away dealing with some serious personal issues concerning his mental health. Everything got pushed back while he is working on coming back the right way. We are very concerned about his well being and in the meantime are keeping work away from him. He is a veteran and is going through a pretty dark time right now. June is all packed up and ready to ship but I don't have that kind of authorization so those leaving comments and messages asking why I just can't do it that is why because the manifest for shipping so many boxes cost a lot. For those who cannot wait at a minimum of a few more days, doctor's orders, we will issue refunds when Vincent gets back. July is also lined up and starts packing next week as well. We are sorry for the inconvenience. Thank you to all those that sent along well wishes. Vincent appreciates it very much. We love you all. June 30th. Coming home is the title of this one. Hey everyone. Vincent here. I have been sitting here wondering how to word this email for a while but I know one thing. I have to thank those of you who sent encouraging messages and emails. Some of you shared personal experiences and I have to say that it was a big reason I am getting through the darkness. There were also a lot of you who sent some pretty insensitive messages too. I understand that we are a month late but I thought if any community would understand it would be you. They are only boxes in the grand scheme of things. All I am saying is maybe think about what you send because we are a business but we are also people. We are people first. Also, hire more help, question mark. How much money do you think we make LOL? I will be back at home on Wednesday from the VA hospital which will be hard because of the fireworks but I will work as fast as possible to get June boxes out and hopefully along with them July. I am sorry that this has happened.  I got pretty close to the edge but the kindness that I received from some of you really helped me out so much. So thank you again in all caps and I know my family thanks you as well. If I didn't write you back it's because I didn't have my phone or computer. I will be offline for a couple more days but then we will get rocking and rolling again.  Getting the dark away from your brain. To anyone who needs to talk I will be here Wednesday and every day after that. If you want to talk and need my number just email me and I will send it. I truly know what it feels like when you get in a hopeless situation and I think I learned a few tricks. On to King Box Production Update. So far what I know thus far the foil dies and cutting dies were damaged in transit. I can post the email when I have more time so no matter the situation we would have been delayed anyway. They rush ordered more so hopefully once they get those I can finally get a dummy copy and they should be bound. It's a lengthy process so please continue patience and we promise you'll love it so much. Now we come to the email of July 24th. This is the day that the BOL the Bill of Blading for DHL this is the day before that piece of paper was printed. If you see down in the bottom left hand corner of that sheet it says July 25th 2018. I called DHL and I asked them about the BOL and there was nothing they could tell me beyond that it is a receipt for an order of pickup. This is the email dated July 24th. June slash July. Okay so June is gone. Not sure what you want from me to prove it to you but it's gone.   I am trying my damnedest to get those boxes out to you as fast as I can and it's really getting annoying to see this is in quotation marks. I have been patient enough now it's not scanning you never shipped it. Close quotes. That's insane. I don't understand how getting a tracking number could have the opposite effect. We'll talk about that in just a second. You get a tracking number and it won't update and now people are even more rude than before. We'll come back to the tracking information. Here is the process. The warehouse is only so big. One month will get staged. All the tables set up again and boxes lined up on the wall and under the tables. We usually line up 10 to 12 items per box. The art and the pins are prepped, put into sleeves and packing. We build the boxes and pass off the boxes so each area can have an item put in. That was before all caps. We only have three people right now and are working on hiring more so we are all walking down and putting items in which is much more time consuming. Boxes are taped and labels are placed. That's important also. They are then put into large Gaylord boxes and are shrink wrapped. This is done currently 19 to 22 times based on if we use the larger box. By the time we are done all the tables have to be put up and everything get moved out of the way because the pallets take up all the space. We call to have the freight picked up and then it is shipped to the nearest sorting facility. They will unpack it and scan each in and then it goes where it needs to go. I'm going to stop here and I'm going to fact check something that is brought up earlier in here. He says that insane. I don't understand how getting a tracking number could have the opposite effect. Regarding the tracking number. Packing slips are put onto each and every box. He says this. Boxes are taped and labels are placed. This is where the tracking information comes from. You do not have to pay for shipping. This is per DHL. I talked to them twice yesterday, once in one phone call and then I called back again and talked to somebody else to confirm. You do not have to pay for shipping to get a tracking number. All you have to do is order a package of packing slips or go down to your local post office and grab a stack of tracking stickers and those will have tracking information on them also. We have no control at this point what they do or how long they take. Do you want me to wait until they are scanned in before sending the tracking? Last time I did that people didn't like it. Now I send it when it leaves and it doesn't scan in fast enough and people call us liars. Which one is it? I need to note here that some people have received their boxes. So some were shipped. But there are quite a few people who have tracking information that has not updated at all whatsoever. Supposedly the label was purchased back in May and it was supposed to ship out on July 18th. The BOL was ordered bill of lading. That receipt is from July 25th and as of recording today on August 11th none of that has been scanned in by DHL. People I am in the process of catching up. I am only one person. You either want me to get the boxes out faster or be on the computer writing emails. I have tried to make a day or two to get back to answering messages and emails but again I only have so much time. I've already explained that we are hiring others but I can't really do that with how much we are doing each day. So July is being staged on the tables. That's where we are with that. Also for some that are saying that they didn't get tracking numbers. If you ordered in June then you got a July box not June. So you won't get a tracking number yet. If you order a June box and didn't get a tracking number try your spam and email us if you can't find it. Please.  Don't take this as hostile. It's not. It's written in haste so I can get back to work. Also I will not be accepting any incessant posts on our page. If you have a question ask it and I will try to get back to you within 48 hours. If you just want to demean us or call us liars you will be deleted and blocked. So he's gone on to censor his page. King box production update. I was working on getting an update for tomorrow but as of now the dies are in we are just waiting on production. Anyone who has ever gotten a customer book knows that this is how it works. But for those that don't sorry a custom book knows that this is how it works. But for those that don't we are just waiting on production to be done. It's a highly custom book so it's no easy feat and takes time. It's a pre-order so those messages asking why it hasn't come yet that's why. Now we were talking about in email sent out from July 27th entitled tracking. I am aware that a good chunk of you have not had your tracking numbers update yet and that is a problem. I am looking into it and working with DHL to see if they can be located and updated.  I apologize for the delay in the update but we are working to make sure that they get to you soon. I spoke with DHL about this and DHL said the only way that the tracking would not update at all whatsoever was that they were never scanned in to begin with. July we are finishing packing the art prints and pins and we'll be working tomorrow to build the boxes. We were going to get some out today but we have been working at full steam and didn't make the cut. Really think you're going to love it. Seeing everything put together is pretty creepy. More updates on everything soon. We are finding our rhythm and know it's taking a little longer than I'd like. I think we can get up pretty soon. Now we are talking about an email from July 31st entitled tracking. Okay so I put in a ticket with DHL on Friday and got a call back yesterday saying that they should all be updating in the next day or so. They didn't say what happened or why and when I pressed the guy just said that he quote is not sure can't see anything about it in the system. This is correct that that is the same thing that DHL told me. So I really have no idea. Again for those still asking the question if they have stopped if they have actually shipped yes we have not had them in the warehouse since the 18th or 19th. More than half have already gotten their boxes and that's awesome but for the rest I am truly sorry. We have had poor service from DHL in the past but never like this. July all the prep was completed on Saturday and we started packing yesterday taking a little longer than we wanted but we should be able to get a bunch out this week. I will try and get to most emails and messages that I can tomorrow when I sit down for a breather until then we are going to be chugging along trying to get all this horror to your door. King box we are well into full production now and things are going great. I do not currently have a timeline but since I was away for a while I and the dies had to be I was away for a while I and the dies had to be replaced I think that we are a couple months behind. Store orders if none of the above pertains to you then you may have placed an order in the shop. Details in the last email we noted we don't have tons of room. This is very much the case when we are getting monthly boxes out. In between that we will ship shop orders. We will get to these as soon as we get the rest of our stuff out of the way. Now onto the dispute part of this email. This is important because this is brought up in the interview that I will be talking about that I did with Vincent at the end of this video. For those of you who have been unwilling to wait for your order and have placed a dispute with your bank please read the terms of service listed on the site before all caps doing so. We are not responsible for any fees that you will have to pay associated with you feeling filing sorry a fraudulent dispute. This is important because the terms of service wording were changed slightly. I will provide proof of that in the twitter thread down below in the description. Then he gives the the address of the nocturnal readers box terms of service then specifically the first few paragraphs and the shipping policy. It's also located on your welcome email shop email checkout screen in parentheses the box you click to agree and checkout cancel email home screen and footer it's not hidden in any way whatsoever. Moving on to an email dated August 3rd DHL is titled DHL so I have seen the emails and comments and unfortunately they DHL have been giving me random excuses as well. I sent them the freight bill that showed them that we sent it to them and then today magically in parentheses they said quote we may have routed it to the wrong facility quote now this is interesting because nothing was ever scanned in I heard back from them again about 55 minutes ago that is in fact what happened I will have a new bill of freight to send in a newsletter on Monday to show what a horrible mistake DHL made I know this doesn't fix anything just yet or get you your already incredibly late box but hopefully it helps a little that they were actually located now we just have to hope they fix the error again it is important to note that DHL has no history of these packages much less that they were received much less that they were sent to another facility the people who have tracking information from may some of those people have not been updated at all again I do not have a complete number of how many people are still waiting on packages I understand that this is disappointing and we are more than sorry you know we apologize for the inconvenience we hope you understand thanks for those who have stuck with us we appreciate it and for those who haven't we wholeheartedly understand and appreciate you giving us a chance through this incredibly difficult time we have hired a few extra people to help and hope to have everything back on track very very soon Vincent July July is almost finished being packed we are working with one of the subscribers to try and not use DHL for July we are going to propose something to you I've asked a few subscribers and rather send out the tracking when we send the pallets out to the facility we will wait for a few days until they at least arrive at the facility and hopefully we will use a new shipper for them I am crossing my fingers and finally before moving on to the interview I did with Vincent this is the last email update that was sent out on August 7th update so as an update to the previous newsletter this is what I found out the BOL shows that the pallets have made it back to the sorting facility I was told that they will be scanned in tomorrow now I don't know if it was because I don't have the customer or account number I wasn't told but the BOL cannot be tracked at all as far as what DHL e-commerce told me was the number at the bottom of the BOL and the there's another number below the blacked out customer and account numbers but neither one of those numbers can be used to track the actual bill of lading or the packages whatsoever only the tracking information can be used to track now I have been told this before but we have a pending claim file that begins on Friday so if they do not have them shipped by then they are being charged for the full cost of the boxes we will then be getting them back and offering refunds where possible I know this doesn't fix anything just yet I know a bunch have received their boxes a while ago but for those still waiting for June I promise that we will do what we can afford to do to make it right whether it be a partial refund discounted future boxes or some other measure not yet discussed I understand that there are some who are filing disputes and that is your prerogative this is important but just know that our terms of service are clear on this these are the terms that you digitally sign when checking out I promise that this is in place not to screw anyone over but because we have already used your funds to purchase your goods meaning that if you dispute that money if you dispute that money comes from my family's pocket yes they are extremely late and we were working on this but we cannot be responsible for fees that you will undoubtedly pay for filing a fraudulent dispute again thanks for those who have stuck with us we appreciate it and for those who haven't we wholeheartedly understand and appreciate you giving us a chance through through this incredibly difficult time we have hired a few extra people to help and hope to have everything back on track very very soon on to July July is packed we got the initial rate of our size and weight for our boxes from ups and the rate is about a dollar eighty four more than it is currently I think for most priority from us ps with suffice instead but nonetheless we are working on getting a quote from them on freight shipping as well this should take no more than a few days to negotiate and a day or so to create a test label to get in the system to ship august is almost in we made a minor change to one item and had it remade so will be available soon and that is it for the emails a couple things of note that I'm going to bring up along with my interview so if you want down there in the description if you want to read along it is proof of interview I shared screenshots from my interview with Vincent on Instagram and Vincent was aware that I was going to be using the information in a in this video here now I posted on Instagram a call to anybody who had stories or any factual proof of the things that were going on with the nocturnal readers box I also tagged nocturnal readers box and asked them to give me a statement regarding the problems that were popping up things that have been said responses to customers and at first they were understandably defensive I guess is the best word for it in fact that's the word that he uses here after a while after the thread started getting busy I received a direct message from Vincent and what I am about to read is exactly what is said there is proof of this in the description down below it says proof of interview and it's currently posted on Twitter so Vincent says at this point I did not know this was Vincent I don't get to that point until later on in the interview the underlying reason for all this is Vincent speaking the underlying reason for all this is just what I put in the newsletter we were sick then I had a bout of depression and PTSD that put me in the hospital who feels attacked I have never attacked anyone if you have a screenshot then it's false I'm not sure what what he's asking about because down in the comments of that video I say that there were that he felt attacked so I'm not exactly sure what and I'll link to that post down there in the description I have never attacked anyone if you have a screenshot then it's false I say any comments toward threats to charge people's cards for fraudulent claims when they haven't received products because this is this was people's concerns they had not received boxes for June or July and they were concerned so they were finally in disputes I go on to say and why Vincent was the only one who could ship Vincent comes back and says I'm not making any comments again I think this whole thing you are doing is kind of gross I go on to say you messaged me Vincent's responds to find out who felt attacked because you're likely going to put out false information I respond video will be up next week feel free to respond any way you see fit I am trying to tell both sides you being unwilling to cooperate doesn't help that Vincent returns okay whatever put out false information that is what people were talking about on the photo there were several supporters of Vincent that I hadn't made this video yet that were coming to Vincent support thing I was just going to drag his name through the mud that is not my intention unwilling for what I said what I had to say in the newsletters if someone took it the wrong way or chose to feel personally attacked what am I supposed to do if I don't know who it is I wasn't going to give any information also I wasn't sure who he was talking about I wanted to keep the interview on track so I said why won't you answer my questions Vincent comes back and says the answers are in the newsletter I say answer the questions I posed is all I'm asking those newsletters don't look good for you give me a better explanation clear this all up you have to realize that those newsletters are why people are mad you've been combative and unprofessional Vincent comes back and says it's okay be sure what you were saying is correct is all I'm saying I'm not combative at all defensive yes it's okay though for real you do you I say thanks for talking to me Vincent comes back and says legally make sure what you're saying is true that's all I'm saying and that's not any threat it's just saying cover your own butt I say won't be an issue I'll only be using what's public on your own thread and emails you've sent if you'd like to clarify anything by answering the questions I asked my DMs will remain open this isn't a smear campaign it's a sharing of info if you would like to add your own info in your own words that would be great I'm perfectly fine with reading off a full statement from you whatever you'd like to say on your behalf Vincent comes back and says okay I do have one thing to add go read BAM box TOS and Al crates and loop crate I think people are offended that we buy stuff with their money for them and if it's late they try and file a dispute we wouldn't have purchased it otherwise were it not for their orders so yes there is a dispute fee but as you'll see that standard because it costs you us money us is in all caps nobody is never not going to get what they paid for so filing a dispute just holds up my money not theirs my is in all caps their money is spent on what they bought and again if they didn't place the order I wouldn't have it Vincent was the only one who could ship because it's authorizing a $20,000 purchase of postage and it's under his name so going back to that email about Vincent being the only one to ship that is the reason for that I think that more than adequately answers your questions I say yes thank you I will make sure all that is added right now this is a story in your own words emails and responses and the answers above what happened between you and others is your business how you respond as a company is the community's business I appreciate your time after that initial back and forth I was sent a screenshot from another customer that was concerned about the slip cases for the upcoming Salem slot slip case she she said I don't understand your last email about slip cases for Salem slot aren't we all supposed to get them Vincent return saying slip cases don't come with the book I am purchasing them and will put as many as I can afford with the books but they are way too much for everyone to get one I asked Vincent care to comment if you use subscribers money to pay for items why are you having to come out of pocket and why isn't everyone receiving the same things they all paid the same price for sorry I didn't say for but why isn't everyone receiving the same things when they all paid the same price please clarify Vincent goes on to explain the book itself was expensive to produce because we have intricate foil designs so what they pay covers that there has always been a chance for people to get upgraded boxes since we started I pay for the books to be shipped to an author and be signed usually several hundred and they are dispersed in the lot it's the same thing I said thank you for clarifying so that I'm sure I understand the slip case was a free upgrade and will only ship to random customers question mark so I'm asking him if they're only going to ship to random customers trying to get all the facts straight here I have a boatload of information to process and I don't want to miss represent your company correct I am paying for slip cases and randomly putting them in boxes I have a screenshot from an email that was sent by Vincent to a customer that says he was sending them to the long-term customers who have stuck with him all this time I say thank you I will be sure to include that information he says this is so stupid try and do something nice for people I go on to say would you care to share Vincent service history with me so that I may share it in the video I'd also like to share how the company started and other positives to balance the story links to previous articles will be fine he says still commenting on the slip cases we do this every month and have since we started given upgrades I mean I say from what I've been told your reputation before May and Vincent's illness was spotless so their reputation before everything went wrong was spotless I want to give that story as well anything you once said I'm willing to share without modification your words not mine Vincent says check out our about section on the site and I won't bore you with my service history it's not relevant and there are many people who hate the military so I won't feed into that now it's important to note that at this point I realized I was talking to Vincent this whole time in fact earlier in the conversation he talked about himself in the third person Vincent was out shit that's out sick that's why the boxes couldn't be shipped and then he goes on to say yeah we never had an issue before that he's talking about May now that's incorrect boxes were late before back in January I think February they were late and then all the big problems started in May when everyone got sick with the flu and then Vincent was out with his depression and PTSD now I'm going to be reading their about page Jessica and Vincent are the founders of the nocturnal readers box we are a veteran owned company that simply loves everything dark we decided to create this opportunity for our customers for the same reason that many other small businesses are started every year we wish that something like this existed because the book boxes that are out there currently are ones that involve only young adult we decided that everyone should be able to get a book box that has a bit of mature content and items that are not coated in glitter that's when we began sourcing ideas and publishers we pitched the idea to many of our friends and family and the response was overwhelmingly positive we could not believe that no one thought of doing this yet we have been working tirelessly to curate the perfect items for our box and made sure that every item that is put into the box is usable thank you for your support and we hope to build a great community around the nocturnal readers box at this point I asked have I been speaking to Vincent this entire time I just need to know who to attribute this to no problem if someone else has I only need to be able to cite who said what last question before I wrap this up do you and your employees box everything yourselves or is that outsourced this question is in regards to claims that items have been missing and or not as described again I'd like to share your own words thanks for your time Vincent comes back and says we have hired a company to pack but they work for us in our warehouse so just this month somehow some water bottles got mixed in our order and the guys didn't know they were mistakenly sent by the producer and yeah this is Vincent just so you have a little idea I read the books that go into the box create 95 percent of the design on the items order and license where necessary and pack and do customer service so people ask why some stuff didn't happen while I was away it's because we would have to hire several people just to replace what I do and we can't afford that I say okay all noted and saved that's all I need for now I'll link you once the video goes live thank you again for choosing to speak with me people continue to message and email me but at this point it's all repeat information if anything new comes up before I shoot on Sunday I'll message you Vincent responds cool it was at this point that I went to provide answers to the community to the people who messaged me asking me to look into the situation when I gave these answers to those individuals I was sent back proof to dispute what Vincent had said as to backup here where he says yeah we never had an issue before that in regards to my question that his reputation before May was spotless I was sent a link to the better business profile for the nocturnals readers box they are currently rated at a D with two complaints listed in the past I would say 13 14 months it was June I think believe 20 June 26th of 2017 there was a claim issued but it was fixed to the satisfaction of the customer and then there was another one from January 17th that is still open to this day the customer is requesting $22 to return the box at this point I messaged Vincent and say are you aware you have a claim open at the better business bureau from January 17th 2018 here is the link the link is also down in the description of this video so you can read it for yourself I go on to say my concern is you said above yeah we never had an issue before that the response to the customer is also similar to current email and public responses from your cusp from your company also they had shipping problems back in January when the both the January and the February box shipped together so again this is not the first time that they had issues Vincent comes back and he says reread it the customer was mad and wanted a refund and not to send back the stuff because she got a sci-fi item expecting it to all be horror we were until marks speculative fiction horror sci-fi fantasy she claimed she didn't get what she was promised but refused to send the product back for a refund and she kept threatening to tell everyone it does go on to say that Vincent responded you can read the page for yourself it says something to the effect of ha ha that's the very first line of the responses ha ha um that i'm get i got that a lot from customers that he just laughed off and i have screenshot proof of that where he has just laughed off complaints but i go on to say i understand that but you said you've never had an issue before i cannot say in good faith that you never had issues before may is what i'm saying because the claim is still open i will have to make note Vincent comes back and says it's not open it's attached she lost her dispute because she refused to return the merchandise either way that's minor say what you need to say i said i will only be saying what you said thanks again and that is the end of the interview at this time i would like to make note that refunds begin on august 10th but not everyone who is requested has received refunds at this time i would like to make note of the refusal of the company to take a break to catch up saying his family won't eat if he takes even a month break and then halloween is their biggest month at this point that's all i have for you you have until the 15th i would say probably the 14th of august if you want to either cancel your subscription or file a dispute before the next charge goes through at this point in time that's all the information i have if you have any questions if you would like to share your own story if you would like to dispute anything that's been said in this video please do so down in the comments below i will not be policing these comments i will not be deleting these comments also i am not monetizing this video so i'm not earning any money from this video i am not even going to share any of my social details i would ask that if you watch this video and you want to follow me because of this video i would suggest that you do not because this is not my normal type of content my intentions here were simple i am trying to give back to a community that was super supportive of me during a difficult time in my life and during a time when i was demonetized for a while they fought and fought to get my views and my subscribers up so that i would not lose monetization this video is the least that i can do to make people aware of what is going on at this time there are people who have sunk hundreds of dollars into this company and i was asked kindly to check into it and that's what i have done i know there are people out there that even after they watch this video they will consider this a smear campaign or a hit piece i promise you that is not my intention i only want people to get what they paid for and i hate hate that vincent is going through this with his ptsd and his depression i myself suffer from depression and i would not want to have all this on my chest but at the same time these customers have sent money to this company and i believe that they deserve their product thank you for watching


about. We do that all the way down for all of the data points and here's the related z's and then I can do that for the y's, same kind of things. So the first one is going to be 1 minus the mean this time for the y is 3.67 divided by the standard d for the sample of the y 2.16 is going to give us 1.23 about. We do that all the way down and then we can multiply the z's together to see what the z's together will be 0.8 times the 1.23. We get the 0.99 about. Next one of course would be the 0.27 times the 0.77. We get about 0.21 and so on. Then we just sum up the z's to see what that will be and that'll be the numerator is what it'll be. So if we do that we're going to say let's format this to get the numerator, the sum of the b's. It comes out to 0. If I add up all these column it comes out to 0 and then if I say that the denominator is n minus 1, denominator n minus 1 in 1, 2, 3, 4, 5, 6 minus 1, 6 minus 1 is 5. So 0 numerator divided by 5 denominator gives us of course a correlation of 0, 0 correlation. So that might be surprising. We might say well hey hold on a second no correlation here. If I look at those data sets is that what we would really want to say if we see these data points in real life would we really want to say in our mind that there's no correlation, right? And that's the problem of here because we probably want to say it looks like there's something going on here but then it got hit it got messed up by that one you know data point. So we're gonna say all right if I was to calculate this in Excel we can use the data analysis tool here. If you don't have the analysis tool pack you can turn it on as we do in the Excel practice problem and it'll do the calculation for you. We would just select the data sets looking for the correlation and then we would select the range. I would put labels place it somewhere and then Excel will give us this one and here's the x and the y we're looking at that zero it gives us the zero correlation. This is a static thing here it's not dynamic it will not move as we change an Excel worksheet but it's great to give a preliminary look or a double check. Now note that if I did that again and of course if I eliminated the last data point if I did the correlation for just this down to this data point eliminating the last one we would have a perfect correlation of course it would be one perfectly correlated. So clearly if we were to look at those two data sets we might come to the conclusion that getting a zero correlation might not be exactly right we might want to do some more digging in it. If we were to plot this out we can see the data points here one one two two three three four four five five looks like there's a positive correlation between them but then you've got this zero seven up top which of course skewed our correlation calculation to zero but looking at it pictorially does this line that represents the trend line being exactly straight zero correlation is that what we really want to say about this data where one two three four five data points are in perfect alignment together probably not. So this is just a point that no matter no matter what tool we're using if we just if we just plug this thing into the into the computer using say the data analysis and I get one or I get zero and I say it's totally not correlated at all that might not be that's not the only angle we would want to look at just like all of statistic we don't want to look at it from just one angle typically we would want to then plot it out and say huh well maybe that seems kind of funny maybe there's something else going on here I'd want to drill down into it possibly further than that and obviously you could see that pictorially you can also see it if you do the math over here you would and just look at the data sets and start looking at the z scores it's likely that you might pick up some more information that would that give you some more insights as you as you go through the correlation calculation


Hello everyone, this is Amit Dan of amitdan.com. Today I'll have another episode of Gmail tips and tricks video and I'll talk about how to archive find delete and Search for an archived email. If this is your first time or repeat visit. Thank you for your support on this channel I'm always trying new and different ideas. If you're into thinking outside the box This is the chance to subscribe. If you're looking for more tips and tricks videos There will be links in the description box below. So the first thing we're going to start with the easy one How to archive an email? So if you'd like to archive a single or multiple email So all you have to do you have to choose that email by clicking here So for example, you can choose one or more than one or Other way you can choose is that if you actually go inside the email For example, just click on it right here And then you have to hit the archive button, which is right here. And then this is going to archive your email another easy way you can select All emails just hit this button and it's going to select all and if you'd like to select Specific emails for example read unread starred or unstarred email You can use these parameters as well. And then if you click here, then this is going to archive all these emails So I'll just unclick it. Now. Let's archive this email here Which is updates of YouTube's terms of service. So I'll just hit here now. How do you find your archived email? So the easy way you can find something is just do a search here So terms of service is the email we archived. So if you just click here Now you can see here that it's showing you a lot other emails But the way you know that you're looking for that email Which is right here because it is not attached to any label for example inbox You can see that all these emails have inbox level or folder But this one doesn't so that means this is the email you just archived and then once you click on it Then you're going to go into the email If you'd like to put that email back into inbox Then you can just you know click on it and then this is going to back to the inbox, which is right here So let's say if you'd like to see all the emails you have archived So the way you can see that if you scroll down On the lower on the left panel, then you're going to see a label called all mail if you click on it Now here you can see that it's going to show all your emails in each folder under this Email address. So for example, I have here 227 email and you have to find your archived email among these emails now This is not an easy task. So you can just you know do a search and you can set Parameters for example, you can do you know search by from to subject and within one day one month and you can Sort it out by attachment no attachment So if you start it that way, then it's going to give you a shorter results And then you can easily find your email and another way you can use your or search for your email Which you have archived is using these parameters. So this is another way you can do that as well. So that's how You archive and find an archived email. Thank you for watching this video. There'll be more videos coming So I'll see you shortly. Thank you


Hello everybody, this is Shireen and I am joining you from Ardhubhai office. We have now expanded our portfolios to real estate companies, asset management and as well as...