Hi everyone. I'm Jonas. I'm originally from Switzerland, however the last four and a half years I've been living in Tokyo Japan and I'm working for a company called HDE in Japan and we are hiring like everybody else so if you're looking for a job or if you're a university student we also have a fantastic internship program where we will pay your flight to and from Japan and you will have a paid internship for six to eight weeks with us. If you're interested in any of this please feel free to come talk to me or check out our website. Just quick links where to find me if you have any complaints or feedback after the talk. I'm og.ch on Twitter. I'm og on GitHub and the company website is hd.co.jp slash en. So yeah my talk is called why you might want to go async but thinking about that it's maybe not a great talk title because before I can explain you why you should go async I should probably explain what I mean when I say async. So who here in the room understands what I think they understand what what I mean when I say async or who has used async. Okay most people so you can probably leave and go to another talk. No okay so yeah async is short for asynchronous and more specifically when I say async I mean asynchronous I.O. and especially in this talk I will be focusing on asynchronous networking and so reading and writing to a socket doing HTTP requests responding to HTTP requests doing database queries that kind of stuff and it's the opposite of synchronous or blocking code. I'm probably the best way to illustrate syncing versus asynchronous versus asynchronous is to just give some example of libraries on either side so the probably most famous synchronous library in the Python world right now is requests which is a HTTP client library that probably most of you are familiar with it's synchronous as is Django which is a web framework Flask also web framework all of these are blocking and synchronous and there's Postgres libraries class equal libraries and libraries to talk to AWS when actually most libraries you will find on PyPI will usually by default be in a synchronous and blocking mode of operation. So what are some asynchronous libraries that we have? There's Twisted which has been around since about the Bronze age. It's been yeah it's been around forever and it's a very very good library if you want to do asynchronous networking in Python. They have support for every protocol under the sun and there's also Tornado which is similar to Twisted and asynchronous networking library but more focused on HTTP servers and HTTP clients and since Python 3.4 we have async.io I think called async.io in the standard library which allows you to do asynchronous networking right out of the standard library and there's also Seneca which is a Flask like and there was a talk about that yesterday as well as it's a web server web framework but it's asynchronous. There's also Curio which is an alternative to async.io. There's AIO PG which is an extremely fast Postgres client. AIO BoDocore if you talk to AWS services and since I'm giving a talk I might as well just shamelessly plug some stuff that I wrote and there's a thing called AAPNS which is asynchronous Apple push notification service client library and Arsenic which is an asynchronous web driver client. If you're not familiar with web driver that's you might be familiar with Selenium so it's like Selenium but async and in asynchronous I.O. there's a couple of fundamental core concept and at the very, very core there's this thing called the event loop. The event loop is a thing that will run all your other code and it will schedule all your functions to run in the correct time ideally and it will handle the I.O. that is coming in and that needs to go out and making sure that your stuff gets called whenever it's possible and the other fundamental block of asynchronous I.O. code these days is a thing called coroutines. Previously when we did asynchronous code in Python we did just callback hell so you write callbacks for everything. These days we can use coroutines and the coroutine is a function which allows you to do cooperative multitasking and that's where the name comes from it's cooperative subroutine and a coroutine is basically a Python function but one that is aware of asynchronous networking. So in general in Async I.O. what we try to do is to have I.O. so anything that reads and writes to sockets or the network to be non-blocking and however your logic by logic I basically mean if those two statements in Python are still blocking. So yeah. After this short crash course of what Async is or what I mean when I say Async why do you might want to go Async the answer is actually simple and I will just give it to you it's money. You can save a lot of money by moving from synchronous network servers or synchronous clients to asynchronous servers or clients. But again, the title why you might want to go Async is probably a really bad title, and the better title might be, why does going async save you money? So a very common mantra you hear people complain about Python is that Python is slow. And one of the reasons why people say that, especially when they compare it to something like Node.js or Golang, et cetera, is that in our default world of synchronous web servers such as Django, a single process or threat can only ever handle one request at a time. So that's obviously not enough. We cannot just have our app handle one request at a time. So what we generally did in the past or even in the present is we just spawn up more threats, we spawn up more processes, we spawn up more servers to handle more than one request at a time. And doing this, we waste a lot of resources, primarily CPU, but also a lot of memory because all these extra processes, yeah, they need extra memory overhead to run. And a thing to realize in where you might wanna go async is that most of the time you spend when you write a web server or if you write a web crawler or something like that, is that most of the time you're not actually spending doing Python code, you're actually just waiting for somebody else to give you data. This might be your database, this might be a third party service, this might be the website you're trying to download, this might be the client trying to upload a GIF of a cat.  Your template render engine is usually not the bottleneck or where you waste most of your time. So yeah, this whole mantra of Python is slow. Again, it's probably not entirely true or at least not very honest. I would rather say Python is inefficient. But that's also not true because Python isn't inefficient. Synchronous Python is. If you're writing synchronous web servers, synchronous web clients, synchronous database clients, you're wasting a lot of time just waiting for nothing. So let's have asynchronous Python come to our rescue. And I will give an example here. I've been talking a lot about web servers and I will continue to talk a lot about web servers because I believe everybody understands roughly how the web works. But all of this also applies to databases, database clients, servers, what not. But yeah, in this example I will implement a little handler that handles a post request. It will read the post data the client sends us and save it to a database and then return some identifier as JSON to the client. So let's implement this in a synchronous web framework. I hope you can sort of read it. I don't know if it's big enough. But yeah, this is not a real web framework, it's just how you might do it. So you have a handler, it takes a request, it returns a response. On the first line, it reads the post data from the client. Second line, it saves it to the database. And then the last line, it just returns the response. So what happens if we have two requests coming in? And they're on the right side in the comments. And so yeah, the first request starts handling. It reads the post data. It saves it to the database. The second request is still waiting on the top, cannot do anything. First request is starting to write the response. Second request is still waiting patiently at the beginning. And yeah, the first request is finally done. And the second request can start being handled and it will also go one step by step through this. And this is a very simple example, but I hope that you can sort of understand where the fundamental problem of synchronous web servers lies. So let's rewrite this amazing web handler in an asynchronous fashion. And it might look something like this. And the key knight among you will have noticed this crazy thing that I do no longer define my function which is def handler, I give it this crazy keyword async. And also we don't return response anymore. Now the async keyword is what defines a coroutine function in Python. Prior to Python 3.5, there was a decorator to do that and now we have this nice keyword to make it easier. And an important thing to understand about the async keyword is that the async keyword doesn't make your function asynchronous. The async keyword allows your function to potentially be asynchronous. Because if we look at the second line, you see this again, this crazy new keyword that you might not yet be familiar with await. The await keyword is actually what makes your function asynchronous. And in the previous example, when we, in the synchronous example, when we got the request, we choose to access the post data on an attribute on the request object. But here we call this get post data function. And the reason for that is that in a synchronous web server traditionally, if a request comes, we read the whole request, pack it into a Python object, and hand it over to a request handler. But an HTTP request is usually compromised of a request line, which indicates the HTTP method and the path followed by a bunch of headers and then potentially a request body. And the request body might be fairly large. It might be a video, might again be a gift of a dog or a cat. And so in the asynchronous world, usually we only read the request line and the headers. So at that point, the request handler can already do a lot of checking. It can check if the path we're trying to access even exists. If not, it can just stop the request and not waste any time reading all that data from the client. Or it might check cookies or authorization headers to see if the client is even allowed to do what they wanna do. But the change, but what that means is that now, instead of just accessing the post data, we have to await the post data. And this is where the async magic comes in because while we await this data to arrive, our event loop, our asynchronous framework can go handle other requests. They can call other Python code. And when we eventually get all the data from the client, it will return to our function and assign it to data and we will continue. And then in a second line, we do basically the same thing. When we write to the database, we write to the database and then we have to wait for the database to respond with an, yes, I saved this item to the database. And again, because of the await keyword, while we wait for the database to respond or finish responding, we can go handle other requests and do other things. And lastly, rather than just returning a response object, what usually happens in async is you create a response object somehow from a request with the HTTP status and the headers and then you write to it. And you can write to it multiple times and then you eventually finish it. Now, in our simple example, we don't really need that we could just return a response object because it's so simple and small, but imagine you're generating a CSV file on the fly and you might query a database multiple times to fill the data. And in that case, you could do one query and then write that to the CSV and write it directly to the client and asynchronously keep filling data from your data store into the CSV and then finish it. And this way, the response will be a lot more responsive on the client side. So again, let's see what happens if we have two requests coming in. The first request will start getting to the read post data and then while it's waiting, actually the second request will also start awaiting post data. And then they will, maybe the second request was faster because it has a better internet connection or the first request uploaded a huge amount of data, the second request used to tiny a little bit. So they can actually get out of sync and but they can just step through kind of in parallel or together and be done with it. So why does this work? Again, it works despite us still having only one process, we only have one thread. But while one request is waiting for data to arrive or data to be written and returned, the other requests can be handled by our system. And if that whole code was confusing, let's just give an analogy of a restaurant. Imagine you open a restaurant here on the beach in Rimini and a customer comes in and they want a five course meal.  And now a second customer comes and they want a coffee and you say, no, sir, or no, man. You have to wait till this other person finishes their five course meal before we will give you your coffee. Now this is a problem because now you have all these people waiting outside your restaurant to be served. So obviously what you're gonna do is you open more restaurants so you can still serve one customer at a time. That's what we do in Chango and Flask. And an alternative, and I know this is crazy, but an alternative would be to have more than one table and if a customer comes in, you seat them at the table and then you have your event loop or your waiters go to them and ask them what they want, send them to your database or your kitchen, I'm sorry, and they will serve them data at food. And then that way you can, your kitchen still doesn't have to be able to handle everything at once, but your customers can gradually get their stuff earlier. So let's bring all this theory a bit more to reality and a little bit of story time of where I work. My day-to-day job is building a single sign-on and access control system where people can log in to various services. So we need to handle a lot of login requests primarily on Monday morning when everybody comes to the office and starts their computer. So we've been using Tornado for a while but we've not really been using it correctly for various reasons and it wasn't really async. So what we did is we converted our main handlers to async and we're still using Python 2.7 at this point. We're still using the normal Tornado system and we're actually making heavy use of threats here at this stage because we have a lot of legacy code that relies on legacy APIs, et cetera that would be hard to just upgrade to async in one go. But so we just basically move all our IO out into something called a threat pool executor and looked at it and actually just doing this we were able to reduce our number of servers we need on a Monday morning by 25%. Now some people might say 25% that's nothing. I mean it's not even an order of magnitude who cares but in our case it was actually several thousands of dollars a month and the very, very interesting thing here is that our business logic, the thing we actually care about, the part of our application that does interesting things or what we think is interesting things state the same. All that we had to change is those little bits of code that do IO. Now this is because we already were using Tornado if you're on Django this will be harder but still the interesting thing is that these days if you're doing asynchronous Python code your code will look more or less the same except every time you do IO you might have an await statement or something like that there. So let's get back to my talk title why you might wanna go async and maybe a better question than that would be why do you wanna go async now? Because async has been around in Python forever I've been doing twisted since basically when I started learning Python I've doubled with it a little bit and they've been doing async since forever. So why now? And the very big reason for that is basically Python 3.6.1. Async IO was added in the center library in 3.4 but you still needed to use decorators to define your coroutines. You had to use yield and yield from and all these kinds of things that just didn't really feel right. And then 3.5 added async and await keywords which meant you can now make your code look beautiful and 3.6 added a whole slate of new great tools such as async iterators, async generators and you can use have async for you can even have async list and dictionary comprehension and you can have async context managers. So just like in your synchronous code where you would use a with statement for a file you can use a with statement for a client session or a database session or something like that but in an asynchronous context. And because of this whole thing with Python 3.4, 3.5, 3.6 doing all these async stuff in the standard library what actually happened in the wider ecosystem is we had a little asynchronous revolution in Python. All these crazy projects started popping up left, right and center and making the asynchronous environment in Python a lot stronger. We have a project called, there's a project called UV loop which uses the same event loop that Node.js is built on which is very, very efficient and brings that to Python. So it's compatible with async.io. So if you're using async.io you can just switch it out and according to their benchmarks it's a lot faster. And there's a thing called AIOPG which I mentioned before which is a Postgres client library which again according to their benchmarks is faster than for example the Golang Postgres client which I don't know how they do it but apparently they do it and it's amazing. And they're Seneca which some of you might have seen the talk on yesterday which is a flask-like web framework and that is also incredibly fast and there's all these other AIO libraries out there these days and that really like you build great good stuff. And the greatest, probably the greatest thing about async.io being in the standard libraries that we now have a common way to do async in Python which means even though we are using Tornado thanks to async.io I'm now able to use async.io libraries, I'm able to use Tornado libraries, I'm able to use all these libraries together thanks to the standardization that async.io gave us. So to continue this little success story we had with our lock-in handlers from before what I did a few months ago is I upgraded our app from 2.7 to 3.6.1. The main thing I did for that is I replaced the Tornado event loop with async.io event loop. It's still Tornado, we still use the framework which is use a different loop. I was able to remove about 20 dependencies because they were no longer required on 3.6 because they fixed things that were fixed in three back ported stuff to two. And I only had to rewrite really two dependencies we had our APNs client library to talk to Apple push notification services and some Google APIs. Now the Google APIs run work on 3.6 but the upgrade path wasn't clear and obviously the Google client library is synchronous so it wasn't really interesting for us so I had to rewrite it. And we were able because of the switch to async.io main loop we were able to use some of the async.io libraries that are out there and use better and get rid of some of the threading we need used and use actual real async. The result three times speed up of our request handler. And I'm gonna be completely honest I'm not entirely sure why it is three times faster but I'll take it. So yeah to recap why you might wanna go async you wanna go async to save money primarily and you wanna go async now because it's ready and mature in Python and it's really nice and awesome to use. And please use for Python 3.6 it's not just great for async it's great for basically everything out there. And yeah and with that thank you very much for your attention. If you have any questions please feel free or hit me on Twitter. Thanks for your talks very interesting. In the current Ubuntu long term support version 16.04 I mean 16.04 the Python version is 3.5.  I would assuming you're using that. I would install 3.6 that's what I do. We don't use Ubuntu we use a different we use Docker but we use a different base image and I just install Python 3.6 because yeah you can definitely use 3.5 to do async it's just your life as a developer you will be a lot happier on 3.6. And of course with Homebrew on the Mac you got 3.6 as well so then the environments are more similar. Yes. Hello thank you for the talk it was very interesting. Okay one question I noticed one thing I noticed myself when developing async apps in Python is that generally in async world file system support is not really good. Let's say you have to code the workarounds to make it work with file system in async apps maybe like dedicated to some thread pools for like file system storage and retrieval and stuff like that so how do you manage that? Yes so it's called async IO but one big part of the IO spectrum which is files is not actually included usually and that is because from what I understand and I'm no expert on that part but as far as I understand for example Linux kernel doesn't really or Linux file systems don't really do async IO at all so you have to find a workaround anyway and yeah the general workaround suggestion seems to be using thread pools. What I found is that in because we run a web server usually during a request we never have to hit the file system we need to hit the file system when we start the app a lot to load certificates to load settings files to load templates etc. So we just do that in the startup and take a little bit of a performance hit on startup have the startup be a little bit slower but then try to avoid to hit the file system. If you need to hit the file system threats are basically the only like the best options you have yeah. Thank you. Thank you Jonas. It doesn't always seem to be very easy to tell in advance what speed gains or other gains resource gains you might make by putting in the effort to go asynchronous. In fact you said that you weren't even sure why you were getting some of the gains you did. What strategy would you use to decide whether or not to put that effort in? So yeah so with the speed gains an important thing to realize here is that asynchronous async.io will not necessarily make your app faster. What it will make is make it more efficient. So a single request might be handled slower than if you were in a synchronous world because it has to share some of its time and resources with other requests. But if you have a hundred requests in general those hundred requests will be finished in an aggregate faster than if you did it in a synchronous world. So yeah that's one of the reasons why we were surprised to see such a speed up because we were expecting to just see a lot less CPU usage and a lot less memory usage but we didn't expect it to translate directly into a speed gain. And to your question on how you should choose if you wanna do async or not I would say always go async. Because these days it's not that expensive not that taxing on your mental thing if you're doing for your programming because it's getting a lot more convenient and easy to write and read async code. So I would actually say you probably always want to go async simply because of all the benefits you get from it. The only reason why you might not want to go async is if you are strongly bound to an existing framework or code base such as Django Flask whatever or if there's really no way to talk to the third party services that you need in an asynchronous fashion. I was just wondering how badly are you able to shoot yourself in the foot if you for instance would await a function that does logical computations instead of doing IO? Sorry if you're doing, if you're awaiting a function that doesn't do IO. That doesn't do IO like I was wondering like I'm still in the- Yes, yeah. So if you call, if you await a function that is not a coroutine it will just give you an error. If you await a function that is a coroutine but is actually doing heavy blocking computation of stuff that is really bad because it will block your whole event loop and there's an environment variable you can set primarily for development called Python async IO debug. If you set that to one it will actually in the console warn you if a single call to a coroutine takes too long. And so yeah, if you're doing computationally heavy stuff you still have to use the same tools and strategies that you would always use in Python which is either sending it to a different process or a different thread so you don't block your whole application. Okay, thanks. Any more questions? Okay, yeah, thank you.


Welcome to week eight of Capitol Beat. I'm Josh O'Horman with the Vermont Press Bureau and joining me now is Secretary of State Jim Kondos and we are going to discuss the possible creation of an ethics commission. We know that this is something that you are in favor of. So if you would tell us what is an ethics commission and why do you think this would be good for the state? Well, first let me start off by saying Josh, thank you for having me, but I also wanna say that the vast majority of our local state and municipal officials are trustworthy, are dedicated, are trying to do the right thing for their communities, but when you can have little, it's kind of like the death of by a thousand cuts. The whole idea is that we need to prevent any even ripples of corruption entering into our governments. What we've seen in our office receives calls almost every day of the week from municipals, from municipal officials, from constituents of those officials. We receive calls from state officials about potential problems and we research it and try to give them an answer as to whether the right processes or whatever to follow what the law says. And what we've seen is an increase in the number of complaints that are coming to us from citizens. And my feeling when I started looking into this was that we're one of three or four states in the country that does not have an ethics commission, an independent ethics commission, to receive those complaints, investigate them and determine if there's any validity and then make recommendations or enforce the law. And if you just look at the Northeast, we're the only state in the Northeast and that includes Pennsylvania and New Jersey and New York. We're the only state in the Northeast that does not have an ethics commission. The usual statement is that, hey, this is a small state, we know everybody. Therefore, we don't need it. But it's the little things that happened that really create the problems. We've seen an increased number of embezzlements. I'm sure you've covered some of them. We've had open meeting law violations. And conflict of interest is a huge issue and I think that what really starts to happen is that we do not have a mandatory conflict of interest policy. What we have is enabling legislation that allows municipalities and state government to have the authority to set one but they don't have a mandate to set one. So at the very minimum, I'm suggesting that that's what we need to do is at least mandate that every state agency, every appointed officer, every municipal officer has a conflict of interest policy and a code of conduct that they follow. That will probably reduce 90% of what we have out there. But there's a case recently that a state in south of here, a town south of here where the select board paid itself through contracts some half a million dollars for projects that they were doing in the town. It's kind of, it's really like, really? How do you go about that? So what current recourse does a rank and file resident of Vermont have right now if they believe that there is a conflict of interest? What can they do about it right now? The great question because in general, the first question we always ask is, does your town have a conflict of interest policy? Because it is enabling, there's no mandate that they have it. So that's the first question. And then we say refer to that conflict of interest policy to determine what the conflicts are that they cover and what the procedures are for addressing them. The other thing is to bring them up. Bring them out in the public. Go to the select board meetings and ask the questions, the important questions that need to be asked at the select board meetings or even at town meetings since town meetings in another two weeks, it's probably a good thing to do is to ask at town meeting, what are you doing about this? Or even to have citizens ask their town to adopt a conflict of interest policy. So I think there's a lot that can be done that really doesn't cost a whole lot. And I know there's a lot of concern in the building about the cost of setting up an ethics commission with staff and whatever. My only response to that is, what's the cost of having good government? What's the cost of having a good democracy? And I think it's a pretty minimal when you look at it in those terms. So that's a totally, what sort of authority would an ethics commission have in terms of either levying just any sort of binding decisions or what sort of authority would they have, you think? Well, there's probably 47 models around the state and they're around the country and they're all different. I know that in Massachusetts, they have an executive director 22 to 24 members of the staff and a five-member board that meets on a per DM basis. They receive and investigate 900 to 1200 complaints a year in Massachusetts. I don't expect that we would have anything close to that. But the fact of the matter is, you do have to, if you're gonna have an independent, it's gotta be independent of any state agency, of any elected office, I think it has to be it has to have a staff that has some authority to acquire the information that's necessary to investigate complaints. And then the board has to be given the authority to dole out punishment if you wanna call it. I do think that the real role of this group should be education first, hammer second. I don't think the hammer should be the one that we're holding over people's heads. I think we ought to be looking at how we educate people. I mean, do you think it's as much a matter of there's actually impropriety going on or do you think it's about the appearance and people's inability to be able to determine whether or not something is going on? In many cases, it is the appearance. And actually, if you look at most conflict of interest policies, it will say whether you have a direct or indirect or an appearance of a conflict. And that's the piece you've gotta address. And it's hard sometimes to write clear language, but I think we've got some pretty smart people in the building, we can probably do it. Now, Vermont is a really tiny state compared with others. And I mean, everybody seems to, at least here, it seems like everybody knows somebody or is in a relationship with somebody or is employed in some way. Do you think a conflict of interest policy is going to be challenging for a tiny state like Vermont? It may be, but that doesn't mean it's not the right thing to do. Excellent. I guess you would want folks to know from your perspective on this, sir? No, I just think that if you want to have good government, and to do that, you have to have open and transparent government. You have to be accountable and transparent. I do the Vermont transparency tour every other year. We do 12 to 15 stops on that throughout the state. And it's really about educating the public on the open meeting law, on the access to public records law. And that's what we're trying to do is just educate for Monters. Excellent. Switching gears for a second. You said that, yeah, we got town meeting coming up in like two weeks. What's that like for your office right now? Well, we will be open. We will be, someone will be on staff probably from about 5.30 or 6.00 in the morning until probably 10 or 11 at night. We'll have folks in the building and we will be receiving calls from town clerks and select boards on procedural issues, questions. And as they vote and if there are any problems with the election process. So we're available and ready to go. If we'll have vendors, members of our vending team that the machines come from the tabulating machines are available to us. So if there is a problem that we can send someone quickly to get that problem resolved. So it's a busy day for us and leading up to it. It gets busier every day. So do you find yourself fielding calls on the fly especially from towns that do, they still have the traditional floor meeting to be able to determine, hey, is this okay? Sometimes we do, sometimes we do. I mean, they have our cell phones and they know that they can call us and we'll have probably five to six people in the building working to answer the calls and try to respond as quickly as we can. Excellent, very nice. Secretary Connors, thank you so much for coming. You're welcome. I really appreciate it. And we'll be back in a moment. Welcome back. This week, lawmakers approved a bill that's going to allow for paid sick leave for all workers here in Vermont. Joining me to talk about this is Lindsey DeLaurier. She is the director of Main Street Alliance of Vermont. Welcome to the show. Thank you for being here. Sure, thank you. So tell us, what's going on with this? What's your interest in this? And yeah, what's going on? Well, I personally have been working on this issue for several years, maybe about five years. Most recently, I've been representing Main Street Alliance of Vermont. We are a nonprofit organization that works with small business owners around the state on public policy issues. And we have taken a supportive position on this issue. We've worked with a coalition of over 250 business owners in the state to look at the policy that was introduced originally, make recommendations for how to find the right balance for the issue to work for business owners and for workers. And the business owners I've been working with have done a great job of helping the legislature to sort of track that course and find a solution that obviously was the right solution for Vermont. Excellent. So can you just break down for us? How is this exactly going to work? When we're just going to kick in and how's it going to affect employers and employees? So the legislation is set to go into effect on January 1st of 2017. At that point, employees around the state will be able to begin accruing paid time off according to the legislation. Of course, for employers who already provide paid time off policies of any kind.  They likely won't see any impact at all as long as employees can use their paid time for sick days. For employers who aren't currently providing sick leave on January 1st, their employees will begin to accrue, but there's a one year waiting period for new employees and a one year waiting period for all employees at the start of the legislation. I see. Very good. Now you said you work with small businesses and you had a coalition of about 250 of them. We heard some opposition on behalf of small businesses saying that this is going to hurt them. And in fact, there was an effort to exempt businesses of what five employees are fewer. Correct? Absolutely. The business community, there has been division in the business community on this issue. The business owners that we worked with were those who in principle supported the idea that there should be a minimum standard of paid time for all workers in Vermont. And then their objective was to figure out how to make that standard work for business owners. There are also business owners who feel that any new mandates on businesses or perhaps this particular mandate isn't the right thing for Vermont at the time. So there is division there, but the businesses that we work with supported it. Excellent, wonderful. You know the indication, how many businesses who supported it already offered this? By any chance? I mean, there certainly are, there must be a number of small businesses that currently already offer paid, paid sick leave. Absolutely. About half of the businesses in Vermont currently offer paid sick leave. That's according to a Department of Labor survey. In terms of the businesses on our coalition who we worked with, the majority of them did do provide sick leave, although there are a number of them, particularly in food service, interestingly, who are on our coalition who supported this legislation but don't currently offer it themselves. And the reason that I've heard cited for that is they want the level playing field. They want everyone to offer it when they offer it. Food service, the food service industry is an industry that is probably the least likely right now to provide paid time off. So this is an industry where you're gonna see a lot of impact from this legislation. And so for many of the owners who were on our coalition who didn't currently offer it, they felt that they were excited to have a standard where everyone was gonna be doing it. It was really gonna provide culture change and everyone would be doing it at the same time so there would be equality in terms of a competitive advantage. Yeah, and it's a bit ironic, isn't it that food service people are most likely to not have this time off because really your food handler is probably the one person you wanna make sure is healthy, correct? I think that's very ironic in terms of the public perspective, but I will say that one of the real drivers behind this legislation is precisely that, is the public health impacts of that. And so food service handlers, but not just that, people working in retail, coming into contact with the public, care providers, whether it's childcare, elder care, these are all areas where there's a significant portion of the workforce that don't currently have paid leave and obviously those are the sectors where you'd hope most to have people with paid leave because they're in contact with the public or with vulnerable populations. Very good, so you've achieved your goal here of Peyton and Sickley, what's next for Main Street Alliance? Well, we have a lot of things in the works. This year in the legislature, we're supporting the effort to ask the legislature to pass us financing for the Dr. Dinosaur expansion proposal, so the Dr. Dinosaur 2.0 campaign launched last fall. We're one of the organizations who are supporting that effort and we hope the legislature will finance a study to expand Dr. Dinosaur up through age 26. Very good, excellent. Lindsay, thank you so much for being on the show, I really appreciate it, it's been great. Great, thanks. Thank you very much. Okay. And thank you for watching this week of Capitol Beat.


Hi everybody. Happy new release day. Happy new release Wednesday hump day. We got 2022 tops inception baseball coming at you 16 box pick your team number two full case break go big or go home one pack per box seven cards pack all cards ship Should be some nice stuff. All right A little bit of room here. There's our fresh case of inception 16 boxes one pack per box 16 and one Thanks to the people who bought their team straight up here and pick your team to Pick your team three by the way is in single digits We can fill it. We can maybe get that done straight up. There's the random number block randomizer teams right there as well Jackson with double-ass bot mojo buying the teams Those last two teams before those remaining teams are pulled for this random number block Which we did in a separate video, which I need to upload right now stand by Otherwise, I'm just gonna totally forget to do it.  I just want to see the actual randomizer done so Most of you are familiar with this, but it's a serial number break that applies only to these teams just for that break Now there are gonna be non numbered base cards for that group of teams right there We're gonna collect them as one lot And then randomize it to one person here We'll do that randomizer at the end Also, if there's non numbered hits relics and or Relics or autographs or relic autographs We're not gonna collect those as a lot. We'll separate those out Some paper supply chain issues ladies and gentlemen. You can't find the exact perfect boxes For these for these cases All right, so there's eight up front eight back there total of 16 Let's flip these this way sliding around a little bit. We've got a Warriors game on the background All right. Good luck everybody. Oh All hits are numbered so that's good Really enjoy the artwork in inception and always looks really sharp So I think we should just have one hit on the bottom two base cards All right and behind DJ LaMahew is Jackson Kowar Kansas City Royals 220 out of 299 and that's for the Royals that'll that's a number block team So that goes by we go by that digit right there not any of those just that digit. So that's zero So Royals zero can't KC zero He's gonna be Pat Wolf. There you go Pat Third one down. All right. Good luck Really like to design this year. I like those geometric patterns back there. It's good-looking set Shane Baz Rookie card for the raise and behind here is Marcos Ditlan 160 out of 299 Baltimore Orioles and Orioles are a number block team. So that goes to Baltimore zero another zero for Pat It's all a little bit of orange on the hit behind Josiah Gray who I drafted to my fantasy team I think he's got a really nice season this year Josiah Gray a little bit of Juan and the Nats and Nice patch nice auto 16 out of 25 Gavin sheets And that goes to Dusty in the Chicago White Sox Picked him up straight up Congrats Next box I see a little bit of red. What is that number two? See that it's not number two Or is that just the the pattern right there? There's Jacob of Grom 84 out of 99 So that'll be for Mets for That's where Diana and behind Eloy Jimenez is It's out of 25 I thought it was me like out of five, but there's a nice Cal Raleigh Cal Raleigh for the Mariners It's nice Mariners patch like the Mariners color is really pop in that window especially that metallic trim there Seattle that's for a Koshan with the with the Ems and behind Tyler Glass now is Brian Della Cruz 18 out of 299 for the fish Miami Marlins Patrick Davis picked up the Ems Straight up the end. Do they call him the Ems? They call the Mariners the Ems Marlins just the fish shows other nicknames All right next box Nice looking ohtani green parallel here and behind Francisco Lindor is A Dodger Andre Jackson 71 out of 75. I think he just recently I Think recently was moved to minor league camp So he's gonna open the season the minors, but but I think he'll be one of the first first to be called up if there is an injury or if they need a Need an extra start or something like that You'll be able to pop in he's got some upside Dodgers.  So that goes to Los Angeles Dodgers one 71 75 so Zach Gwynn with number one. It's like a relic auto coming up You got Brian Della Cruz for the Marlins 115 out of 150. That'll be for Patrick and behind Boba Shed Is Alex Kirov 127 out of 149 Nice patch nice auto for Minnesota another number block team So 127 so that'll be Minnesota 7 and that is Chris Butler last Bob Mojo. He's Kike Rough spring for him, but uh But I hope that Hopefully we'll get it going. I got him on my fantasy team as well We got show a Ohtani nice 67 out of 75 Hopefully he keeps things up this season. That would be huge Angels Diana picked up the angels straight up nice Ohtani going your way All right second half of this full 16 box case. This is pick your team two boys and girls Pick your team three down to single digits. Maybe we can finish that off and get that done tonight Maybe without a filler. I believe I believe we can do it jaskies case breaks calm There's a blue Freddy Freeman Dodgers a dish or a Braves edition. He's a dodger now six out of 25 That'll be for Matt and the Braves Honestly didn't think that would actually happen Did All right behind man Machado is a Andrew Vaughn autograph 81 out of 125 Chicago White Sox dusty With the South Siders top over hit that Maybe for a lower number. I like Andrew Vaughn's game though. All right next up We've got an orange brand Crawford coming up 17 out of 50 for my rivals of the Giants Psychopolitan with the Giants behind Bruhan for the raise is Reese Nair The Padres 109 out of 125 That's Jackson with the Friars last five mojo. All right next one. We got a red DJ. La mayhew 23 out of 75 on that one. It was the auto seventy Anyway That'll be for the Yankees Russell with the Bronx bombers And behind to teased jr. Is Louise Robert 94 out of 99 Three-color patch little us White Sox pinstripe in there as well Autograph White Sox dusty about White Sox team clicks Be really dangerous All right, 33 out of 99 Bryce Harper That'll be Philadelphia 3 that'll be for Corey Christian and behind Corbin Burns Is a patch auto Cabrion Hayes 106 out of 149 Pirates Anthony bought the buckos straight up Four more hits to go Good luck. There's a wander Franco rookie card Could be a big year for him Jared got the raise straight up Find some that for him. All right behind Jackson co-ar Is a Glen auto for the Rangers three out of ten Nice low number for Texas Stephen Kay with the Rangers krumholtz different Stephen Kay Stephen with the V All right, there you go Steve. Thank you Three more to go and behind the crone zone Jake Cronenworth is a Kyle Mueller 24 out of 75 love that that aqua parallel in the background looks really sharp Matt with the Braves straight up Two more to go Behind Reese Hoskins our second to last hit is on hell Rondon 62 out of 99 rookie auto for the Cardinals dusty with the Redbirds good to see a Good to see Albert pools back as a Cardinal Think Rex was mentioning earlier that maybe 20 some odd home runs away from 700 from that milestone I don't know. I forget how many he had last year I feel like you can get it this year if he's put in the right spots probably be coming off the bench a lot and maybe DHing here and there depending on matchups, but He's healthy. I feel like you should be able to get it I'm sure be rejuvenated going back since that earth since I going back to the St. Louis as well All right final box. Good luck everybody. Oh, I saw some what a Blackboarder right there Nolan aeronado 100 out of 150 and that that is also for dusty in the Cardinals and behind Luke Williams the final hit is gonna be Six out of 25 Videl Bruhan Gold ink autograph that's for Jared and the Tampa Bay rays I think these generally fall one per case says silver signings, but it Gold ink right here Think those fall one per case So there you go Jared the very very end Videl Bruhan five out of 25 silver signings With a gold autograph Jason pulled the same card in the last case All right another one the one per case and there you go ladies and gentlemen Thanks for watching. Thanks for breaking with us another case in the store. I'm Joe We'll see you next time for the next inception baseball break. Bye. Bye


My name is Elaine Gallant, and I am your host of Books, Books, Books on Think Tech Hawaii. This is a show where we talk about reading books, writing books, and everything in between and beyond. Today's show is titled On Knowing Author Catherine Norr. And our guest, of course, is Catherine Norr. Aloha Catherine, and welcome to Books, Books, Books. Aloha Elaine, it's great to be here. Super. Now, you and I first met about five or six years ago at the Kawaii Writers Conference. And I was thoroughly mesmerized by the amount of your energy, your positivity, your movement, and how you were going from one thing to another. So it doesn't surprise me. You are as accomplished as you are. So I want to talk about all of that. Can we do that? All right, super.  You have five books, four of which are fiction, and one is not. Would you like to talk about those? Sure. My first book is Managing Risk in Sport and Recreation. That's a nonfiction book. And that was published in 2009. And then that one essentially is a textbook about sports and law and risk management. And I voted myself the least likely to finish a novel. I was involved in a writer's group that got together after the Maui Writers Conference was very popular. And I went to that for many years. And it was amazing with all these famous authors. And now the Kauai Writers Conference is kind of similar. But what was really interesting is after the Maui Writers Conference stopped, they tried to do it on Oahu. And I went and I met these wonderful people and we had a writers group. And I was really intimidated by them. I thought, oh, these are really good writers. And we all started writing a novel. And I thought there's no way I'm going to be the one that never publishes a novel. And they're all going to publish novels. And it took me quite a long time to write that first novel. But I was the first of our group to publish. And I ended up writing three pretty much before anyone else published a novel. And so I've actually written four in that series, the Triangle series. And it all started from that writers group where we wrote 10 pages a month. And I actually often wrote my pages while I watched TV. Writers groups are amazing. They really are the catalyst for a lot of authors that give them the impetus to finish their novels. Because you have to read to the group. You get critiqued by the group. You make contacts. You learn the industry. And you go from there.  You're a former per diem judge. And you have your own show. And the title of it is, go ahead and say it, because I'm the full title. The Wide World of Esports. Wide World of Esports, which is an up and coming trend in entertainment and competition. So let's talk about your Triangle series first. When you wrote those three novels, and now you say you have a fourth one, so now you have five books total. So that's great. Why don't you talk about those? I read Landsharks. I did not have the pleasure of reading Freewheel or VO2 Max. So why don't you tell us about those? OK, so the first in the series was Landsharks. And let's bring up the Landshark. OK, so actually, Landsharks is really what I know. And I thought it would be easier to write about what I know rather than do research. And it essentially is about an attorney working for a firm. And she's a triathlete. And she, you know, kind of, there's some mystery. There's some romance in there. And the firm that she worked for is loosely based on the firm that I worked at. And when attorneys from that firm read it, they really laugh. Because even though my characters are not any individual people, they might be composites or there might be a little element that they recognize. But sometimes people don't.  And that's, you know, the kind of the finale. And you kind of expect that. Well, I didn't want to do that because it's completely unrealistic. I wanted to write about civil litigation as it really is. And civil litigation is basically depositions and motions. And then kind of the negotiations to try to settle a case and the interactions between the people at the firm and the people and your interactions with opposing counsel. So that's really what I put in there. And Zayna West, the protagonist, she is a triathlete. She's young and I tried to make her as much not like me as possible. So I make her really tall with black hair. And but so anyway, she has this love interest and everything. And it's really fun. And it starts out with a accident that happens during the Olympic trials and where a car drives onto the race course and kills one athlete and renders another one paralyzed. And the paralyzed one files a lawsuit. And, you know, we kind of just try to discover whether it's fraud or not. And then there's free will is the set. But before you go into free will, I want to say that I read Landshark. And I think that that was a very good first novel. You covered a lot of bases that try the triathlete's life. What can go wrong? So it brings in your lawyer skills as far as risk and sports goes, I think. I found it quite a fun read. And I just want you to know that. And I think a lot of people have. So I just want to point that out. Everybody should read Landsharks and then go on from there. Sure. Yeah. And then free will, let's bring up the CN Tower.  And he starts a charity called Free Will. And we have and he his love interest is claims adjuster who who works with with Zana West in her litigation. And there's, you know, it's kind of more more, you know, kind of mystery and and relationships and how it's kind of, you know, similar, but it has kind of a different mystery. And it's it's good fun. And then and then the third one, Vio to Max. Vio to Max is a rags to riches story. And it answers the question of what what would happen if pro actually triathlon was monetized where pro pro triathletes made money like golfers or tennis players. And the picture that you just saw was I was actually in Tokyo and some, you know, people with a TV show came up to me and said, do you want to do this game show? And so I did this, they filmed this game show and I was a contestant or something like that on the street. That's fun. You had some fun promoting your books. I must say we're going to talk about that as well. But let's talk about Zana West. Is that your fourth in this Triangles series? Or is there one that we don't know about yet on your website? OK, so Zana West Diary and you can pull up the museum shot. Zana West Diary is the prequel to the series. And it basically is Zana's childhood. And Zana had a really tough childhood. She was homeless. She her her mom died of a heart attack when she crossed the finish line of a marathon for her dad. He became a heroin addict. And Zana went from foster home to foster home. And she had really a challenge. And and Zana West Diary is it's a YA book. If people don't know what that means to young adult book. However, a lot of adults read it. In fact, I think that more adults have read it than kids. And I actually, in one of my writers groups, one of the gals, she said that her granddaughter read it and said it was her favorite book of all time. But it it actually what it is, it's really interesting. I wanted to do this diary story. And but it was so boring, you know, to read someone's diary. So what I did is I. Pardon me. Bless your and Frank. Yeah, exactly. So what I did is I got another story and I intertwined it with her. So I have another girl who found the diaries in a car that her parents gave her and they were in the trunk. And so she was reading them and they were impacting her life. So it's going. It goes back and forth between a story. Her name is story, Sanchez. And it goes back and forth between her life and Zana's. Yes, I've read that one, too. And I like the dual storyline. I'm wondering this is a Yaw book, for sure, I have to say. And if I could use that term for sure, it makes me sound young, even though not. But what is your target audience for the other three for the Triangle series? Who was your target audience? You know, I think anyone can read those who just likes to read and is interested in in kind of contemporary fiction. And, you know, it appeals to people who like to read legal mysteries. It appeals to people who want to learn something, because a lot of people tell me that they learned about triathlon from reading my books. I didn't know what that was about, and they learned from that. And I've had a lot of people who just have nothing to do with law or nothing to do with triathlon or insurance and they read them and they're entertained. So if you want to be entertained, I think that that would work. And how many triathlons have you done? I've done a lot, but I quit doing triathlons in 2003. So it's been quite a while. But you're still active in sports. I know that you do a lot of exercise, jazzercise and all that.  Let's pull up Christy Yamaguchi. Yes, and the Royals. Yes, and pro triathletes. Oh, gosh. Yes, yeah, Lego man. Oh, yeah, actually, the donkey picture is kind of fun because I was in Hydra in the Greek Isles. And I had the idea that that the donkey that had to bring our luggage up to the room had to call my book. It gives a whole new definition to book tour. There's another famous person, Christine Linders as well. She actually, if you also show the one with me at we were at Grand Central Station posing with with with my books. And that was good fun. That is fun.  And we have found ourselves in locations at the same time and actually gotten together, which is very fun. You give speeches, you talk about risk management in sports. Do you want to talk about that part of your of your well, it's not your writing, but of your profession, because it does tap into your writing. It's in a lot, you know, in a great degree. So would you like to talk about that? Yeah, actually, you know, it does tie in with writing because my partner in North Sports Risk Management and I wrote a chapter for a textbook on crisis communication and sport. And we are our chapter is on using wearables for crisis communication in big events that cover a large area like the Boston Marathon, for example. And, you know, and we address this issue of how to use high tech, like robotics, drones, wearables for crisis communication in those. And we're actually, you know, so that chapter is is we just completed it. We just submitted our final draft for the book about a week ago. And we are actually speaking at a conference in Doha, Cutter, the site of the World Cup that's going on right now. That's in March. And we have five presentations that we're going to be making. I've never made that many at a conference, but it should be it should be fun. Yes. And if you go to Catherine's website, if we can show that as well, it gives her her tour schedule. If anybody would like to meet Catherine in person, talk to her about her books or or her at a tourney side of her life. I mean, you also do workers comp claims, I mean, not claims, but what else do you do with that? You do workers comp and you do you do other things as well. You do other locations. I'm an insurance defense attorney and I handle litigation matters anywhere from auto to coverage to property. And then I've recently taken on work comp defense. I don't I represent the employers. Yes, I understand. OK. Now, so where are you off to next? It's Doha and Dubai. We're going to Dubai. Yeah, but, you know, you mentioned are are running into each other. It's like how how crazy is it that the only times I've ever seen you is in travel situations and like in London and in Athens, Greece. And not, you know, in crazy things where walking walking through Athens and running into you. Even though I had seen each other earlier, but then we're just like walking, you know, we're I'm in a store and you and you and your sister come in to the store and and run into me. So that's kind of you know, it's crazy. And we're from this little tiny island called Maui, right? Well, I'm Maui, you're Oahu, but we come from this little tiny state and we end up in the craziest places at the same time. So that is quite fun. Let's talk about your eSports. You have a show, Wide World of eSports. How's that working out for you? And tell us, what is eSports? Because people, I mean, I don't know what it is. I know it's an up and coming trend in recreation. Yeah, eSports is competitive gaming and is competitive video gaming. And the interesting things is video gaming is the broader entertainment segment. And eSports is the competitive video gaming where it's particular titles like League of Legends, Valorant, G.S. Go. I mean, just it's very particular thing. And I've done my show has been going on since July of 2020. And I've had over 100 shows and it was weekly until more recently. And it's been a great way to meet people all over the world. Yes, it's also been one of the more popular shows, right? Even in, you know, first position, second position for shows. It just goes to show you that the world is accepting eSports and is curious about it if they're not already directly involved.  So I would I would like to just.  So this is my second show for the day. Wow. And who's the important women in the eSports? Do we know any of them? One of them is Stephie Bow, who's interesting because she was a professional motorcycle racer. And then she got into eSports. And and, you know, it's just kind of an amazing story. But yeah, I mean, there's a lot of a lot of interesting people to meet. So you can watch my show and and, you know, meet lots of people in the eSports world. OK, let's go back to books. That's what the show is all about of your all your books. Which is your favorite? Which is the most which is your favorite? Which is the most popular? And are you making money? You can live on it. OK, I can't make any money on. But I can tell you that probably the most popular is Landsharks. Probably. I mean, I think probably the best is Zana West Diary. Yeah, and I think that one of my favorite. I think I have to admit that Free Will and VO2 Max have places in my heart that are, you know, that are important. Like, you know, VO2 Max is like the rags to riches story. I always wanted to write a rags to riches story. And that that's inspirational. And the message that is in Free Will is to me, I can't even believe that no one no one is talking about Free Will because Free Will, you know, I kind of imagine this incredible charity, the Free Will organization, which to me should have should be happening in real life. And I, you know, it's just too bad. People haven't really read Free Will much. So I encourage people to read Free Will if they have an interest in learning about a nonprofit that would be kind of cool. It's basically this concept of having, you know, how how we put our time and our money and our efforts into people that we don't even know. But it's instead putting putting that effort into your own this circle of the your own circle. Like it's like creating the circle of of influence in terms of providing help to people. It's amazing how what we do in life can affect our imagination, what we want in life. Right. And as of our own work, we get to we get to devise and divine this these concepts. So what is it about writing that you like the most?  I know that you are. How do you find time to write? I just don't understand it. Well, you know, when I was writing those novels, I tried to spend some time every day writing. And usually I had, you know, a goal to finish that particular book. I love the creativity and creating those worlds. And and, you know, it's just it becomes very exciting. I have a number of manuscripts that I haven't finished or that I have finished and I haven't published. And they usually they're usually born out of some idea. And sometimes they start a book and I never even get into it.  And sometimes those are good for short stories. Are you doing any short stories? Do you do any anthologies? Are you in any? Yeah, we just published Island Fever, which is an anthology with that we actually had a show a couple of weeks ago on Community Matters where I hosted and we had three of the authors. Island Fever is a Hawaii book and it has a theme of fever like COVID or Dengue fever or love fever. And we all wrote, wrote chapters. My chapter or my story is called Honeymoon. And I love that story. I'd never written a short story before, but I really love that story, Honeymoon. And the crazy thing about that story is I had COVID at the time that I wrote it. Oh, that's funny. Now, I like short stories myself. My first novel, the fifth C, a CAA novel, came out of a short story called Coastal Smurty. And if anybody speaks Russian, they'll understand what that means. Coastal Smurty. But it became the basis for my novel. So, yes, we can create full fictions from short stories and vice versa. And I hope that you will. I hope you continue to write. I hope you continue to entertain us.  I wish you great success. I don't know what else to tell you. I'm happy to know you. I'm happy to be interviewing you. So thank you for being on the show. I would also like to thank I would also like to thank the underwriters, the technicians, Jay Fadal, everyone on the staff of Think Tech Hawaii.  Congratulations. All right. Thank you so much, Elaine. You're welcome, Kathy. Thank you. Aloha, everyone. Thank you so much for watching Think Tech Hawaii. If you like what we do, please like us and click the subscribe button on YouTube and the follow button on Vimeo. You can also follow us on Facebook, Instagram and LinkedIn and donate to us at thinktechhawaii.com. Mahalo.


Hi, good morning and welcome to today's products and focus so overnight we had some more data come out of China Which is a slight disappointment when I was looking like they might be doing More capital ratio changes and more rate cuts in China So even though the data came out a little bit below expectations We have seen some of the Chinese equity markets actually tick up on the back of that You've seen the Australia 200 and some of the Hong Kong market also go up So bad news is good news at this adage So the US theory actually down from its session highs yesterday To move into positive territory this morning most equity markets are at the top end of their range already But this is looking a little bit like it could be turning into a very very steep Symmetrical triangle formation, which means we might get a breakout at one direction or the other It's still forming right now. It's not worth adding it on there But certainly you've got these highs here and then you've got these higher lows and then lower highs right here So we'll see how things pan out later on today We're still waiting for a bullish crossover in the MACD, which is yet to materialize So that's the US theory moving on to the UK 100 very similar pattern potentially forming here with 60 73 Still being a potential support similar MACD. So we've not quite got the crossover as of yet And if you have a look at the economic data, there's not a huge amount else left to come out apart from at 10 a.m. Today. We've got Eurozone GDP Now the password on the Wednesday is actually very very little on Wednesday It's not until you get into Thursday You got more Chinese data you got CPI Bank of England NPC minutes and straight announcement for the UK Which will remain the same and employment data then followed by our non-farm perils and non-farm perils are our weekly petroleum data Which is actually coming out on Thursday at the moment. So moving on to Japan 225 It's actually off slightly as that kind of Import figure that China came out with have you just have a look here that import figure came in really bad And we just go on to Tuesday right there You can be able to see where we were It was expected to be minus 8% came in at minus 13.8% and obviously China and Japan are Begging in there together. So that's why we've seen quite a strong sell-off in Japan 2 to 5 The dollar yen's actually had a bit of a bounce this morning Jumping from 119 all the way up to 185. So that's kind of interesting But does look that 17496 is going to be the potential support level to be aware of on Japan 2 to 5 So looking at a dollar yen Bouncing nicely there of 119 and did it yesterday did it again this so far this morning Started the dollars be all over the shop to be honest So the dollars actually advancing against The Japanese yen, but if we will be looking at the other FX pairs in a minute But I can already see on my other screen that GBP with the annual dollar. I've had a bouncing up as a direction So dollar has gained versus the end, but then has lost versus the sterling and the euro Which completely opposite picture to what we saw yesterday crude oil dropping 3% again yesterday Same usual stuff global slowdown Oil production fears as in oversupply You've got 43 30 and then run about 42 dollars be the next potential support I'm just gonna get rid of that one. You probably looking around about 42 dollars has been the next potential support level And 45 85 being potential resistance Looking at gold gold's done nothing yesterday Getting we've got We should be having a golden cross in the moving averages. It should be bullish But it's not adding that much extra momentum. I'll just go to yesterday You know it's still about on the 17th of September. We've got the FOMC session and Some traders still thinking that after Friday's non-farm payrolls figure kind of coming in below expectations that there's a lot Of big questions and kind of freshed out over the prospect of raising rates in September or not There's a lot of arguments to have it. There's a lot of arguments not to have it Obviously the state-of-the-world economy is a big one at the moment But with China no longer being able to beat the kind of global shock absorber that it once was The US still want to have an option to To cut at some point in the future. So they're looking to try and raise rates sooner rather than later And just to have that initial lift off and I think the markets are kind of pricing in that that potential eventuality But there's still a number of traders who are positioning themselves. That's not the case If you're looking at something like gold right now gold is giving you Indications that they are expecting that there'll be something coming in September That's why gold is continuing to drop off ever since we had that 24th of August Stock crash over in China We had the initial massive spike in gold is everything well I'm never gonna never gonna raise rates now and that's just been slowly dropping every single session pretty much To the point where we are just now. So not a great formation almost like a kind of a hidden shoulders formation We've got a neck and that you got shoulder the neck and then the other shoulder And normally when you got a break of this neckline, which would be right about right here That should be indicative that there could be a technical break lower than where we are right now So moving on to euro dollar and GBP USD so euro dollar off the session highs Bouncing off that 21 period SMA once by 11 still being the potential support which also coincides with that 55 period SMA But this is already looking like a little bit of an ugly candle, but the fact that it's quite far off the session highs It's just selling off as we speak actually So still in positive territory, but only just and then if we finish up with GBP USD Sterling had a decent rally yesterday It's followed through with another decent start to the day already But but we are away from the session those one spot 54 24 is the next potential Resistance level to be aware of for GBP USD. I can see that slow stochastic has been quite oversold up until this point We've not yet broken above that 20% level So the technical signal from the slow stochastic to Provide bullish momentum has yet to come But we've already had two decent day candles So that was a bullish engulfing pattern that we had there yesterday Be interested to see a things pan out today for the sterling So that gives you a bit of an idea where we are Nothing really exciting macro data wise until Thursday for this whole host of data Make sure you keep your eye on the chart form and make insights popular going forward and join us again tomorrow to find out what happened next


Okay, so very good afternoon, hope you had a nice lunch. So today I'm going to talk about Jigna, that is a way to create rich HTML user interfaces for Python applications. So can I get a kind of hands, how many people have done any sort of user interface development in Python? Lot, okay. So I'll start with a little bit of a personal introduction. I am a developer at N-Thought India Mumbai for the last two years. N-Thought is a company which has a Python distribution called N-Thought Canopy. And so I've been working on N-Thought Canopy and N-Thought Training on Demand, which is the online Python training. I've been mostly working on the front end development for that. And before this, I completed my master's and bachelor's in aerospace engineering from IIT Bombay. But aerospace engineering to UI development, I don't know how it happened. So for Jigna, the two team members are Prabhu Ramachandran. He is also an author of Mayavi, which is a 3D visualization library. And he is a professor at IIT Bombay, was also one of my ex-project guides. And Martin Shilvers, who is author of Envisage, a plugin-based framework. Sorry. So what is Jigna? So basically it is a bridge which lets you write user interfaces in HTML for your Python models. But why HTML? So if you look at the current state of UI development in Python, you basically have like QT, WX Python, PyGTK, Tkinter. And most of them look more or less like this, where you have widgets for your common tasks and buttons and menus and everything, which is nice for you to get started. You can have, you can get a reasonable user interface fairly easily. But if you want to have rich user interactions, then you are kind of limited by the widget set that is provided by the toolkit. The code is mainly procedural. So if you were to add a widget here, you write qwidget.addWidget at this position, which is not really helpful because when you're trying to design something, you wanna see it, how it will look. So declarative code is usually better for UI. And again, for toolkit-specific development, the community of designers is limited. I'm comparing this with the web developers. So if you consider the web applications, see the kind of richness you have in web applications. You'll have videos here, hexagonal elements there, canvas, SVGs, and all the cool things that everyone is working on. So all in all, you have a very rich user interaction and HTML is not limited by a widget set. So it gives, it uses the power of CSS and JavaScript so that the designer can design the widgets just how they want it, not like standard buttons or everything. So each website can have its unique feel to it. And the most important thing is that it's much, much easier to find HTML designers. If you want to go to a room and shout how many HTML developers there, you have a lot of hands up, but ask how many QT developers, good luck. And again, the code is declarative. So very easy for non-programmers, who are designers to get started on HTML. So you have a very nice bridge of HTML technologies, but they're mainly limited to the web technologies and the desktop applications lag behind. You don't have the kind of richness for the desktop apps. What if we could bridge that gap? Which is where Jigna comes in. So let's say you have this domain model, simple class employee with a name and cell V. This is, by the way, and thought traits. So it has some nice features like automatic notification when the attribute changes and the static declaration of the types and all that. But so you can check out and thought traits, but this talk's not about traits. So what I'm trying to say is you have this domain model and what if you could have this sort of HTML interface to it? Where let's say you have employee.name within the braces. This is a template, but this is not a static template. So let's say it is bound to the name attribute of employee. So whenever employee.name changes, the value gets updated and you can call methods here. You can call the Python methods directly from the HTML. So I'll start with a small demo here. And so you see you have employee.name is Tom, which is the name of the instance here and salary is 2000. You click on update salary. It will call the method on the Python side, update the attribute and since the template is bound to the employee.salary attribute, it will automatically get updated. So the thing to notice here is the model view binding is automatic. You don't have to write any special code for binding the particular template to the model attribute. The HTML template is live, which means whenever the model changes, the HTML changes and the HTML can call methods in the model. Code is declarative of course, because it's all HTML.  So since it's all in HTML, this all can be handed off to an HTML designer, which is cool because there is nice model view separation. And it's not just for traits. So if you have a regular Python model, it will work just as good for them, just that the automatic model change attribute, you have to bind it to update the HTML. So we have an example for that. And before going further, what it is not, it is not another UI toolkit. The UI toolkit is HTML, so you don't have to learn new ways of creating widgets or anything. It's not a widget library. And it's not a web framework like Django and Flask. Mainly because of two reasons. One, that Django and Flask give you a static template, where here the template is dynamic, is always live. Other is we are not doing web. So a lot of things that Django Flask handle like security, cross-site prediction and cookies and all that, we don't handle all that. This is purely desktop UI stuff. So how does it work? You have the Python domain model on the left and the HTML live template. You write a little bit of binding code, which kind of creates an app with this template and this template will be rendered with this context. So the string employee is bound to the Python object employee here. So whenever this employee dot name changes, this template automatically updates. And under the covers, we have a JavaScript proxy for the Python model. So basically if you have an employee object there, you'll have a similar object in JavaScript. So between JavaScript and HTML, there is AngularJS MVC framework. AngularJS is basically, it makes sure that whenever the JavaScript object changes, it updates the HTML. And for connection between JavaScript to Python, we use Qt's Q WebView. Q WebView is basically just a browser which allows you to, which allows the Python model, Python to execute some JavaScript and for JavaScript to call methods in the Python or access attributes in the Python. So we are using just that small bridge protocol. So let's say you want to populate what employee dot name is. So AngularJS will ask the JavaScript what is employee dot name. And employee dot name is a getter function which will in turn ask from the Python domain model what is employee dot name. And the Python model will basically till this is employee dot name. And accordingly the HTML template will be updated. And let's say the model changes on the Python side. So traits has this mechanism of how to handle change handlers. So whenever let's say salary changes, traits fires an event on trade change. And this will signal the model update to JavaScript. And accordingly we'll have the Angular update the template. So you have a nice live HTML template which talks directly to the Python model. So I have a small demo here. I'll cover some of these things in the demo. For real applications you need to bind, you need to have proxies for lists, instances of objects. You need to call methods on the Python model. You need to call methods that are slow. So you can't afford to have the UI blocked while the method is executing. And you want to attach some success callback, error callback, event handling. So let's start this application here. Is it too small? I'll, okay. So nothing much to read here. Basically there are two apps and I'll read out the code here. So we have a simple app object with name, URL icon and things like that. And an app manager which has a startup. So in order to show these two apps, there is, this is an AngularJS construct and grepeat which is like a for loop for AngularJS. It loops through the app manager.installedapps. Now app manager.installedapps is an attribute of the Python object which is a list. So each app is a proxy to the Python app object. And for this you can write ngsrc which is the source of the image tag is app.iconurl which will fetch the icon URL for this app and the app.name. And you can define the click behavior on the button click which will call the start app method of the app. So basically a simple dynamic template which talks directly to the Python object. So if I click here, it will start the app which is hello Berlin. And so, and if you, you can also install some apps. So you go to the store. Now here when I click on go to store you saw a little loader, right? So when you click go to store, it calls a method connect here which has some slow I've marked it here but basically you would be contacting some web services but you cannot afford to block the user interface. So we provide a way to call this method asynchronously so that you can have the UI loader and then the apps in the store appear. You can click install which will show you a nice progress dialog. Now this progress dialog is also, so when you click install, this is also an asynchronous call. You'll have a fetch action which will update the progress and progress is an integer. So in order to show that nicely with progress bar the code is like this. So you have a div and a style which says width is bound to the progress percentage of the model. So whatever the progress is, the width of that block the green part there will be updated accordingly. So and this app is installed. You can remove it. If you want to feel adventurous, there is, you can go to the, sorry, you can go to the console here and see that the app manager object is available as jigna.models.appmanager. So jigna.models is where we save all the Python model proxies and this object is just a regular proxy for this Python object. So you have attributes like available apps, install apps, connected, all that. And all of these attributes are defined lazily. So if you have a deep nested object, we don't serialize it all at once. So you will only serialize what is needed on the HTML. So you can say app zero equal to jigna.installed, sorry, appmanager.installed apps zero, which will give you the first app and then you can simply say from the terminal here, appmanager.startapp, app, sorry, yeah. So it's like a little toy and JavaScript repel for Python objects, which is cool. And you can attach success callbacks. So you saw the slow method call. If you want to call it, you will write jigna.threaded, which will call this slow method in a thread so that your UI does not block. And you have, and so you can attach successor callbacks and also do some event handling. You can check out the repo for that. Of course you can, I know it's hard to port everything instantly. So there has to be good interfacing with existing Qt widgets. So I have demo here, which shows how to embed Qt widgets with jigna. So let's say you have an existing Qt widget. In this case, I have a Maya v plot here, which is a Qt widget. And you can embed it within jigna by saying object widget factory equal to scene.create scene widget. So it takes a factory which will generate the Q widget and it will embed it inside the object tag. So basically since everything is bound, n meridional is an attribute in the model. You change it, the widget automatically updates and everything is wave. And you can also embed jigna widgets within Qt, which is the reverse. So jigna widgets are just like regular Qt widgets.  So this is an app developed in pure Qt. And if you click on this button, it will embed in that jigna HTML view here and everything will work as before. Browser version. So what do you think this presentation is running on? The same thing, jigna. So when I click on example, I have an example server running, which takes a pool of examples from the repo. And the examples viewer here is basically, it just runs that example from the repository. So you can directly call this method. So I can show you the app store demo in the browser version, but in the lap of time, I'll rather skip to the next demo, which I think is cooler as live IPerthon notebook widgets. So since you can do it on the web as well, but we don't advertise it as a web UI development because you will not solve all the problems that the web world has because it's all local. So, but you can have cool things like IPerthon notebook widgets. So if you have seen IPerthon notebook display HTML or display JavaScript functions, this is similar. So what you can do is you can have nice interactive widgets, HTML widgets, which are live. So here I have a person object and I call displayJignav with this context and this template. Now this shows me this UI, this could be any fancy UI. And if I say name is Freddy, and I want to print the name Freddy here. So this name automatically updates since the UI was updated. So the user, you can have richer stories about your data since you can express everything graphically. Let's say you change it to foo. It automatically updates the value here. I have another example which is matplotlib plot example. So you have a plot and you have a model attribute called scaling factor. And you change the scaling factor, the plot automatically updates. So, and the scaling factor is updated according to the new values. And let's say you later in your IPaitha notebook, you say scaling factor equal to 15. It will update the graph and the entire view everything. So you'll have richer IPaitha notebooks using this. One last example is Mayavi on the web. This is an experimental one. So you'll see a little warning here. But so basically you have a nice WebGL rendering of a Mayavi object and you have a model attribute called n-contour. And if you change the value of the contour, the figure updates and later in the IPaitha notebook if you say equal to three, it updates the, sorry, sorry. Oh yeah, yeah. So plotter.n-contour3 which will update the figure here. So you can have rich stories, rich IPaitha notebooks, this. And that's all for today. The code is on GitHub, everything's open source. There are a lot of examples you can try. And it's on, thank you. Thanks a lot for your talk. Unfortunately, we are very late and there won't be any time for questions and answers. But I'd suggest if you have any questions you can come to him later. Sure, thank you. Thanks a lot.