Hey guys welcome back to my youtube channel this is Daniel Rosso here bringing you this video from Jerusalem. Very very exciting news recently as if the imminent arrival of car four in Israel wasn't big enough news. We now have Aliexpress apparently dispatching stuff locally from within Israel. Now if you don't know what Aliexpress is if you're lucky enough to have better e-commerce options it is a Chinese website it's the direct to consumer side of Alibaba so those who do business purchasing probably know Alibaba huge trade merchant merchant online marketplace and Aliexpress is sending stuff out of China out of the east direct to consumers. Now I've been using Aliexpress for seven years and I've bought literally thousands of products I do not exaggerate on the marketplace. It's a good website with the exception that the customer service is kind of non-existent almost but the main problem has been that it takes a long time to come to Israel. Nevertheless Israel a tiny country of only about 10 million people has emerged surprisingly as one of Aliexpress's main customer base and I think the reason for that it's a combination of frustration on the part of consumers with the high price of local goods the fact that Amazon does ship to Israel now but it's still a relatively small part of their inventory and it still only makes sense to ship certain things to Israel in other words the current free shipping to Israel after only starts from $49 so if you have if you want to buy a $20 item might have $15 shipping so it's still not really it's basically there's still a large disc a large gulf between the utility of Amazon in the USA especially using Amazon Prime and Israel so Israelis have emerged as a surprise huge customers of Aliexpress now we did see in the news a few months ago that Aliexpress were trying to improve their logistics to Israel because I think the volume of orders here took them by surprise and now we've seen more exciting news I'm just going to screw my microphone stand here that they are actually beginning to warehouse goods in Israel so I'm going to jump over here to the actual news coverage as reported on Globes somewhat recently this was reported here on the 11th of August Aliexpress opens warehouse warehouses in Israel the Chinese online retail giant has set up warehouses in airport city to store products insurance delivery times now for folks who don't know what what airport city is it's a commercial industrial park located right next to Ben Gurion airport which is Israel's main international airport in fact it's only one of about two really with the new Ramon airfield next to a lat so very logical place it means that Aliexpress can fly in air freight from the far east and then just bring it over to their fulfillment center in airport city literally a stones throw from the runway online retail giant Aliexpress owned by China's Alibaba group has been operating and just a little bit problematic the English here so I'm going to translate has been operating a pilot project in Israel in recent weeks by leasing warehouses at airport city near Ben Gurion airport and storing products for direct delivery in Israel the idea is to allow customers to order products online that are already stored in Israel the speed up delivery times blah blah blah now I've actually been noticing that there have been some products shipping from Israel for about a year now it's been now and again I see something that ships from Israel the difference is as far as I can tell some Israeli merchants were participating on Aliexpress but now Aliexpress the company is warehousing merchandise in Israel now let's jump over to Aliexpress and show you guys how to find stuff that ships to Israel right so I was looking for a another isolation shield for my lovely array of microphones so I said this would be a good little test case right so I've searched for let's just keep it simple pop filter microphone and now in Aliexpress we have the familiar minimum minimum minimum maximum price settings the very useful free shipping toggle and we now have a ship from option and what you need to do is go down and click on Israel now we're going to see our stock contracting a bit because it's a pilot and they don't have a ton of stuff store it here but let's take a look at a sample product we have a isolation booth here something very similar to the one I bought from amazon recently but a little bit cheaper now here's my warning to you guys right you may think well we've selected it ships to Israel so I'm just going to click buy now and it'll come from Israel in a few days instead of a month not the case you have to be careful see here under free shipping from China to Israel so this is by default still going to dispatch out of China so in order to change it to Israel we need to click under more options and have a look so this is what we're seeing now this is a very very early days of the trial so I don't want to be too hard on Aliexpress yet but this is kind of the classic conundrum of things that don't make sense to ship to Israel the shipping from Israel to Jerusalem where I live is 24 dollars and 55 cent on an item that's only 11 dollars right so that's an example of it doesn't make sense the shipping is more than the actual pop filter for some reason the price is changing I'm not 100 percent sure what's going on here but most of these options are still ex-China we have DHL as usual being the most expensive option at 95 dollars and we have tracking options for FedEx for 68 dollars but the dispatch out of Israel option is 25 dollars rounding up so let's try a smaller item because these you know pop filters are pretty bulky a lot of fairly heavy bit of metal in them let's just go for a more simple consumer purchase of bluetooth earphones same thing is going to happen here it's not going to remember your shipping preference so you want to go over and click on Israel and then we're going to filter and then as before our options are becoming smaller let's just take this I'm going to go for 20 dollar product so it's not hopefully complete rubbish bluetooth earphone qualcomm again same thing happens here from China to Israel via DHL that's the free shipping method so once again I need to click into more options and now we actually have free shipping ex-israel so this is one of the items that you can get for free from Israel and I'm not sure what the delivery times are going to be it says here estimated delivery four to ten days as opposed to typically in my long experience buying aliexpress products from Israel I'd say a month is I've had some outliers come in 10 days but a month or longer is typical so that's a much shorter delivery time and it's going to be delivered we're going to skip the whole air freight aspect from China to Israel and we're just going to do final mile delivery in Israel so that should significantly speed up things now I did find a couple of things that had nominal relatively nominal shipping fees shipping fees ex-israel so I want to show one of those items too here is a cheaper in you know one of these wireless earphone things for about five bucks and actually we have $7 shipping here from Israel to Jerusalem $7.37 that's an untracked shipping method so I want to caution that it's early very early days in the trial here and this didn't from the news coverage it read more like this is a pilot project and something definite they're currently renting a warehouse space in airport city more importantly from the consumer standpoint I'm buying an aliexpress change the ship option to Israel you're going to filter on products that will ship to Israel and then you're a but then you have to make sure that it's actually shipping using an Israeli delivery method and not ex-China because you have to do that second step too there are completely free shopping is free shipping options all within Israel which is a very big deal this is the first time I've seen it in aliexpress and there's some of some of them are costing more and some of them are costing enough that it's it makes more sense to just get it from China as usual and wait that month period for it to write to your home in Israel if you're looking at buying stuff on aliexpress in Israel I hope this video was interesting this is a pretty big development living in Israel is getting easier and the more international companies decide to sell here more competition on in the local market and hopefully gonna lead to better consumer prices for all of us thank you guys for watching if you do want to get more videos for me about living in Israel subscribe check out the living in Israel playlist which is where I aggregate those videos and until the next video thanks for watching


Hey, hello, and welcome to the show. It's me John Park. It's time for another episode of John Park's Workshop. No It's time for another episode of JP's product pick of the week. It's Tuesday Sorry, as you can probably hear from my voice. I had a little cold. I'm a little loopy from that still apparently I'm gonna have a nice sip of water here. Hold on one second off to a roaring start Tackle the world. I would love to reenact the matrix playing all of the parts. That would be a lot of fun so Here we go before I go any further today with the product pick first of all I want to let you know that you can head to The product page by using that QR code or that URL right there and that will get you a huge huge Wapping discount on this week's product pick. I believe it's 50% off this week. I'm gonna go verify that myself It sure is and thanks to jelly For catching that we almost had The wrong product in their fault of my own. We have two very similar products But this is the newer one of the two. So thanks jelly So head on over there. You can throw it in your cart. There's no need for coupon code maximum of 10 per customer and But before I talk about it, I'm gonna have lady Ada Introduce this product. So take it away lady Ada The TCA 84 1 8 Breakout board which I'm really excited about because we started this design in 2020 And the chip was completely unavailable and then it became available So we are able to Finally stock of this really interesting G pair expander and keypad matrix driver so It is an 18 GPIO Expander if you want to just have like 18 inputs outputs with pull-ups, you know and interrupt output Then you can do that but what's interesting about this chip is it also does keypad scanning. So it has 10 columns 8 rows so it can do up to 180 keys and here. I'm just demoing it with a simple 3 by 4 matrix keypad and It has a 10 Element event queue so it can actually that you don't have to pull it constantly if there's key presses It'll record the key matrix presses and releases for you And then you know whenever you get around to ask you know where I scored C. Hey, what key presses did you get? It'll it'll admit those key key codes and whether they were pressed or released and then you can Use it with Arduino or circuit Python. We have drivers for both so you can use it with any microcontroller And then another interesting thing about this chip is it also has a Linux kernel support And so if you happen to be interested in like making a up to 80 key keyboard for a single board computer This driver chip you can load it with into the kernel using a device to overlay you can set up the key map and Then you can use it as a native keyboard built into the kernel, which I think is kind of cool I'm gonna try that out So, yeah, so here are the columns. So there's columns zero through Nine and then the rows are down here There's two up here rows zero one and then through our seven Note that you cannot change the row and column assignment like you can't make a column into a row like There's ten columns eight rows. That's it. And then, you know, I just happened to have a keypad I thought it'd be easy to wire this up. I just wrote a little example that maps the key numbers to digits and displays them and There's also a debouncer built in and of course you can mix and match you can have some GPIO and Some keypad matrices Just again, you know rows and columns are fixed You can't change whether a pin is a row or column whatever it's labeled as is what it is But it's a really nice little chip and does something that I haven't seen a lot of other You know GPIO expander that I know of other than like the HT16 K33 does keypads and even that doesn't Have a nice event queue like this one does Yes, indeed. So here it is inside of my little mysterious box here. We find That's the product pick of the week this week. It is the tca 84 18 Keypad matrix driver and GPIO expander This runs over i2c. So we have two super convenient Stem aqt ports on it also has a couple little mounting holes on there And then it has pins for the columns rows and a couple of extras there for using header pins for your i2c instead So you saw in the example there lady aida had that plugged into a membrane keyboard This will work for pretty much anything you could make 18 GPIO pins to be leds or buttons or switches You could make a huge arcade Button array if you want to using the matrix Scanning that's what gives you that 10 by 8 which means you could have up to 80 keys And it also works really well for of course mechanical keyboard key switches Let me go ahead and jump to the overhead and i'll show you Here's an example of using it with One of our little telephone style.  I decided to solder the board since the size works out Uh pretty well not perfect, but pretty well To solder if I flip this upside down here Solder the Four columns and two of the row pins and then the extra two I have running since they're on the other side of the board using wires there, but that gives you this sort of neat little Modular keyboard that you can use a little keypad that you can use for different projects I have it plugged in over i squared c Into a perfect recipient for this I think And this was Todd botts suggestions. So thank you. This is a perfect recipient for it This is our trinky if you have a need for a trinky something incredibly small little microcontroller That can be plugged right into your usb port on your computer This will work really well for it. So have the stem of qt i squared c This is acting as these 16 buttons could be up to 80 Using the columns and rows and what i'll do is put one of our little handy dandy adapters on there And plug that into a usb hub so we can Imagine that's the side of your laptop or some other computer that you want to plug into now I have immediate access to this cute little keypad I'm going to give you a little demo of that by jumping over to Let's see Well this one Yeah, that'll pretty much work. Let me pull the Thing off of my face there Whoops Okay, I think I have extra I have an extra keypad on my face today. Let me move this one down here There we go So here you can see i'm in adam where i've coded it and we'll take a look at the code in a second What i'll do is connect to it. I'm going to use disco tool To the trinky And now you can see if I Go ahead and type on the keyboard here. I'm seeing key events show up Depending on which keys I press and release I get different key events. That's what the chip is Recording and then we can use our code to turn that into actual usb key presses So here i'm just going to put in a comment there and then you can see I can get one two three a four five six b seven eight nine c star zero pound d sorry i Typed very messily there. So it looks like the thing doesn't work, right? We do that again four five six b seven eight nine c star zero pound d So that works really well as a usb Input device you could of course always use that for things like midi You could use that not as usb, but just input to the microcontroller itself Forget about usb. You could use it to type in codes to do different things on small displays on lcds Change the color of a neopixel pattern use it to open up a lock using A servo motor or something like that for an escape room or a solenoid. So these are really really handy Another thing you'll notice is that Go ahead and unplug this one. Oh, actually before I do that. Let's let's take a look at the code for this I'll leave that leave that sitting right there So all I need to do the key thing here is import this library We have a really nice neat library both for circuit python and for arduino. It's the tca 8418 library I'm importing that then I set this up over i squared c So you can see here. I have an i squared c bus that's running on the i squared c Stemma port you can also use the second port if it's a rp2040 and then I set up the tca object there over i squared c Here's where we set up which are being used the columns and rows So I have four of the columns in this case four of the rows and this will vary depending On your project up to eight. Sorry up to ten columns and eight rows And then I'm setting all of those pins As keypad mode. So remember we can use this to fire off leds and Read non matrix key switches. That's also possible. But in this case, I'm setting them all up in keypad mode Enabling interrupt and enabling this little q where it Remembers up to ten key presses on the chip itself and then sends them over i squared c the moment i squared c looks for them Now in reality all this happens in about a millisecond So we don't notice any delay with it But it can handle up to ten really really really fast key presses and not lose track Those are going to get sent to over i squared c Then in my main code. I'm just using this tca key int so we check for a key interrupt And then we grab all of the Key presses that are in the q using this events count So we get a count of them however many there are and then we ask okay What's the first second third fourth fifth event in that count? We parse that out to be our presses or releases and which key it is of the in this case 16 that we could be pressing and then in the end in this case i'm sending out a usb But you could do other things with it so i'll show you not only And some of you have seen this before but let me let me switch to another view And you'll see not only can we do little keypads membrane key switches, but here's one where i have six by five Zoom out here Just to give you this still this isn't the full blown eight by ten eighty keys is a lot of keys I'm using two of these in this project so that I can do split Macro keyboard that aren't touching each other with a minimum of wires in there and that's using two i-squared c-buses But here's a case where you can see really clearly Column pins and row pins all heading to my tca 8418 column in a row headers that i've soldered on to there And let's see before i go any further let's hop back over to the site Take that one over there so you can see today This is an incredible price if you head over there You're going to get this for half price two dollars and 98 cents per Up to 10 of them. So if you ever want to do GPio expansion type of projects get a lot of leds or A lot of buttons a lot of switches or any kind of keypad projects. It's a really good one for that So throw those in your cart. There's no coupon code needed If we take a look at the associated learn guide here Oh my gosh, what happened? I think I just I tried to explode my What did I do? Where did I move it to? I tried to explode my broadcast software. It doesn't want to show you the learn guide now Let's see if I can Make it go there from the product page. Yeah, that'll work I dragged something and it totally disappeared. Uh, so thankfully in our product page. We always do have a link Uh to the learn guide Here it is primary guide So there you can see same little demo there from the video It talks about the specs on here gives you the pinouts And I've mentioned this I think before but this has only one i-squared c address So unfortunately the chip was not set up to be used in multiples So the only way to use multiples of them is if you have multiple i-squared c ports on your microcontroller Which you definitely can do on rp 2040 based feather pico Qt pi that little trinky and on and on at least I think that trinky is one Then let's see We have The download section here in the guide Has the datasheet. So if you want to go check that out, you can see this is a texas instrument tc 84 18 and it tells you tc 8 14 is a keypans keypad scan device With integrated usd production operate up 1.65 to 3.6 volts and has 18 general purpose i-o That can be used to support 80 keys via i-squared c So you can get some extra details from that there If you're interested If we head over to the chat I saw we had some questions about Probably about the rollover Tythe says you can test holding down eight keys at once and then repress one while holding the rest So let's see what happens. Let me plug this back in I haven't tested this Uh, I do have a funny flaw in my code where i'm using shift modifier to create the Star or at least the pound pound sign And if I keep that held it acts like a shift on all of them. So I won't use that one, but if we uh jump back over to My atom session here So you can see both actually in the output and Uh in my Made main cone code view here. Uh, I'm gonna press one two three four Five six seven eight I'm not sure if that's demonstrating Oh interesting. Yeah, I don't know what's doing there. My code probably isn't uh, isn't helping us any I'm getting resends there Uh, does that happen with just like one two three? No Two three four Yeah, I think we might be getting ghosting. So it's possible Depending on how you have your matrix set up with a diode matrix to get ghost Ghost presses and there are recommendations in the Data sheet on how to avoid that essentially if you have to press three keys at once They say put them in different columns. I think it is Or different columns and row so a diagonal They call it the control alt delete mode so you can set set up for a priority on three presses as well that won't ghost See river says or you can use the i-squared c-mux to cascade a few of these that's right It's another way to do it is uh multiplex the multiplexers, which is definite matrix territory there Uh, all right, let's see if there are No other questions. I'll remind you to head over to that url right there that qr code It'll take you to the product page. You can pick these up for this great great price today Uh, and I'll wrap things up here. So So That right there is my product pick of the week. It is the tca 84 18 keypad matrix and gpio break out That is going to do it for today's episode of jp's product pick of the week Thanks so much for stopping by and I will see you next time Bye-bye


What's going on traders and investors Alex here and in this video, I'll show you how to fix your time and sell in TWS to make it look like a real time and sell that you could actually day trade on. So without further ado, let's jump right in. So the first thing we're going to do is go in file and go global configuration. When this comes up, what you're going to have to do is going to be to go into display. So you're going to go into ticker row. And over here, you're going to see that there's display tick dots instead of colored price. So we're going to remove this going to apply it, but that's not going to be all there's going to be one more thing left to do to get it working properly. But before that also quick reminder that all the tools I recommend to day trade and invest are going to be linked in the description. So if you're looking for the best platform, everything is going to be done there. So let's get back to the video. So what you're going to do now is going to be to click on this over here, go to settings and when this comes up, you're going to click this and go show actual repetitive data instead of symbolic indicator. And then over here, you're going to see that now the color comes up like this. And you can also fix the color there where you want. So up tick is going to be green, down tick is going to be red, unreported or late reported is going to be yellow. So you could also change this and go apply. And everything is going to be done properly. And you're going to be ready to go and day trade. So thanks for watching. As usual, if you enjoy like and subscribe, all the tools I recommend are linked in the description. So please


UN High Commissioner for Refugees, Filippo Grande, says finding solutions based on peace and development were crucial for the future of the nearly 7 million possibly displaced people from Sudan and South Sudan. The High Commissioner said this after a three-day visit to the two countries. During the trip, Grande met Sudan's Prime Minister Abdullah Hamdok and South Sudan's President Sylvakir, at which they discussed how the two countries could work together to help their displaced populations.


I was never on the board of the ASF. I should, there you go, participation. So Jim's right, I'm actually not here to talk about technology at all. Maybe in a broader context. What I actually wanna spend some time thinking about, and I'm gonna have a request for everybody as contributors to open source communities, as leaders and companies that do open source. But I'll come back to that request in a minute. So I wanna step back and remind everybody about some context. That the typical enterprise organization is kind of living in this world of a lot of change, right? So we can all agree that open source, cloud, just software in general, has really fundamentally changed the economy, the world economy. The way that we interact with companies, the way that companies interact with each other in this very fundamental way, right? Agility, technical aptitude, ability to respond to market conditions that are changing. These things are just how you survive now as a company. But even beyond that, right? Our connected world of information technology is one thing, but we also see technologies from other areas of science colliding with IT. And we've entered this phase as a society, as a global society, where change is now happening at such a rapid rate that humans and organizations are struggling to actually embrace it, adopt it, and adapt effectively. Now, most of you are technologists that are probably, you'd consider yourself to be pretty up to date on what's going on in your particular part of the world, right? I think we all like technology here. Anybody here not like technology? Cool, all right. The one guy in the front is at the wrong conference. I love technology, right? I love the new things. I love actually embracing new opportunities. I love looking at how we can combine work from AI with cloud platforms and seeing the possibilities there, right? But think about someone whose job isn't to pay attention to the latest and greatest changes, right? Who can't keep up with the pace of innovation that's happening in the broad technology landscape. It's like a giant wave, the tsunami that's constantly crashing on them, multiple tsunamis, they're hitting them over and over and over again. And it's really confusing. And I spent a lot of time with large enterprise, mid-size enterprise, IT directors, CIOs, but also leaders in the lines of business. And they're really struggling with this pace of change. So you might say, yeah, they have to navigate this wave, right? Now we in the Cloud Foundry community have been using this metaphor of a kayaker as the right way to approach navigating the world of change that we live in, right? You need to ride these waves, you need to figure out how to navigate through them. You don't wanna be knocked over by them, right? So it requires balance and requires agility. And lots has been written, Nicole talked a lot about how DevOps, we're able to measure effectiveness of software delivery by looking at more agile practices both in operations and software development. There's macro questions about can businesses maintain sustainable competitive advantage anymore? No, they have to actually be able to respond constantly and change what their competitive advantage is as the market dynamics change around them. But I'm here at an open source conference, of course, right? So what does this have to do with open source? I'd argue everything, right? Because open source is massive. It's not just software, it's now hardware, it's data. It's moving into other parts of science and engineering that you would have never expected to have open communities built inside of them. But just thinking about the typical enterprise, it used to be that we thought about open source as freedom from lock-in. Now that might be true, but we do two global perception studies every year. And one of the things that we found in our last wave in the spring of this year was that two thirds of the organizations that we talked to, and this is around the globe, don't look at open source predominantly as avoiding lock-in. They actually look at it as a way to open up opportunities. It's a point of leverage for them. It's a way that they can take advantage of a broad community of creative people that are gonna give them something new that they can integrate. And so that's why as open source contributors, as open source leaders, I have a few things that I'd like to ask of you. When you think about your communities and you think about the work that you're doing to help support these enterprises that are struggling with the pace of change. So three things. The first is, I know the cathedral and the bazaar is possibly a trigger word or a phrase for some of you. Great work, great beginning to the open source movement, but I actually think the metaphor applies in a slightly different way. The cathedral and the bazaar, right? Structure and chaos. These two things actually work really well together. This is a picture of La Sagrada Familia. It's one of Gaudi's greatest works. It's almost done. It's been nearly 140 years worth of building it, but it's a great example of where you can take lots of structure and you can take lots of organic creativity and you bring them together to something that's really great. Open source communities need to think about how you integrate with proprietary software, right? You need to think about how you work with services that might not be open source based because that's the world that the enterprise lives in. So embrace those two things together. There's a duality there that's good. It's okay. It's helping the world. Build bridges, right? Build bridges between communities and that's not just so that we can have a better collaboration with each other, but it's actually so that the end users have ramps to get into other parts of the open source ecosystem. It allows them to adopt some technology, get some value from it, and then maybe take a step across another bridge that your community has built to find something new, something useful, right? It helps them navigate between these communities. Third point, bake change into your project and your community's DNA, right? Because just like the enterprises, just like the companies and the nation states are dealing with constant change in technology and science, so are you, right? This creative destruction process that we've created where new things get created, old things might go away. We need to bake that into the way our communities think. Be comfortable with the fact that we're going to constantly be changing. So those are my three requests. And open source really, any software, it gets created for users, right? The user might be a single person, the person who wrote it, or it might be a large multinational or even a nation state that's relying on that software to do something valuable for their customers, for the citizens. And I started the talk by saying I had a request for you and here's what it is, right? We as open source practitioners need to think more about the users that are not deeply involved in open source. We need to think more about helping them navigate this world of change. We need to think more about helping them cross between communities, cross between proprietary and open source software. So that's my request to all of you and thank you very much.


couple of days. So Craig, talk about your experience specifically as it relates to this whole certification program. When did you start? How long did it take? You know what are the what are the hidden costs involved like in other words are there other prerequisites that people should know about that they need to sharpen their skills on? You know start there and then I want to ask you some other questions on how you would advise people but so start with like how did you get started? What did it take? What were some of the complexities? Sure so when you look at the cloud computing architect certification there are a series of prerequisites that are suggested but to actually get the certification you have to take the ISM certification exam as well that's that foundation level certification. I attended the first class that they provided externally for a cloud computing architect certifications. The class was very informative very engaging very interactive. There's a series of booklets that were created for for content as well as scenarios that we worked through during class to look at different architecture solutions around cloud computing data center fill over things from that perspective. But overall it's very strong class our class I think was very intelligent there's a lot of strong background from the individuals in the class so it led for great discussion sessions but the overall course work was very strong it was very supportive as to what we faced for the exam itself overall great class. So start to finish how long did it take you to to go through the program? It was a one-week class, a one-week, four days. Yes a four days? Yeah four days very fast-paced. So total immersion into the subject matter? It really is there's a little introduction and then you get very deep into architecture governance risk management things like this like that. And then when did this take place? This was mid-April I believe. Mid-April? Yes. So if you got a raise yet?


So, we know that light is quantized, light is made up of individual particles and we have to have an integer number of those, one, two, three, or some integer number of photons make up a light beam. Turns out not just the energy of light is quantized, meaning we can have the energy of one photon or two photons or three photons, but we can't have the energy of one and a half photons. We can't have a non-integer number of photons, so we have certain allowed energies of light that are allowed. So we say the energy of a light beam is quantized. Turns out not just light, but the energies of other things are quantized as well. And that's also something we at least have a little bit of experience with from general chemistry or earlier chemistry classes. So when we write an energy level diagram, so let's say in particular for something like the hydrogen atom, the electrons in a hydrogen atom can occupy certain states and those states have certain energies. We know we can call those things like S and P and D orbitals, but for now if I just say the energy of that electron can have this value E1 or this value E2 or this value E3 or various other values, essentially what I've done is say the energy levels of that hydrogen atom are quantized. I can have this value or I can have this value or this value. I can't have any values in between the values that I've drawn. There's no way to make the hydrogen atom have this amount of energy. It can only have these discrete individual quantized amounts of energy that I've drawn on this diagram. So that's something that we know about hydrogen atoms and in fact every molecule, every atom, every chemical system has quantized energy levels. And as usual, we didn't suspect this weird quantum behavior was true even if it seems fairly commonplace now. It wasn't always so. And the evidence that we have that first told us that energy levels were quantized was understanding how light is either emitted or absorbed by atoms and molecules. So something called an atomic emission spectrum. If I bring up a picture here of the atomic emission spectrum for hydrogen. So let's go ahead and bring up a picture. This diagram for hydrogen tells us the frequencies of light as a function of the frequency here, the frequency of light given off by hydrogen. And we see that only certain frequencies of light are emitted. So this reddish color of light can be emitted by hydrogen atom if I excited up to some higher energy level. It can drop down to a lower energy and emit a photon of this reddish color or this bluish color or these violet colors. But only these colors. I never see hydrogen emit the orange or yellow or green frequencies of light that would be here. So only certain discrete or quantized photons are emitted by hydrogen and that's because when a hydrogen is in this state it can only fall let's say to this state or to this state. It can't fall anywhere in between because there's no level there to accept it. So for example, this reddish photon is emitted when hydrogen falls from its third state down to its second state. There's other each one of these different photons corresponds to a different individual transition between discrete quantized states of the hydrogen atom. And that's true not just for hydrogen. If I pull up another picture of what that looks like for helium. This is the emission spectrum for a helium atom and notice that the colors of light given off by a helium atom are a not the same as they are for hydrogen because the energy levels are different for hydrogen than they are for helium. And also they're still discrete and quantized only this color of light or this color of light or this color of light and so on can be given off by helium not anything in this range where we don't see emission. So it's not just the energy of light that's quantized but also the energy levels of matter meaning atoms meaning molecules that are made of atoms. Those energy levels themselves are quantized as well. And also interestingly it turns out it's not only energies that are quantized but other properties of matter can be quantized as well and that's the next thing we're going to talk about.


I've really known Amber most of her life. Growing up, in fact, her father and I were worked together in soybean leadership for the Minnesota soybean growers, so knew her through her family. You know, as you had the opportunity to watch Amber grow up through FFA, and then of course college after college got to know her a little better with her work with Senator Coleman, with the farm credit system, and then now with Minnesota Farm Bureau as our director of public policy, she is that right person that understands how to work with people. Well, I think if I had to pick one word to describe Amber, it would be flexibility. Throughout her career and now with Farm Bureau, we work a lot with appointed elected officials, and the need to be flexible as we're in Washington, D.C., St. Paul, doing those visits, she understands the important to be flexible.  You've got a lot of people with varied backgrounds, not everybody sees everything the same way, and she understands how important it is to be flexible in not only our conversations but in the actions, and it understands that working together works, and if we can just put a whole bunch of people together, talk through an issue, we usually can come up to a conclusion that has a benefit for everyone. Well, I think to me, to Minnesota Farm Bureau, which is where the largest farm organization in the state, it's that dedication and that commitment. When Amber says she's going to get something done, she's going to get it done. If she's not sure of an answer, she'll tell you that up front and then find that answer for you. So, her commitment to follow through, to get things done and get the right people at the table at the right time. I don't have firsthand a Gustavus experience, but I have siblings and parents that were all graduates of Gustavus and understand the importance and the great thing that college does, and that just helped propel her to the next level. Working on a couple other jobs and then ultimately finding this home with Minnesota Farm Bureau, and it's just those commitments, whether it's a commitment as a student or as an employee or as director of public policy, you need to make sure you get the things done, the need to be done, and make sure that you have all those attributes of integrity and honesty. Whether it's a weekend, after hours, things come up in policy and politics, unexpected, and she's always been there when we needed her, never afraid to answer the phone or an email, a commitment almost 24-7 to her job with Minnesota Farm Bureau.


Not only does she have a wiener dog named Noodle, but she has five chickens. All of whom are named after prolific female Olympian figure skaters from the mid-80s to the early 2000s. I know what this is. All of you knew what this was and not a single one of you said, Jonathan, don't open this next to your face. So here's the value of this. This is what it looks like if you don't have it.  Thank you so much for watching this week's episode of Tools of the Trade. My name is Jonathan. This special perfect angel is Noodle, and this is the show where we find out what everyday items our everyday entrepreneurs need to get through their day. And this week we are beside ourselves with Joy that we're going to be featuring a box curated by Joanna Hawley. And Joanna is someone who a lot of you might be familiar with already because of her massive Pinterest presence. She's got about four million followers on Pinterest, and she's really well known not only for her Pinterest following, but for jojotastic.com, which is a blog she started after she left school as an industrial designer. So as a career, what she's done is she's not only built herself up as a blogger, but she also works as a prop stylist and is a trend spotter for a lot of companies. So she has such good taste in merchandise and in style that what'll happen is these companies will come to her and they say, hey Joanna, we need to figure out what to buy next year. What do we stock our stores with? And she's the kind of person who will look at up and coming trends and things that people are really focused on, either on Pinterest or based on feedback she gets from her blog, and she'll recommend it to these companies, and they'll take her on her word for it. So she really is a trend setter in every kind of every sense of the word. Noodle is also incredibly into trends and is in very high demand from some other companies you may have heard of. Anthropology is yet to call. Anthro, if you need some fine taste, reach out to this guy. So we're going to dive into this box. I really can't wait to see what's inside of it, and I don't have to wait any longer because this is, I call the shots. Okay, so this is the very first thing in this box, and I have simply no idea what it is. Oh, we know what these are. I know what this is. I'm fine. So this is, it's an exploding trap is what this is. It's an exploding trap and it's very dangerous. Noodle is not concerned with my safety. Noodle is not the dog who's going to protect me. If someone breaks into my apartment and like robs me, Noodle's going to sit there and go, the good stuff's in the bedroom. What do you call this? What's the industry name for this?  It's just called a reflector. So this is something that she uses for her prop styling. If she's either taking photos for her own Pinterest page or she's working with a client, this is the kind of thing that you need when you're taking sort of high quality video, high quality photography because it helps to balance the lighting. It also, it's compact. You can fold it and you can store it and all of you knew what this was and not a single one of you said, Johnathan, don't open this next to your face. And it makes for good TV and I understand why you guys were going to do that. And thank you for having the viewership in your mind when you were making that decision. How does this? Oh, I did it. So through the magic of cinema, I just had this done for me because I have been capable.   And this is literally a tool of the trade. Again, noodle did not jump to my rescue and that's something that I won't forget. The next item we have is this. And I'm not scared to open anything else. I don't know if it's going to pop out at me. Beautiful tools to inspire beautiful work. Okay, I can dig that. Oh, it's a notebook. Okay, so this is just lined. It's a notebook of lined paper. Any kind of stylus or trend spotter or anything. If you have a notebook that you can freely draw in or you feel that you can create in or you've got an idea, I've got to jot something down. Whether it's something that you want to make yourself or it's something you want to have designed, I can imagine that having a blueprint for that is really, really important. She also uses this for to-do lists, which I think makes perfect sense. She uses this for meetings, for things she's got to do that have nothing to do with her business, just keeping herself organized throughout the day. And that's any, that's, you know, organization is an absolutely invaluable tool for any entrepreneur, no matter what sort of business you're in and no matter what scale your business is at, whether it's one person or it's 50 people, you have to be organized. And I say that as someone who is not organized. Go put it back and it's a little rapid. And so glad it didn't dry and bite me like the other one did. The next item we've got, I'm actually thrilled to see these blue light glasses, you guys. I've got a pair of these at my desk. Most of the stuff that she does is digitally. She does a lot of work on Pinterest, you know, a lot of emailing, a lot of designing, all that stuff. If you're staring at a screen, whether it's computer or your phone, you want to have something that's going to help protect your eyes from the blue light on those screens. So when people say you're straining your eyes by looking at screens for so long, it's because of your exposure to that kind of light. And they look cool, like, again, I look amazing.  Thank you so much for saying you didn't use your words, but I took that from your action. Thank you for complimenting me. Okay, the next item we have, oh, I know what this is. So this is a portable charger. A lot of you know what a portable charger is, but it really is exactly what it sounds like. It's a charger that you can simply take with you. I know Joanna tells us that she has a lot of work in the Seattle area, but I can imagine that someone who's in as high demand as she is has to travel a lot. So having one of these in your bag is great for airports. This is just a really sensible, smart item to have for anyone, again, whether you're an entrepreneur or you're just somebody who exists in today's society. And I'm going to leave it next to Noodle, because as we remember, Noodle lets out a small, radioactive pulse every couple of minutes, and I think it'll help charge this to full. Here you go, sweet man. There you go, my boy. Okay, the next item we have in the Joanna Holly box is, it's a pop socket. For those of you who don't know what a pop socket is, it's sort of a little boop that you put on the back of your phone so that you can either prop it up, you can kind of prop your phone up like this, or it's just something that you can kind of hold onto when you're walking with your phone so you don't drop it so much. This is a really practical item for a lot of people. I know friends who absolutely love their pop sockets and they'll sit there, you know, with their phones kind of propped up just like watching TV while they're working or whatever it is. And that's kind of where that ends. The next item we have in the Joanna Holly box is, so this is something I love about her. They're stickers that say Dawksons are a girl's best friend. Joanna, and this is something where we're very kindred on, is a huge Wiener Dog fan. She has one Dawkson, and that Dawkson's name is Noodle.  Just because the name Noodle, I think speaks to really important animals. Noodle has never been one to share the spotlight, so I'm gonna run this by him right now. Noodle, wake up if you are happy that there's another dog named Noodle getting some attention on this show. He's completely unconscious. Not only does she have a Wiener dog named Noodle, but she has five chickens, all of whom are named after prolific female Olympian figure skaters from the mid-80s to the early 2000s. She's got Nancy Kerrigan, Tonya Harding, Kristi Amiguchi, Michelle Kwan, Dorothy Hamill, oh, there's a sixth, she has a sixth chicken. She's a German. Katarina Witt, she said they're big, nice, beautiful, fluffy chickens. What else do you need in this life? What else do you need? Okay, the final item we have in the Joanna Holly box is, I have been blown away by this box. I love everything inside of it. It's called Big Magic. And it was written by Elizabeth Gilbert of Eat, Pray, Love, Fame. Underneath the title it says creative living beyond fear. So I'm gonna read the back of this. We toil alone and we are accompanied by spirits. That's already horrifying. The idea that you're toiling alone and you're shrouded by spirits. We are terrified and we are brave. Art is a crushing chore and a wonderful privilege. Oh, okay, cool. So this book is very much I think it's kind of a meditation on creativity and people who are willing to push the boundaries and kind of experiment with what makes them creative and what sort of sets off their creative intuition, their creative juices, while also trying to help people navigate through feeling scared to create. And I think kind of having the ability to always recognize that you're a creative person, but you still need to keep yourself sort of motivated and inspired to learn how to sort of overcome that fear by venturing into a new discipline or a new project, whatever that might be. I'm sure this is an incredible tool for her to have. Also shout out to literacy, right? Things are great. There are no pictures in here, but who needs them? So that is everything. That is the Joanna Holly box. And I was completely blown away not only by how thoughtful the items were, but how surprised I was almost my face ripped off off the very first item and also that there wasn't a single chicken in this box. More than anything I love about this box is we learned a lot about who she is as a person, right? We know she's an entrepreneur, but she's also very fun. If you loved this video and you want to see more videos, like it. Please like the video and subscribe to our YouTube channel. Also, don't forget to ring the bell so that you get a notification every time a new Tools of the Trade episode goes live. So for Noodle and for myself, thank you so much for watching.


A very quick introduction about myself. I've been making software for the last 15 years and mostly working on building large scale systems in companies like Amazon Trilogy and last five years I've been running a company called JustPay, was introduced to Clojure maybe five to six years back and that's when I kind of got enlightened about how much programming can be much more fun, right?  And yeah, from that this is a story about how I transformed into a Haskell guy from a place of not having types to, from the art to the math. And also the journey, what made us do that, right? So that's a little bit about me, about the company that I run. So we run a company, how many of you have heard about JustPay? Yeah, okay, most of you have, I believe, used it, right? You guys are using software which is written using functional programming. So we have been, we are a company in which most of the people, 90% of the people are freshers and a lot of them are interns and there are very few, very experienced people who are guiding and there is no middle management and there are no traditional architects in our company. And you can imagine how to run such a company, right? With the traditional way of making software, it's almost impossible. And the challenge that as a payments company we face in India is, as you see, typically a payments company like, you can imagine MasterCard, Visa, Stripe, et cetera, in the U.S., looking at them as very big, but in India, the unit economics, it's almost, you have to give your software for free. And we have to have enormous scale and enormous diversity of software. We have to build a lot of vertical solutions. So we can't just make an API and say, like for example, Stripe makes nice APIs and that is enough to run as a business. But here we might need to do transportation solutions, retail solutions, certain types of B2C apps for some large B2C guys in which payments is a major part, et cetera. So we ended up actually making a lot of apps and with a lot of freshers and interns and we were not able to manage the complexity. And you guys can imagine making an app like Beam. How many of you have heard about Beam? Yeah, so Beam is made by us and Beam runs a functional code. So to develop reliable apps with freshers and also as a company, we really like enabling people. In fact, before Jasper, I wanted to start an education company. And at that time, I didn't want to teach the wrong stuff to people. I wanted to actually run a company and see what is the right thing. And now I feel like I've found something that I can teach people. We are also starting something called Jasper University in which we are gonna teach Haskell to thousands of people. So this talk is a bit about the journey towards how we are getting there and how we are gonna solicit support from you guys for that, right? So the first thing is like attacking the problem of building apps using functional programming. We built an internal framework which is like React Native, which is like how to build apps using JavaScript. And that was our first entry into making apps. At least we went into a language in which functions are first class citizens, not Java, so JavaScript. And last year, we have been extremely into making apps using JavaScript. And we have been introducing the monadic way of writing flows, et cetera, in building apps itself. And that gave us the taste of how nice functional programming can be, right? So as you all know, I think a lot of talks would have been talking about it these days. The complexity of our systems are continuously increasing. The complexity of the world keeps increasing. But the incidental complexity, the unnecessary complexity or the complication is actually increasing even further than the real complexity, right? And that is very clear. And app development is a very narrow problem. We were able to isolate these problems, right? The first thing is the event-driven programming model is absolutely not something that is scalable. And especially for transactional apps, which 80% or 90% of the apps are just transactions. It's just like flows. Like A, B, C, D, flows like that, take action A, action B, action C, action D like that in a sequence. And you don't need a complex event-processing type system. You actually rather would need a way in which you can easily represent a sequence of actions. Like a normal C program in which you can write a main function and say like read system call, write system call, et cetera, right? How it actually goes and waits and flows. So that is a much, much better programming model. I will come to that later. And the event-driven programming model is also not composable. So the code becomes like a spaghetti and like it's spread over everywhere and you are not able to see the building blocks which can be taken and reused. And I believe that most of the current frameworks, especially since we were in JavaScript, it's almost a pop culture. Everything is focused on getting started quick. And there is no focus on solving the fundamental complexity problem that I talked about. So here we started seeing though it was a very big jump, started seeing this is not gonna scale at all. And the industry is not at all even looking at moving towards something like Haskell, right? The level of theory that is in language like Haskell or the community like Haskell. So we started investing and we saw that after some time it was, though it takes quite a bit of effort to get it into Haskell, we found that it is really simplifiable. In fact, we went into category theory and my belief is that most of the complexity that we see around us is embedded in our brains in some other form, maybe as motor skills, et cetera. And if category theory is going to really represent the fundamentals of mathematics, there has to be a small transformation or some isomorphism between my brain and category theory or anybody else and functional programming or that things like monads, functors, et cetera. None of the monad tutorials are that easy, right? But I couldn't take it. I thought like I can make something which is understandable to a fresher or even a non-programmer. I'm still in that quest. We'll come to that in a bit. So the thing is about getting to the fundamentals and making those fundamentals understandable, right?  Everything is fragmented. Like if you take front end, back end, persistence, how do you make external service calls, analytics, the way you write business rules, how you handle infrastructure, everything is different. We started seeing why not see everything as functions, even including infrastructure. So yeah, this needn't be this way at all. And we anchored on enabling freshers and product managers to start writing code. Start writing concise code almost like equations or like English. And we saw that we were able to do that with functional programming language like pure script. And the language of our choice is pure script. I'll come to why we chose pure script given the other alternatives. And we had to choose a domain specific language which is built on top of pure script which is something that is going to be natural. As I said, we have to make these strong theories accessible to normal users, right? A way to do that is create a DSL, a domain specific language. And most of the interactions in an app is pretty much like this. It's just about a conversation between the user and the system. So imagine a typical app in which typically it starts with a welcome, it tells something to the user, it asks certain things, it constrains certain option and still asks or it asks and like allows you to do an autocomplete or a search. You might delight the user with something, you will thank the user, you will cross cell, you will notify, et cetera.  And if you look at the system, there is typical things that you read only data you fetch.  You do a lot of workflow like operations, et cetera, which are the system verbs. So it's not enough to just create the verbs which are required. We have to find a way in which they become composable. So just to take an example, an app like Beam or any payments app, I'm just taking, we are a payments company, we build a lot of apps in which there is this step called onboarding. Whenever you first get into the app or the signup process, right? For example, in an app like Beam, there is an introduction, there is a mobile verification and then there is a creation of a virtual private address, a payment address. So why can't we just write it as, so this is like a, we call it a fishbone diagram, which is nothing but a function hierarchy, a composition of functions, but it is a format which our product managers understand, right? So to see the Beam onboarding is like an introduction, verification of mobile create VPA, introduction is nothing but three screens, a welcome screen and step one, help, step two, help. Mobile verification is either verify the mobile by sending an SMS or verify the mobile by sending an OTP. If one of the options doesn't work, it fails. It is like a distinction, it is an R and it goes to the next option. And if you look at the verify mobile number, ask the customer for mobile phone, then call an API. So this is the conversation. It's talking to the user, talking to the system. Then there is a Lego block which actually is a polling mechanism for the local inbox for OTP and then it shows the success. So sounds very simple, right? That any business person can actually put things together. So why is it not already done this way? Is a question to ask, right? I think the core innovation that we did is making the user interface, the way in which you talk to a user, using a screen as a simple function called that waits and continues. For example, you can just do this, saying ui.choose operator from the list of operators and the return value comes to an operator. Using a continuation monad. How many of you know about monads? Awesome, and continuation, yeah? So you guys can imagine something as simple as this. This is how a code for a bill payments flow looks like. So our idea was the entire app should be written in one page or at least what we call as the control center of an app. For example, our features of the app like send money, receive money, onboarding, maybe these are separate files. So typically our apps are composed of three, four files and it is actually readable by a product manager. We are even teaching designers to code right now and I'm even teaching my admin to code or office admin. Well, it is understandable. People who don't know English also because they can see the app and oh, this is how it is and this is how the code is and both are similar, they are able to understand. And well, we had people, some of the people around the world also have been contributing to us in this platform and they flew to India and they have been calling, we are just debunking all the myths because they saw our QA. We call this as the, this is a continuation monad to write apps. We also have a Selenium wrapper in which you can run test cases.  So this is how simple we can make the code and make it accessible to users, though it's Haskell. In fact, you guys definitely know that when you write functions like this which are pure and this is written using a free monadic DSL. How many of you have used or heard about free monads? So it's pretty much like function composition, just that free monads helped us look at our functions a little bit more like data and decompile some of the internal types. You can actually look up free monads or we can also discuss it offline. It's quite, the theory is pretty complex but that is what helped us in making the DSL so simple at the higher level. And it's almost, it's readable and it reads like a narrative and this is another way in which you can write even without the, you can just like keep piping the statements, the return value of statement after statement into the next. And the continuation monad of pure script also supports the alternate operator so you can actually have our flows. You can have, for example, in a screen you have a call to action which is like a pay button but you have an auto-completer. The auto-completer also has to be active, the pay button also has to be active so you can have parallel flows. So all that we just got it for free. Sure, more about pure script. Okay, all of you guys are into Haskell so you know about composition, how state management is done great and the conciseness, clarity of functional programming. Continuation also you know. The great thing about pure script when you come from Haskell is that the runtime is JavaScript. Pure script really compiles to very, very clean JavaScript which is readable, which gave us a lot of confidence because whenever you use a language which compiles and when it's actually not such a, the community is growing right now but when we started using we still had questions on whether will there be bugs because, what about the stability because we are gonna use it in very, very serious apps, right? But the great thing is like we, it's really, really done well. Pure script is really done well and it has actually taken the best things of Haskell and used. In fact, most of the types will sound like category theory types in pure script and since it is JavaScript and we were a JavaScript company which already have been running JavaScript in front and back and it clearly fit well with us. All right, so then the next thing about the apps, we were talking about the goal tree till now. So overall what we see is the fragmentation that I talked about in apps. You can just have three building blocks and unify everything around these three building blocks. One is like the UI hierarchy which is a spatial tree which can again be function compositions. You can actually use a pure script, a library like Smolder or something to kind of build the UI hierarchy. What we talked about in detail sometime back is the flow hierarchy, the business logic. That is again a time-based tree. That is like a tree of time, like it's functions which are going from state one to state two to state three like that. So the interesting part about the goal tree is it is not only about the UI which I talked about. You can just do, the UI can flow into the backend and come back. We even eliminated the concept of APIs. Why can't we just call the function which just ends up running in Node.js and you don't even need to know, right? So this remote.payable will just be a payable function in another file which just essentially runs in the backend. But like for a developer, they don't need to define API. They just need to tag it saying like, okay, expose this as an API. So we unified the front end and the backend rather than imagining that we have to create APIs, etc. So our idea is in the future, writing the entire front end backend, everything like an equation, right? Within the same file. So the right parts will run in the backend, the right parts will run in the front end. A lot of inspiration for this came from a library called transient in Haskell. We haven't used it much, but like the ideology of transient, the ambition of that was mind-boggling for us. Like from the UI to workflows to even data computation, everything can be just done as flows was what it was showing. And in fact, that is kind of the approach that we are taking. We have unified the backend. We are also like adding to this DSL how we can do scraping. For example, sometimes we have to scrape some websites. So that can be again a monad which just is a parser monad, right? And doing SQL, that's another monad. So everything is just the same language augmented with little bit different, different types of DSLs, but it's all flow. So the third thing is types, which all of you would be familiar. So we are looking at unifying the entire app with the same set of types. So the backend, frontend, and even the database, all of these will have the same types. So that we can minimize transformation or even if some transformation happens, only in the fringes transformation should happen. Sometimes between the UI and the flow, transformation might happen, even that we are unifying. We are trying to create lenses on top of our core types, which can attach to the UI. And in the external API calls, transformations will happen. So we are building tooling in which from our core types to the external API, those transformers are automatically created. Okay, so why pure script? And as I said before, I've come from the Lisp camp, right? And for a lot of time, for almost two years, I've been asking, are people learn Lisp, learn Lisp, and people get into Lisp and say, it feels like JavaScript, okay? So one thing that I realized is, I think JavaScript itself, we have been using Ramda.js and bunch of functional libraries. And JavaScript itself started giving certain things which Lisp gives, except if a person has gotten a lot of experience in making forms like an artist. I think Lisp was not that suitable. Maybe for me what I felt is I learned a lot of, maybe five, six years before I went into arts a bit and started learning a bit of arts. And Lisp really kind of synced up with me in that mode, right? So even before making Presto, my first thing was like creating a Lisp macro to kind of represent flows. And that is what I have been floating around with my team saying like, oh, this is how the flow should look like. But our team just took sweet JS of JavaScript, which is like, which transforms. You can write macros and they were able to actually write the same syntax in JavaScript and show like, okay, you can auto-generate what you want in JavaScript. So in that regard, we were able to achieve, though not at the level of Lisp, but most of the stuff in JavaScript itself. But as a ever-increasing team size, maybe I see like at some point of time you will be having 1,000 people. Right now we are around 120 or 100 engineers working with us and all of them are in Haskell. When we increase the scale, it is impossible to not have types is what we started realizing. So that's when Haskell started making more and more sense where there will be a framework team and they are gonna define the DSL types, core types, et cetera. And there will be a army of developers who will start using the framework and start slowly learning more and more and getting into the framework team. So we were able to establish something like that, right? And that is not possible in the Lisp world in which each one will create their own small languages and it will diverge and it's maybe for a three, four member highly high-profile team it works, but like to create a large army of developers who are again doing really, really good software, I think the Haskell way is the best is what we have seen. And GHCJS is definitely an option that we considered, but it is unlike PureScript, it has a large runtime. Since we are an SDK company, you would have seen us in most of the apps like Uber, Amazon, et cetera, right? They would not be fine with us taking a large runtime and putting in their apps. So we had to have like less than 100 KB size SDKs. So there in itself, GHCJS was not an option that we were able to choose. And also the runtime had, it had more features, but like there were also stability issues is what people who are using it were saying. So in that regard, PureScript was the best choice and so far we have been very, very happy with it. So the architecture options. As you have seen, we have been using the continuation passing style, but the whole industry is looking at reactive, going the Elm way, right? So in fact, before using the CPS style, we have been using Redux. You would have heard about Redux, right? So it's great for dashboard-like apps or single-page apps with high out-of-order interactions, but most of the transactional apps are sequential interactions. And what we ended up seeing is unnecessarily we are having a global state and like having a big state machine to say like go from screen one, screen two, screen three. And there was so much confusion when those started increasing in size. Then I thought like CPS is just like the stack is helping me in remembering the state and unrolling the state whenever it is not needed, which is a normal function call, right? And obviously it made sense for a transactional app to choose the CPS style, but still FRP is something that is important. What we are seeing is that in the apps we are building, the base is actually a flow. For example, somebody will log in, a customer will sign up, let's say log in, and then go to the home screen and the home screen might have some kind of rich interaction. Maybe that part alone can be an FRP.  But the Elm widget will be a small part of the flow. It'll go to that widget and it might get out of that widget. But the fundamental framework or the backbone is a CPS style in which some of the leaf nodes could be a small FRP implementation. So that is something that we are augmenting to our system. Yeah, so what are the challenges? Definitely we have been taking people, even including me, I have not been the typical Haskell, right? I got into Haskell with a practical use case and we have made it work, but in the process, I think we faced a lot of challenges. The first is people look at it and like why are you choosing PureScript? Like people will come and join our company and they will ask like, why is it so different? Should I really learn it? Will it be useful across in the industry? All these questions. And you might have seen this infographic. I just picked it up from another place. That initial learning curve of Haskell is really, really extreme, right? So one thing that I have been working on is how to give in one hour a kind of intuition to people to reach the monads, right? In fact, what I started seeing is, first I talk about the richness of looking at things as functions, even as philosophy. Like even if you get to quantum theory, et cetera, everybody says like everything is, you shouldn't see things as nouns. You should see things as verbs. So even starting to see everything as verbs and kind of understanding everything as functions and looking at function application and function composition as the first two pillars, right? And then people start seeing, oh, everything is a function composition. This is a function application. And then you see different types of function applications. Pure data type and a function application. It's a normal application. Then if the data type becomes a structure or a context, right? It's a functor and an innocent function. It typically says structure and innocent function is a functor, right? And a structure and a little bit naughty function, right? It's a monad. And people start easily remembering that. And one is like just anchor them on certain, some of these concepts, because once you start showing the type signatures in the right way, maybe you need to swap the type signatures and show, if you guys are, because the monad bind operator has a swapped version of the functor's F map, right? Once you start showing it, people just immediately get comfortable within an R, right? And then start showing the use cases of monads. Oh yeah, just using monads, you can write like almost like we are writing a scheduler or CPS is like a scheduler. You see, this is how you write a parser. It's like semicolons in, and it is bridging statements together. And you start telling them saying, like, all these are pure functions. How, see, this is the backbone in which impurity is mixing. And immediately in an R, people are immediately getting that confidence that they can learn. And we have had success with this. And we are even teaching in other companies and all, and it is working. And the DSL that we made is very easily accessible, because without knowing what is continuation and all people can start making apps. For example, I'll quickly show you, like this is a app that is made out of this much of code, right?  You are calling an API to get the list of mobile phone operators, and then you are showing a screen to choose the operator, ask for the mobile number, ask for the amount, and call the API. So it is showing a list of operators, and I am entering the mobile number, and then entering amount, and the API gets called, and this is the final screen. To make a app like this, it is that easy, right? And if they want to, if you want to change it, let's say you can say, I am just skipping a screen, for example, here. It's as simple as that. In fact, we can, typically, this auto-reloads also. I've just skipped the mobile screen. So it's as simple as that. To make an app, it's just like a C's main function in which you are just writing statements, and people don't need to know what is a monad to do this. They think this is assignment operator when they start. That's okay. Yeah. Yeah, so the next challenge we had was typers, right? This is something that, when we were building the framework, we had a lot of, because right now we have been six months building it and it has really gotten to a level where without knowing the internals people can use, but the types errors are not contextual. It is gonna point to some wrong, different place other than the real error, and it is going to say something else, but the, which is not easily understandable to people, right? And people have been, a lot of times people will get stuck for half a day debugging one type error, especially in the initial stages when they are learning Haskell. Second is there was a concern on decrease in spontaneity. Like, again, from, if you look at it from an artist's perspective, you want things to be malleable. When you want to do something, you just do it and it shouldn't complain. And this was a major concern for me, will it decrease the creativity of the team, right? It's still something that I think about, but we have been mitigating these problems so far and we have some more ideas also. One is like, what we saw is like, if you force type annotation, basically PureScript gives you warnings, but while checking in our Githook, we have just like disabled warnings. That was good enough to just annotate all declarations with explicit types. That itself kind of started making a compiler point to, reasonably point to the right place where the typers are. And the other thing is typically, after one or two months, we start seeing the spontaneity. In developers, like they kind of, their muscle memory and their subconscious gets used to when they see some kind of error, they know what it is. Or sometimes they just, while typing itself, they just make it such that errors don't come. This has been happening, we are seeing by experience. And since we have really gotten to the high level DSL with a free monad, certain types of internal types are not bubbling up. In fact, AFF doesn't bubble up to the top. Like a lot of state management, everything is done below the free monad interpreter. So that has relaxed the type problem for us. So the big benefits. First thing is we are seeing like, there is a big shift in dev culture. So this is something that I've been struggling for the, like two years before like, really how to get people to think abstractly, how to give that thought process to people saying like, you can learn so much from nature, look at mechanical engineering and you can bring things in, you can learn certain things from art. I've been like trying to do much more vaguer things to get developers to get into doing better abstractions. It worked to some extent, only it's not easy. It takes years to build. Rather, I'm seeing that the Haskell is like a learning track. It's like to some extent that my brain hurts that thing is there, little bit of thorns are there. But if you push people into it, right? They get out with a different mindset. After few months, we start seeing like people really wanting to write apps like equations. And they are finding commonness between all types of things. For example, the send money flow and receive money flow. They're saying, oh, most of the things are common between send money and receive money. I'm going to abstract it out, right? So lots of things otherwise, which we had to push as experienced people, did you do this, did you do that? We are not required to do that right now. And people are enjoying it and doing. That's an amazing thing that I'm seeing. Through experience, it's amazing that we are seeing. We didn't expect that to happen automatically, but a group of people at least are doing it and we are making them the champions who are spreading that culture to the rest of the team. And we have seen people don't browse internet these days. Otherwise, it used to be like most of the time, like see answers outside, right? Anyway, there won't be much pure script answers outside. So everybody's figuring things out themselves. They completely stack over flow usage is gone, right? And we don't need, in fact, I'm not able to hire traditional architects because our one or two year experience engineers have gone like five to 10 years ahead in my opinion. So that's amazing. That's what Haskell is giving us. Very, it's a intangible thing, but it's amazing. And our development speed has really increased because of what I said right now because of this culture. And we also write Java script and pure script. Now any bug, people first go and check JavaScript only. Pure script is like no bugs and refactoring. This is again a very subtle thing. Like we are, we have, we are now thinking big ideas and those big ideas, we are able to take iterative steps. Like whenever I used to think big ideas, I will, in thinking itself, I would want to really converge and that used to be, that used to take a lot of time. Now like we take, okay, let's do this and see and then we can refactor. So that kind of thing culture again has come in. That gives us a lot of flexibility. We will talk about some of the future things that we are planning to do and we are taking certain, okay, maybe this is a possible solution. Let's do it and see any way we can refactor. So that flexibility has come in into the team. And because of the conciseness and the DSL, we are enabling product managers to at least review the code and they can write pseudocode also and they make these diagrams that I showed, the fishbone diagrams. And I say earlier said PureScript is also giving us the small app size. And we have access to all the JavaScript libraries. That's also a great benefit. So apps in production, the UPI SDK that we have built, which is powering a lot of apps, is built using PureScript. The latest version of JustPaySafe is written using PureScript. There is offline payments app called JustPayFuel, which is spreading in all the petrol pumps and gas agencies that's in PureScript. Beams, new features. We have also volunteered to do education app for teachers. That is also for the government. That is also done in PureScript. And we have built a bunch of internal tooling, including a web editor that we are writing, a PureScript editor that we are writing. That is also written using the same framework. Next is we want to extend what we are doing in our company to outside. So we are starting JustPay University and this is going to focus on functional programming and making apps using this framework. And the roadmap, we have already done this sketch plugin, where, so this is not exactly PureScript. This is right now in JavaScript and JSX, but we are looking at moving it to the UI structure using a library-legs-molder. But the idea is that we want non-programmers to start contributing to making apps. So the flow editor can again be done in PureScript. In fact, we are also, we have started a fun project to do using virtual reality code browser of PureScript. It might also, I think it will happen. It's a moonshot type project, but the next thing is we are looking at what if we make apps like Google Forms? Can we make apps in one day? Because we are seeing a lot of patterns in types of apps where we can have reusable components and we can just plug and play and immediately, for example, data collection. There are a lot of data collection apps. There are transactional apps, which is again data collection and doing a distributed transaction. Really speaking, it's UI distributed. Everything in between should be abstracted out. And there are communication apps. There are reporting apps. And all of these, you can just have a lot of pre-made functions which you can just compose and immediately you will have the app ready. So we are trying to find those abstractions. And I think we can reach one day apps. And one of the other things that we see is external APIs. A lot of times they are messy. And from QuickCheck, we got some inspiration of trying various values. So for example, when we take a lot of payments APIs, bank APIs and all this like documentation will say something, the reality will be something else. So we are looking at auto caller and auto figure, it will figure out types in itself. So we are creating a tool like that and we are doing something like GraphQL in pure script. And the type errors, we are seeing if we can plug in something into the compiler where contextually, because our framework is going to have certain types of some types for the screen, certain types of some types for the error messages. So we can actually show the right error based on the type of some type. It can say like you are missing a, handling one of the responses of the API rather than saying like unsafe partial of pure script. We are creating a web ID and remote collaboration tools, especially for Jasper University, because we want to, again, first is type errors. If 1000 people are using our ID and like who is actually struggling in type errors, some, we can have a small team which is helping them out remotely. And we are also looking at certain tools to convert our JS code into pure script code. At least semi-automatic. Some parts we are seeing like JavaScript can be directly converted to pure script. Manually, we need to code up some types, but a lot of functions can be converted. Another very, very interesting thing also we are looking at is what if the entire system, including the front end, back end, everything can be looked at as a reactive system. This is another R&D project that we are working on around Presto, which is like, for example, imagine a chat app. What if it is just like functions in which the mobile phone input one of user one is connected to one of the inputs of the function. Users choose text field. Input field is somehow connected to the second parameter of the function. Maybe the third parameter is the history database and the output is like the real, the chat, right? And that is sent to a transformer and it is just connected to the screen of the customers. So what if we start thinking about the entire app like a small composition of functions or a circuit diagram like this? So what we are seeing is the front end, client, server, in-between servers, everything can be abstracted out by just like having few buses. Like maybe having a web socket in which a bus is on top of which a protocol is there, in-between machines may be using Redis PubSub. So we are also, we see that this is also a easy extension that is possible. Even an Uber app can then be written like a equation which is of this size, which is actually communication between a user and multiple drivers, then drivers getting connected and then streaming of data between them, right? Which is, if you actually think about it, in fact this is inspired from pure script behaviors that was running on the browser. We thought like why not it just encompass the entire system, right? Conceptually we are seeing it's possible we have started to work on it. Yeah, so that's it. We have a lot of ambition around this platform and we are looking for collaborators. If you guys have any questions, we'd be happy to answer. So we are in the back end also, we are using pure script only. So right now we are not using Haskell? We are not using Haskell. Actually, we didn't, in fact, issues-wise as I said, generally regarding types, type errors and the learning curve, few other things. Pure script is a bit evolving language. Sometimes there are breaking changes, we have to migrate but that is okay because again having types we are able to easily refactor. We, in fact, we haven't been using Haskell in production. What we do some toy projects in Haskell to learn because there is a lot of learning resources in Haskell and we keep bringing those into pure script. Yes, correct, correct, right? Yeah, in fact we have been looking at the FRP creator, I think, call in Eliot. So we have been following that way of doing FRP and there is a Haskell library called React to Banana and we have been taking that approach and pure scripts behavior approach is also similar to that and there are lots of other approaches. Elm is also something that we like. Reflex, I haven't seen it in detail. We have used Redux, which is like Elm. So we are mashing up something in this framework itself where we call it active widgets. Like just like we were saying like in our in our CPS continuation monad we can show a UI, but instead of it being a static simple UI it can be an active widget, which can be a streaming data into it or it can also be highly interactive FRP system. So we are taking the React to Banana approach and the pure script behavior approach. Yes, yes kind of in fact I think halogen as you say is a bit more sided towards building UI. We are looking at the presto's flow to be something which is independent even of the UI. Right now it's primarily used for mashing up the UI flows and as you said it is going to extend to the backend and as we were discussing also about scraping, et cetera we are also doing IoT extensions. So what I see is the flow paradigm is something which is more than the UI. And halogen is in fact more focused on the UI. They are also using AF of monad continuation monad only, but kind of focused more towards making the UI development really, really easy. Highly out of order interactions like a complex dashboard. Like the home page of like the main page of the dashboard where like where is which user can do like A, B, C, D, B, C, D, A, any of these order. At that time we have to make that into a FRP widget. And from that maybe a user action will again get into flow and come back to FRP. But the FRP itself is started by a flow. So FRP is sandwiched by hold it by the flow and on top of which also it can go and come back to flow. So this is the model we are thinking about. So we are just open sourced. Currently it is open sourced for education because we did a free education project and for that we had to open source. We are I think in next 10 days you can see like fully all those figured out. We are in the process of doing it. So it is the aider is what we use. Like typical how errors are handled in Haskell. Is it about just the what are you talking about the business errors or make sense? Yeah, so in fact we have ability to that's a good question. In fact we have the ability to switch back even think about back button, right? We have to rewind the state, right? If you take a code like this. If user actually clicks back button in this line in the amount page, it has to go back to the mobile number screen. So we have implemented the state monad to go back and we have the option of making checkpoints and going back to different states and from that that can proceed. So both in terms of users choosing to do back button or errors, right? In fact what you can do there are ways in which you can put this in a block and you can do retries. Typical errors are retries. So we see a pattern of retrying the entire flow. For example you can take this whole thing and make it into a subflow and you can actually have retry logic around it. So we see like there are patterns in handling errors. One is like typically retry the entire flow once more or do an alternate flow and come back and retry. So we have constructs for those. Yeah, I agree. Agreed, agreed. In fact I can see whether I have some code around. In fact I can show you some more real code in which it will be a little bit more complex while it's handling errors. Okay guys, thank you.