on theCUBE studios in Palo Alto and Boston. It's theCUBE, covering IBM Think. Brought to you by IBM. We're back, you're watching theCUBE and our coverage of IBM Think 2020, the digital IBM Think. And we're here with Jamie Thomas who's the general manager of strategy and development for IBM Systems. Jamie, great to see you. It's great to see you as always. You have been knee deep in Qubits the last couple of years. We're going to talk quantum. We've talked quantum a lot in the past, but it's a really interesting field. We spoke to you last year at IBM Think about this topic and it's been a year in this industry, it's a long time, but so give us the update. What's new in quantum land? Well, Dave, first of all, I'd like to say that in this environment we find ourselves in, I think we can all appreciate why innovation of this nature is perhaps more important going forward, right? If we look at some of the opportunities to solve some of the unsolvable problems or solve problems much more quickly in the case of pharmaceutical research. But for us in IBM, it's been a really busy year. First of all, we worked to advance the technology which is first and foremost in terms of this journey to quantum. We just brought online our 53 Qubit computer which also has a quantum volume of 32 which we can talk about. And we continue to advance the software stack that's attached to the technology because you have to have both the software and the hardware moving at the right rate and pace. We've advanced our Q network which you and I have spoken about which are those individuals across the commercial enterprises, academic and startups who are working with us to co-create around quantum to help us understand the use cases that really can be solved in the future with quantum. And we've also continued to advance our community which is serving us well in this new digital world that we're finding ourselves in in terms of reaching out to developers and now we have over 300,000 unique downloads of the programming model and that represents the developers that we're touching out there every day with quantum. These developers have in the last year have run over 140 billion quantum circuits. So our machines in the cloud are quite active and the cloud model of course is serving us as well the day is in addition to all the other things that I mentioned. So Jamie, what metrics are you trying to optimize on? You mentioned 53 qubits, I saw that actually came online I think last fall, so you're nearly six months in now which is awesome. But what are you measuring? Are you measuring stability or coherence or error rates or number of qubits? What are the things that you're trying to optimize on to measure progress? Well, that's a good question. So we have this metric that we've defined over the last year or two called quantum volume and quantum volume 32, which is the capacity of our current machine really is a representation of many of the things that you mentioned. It represents the power of the quantum machine, if you will and it includes a definition of our ability to provide error correction, to maintain states to really accomplish workloads with the computer. So there's a number of factors that go into quantum volume which we think are important. Now qubits and the number of qubits is just one such metric. It really depends on the coherence and the effect of error correction. It really get the value out of the machine and that's a very important metric. Yeah, we'd love to boil things down to a single metric. It's more complicated than that with quantum. So talk a little bit more about what clients are doing and I'm particularly interested in the ecosystem that you're forming around quantum. Well, as I said, the ecosystem is both the network which are those that are really intently working with us to co-create because we found through our long history and IBM that co-creation is really important. And also these researchers and developers realize that some of our developers today are really researchers, but as you go forward you get many different types of developers that are part of this mix. But in terms of our ecosystem, we're really fundamentally focused on key problems around chemistry, material science, financial services. And over the last year, there's over 200 papers that have been written out there from our network that really embody their work with us on this journey. So we're looking at things like a quadratic speedup of things like Monte Carlo simulation which is used in the financial services arena today to quantify risk. There's papers out there around topics like trade settlements which in the world today trade settlements is a very complex domain with very interconnected complex rules and trillions of dollars in the purview of trade settlements. So it's just an example, options pricing. So you see examples around options pricing from corporations like JPMC in the area of financial services. And likewise in chemistry, there's a lot of research out there focused on batteries. As you can imagine, getting everything into electric powered batteries is an important topic. But today, the way we manufacture batteries can in fact create air pollution in terms of the process as well as we want batteries to have more retention and life to be more effective in energy conservation. So how do we create batteries and still protect our environment as we all would like to do? And so we've had a lot of research around things like the next generation of electric batteries which is a key topic. But if you can think of, you know, Dave there's so many topics here around chemistry also pharmaceuticals that could be advanced with a quantum computer. Obviously, if you look at the COVID-19 news, our supercomputer that we installed at Oak Ridge National Laboratory for instance is being used to analyze 8,000 different compounds for specifically around COVID-19 and the possibilities of using those compounds to solve COVID-19 or influence it in a positive manner. You could think of the quantum computer when it comes online as an accelerator to a supercomputer like that, helping speed up this kind of research even faster than what we're able to do with something like the Summit supercomputer. So Oak Ridge is one of our prominent clients with the quantum technology and they certainly see it that way, right? As an accelerator to the capacity they already have. So a great example that I think is very germane in the time that we find ourselves in. How about startups in this ecosystem?  Are you working with any startups or incubating any startups? Can you talk about that? Absolutely, there's about a third of our network are in fact startups and there's a long list of them out there. They're focused on many different aspects of quantum computing. Many of them are focused on what I would call loosely the programming model, looking at improving algorithms across different industries and making it easier for those that are perhaps more skilled in domains, whether that is chemistry or financial services or mathematics to use the power of the quantum computer. So many of those startups are leveraging our Qiskit, our Quantum Information Science open programming model that we put out there. So it's open. So many of the startups are using that programming model and then adding their own secret sauce, if you will, to understand how they can help bring on users in different ways. So it depends on their domain. You see some startups that are focused on the hardware as well, of course, looking at different hardware technologies that can be used to solve quantum. I would say I feel like more of them are focused on the software programming model. But Jamie, it was interesting to hear you talk about what some of the clients are doing. I mean, obviously in pharmaceuticals and battery manufacturers do a lot of advanced R&D, but you mentioned financial services, JPMC, it's almost like they're now doing advanced R&D, trying to figure out how they can apply quantum to their business down the road. Absolutely. And we have a number of financial institutions that we've announced as part of the network. JPMC is just one of our premier references who have written papers about it. But I would tell you that in the world of Monte Carlo simulation, options pricing, risk management, a small change can make a big difference in dollars, right? So we're talking about operations that in many cases they could achieve, but not achieve in the right amount of time. So the ability to use quantum as an accelerator for these kind of operations is very important. And I can tell you even in the last few weeks we've had a number of briefings with financial companies for like five hours on this topic, looking at what could they do and learning from the work that's already done out there. So I think this kind of advanced research is going to be very important. We also had new members that we announced at the beginning of the year at the CES show. Delta Airlines joined a first transportation company, Amgen joined a pharmaceutical, an example of pharmaceuticals, as well as a number of other research organizations, Georgia Tech, University of New Mexico, Anthem Insurance, just an example of the industries that are looking to take advantage of this kind of technology as it matures. Well, and it strikes me too that as you start to bring machine intelligence into the equation, it's a game changer. I mean, I've been saying that it's not Moore's law drive in the industry anymore. It's this combination of data, AI and cloud for scale. But now you bring that, of course there are alternative processors going on. We're seeing that. But now as you bring in quantum that is actually adds to that innovation cocktail, doesn't it? Yes. And as you recall when you and I spoke last year about this, there are certain domains today where you really cannot get as much effective gain out of classical computing. And clearly chemistry is one of those domains because today with classical computers, we're really unable to model even something as simple as the caffeine molecule, which we're all so very familiar with. I have my caffeine here with me today. But clearly to the degree that we can actually apply molecular modeling and the advantages that quantum brings to those fields, we'll be able to understand so much more about materials that affect all of us around the world about energy, how to explore energy and create energy without creating the carbon footprint and the bad outcomes associated with energy creation and how to obviously deal with pharmaceutical creation much more effectively. So there's a real promise in a lot of these different areas. I wonder if you could talk a little bit about sort of the landscape. And I really interested in what IBM brings to the table that's the sort of different. You're seeing a lot of companies enter this space, some big, many small. What's the unique aspect that IBM brings to the table and are you, you've mentioned co-creating before. Are you co-creating, co-operating with some of the other big guys? Maybe you could address that. Well, obviously this is a very hot topic, both within the technology industry and across government entities. So I think that some of the key values we bring to the table is we are the only vendor right now that has a fleet of systems available in the cloud and we've been out there for several years, right? Enabling clients to take advantage of our capacity. We have both free access and premium access, which is what the network is paying for because they get access to the highest fidelity machines. Clearly we understand intently classical computing and the ability to leverage classical with quantum for advantage across many of these different industries, which I think is unique. We understand the cloud experience that we're bringing to play here with quantum since day one and most importantly, I think we have strong relationships. We have in many cases, we're still running the world. I see it every day coming through my client support vantage point. We understand financial services. We understand healthcare. We understand many of these important domains and we're used to solving tough problems. So we'll bring that experience with our clients and those industries to the table here and help them on this journey. So you mentioned your experience in sort of traditional computing. Do you basically, if I understand it correctly, you're still using traditional silicon microprocessors to read and write the data that's coming out of quantum. I don't know if they're sitting physically side by side, but you've got this big cryogenic unit, cables coming in. That's the sort of standard for some time. It reminds me, you're going to go back to ENIAC and now, which is really exciting because you look at the potential to miniaturize this over the next several decades, but is that right? You're sort of side by side with traditional computing approaches? Right, effectively what we do with quantum today does not happen without classical computers. The front end, you're coming in on classical computers, you're storing your data on classical computers. So that is the model that we're in today and that will continue to happen. In terms of the quantum processor itself, it is a silicon-based processor, but it's a superconducting technology in our case that runs inside that cryogenics unit at a very cold temperature. It is powered by next-generation electronics that we and IBM have innovated around and created our own electronic stack that actually sends microwave pulses into the processor that resides in the cryogenics unit. So when you think about the components of the system, you have to be innovating around the processor, the cryogenics unit, the custom electronic stack and the software all at the same time. And yes, we are doing that in terms of being surrounded by this classical backplane that allows our two network as well as the developers around the world to actually communicate with these systems. The other thing that I really like about this conversation is it's not just R&D for the sake of R&D, you've actually, you know, you're working with partners to, like you said, co-create customers, financial services, airlines, manufacturing, et cetera. I wonder if you could maybe kind of address some of the things that you see happening in the sort of near to midterm, you know, specifically as it relates to where people start, right? I mean, if I'm interested in this, what do I do? Do I need new skills? Do I need, it's in the cloud, right? So I can spin it up there, but where do people get started? Well, they can certainly come to the quantum experience, which is our cloud experience and start to try out the system. So we have both easy ways to get started with visual composition of circuits as well as using the programming model that I mentioned, the Kisket programming model. We've provided extensive YouTube videos out there already. So developers who are interested in starting to learn about quantum can go out there and subscribe to our YouTube channel. We've got over 40 assets already recorded out there and we continue to do those. We did one last week on quantum circuits for those that are more interested in that particular domain. But I think that's part of this journey is making sure that we have all the assets out there digitally available for those around the world that want to interact with us. So we have tremendous amount of education. We're also providing education to our business partners. So one of our key network members who I'll be speaking with later I think today is from Accenture. So Accenture is an example of an organization that's helping their clients understand this quantum journey. And of course, they're providing their own assets, if you will. But once again, taking advantage of the education that we're providing to them as a business partner. You know, people talk about quantum being a decade away, but I think that's the wrong way to think about it. And I'd love your thoughts on this.  And there's parts that are going to be commercialized early. And it's not binary. It's not like all of a sudden one day we're going to wait. Hey, quantum is here. It's really going to come in layers. Your thoughts? Yeah, I definitely agree with that. And it's very important that thought process because if you want to be competitive in your industry, you should think about getting started now. And that's why you see so many financial services, industrial firms and others joining to really start experimentation around some of these domain areas to understand jointly how we evolve these algorithms to solve these problems. And so I think that the production level characteristics will occur at the rate and pace of the industry. And so the industry, as we know, can drive things together faster. So together we can make this a reality faster and certainly none of us want to say it's going to be a decade, right? I mean, we're getting advantage today in terms of the experimentation and the understanding of these problems. And we have to expedite that, I think in the next few years. And certainly with this arms race that we see, that's going to continue. One of the things I didn't mention is that IBM is also working with certain countries and we have significant agreements now with the countries of Germany and Japan to put quantum computers in an IBM facility in those countries. It's in collaboration with Fraunhofer Institute, a premier scientific organization in Germany and with the University of Tokyo in Japan. So you can see that it's not only being pushed by industry, but it's also being pushed from the vantage of countries and bringing this research and technology to their countries. All right, Jamie, we're going to have to leave it there. Thanks so much for coming on theCUBE and give us the update. It's always great to see you. Hopefully next time I see you, it'll be face to face. That's right. I hope so too. It's great to see you guys. Thank you, bye. All right, you're welcome. Keep it right there, everybody. This is Dave Vellante for theCUBE. We'll be back right after this short break.


The implementation of Li metal anode with high voltage Ni-Co rich cathode is plagued by low columbic efficiency and inferior cycling stability. He offers proposed an anion enriched interface to facilitate the columnar structure of Li deposits to solve this issue. This article was authored by Minglei Mao, Xiaoji, Qiwang, and others.


Nietzsche was born on October 15th, 1844, in the small Prussian municipality of Raulkin. Upon his birth, it was only natural for his father to choose the name Friedrich, as this particular day was the birthday of the reigning Prussian king, Frederick William IV. The family was devoutly Lutheran, the father of a working minister, while the mother tended to the house and children, instilling within them all the values consistent with a Christian upbringing. From a young age, it wasn't uncommon to find Friedrich secluded, situated between the covers of the Holy Bible. It was not without cause that he was referred to by the other children as the little minister.  While here, Nietzsche attended a private preparatory school named the Domganasium. From here, he would pass on to Schulfurta, Germany's leading Protestant boarding school. 1864 would bring his graduation, wherein he would choose to continue his education at the University of Bonn, studying theology and classical philology. Shortly after beginning life at university, Nietzsche would abandon the faith which once constituted the very essence of his life. From his own account, he took the transition without notice, though something hints of deception here. He writes to his sister, if you wish to strive for peace of soul and pleasure, then believe. If you wish to be a devotee of truth, then inquire. It would also be around this time that he would discover Schopenhauer's, the world as will and idea, finding within it a mirror in which I spied the world, life, and my own nature depicted with frightful grandeur. He said, it seemed as if Schopenhauer were addressing me personally. This was Nietzsche's attempt at filling the void which the loss of his faith had left behind. The years at Bonn did not amount to much, owing to frequent disagreements with the two leading professors charged with his education. In 1865, he decided it would be best if he transferred to the University of Leipzig, a bold move, but one that paid its dividends. Here his intellect would become apparent, even gaining the honor of being the only student to ever publish in Professor Richel's journal, the Renish Museum. The studies were interrupted for a time when in 1867 he spent a brief period in the military. I say brief, because it would not be long after he arrived that he would sustain a serious injury to his breast muscles while apparently trying to mount a horse in 1868. Fortunately, or rather unfortunately, the time he spent in the military was indeed so short that he had no time to become disillusioned with it. So Nietzsche, being denied the life of a warrior, settled for its antipodes, a professor of classical philology at Basel. It was uncommon, even for a genius, to gain the title of professor without completing a dissertation. Though with the help of Richel and a strong portfolio of past writings, Nietzsche gained the position and by 1870 he would become a full-fledged professor. Perhaps the most fruitful of relationships throughout Nietzsche's life would come in 1868 when he met the composer, Richard Wagner, and his then-mistress, Cosima. He had been an admirer of Wagner's for some time at the point of their first encounter. He would often compare him to Eskilis, restoring myths and symbols, and uniting music and drama once again. A courteous friendship evolved, and throughout the years which they would stay at Tribchin, Nietzsche visited them often, even spending Christmas there in 1869. It was this strength of reverence for Wagner, which inspired Nietzsche to write his first book, The Birth of Tragedy from the Spirit of Music. Though not soon after he reached the Alps to begin its composition, he received word that Germany and France had gone to war. At this point in his life it was not within him to stand idly by while brave soldiers marched into battle. However, due to his failing eyesight, the position of soldier was denied him once again. He was still eager to contribute in whatever way his health would allow, so he took on the role of medical orderly. But almost as soon as he had arrived, he contracted dysentery and diphtheria, which, once again, removed him far from the life which he had so long idolized. He found himself back at Basel by October of 1871, though the duties which his position required of him proved to be a little more than his health could bear. So he applied for the vacant chair of philosophy and proposed that Erwin Rode should take the chair of classical philology. This transfer would be declined. Nietzsche was only now 27, but already he had finished and was preparing to publish his first book, The Birth of Tragedy. Initially, there were not many who acknowledged its presence, but it did gain some negative press when colleagues, likely mistaking it for a conventional work of classical scholarship, gave it reviews which utterly shocked and frustrated Nietzsche. An old acquaintance named Ulrich accused him harshly of ignorance, distortion of the facts, and grotesque parallels between Greek and the modern world. Being a professor of philology writing aesthetics, you may think he could have seen this hostility coming, but this was not the case. There were two individuals who adored the book. These were none other than the Wagner's. This was probably owing to its final ten sections, wherein he exalted Wagner's music as the rebirth of tragedy. It seems odd, and perhaps a bit tragic, however the years which we have colorized thus far were undoubtedly the happiest of Nietzsche's life. Around the time The Birth of Tragedy was published, the Wagner's moved on from Tription, moving to Bayreuth. And though this close friendship was waning, Nietzsche remained a Wagnerian at least for a time. Following this move, we sense a growing anxiety within Nietzsche about the quality and purpose of his musical dramas, as well as the state of German culture and its totality. This would become evident in a series of writings called Untimely Meditations, or otherwise translated to Thoughts out of Season. He planned to complete thirteen sections, though only four arrived. The last of these, named Richard Wagner and Bayreuth. It exalted Wagner as a hero who has never learned the meaning of fear, and who became the first to fuse all the arts into a great aesthetic synthesis. It also held the purpose of bringing attention to the coming Wagner Festival. He tells his readers that Bayreuth signifies for us, the morning sacrament, on the day of battle. It is difficult to determine, at least in the order of significance, the factors which led to Nietzsche's break with Wagner, but it is evident that his attendance at the Bayreuth Festival strongly influenced this decision. It could be said that Wagner was heading in a direction which Nietzsche could not, or would not go. So he fled, tired with disgust of all that is feminism and undisciplined rhapsody in that romanticism, that idealistic line, that softening of the human conscience which had conquered here one of the bravest souls. He said not a word to Wagner about his departure, though he would run across him in Sorento shortly after. This would be the last of their personal encounters. By 1878, the separation was complete, though he never forgot the friendship which was once the very marrow of his life. In a lucid moment toward the end, when seeing a picture of the great composer, he spoke quietly and said, him, I loved much. Due to his failing health, he took a temporary leave of absence from his responsibilities as educator and began living with his sister Elizabeth. After a short time together, they would be separated following her marriage to a prominent anti-Semite. She was planning a move to Paraguay in order to establish a community closer to her head's desire, this being one of the communistic sort. She pleaded with her brother to accompany them, though Nietzsche would decline on the basis that Europe, being the culture museum that it is, was necessary for him. Around the same time, he was preparing to publish his work, Human, All Too Human. Its size was immense, by far the largest of his works, numbering 638 sections. Following its publication, his health continued to deteriorate, so much so that he yielded his chair at the University of Basel in 1879. In this year alone, he recorded 118 days of debilitating migraines, along with the lingering impact of the dysentery and diphtheria that he had acquired during his time as a medical orderly. At this point in his life, he had a difficult time with most tasks that required more than a minimal effort. It was also thought that sometime around the same period, he had acquired syphilis from a prostitute. This certainly did not aid in his situation. By the end of the year, he had been broken, defeated in mind and body. Preparing himself for death, he said to a friend, see that no priest or anyone else uttered falsehoods at my gravesite. Eventually he did recover, spending the next decade, massletting between small towns in northern Italy and the Swiss Alps. Following this brush with death, he came to a period of life wherein he became almost an optimist, finding in life a sweetness that he felt he had missed before. My formula for life is amour fatih, he said, not only to bear up under every necessity, but to love it. This sudden change in disposition gaffled his closest friends, but Nietzsche paid this no mind and continued to write profusely, publishing Daybreak in 1880 and The Gay Science Soon After in 1882. These books are a bit more in line with the essence of his later works, and we feel that he is moving toward the work, which would become, as the great sumo-theological was to Aquinas, his masterpiece. In fact, it is here in the Gay Science, which Nietzsche utters the most famous of his quotes, that God is dead, and we have killed him. And then came the event which provided Nietzsche, through the sheer devastation of its impact, the inspiration to compose the book which he considered his best. The event came shortly before the Christmas of 1882. He had met a woman, Lou Salon, to which he expressed limitless love and admiration. This was something we did not see often in Nietzsche, and it was not long before he decided that, through the aid of his friend, Paul Ray, he would propose to Lou, expecting that she shared his love in equal measure. She gave no definitive reply, but it became clear to him that the love that he had hoped was reserved for him, was instead given to the same friend which he had entrusted the delivery of his proposal. The humiliation was almost too much for him to bear. On Christmas Day, he writes to his friends, Franz Oberbeck, we can hear the desperation in his words. He writes, the last morsel of life was the hardest I have yet to chew, and it is still possible that I shall choke on it, unless I discover the alchemical trick to turning this muck into gold, I am lost. And so, filled with vitriol, he set off, finding refuge in the ungoddened region of the Swiss Alps in 1883. That same year, in that hallowed hour when Richard Wagner gave up the ghost in Venice, Nietzsche published his work titled, Thus Spake Zarathustra. He believed it to be his masterpiece. This work stands alone. If all the spirit of goodness of every great soul were collected together, the whole could not create a single one of Zarathustra's discourses, he wrote a bit later. Unfortunately, and to the great dismay of the author, it was a non-event among academics. In fact, he paid for the publication himself. A staggering 40 copies were sold, and additionally, seven were given away. One can imagine the strain of its failure on the mind of an already fragile Nietzsche. Following this failure, he continued writing, though due to his worsening eyesight, he wrote from this point on only aphorisms. He insisted that these publications were but commentary on Zarathustra. One good and evil was the first of these to appear, followed by its self-proclaimed sequel, The Genealogy of Morals, which was simply meant to supplement and clarify which was previously stated.  He began the transvaluation of all values, but this was unable to be completed. The reason was simple. The Nietzsche seemed to have found himself at a loss for words. While he did not complete this work, he did complete several others, including the Antichrist, Twilight of the Idols, the Case for Wagner, aka Homo, and The Will to Power. While all of these were completed around the same time, their publication would span almost 20 years thereafter. In January of 1889, Nietzsche, while walking through the streets of Turin, collapsed. Shambling back to his attic room, he began writing letters erratically. The recipients included Cosima, Brandys, Burkhardt, and Franz Oberbeck. What he wrote brought Oberbeck enough concern that he rushed to his side. Upon arriving, he found Nietzsche seated at the piano, plowing his keys with his elbows, singing incoherently. From this point onward, his mental state became increasingly unstable, his physical state increasingly fragile. Nietzsche was brought to Basel, where he stayed in an asylum until his mother came to take him in. What a picture, the pious woman who had born sensitively, but patiently, the shock of her son's apostasy from all that she held dear, and who, loving him none the less, received him now into her arms. She would pass in 1897, wherein his care was entrusted to his sister, Elizabeth. They lived in Weimar, and though his mind was slipping, he had gained the peace which during his same life was never his. Lucid moments became increasingly rare, but they were not absent. Sitting in his chair, as he often did in these final years, he overheard Elizabeth, speaking of books to some company she had over. Nietzsche smiled, uttering softly, Ah, I too have written some good books. He died on August 25th in the year of 1900. As to the cause of his deterioration, it is impossible to give a definitive answer, though it seems most attribute this to syphilis he contracted in 1870. However, more recently, it is thought that he may have suffered from degeneration of the cerebral blood vessels, secondary to a retroorbital meningioma. This is not outside the realm of possibility. After all, we know his father had suffered from a similar pathology. It's no secret to most that, at least in popular culture, Nietzsche's name is often brought up in the same general conversation as that of Hitler or the Nazi party in general. I believe we can be quite confident in saying that Nietzsche would have loathed the party and its leaders. So why is his image so entangled with her ideology? The phenomenon began toward the end of his life after coming under the care of his sister, Elizabeth. You see, she had married a prominent anti-Semite. And while his death was in 1889, his views lived on into the present through the mutilation and manipulation of her brother's work. At times, she is even found to have fabricated works to better fit these views. Her control over the library was enough that generations of commentators, because of her reverence for the anti-Semitic ideology, were misled into believing that it was instead his reverence they were hearing. Regardless of these misuses, there have been plenty of others who have been influenced by his works. Philosophers, novelists, psychologists, playwrights, and even theologians all have given Nietzsche words of admiration and praise. Even today, he remains among the most beloved philosophers in history. If you enjoyed learning of the man who was Friedrich Nietzsche and would like to learn of the beliefs that he held, keep an eye out for my upcoming video on the philosophy of Friedrich Nietzsche. And as always, thank you for talking philosophy with me. Until next time.


Okey, hari ini saya akan bercakap tentang menulis SGE QL PASER Jadi, sedikit tentang diri saya, nama saya Zion Saya dari Singapura, jadi website saya Zion.sg Saya sekarang bekerja sebagai pembangunan perniagaan dan juga belajar bagaimana membuat aplikasi mobil Jadi, ini adalah pengalaman klien saya Jadi, menggunakan jawa untuk Android dan Switch untuk iOS Jadi, ke atas yang terbaik Jadi, apa adalah SGE QL?  Ya, sebaiknya bukan 10 QR kode, anda sebenarnya mempunyai 1 QR kode, dan di atas poster di bawah ini, anda akan menunjukkan apakah penggunaan penggunaan yang penggunaan sebenarnya mendukung. Sekarang anda dapat mempunyai, sehingga penggunaan penggunaan dapat berdiri ke sekitar 25 penggunaan, tetapi mereka tidak dapat menunjukkan semua mereka. Kerana bagi contoh penggunaan, mungkin mereka hanya menunjukkan penggunaan dengan penggunaan kode dan penggunaan alih. Jadi anda dapat menggunakan SGQR dengan Banking App untuk menggunakan SGQR. Tetapi anda tidak akan menunjukkan penggunaan kerana penggunaan tidak menunjukkan penggunaan dengan SGQR, seperti itu. Jadi, penggunaan kecil. Okey, tidak mengapa. Resolusi. Biar saya menggunakan resolusi saya. Okey, mari kita cuba lagi. Okey, tidak mengapa, ia berlaku. Okey, mari kita balik. Okey, tidak mengapa, saya menggunakan kegunaan berlaku. Jadi, hari ini saya berfikir saya akan menunjukkan ke 4 saksi. First is introduction which I have just gone through. Second is specification. I am going to go through specification. Third, I am going to go through the code that I wrote to read and analyze SGQR. And fourth part will be live demo. So, first part, the SGQR or Singapore Quick Response Code for long is actually based on the EMV QR code specification for payment systems, Merchant Presented Mode. Because this QR code is presented by the merchant. It is actually found on this website. If you go to this website, actually it is from the MES website. It is written also. So, you get this PDF found. Very nice. So, if you scroll through everything, it is 47 pages. Okey, I am going to go straight to the data organization part. For the purposes of this talk, I am going to use sample SGQR code that I generated. So, basically, this is the QR code. And then if you scan it, you see it's all this contents. You find that it's not encrypted. You can actually read the test inside over there. Okey. So, SGQR actually consists of data objects. Each data object has 3 fields. The ID is coded as a 2-digit numeric value with a value ranging from 00 to 99. Okey, quite obvious. The length is also coded as a 2-digit numeric value. Okey, a value ranging from 01 to 99. And the value field has a minimum length of 1 character and a maximum length of 99 characters. So, the length part. Okey, the length part over here, this determines how long the value is. If this one says 0.5, so I will read 5 characters for the value field. Okey. For those who just came in, I'm going to use this sample SGQR code as for my talk. These are the contents. Okey. This is the same contents of SGQR broken up into data objects. Every single color denotes a different data object. So, the red one is one data object. The green is another data object. The long blue one is another data object. The long green one is another data object. The blue is another one. Green is another one. Blue is another one. Green is another one. Blue is another one. And last of all, the red one. Okey. Let's look at the first data object. 0000201. So, if you break it up, ID is 00. Length is 02. Value is 01. Length is 02. That means I will actually read the next two characters after it, which is 01. Okey. What is ID00? So, if you look at the PDF for MAS website, ID00 is a payload form indicator. Okey. And the first data object must always have ID00. That's it. Okey. Value is always one for now. They never detect any other values. So, the first data object is always ID00. Now, let's look at the last one. The last one, which is this 630457B3. We break it up. The first two digits or characters is always the ID. ID63. The next two digits, which is 404, means the length of the value. So, that means I'll read the next four characters for the value. So, in this case, the value is 57B3. So, ID63 according to this PDF is basically the chat sum. The CLC. Let me see. Over here. Okey. This is the CLC. Now, and SGQL code consists of data objects and templates. Okey. A template itself can contain data objects and also nested templates. So, let's see what it means. Just now we had SGQL. So, this is the third SGQL. Let me refresh your memory. Remember this long blue color one. So, now we are focusing on this long blue color data object. Okey. In this case, the first two characters is 26. Okey. And if you look at the PDF Merchant Account Information 02-51. So, if the ID is 26, it falls below here. So, it is the Merchant Account Information Template. Why is the length? The length is 81. The worst in italics. And the value is this long value over here. Same thing. It consists of many data objects. So, let's break it up by color again. Red, green, blue, green, blue. So, let's look at the first one. So, remember this ID 26 is a data object by itself. But it is a template. ID 26 is a template. So, their long value can be broken up into more data objects. So, the first data object 0011 SG.com.net. We break it up. The first two characters is 00, ID 00. Now, the ID is not unique. It depends on our context. If it is in a root template in the root, like I say, 26. Okay? So, 26 in this aspect is in the top level, the root level. So, we look at 26 under the root data object. But now this 00 the ID, the context is under template 26. So, we need to look at template 26, which is page 34. Okay, 33. Okay. When your ID is 02 to 51, so in this case, it's ID 26. 00 in this case is no longer payment, payload format indicator. 00 means globally you need identifier. So, what your ID means depends on the context it is in. It is your ID under the root data object or is it under a template. So, let me show you just now the 00 which is on page 19 or page 20. In this case, if it is under the root of a QR code, 00 means payload format indicator. But if it is under a template, 26. Okay? It means globally you need identifier. Okay. That is the specifications. So, right now, I'm going to go to the parser code. In case you cannot remember this link, okay? Or you what you can do is go to my website xion.sg you click on github and you look for sgqlparser which is over here. Okay, I've written this as a PHP library. So, actually, you can install it via Composer. Composer require. It has some tests which I'll go through later. So, first thing I want to go through is how do I store the configuration? This whole PDF channel, right? How do I put it in my PHP library? So, I've done it using PHP arrays because that's the most natural for configuration using PHP. You notice that actually I have JSON and PHP. They are the same. Just in case someone wants to use JSON for their JavaScript project is there. So, I'll provide it in two formats. Okay, let's look at the PHP configuration. I've stored the specifications as an array. The array has just three keys. First one is root data objects by ID. So, just now remember we saw this payload format indicator. ID is 00 payload format indicator. So, over here root data objects by ID I'll store it by the ID 00 The name is payload format indicator and I'll put some command. This command is for the PDF as well. Okay, and just now 26. Let's look at 26. Okay, 26. The name is merchant account information. Blah, blah, blah template reserve for additional payment networks is template equals to true. The configuration as I mentioned has three keys. First one is root data objects by ID. This one. The second one is templates by ID which is this one. Templates by ID. So, instead of dumping the whole set of nested information in the root data objects by ID I've chosen to split it up. So, that's easier for me to change staff next time. I'll explain later. So, for 26 which is over here 26. Okay, users info template equals to true. So, what will happen? I will read from the third key of the configuration which is this. This info template. Okay, remember just now we saw on page 34 or page 33. So, over here we find that oh, for ID 26 ID 00 means globally unique identifier. So, this are what I call info templates. So, in this case you find that simply ID 00 name is globally unique identifier. And from 01 all the way to 99 it's actually payment system specific. The reason why okay, I put this in the key by itself and I use users information template equals true. Imagine I have to duplicate all the information up there into every of these 26 to 51 and later 80 to 99. You'll bloat up my configuration array by lot. So, this is how I what I do to actually string my configuration array. Things that let's say if next time the info template let's say 99. Okay, if 99 if 99 is change okay, then I only need to change one place which is over here. I don't need to I don't need to change for 26 all the way to 99. Okay, that's the configuration. Now for the source code there's only one one class which is the parcel class. You'll notice that actually I've listed a lot of constants because it's what I want to refer to it. If I spell the constant wrongly the interpreter will actually complain to me that we are past error, syntax error. But if I spell string wrongly okay, I won't see any error. I might not see any error. So that's why I decided to use constants to refer to the keys in the configuration array. So first up let's look at the constructor. Okay, so after I allow the passing of a separate alternative set of specifications if the developer wishes to do so. If not, you'll just read from the one that's provided which is this file that I gave just now. Okay. There is only one public method which is pass and I'll just pass in the contents of the QR code. Remember the long string just now? I'll just pass it in. So passing consists of two actions. First is separate data objects. Okay. MC. So first is to break out the QR code into the individual data objects. The second part would be to actually analyze each data object. So first I extract data objects. Okay. Over here. Then later on I have for analyze data object. So now I go through a trial run a sample of passing the QR code. Okay. Let's take a look at this. I'll just copy this. I'll just look through the first three. Okay. So let's look at extract data objects. The test is actually passing and the specifications. In the beginning no specification is passing. If no specification is passing I will refer to this one. Root data objects by ID which is this whole chunk over here. Okay. This whole chunk over here. So I'll start from the first character which is index. Then I'll just extract the ID. The ID is basically the first two characters. So basically I'm looking at this part. So ID goes to 00 and then the length of this data object is actually 2. And the value is the value is actually 1. And then the index is actually forwarded to the next one over here. So the next round we go through a loop you will start with the second data object. You will start with the rest of the QR code. So what I will do with this information is I will call this. What's the ID? ID is 00. I will skip the quotation marks for speed. The value is 01. How for the specs? Initially the specs is referring to root data objects by ID. So I'll passing this whole chunk and analyze data object by actually passing specs 00. So basically I taking this part and I passing in. Okay. Now we will go to When to sleep and then over hit. Okay. Okay dah. Okay. Okay. I have a backup projector just in case. Okay. Okay. Okay.  So I'm going to call this analyze data object ID 02 value 01 and this is specification that is going to pass in. So now let's look at the analyze single data object function. So first thing does the specs belong to a template? No. Root ID 00 is not a template. Okay. The suspect use info template. So we look at this just now. Okay. Is template is equals to force. It's not specified. So it's force. So it is does and there is no users info template key. So it is it does not user info template. So basically skip. So right now the result okay. This will be resolve resolving of the data object. So the value will basically be this ID is 00 name is payload form indicator. The length is 2. Ya 2 and the value 01 and the command is this one shall be the first data object in the QR code. Okay. And when this is passed back. Okay. Is it a template? Okay. It's not a template. So just skip. So return the result. So return the result. Basically it is appended to an array of arrays. So your final result is actually this. Okay. So this is the first part. Now let's look at now I will skip the second data object. I will go straight into the third data object because this is a template. So it's a slightly more complicated. So we skip. So now we are here. Okay. Let me open a new window. Now we are interested in this. So now ID is equal to 26. The length is the next 2 characters which is 81. And the value is this long string over here. So same thing. I've extracted the third data object. Now I'm going to analyze it. So I'm going to call this. So what's ID? ID is 26. The length is 81. And the value is I'm not going to type it out. Okay. And the specs this time now remember originally the specs come from the root data object by ID which is over here. So now you're passing specs 26 which is over here, 26. Okay. I'm going to copy this holding here. Okay. Now let's look at the function analyze single data object. So first part. Okay. Does the specs belong to a template? That means it's template equals to true. If yes, get a template information data object if any. So let's look at this. So right now in the function in the function self this is the specs. Okay. Let me just formatting nicely. Okay. Look at the signature. The signature actually passing the specs. So right now this is the status of the specs. It's template equals to true. So I will go to my configuration. I will go to templates by ID. Templates by ID. And I will just copy this one. This array. I'll copy the whole array and merge it. Okay. It's over here. Array merge. So I'll actually get it from templates by ID. I'll merge it. So now this is the state of my specs. Okay. I added one more users info template equals to true. Now next part. Does the specs use the info template? If yes, populate char data objects with it. So I will add a new key data objects by ID and then I populate it with the info template. So I will have a new key data objects by ID and am I going to get this information from? Go back to my configuration info template. This is the info template. I am not going to copy everything. I'll just copy up to true. Actually it goes all the way to 99. Okay. It goes all the way to goes all the way to 99. Let me see. Ya. Okay. Goes all the way to 99. So zero zero in this case you see globally you need identifier. So now what is my next step? My next step is actually to pass this data object which is this one. I'm still at this level. I'm still at this level. So my result is over here. I should just copy. Ya. Okay. What is the ID this time? I am right now at this level. I'm still at this level. Okay. So my ID right now is 26. What is the name? Bo. Merchant account information. And what's the length? The length is 81. And the value is this funny long staff over here. Okay. And the command I'm going to just skip. So that is the current data object for ID 26. Now the next part. Pass data object further if it is a template. If it is a template then I will set the result data objects and I will call extract data objects but this time around I'll pass in the value. I don't pass in the whole original QR code and I will actually pass in the specs not from the root data objects or passing from the data objects by ID. Okay. So let me copy this part. So what's going to happen is I'm going to have a new key called data objects and the result is actually going to be extract data objects. Or passing this whole value. This whole value over here. And how about the specs? Our specs are actually passing from here. Remember this data objects by ID? I will actually passing this one. Previously previously it was passing in from it was passing in from root data objects over here. Okay. It was passing in from root data objects but now I don't passing that. So let's look at the last part. So now I'm going to pretend that this is the new QR code that this is a new test. So I'm going to break it out again. ID 0 length 11 value is the next 11 characters. So let's count on 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Okay. And what am I going to do? I'm right now in this function okay. I'm right now in this loop. Okay. Now we are we are extracting the data objects for the third data object not for the original whole entire QR code. Okay. So we are going to do this thing. 0, 0, which we have seen just now. Now this time around the specs where is it going to come from? Is it going to come from the root data objects by ID? No. Because just now we passing this which is basically referring to this part. Okay. This part. Data objects by the we passing this as a new specs. The new specifications. So basically it is this one. Specs ID 0, 0. So basically right now I just going to passing this one. Okay. And now I going to go into analyze data object which is over here. Does the specs belong to a template? No. Does it use an info template? No. So resolve data object because like this. So the ID is 0, 0. The name is globally unique identifier. The length is 11. The value is edge.com.net and I going to skip the command.  So you return to the previous call over here at the bottom or at the bottom it is going to come here. Okay. It is going to come here. This is the first part. ID 0, 0. Globally you need identifier. Later on there will be some more 0, 1, 2, 3 and so on and so forth. So Kion doing this internal recursion. And this whole chunk where is it going to go to? This is for the third data object. Okay. So it is going to go to the first part. Okay. So your final result is you are going to get an array. Inside each array you have an array describing each data object. So this first array is the first data object. It is a payload form indicator. Then bla bla bla second data object then third data object. This is the one this is the array describing the third data object. Okay. It is ID 26. Merchant account information. Lamp 81. It is long value. And it consists of nested data object. So the first one is SG.com.net. So it actually can go it can actually go to two levels two levels deep. Okay. Now the boring part is over. I got to go through the demo. Okay. Let me see. Okay. Where is the demo? Um Let me show you the website first. Uh Now same thing if you go to the repo besides the code sgqlpasser as per MES monetary authority of Singapore the demo the link is here. Okay. So I'm going to go to this link. Okay. Let's see where it works. Okay. Hello. Okay. Um this uses the PHP Passer library in the back end to pass it. But how about this? Hello. These are camera thing. I didn't code it myself. Okay. That's the beauty of open source. I went to find some JavaScript library. Right. They actually can access the camera as well as pass the QR code. Okay. So it saves me the trouble and the amazing thing is this hello can actually work on your desktop if you open it up on your iPhone Safari browser if you open it up on your Android phone Chrome browser it works as well you can actually access the camera and scan the QR code so you just need to go to this website on your phone and then you can actually use it to scan QR codes and try if you look at a source code for this website blah blah blah blah blah blah and it's over here. Okay. I put some comments the QR code scanner Let me see. Okay. QR code scanner It's actually from githout.com slash instant scan. I put some notes over here on on some changes that I did and basically this is the code for the hello the camera and then scan the QR code So for this library it can actually detect that your device have two cameras so normally phone at front camera and back camera so I put it on auto detect so let's see if I load this website on my phone right you will use the second camera which is usually the back camera Okay. Let me see. I have some sample sgql over here So the story goes that actually I found out about this then but I didn't want to go all over Singapore go and see which are the hocker stores so actually I first read about this sgql on the channel news Asia article Okay and I try scanning the QR code in the article and it actually work so actually I could get a content so at first I use pen and pen and paper to manually pass it oh first two characters then next two characters then account 11 characters then slowly slowly then I decided I must write program to do it right so what I going to do now hmm see whether I can beat this bigger no okay this responsive okay I going to take a picture of this QR code then I going to point take at the website so you see on the website so basically passion gadgets so recently I send my electric unicycle the blue thing over here for repair so at the counter I notice they are using sgql but the only payment they allow for sgql is basically grab pay okay so I going to take a picture of this first okay so oh sorry I need to point the okay so sgql code pass so I just point the QR code at the webcam right so you pass it so these are the contents of the QR code you can use any QR code reader app to actually read the QR code and you get the same contents okay so let's look at what's the result now this is the result from the PHP parser code that I went through review just now it returns the PHP array but for nice pretty printing I encode it into JSON so that it reads nicely so the QR code let's see whether I can make it bigger the first one as I said is always id00 okay id00 the length to value 1 okay let's look at the sgql okay 00 02 01 the second one usually okay is the point of initiation method id01 the length is always 02 and the value is either 11 or 12 11 bermaksud this QR code will always can be reused so most likely it's the same QR code probably there's a merchant bank account value of 12 is used when a new QR code is used for each transaction for example let's say it contains an invoice number or it's generated on the fly it has a transaction amount so it will generate a new QR code for each transaction in this case the sgql will have a value of 12 for id01 merchant account information starts from 26 to 51 so basically they are using template 26 to 51 to capture the payment provider so the first one is great right so this is the value blah blah blah this is a template result additional payment networks so this is a template id26 I went through just now it is a template so it breaks down into further data objects id00 the globally unique identifier is com.grab so basically this is grabs unique identifier how about this thing the value this is most likely the merchant's account ID with grab when I first release this as you clear someone some stranger email me so can you write sgql generator I say yes and no there are many libraries out there that can generate a ql code they are not very easy there are many oposals library out there I know how the format of sgql looks like but the thing is I do not have the merchant account ID for each of the payment providers okay first thing I may not know what is this this may be some other value second thing I can collect enough ql code to determine okay actually this is the merchant ID but unless I am the merchant and I tell you even probably the chicken rice hawker wouldn't know his account ID with grab only grab would know the chicken rice hawker wouldn't bother about it so in this case I told the person no because I don't have access to all this information so let's look at some other information ID 51 also the merchant account template this is usually sgql itself sg.sgql now look at this I have no idea what is this okay but it is past this is so only sgql I will actually understand what it stands for okay but I can guess that this is 15 September 2018 because that's the date that sgql launch transaction currency 702 so this is this is why I've included the comments in the configuration or else you wouldn't understand what this means so basically this 702 is a 3-digit representation of the currency according to ISO 4217 USD is 840 SINGDOLLAR is 702 country code sg merchant name passion gadgets and the merchant city is actually Singapore and the CRC chat sign shall be the last data object in the QR code and the chat sign is calculated according to something that I don't understand so I'm not going to bother explaining it so basically it's a chat sign so it's a 4 character chat sign so let's look at the other demo this is QQ rice amokyo I was talking about this with my colleague and my colleague say I sold one at QQ rice so I took my colleague to a handmade photo so this is interesting because it does not support NETS it supports early pay B pay which is about honest B and fake pay so same thing I'm going to take a picture hello try again this is a new one because you can see you can see QQ rice over here so I'm going to skip the rest so first part okay it's the ID26 and then over here you have honest B and under the honest B you have MIT, GE6, blah blah blah blah so most ID this is a virtual ID for honest B so it supports honest B so it's using ID26 then later on later on you have ID27 also virtual account information and this now who is using it this time round fake pay is using it okay and how does fake pay have a unique ID for its merches is using a website myfake.com slash qr slash 1066 so if I visit this on the website I'll probably see some information about QQ rice on fake pay so third one early pay ID26 ID27 ID28 so right now ID28 this is the whole value because it's a template so you'll be broken up into more data objects so same thing ID00 globally you need identifier values come to early pay and same thing you also like to use website to denote the merchant ID and ID51 so stay use for HQR and let me see and QQ rice okay let me see okay the last one is the most interesting so how many of you are using pay now I have started using pay now so pay now is basically a grimoire amount of the banks right so let's say if we go for lunch then I pay I pay for the lunch so you are paying back your copy right so you can use you can use your banking app you open it up you key my phone number other day I say you show this phone number belongs to Zion so pay me 350 enter you will be paid to my bank account that's easy another way is I use my phone banking app to generate a pay now QR code you scan it and then you pay using you scan it using your banking app and then you pay for it so pay now so all the banks in Singapore support it I generated this HQR sample that means it doesn't contain any information about me okay this one is a special one because it contains a transaction amount and a nested template ID under template ID 62 remember I say that the nested can go out to two levels deep so now this one will show what it means let me take a photo okay let me just reload a page okay this is the last demo okay same thing 00 payload format indicator point of initiation method point of initiation method the one that we're interested in is ID 26 okay ID 26 so merchant account information this is a whole land the globally unique identifier is SG.PayNow payment network specific ID 0Y, value of 0 I have no idea what that means okay probably if you collect enough pay now QR codes you can't figure out but until now I don't know okay data object number 2 under template ID 26 this is a phone number obviously I detail it out okay so this is a phone number now ID 03 same thing value of 0 again I have no idea what it means because pay now never release their tell us how they use SG QR number 4 2018 October 30th this is the expiry date that I put for my pay now code so when I generate the pay now code using my POSB banking app I can actually specify when is expiry date so this is expiry date okay transaction amount $1,234.56 so if you scan the QR code basically you'll be paying me that much now this is a very special value the comment is shall not be included if the app should prong user enter the amount to be paid if I use my banking app to scan this QR code I will see the amount on my screen $1,234.56 and I won't be able to change it I won't be able to change it versus if if I didn't have the transaction amount in my QR code when I scan the QR code like I say I scan the chicken rice hawker that will fear for me to pay $3.50 so this value will determine whether the amount is fixed whether the user can change the amount in the QR code okay, merchant name basically it will be my name so if you are actually it will be Zion if I generate the pay now QR code and the most interesting is actually $62 ID $62 is an additional data field template it is a template so it can be broken up into data objects so the first data object so one is the build number so the value is can be an invoice number now the interesting part is actually ID $50 under template $62 ID $50 it is a template by itself or so so this value can be broken up into further data objects okay so you have a template inside a template inside under the group template so that is the purpose of showing this QR code okay and that's it really it's a one hour talk I know it's very long hopefully it's interesting so to reiterate if you want to find it can go to Zino SG you can go to Github portfolio and then under repositories you can just search for SGQR over here so under here you get source code as well as the link to the demo so actually what you can do is you can load the demo page on your phone and then let's say tomorrow when you go to South Fukuoka you see one SGQR point the camera point the website this website at the SGQR and then you pass it and tell you the information behind the SGQR and that's all thank you very much and okay


An approach alternative to dividend discount model for valuing a firm's stock price is to use the firm's pre cash flows instead. These are the cash flows that are available to the company itself and its equity holders. The usage of pre cash flows in stock valuation is also useful in a case where a company does not pay any dividend because for such company the application of dividend discount model is difficult to use. Also the usage of pre cash flows in stock valuation gives more better insights about the firm than the dividend discount model. The first approach in pre cash flow usage is the pre cash flow for the firm or FCFF. These are the after-tax cash flows raised by a firm's operations, net of the capital investments and the networking capital. These cash flows are available to the firm and its equity holder and its debt holders. Now using the constant growth dividend discount model the FCFF and the terminal value of the firm can be discounted in order to determine the firm value and their discounting can be at the company's vague or the weighted average cost of capital. So to determine the value of the firm using the pre cash flows to the firm we have two variables. The first is the yearly pre cash flows to the firm and the second variable is the firm's terminal years pre cash flows of the firm and both we are required to discount at the firm's vague. So the resulting value is the firm's pair market value and if we divide this value by the number of shares then it will give us the pre cash flow of the firm per share. The second approach in this regard is to use free cash flow to the equity instead to the firm. These free cash flows to the equity are adjusted by after tax interest expense cash flows on the issuance and repayment of the debt. Now to determine the value of equity we can deduct the value of debt from the present value of the free cash flow of the firm that we have determined in our earlier example. This means that when we have determined free cash flow of the firm and we discount it at the firms vague it gives us the value of the firm and if from this value of the firm we deduct we deduct the value of the debt it gives us the free cash value of the equity holders or the fair value of the fair market value of the equity holders. Now this value of the equity can also be determined alternatively using the firm's free cash flows to the equity and the firm's cost of equity. So for that purpose we need to have two types of cash flows. Number first is the free cash flow to the equity holders and the free cash flow to the equity holders at the terminal year of the company. So we need to divide the yearly free cash flows to the equity holders and the firm's terminal years free cash flow to the equity holders over the firm's cost of capital and the resulting value is the fair value of the equity. Now how free cash flow valuation model works for that purpose we have an example here we see that in panel A we have input data that is related to price earning capital spendings long-term debt number of shares earning per share and working capital and then in panel B we have cash flow calculations using profit interest rate change in working capital depreciation and capital spendings the resulting figure is the free cash flow of the firm and free cash flow of equity and these are the two cash flows that we need for our example. In panel C now we need to determine our discount rate which is the company's WEG for determining discount rate we use the KPA model and for that KPA model we have company's current beta it's unleavoured beta its terminal growth rate tax rate and rate of debt which is interest rate risk free rate market risk premium market value of equity debt value levered beta and the resulting value is the WEG for using that WEG we have present value factor each for FCFF and FCFE and finally we have the present values for the firms free cash flow for the firm and free cash flow for the equity now these are the variables that we are using our computation now we have the data from 2016 and 17 and data for 2020 these are highlighted in gray color for 2018 and 19 the data we have gathered through the interpolation from beginning and final values so these are the interpolated values now see an important thing that we have negative free cash flow to the equity holder in earlier years and in the final year it is a positive the negative cash flows are due to the debt repayments now come to our intrinsic values of the firm and intrinsic value of the equity and here is the intrinsic values of the firm and for the equity holders by dividing these values over the company's number of shares we have the internal values intrinsic values per share so how these valuation models can be compared we see that in principle the free cash flow approach is fully consistent with the dividend discount model because both of the models use K and G as the discounting factors but in practical the values from these cash flow models may differ substantially because the financial analysts are always forced to make certain simple assumptions this means that finding bargains under these evaluation models is not easy but the free cash flow approach is a straight forward model application then finding a proper inputs for other models the conclusion here is that it is extremely useful model being a free cash flow model for the financial analysts because they provide ballpark estimates of the intrinsic value of the company's stock there are certain problems with the discounted cash flow models like discounted cash flow valuation estimation may always going to be some imprecise because estimation of the yearly cash flows and the terminal value can be highly sensitive to small changes in some input values for example there is a chance that a less reliable component of value is the economic profit on the assets already in place by the firm also there is a least reliable component of value of growth opportunities computed for the particular firm


Ok, I mean to go Mustangsports.com post game recap with Mustangs men's ice hockey head coach Dominic Dawes Coach you should give up the goal 60 some seconds into the season, but you guys bounce back I thought pretty nicely and didn't let it affect you the rest of the night. No, I thought we handled that pretty well Obviously bad bounce bad break. That's part of the game. It happens But I know we did we handled it well and we moved on and you know we did what needed to do It's a little bit frustrating as the game moved on you guys were I say only up two to one But you were out shooting them by such a wide margin and had really dominated puck possession Was it a little bit frustrating? I mean, it's it's part of the game, right? Like that's they're doing their job They're they're hanging in there, but I thought we did a great job possessing the puck and trying to make plays I mean obviously we could have finished a few more. We had some pretty good chances and just didn't finish But you know through the first two exhibition games. We weren't getting those top quality chances We were getting shots, but we weren't getting chances like that So you got to take that as a positive and build off of that one and go from there Now you get you get the win and he gets a move in to practice this week What's going to be the big focus moving in the next weekend? I just think keep focus on what we're focused on and getting better Hi, we need to bear down and be a little bit stronger on the net so that we can bury some of those chances I thought we played with some pretty good tempo. I thought Special teams wasn't a huge impact on the game tonight, but we just need to keep going keep getting better and move on Go from there. All right coach congrats on win number one. Here's to many more this season. Thank you


See ya. What's going on mate? I have been saying from day one that there's an ex called Casey who I've got feelings for and he just showed up on the beach. What are your feelings towards Marnie like? It's obviously like I've got strong feelings for Marnie but there's been a few things in the past from like trust issues and stuff. Casey has just turned up on the beach as Marnie's ex and I feel that he is pretty guided because obviously Marnie has been sort of cracking on with Curtis in the villa.  I think her and Curtis are very well suited. It's Curtis. I've just come on the beach. I've sat down, I've seen Marnie. I've been told that she's got really close of a guy called Curtis. I don't really know what to feel at the moment. I feel like we need to sit down and have a proper chat about it. See what's going on. Definitely something that has definitely come to me. That's your opinion, Marcel. But the bomb shower was when they said that.  I've got to be honest though, you have been sharing a bed every night. Have you?   I've said that they've got chemistry. I have anyone else. I've said they've got chemistry. Have you said that he's got the best crack?  How can you get so close to Curtis downplay on the beach and then get pissed at me for opening my mouth? I am telling the truth.  If you love someone, you wouldn't do that. She just all of a sudden just went on like the defense because she knew that she has been cracking on with Curtis and clearly she didn't want Casey to know that. Marnie's totally downplaying what's happening between her and Curtis. This is the same reason why her and Casey didn't work in the first place. I feel like Marnie is underplaying this because why would Marcel have a reason to lie? Like he seems like a quiet guy from what Marnie's saying. I don't know why he would lie for no reason so I think Marnie's downplaying this.   I was upset.    You know what it is? I remember that and I'll get you back, Marcel.  I do sort of think that Marnie does like attention from a lot of guys.  Like they are like touching each other, cuddling, spooning and they're sharing a bed. I wouldn't be doing that of someone that I didn't have a connection or I wasn't attracted to. When Curtis hears this, I think a little part of him probably knew that it was coming and I do think he's going to be burnt because he's putting a lot of effort into Marnie and they do have chemistry that can't be denied.   If she's going to come at me like that when she's scrambling, I want no part of it. I've had trust issues in Marnie in the past and this has kind of confirmed that I can't really trust a girl so I don't really know and my head space is out at the moment. Curtis is coming into the villa. I'm just so worried about getting back there because what's everyone else going to see?


In the last few lectures, we were looking at the topic of boiling heat transfer and what we're now going to do, we're going to move into the opposite of boiling, which is condensation. That's where you're going from a vapor back to a liquid. So when we look at condensation heat transfer, what is happening is we have a surface that is at a temperature lower than the saturation temperature of a vapor. And consequently what happens then on that surface is the vapor goes through a phase change and it goes from the vapor state back into the liquid state. Now there are a couple of different types of condensation that can occur. So the two different types of condensation that can occur. On the left what we see is what we refer to as being film condensation. And what happens in film condensation is we get a film of liquid that wets the entire surface whereby we have condensation occurring. And then that is countered by droplet condensation, which we have on the right hand side. And with droplet condensation you get little droplets forming on the surface. Sometimes they will connect with one another and then due to gravity or whatever the angle of it might be, but usually gravity would pull them down and then they would descend due to their own weight. So those are the two different types and you can imagine the heat transfer characteristics are very different depending upon whether or not we have film condensation or droplet condensation. And for the most part what we're going to be doing in the next few lectures we're going to be looking at film condensation versus droplet condensation just because the heat transfer for film condensation is actually worse and consequently it's a more conservative estimate to be doing your calculations using film condensation. Okay, so the reason why film condensation is less efficient is because as the film thickness grows what happens is that the condensate or the liquid that is forming on the surface actually provides a thermal resistance or almost like an insulating blanket to the surface and it then minimizes the amount of condensation that's occurring. And so in order to counter this, typically condensing units where you have condensation occurring on the outside try to minimize the length of the vertical surface and so if you look at a condensing unit whereby you have tubes that might be arranged in something like this and we'll be looking at this type of scenario later on and this would be where you have what they refer to as being shell side condensation. So the condensation is occurring on the outside of the tubes but by having these two bundles like this you'll get droplets forming and then the liquid will drip down and it will go on to the next surface but you're minimizing the overall length that you have in the vertical extent by having a lot of two bundles like that and then each of these additional ones we would have liquid coming and falling and then eventually at the bottom you would collect all of the condensed liquid that you could then use whatever other process that you're trying to achieve with the system so you'd have condensation flowing down but we minimize the vertical extent in order to minimize the film thickness and the insulating effects that it might have and so here we would have droplets forming on the tube bundles and this is what they sometimes refer to as being shell side condensation and the opposite of that would be tube side condensation where the vapor is flowing through the tubes and you have condensation occurring on the inside but that would be a different type of application and we'll probably we'll talk about that a little bit more in a later lecture but anyways so that is a bit of a review of the physical processes that are occurring what we're going to do in the next segment we're going to take a look at some engineering applications and then we're going to look at some of the theoretical developments that were put together by a fellow named New Salt and we've heard of New Salt many many times we use the New Salt number for convective heat transfer he did dimensional analysis and came up with an amazing model that that was really quite accurate for determining the amount of heat transfer when we have condensation occurring so that's where we're going


This time we'll walk through the critical path for a handful of instructions. If we start with an add instruction, then our add instruction begins over at the program counter. We have to wait for the program counter to complete before we can do anything else. Once we've read the address from the program counter, it's sent over to instruction memory, but it also goes off to the adder. It would get its address incremented so it can point at the next instruction, but most of that workflow is not really going to be interesting. We're going to spend much more time doing things like decoding our address, fetching registers, and doing addition to worry too much about how long it takes to update the program counter. So coming out of the program counter, the address also goes to instruction memory, we fetch our instruction, and then we begin decoding it. We need to do a couple things here now. We'd like to get the data out of our registers, and that will require knowing the RS and the RT fields. Those come directly out of our instruction so we can process them pretty quickly. Now, before we can run the ALU, we need to know what its inputs are. So I get one of my inputs directly from the registers. The other one comes through this multiplexer, but setting the multiplexer to take the result from a register requires that our control have completed first. The control unit can begin its processing right after the instruction memory has produced the instruction, so any processing that needs to be done here can be done at the time that we're doing things like fetching registers. So in most cases, that data will be available. We can set the multiplexer by the time that the data arrives from the registers. But we'll still have to wait for this multiplexer to process the two inputs, select the registers before it can send that data to the ALU. Once the ALU has that data, it can send it to the mem to reg multiplexer, which will select it over data memory. Again, we need the control signal for this multiplexer, but that should have already been completed by the time we get here. Our control signal needed to be set for this multiplexer when it ran, so all of our control signals should be pretty much set by this point. Then this multiplexer will take a little bit of time to process, and it will send the results back towards memory. Doing so, we have to make sure that, well, we've selected the correct output register, and we've decided that we want to write two registers. But again, all of this control should have completed by this point. So our ad instruction is pretty simple. We're waiting for a handful of other instruction memory registers, multiplexer, ALU, multiplexer. Other things are generally going to be able to happen in parallel. Our control unit is probably not going to take longer to set all of its control signals than the registers will to produce data. If the control unit did end up taking more time than the registers, then it could become a bottleneck instead of the registers. And how to immediate instruction is pretty similar. We start with the program counter, we move to the instruction memory, we use the registers, the control unit, the ALU, the multiplexers. But this time we only take one result out of our registers, but instead we take the other result from our sign extension unit. So generally our sign extension unit is not going to take a whole lot of time. It really just takes one bit from your instruction and makes 16 more copies of it. So that really isn't going to take a whole lot of time. So that should be able to happen in parallel with the registers or potentially the control unit. If the control unit was slow. If we look at say a load word instruction, this one has some extra stuff. We still got a lot of the same stuff we did with the at immediate instruction. We'll have the program counter, instruction memory, registers, sign extension unit. We do an at immediate instruction effectively. But then we send that address to the data memory. Now we have the additional cost of the data memory as well. Then the data memory will send the results to the mentor edge multiplexer, which will send the results back to the registers. So again a load word isn't going to be too much different from an at immediate. Except that we'll have to use the data memory as well. Store word instruction is pretty similar to the load word instruction. We're going to go through the same main path. But this time we don't actually need to write anything back. Our critical path effectively ends once the data has been stored into data memory because that's all we're asking this instruction to do for us. We don't technically need to include things like the mentor edge multiplexer and the second visit to the registers because they're not relevant to this instruction. The branch instruction is also sort of like an at instruction. We start with our program counter. We use the instruction memory, the registers, the ALU. We do some subtraction here. But this time we're interested in how we change the program counter. In order to decide whether we want to take the address of the next instruction or the address of our branch target instruction will depend on the results of the ALU. So now my critical path will involve going through the program counter instruction memory, registers, ALU, then the branch multiplexer, the jump multiplexer, and back to the program counter. If my hardware was really horrible, I could potentially be spending more time up here with this sign extension unit and this adder than down here with registers and an ALU. But you would have to have some really weird hardware that somehow manages to take longer to do an addition operation than it does to do a subtraction operation. So again, the hardware up here is going to be a whole lot simpler. So our critical path is generally going to involve the registers of the ALU. A jump instruction is really, really simple though. In this case, we want to update our program counter. So we start with our program counter. We get our instruction out of memory and then we process it. Really, all it does is it's going to go up here and get modified a little bit with the address of the next instruction as well as adding in a couple of zeros. Then it gets passed to the jump multiplexer. Jump multiplexer requires the signal from the control unit to say that yes, we should take this, jump. And then it writes the results back to the program counter. So in this case, the control unit is probably going to be interesting because the control unit is going to take longer to determine what those control signals are than it will to actually put together this jump address. This jump address is really just built by shifting a bunch of bits around a couple of lines from program counter plus four, a couple of new zeros coming in, as well as the bits coming straight out of the address. So none of that is really going to require any extra time. So we have to make sure that our control unit is capable of setting the jump multiplexer before we allow it to execute. Thank you.


My name is Rhys Oxnum. I'm the Director of the Field Product Management Team within the Hybrid Platforms Business Unit here at Red Hat. Over the next few minutes I'm going to be providing a demonstration of the latest version of Red Hat's OpenShift Assisted Installer, and we'll show you one of the key new features, the ability to provision an OpenShift cluster comprised of just a single node. This is useful in those situations where the entire deployment needs to occupy the absolute smallest possible footprint, just a single server. For those that aren't familiar with the Assisted Installer, it's a web-based utility that helps with the deployment of OpenShift, simplifying the provisioning of the cluster from the ground up via a web UI hosted on console.redhat.com. On the screen you can see the console.redhat.com landing page, the gateway into deploying and managing a wide variety of Red Hat-based platforms. I'll select OpenShift on the left-hand side and it takes me to a list of clusters that have already been provisioned. Next I'll select Create Cluster and it will give me three different options, Cloud, Data Center and Local. The default option is the Cloud section where I can choose between utilizing Red Hat-Managed Services or a Run It Myself option within a chosen provider. We're going to choose Data Center, which allows me to select an On-Premises option. At the bottom it shows the wide variety of options, from bare metal through to virtualization platforms, but at the top you'll see the Assisted Installer option, which is the one that we want to use today, noting that it is currently marked as Technology Preview. I'll select the Create Cluster button underneath to begin the deployment. The first thing I need to do is select a cluster name. I'll give it the name SNO, which stands for Single Note OpenShift, and add in my base domain, as it will then match the pre-configured DNS entries that I have inside of my environment, so that it will just be easy to route through to my cluster once it's up and running. Although it is worth noting that you do not have to pre-configure DNS to start using Single Note OpenShift, I've just added it for convenience. Next is the new option to select that I want to install Single Note OpenShift, as typically the default is to deploy a multi-note cluster. The UI will then give me some warnings that Single Note OpenShift is Technology Preview, it has some availability limitations, and that there are a few scalability and lifecycle management limitations at present, given that the technology is currently Technology Preview. I'll agree here before moving on. Single Note OpenShift is only available on 4.8 and above, and hence the only OpenShift version it allows me to pick is 4.8.2, the latest release currently available. As always, it will give me the option to override my pull secret, which I don't need to do, but it is conveniently able to pull it for my Red Hat account automatically. I'll select Next to proceed forward. The Assisted Installer process makes provisioning of OpenShift clusters really easy. You need only attach an automatically generated ISO to your target systems, and the Assisted Installer drives the cluster deployment without any further touching of the target system. All of the configuration and control is driven via the user interface. The next step for us is going to be generating that customised ISO, a Red Hat Enterprise Linux Core OS boot image containing all of the necessary credentials, tools and API endpoint information for the nodes to be consumable by this new cluster, and they'll eventually appear below when ready. I'll select Generate Discovery ISO. We now have the option to choose between two designated boot options. The first is USB drive, which contains a full ISO image. It's typically a larger disk image and has everything we need to start the process. Or secondly, a virtual media option, which builds a much smaller ISO that speeds up the initial deployment when utilising virtual media on physical machines. When the small ISO boots up, it dynamically pulls the rest of the content that it needs over the internet. We'll select the virtual media option here, as that's exactly what we're going to be using. We then need to provide a secure shell key for troubleshooting purposes, which will be injected into the ISO for us, so I'll copy this in now. I can then configure a proxy server if I need to, but in my environment I don't need to use a proxy. Finally, we'll select Generate Discovery ISO, and after a few seconds this image will be available for me to download. I now need to attach this to my target physical system, but before I do, I'll copy the link to that ISO. For access to the target system, I'm using a jump host that I'm accessing over VNC, primarily because I need to attach this Discovery ISO to my bare metal hosts over a virtual media interface. And given the geographical distance between myself and this system, it makes more sense to attach them from another system residing in the same data centre. From within the VNC session, you can see that I've got access to the management platform for this Dell FC430 Blade, and that it is currently powered off. I'll open up a terminal and download the Discovery ISO using the URL I previously copied. Once downloaded, I'll now attach this to my physical machine via the out-of-band media interface. First, I'll set the machine to automatically boot via the virtual CD-ROM, then I'll attach the ISO via virtual media, and then I'll power the system up. This section is sped up considerably to keep the video short, but you'll briefly be able to see that CoreOS boots up, starts the necessary Assisted Installer Agent service that will help report it into the UI, and it will download the rest of the disk image it needs over the internet. I'll now wait a few moments for it to appear in the UI. There we go, it's reporting in. Behind the scenes, the Assisted Installer Agent service will have conducted a Discovery process and will report information about the system, so CPU count, memory and disk availability, and any identified network configuration. This will temporarily show a warning about NTP configuration, but this should be automatically remedied itself in the next few seconds. The machine is now showing is ready to move into the next section, although before we move on, I'm going to select the Install OpenShift Virtualization option, which will configure the installation process to automatically deploy OpenShift Virtualization as part of the rollout, allowing us to leverage the bare metal nature of the single system to maximize workload options for both containerized and virtualized workloads within the smallest possible footprint. We'll select Next to move on. At this stage we're asked to specify some networking options. We first have to select the subnet in which we want our OpenShift cluster to run on, noting that in my environment I only have a single network active. I can then optionally override the networking configuration for the cluster network and the service network to avoid any clashes, but the defaults work just fine for me here, so I'll stick with the basic configuration. At the bottom of this page it will show our node and its current network configuration, again highlighting that there was a problem configuring NTP via the Validations Framework, a set of validations that help with pre-flight checks and to minimize deployment failures. However, this isn't fatal to the cluster deployment and as I said, it's going to be remedied in the next step automatically. We'll then select Next and we're taken to a review page where we can just make sure that we're ready to go and that everything aligns with our expectations. Everything looks good to me so we'll select Install Cluster. This will now start the deployment of a single node OpenShift cluster on our single physical machine. Here you can see that it takes us to the next pane where we can see that it's moving from a ready state to a preparing for installation phase. As we've only got a single node, this will act as our bootstrap and resulting single cluster node. The high-level workflow is that the cluster will first be bootstrapped whilst it's still running the ISO. That cluster configuration and CoreOS image will then be written to the disk, then the machine will be rebooted so that it can bring the cluster up properly from the disk itself. We'll then watch these phases over the next few minutes. As always, the cluster events tab shows us exactly where we are if we need further insights, again highlighting that the NTP problem has been resolved for us. Bootstrapping the cluster can take a good few minutes, so I'll speed up the video considerably at this point. Now that the cluster has been bootstrapped, the CoreOS disk image has been written to the disk as witnessed again in the cluster events log. This machine will now be rebooted and we can validate this by looking at the virtual console. We'll see this machine is being rebooted and start up from the disk, no longer reliant on that discovery ISO. We'll see this machine sit in the rebooting phase for a good few minutes as the cluster is established, where the cluster will be initialised with OpenShift Core operators, including the OpenShift console, for the cluster pods to start up and for us to be able to fully interact with the cluster. Whilst that's happening, I'll show you how easy it is to grab the log files for the installation, which is useful when troubleshooting problems during deployment. We can simply download a tab or write from the UI, where we have the Assisted Installer Agent logs, the Bootstrap logs, the OpenShift Installer logs, and insights into what the storage configuration looks like for our nodes. So after a few minutes, the UI will have updated that the host has been fully installed. At this stage, we move into a finalisation phase, where we wait for the cluster to settle and deploy the additional operators we requested. In our case, that's the OpenShift virtualisation and the local storage operator, which does actually get deployed alongside OpenShift virtualisation for just providing basic storage needs. Whilst that's doing that, we can see that the UI has updated to show the URL for the console. It provides us with the username and password for the cluster, and offers the kubeconfig for download. After another few minutes, we'll see that the cluster deployment was successful, and that our single node deployment is ready to go. Let's validate that we're able to interact with the cluster by accessing the OpenShift console. We'll first copy the kube admin password from the UI, and click the link for the OpenShift console. After a few self-signed certificate warnings, I'm presented with the familiar OpenShift console home page, and we can log in with that password that we copied previously. We can easily confirm that the cluster is fully functional, and that only a single node is available when we look up the nodes. As this is a bare metal environment, and we requested that OpenShift virtualisation be deployed as part of the deployment process, we can see that virtualisation is available as an option under the Workloads tab. Let's deploy a virtual machine and make sure that works as expected. It's possible to select a template that will walk you through the deployment via the UI, but I'll create a really simple VM via the YAML input, which is pre-populated for me. This will just deploy a really basic RHEL 8 virtual machine. I'll instruct it to start, and it will pull in the necessary resources to start it up. We can now see the virtual machine booting via the console, and we can log in using the automatically generated and injected password within our virtual machine. You'll see that it has networking connectivity just like all other containerised workloads would have, as virtual machines on OpenShift utilise the same Kubernetes native storage and networking concepts. Last but not least, we'll confirm that the CLI access is working too. Via the assisted installer UI, I can download the kube convig for the kube admin user. Here you can see that it's also confirming that we have a single node, that it runs version 4.8.2, and we can also see that we're able to see our virtual machine instance running. So that concludes the demonstration. I hope that it was useful for you and clearly demonstrated the single node OpenShift deployment concept within assisted installer. As a last step, we can go ahead and delete the cluster within the UI, but you can always keep it around as a reference for configuration, passwords and the kube convig if required. Thank you for watching.