I just want to make sure everybody is settled and all the accommodations are working right now. We good? I'm just getting thumbs up from anybody with accommodation needs. I see our captioning is working. Interpreters are here. Good? Okay. Well that was such a wonderful program. I really, I can't think Peter Hirschfield and all of the candidates for coming out and doing that today. So another round of applause for all of them who are here with us today. So today we celebrate happy 32nd anniversary of the Americans with Disabilities Act. BCIL is so honored to be with you today as we take a moment to celebrate the landmark law that gave a promise of inclusion, access to life, and opportunity. I am humbled as I look into the audience and reflect on the accomplishments of our community. I pause as we remember those who we've lost. And I am truly excited to celebrate the young people in our movement who will continue to push us to fully realize disability justice. We celebrate that promise of a law that brought many of us out of the back rooms, out of institutions, and back into the community. And as we rejoice, we know that there's so much more to do and our fight is uneven. Someday I'm going to write a song called Much More To Do because it seems like that's the lyrics of speeches across the country each 26th of July. Not everyone sees the issues we face as social issues, but rather private problems for us to deal with. We continue to fight daily discrimination, stigma, being seen as special or inspirational. From BCIL's beginnings over 40 years ago, our work has been to envision a world in which people with disabilities and the deaf are able to live their full human potential. We should always be reimagining and focusing on solutions and keeping in the forefront the social impact of a world in which people are oppressed from realizing their full human potential. We have an attendance service program that's been frozen for years. A program in which people with disabilities had access to supports and were able to keep their assets. When realizing full human potential, we need to ensure that it's not under the guise of saving money or fitting Medicaid demands, but actually supporting people. We know that people with mental health diagnoses supported by peers through mutual support help solve systematic issues that affect people with psychiatric disabilities. But we continue to pump money into systems that create additional harm and not realizing full human potential. We know that restaurants and other businesses continue to deny entrance to our friends who use service animals, not embracing full human potential. And we know that students and parents need to fight for basic classroom accommodations and are blocked from full human potential. And we know that doctors still don't pay for American Sign Language interpreters. Full human potential. We know that the social security laws and the benefit cliff when employed as a disabled or deaf individual is outdated and create systems in which people aren't able to return or continue to work. Full human potential. And we know that parents with disabilities worry about losing their child to a system simply because we have disabilities. Full human potential. When George Bush signed the ADA, he famously said, quote, let the shameful wall of exclusion finally come tumbling down. And in that moment, there was celebration. 32 years later, and brick by brick, we are still slamming at that wall with a sledgehammer. 32 years later, we are expected to be the ones to tear it down. 32 years later, we are not able to embrace our full human potential because the bricks keep coming up like some awful game in Minecraft swiftly building around us. But there is a law and a law that invites full human potential. A law that people come out to celebrate and embrace. So let's see what that law can do for us. We will rejoice and claim our stake in this world. We are proud to be living with disabilities. We are proud to be living in a world that we are creating. I have such gratitude for people who bring the promise of full inclusion and equity into the light every day. Thank you for your passion. In our program today, we're going to highlight people ensuring that that promise of the wall come tumbling down is achieved. And that we will live life to our full human potential and beyond. Thank you. So now I'd like to introduce to you two trailblazers in our movement, Ed Paquin and Jenny Melke. Ed and Jenny have worked for years in advocacy and for disability rights and older Vermonters. And they are, as they describe, a couple of recovering politicians who have entertained themselves as living room musicians all along the way. It's my great pleasure to introduce my friends, Ed Paquin and Jenny Melke, with a song that you can find in your program. Hi folks and thank you. I hope people left their tomatoes and their eggs at home. My country seems to me good so let's open our hearts wide to disability pride. We're walking all side by side, let free as work to toot for crushing attitudes. Old toot won't suffice for us. I thought we were going to have other songs. Ready to jump up. Thank you so much, Ed and Jenny. That was great. I have a couple of brief words before I get the honor of introducing our commissioner of disabilities, aging and independent living.  I got to be at two ceremonial signings of the ADA. One at my law school and when I worked for the American side of law medicine and one at Perkins School for the Blind. I remember Attorney General and President George Herbert Walker Bush bringing so much excitement with them when those ceremonial signings happened. I made myself watch this morning on this day, 32 years ago, on the White House steps. There are a couple of quotes that really stood out to me. I'm not going to talk very long, but this was a civil rights act. It is a civil rights act. And our civil rights are, in my lifetime, I've never been under such attack. And because of some sort of renewed scrutiny that is somehow permissible, it's not permissible. I think that we all need to continue to question the recent Supreme Court decisions and we need to build on this very, very important law. He started his remarks, and I'm no president, but it swayed me. He talked about looking out and seeing a splendid scene of hope. And I want there to be a splendid scene of hope. We were talking a lot about how much work there is yet to go in the fundamental areas of public accommodation, employment, transportation and state and local government services and telecommunications. Those are the five principal areas of the ADA. So much more work to do. But that piece, that hope piece just really resonates in it. The other thing he said was, and this is a quote because it's not quite as up there as woke as it should be, but he said, Every man and woman with a dream has to have the ability to realize it. And I think that hope and that desire to make sure we keep working at that realization, which is not yet fully achieved, it's really important. I would be failing not to mention the Olmsted decision in 99, which really helped us get to out of institutionalization and to community-based care. We have a strong state with person-centered, person-directed care and striving to have the most integrated services possible. So with all that in mind, this is a day of celebration. We are going to have a celebration here together with you and those principles of equality and independence and freedom. We're going to hear. I'm very happy that from Adam, he's going to go a bit more into depth. Right now, I want to turn the focus on one of our special guests here today, and we've had many, Commissioner Monica White. She, yeah, applause is definitely true. I was delighted when I worked in government to have a chance to meet Monica when she came out of the agency of human services in the finance capacity. And this is in your program, but I'm going to read it because, God forbid, I forget even the details. So Monica White was appointed as interim commissioner for the Department of Disabilities, Aging and Independent Living, Dale in March 2021, and formally appointed by Governor Phil Scott as Dale Commissioner in July 2021. She previously spent six years as Dale's director of operation, most recently leading the department's COVID-19 response. Monica first joined the agency of human services in 2007, first as financial director and then as director of health care, operations, compliance and improvement. She previously worked at Blue Cross and Blue Shield of Vermont for eight years, focusing on provider contracting and quality improvement initiatives. Monica has also served on numerous boards and organizations as a volunteer throughout her career, including prior service of 13 years as a volunteer firefighter and EMT. An overnight shift volunteer at the Good Samaritan Haven, vice chair of the Twin Field Union School Board, and currently Monica is a trustee of the Barry Fish and Game Club. Monica holds a bachelor of science and health care administration from St. Joseph's College of Maine, a master of business administration from Norwich University, and is a 2014 graduate of the Snelling Center Vermont Leadership Institute. Monica is passionate about Dale's mission to make Vermont the best state in which to grow old or to live with a disability with dignity, respect and independence. She's honored to lead the incredible staff of Team Dale and the important work alongside many valued community partners to achieve the same. Monica resides in Plainfield where their husband, Jeremy, their three daughters, two dogs, one cat, and if you know, a lot of chickens. So, Monica, please come up and address us. Thank you so much. Thank you, Theo. I just realized how really overly long that bio is, so I need to dial that back for future. I'm sorry about that. So, as noted, my name is Monica White, and I am the commissioner of the Department of Disabilities, Aging and Independent Living, also known as Dale. I am delighted to join you here today on this beautiful Vermont summer day in celebrating the 32nd anniversary of the passage of the Americans with Disabilities Act. Thank you to the Vermont Center for Independent Living and the Statewide Independent Living Council for hosting this event and for the congressional candidates who spoke earlier and to you all for being here today. As noted in my overly long bio, Dale's mission is to make Vermont the best state in which to grow old or to live with a disability with dignity, respect, and independence. So many people in this room and beyond work incredibly hard together toward achieving this common goal. On July 26, 1990, our nation moved closer to the fulfillment of its foundational promise when the Americans with Disabilities Act became law. Some of the key tenets of the ADA include the rights to equal opportunity, independent living, and equitable participation in every aspect of life. Here in Vermont that takes many forms, examples across Dale, working closely with community partners and advocates, include the work of higher ability Vermont, the divisions for the blind and visually impaired, developmental services, adult services, and licensing and protection. For 32 years now, the ADA has made our nation stronger and more inclusive, truly a landmark achievement for American civil rights. The ADA has helped to uphold the dignity of thousands of Vermonters who have a disability. There is still work to be done, as Sarah was saying, and I am grateful to work in this field alongside the countless advocates for disability rights in assuring that we will see the full promise that the ADA offers. I was nine when the ADA was enacted. I had little understanding then of the monumental importance of this legislation, but as I reflect back to 1990, my Pap Touche died in January of that year. He was an amputee due to complications of diabetes, and he used a wheelchair. I remember the rustic modifications that my family made to his modest home in Stowe, and I also recall eavesdropping on conversations between my grandparents about how challenging it was to bring Pap anywhere, which I now know was because there were no curb cuts, hallways were too narrow, et cetera, et cetera, problems that the ADA directly addressed among many other important provisions. Recent data indicates that one in five Vermont adults have at least one disability. I am one of that 20%. As everyone here knows, some disabilities are invisible. In 2019, I was diagnosed with a rare aggressive cancer, endometrial stromal sarcoma, stage 4b. Looking at me here today, you'd likely not know that I underwent multiple life-altering surgeries and that my torso and psyche bear significant scars from my cancer. I have been extraordinarily fortunate that my periodic CT scans in the past three years have not yet shown signs of recurrence, and I'm reassured and comforted in knowing that the provisions of the ADA will directly make my life easier and better if slash when my cancer returns. So that's my personal disability story, my most personal disability story, but I think it's fair to say that we all owe a debt of gratitude to the countless disability advocates whose years of tireless efforts in fighting for this critically important legislation brought the ADA into existence back 32 years ago. I have the deepest respect and appreciation for all who fought then, and for those who continue to strive toward a better future for all Vermonters who have a disability. So thank you again for the opportunity to join on this great day, and I'll turn it back over to Theo. So we have a keynote address today from Adam Westler. He is the chair of the Silks Housing Committee, and I have a bio I'm going to read about Adam, and then he's going to come up and talk to you with you. Adam Westler has lifelong experience with disability, having been diagnosed with Duchaine Muscular Dystrophy at a young age. He is a passionate disability advocate, serving as the chair of the Vermont Statewide Independent Living Council's Housing Committee, as a member of Parent Project Muscular Dystrophy's Adult Advisory Committee, and as a member of the Chittenden County Regional Planning Commission's Transportation Advisory Committee. Adam works as a technical support specialist for ReSource, a non-profit community enterprise where he manages a workforce development website for people with disabilities and other barriers. Lastly, Adam is a graduate of the University of Vermont's Environmental Program, having cultivated his love for nature in his hometown of Jericho, Vermont. Please welcome Adam Westler. I'm definitely not the tech guy, so maybe this one if we moved it down toward you, would that be... depending on what you say? Okay, here it comes, here it comes. I'm totally not. Here we have someone who's going to help us out. I was hoping there was someone behind me. Does that be all right? Sure. Yeah, that's fine. Okay. No. But I just wanted to make sure I'm not too much in your face. What do you think? Can I move it a little closer? Hello? Does that work? It's a little awkward, but it'll be good. All right. Thank you Theo and Commissioner White. Thank you to the congressional candidates, and Peter Hirschfeld for a great forum discussion. Is that not working? It's not really working. Straight up and down. Okay, here we go. I'm going to move it a little bit. I guess Mike Stanzer isn't very accessible. This is part of your presentation. Yep. All right. Thank you Theo and Commissioner White. And thank you to the congressional candidates. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. I'm sorry. Thank you to the congressional candidates, and Peter Hirschfeld for a great forum discussion. Finally, thank you all for being here today. Whether online or in person, as we gather to celebrate the 32nd anniversary, the Signing of the Americans Disabilities Act, or ADA. The ADA is rooted in a history of advocacy and activism. From Ed Roberts, a quadriplegic polio survivor, and quote, father of the independent living movement. Advocating for himself to stay on University of Berkeley campus, University of California at Berkeley campus in the 1960s. To the 504 sit-in of 1977 which disabled activists including Roberts occupied federal buildings for 28 days and forced the Department of Health Education and Welfare to implement the long-awaited anti-discrimination regulations of section 504 of the Rehabilitation Act. Into the capital crawl of 1990 were protesters many of whom relied on mobility aids, crawled up the steps of the U.S. Capitol building demanding the passage of the ADA. Many of the successes the disability rights movement can be traced back to grassroots efforts like these. As well as a strong leadership of people like Roberts, Deborah Leasy Baker and Vermont and Vermont Senator Jim Jeffords in Congress among many many others. But the fight is not over. As Justin Durr quote father the ADA said after signing on this day in 1990 the ADA quote is only the beginning it is not a solution rather in his essential foundation on which solutions will be constructed. Indeed the ADA was transformative but it did not remove all the inequities people disabilities faced on day one nor would anyone expected to. To that end the ADA has four purposes. Quote one to provide a clear and comprehensive national mandate for the elimination of discrimination against individuals with disabilities. Two to provide clear strong consistent enforceable standards addressing discrimination against individuals with disabilities. Three to ensure that the federal government plays a central role in enforcing the standards established in this chapter on behalf of individuals with disabilities. And four to invoke the sweep of congressional authority including the power to enforce the 14th Amendment and to regulate commerce in order to address the major areas of discrimination faced day-to-day by people with disabilities. These words perhaps most noticeably led to the transformation of the built environment in the United States. All public buildings are now accessible to those with disabilities. Most if not all street corners now bear curb cuts. Buses now have lifts and ramps that adapt protested for in 1978. Public accommodations became accessible too. Beyond the built environment though the ADA also gave protections to people with disabilities many other areas of society in education and employment and in telecommunications enabling those with hearing or speech impairments use telephones and in health care too. I'm glad I was born six years after the signing of the significant legislation. I'm lucky that I've only ever known a post ADA world world in which I can make my own decisions and lucky to have had many courageous act advocates and advocates and activists come before me. I cannot even begin to thank them all for their sacrifice in the fight to ensure my rights and the rights of 61 million other Americans with disabilities. Taken another way we are the country's largest minority spanning all other protected classes and yet we were the last to receive our civil liberties. Before the ADA in the implementation of important disability rights laws people with disabilities were routinely discriminated against in all areas of society. Those considered to be quote feeble minded or whisked away from their families to live in quote horrible subhuman institutions on the fringes of society where forced sterilization was common. If you're lucky enough to avoid institutionalization the world was not designed for you. Buildings were not accessible. Housing was poor. In curb cuts and ramps were exceptions not the rule. There were few if any interpreters many were denied access to public education because of their disability. I'm glad to have never known these realities. I was only ever raised in a world transformed. I was able to attend public education public school with accommodations where I excelled later attending University of Vermont. Every bus I've been on has been accessible and rarely does a restaurant not have an accessible entrance and bathroom. I can access every government building I've been to many of which are the best models of accessibility including the most accessible bathroom I've ever used located in the U.S. Capitol building. Though there have been difficulties too. Now that I'm adult I continue to live at home with my parents. Not that I have anything against them by the way. Because there are few places I can live even now. There is accessible housing but not nearly enough in the places that people want to live. I could eventually find an apartment but the harder part is finding attendance to help me with activities of daily living. I currently work a part-time job of finding more substantial work to jeopardize those attentive benefits I need. Although great strides have been made in many of these areas. Housing, transportation, education, employment and telecommunications. Many of us with disabilities continue to face challenges in living up to our full potential. Our generation must now build even more solutions on the foundation of the ADA. As we heard today. There are many issues still facing the disability community. From the dearth of affordable and accessible housing. To lack of attendant services. To gaps in special education. Social security benefits cliffs and lapses in mental health services. Beyond these issues enforcement of the ADA remains challenging. And as more and more of our world is taken online we must ensure that websites are accessible to all. Especially those who are blind and visually impaired. We must also ensure disabled voters are not disenfranchised. And what's work to make transportation systems. Including airplanes, trains and cars. Better accommodate people with disabilities. In employment the National Council on Independent Living or NICL finds that only 90% of people with disabilities are employed compared to 66% of non-disabled people. As these issues show and there are many more we have our work cut out for us. My hope for the future of the ADA and disability rights in the United States is that we continue to fight for community inclusion. As mandated by the 1999 Supreme Court own set decision. And the institutional bias still present in the Medicaid system. And that people with disabilities have the choice to access fully funded home and community-based services. To support these goals we must address the issues we heard about today. We must think about implementing new and creative legislation. Such as the 2021 Eleanor Smith Inclusive Home Design Act. Which would have ensured that all new single family homes or townhouses receiving federal funding would include visitability standards. Including zero step entrances, 32 inch hallways and doorways. And an accessible bathroom on the first floor. The next frontier would be to eventually include private housing. And legislation to support the millions of unpaid and informal caregivers. You take care of their disabled children and parents. And the work of organizations like All Wheels Up. Is looking to implement wheelchair restrainment systems for commercial airliners. My greatest hope is that one day making society accessible and inclusive to all. Is not seen as something extra. Something that requires accommodations. But just something that we do because it benefits all people. That is the goal of the universal design. Making the world usable to quote the greatest extent possible by everyone. Regardless of their age, ability or status in life. And that we are able to achieve the full integration of people with disabilities into society. Eventually transcending the delineation between disabled and non-disabled. Recognizing that we are all just people. Thank you. Please enjoy the rest of your afternoon. About another round of applause for Adam. That was amazing. Thank you. Thank you. Now I have two mics I guess. So next it's my honor to introduce Marty Roberts. To many Marty needs no introduction. A mentor and a leader in disability rights and the psychiatric survivor movement. I've had the pleasure of knowing Marty for over 25 years. And she's here today to present VCIL's Debra Lise Baker Youth Leader Awards. So please help me welcome Marty. Thank you. I'm so pleased to see you all here today to celebrate the 32nd anniversary of the signing of the ADA. And all the changes that's meant for us in our lives in our community. And so I'm going to be presenting the Debra Lise Baker Youth Leader Award. This award was created in 2006 by the VCIL Board of Directors in honor of Debra, who was the previous executive director at VCIL. Debra had a special interest in youth leadership and she saw the youth as the future of our disability movement. The award recognizes youth with disabilities aged 22 and under in our communities who exemplify leadership skills in their organizing efforts and advocacy skills while paroding the civil rights of people with disabilities. Debra passed away suddenly last March. She had spent a large portion of her life advocating for disability rights. So the first person to whom this award is being presented is Isabel Estrin. And is Isabel here? Yeah. Isabel was born a double congenital amputee and has had no choice really but to be an activist because her disability is so visible. She cares deeply about working to create a more just and inclusive world. She graduated from NYU Tisch in 2022 with a major in acting and a minor in disability studies. Throughout her four years, Isabel acted as an advocate and activist within the university against ableist practices in acting careers, acting classes, I'm sorry, she worked with performers and administration to change the curriculum, encouraging the university to shift away from the outdated practice of training actors to perform disabilities and instead encouraging professors and casting directors to employ disabled actors. She is currently working as a consultant for educators in Vermont who are creating a designing for disability engineering course. Isabel is an influencer on TikTok where she shares her own experiences and educates others about issues related to living and creating as a disabled artist. She has over 130,000 followers from around the world and has created a community for other disabled artists and activists. Last summer she worked as an advisor in residence, supporting students with disabilities at Landmark College. Isabel mentors younger children with limb differences as a youth leader through Helping Hands Foundation, a group she has belonged to and worked with since she was two. So here's Isabel. Congratulations. Our second award recipient is Sean Plummer. Sean is always seeking to learn more information about himself. He always wants to develop and learn new things. One of the challenges in working with Sean is that he always says yes and he is always busy. Is Sean here? When he first learned about his visual impairment, Sean became invested in understanding as much as he could about his vision loss and how to improve his self-advocacy and confidence skills. The learn, earn and prosper or LEAP program in Burlington hired Sean as a virtual facilitator this past year. Sean facilitated online meetings with groups of young people to develop connection, a feeling of psychological safety, to build self-advocacy and confidence skills and relationships. Sean also works for resource in Burlington and he has a great work ethic. He's always curious and he's a team player who is nominated, who is committed to support for others. This year Sean facilitated breakout rooms during the division meetings that led to updates within DBVI state plan. One new participant on the DBVI SRC noted Sean's ability to bring a sense of ease into the meeting and his ability to make people feel comfortable and to draw people into conversations. Sean is an Eagle Scout and is currently a counselor in training for a summer camp. He participates in braille competitions as a cross-country runner and is active in music and theater. Present the award to Sean. And there's a third recipient of an award. She is right now in Washington D.C. at the National Council on Independent Living Conference and her name is Hannah Galavan. Thanks so much Marty. So this ends our, our, mostly ends our program. I'm going to invite our friends Ed and Ginny back up to give us a couple more closeout songs. I can't thank you enough for joining us today and staying with us. Congratulations to our award recipients and we can't wait to see what you're about to continue to do in the future. Thanks again to everybody for coming and take it away Ed and Ginny. Okay this, what we're going to play next is, I think it's the last one in your book and it's, it's not really a song about disability except that it's a song from a people who face oppression and so I guess in that sense it is a song about disability. And it's by a couple of pretty wild Scotsman that used to record a long time ago called The Proclaimers. I could tell the meaning of a word like serene. I got some old grades when I was 16. I can tell the difference between margarine and butter. I can say Saskatchewan without starting to stutter but I can't understand why we let someone else rule our land. Cappin hand, getting close to the mic, Ginny. I could get a broken jaw from being in a fight. I know it's evening when day turns tonight. I could understand why strun rare lies so lowly. They could save a lot of points by signing hips golly but I can understand why we let someone else rule our land. Cappin hand, they ask us, we boast, then we cower, we vey sub. What's already ready, what's already ready, what's already ready, oh what's already ready, what's already ready, what's already once I thought I could make God up right so I said I was in his last try. Frustrating, getting line sun, there's five men. Understand why you let someone Cappin hand. I can't understand why we let someone else, Cappin hand. I guess my apologies to the proclaimers too. This is another one that maybe wasn't written specifically as a disability song but I think you know I think about on a day like this I think about the disability community and community is something you know writ large we think all the people around have disabilities but it's also I think meaningful in the way that we with disabilities are there for each other and help pull each other through it's our own advocacy that got the ADA passed it's our advocacy that makes the difference as time goes on and so we'll think about that a little bit. And please join in. The light is gone you've been trying but the fire doesn't go the sun will shine again all you got to do is look my way if you got a problem reach out for you if you need someone to lean on baby I can be strong if you got a problem something to believe if you want you can always put your faith in me I don't know at all but I know how it feels to fall you can find your feet if you're standing at the bottom I'll reach out for you if you need some underline on baby I can be strong and i will carry if you got a problem if you're lonely if you're down if you're standing at the bottom I'll reach out for you if you need some underline on baby I can be strong and I will hear yes if you got a problem if you need some underline on baby I can be strong I will carry if you got a reach out for thank you all very much. Thanks everybody for coming. Thanks for those of you who have stuck it out on Zoom all day with us. I really appreciate it. Have a good night.


On Saturday, March 31st, at Hackensack University Medical Center Wellness Center, we will be holding our first Stop the Bleed classes, 9 a.m. and 11 a.m. Please see our website for additional information. We hope to see you there.


This study evaluated changes in indoor, outdoor, and total exposure to PM 2.5 during the heating season in a rural village in China, finding that indoor exposure accounted for up to 95% of total exposure during the heating period. The study also found that indoor coal combustion resulted in an increment of about 62 plus or minus 12 mu gm3 in indoor PM 2.5 exposure, and that the overall exposure increased by 13 mu gm3 during the quarantine, despite a decrease in outdoor exposure. These findings highlight the need for clean HH energy transition actions to eliminate traditional solid fuels and reduce air pollution exposure. This article was authored by Jin Pengli, Yatai Men, Xinlei Liu, and others.


So let's cover Zen motion. Zen motion is the ability to move a running virtual machine from one server to another. Now this is referred to in the Hyper-V world as live migration and in the ESX VMware world as VMotion. Really awesome feature, been around for quite a number of years and in different varying states. And this in 2018, it has gotten from all the vendors really, really good. I'm focusing specifically on the Zen server version as put together by XCPNG. This is not Citrix Zen server, but this feature, as long as you have the proper licensing, is supported with Citrix Zen server as well. So Zen is the open source hypervisor. XCPNG is the company that spun this. You can get it for free at xcpng.org. I've done a few videos on this if you search for it. It's a great project. We moved away from Citrix and everything over to XCPNG. All right, so now we covered some of those details. Let's talk about the setup first. Now this right here is kind of the basic layout of our system and this is a YEDYED software I used to do the graphing. It's just convenient and easy. I kind of like it. It's free. And all the features I'm talking about here is all open source. So you can download and set up everything I'm doing here for free follow through my videos. I've got videos on how to set some of this up. So we have my less than creatively named Xenover and Xenover 2 servers and these are my two Xen servers that are the same server. It's important when you want to do live VM transfers that the processor architecture type B is similar as possible in best case scenario exactly the same. And this is a problem when it comes to virtual machines because you have to think about why here. If the processor doesn't have the same architecture support and you're trying to move a live machine over there, the machine may need to reconfigure the processor to match the settings or if they're losing features versus gaining features so that it may not work properly. The most ideal way to set this up is have the same processor. And obviously this won't work going from Intel to AMD because it's a major processor change. So you have to shut down the VMs to move them. They can still be moved between virtual machines. They just can't be moved while running which is kind of the point of this is you don't want downtime and you want to be able to maintenance things and you don't want to have to take your customers down. That's the beauty of these live migrations. So we have Xenover here has a 10 gigabit connection via iSCSI as the transport layer over to FreeNAS. There's no switching between, they're direct connected and I've covered this iSCSI setup. I'm gonna have a new 2018 version coming out soon for those of you wondering but it really hasn't changed much in FreeNAS. So the VMs are stored here on FreeNAS, 10 gigabit connection. Another 10 gigabit connection, no switch, is directly to here. This is what it's referred to as a transfer network. So these are on the same unmanaged switch network which is this purple over here. So they can talk to each other via that network because the management interfaces are both here but I added an additional direct link and I'm gonna show you how this works so I can choose the 10 gigabit the transfer. That way instead of only transferring a gigabit I actually peek out the hard drives and are able to transfer. So when the transfer occurs because it's gonna move from one to the other for this one it'll be reading back and forth here and showing, you know, doing the ice because you eat. This has local storage on it. It has four drives in there, some enterprise hard drives. I believe they're Raptor drives, 10,000 RPM. So they're reasonably fast hard drives locally and this is convenient that way if I wanna take down FreeNAS I'd simply move the machines over to here and then I can maintenance my FreeNAS and move them back. It works perfectly fine and I'm gonna show you the demo here of how it works. The only pause that occurs is the moment that the move is complete the switch has to realize that the MAC address is now over here because it keeps the MAC address the same and passes over to the server so the switch actually goes from seeing it on this port to seeing the MAC address on this port. So it's kind of about, I think it's about a one second pause for that little switch to happen. It kind of like really quickly moving a network cable is what it's doing, it's doing it virtually so it's happening really, really fast. Let's just show you how easy this is and how it works. So we're here in Zen Orchestra this is the free version, the open source version of it that you self support, self maintain hence the no support down here. So this is, once again, all open source nothing special, no licenses needed this is all XCPNG servers and I've added my two servers here. Once you add the two servers in Zen Orchestra it understands the resources between them the information between them and what's going on. So let's take a look at VMs. Here's our DB and nine Zen motion YouTube demo and actually go here. It's up and running. The IP address is 3.190. I'm logged into it 3.190. So let's go ahead and do something. I'll pull up H top just so it's running and doing a thing. I don't think there's really any updates for it. Now we're gonna choose the migration. So select toast, where's it going? So it's on Xenifer. So the only other one is Xenifer two so that's where it's gonna land. Now I could choose if I wanted to what storage but there's only one local storage so I guess that's the one I can choose. If you have multiple VDIs you can actually spread them out and put them at different locations. So it gives you the detail. There's only one virtual hard drive on this particular box so there's nothing, no other choices on there but if you have like a group of hard drives and you wanna move them you could scatter them around across different storage pools. Now this is the important part. Select a migration network because it realizes that they also have this ETH one and that is a shared network. This is something Xenorca should have figured out. It was hey, these both have the same IP ranges across the same network for two different networks. One is the less incredibly named 10 gig two Xenifer and pool wide associated one. Pool size associated is the management network that both of these are attached to and it realizes this one's here because we added the network. All I do is you put a 10 gigabit card in each of these. It's just a standard copper cable between them. There's no switch and you just assign a static IP address to each one of these. I've done a video on how to set that up. Just real quick, I'll show you the network settings. So if you go over here to the hosts here's the Xenorfer host Xenorfer two network 10 gig to Xenorfer 19216820.20 statically assigned. You just do that by adding a network and making sure you understand which interface it is. Obviously this one is red so it's not connected. This one is, it's a dual port adapter. And then we go and look at the other one. We look at the Xenorfer network. Same thing, I'll show you it's add network. Both of them are connected because one connects that both the same T320 dual port adapter and one's connected to free NAS, one's connected to there. And you can see because this one's 19216820.15 versus our free NAS which just simply called storage 10G is 19216810.15. Like I said, these are just direct connects. It's real quick like this. Nothing real special, you add them and do it. Maybe one day I'll do an entire video because I think sometimes people get confused about how all the LAN and VLANs work on these but it's not too difficult. Once you kind of get the concept that there's virtual interfaces and physical interfaces and they don't all have to be attached the same way. Anyways, let's get back to the Xen motion.  Now I go here to all my VMs. You notice this isn't green, it's yellow. The yellow just means there's a process happening right now. That process particular when you mouse over it says running migrate send. We can go over here to task and see how it's going. Fairly quick at 10 gigabit, it doesn't take long to move a virtual machine from one to the other. And then machine's completely running. So here's the virtual machine here. Let's see if there's any updates for this. Probably not. Is it auto updates? Yeah, no updates. Oh, found, cool. Let's update it. While it's actually doing the motion there's actually an update we can load. Move this out of ways, you can see the percentage, 30%. And you can see the machine just keeps working perfectly fine. Cool. Open up, what else can we, what else do I have running on this? Do I have any network stuff? They have some network tools on here. Oh, I can run IPerf on it. So let's open up another tab, running on mine dash server. So I'm still getting gigabit speed while it's doing the transfer here. So that's not causing any issues. So no problems there connecting to my server or my desktop here, which is the 3.9. This is at the, what was the IP address to this one? I think at 190. Yeah, so 190, same network. So nice fast transfers right at 87%. And as you can see the machine, no load. It's not really doing much right, 91% now. Almost done moving. Let's open up and actually be running something so you can see the pause that occurs. This isn't updating much, maybe toppled look better.  If did you notice it? Just for a second, it's now migrated. We'll go over here and pull the VMs. It's now on the other server. So it's on center for two. You watched it in real time. Now this is actually interesting. Did you notice that the load jumped just for a second? There was a pause just for that second where there's, so to speak, the hard drive is disconnected. So I think they said the pause is roughly, depending on speed of your server, about a second. So for that one second that it couldn't write something, it pauses. But one second is not exactly downtime. And obviously we didn't even drop any network connections. Everything's just working perfectly fine. Look over here, run an IPerf again, same thing. Speed's the same. It's just on a different server, on a different segment and network on the bottom completing the test. But that's it for ZenMotion. It moves over live VMs as easy as the tools that are in some of the other popular hypervisors. I've been using this whenever we gotta do maintenance. We can just migrate them over to one server, do whatever maintenance on either server and migrate them back. And I can do this in the middle of the day. We've even migrated our free PBX system. The only thing I haven't seen is because it uses UDP, it may drop a call if it's on UDP. I mean, that's one of my to-do list tests is have a live phone call the entire time. But obviously with that one second pause, I don't even know if that would drop it. I know moving like to Unify and the Screen Connect, all those I've moved perfectly fine with this and not had any issues at all. We've moved free PBX back and forth with no issues. I just don't know if I had a live phone call while I was doing it would work or not. That's the test maybe I'll do right now. What time is it? I don't have any phone calls, but I can fake one. Let's go ahead and go ahead and migrate it. And we'll fast forward this one until the call part. I'll wait until that last second and we'll have a call open on it. So I just did a test call. Obviously it's only a 25% now, but the test call works perfectly fine. So I'll open up a call when it's at the 99% mark and we'll see if it drops my call on my phone. My phone is also, I'm using Zoipert. It's what we use here. And it's registered to the free PBX. So it has an active connection. We'll see if it loses that connection at all. Just what they refer to as a registration connection for your VoIP phones. I didn't want to move it before our other VoIP phones didn't drop, but this one's Zoipert. So I'll see if there's any difference at all. All right, we're at the 95% mark. Oh, I'm on the phone. And it did, wow. I didn't have it on speakerphone. Man, I missed it. I'm not gonna do this again, sorry. But if you heard, if you could hear how quiet the voice is on this, it actually paused just for a second. It paused while my voice was playing our welcome message on our phone. So it actually worked. We can actually migrate with live phone calls because I called my office with my phone. And other than that pause, it kind of like did a little fade out and pause, boom. But also you may have noticed here, nothing was dropped. So we're still here in free PVX that's working. My phone's still registered. It has no idea that the system moved to another server. So there you go. There's a demo of Zenmotion and even moving a running phone system with phone calls. It apparently works fine, a fun test. All right, thanks. Thanks for watching. If you liked this video, go ahead and click the thumbs up. Leave us some feedback below to let us know any details which you like and didn't like as well because we love hearing a feedback. Or if you just want to say thanks, leave a comment. If you wanted to be notified of new videos as they come out, go ahead and hit the subscribe and the bell icon that lets YouTube know that you're interested in notifications. Hopefully they send them as we've learned with you too. Anyways, if you want to contract us for consulting services, you go ahead and hit launch systems.com and you can reach out to us for all the projects that we can do and help you. We work with a lot of small businesses, IT companies, even some large companies and you can farm different workout to us or just hire us as a consultant to help design your network. Also, if you want to help the channel in other ways, we have a Patreon. We have affiliate links. You'll find them in the description. You'll also find recommendations to other affiliate links and things you can sign up for on launch systems.com. Once again, thanks for watching and I'll see you in the next video.


Our altcoin of the week this week is Litecoin. Why is Litecoin our altcoin of the week? Because the best parties are always on the back of a bandwagon. And at this particular party, Litecoin is that sober guy standing in the corner. Bitcoin started the party, of course. He's passed out on the couch right now. People keep drawing on his face and telling stories about one time when they were all so high and Bitcoin crashed so hard that everybody thought he was dead. But Litecoin just sits in the corner and yawns. He has been at this party for years. He's seen Bitcoin get up and wreck the place before passing out into near-death Litecoma at least a dozen times. He's been there through all of it. Bitcoin's adopted brother, or as Bitcoin sometimes says when he's really tanked, You're the silver to my gold, man. You're the silver to my gold. I love you, man. In November 2017, Litecoin threw a party of his own and it wasn't half bad. Its price went up 100% in the span of 24 hours, eventually got all the way to $370 before settling back down. He went through a bit of a slump after that after his father, Charlie Lee, kicked him out. It's for your own good, he told Litecoin, You can't find success riding on my coattails, but I'll always be there for you. It was a tender moment that many people with abandonment issues seemed to have a hard time coming to grips with. Coo-coo-coo-cha! OK, Litecoin was born October of 2011 as a fork of Bitcoin. It has a decreased block generation time of 2.5 minutes and an increase in the max supply of coins. There are also a number of other differences with the main idea being speed. He's a freak. He's a fast killer. He's a fast killer. Where Bitcoin has evolved into a store of value, Litecoin still aims to be the peer-to-peer digital currency. And guess what? That's exactly what Litecoin has plans to do. It recently announced LightPay, which will allow Litecoin to be used as a form of payment with any Visa merchant anywhere in the world. Not only this, it claims to allow businesses to accept Litecoin without being concerned with market volatility and the payments will be instantaneously settled with their banks. In the calm before the storm, Litecoin sits around $150 with a market cap of almost $8 billion. If Litepay pulls this off, it may just bring up a very important issue. Maybe that sober guy in the corner of the room has something more interesting to say than the guy whose pants keep falling down. Or maybe he's a psychopath waiting for the right moment to snuff out the host with a pillow.


In this study, researchers found that oral supplementation of 25 hydrox of vitamin D3, 25, OH, D3, was more effective than oral supplementation of vitamin D3, D3, in raising serum levels of 25, OH, D3 in dogs. This suggests that oral supplementation of 25, OH, D3 may be a better option for raising serum 25, OH, D3 levels in dogs than oral supplementation of D3. This article was authored by Lauren Ayung and Robert C. Bacchus.


Alright ladies and gentlemen, so today we are going to be talking about how to get and stay lean during Thanksgiving. Hey, it was Endude Nation, what's going on ladies and gentlemen, Dan Whitmer here today and I wanted to shoot this video, do it a little different because Brenda and I are always playing around with different camera techniques and we're trying to make these videos as high quality as we possibly can, so I thought we'd do a little experiment where we switch to vlog style and just kind of set the camera up and go as opposed to you know hooking the mic up and getting all intense with it, it's just easier we can shoot more videos and give you guys more information and more content if we can shoot these and get these out faster. So let me know if you guys like this style of video or if you're like oh my god the audience sound bad Dan go back to the old kind and you know we'll consider it, consider it but this is pretty nice, not going to lie just set the camera up and go. So here in the United States and Canada also I found out in the Netherlands it is Thanksgiving tomorrow so if you are someone who celebrates Thanksgiving and I did not mention your country please let me know because I didn't know other countries celebrated Thanksgiving. So guys typically around the holidays that gives people a lot of excuses starting with Thanksgiving, they go home for Thanksgiving or they have a big family meal and then that kind of starts this domino effect of just eating crappy food and then blaming the reason why they can't get fit on the fact that it's the holidays. I would get fit but like I have to eat like a whole pie every day because it's the holidays. Yeah I was going to go to the gym but then like you know my buddies were like dude you're never home we have to get wasted for the whole month. So I'm in Austin Texas right now and I'm going home to my girlfriend's parents place in Atlanta Georgia my girlfriend's parents they are really good cooks so I'm pretty excited to stuff my face. So guys how do you make the holidays a win-win where you get to eat delicious food but at the same time you still stay on track to your goals of getting lean. In this video I'm just going to share a few tips that Brandon and I implement around Thanksgiving around Christmas but pretty much even if you don't celebrate Thanksgiving or Christmas you can use the tips that I'm about to give you in any life circumstance where you know that there's a day where you're going to be consuming a lot of food. So it could be a festival that you're out with friends and family it could be a birthday it could just be a family gathering it could be a holiday that we here in the United States don't celebrate that you do celebrate so tell me actually tell me which holiday you celebrate where you in your country eat a lot of food and then let me know which country you're from tell me the country that you're from wait tell me the country that you're from in the holiday that you typically consume the most food as the first tip that I typically do is on a regular day of eating remember your ability to get lean and stay lean is totally dependent upon calories and macronutrients that is the biggest contributing factor to how you're going to look so during the week I eat in a calorie deficit I don't on the weekend so my week my weekday calories are somewhere between 2,500 and 2,700 but since I know that I'm going to be consuming a ton of food tomorrow I cut back on my calories today I'm also cutting out most of those calories in carbs so I'm lowering my carbs because I know that tomorrow I'm going to be eating a lot of rich indulgent carb carb rich food another thing guys intermittent fasting so Brandon I always talk about intermittent fasting we have a video on it right here if you don't know what it is be sure to check that out if you already do then you know that Brandon and I typically break our fast every day around 2 p.m. but today Wednesday I'm breaking it around 4 or 5 so I get a little bit you know a couple more hours just to ensure that my body is burning that stored fat that it needs to before I have my feast tomorrow now in terms of working out guys it's super important to get a very strenuous full body workout in either the day of or the day before your feast basically when you eat food there's one of two places it's going to go to your muscle cells or to your fat cells so if you don't do any kind of working out beforehand and you go to eat all that indulgent food tomorrow most of that food is going to be stored by your fat cells because the food goes in and looks at your muscle cells and it's like well they weren't really doing anything so they don't really require any energy therefore we can just go and be stored for energy that needs to be used at a later time but if you use all the muscles in your body including resistance training or weight training and a very high intensity workout beforehand then when you go to eat all that food tomorrow your body is basically like dude I need nutrients and it will go more of that food will go to your muscle cells as opposed to your fat cells so if you want to get some weight workouts in before you hit Thanksgiving dinner check out our gaining muscle course which is linked below here focused on just eating one or two humongous meals don't graze because when you are grazing you are constantly filling your body with food and glucose so your body is constantly like oh I have to go burn that fuel because this person keeps putting food into my body now instead of doing that just eat two big meals so that you can eat indulge feast have a good time and then be done with it so your body can get to work burning those calories and minimize the damage that you would experience the next day up to a week after that big meal so I fly into Atlanta Thursday morning and then we'll probably eat around five maybe like four five p.m. so I probably will not eat up until that point I'm gonna stuff my face feast like crazy it's gonna be amazing then I'm gonna rest for an hour or two and then I feast for dessert I'm talking yeah I might have I might have three or four pieces of apple pie what's it to you what's it to you it's fine because my muscles are accepting some of that glucose and they're being rebuilt junk food can work for you if you eat it at the right times after an intense workout and lastly guys alcohol I am someone who openly consumes alcohol in moderation I enjoy it with friends and family and if you do that's fine too if you don't drink don't worry about it you don't this part does not apply to you if you do drink don't go off the rails guys it's okay to have fun and enjoy a few drinks with family and friends but don't sabotage your weight loss and getting lean goals because you get super drunk and then eat a bunch of food so guys alcohol is kind of a double whammy not only does it give you additional calories but it's a toxin so the body wants to get rid of it as soon as it enters your body so for example when you eat food without alcohol what typically happens is the body starts to burn that food food comes in the body starts to burn the food so I can get rid of it but when you drink alcohol the body shuts down whatever it's doing or burning at that time and says hey we have alcohol in our system it's a toxin it's a poison we need to get it out let's make sure we burn it out of the system so you can imagine what happens when if you are eating food and drinking alcohol essentially you are keeping all that food to be stored probably most likely as fat because your body has spent so much time burning off the alcohol before it can start burning the food from the Zen dudes to your friends and family we want to wish you guys a happy Thanksgiving and remember use these throughout all the holiday season and also this doesn't just necessarily apply to the holidays guys you should be using these tactics to make sure that the food you're eating is yes delicious but also working for you rather than against you if you like this video go ahead and give it a thumbs up below followed by a subscribe to get free week whoa so guys go ahead and subscribe if you would like to get lean and sexy with the jump rope and you'll buy


Let me first say how very excited I am to be here today and to celebrate the opening of this great place. These two gentlemen, Kumi and Bumi, I have sort of worked with them over the years, very, very many years. Of course, long before I became vice president and long before they became wealthy and successful. But I think we have at least managed to encourage ourselves as we went along and I'm really pleased to see the birth of this new place. So we're here today to commission the Vibranium Valley, a place devoted to talent, innovation, data and entrepreneurship. A bold idea birthed in the hearts of two young Nigerians and auditiously delivered by a team of over 100 other young Nigerians. We're told that the Vibranium Valley houses 30 tech companies with the potential to house up to 50 more, 50 companies. And that it is the largest technology campus in sub-Saharan Africa. But perhaps what lies in the subtext of that story is how crucial this is to our dream of an economic future as a nation. So here we have the metaphor for our future. A foreshadow of a glorious new day whereby they share God-given talent, creativity, hard work and knowledge, phenomenal value and prosperity are built, not just for the entrepreneurs but for the millions whom they provide services for and for this nation, which has given them the opportunity. The founders of this amazing technology campus, Kumi Demore and Bume Akiya Mijin deserve our commendation for this, not just for this but also for the past. They founded the Ventures Garden Group which grew their technology company from a start-up to a 60 million dollar pan-African growth stage technology holding company in just seven years. But more importantly through their investment company which is called the Greenhouse Capital. They have created an ecosystem of world-class technology companies. These companies include six which is wholly owned by them and investments in other young companies including the well-known Flutterway, Rensauce Energy, Edutech, Finatech, Minds.io, CC Hub's Growth Fund, the APP zone, AppZone and 10 others. These companies provide technology-driven solutions to some of the most difficult development problems confronting us today. I will just talk about a few of them. On the part of government, we are putting our money where our mouth is but believe that it is our role to provide the environment where innovation can thrive. So we are including technology start-ups and businesses in our list of businesses eligible for pioneer state-ups and that means that's how it is. Also, both the CBN, the Central Bank and the BOI are working on integration funds and loans for technology start-ups. While we have to date open about three state-of-the-art technology hubs. These are government-supported technology hubs. Two weeks ago I was in Yola to open the Northeast Humanitarian Technology Hub which specializes in innovation for victims of conflict. There I saw the 3D printing of processes or artificial limbs, one an artificial arm for a 12-year-old boy, Mohammed, and with his new arm he can now write, can actually write, can open the Northeast Humanitarian all created in that technology hub. Only last Friday I opened the SouthSouth Innovation Hub in Benin, Agustin. This is the collaboration between the federal government and the Agustin government and there I listened to 12 outstanding pitches by potential innovators and technology companies. Next month I'll be opening the Climate Change Technology Hub at the Pan-African University, a collaboration between the federal government and that university. Later today as a matter of fact as we leave here I'll be at the University of Lagos to lay the foundation of an innovation hub and this innovation hub is also supported by the federal government and by the students innovation challenge. And last week we inaugurated the Technology and Creativity Working Group. Now this working group is part of our Industrial and Competitiveness Advisory Council. It's a group of young tech innovators and entertainment entrepreneurs who will help government to develop policies that will shape the future of technology and entertainment. We are committed to playing a pivotal role in defining the future for both technology, creativity and business generally but also in ensuring that government is a facilitator not an obstacle to business. Ladies and gentlemen, there is also here in this place the hand of Providence and I believe that we must recognize it. In this place, this place where we are today for many years housed the Concord Press a once highly successful national newspaper owned by Chief M. K. O. Abiela, G. C. F. R. Costinos winner of the June 12, 1993 presidential election. Abiela's campaign slogan was Hope and the eradication of poverty but the enemies of our freedoms and democracy thought that they had killed that tree by the annulment of the election and the complete destruction of the Concord newspapers but they were wrong in the profound words of that Mexican proper and I quote, they tried to bury us but they didn't know that we were seeds and so when we thought you had buried us they did not know that the seeds will grow. Today we celebrate the trees that have grown the seeds that were buried here. The hope that they thought they killed has risen again through the young men and women not even born, some not even born when that travesty was committed. So Concord was only the foundation for vibranum. No one, no one can stop the inexorable march of hope. We are grateful to God that we are witnesses today to the full cycle of history and so is now my special privilege to formally open this great place of innovation and creativity for a new generation of young men and women who carry with them the hope and aspirations of the nation vibranum built for the benefit of the Nigerian people and to the glory of God. Thank you.


Water woes in Martin County have been well documented. Most recently, thousands of Martin County Water District customers have been experiencing disruptions in their service, some for days at a time. These problems just didn't happen overnight. These problems have been years in the making. So what exactly has brought the Martin County Water District into such disarray? Tonight, we begin an investigative series in an attempt to answer that question. Friday, the Water District Board issued a statement on social media to inform the public of some of the problems they're facing and what they plan to do about it. The most concerning issue facing the Martin County Water District is the $831,000 in past due bills, with low revenue putting a strain on repair efforts. Another issue adding to that loss in revenue is the water loss rate. The Water District now claims they are losing 50% of their clean water through leaks and through breaks. Reported improvements made by the Water District include becoming compliant with all EPA water standards. Loans are being sought to pay the water district's past due accounts. A $1.2 million grant has been obtained from the Appalachian Regional Commission. And a 49% rate increase is currently being sought in hopes of becoming debt-free over a five-year period. The Water District goes on to say that if conditions do not improve, they fear that the Martin County Water District could fail. And as a result, the residents of Martin County would lose water service for much longer than just a few days. We'll bring you a more in-depth look at the issues facing the Martin County Water District and the customers they serve tomorrow.


server-side related. We use, of course, Objective-C and Java for mobile applications, but for everything which relies on a server, it's in Python. I've been a member of the TurboGears 2 web framework or development team for the last four years. If you don't know it, it's one of the oldest web frameworks together with Django. And I contributed to various Python web libraries like the MongoDB Object Open Mapper Ming, which is used at Swissforge.net for everything related to MongoDB. I have been the beaker maintainer since this year, and I worked also on Tosca widgets and former code, which are libraries related to validation and forms for the web. Most of my work has been related to the web world for the past years. What I'm going to talk to you is about a project that really happened, and we had at our company, which started just as a plain proof of technology. The customer came and said, hey, I want to try my idea, see if it can work, if it works properly, if people can use it, and it's not a huge mess and something like that. So we started with a really simple code base that then became the final product, became what the customer launched. As usual, it happens always like this. The customer came with something, just an idea, a test, and then it became the real Frankenstein. And the core part of this product was that it saved a lot of files, mostly images in this case. So we decided that as it was just a proof of concept, and we were really short on the budget, it should be done like in two days. We decided to not rely on the cloud storage, because it would involve more time to bring in any library to store the files and more money to actually pay for the storage itself. So we just decided to go for storing files on the disk and letting engines sell them. So the most simple solution, because it was really simple and for a proof of concept, was good enough. The issue is that the customer had a technical guy on his side, and this guy was in charge of deciding how to deploy the solution, which servers, which infrastructures, and so on. And here started the real problem, because the customer provided us the final decision with where the software is going to run just three days before they go live. So we didn't know where the software was going to run until three days before the public launch. And the issue is that as they were obviously short on budget, because at the beginning it was just a proof of technology, they decided not to rent a real server.  They went for a free solution on Heroku, and Heroku doesn't support storing files on disk. Well, you can store files on disk. They will just disappear whenever the application launches. So actually, we couldn't deploy the software on the platform, because we stored a lot of files, we stored them on disk, and we knew that whenever the application was started, the files would just disappear. So that was a huge hope. Right before the launch, remember that we had like three days before they go live of the world's software. And so we decided to rewrite everything we had from scratch. Everything related to storing files, generating time, making them available, serving them, everything we used, just plain. We just relied on engines to serve them. We just saved the file on disk to serve them. We had to switch everything to another solution, which could work with Heroku. In this case, we decided to go with GridFS, which is the file system storage of MongoDB. I don't know if any of you know what it is. Actually, because the application relied on MongoDB for the database, and MongoDB has support for storing files in MongoDB itself, and it's actually a really good support, because it scales through MongoDB, and it's pretty fast to serve them, because it's just a key value storage. So you just put there your file and MongoDB will serve it. And usually it's really fast, because it's going to serve it from memory if the files is able to stay in memory. The issue is that it was just a huge hack. We didn't have time. Maybe we could have time to write it properly, but as we were in total panic, we just started to look for the fastest solution to make everything working. And so we monkey-patched all the classes that we're going to save data and replace them with something that saved on GridFS. And then we monkey-patched our whiskey server to actually, whenever a specific path was asked, it went to GridFS with the data and sent them back. So it was actually a huge mess and it went online with practically no testing, because we finished it like the day before. We tried it on our testing environment, but we didn't try on the real world deployment. So we didn't have time to try it on another evoke application, for example. And so we went online with just that solution. After we went online, and thanks God everything worked. So we didn't have any major failure, because actually what we did was pretty easy. We came together and thought that we actually needed a better solution. It was obvious for everyone in the team that this kind of thing should not happen anymore. We knew that the customer changed idea. We knew that we did the best possible things with the budget time and knowledge we had at the time, but still we had an issue. Still we did the wrong choice. So we wanted to find a solution that could work independently from the budget constraint, from the customer change of requirements and ideas. And we decided that this solution should be a tool that our developers could use and just rely on the tool and don't care about how and where their files are going. Everything related to storing files should be moved to the production, to the deployment phase, to the configuration phase, and not to the coding phase. So that's how we created a D-pod for that purpose to make our life easier to store files and be able to just say, hey, D-pod, store this file. I don't care about where you're going to store it. I just want you to be able to give it back to me when you need to serve it to the client. Actually, we wanted it not only to be easy, but of course to be fast enough for most web application use cases. And here starts the interesting part because I started to think how it was the best to design a framework that should be used in a web application environment and was related to storing files. There are a few things I learned by working on Turbogeostu for a few years. Turbogeostu has been used since 2007, if I'm not wrong, and so it evolved a lot. We saw a lot of changes. We started with a template engine, which was named KID, then we moved forward to Ganshee. And now Ganshee is not supported anymore, so we are going to move forward to Kajiki. And of course, every one of our users needs to be able to continue to run these applications. And for example, some of our users didn't like Kajiki and Ganshee and KID and used Jinja too, some used Neco and so on. And we needed to be able to support all of them and let the users work with all of them. So what I learned is actually that web applications, at least for the part of developing them, are much like a little kid. They have a lot of issues. They want things like they want them to be, and they might change their mind like every five seconds. Okay? Whenever you're working with developers on the web world, the web world is really fast. So your infrastructure might change any time. You might start small, then you have like 10,000 users the next day and you need to scale and change everything in your infrastructure. And I start with a specific technology. You decide to go with storing files on disk, and then the next day you need to change to MongoDB for storing files because you need to scale or your developers just don't like the previous idea anymore. Or maybe the library you are using as dialed, like in the case of KID when we switched to Ganshee. And so everything you do for the web world requires to be far more able to change on real time while on production because the web world environment changes pretty often. Okay? For various reasons. Not all of them are good. Sometimes it changes just because it's cool to switch to asynchronous technologies or things like that. But whatever. Your user want to be able to change what they are working on. And the third point is that automatic testing is actually something which is done for real for most web applications because it's easy to simulate the environment. It's easy to perform a request and check the response. So most web applications want to be able to provide automatic tests and test with. So wherever you write a framework for the web world, it should make really easy to monkey patch the framework. Well, monkey patching is the wrong term. But to drive the framework in a way that it's good for making easy to write tests. So to simulate the production application without needing the world production infrastructure. I'll make you an example. SQL Alchemy is really good. And one of the reasons why it's really good that is able to work on SQLite. Because when you write tests, you don't need to set up a whole SQL environment or Postgres environment just to run the test suite on your computer. You can go with SQLite or you can even go with SQLite in memory, which doesn't even need to store your database at all. When we decided to choose a MongoDB support library for Turbogears 2 because whenever you start a new project in Turbogears, you can choose to go for SQL databases or MongoDB. We decided to go for Ming because Ming had a feature which is called the Mongo in memory implementation, which made possible to write test unit without needing MongoDB at all. It simulated the world MongoDB server in memory. So you can create a record, check them and so on without needing to even start MongoDB. And it should be able to do the same thing. I want to be able to save the files without needing to actually start the file storage itself or without needing to actually upload them on S3 if I'm going to use the Amazon Web Services. So, and the last point is that what I learned is actually then making things really simple and easy to use, wins over providing them a huge amount of features. Providing a huge amount of features requires a real big investment in trying to keep them together and moving them forward, keeping them in shape and so on. And usually, you are not able to cover all the use cases on all the features because maybe you are going to use just 20% of the features, but there will be one of your users which will rely on the other 80%. So just focus on the really important features and let your users write extensions over them. If the good foundation is solid, then people will start relying it for writing their own extensions. This is one of the reasons why, for example, Deepot doesn't have a file system structure, it doesn't have directories, it doesn't have the concept of collections of files.  It's not hard to store file, to set the pointer to the file somewhere where you can have the hierarchy and so on. And in fact, there is a guide which wrote Deepot FS, which is an extension for Deepot that provides support for file system-like because it works also on things like with FS which do not provide the file system at all. You just can save that file and you cannot say I want to have a group of files in any way. So the first thing we focus on is to allow for infrastructure changes because that was our first problem. We faced that problem, so we knew pretty well what we needed to check and what we needed to do. So the first thing, three things we decided to do was to allow to configure multiple storage engines. So whenever you use Deepot, you can say, hey, I want to save something here, something there, something else there too. I want to have three different storage engines because I want to use locales and also read FS and also Amazon Web Services and we wanted to be able to switch storage engines at a runtime with a graceful restart, of course, not that you can actually switch it in your configuration without starting the web server unless you properly write some checks. And it didn't have to, it should continue to keep working on the previously uploaded files. So you can say, hey, from now on, upload files on Grid FS, but everything I uploaded on the disk should continue to work and Deepot will do that. And we wanted, of course, to be able to rely on multiple storages concurrently. So not only you could have Grid FS, S3 and whatever, but you could also use them in your application at the same time. And this is because actually it happened for real. One of our users came and said, hey, Deepot is really cool, but I want to store my avatars here, my items uploaded on my social network there and whatever is a temporary file for my own use should be on disks too. So how can I use three different storage engines at the same time? And this has been like the second question we had on Deepot. So it's been a real need from one of our users to be able to use multiple storage engines concurrently. So whenever you upload a file, if you do not specify anything, the file goes to the default storage engine, storage actually not storage engine. If you specify something, you can drive the file to be uploaded on a specific storage. And storage are actually identified by a name. So that storage right now can be on Grid FS. But if you configure a new storage, which is named the same, but is on S3, your old files continue to be served from Grid FS and whatever you upload new will be served from S3. Because Deepot knows that the old files are on Grid FS and the new files are on S3. And you are still using the storage which is named avatars in case of user images. And then you can of course use multiple of them during runtime. And that's made possible because Deepot, as I told you, has no concept of a file hierarchy. So it's able to identify files by an ID. And the ID is paid to the storage name. So every file is uniquely identified by an ID and the storage name. So as far as the storage has the same name and the file has the same ID, he will be able to look up for that file even if the underlying storage changed. Okay. And the other part we wanted to do is provide a really easy way to use everything. So we provided something which is called the Deepot Manager, which is in charge of actually doing all the configuration so that it could work on practically any web framework. And we were not bound, for example, to using the INI files, which is what we use in TurboGears for configuration. You could use Yamle or whatever you want for storing configuration or you can even write the configuration in Python itself. Because the Deepot Manager is the one in charge of keeping the real configuration and is able to load it from various sources or from dictionaries or from whatever. And it keeps track of what you have currently active and configured so whenever you need something, you go to the Deepot Manager and say, hey, Deepot Manager, give me this storage. I don't care where it is, how it's configured and how it works. Just give it to me and I will save the file there. And if you don't want to get any specific storage, you just ask for a storage and it will provide you the default one. So this is an example from the documentation of Deepot, which is the most simple case. We are just configuring a storage, getting the storage itself and storing the file on the storage. So you can see that the configuration in this case is made through a dictionary and we are configuring a default storage, in this case, in name default. And the storage uses the GridFS backend and provides some additional options which are related to the backend itself. So in this case, it provides the MongoDB URL. Then we get the storage itself. In this case, we don't specify any specific storage, so we are actually getting the default one. And then we just create the file. Whenever we create a file on the storage, we get back the file ID and we can look back for the files through the .get method of the storage. So you see that the interface is pretty similar to dictionaries. Just create something, you get it back by key. Nothing more, nothing less. This is the core foundation of Deepot. And over the core foundation, there are more advanced things, more complex things. We focused on providing a solid foundation on which we could actually implement more advanced features. And one of these features is the support for database systems. Like in this case, we have support for SQL Alchemy. So you want to store a file which is somehow related to your model, like in the case of a user, you have the avatar. And you want to store the avatar inside the user. You just declare a column which is of type, upload a file field. And you can specify the uploaded type. In this case, it's an image with a thumbnail. So whenever you upload the image, it will also get a thumbnail too. And then whenever you save your document or user, you just assign the photo to the file, and Deepot will upload it on whatever system or whatever storage you wanted to, or if you don't specify any on the default one, and we'll link it to the actual model itself. So I told you that one of the things we learned is actually the web application changes offense. Maybe the developer change, maybe the technology improves whatever. So it should be easy to support different technologies. So in Deepot, we focused on making everything a layer or a layer. For example, we have support for SQL Alchemy attachments. We have support for MongoDB attachments. We have support for storing files on S3, local files in GridFS. And we have implemented everything as plugins. So if you want to support storing files of your own system or whatever you invented yourself, you just write the plugin and everything else in Deepot continues to work. The SQL Alchemy support will continue to work even if it's written on your own plugin because you just need to implement the storage engine and nothing else. And there are even files it's made by a whiskey middleware. So you can use it with any web framework. We use it with Turbogios, but if you have a Flask user, you can just attach the framework to Flask and go on. Actually, most of our users are actually Flask users because currently it's what most commonly used for web APIs, I suppose. And then it works together with your database. If you don't know what it is, it's actually a real query. It's called the query of despair. It's a really, really long SQL query. And what it means that it works with your database, it means that it copes with your transaction, for example. You uploaded the avatar of the user by saving the user face, updating the user face. Your transaction gets rolled back as far as you have a transaction manager properly working. And then Deepot detects that your transaction rolled back and will recover the previous states of the files. So if you try to save a new state of the user, and the state includes a new avatar and a new name and surname, and storing the name and surname fails for whatever reason, maybe a dialogue on something in your query or whatever, Deepot will detect it and will recover the previous states of the avatar too. So you didn't save things, alph, only the name. Your models will change in a proper way. And whenever you delete an item, it actually deletes the attachments only if the deletion of the item properly worked on the database. If you fail to delete the items, you don't end up with an entry which is in your database, but you don't have the avatar anymore. So Deepot detects the transaction fail that will recover the files that wanted to delete. And the last thing is that it should be really easy to extend. So we focused on two types of extensions to provide additional behaviors of our Deepot. One is attachments themselves. So whenever you provide an upload file field, you can provide an upload type. The attachments are actually in charge of changing the file itself. So whenever you want to replace the file with a new file, you want to go for an attachment type. And then you can, over attachment type, you can also provide filters. Filters do not replace the file itself. I'm not able to change the content itself, but they can add additional information to the content, which might be additional metadata or additional files in this case. And you can, of course, apply multiple filters. For example, you might have a filter which generates thumbness and you might apply four of them because you want a small, medium and big thumbness. And you just declare the same filter three times with different construction options. And you will end up with three different thumbness. Let me show you a real case of an attachment, which is took from the documentation of Deepot. And the interesting part is actually that they not only can change the content itself, but they can also add additional behaviors to the files. What does it mean? It means that whenever you recover the file from your file system, it will be converted to data plot type. So if you apply the type provided additional methods, like, for example, I don't know, give me the histogram of the image, you can call them on your ready stored files. So Deepot will know the original type of the upload and we'll be able to recover its state and provide all the additional features and behaviors your files have, not only to just change the file itself. Or, for example, if you want to add additional information, like you want to store not only the file, but also, for example, the primary color. For example, if you want to look for the images which are red, you can store that inside the file as a metadata because Deepot keeps tracks of the files and all the metadata over the file. So you can add additional details over your files. And this is the example of a custom attachment. In this case, it's applauded an image unless it's bigger than a specific resolution. In case the image is bigger than that resolution, it gets shrinks to that site. So the first thing we do is getting the content itself and its data. And this is done through two helper functions because we don't know what the content is. We know that Deepot is going to save files, but we don't know what the user is going to provide us. For example, it might provide a file. It might provide bytes in memory. It might provide a byte IO. It might provide a GGI file field if it was something applauded from the web. And we have this pretty convenient function, file from content that whatever is the content will convert it to a proper file. And it's pretty efficient because users in memory storage for files which are smaller than the sites and then it stores them on disk only if the site is bigger than the maximum size. Then we open the image, check for its sites. If the site is bigger than a specified limit, we create a new thumbnail for the image of the maximum size and we replace the content. We see that in this case, we replace the content variable with a spool temporary file, which is that kind of temporary file which stores everything in memory until you make the data bigger than the maximum size you specify. And then you save the image itself inside your spool temporary file and then gone and provide to the process content, the replaced content. So you just call your parent method with the new content and in the middle you can do whatever you want because the real logic of saving the files is inside your parent implementation. Moving to filters, we already know that we already know that attachments can have more than a filter and we already know that they run after upload. So while the attachment itself runs during upload, this call runs before the file gets uploaded. So in this case, this is by design because if we fail in generating the thumbnail, we do not want to go on and store the data in the database, for example, and we end up with a user without avatar again. So if the avatar for user fails, the depot crashes and you won't have the user created at all. So not only if writing on the database fails, the depot recovers the files, but also if creating the files fails, you have a proper exception before saving the data to the database. So we try to do the best we can to keep in sync the few things. If any of the two fails, you don't have done anything, you haven't done anything at all. Then, so in the case of filters, actually you do not work before uploading the files, but after. Why? Because filters usually provide additional behavior-saving information. So in case it fails a filter, it will just go on and provide the details that the filter failed, but you already have the files. So you can recover the additional information from the existing file. So even if the secondary thumbnail fails, the medium science thumbnail fails, it's not a huge issue because you can recreate that medium-sized thumbnail from the original data. And as I told you, you can add additional data to your files, but in the case of filters, not behavior. So you cannot add additional methods to your object through filters. And here is a simple example of a filter, which actually saves the thumbnails for a specific resolution in a specific format. And you see that we just receive the on-save event and inside the on-save event we have the uploaded file. And at the end of the code, which mostly just creates the thumbnail, we just add to uploaded file any information we want. In this case we add the thumbnail ID, thumbnail part, and thumbnail URL to the uploaded file. So uploaded files work like dictionaries. You cannot add anything you want to them and you have the file itself, so the content and all the metadata you added to the file. When you look back at the file, so you query it back from your database, you just have the thumbnail URL property, because we added it here at the end of our code.  If the thumbnail URL is none, probably if you thumbnail failed and you can recreate it from the original file. And one of the core parts of Deepod is that it's meant for the web, specific to the web. So we wanted to make easy to use content delivery networks and we wanted to make easy for people to rely on Deepod for serving data to the web. So everything which is needed for serving files themselves is provided by Deepod itself. So when you store a file, Deepod already gets the content type, the last modified time, the content length of the file itself and the file name. So when you serve it back, you can properly add the ethers, the HTTP ethers for that file without having to work on them yourself. And we already know that whenever you want to serve them, you just rely on a whiskey middleware. So you just create, make the middleware and wrap it around your application and Deepod will do the proper thing to serve the files. And if the backend you are storing the files on supports HTTP itself, for example in the case of S3, you can be sure that the middleware will not serve the files itself but will redirect the user to the middleware itself. So in case of the content delivery network, you will end up serving the files from your content delivery network. So please try it. If you have questions of anything, let me know. If you find bugs of anything, I'll be more than happy to fix them. Everything is supported from Python 2 to 2.6 to Python 3.4. We haven't tested it on 3.5 but it should work. Everything is fully documented, so if you find something missing in the communication, let me know. We will cover it. And everything is tested with 100% coverage, so you can be pretty sure that it works. And we are already using it in production on various environments. So try it and let me know. Thanks. Questions? The microphone for them? No, for them asking. Yeah. Okay. Okay. He asked how much it costs, how much effort would be required to make it work on an asynchronous framework. Well, we used it on production on G-Event but G-Event is not a really asynchronous framework. It's a synchronous but it's far different from 2-Lip AsyncIO, for example, or Twisted because it's implicit as synchronous and not explicit as synchronously. So I'm not sure how much it will take to adapt the middle of itself to something like 2-Lip which will require to move from function to coroutines and so on. But it should be fairly easy actually because it just gets the files and sends it back to the content so it's to the browser. So it's a pretty good use case for a synchronous framework and the middle of itself is just one underline of code. So even if you have to rewrite this from scratch it will take like two hours no more. Okay. So the middle is already divided in utility functions. So the code itself that serves the file is like 10 lines of code which you can probably move to 2-Lip or something like that. But I haven't tested it. Only use with Gavant and I know that on Gavant it works better. She was before. Okay, we have it. So you mentioned that in case of a rollback you restored the files. So do you need some sort of storage for the depot itself or some metadata? No, actually what happens is that depot generates a unique ID for each file. So if you create a new version of the file you actually end up with a different ID and the old ID gets deleted only when the new one when the transaction gets committed. So for a time when you have the transaction rolling you have both the files and they have two different identifiers. If the transaction goes on and successfully commits it will say hey this new one is the proper one delete the old one. If the transaction rolls back to say hey the old one was the proper one delete the new one. So it just keeps both the files available at the same time and then decides which one to keep at the end of the transaction. And you mentioned it is transparent to switch for what from one type of storage to the other. So when you get a request for a file how do you know if you need to store it to serve it from the old storage system or the new one? Okay that's actually stored in the file metadata itself. Okay. So every storage engine need to provide support from some kind of metadata. In the case of GridFS it stores the metadata together with the file on the DB. In case of S3 it stores the metadata as HTTP either of the of the file itself. In case of the local file system it saves the gson file with the metadata and so on. Every storage engine is in charge of providing a way to add metadata to the file. And then DIPOT will rely on the metadata to know from where it should serve the file itself. But when you get the request from the user you only know the file name. So how do you know what's the storage? Not really because when you store the file at the low level we only know the file name. But if you bound the the file to a column of SQL Alchemy or MongoDB or whatever inside the column it gets actually stored the JSON with various information including from where to look up for additional details of the file. So if you use DIPOT at low level yes you have to provide the fallback yourself. But if you rely on the high level APIs they already provide it for you. Okay. Does it out of the box support uploading to a temporary URL on something like S3? Sorry. On like Swift and I think S3 as well you can be provided with a temporary URL to upload directly from the client. Does it support that? Okay I understood. No currently no as the most of the logic happens in DIPOT itself the client needs to upload the file on your server which processes the data and then uploads it on S3. You cannot directly provide the data on S3 as otherwise you will lose all the metadata that DIPOT calculates for you. We will need to provide some kind of DIPOT support in javascript itself so you can get the metadata before uploading there. I don't know if we have more time. We can ask outside of the room. Thank you.