text:
Frontier West, Performance & Graduation
Students can rehearse and perform in these beautiful Mountain West spaces.
Practicing and playing in a familiar classroom is nothing compared to the thrill of performing in a new environment in front of a live audience. Give your students a trip to the Rocky Mountains and the experience of a lifetime when they visit these music venues.
As a part of the University of Colorado Boulder, the Mary Rippon Outdoor Theatre is a small outdoor theater in the heart of the university. Named after the first female professor at the University, the theater has been holding plays and other performances since 1944. This is also the main stage where they perform their "Colorado Shakespeare Festival" performances, where every summer they host a multitude of classic Shakespeare plays.
The Bluebird Theater in Denver has undergone many changes and renovations since its opening in 1913. Originally named after John Thompson, a prominent businessman in Denver at the time, it renamed itself Bluebird Theater in 1922. It was originally a movie house, and it slowly adapted and became the music theater it is today.
Bluebird Theater, Credit: AEG
Arguably one of the most famous theater venues in the United States, the Red Rocks Amphitheatre venue takes "mountain theater" to a new level. The theater sits in a "transitional zone" where the Rocky Mountains meet the Great Plains. It is the only naturally occurring amphitheater in the world. With over 738 acres of land, this amphitheater offers a completely unique experience.
As part of the University of Utah, Kingsbury Hall has been an integral part of the institution since 1930. One of its most famous programs is called "UtahPresents." It is a multi-disciplinary program that "brings diverse artistic and cultural experiences to campus and the region." By having this program, the University commits to hosting a variety of diverse events through the creative arts to help educate its people.
The Tuacahn Center for the Arts in Ivins, Utah is another beautiful outdoor theater that premiered its first performance in 1995. Since then, it has produced over 60 original musical theater productions as well as Broadway shows. In addition to hosting shows, the Tuacahn High School for the Performing Arts opened in 1999 as the first public charter school in the state of Utah. They both have a mission to teach students and locals the importance of the arts and creativity.
Credit: Tuacahn Center for the Arts
Built as the home for the Utah Symphony Orchestra in 1979, Abravanel Hall in Salt Lake City has become an icon in the heart of Salt Lake City. And all that glitters is really gold in this hall, where it shows off gold-leaf covered staircases, balconies and tiers. It also holds a 27-foot-tall blown glass sculpture by artist Dale Chihuly. Students can visit the hall for one of its many performances throughout the year, or rent the stage to host their own.
Other Mountain West states with student-friendly performing arts venues include Montana. Opening in 1931, the Alberta Baair Theater in Billings boasts beautiful chandeliers and an Art Deco design. It is the largest fully equipped performance studio in the Billings area. It hosts a variety of professional performance groups as well as many student-based performances throughout the year. It is committed to teaching children about the arts and provides over 20,000 students access to their programs annually.
Founded in 1973, the National Music Museum in Vermillion, South Dakota has been recognized as the "Musical Smithsonian" of South Dakota. This museum features over 15,000 fine instruments from many different cultures and historical periods. The museum is currently undergoing an expansion and renovation, and it plans on reopening in 2021.
PreviousLearn and Play in these Mid-Atlantic Water Parks
NextThe National Flight Academy is the STEM Experience You Have Been Waiting For
Make Memories While Exploring Montana
Virtual Field Trips Keep Students Engaged While Keeping Them Safe
Top 5 Performance Venues to Experience in Boston
Your Student STEM Adventure Awaits in Colorado Springs
Recent from the Frontier West Region
7 Virtual National Parks For Your Next Virtual Science Adventure


text:
The following is a list of notable events and releases of the year 2015 in Danish music.

Events

January

February
 1 - The Danish National Chamber Orchestra, under its new name of Danmarks Underholdningsorkester, gives its first concert as a privately funded ensemble, at the Royal Academy of Music in Copenhagen.
 7 - The Dansk Melodi Grand Prix Final was executed on February 7, in Aalborg.

March

April

May

June
 3 – The 17th Distortion festival started in Copenhagen (June 3–7).
 27 – The Roskilde Festival opened, with a line-up including Muse, Florence and the Machine and Pharrell Williams.

July
 16 – G! Festival opened in Göta, Eysturoy, Faroe Islands (July 16–18).

August

September

October

November

December

Album and Singles releases

January

February

March

April

May

June

July

August

September

October

November

December

Deaths
March
 21 – Jørgen Ingmann, Danish jazz and pop guitarist (born 1925).

 August
 30 – Hugo Rasmussen, Danish bassist (born 1941).

See also
Music of Denmark
Denmark in the Eurovision Song Contest 2015

References

Danish music
Danish
Muse

redpajama_set_name: RedPajamaWikipedia


The Listening Partnership is a group of young people in Bristol with special educational needs or disabilities aged 13-19 years old, or up to age 25 with learning difficulties.
The goal of The Listening Partnership is to improve the lives of young people with special educational needs and disabilities.
New members are always welcome so please join us if you would like to be a part of this movement and help to improve the services offered to young people with special educational needs and disabilities.
Every Monday from 7pm to 9pm at the station to learn about our rights, find out what issues are important to us and get the people who make services for us to listen.
If you want to find out more come along or call us on 0117 947 9911.
The Station, Silver Street, BS1 2AG, Bristol.
In partnership with Bristol City Council.
Our support and information is for anyone in Bristol and the surrounding areas that identifies as being a disabled person.
Delivered in partnership with LPW.


The carpenters' union and International Union of Operating Engineers Local 49, both of which endorsed Hillary Clinton, will support the first-term congressman in the midterm elections in his rematch against former health care executive Angie Craig. Labor leaders praised Lewis's record in Congress, highlighting his support for domestic energy development as well as his willingness to buck his political party. Lewis has supported Davis-Bacon, which favors union wage levels in federal projects despite the push in the conservative movement to abolish wage mandates.
"In Jason's time in Congress he has cast repeated votes in support of Davis-Bacon prevailing wage and has led on the issue of changing school curriculum to encourage more people to look at careers in the construction industry," carpenters' spokesman Adam Duininck said in a release.
Both unions also praised Lewis for focusing on local issues and maintaining a relationship with labor leaders. Local 49 business manager Jason George said that Lewis and the union were not in lockstep on every political issue, but the congressman had supported the issues that help support the building trades and traditional blue-collar workers.
"Jason Lewis has made an effort to get to know our Union, understand our issues, and has taken politically tough stances in support of good paying Union jobs," George said in a statement. "We don't always agree on every issue, but we know that when it comes to supporting our jobs, he has stood with us, and that is why we are standing with him."
Lewis has made the development of the Enbridge Pipeline, which is projected to attract hundreds of millions of dollars in investment and create thousands of jobs, a centerpiece of his campaign. He has criticized environmentalist Democrats for holding up domestic energy projects and said Craig would side with her party over her constituents. Craig announced in August that she would support the pipeline if she is elected, though Lewis continues to criticize her campaign's ties to environmentalist groups.
"I'm working hard to make certain we get Enbridge so we get the Pine Bend refinery in the second district … the oil it needs to grow the economy," Lewis said in the Oct. 21 debate. "My opponent says, 'well Sierra Club won't let me endorse that.'"
Lewis pledged to continue advocating for local laborers in Congress. He said he will continue to focus on workforce training and revamping the apprenticeship system, one of the Trump administration's priorities, "so labor groups are able to thrive with adequately trained laborers."
"This nation was built on the backs of hardworking Minnesotans like those belonging to these two groups and it is important we support them with our policies in Washington," he said in a statement. "I am proud to have supported them in my first-term in Congress and look forward to continuing to work on their behalf."
The Craig campaign did not respond to request for comment.
Lewis narrowly defeated Craig 47-45 percent in 2016, the same margin of victory Trump earned against Democratic nominee Hillary Clinton, despite the fact that he trailed in the polls. Voter surveys once again show Craig a favorite to defeat the Republican, holding a double-digit lead in an October New York Times poll. The Lewis campaign has released its own internal polling showing him with a 3-point lead. The Cook Political Report rates the race as "Leans Democratic" as it enters the closing weeks of the campaign.
This entry was posted in Politics and tagged Big Labor, Minnesota, Unions. Bookmark the permalink.


1. A mechanical or electronic analog computer used primarily to solve especially complicated differential equations.
2. A form of analog computer that utilizes interconnected electronic integrators to solve differential equations, an equation expressing a relationship between functions and their derivatives.
An electrophoretic technique (migration of electrically charged particles) which separates proteins by their physical interaction with the supporting medium as well as by electrophoretic mobility.
Proteins migrate through layered gels of differing pore size and/or pH, forming discontinuous and concentrated disks of individual molecules within the gel layers.
An electrode in which a drop of mercury, in the course of its formation, acts as the electrode surface.
It is therefore a fresh surface and of a small area, both advantages in a cathode (terminal or electrode at which electrons enter a system) for polarography or a method for analyzing the composition of a dilute electrolytic solution.
An electrode which is connected to a ground.
A continuous-wave radio navigation aid which uses special radio beacons to provide a number of equisignal zones; usually, there are 24 zones.
1. An insulator carrying a permanent charge similar to a permanent magnet.
2. A solid dielectric with a permanent electric polarization.
This is the electric equivalent of a permanent magnet.
3. A permanently polarized piece of dielectric material produced by heating the material and placing it in a strong electric field during cooling.
Some barium titanate ceramics can carnauba waxes. The electric field of an electret corresponds somewhat to the magnetic field of a permanent magnet.
4. A special plastic piezoelectric element, polarized during manufacture to become the equivalent of a permanently charged capacitor.
It generates an amplitude-responsive output voltage, like a ceramic element, but it requires less energy from the stylus system.
1. An earphone; such as, those used in sound-powered phones, which has a diaphragm of dielectrically (very poor conductor of electric current) charged material including polarized plastic, thereby eliminating the need for an external power source.
2. A headphone consisting of an electret transducer, usually in the form of a push-pull transducer or an instrument; such as, a microphone or electric motor, which converts one form of energy into another form.
1. A microphone that has an electret transducer capable of converting audio waves into electromagnetic waves.
2. A microphone consisting of an electret transducer in which the foil electret diaphragm is placed next to a perforated, ridged, metal or metal-coated backplate, and output voltage, taken between diaphragm and backplate.
It is proportional to the displacement of the diaphragm or a thin, flexible sheet that can be moved by sound waves, as in a microphone, or which can produce sound waves when moved, as in a loudspeaker.
A tool that is actuated by electric waves from one system and which supplies power in the form of electric waves to a second network.
1. Of or having to do with electricity.
2. Charged with electricity; such as, an electric battery.
3. Containing, producing, arising from, or actuated by electricity, or designed to carry electricity and capable of doing it.
Examples are electric energy, electric lamp, electric eel, electric vehicle, and electric motor.
4. Carrying electricity, or designed to carry electricity.
5. Run by electricity; for example a musical instrument like an electric guitar, producing sounds electronically through a speaker.
Electric, in many cases is used interchangeably with electrical, and it is often restricted to the description of particular devices or to concepts relating to the flow of electric current; such as, an electric fire or an electric charge.
A temporary anesthesia caused by the passage of an electric current through a part of the body.
1. A discharge of electricity through a gas, normally characterized by a voltage drop approximately equal to the ionization potential of the gas.
2. A luminous discharge of current that is formed when a strong current jumps a gap in a circuit or between two electrodes.
Electric arcs across specially designed electrodes can produce very high heat and bright light, and are used for such purposes as welding and illumination in spotlights.
Unwanted arcs in electrical circuits can cause fires and lightning is an example of an electric arc between one cloud and the earth or another cloud, as are sparks caused by discharges of static electricity.
Showing page 4 out of 102 pages of 1521 main-word entries or main-word-entry groups.


Promote Your Event v2 is a mind-blowing after effects template prepared by famous author – yeremia, who keep up 7,094 total sales and 388 ratings up to this time.
As far as, what you need to know about reviews? Well, this project has 8 reviews. For example, last review was penned by "Imaje3d" who gave 5 star rating and reason was for "Flexibility". This project really justify 5 stars, gallant and arduous work.
Promote Your Event v2 is a video display project categorical satisfactory for special events videos. Our admin team want to bring out that download archive package for this project embraces all important files: Images, Demo Videos, Tutorials, Elements and so on.
If you will meet any difficulties with this item try to view the help pdf file that is included in download archive if not create a comment on this web page and Hunterae.com admin team will respond with a lot of supportive answers, notions and advices.
This template was crafted by a pro author first and foremost for those who appreciate to play with video graphics. It is comfortable enough to use this project, all that you need to do is simply to download the project from below link on this page and use it for all your requirements.
Since February 2011, owning 108 projects in portfolio, 11 badges and 725 followers, "yeremia" on and on satisfy us with enigmatic after effects projects.
Not far from a little while back, author stated that "Promote Your Event v2" is one of the gorgeous after effects item they even invented on the Envato.com online shop. Beyond doubt, rugged work is the key to new heights.
Item has next incredible resolution: 1920×1080 and integral size of the archive is 45.1mb, download speed from the principal file hosting will be quite sharp.


Find Top-Rated Coupons for Gents Sunglasses from Any Online Shop at KingdomOfTheSun Store. Buy Deluxe Gents Sunglasses with Free Shipping to United States, UK, Canada, Europe, and Australia at KingdomOfTheSun Store.
KingdomOfTheSun Shop Recommends Also I Am Sunglasses, See Collection and Solid Gold Aviators - Shop Online at Amazon, Walmart, Ebay. Enjoy your shopping for discount prices? Want to compare prices on Most Popular Sunglasses online before making a purchase? Looking for ways to save money? All of this and more is possible at KingdomOfTheSun.net - your premier source for online comparison Sunglasses shopping: compare prices on 300 000+ models from leading stores Glasses, Lookmatic, Ray-Ban, WayFair, Steven Alan , Target, Warby Parker, BestBuy, Dior, SunglassHut, SunglassesShop and other.


text:
Director: Seth Gordon
Cast: Jason Bateman, Charlie Day, Jason Sudeikis, Jennifer Aniston, Colin Farrell, Kevin Spacey, Donald Sutherland, Jamie Foxx
Screenplay: Michael Markowitz, John Francis Daley, Jonathan Goldstein
98 mins. Rated R for crude and sexual content, pervasive language and some drug material.
I usually find one great comedy every year. 2011's Horrible Bosses was a great comedy. My review for Horrible Bosses here.
Nick Hendricks (Jason Bateman, TV's Arrested Development, This is Where I Leave You) has been working his butt off for a promotion, but his boss Dave Harken (Kevin Spacey, TV's House of Cards, American Beauty) seems not to notice or care. Dale Arbus (Charlie Day, TV's It's Always Sunny in Philadelphia, The Lego Movie) is trying to be the best fiancé he can be, but his boss Julia (Jennifer Aniston, TV's Friends, Cake) wants to ruin it be forcing Dale into a sexual relationship through blackmail. Then there's Kurt Buckman (Jason Sudeikis, We're the Millers, Drinking Buddies), who is all set up to take over his boss's position when he retires. Unfortunately, Kurt's boss Jack Pellitt (Donald Sutherland, The Italian Job, The Hunger Games: Mockingjay – Part 1) dies, and his son Bobby (Colin Farrell, Total Recall, Winter's Tale) takes over instead. Now, these three have no choice but to get the help from Mothafucka Jones (Jamie Foxx, Django Unchained, Annie) to kill their horrible bosses in this dark comedy gem.
I love this movie. Most films don't try the black comedy anymore and even fewer actually succeed as perfectly as Horrible Bosses did. I also found the story to have plenty of twists and turns to it, enough so to keep me enthused even without the laughs, but then add in the genius of Bateman, Day, and Sudeikis as the everymen along with the strong performances of Spacey, Aniston, and Farrell as the "horrible bosses" and you have a great time at the movies. Director Seth Gordon (Identity Thief, Freakonomics) handles this crew nicely and gives each equal laughs and equal screentime to boot.
All in all, you see a movie like Horrible Bosses for laughs, and it has plenty. It isn't a perfect film, but it is about as close to genius comedy as one can get.
2011, American Beauty, Annie, Arrested Development, Cake, Charlie Day, Colin Farrell, Django Unchained, Donald Sutherland, Drinking Buddies, Freakonomics, friends, Horrible Bosses, House of Cards, Identity Thief, It's Always Sunny in Philadelphia, Jamie Foxx, Jason Bateman, Jason Sudeikis, Jennifer Aniston, John Francis Daley, Jonathan Goldstein, Kevin Spacey, Michael Markowitz, Seth Gordon, The Hunger Games: Mockingjay – Part 1, The Italian Job, The Lego Movie, This is Where I Leave You, Total Recall, We're the Millers, Winter's Tale
A Long Way Down (2014)
4 thoughts on "Horrible Bosses (2011)"
Pingback: 200 Posts! Many thanks! | AlmightyGoatman
Pingback: We're the Millers (2013) | AlmightyGoatman
Pingback: Zootopia (2016) – AlmightyGoatman
Pingback: [#2018oscardeathrace] Baby Driver (2017) – AlmightyGoatman

redpajama_set_name: RedPajamaCommonCrawl


Of the many dishes common to South Africa, Bobotie is perhaps closest to being the national dish.
As cute as the name sounds, this dish here isn't pure cutesy cute at all; it's a big deal of a dish which origins has been accounted way back the ancient Roman times.
Hearty and comforting, Boboti is made primarily of curried minced meat topped with milk and egg mixture and baked to perfection. Easy, tasty dish with punchy yet on point flavors! See the recipe to preparing one below.
Pre-heat oven at 350 deg F/180 deg Celsius. In a medium bowl, mix together milk and bread to soften it. Set aside. Lightly grease a 9×13-inch baking dish, or a cast iron.
Heat up a large saucepan or large skillet over medium heat,then add butter until melted, followed by onions and garlic. Saute for about 3 minutes just until soft and fragrant. Next stir in the spices: curry powder, turmeric, ground cumin, coriander and dried herbs.
Add ground beef and herbs stirring constantly to break it up, cook until beef is no longer pink or slightly brown. Remove from the stove. Add to a bowl, followed by bread mixture, chutney, grated apple, lemon juice and zest, and Worcestershire – add raisins here, if desired. Season to taste with salt and pepper.
Add beef mixture into greased casserole dish or cast iron pan. I used a 10 inch pan. Using a spoon press the beef mixture down. This helps keep the eggs mixture afloat and forms a nice custardy top when baked, Bake in the oven for around 40-50 minutes.
While bobotie is baking, mix together eggs, cream , milk and a ¼ teaspoon of turmeric. Take the meat out of the oven, pour the eggs mixture over the beef. Arrange the bay leaves on top of it.
Bake for another 20 minutes (start checking after 15 minutes ) or until the eggs mixture has set. Remove and let it rest for a few minutes then serve with yellow rice and vegetables.


text:
The Chris and Carrie Shumway Foundation Donates $25 Million to the McIntire School for an Innovative New Building and Program
The gift funds an innovative space and faculty for a new bioscience/business program to advance collaboration between McIntire and the School of Medicine.
Corey Mittenberg
Chris and Carrie Shumway
Editor's Note: By the end of 2021, The Chris and Carrie Shumway Foundation has committed $30 million to the McIntire School of Commerce—$25 million to support the additional building in the Commerce Complex and $5 million in support of faculty teaching in programs at the intersection of business and bioscience. A portion of the gift will be matched with $3.5 million from the University's Strategic Investment Fund.
The University of Virginia today announced a $25 million gift from The Chris and Carrie Shumway Foundation to fund an innovative new building and new bioscience/business program.
A portion of the gift will be matched with $3.5 million from the University's Strategic Investment Fund. This gift will advance collaborative efforts between UVA's McIntire School of Commerce and its School of Medicine to create educational offerings that integrate business concepts into biomedical science and health care leadership studies.
"The University of Virginia is a special place where innovation and tradition work hand-in-hand, and we are proud to support its outstanding faculty and students," Chris Shumway, a McIntire School alumnus, said. "By creating space and curriculum to support innovative learning, we are preparing students to contribute in significant ways to society."
"This generous gift from The Chris and Carrie Shumway Foundation deeply aligns with the strategic priorities of our campaign and will help us to remain focused on delivering our globally recognized business education experience," Carl Zeithaml, Dean of the McIntire School of Commerce, said. "These funds will ensure McIntire's ability to accommodate new programs and initiatives, like bioscience/business, with increased numbers of students, faculty, and staff for years to come."
In December, the University of Virginia Board of Visitors approved a proposal for an additional McIntire School academic building to be constructed adjacent to the School's current facilities on the University's historic Lawn. The planned facility, which will bear the Shumway Foundation's name, will support and symbolize McIntire's position as a world leader in undergraduate and graduate business education. Through a dynamic architectural design incorporating versatile spaces, the building will invite collaboration and innovation both within the McIntire School community and among the University, businesses, and community partners. Flexible classroom spaces, enhanced study areas, and dynamic labs will foster hands-on learning that includes data analytics visualization, behavioral research, and multimedia analysis.
As the Managing Partner of Shumway Capital, Chris Shumway oversees investments in a wide range of long-term, high-growth businesses. He is a trustee of The Chris and Carrie Shumway Foundation, serves on the McIntire School of Commerce Foundation Board of Trustees, and chairs the board of the Stamford School for Excellence, a free, public pre-K-to-fourth-grade charter school in Stamford, Conn. He also serves as a Visiting Professor at the McIntire School, teaching "Global Macro Investing."
"I am incredibly grateful to Chris and Carrie Shumway for their support of the McIntire School and the University," UVA President Jim Ryan said. "As President, my message to students and faculty has been, 'When in doubt, build a bridge.' This gift is a perfect example, helping to build bridges between McIntire and the UVA School of Medicine that will help make health care more efficient."
This story first appeared in UVA Today Sept. 25, 2018.
See the news on Bloomberg.
See the news in The Daily Progress.


text:
Krenkerup Polo
Polo Explained
Polo Ponies
Polo Academy
Krenkerup Polo Academy
Instruction by a Professional Coach
Polo was first played in Persia (Iran) and is the world's oldest team sport, dating back to 600 BC. Polo is derived from the Tibetan word "pulu", which means ball. It was played by nomadic warriors and Persian Kings, Princes and Queens. Westerners were introduced to this noble sport when tea planters and British soldiers brought the game back to England from India.
The first match played in the UK took place in 1869 between the 10th Hussars and the 9th Lancers. The official written rules (on which the present international rules are based) were created by an Irishman, Captain John Watson of the British 13th Hussars. These rules were revised in 1874 to create the so-called Hurlingham Rules. Today, The Hurlingham Polo Association (HPA) remains the official governing body for polo in the United Kingdom, Ireland, the United Arab Emirates and many other countries worldwide.
A member of the team would be delighted to discuss your requirements.
Stay up-to-date and receive the latest news about Krenkerup Polo by email.
Krenkerup is located 87 miles south of Copenhagen and 20 miles from Rødby.
Thank you. Please click the link in the confirmation email to confirm your subscription.
© 2021 Krenkerup Polo / Built by Primitive Digital


UnityPoint Health Transitional Care Center has an immediate opening for a Full-time Dietary Aide for our new 46 Bed Skilled Nursing Facility. We realize it take every member of our staff to make us the preferred healthcare provider in Easter Iowa.
The right candidate will train in our existing Cedar Rapids facility learning our processes, systems and culture from our staff and leaders. After training and learning the Dietary Aide will transfer to the newly constructed UnityPoint Health Transitional Care Center opening in Northeast Cedar Rapids.
This position is for someone who has a passion for serving others and working with a great team in a Skilled Nursing Facility.
We offer competitive wage & benefit package as well as a stable working environment that helps create a comfortable life/work balance.


You use digital multimeters to find out the current, voltage and resistance in an electrical circuit, and they are must-have devices for anyone who is getting into electronics. Current is measured in amps, and one-thousandth of an amp is called a milliamp. Multimeters can function as ammeters (measurers of current), and you can use the meter to read the number of milliamps flowing through a circuit. This process usually requires connecting the probes to the appropriate ports, breaking the circuit so the current can flow to the multimeter, choosing a suitable setting on the meter, and then connecting the probes to the circuit.
Connect the black jack to the multimeter port labeled "COM," connect the red one to the port with either "A" or "mA" on it, and then select an appropriate maximum current on the main dial. Turn off the circuit you intend to measure, make a break in it, and then touch the probes to the wires or components at both sides of the break. Now switch the current back on to read the number of milliamps going through the circuit.
A multimeter measures the key electronic characteristics of a circuit: voltage, current and resistance. Two points at different locations on a circuit have a difference in electrical potential between them, which is described as the voltage difference or just voltage between the points. The voltage "pushes" the current around the circuit, and the current describes the flow of electricity around the circuit. So a higher current means more electricity flows past a given point per second, in the same way as a higher current of water means more water passes a point each second. The resistance describes how difficult it is for current to flow through the circuit. For the same voltage, a higher resistance means less current flow.
Multimeters use the relationship between these quantities described by Ohm's law to measure them for any circuit. The name "multimeter" refers to the multiple functions of the same device. Voltmeters, ammeters and ohmmeters are single-function devices for measuring voltage, current and resistance, respectively. Analog multimeters exist but are more difficult to use than the more common digital devices, which usually feature clear display screens. You use two probes to measure parts of the circuit, ports to insert the probes, and usually a dial or a selection of buttons to choose the mode.
Multimeters return a result in SI (the standard scientific) units for voltage, current and resistance, which are volts (V), amps (A) and ohms (Ω), respectively. This gives you most of the information you need to interpret the reading, but multimeters also use standard prefixes for important fractions and multiples of these quantities.
The prefix "micro" means one-millionth and has the symbol μ. This means 400 μV is 400-millionths of a volt or 400 microvolts.
The prefix "milli" refers to one-thousandth and has the symbol m. So 35 mA is 35 milliamps or 35-thousandths of an amp.
"Kilo" refers to thousands and has the symbol k. So 50 kΩ is 50 thousand ohms or 50 kiloohms.
The "mega" prefix means millions, and scientists use a capital M for this. So 1 MΩ is 1 megaohm or 1 million ohms.
Use the main selector switch to specify that you're measuring a current and choose an appropriate setting. The settings give you a maximum for the range of current you're expecting, but it's best to choose one that is too high at first – 10 A, for example – and then reduce it as needed for a more precise result.
Turn off the circuit you are measuring and make a break in it at an appropriate point. You need to break the circuit so that all of the current goes to the meter. Touch the probes to the two points where you've broken the circuit and switch the circuit back on. The current flows through the multimeter, which displays the current. Ensure that the current is in the range of mA expected and then lower the setting of your multimeter to the next-highest option – for a 0.05 A or 50 mA current, choose 200 mA – to get a precise reading in milliamps.
Johnson, Lee. "How To Read Milliamps With a Digital Meter." Sciencing, https://sciencing.com/read-milliamps-digital-meter-8582325.html. 13 April 2018.


By Dr. Susan Mathison on Jan 21, 2018 at 3:58 p.m.
The new year often inspires a renewed sense of possibility, purpose, determination and hope. It's the new year, new year vibe. It's a time when you put the past behind you and begin new adventures. A time to reexamine your life and figure out what changes you'd like to make.
Yet, the controversy continues every year ... are you a New Year's resolutions maker or a resolution hater?
Regardless of your stance, research shows that not very many people feel that they succeed in making the lasting changes they hope for.
Perhaps a fresh perspective on making changes can put a positive spin on making good changes, for good. I thought about friends I admire and books and blogs I'd read and came up with a few new spins on resolutions.
1. You don't have to call them resolutions, and you can start any time of year. They can be intentions, goals, promises, commitments, or a bucket list. Studies show that you are much more likely to achieve them if you take the time to write them down.
2. Come up with a word for the year. My friends Dawn Kaiser and Kelly Myer have both used the word JOY as a lens for a particular year and focused on activities and people that bring them joy. It was so impactful that Dawn is now a public speaker and a professional "joyologist" sharing inspiration and joy to thousands. Kelly has worked on a program for people to find their life's purpose called "Journey of Yourself," i.e. JOY.
Other fun words include upgrade, nourish, service, adventure, balance, learn, golden, love and of course, fun.
3. Keep a gratitude journal. Keep it by your bedside and commit to just a few things to jot down every day that made you grateful. It can be the big things like family and faith.
But write down a few little blessings that you noted today like ... I am grateful that the lady behind me in church who is really off-tune is so confident and faith-filled that she belts it out for Jesus.
I am so grateful for the beautiful sundogs that bracket the sun on really cold days.
I am grateful for the small little mispronunciations that my son still hasn't grown out of, like "ambliance" for ambulance and "comfstable" for comfortable.
4. Follow a book as a theme. Screen writer Shonda Rhimes' "Year of Yes" is on my bedside stand thanks to my friend Melissa Schmalenberger. This book is part memoir, part guidebook on how to change your life by simply saying yes to the opportunities that come your way. Melissa is always trying new things and she and her husband have magically manifested a move to their dream city Seattle and a whole new life.
Another friend, Christy Tehven, followed Danielle Laporte's "Desire Map" to make her dream business, Love Always Floral, a reality and a major success. Her beautiful creations are in hot demand throughout the region.
Others have mentioned 52 Lists Project by Moorea Seal. It's a book of prompts for every week of the year that range from "list things you'd like to be known for" to "list the things you'd change in your life right now if you could."
5. Create a personal legacy statement. Laura Roser, founder and CEO of Paragon Road suggests that a personal legacy statement. She describes it as an estate plan that, instead of finances, focuses on the kind of life you want to lead. She suggests reflecting on your different roles in life: family, career, community, social and spiritual.
The next step is to define your values and principles, and how your actions and character reflect these. The last step is how do you want to share your legacy?
Regardless of how your choose to make each year better and more meaningful, it takes a little time. In our culture of constant busyness, your health and happiness deserves some attention too!


We assess long-term impacts of the Mexican conditional cash transfer (CCT) program on youth employment and earnings. We rely on the original random assignment into early and late treatment localities, which introduced CCTs in 1998 and 2000. We focus on children between 7 and 16 years of age in 1997, who we follow up to 17 years later. Using the household surveys between 2003 and 2015, we find that those with greater time of exposure to CCTs had greater increases in educational attainment. Moreover, we find significant and positive impacts of the program on the likelihood and quality of employment.
This entry was posted on Tuesday, 30 January 2018 by Jorge Carrillo in Social protection and tagged cash transfers, CCTs, Mexico, poverty.


In the year 2,000, I replaced pocket sized, hardcover notebooks, a tabbed address book, scraps of paper with todo lists and spiral bound yearly appointment books with a Palm Pilot. Later this migrated to a Palm/Treo cellphone. For a while, I loved this consolidated system. In time, errors started to occur almost every time I synced my phone with my Mac. Even with third party products and emails to developers the errors continued. The system that was supposed to save time took more time to repair than it saved. Over a few years I experimented with various replacements for the applications I had used on my Palm Pilot. The applications I found have numerous advantages but since they all have different user interfaces, they must be learned individually. This page is to review those individual applications.
Evernote is powerful, cloud based digital note-taking software. Notes can consist of text, photos, scanned/photographed documents and audio recordings. Notes can consist of different types of media. For example, a PDF, typed text and a photo can be inserted in a single document. Text in documents and photos, even handwritten text, is searchable. So, if you see a plaque or sign you want to take note of, you can photograph it and later find it by typing a word from the sign into the search box. Notes can be put into folders and tagged. Besides searching an entire document, searches can be limited to just searching notes with a certain tag or within a certain notebook. Once it is setup, notes are automatically synced across multiple devices, including PC's, Macs, iOS devices, Android Devices, etc. A client can be downloaded onto these devices or it can be accessed via Evernote's website. Also, numerous plugins are available from Evernote to make clipping notes easier.
Evernote has a few weaknesses. Evernote notebooks cannot be nested, although they can be arranged one level deep under a header that looks like a notebook. The header itself cannot contain any notes. Most modern filing systems use tags because a single note can only be in one folder, unless it is duplicated (which leads to other problems), whereas it can have multiple tags.* However, there are some good reasons to have some information organized in nested folders (or a branching tree) and with Evernote this is not really possible.
Another limitation of Evernote is its inability to display MS Office documents from within a note. There is a function called "Quick Look" but in my experience it doesn't work consistently and it opens the document in a separate window from the rest of the note. It can display PDF's embedded in a note though and with OSX, from the print dialog window in any program, a PDF can be printed. So, if it is important to have an Office document embedded directly in the context of a note, then make it into a PDF.
In my search for a good note-taking application, I tried Circus Ponies Notebook, Pear Notes and Apple's OSX Notes. Evernote was much better than any of these.
Overall, Evernote is a well designed, functional note-taking application. Best of all, the developers are constantly making it better.
Google Contacts is an extension of Gmail. It works well, has numerous ways to organize addresses including using labels, syncs with multiple devices and Apple's/iOS' address book and can be searched thoroughly. In OSX CoBooks can be used to quickly access and add to Google Contacts through the Menu Bar.
Google Tasks is a simple to do list. It works as an extension of gmail. It can be used on numerous devices. Notes can be nested. I use GeeTasks for the iOS. The weaknesses are that the only easy way to use it on a computer is through gmail and it will currently will not sync with other task list applications.
Google's calendar can be shared and synced to multiple devices. The OSX menubar application Fantastical makes it easy to input events and see a schedule.


Upperclassmen are nothing but understanding when it comes to the incoming freshmen at Bethel University. The first year at Bethel is unforgettable, but that doesn't mean it's an easy transition. As a freshman, you're told many things about how to survive the year by both family and friends. Parents are sure to gush advice on you, but take it from us – from those who have already experienced and continue to experience life here at Bethel.
All photos taken by Miranda Weippert.
#TFTB: What's the scariest movie you've ever seen?
Previous Story Previous post: TFTB: What will be different about this year?


Located on the idyllic northeastern coast of Bali and at the foot of Mt. Agung lies Bali's premier dive resort.
The superb Mimpi Resort Tulamben with 13 Patio Rooms, 12 Deluxe Cottages and 4 Ocean View Cottages.
Designed in traditional Balinese style, all rooms are air conditioned with private outdoor showers and minibars.
A beautiful open-air dining room is open all day, serving breakfast, lunch and dinner. Dedicated to the serious dive enthusiast, the Mimpi Resort Tulamben provides the perfect setting for a relaxing holiday whilst exploring some of Indonesia's most interesting underwater adventurelands.
The wreck of the USS Liberty lies just offshore and instruction by experienced professional PADI dive instructors is available, as is rental equipment.
- 2 nights stay in Patio Room at Mimpi Resort Tulamben.
- Set lunch and dinner on day 2.
- 1 guided dive on the Liberty ship wreck.
- 1 guided dive at Mimpi or Kubu drop-off.
- Transfer back to Denpasar airport.
- 3 nights stay in Patio Room at Mimpi Resort Tulamben.
- 2 guided dive on the Liberty ship wreck.
- 2 guided dive at Mimpi or Kubu drop-off.


text:
ReeceTopley
Role Bowler
Batting Right Hand Bat
Bowling Left Arm Medium
Debut Kent, 2020
ENGLAND INTERNATIONAL BOWLER REECE TOPLEY JOINED SURREY ON A TWO-YEAR WHITE-BALL CONTRACT IN OCTOBER 2019.
The 25-year-old left-arm seamer, who left Sussex at the end of the season, will also be available for selection in red-ball cricket on a match-by-match basis. After making his international debut in 2015, Topley went on to play 10 ODIs and 6 T20Is, including two at the 2016 World Cup at which England were runners-up. His international career was then curtailed by injury and back surgery after five stress fractures. He has since neared a return to the fold, playing four 50-over matches for England Lions in 2018 in a triangular series with West Indies A and India A.
An impressive Vitality Blast campaign at Hove in 2019 saw Topley discussed as a potential international cricketer once more. 2020 proved an exciting first year at The Kia Oval for Topley, leading Surrey's charge to the Vitality Blast final and making his first senior international appearance for more than four years.
Balls Bowled
(1 DAY CUP)
Bowling Average
Economy Rate
Five Wickets
Maidens Bowled
Wickets Taken
(T20)


As a wholesale and export clerk, you are well versed in a variety of qualified commercial activities. Interesting tasks can be expected, above all, in sales/distribution, hire center planning but also bookkeeping or warehousing.
Depending on the department, you are responsible e.g. for writing estimates, processing orders and collaborating with other departments. In the hire center planning department, you co-ordinate the hire vehicles and also take responsibility for invoicing. In the customer services department, you are involved in service order processing from the receipt of orders to customer invoicing. Preparing estimates, writing letters, invoices or completing consignment papers on the computer are among your day-to-day activities.


text:
May, Hoylman work to secure ballot returns
Bymartha
Aug 20, 2020 Madison, New York State Boards of Elections, Oneida), public health crisis, safeguard absentee mail-in ballots, Senator Brad Hoylman, Senator Rachel May (D-Onondaga, USPS Postal Service Post Office
Senator Rachel May (D-Onondaga, Madison, Oneida) and Senator Brad Hoylman are co-prime sponsors on two pieces of legislation to provide additional ways to return absentee ballots for the November election.
The first bill (S.8902) authorizes local boards of elections to establish absentee ballot drop-off locations. These contactless drop-offs would be secure drop boxes placed in the community for easy access for voters. The ballots would then be collected by the Board of Elections and date stamped to ensure they are counted in the election.
The second bill (S.8918) authorizes the local boards of elections to empower local clerks to collect absentee ballots. The clerks would be from various levels of government (city, town, county) and would be able to collect and date-stamp the ballots to ensure they are counted in the election. The bill would also create a chain of custody to ensure the ballots remain secure until collected by the local board of elections.
"We have made great strides during the 2019-20 legislative session to improve New York's voting laws," said May. "Now, the current public health crisis has changed how we have to run our elections. With the expected increase in absentee ballots and the continued dismantling of the USPS by the federal government, we need additional ways for New Yorkers to securely return their ballots.
"I thank Senator Hoylman for working with me to create two additional ways ballots can be returned to local Boards of Elections for the November's election."
Madison County Courier celebrates its Scholastic Shining Stars
Utica Police Department announces update to recruitment, test date
By martha
Jan 5, 2021 martha


text:
1:35 Allies 1⁄4 ton 4x4 Commando JEEP - ITALERI
Decrease quantity for 1:35 Allies 1⁄4 ton 4x4 Commando JEEP - ITALERI
Increase quantity for 1:35 Allies 1⁄4 ton 4x4 Commando JEEP - ITALERI
Much work was carried out in the USA and Britain to design special airborne vehicles to drop behind the enemy lines. Willys MB-Jeeps engaged in helping the Infantry by clearing snipers and other commando tasks. Generally manned by a sergeant and a trooper this vehicle was modified in many respects. It was armed with no fewer than five machine guns and had additional tanks for 135 l. of fuel.
The Willys MB and the Ford GPW, both formally called the U.S. Army Truck, 1⁄4-ton, 4×4, Command Reconnaissance, commonly known as Jeep and sometimes referred to as G503, were highly successful off-road capable, light, military utility vehicles, built in large numbers to a standardized design, from 1941 to 1945, for the Allied forces in World War II.
The jeep became the primary light wheeled transport vehicle of the United States Military and its Allies in World War II, as well as the postwar period. It was also the world's first mass-produced four-wheel drive car, manufactured in six-figure numbers. About 650,000 units were built, constituting a quarter of the total U.S. non-combat motor vehicles produced during the war and almost two-thirds of the 988,000 light vehicle class produced, together with the Dodge WC series. Large numbers of jeeps were provided to the U.S. allies and some 50,000 jeeps were provided to Russia during WWII - more than Nazi Germany's combined total production of their Volkswagen vehicles, the Kubelwagen and the Schwimmwagen.


text:
The Global Film Book Blog
An introduction to global film for teachers and students
Chapter 1: The development of global film
Chapter 2: The Hollywood Model
Chapter 3: Approaching films from different cultures
Rossellini and Neo-realism
Chapter 4: National Cinemas in Europe
Chapter 5: Decentring the Hollywood domination debate – Japan and South Korea
Chapter 6: Middle East Without Borders
Chapter 7: International art cinema and the festival circuit
Chapter 8: Cinema that needs to be different?
Chapter 9: Global television
Chapter 10: Diverse Indian Cinemas
Chapter 11: Chinese cinemas
Chapter 12: Looking to the future
Film and Media Studies Courses
Global Cinema Resources
How to navigate this site
The Case for Global Film
← Danny Boyle – life after Slumdog
Katyn (Poland 2007) →
Rock On!! (India 2008)
Rock On!! is an interesting Hindi film recommended by one of itpworld's Indian commenters. It scores highly on IMDB (8.2) and was clearly popular in India on urban multiplex screens as an example of a new kind of Bollywood film. However, in the UK it died at the box office, faring badly compared to most Hindi releases with a screen average below £1,000 and being trounced by a Tamil release, Dhaam Dhoom (which has a very low IMDB score).
Viewed from the UK, Rock On!! feels like a fairly conventional take on a rock nostalgia story. Magik were a band that ten years ago were on the verge of 'making it' but the compromises they would have been forced to take in order to get a recording deal caused a split and the band broke up. Now there is a chance to re-form for the four band members. Will they take it? Wikipedia suggests that the film draws on the UK film Stir Crazy (1998) and a Korean film about which I know nothing. Maybe, but the genre is so well known that such comparisons can be easily made and I don't think we should take too much notice. More interesting is the attempt to portray four characters from different backgrounds – two middle-class college boys, an Indian Christian and an Indian character from a European background. The film has music sequences but they are used much more like the performance pieces in a (fictional) music biopic than in a typical Bollywood film. The music itself is what I would call mainstream AOR with some Bollywood flavour. It's melodic and pleasant but very smooth. The lyrics are sung in Hindi and the relatively old-fashioned feel is emphasised by two songs played by other acts, one in English and both much closer to modern US/UK sounds.
The story itself is not particularly interesting apart from the sociological details but I watched it quite happily. What is important, I think, is that the film provides an opportunity for the young urban middle-class in India to identify with a genuinely Indian take on a global cultural form. The production context too is interesting. Excel films was founded by Farhan Akhtar and Ritesh Sidhwani in 1999. Akhtar is clearly a young man with a future. At 35 he has directed four features, produced others and in Rock On!! takes one of the lead roles as the wealthy young man who writes the lyrics, acts as lead singer and then turns to investment banking when the band splits up.
Another interesting feature of the film's release was the appearance of the four leads on the cover of the Indian edition of Rolling Stone magazine – another example of the Americanisation of middle-class Indian youth? Rolling Stone lost all its credibility as a serious music and culture magazine a long time ago. The quartet went on to play concerts in various Indian cities.
When I think about it, I can see the connection between this film and Rang De Basanti in terms of a kind of youthful romanticism. I think it could have had a bit more edge though. I'm a bit fed up of the American college kid thing now. Couldn't we have some Hindi movies about working class kids who become great cricketers? (I was heartened to see that the Bollywood box-office, coming out of the strike between multiplexes and producers, was unable to recover during the weeks of the IPL and then the 20-20 World Cup).
This entry was posted in Indian Cinema. Bookmark the permalink.
4 responses to "Rock On!! (India 2008)"
Just Another Film Buff | June 24, 2009 at 03:10 | Reply
"Couldn't we have some Hindi movies about working class kids who become great cricketers?"
Well said. I haven't seen Rock On, but it kind of looks dangerously close to films like Almost Famous and its kind. The problem with the new Multiplex culture seems to me that the filmmakers are producing films only for the extremely and irreversibly westernized metropolitan population. The villages and towns (towns have started aping cities mindlessly) are taken care by Z grade romantic movies and the Bhojpuri industry.
Worse, for the big budget films, the target is simply the west – the Non-resident Indians mostly. Trying to mimic the glam part of Hollywood, the Bolly films are losing their identity completely.
Sometimes I feel that the cheesy action films of the 80s are far better than the self-congratulatory duds of today.
I am glad, in a way, that the recent surge of village-based scripts in Tamil cinema is truly making it unique (albeit because of the "formula") and films are being made, first, for the home audience. I, personally, would love our filmmakers to tackle the multiculturalism issue in cities (a la the US indies of 2008.
OMAR AHMED | June 24, 2009 at 18:04 | Reply
Farhan Akhtar also hosts his own tv show on the NDTV channel in which he chats with Bollywood film stars and celebrities. He might be the Indian equivalent of Takeshi Kitano in that he has a developed an endless array of personas.
venicelion | June 24, 2009 at 18:59 | Reply
He certainly seems a talented young man. Are any of his other films worth seeing?
Just Another Film Buff | June 25, 2009 at 02:53 |
Dil Chahta hai is really good and even Lakshya is worth it…
The Fencer (Miekkailija, Finland-Estonia-Germany 2014)
Everybody Knows (Todos lo saben Spain-France-Italy 2018)
In the Fade (Aus dem Nichts, Germany-France 2017)
Casa de los babys (US-Mexico 2003)
Ciao Ciao (France-China 2017)
Rima Suresh on How Old Are You? (India 2…
KISHAN RAJ B on Yeh Jaawani Hai Deewani (India…
dmrecorner on OK Kanmani (India 2015, T…
Mahesh Jaiswal on BIFF 2013 #12: Mughal-e-Azam (…
sharmila on Nayak (India 1966)
Recent Posts on The Case for Global Film
Small Axe – Lovers Rock (UK 2020) January 15, 2021
This magical 68 minutes of delirious cinema is the second of Steve McQueen's five film series Small Axe. Each film tells a story about 'West Indian' characters and communities in London during the period 1968-1982. Lovers Rock has the simplest narrative of the series and is written by McQueen with the novelist Courttia Newland. A […]
Roy Stafford
Satyajit Ray, May 2nd 1921 to April 23rd 1992 January 14, 2021
This year sees the centenary of one of the really great film-makers in World Cinema. The question is not whether to celebrate this but whether we will be able to do with the films he wrote and directed in their original format, 35mm prints. Will the pandemic allow audiences to visit cinemas to enjoy these […]
Small Axe – Mangrove (UK 2020) January 11, 2021
'Mangrove' refers to the restaurant opened by the Trinidadian Frank Crichlow in North Kensington in 1968. Crichlow had previously run El Rio, a café around the corner. The café had attracted attention by the police because of allegations of drugs being used there. Crichlow was determined that The Mangrove would become a respectable restaurant serving West In […]
Small Axe – An Introduction January 9, 2021
Small Axe represents a major development in UK film and TV, or 'filmed entertainment' as it might usefully be termed, both as a production and as a major contribution to UK film culture. The five separate film narratives created by a team led by Steve McQueen comprise over 400 minutes of stories about London's West […]
Heading South (Vers le sud, France-Canada 2005) January 7, 2021
This is the third cinema fiction feature by the French auteur Laurent Cantet. I recently wrote about his film L'atelier (The Workshop, France 2017) and this blog also carries entries on Ressources humaines (France 1999) and Entre les murs (The Class, France 2008). Heading South is both a slightly different kind of production and one […]
A Level Film and Media (13)
African Cinema (32)
African-American Cinema (19)
American Independents (43)
Arab Cinema (29)
Argentinian Cinema (7)
Australian Cinema (13)
Avant-garde cinema (1)
Belgian Cinema (1)
box office (13)
Brazilian Cinema (1)
British Cinema (112)
Canadian Cinema (20)
Chinese Cinema (61)
Danish Cinema (25)
Day Schools (6)
Diaspora film (21)
Digital film (7)
Directors (49)
Early film (1)
East Asian Cinema (8)
East European Cinema (21)
European Cinema (13)
Exhibitors (1)
Festivals and Conferences (157)
Film archives (1)
Film audiences (5)
Film awards lists (7)
Film culture (6)
Film history (5)
Film industry (14)
Film Reviews (91)
Film theory (2)
Films by women (95)
Films for children (11)
Finnish Cinema (4)
French Cinema (93)
German Cinema (34)
Global television (22)
Icelandic Cinema (4)
Indian Cinema (88)
Bengali Cinema (10)
Hindi Cinema – Bollywood (16)
Malayalam Cinema (1)
Tamil Cinema (10)
Indian independent (10)
Iranian Cinema (14)
Irish Cinema (4)
Italian cinema (18)
Japanese Cinema (70)
Korean Cinema (12)
Latin American Cinema (27)
Literary adaptations (4)
Melodrama (144)
Mexican Cinema (12)
Nordic Cinema (44)
Norwegian Cinema (10)
One Hour Intros (1)
Palestinian Cinema (7)
Polish Cinema (13)
Politics on film (18)
Russian cinema (9)
Silent Era (2)
Soviet Cinema (2)
Spanish Cinema (28)
Sport on Film (6)
Swedish Cinema (20)
Taiwan Film (3)
Thai Cinema (1)
Turkish Cinema (10)
Womens Film (25)
African Cinema American Independents Arab Cinema British Cinema Canadian Cinema Chinese Cinema Comedies Danish Cinema Diaspora film Directors Documentary East European Cinema Festivals and Conferences Film Reviews Films by women French Cinema German Cinema Global television Hollywood Horror Indian Cinema Japanese Cinema Latin American Cinema Melodrama Nordic Cinema People Romance Spanish Cinema Swedish Cinema Womens Film
!Viva¡ anime BIFF 2012 BIFF 2013 biopic Bradford International Film Festival crime fiction crime film crime thriller Films From the South Indian Parallel Cinema Kurosawa Akira LFF 2012 Melodrama migration neo-realism Nordic Noir Nouvelle vague political cinema political thriller Realism satire Satyajit Ray science fiction social realism thriller war film war movie youth picture Zhang Yimou
Archives Select Month November 2019 (1) March 2019 (1) January 2019 (2) November 2018 (2) October 2018 (1) September 2018 (1) August 2018 (1) July 2018 (1) May 2018 (1) April 2018 (1) March 2018 (1) February 2018 (1) January 2018 (1) October 2017 (1) August 2017 (1) July 2017 (1) May 2017 (1) February 2017 (1) January 2017 (1) November 2016 (2) September 2016 (1) August 2016 (1) July 2016 (1) June 2016 (2) April 2016 (4) March 2016 (2) February 2016 (3) January 2016 (5) December 2015 (2) November 2015 (3) October 2015 (3) September 2015 (1) August 2015 (1) July 2015 (1) June 2015 (3) May 2015 (3) April 2015 (1) March 2015 (3) February 2015 (1) January 2015 (7) December 2014 (4) November 2014 (2) October 2014 (1) September 2014 (5) August 2014 (3) July 2014 (2) June 2014 (3) May 2014 (4) April 2014 (8) March 2014 (2) February 2014 (4) January 2014 (5) December 2013 (5) November 2013 (5) October 2013 (8) September 2013 (8) August 2013 (12) July 2013 (12) June 2013 (7) May 2013 (8) April 2013 (27) March 2013 (13) February 2013 (7) January 2013 (10) December 2012 (6) November 2012 (8) October 2012 (14) September 2012 (8) August 2012 (9) July 2012 (12) June 2012 (6) May 2012 (8) April 2012 (23) March 2012 (6) February 2012 (11) January 2012 (9) December 2011 (6) November 2011 (5) October 2011 (22) September 2011 (8) August 2011 (9) July 2011 (9) June 2011 (7) May 2011 (9) April 2011 (11) March 2011 (22) February 2011 (10) January 2011 (8) December 2010 (12) November 2010 (6) October 2010 (14) September 2010 (12) August 2010 (13) July 2010 (8) June 2010 (10) May 2010 (7) April 2010 (8) March 2010 (21) February 2010 (5) January 2010 (8) December 2009 (11) November 2009 (8) October 2009 (3) September 2009 (11) August 2009 (10) July 2009 (12) June 2009 (9) May 2009 (8) April 2009 (14) March 2009 (12) February 2009 (12) January 2009 (11) December 2008 (7) November 2008 (8) October 2008 (16) September 2008 (13) August 2008 (14) July 2008 (14) June 2008 (10) May 2008 (9) April 2008 (3) March 2008 (5) February 2008 (2) January 2008 (5) December 2007 (5) November 2007 (1) October 2007 (4) September 2007 (6) August 2007 (7) July 2007 (3) June 2007 (5) May 2007 (6) April 2007 (3) March 2007 (1) February 2007 (2) January 2007 (4) December 2006 (1) November 2006 (2) October 2006 (1) September 2006 (6) August 2006 (2) July 2006 (2) June 2006 (1) May 2006 (2) April 2006 (3) October 2005 (1) April 2005 (2) November 2004 (1) October 2004 (3) September 2004 (1) July 2004 (1) February 2003 (1) June 2000 (1)
Follow itpworld on Twitter
Ozflicks
Murrayrona's Weblog
dbmoviesblog
Windows on Worlds
Transformation and Tradition in Sixties British Cinema
MULTIGLOM
romeoromeotango
crossingfrontieres
Movie Mahal
Indie Nari
Ilene On Words
E L L I P S I S - The Accents of Cinema
Early & Silent Film
Nick Lacey on films
An Australian Film Site
Passionate about Cinema
An Arts and Humanities Research Council-funded project based at the universities of York and East Anglia
The Anne Billson blog
Contact the White Cat at romeoromeotangocclive(symbol thing)gmail.com
La solitude n'est pas l'isolement. On est toujours deux ou trois en une. Il y a les autres en soi
An online film journal for Indian Cinema
Independent Filmmaker
Films with something to say
Sharing what's inside that little head of mine…


text:
package net.oneandone.stool.kubernetes;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.fabric8.kubernetes.api.model.Container;
import io.fabric8.kubernetes.api.model.ContainerBuilder;
import io.fabric8.kubernetes.api.model.ContainerState;
import io.fabric8.kubernetes.api.model.ContainerStatus;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.api.model.ObjectReference;
import io.fabric8.kubernetes.api.model.ObjectReferenceBuilder;
import io.fabric8.kubernetes.api.model.Pod;
import io.fabric8.kubernetes.api.model.PodBuilder;
import io.fabric8.kubernetes.api.model.PodList;
import io.fabric8.kubernetes.api.model.Quantity;
import io.fabric8.kubernetes.api.model.Secret;
import io.fabric8.kubernetes.api.model.SecretList;
import io.fabric8.kubernetes.api.model.ServiceAccount;
import io.fabric8.kubernetes.api.model.ServiceAccountBuilder;
import io.fabric8.kubernetes.api.model.apps.Deployment;
import io.fabric8.kubernetes.api.model.apps.DeploymentBuilder;
import io.fabric8.kubernetes.api.model.metrics.v1beta1.ContainerMetrics;
import io.fabric8.kubernetes.api.model.metrics.v1beta1.PodMetrics;
import io.fabric8.kubernetes.client.Config;
import io.fabric8.kubernetes.client.ConfigBuilder;
import io.fabric8.kubernetes.client.KubernetesClientException;
import io.fabric8.kubernetes.client.LocalPortForward;
import io.fabric8.kubernetes.client.dsl.ExecListener;
import io.fabric8.kubernetes.client.dsl.ExecWatch;
import io.fabric8.openshift.api.model.PolicyRuleBuilder;
import io.fabric8.openshift.api.model.RoleBindingBuilder;
import io.fabric8.openshift.api.model.RoleBuilder;
import io.fabric8.openshift.client.DefaultOpenShiftClient;
import io.fabric8.openshift.client.OpenShiftClient;
import net.oneandone.stool.cli.PodConfig;
import net.oneandone.sushi.fs.file.FileNode;
import net.oneandone.sushi.util.Strings;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Base64;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.zip.GZIPInputStream;

public class Engine implements AutoCloseable {
    public static Engine createCluster(ObjectMapper json) {
        return createClusterOrLocal(json, null);
    }

    public static Engine createLocal(ObjectMapper json, String context) {
        return createClusterOrLocal(json, context);
    }

    public static Engine createClusterOrLocal(ObjectMapper json, String contextOpt) {
        if (contextOpt == null) {
            return new Engine(json, new DefaultOpenShiftClient());
        } else {
            Config config;

            config = Config.autoConfigure(contextOpt);
            return new Engine(json, new DefaultOpenShiftClient(config));
        }
    }

    public static Engine create(ObjectMapper json, PodConfig config) {
        return create(json, config.server, config.namespace, config.token);
    }

    public static Engine create(ObjectMapper json, String masterUrl, String namespace, String token) {
        Config config;
        String old;

        // TODO: not thread safe ...
        old = System.getProperty(Config.KUBERNETES_DISABLE_AUTO_CONFIG_SYSTEM_PROPERTY);
        System.setProperty(Config.KUBERNETES_DISABLE_AUTO_CONFIG_SYSTEM_PROPERTY, "true");
        config = new ConfigBuilder().withMasterUrl(masterUrl).withTrustCerts(true).withNamespace(namespace).withOauthToken(token).build();
        if (old == null) {
            System.getProperties().remove(Config.KUBERNETES_DISABLE_AUTO_CONFIG_SYSTEM_PROPERTY);
        } else {
            System.setProperty(Config.KUBERNETES_DISABLE_AUTO_CONFIG_SYSTEM_PROPERTY, old);
        }

        return new Engine(json, new DefaultOpenShiftClient(config));
    }

    private final ObjectMapper json;
    private final OpenShiftClient client;
    private final String namespace;

    private Engine(ObjectMapper json, OpenShiftClient client) {
        this.json = json;
        this.client = client;
        this.namespace = client.getNamespace();
    }

    public boolean isOpenShift() throws IOException {
        try {
            client.builds().list();
            return true;
        } catch (KubernetesClientException e) {
            if (e.getCode() == 404) {
                return false;
            } else {
                throw new IOException("cannot detect openshift", e);
            }
        }
    }

    public String getNamespace() {
        return namespace;
    }

    public void close() {
        client.close();
    }

    //-- deployments

    public Map<String, DeploymentInfo> deploymentList() throws IOException {
        Map<String, DeploymentInfo> result;
        String name;

        try {
            result = new LinkedHashMap<>();
            for (Deployment deployment : client.apps().deployments().inNamespace(namespace).list().getItems()) {
                name = deployment.getMetadata().getName();
                result.put(name, DeploymentInfo.create(deployment));
            }
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
        return result;
    }

    public DeploymentInfo deploymentProbe(String name) throws IOException {
        Deployment d;

        try {
            d = client.apps().deployments().inNamespace(namespace).withName(name).get();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
        return d == null ? null : DeploymentInfo.create(d);
    }

    /** @return true for 0 spec replicas */
    public DeploymentInfo deploymentAwaitAvailable(String name) throws IOException {
        DeploymentInfo info;
        int count;

        count = 0;
        while (true) {
            info = deploymentProbe(name);
            if (info.specReplicas == 0 || info.statusAvailable > 0) {
                return info;
            }
            count++;
            if (count > 500) {
                throw new IOException(name + ": waiting for available replicas timed out");
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new IOException(name + "waiting for replicas interrupted", e);
            }
        }
    }

    public void deploymentAwaitGone(String name) throws IOException {
        DeploymentInfo info;
        int count;

        count = 0;
        while (true) {
            info = deploymentProbe(name);
            if (info == null) {
                return;
            }
            count++;
            if (count > 500) {
                throw new IOException(name + ": waiting for deployment to vanish timed out");
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new IOException(name + "waiting for deployment to vanish interrupted", e);
            }
        }
    }

    public void deploymentCreate(String name, Map<String, String> selector, Map<String, String> deploymentLabels,
                                 String image, String[] command, String hostname, Map<String, String> podLabels) throws IOException {
        try {
            client.apps().deployments().inNamespace(namespace).create(deployment(name, selector, deploymentLabels, image, command, hostname, podLabels));
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
    }

    public boolean deploymentDeleteOpt(String name) throws IOException {
        try {
            deploymentDelete(name);
            return true;
        } catch (FileNotFoundException e) {
            return false;
        }
    }

    public void deploymentDelete(String name) throws IOException {
        try {
            client.apps().deployments().inNamespace(namespace).withName(name).delete();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
    }

    @SuppressWarnings("checkstyle:ParameterNumber")
    private Deployment deployment(String name, Map<String, String> selector, Map<String, String> deploymentLabels,
                                    String image, String[] command, String hostname, Map<String, String> podLabels) {
        List<Container> cl;

        cl = new ArrayList<>();
        cl.add(container(image, command));
        return new DeploymentBuilder()
                .withNewMetadata()
                  .withName(name)
                  .withLabels(deploymentLabels)
                .endMetadata()
                .withNewSpec()
                  .withReplicas(1)
                  .withNewSelector().withMatchLabels(selector).endSelector()
                  .withNewTemplate()
                    .withNewMetadata().withLabels(podLabels).endMetadata()
                    .withNewSpec()
                      .withHostname(hostname)
                      .withContainers(cl)
                    .endSpec()
                  .endTemplate()
                .endSpec().build();
    }

    //--

    public static String labelSelector(Map<String, String> labelSelector) {
        StringBuilder builder;

        builder = new StringBuilder();
        for (Map.Entry<String, String> entry : labelSelector.entrySet()) {
            if (builder.length() > 0) {
                builder.append(',');
            }
            builder.append(entry.getKey());
            builder.append('=');
            builder.append(entry.getValue());
        }
        return builder.toString();
    }

    //-- pods

    public Map<String, PodInfo> podList() throws IOException {
        return podList(Strings.toMap());
    }

    public Map<String, PodInfo> podList(Map<String, String> labelSelector) throws IOException {
        PodList list;
        Map<String, PodInfo> result;
        String name;

        try {
            list = client.pods().inNamespace(namespace).withLabels(labelSelector).list();
            result = new LinkedHashMap<>();
            for (Pod pod : list.getItems()) {
                name = pod.getMetadata().getName();
                result.put(name, PodInfo.create(pod));
            }
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
        return result;
    }

    /** @return null if not found */
    public PodInfo podProbe(String name) throws IOException {
        Pod pod;

        try {
            pod = client.pods().inNamespace(namespace).withName(name).get();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
        return pod == null ? null : PodInfo.create(pod);
    }

    public boolean podCreate(String name, String image, int termincationGrace, String... command) throws IOException {
        return podCreate(pod(name, image, termincationGrace, command));
    }

    public boolean podCreate(Pod pod) throws IOException {
        String phase;

        try {
            client.pods().inNamespace(namespace).create(pod);
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }

        phase = podAwait(pod.getMetadata().getName(), "Running", "Failed", "Succeeded");
        if (phase.equals("Failed")) {
            throw new IOException("create-pod failed: " + phase);
        }
        return "Running".equals(phase);
    }

    public boolean podDeleteAwaitOpt(String name) throws IOException {
        try {
            podDeleteAwait(name);
            return true;
        } catch (FileNotFoundException e) {
            return false;
        }
    }
    public void podDeleteAwait(String name) throws IOException {
        podDelete(name);
        podAwaitDeleted(name);
    }

    public void podDelete(String name) throws IOException {
        try {
            client.pods().inNamespace(namespace).withName(name).delete();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
    }

    public boolean podContainerRunning(String podName, String containerName) throws IOException {
        ContainerStatus status;
        ContainerState state;

        status = getPodContainerStatus(podName, containerName);
        state = status.getState();
        if (state.getTerminated() != null) {
            return false;
        }
        if (state.getRunning() != null) {
            return true;
        }
        throw new IOException("unknown state: " + state);
    }

    private ContainerStatus getPodContainerStatus(String podName, String containerName) throws IOException {
        Pod pod;
        List<ContainerStatus> lst;

        try {
            pod = client.pods().inNamespace(namespace).withName(podName).get();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
        if (pod == null) {
            throw new FileNotFoundException("pod/" + podName);
        }
        lst = pod.getStatus().getContainerStatuses();
        for (ContainerStatus status : lst) {
            if (status.getName().equals(containerName)) {
                return status;
            }
        }
        throw new IllegalStateException(lst.toString());
    }

    public void podAwaitDeleted(String name) throws IOException {
        podAwait(name, (String) null);
    }

    public String podAwait(String name, String... expectedPhases) throws IOException {
        PodInfo info;
        int count;
        String phase;

        count = 0;
        while (true) {
            info = podProbe(name);
            phase = info == null ? null : info.phase;
            if (expectedPhases == null) {
                if (same(null, phase)) {
                    return null;
                }
            } else {
                for (String e : expectedPhases) {
                    if (same(e, phase)) {
                        return phase;
                    }
                }
            }
            count++;
            if (count > 500) {
                throw new IOException("waiting for phase '" + toString(expectedPhases)
                        + "' timed out, phase is now " + phase);
            }
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                throw new IOException("waiting for phase '" + toString(expectedPhases) + "' interrupted", e);
            }
        }
    }

    public String podLogs(String pod) throws IOException {
        try {
            return client.pods().inNamespace(namespace).withName(pod).getLog();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
    }

    public LocalPortForward podPortForward(String pod, int localPort, int podPort) {
        return client.pods().inNamespace(namespace).withName(pod).portForward(podPort, localPort);
    }

    public String podExec(String pod, String container, String... command) throws IOException {
        StoolExecListener listener;
        ByteArrayOutputStream output;
        ByteArrayOutputStream error;
        String str;

        listener = new StoolExecListener();
        output = new ByteArrayOutputStream();
        error = new ByteArrayOutputStream();
        try (ExecWatch watch = client.pods().inNamespace(namespace).withName(pod).inContainer(container)
                .writingOutput(output)
                .writingError(error)
                .usingListener(listener)
                .exec(command)) {
            while (listener.closeReason == null) { // TODO: busy wait
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    break;
                }
            }
            str = error.toString(StandardCharsets.UTF_8);
            if (!str.isEmpty()) {
                throw new IOException("exec failed: " + str);
            }
        }
        str = output.toString(StandardCharsets.UTF_8);
        if (str.startsWith("OCI runtime exec failed")) { // TODO: why is this written to standard-out?
            throw new IOException(str);
        }
        return str;
    }

    public ExecWatch podExecInteractive(String pod, String container, String[] command, ExecListener listener) {
        return client.pods().inNamespace(namespace).withName(pod).inContainer(container)
                .readingInput(System.in)
                .writingOutput(System.out)
                .writingError(System.err)
                .withTTY()
                .usingListener(listener)
                .exec(command);
    }

    public void podDownload(String podName, String container, String src, FileNode dest) throws IOException {
        FileNode tmp;

        dest.checkNotExists();
        if (!src.startsWith("/") || src.endsWith("/")) {
            throw new IllegalArgumentException(src);
        }
        tmp = dest.getParent().createTempDirectory();
        try {
            if (!client.pods().inNamespace(namespace).withName(podName).inContainer(container).dir(src).copy(tmp.toPath())) {
                throw new IllegalStateException("pod: " + podName + " copy " + src + " " + dest);
            }
            tmp.join(src.substring(1)).checkDirectory().move(dest);
        } finally {
            tmp.deleteTree();
        }
    }

    public void podUpload(String podName, String container, FileNode src, String dest) throws IOException {
        src.checkDirectory();
        if (!dest.startsWith("/") || dest.endsWith("/")) {
            throw new IllegalArgumentException(dest);
        }
        if (!client.pods().inNamespace(namespace).withName(podName).inContainer(container).dir(dest).upload(src.toPath())) {
            throw new IllegalStateException("pod: " + podName + " copy " + src + " " + dest);
        }
    }

    private static String toString(String[] args) {
        StringBuilder result;

        result = new StringBuilder();
        for (String arg : args) {
            if (result.length() > 0) {
                result.append(", ");
            }
            result.append(arg);
        }
        return result.toString();
    }

    public static final String CONTAINER_NAME = "noname";

    private static Container container(String image, String... command) {
        Map<String, Quantity> limits;
        ContainerBuilder container;

        limits = new HashMap<>();
        container = new ContainerBuilder();
        container.withNewResources().withLimits(limits).endResources()
                .withName(CONTAINER_NAME)
                .withImage(image)
                .withCommand(command);
        return container.build();
    }

    @SuppressWarnings("checkstyle:ParameterNumber")
    private Pod pod(String name, String image, int terminationGrace, String[] command) {
        return new PodBuilder()
                .withNewMetadata().withName(name).endMetadata()
                .withNewSpec()
                .withRestartPolicy("Never")
                .withTerminationGracePeriodSeconds((long) terminationGrace)
                .addAllToVolumes(new ArrayList<>())
                .addToContainers(container(image, command))
                .endSpec().build();
    }

    //-- helm

    public ObjectNode helmRead(String name) throws IOException {
        return helmSecretRead(helmSecretName(name));
    }

    public String helmSecretName(String name) throws IOException {
        List<Secret> lst;

        try {
            lst = client.secrets().inNamespace(namespace)
                    .withLabels(Strings.toMap("owner", "helm", "name", name, "status", "deployed")).list().getItems();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
        switch (lst.size()) {
            case 0:
                throw new java.io.FileNotFoundException("helm release not found: " + name);
            case 1:
                return lst.get(0).getMetadata().getName();
            default:
                throw new IllegalStateException(lst.toString());
        }
    }

    public List<String> helmList() throws IOException {
        SecretList lst;
        List<String> result;

        result = new ArrayList<>();
        try {
            lst = client.secrets().inNamespace(namespace).withLabels(Strings.toMap("owner", "helm", "status", "deployed")).list();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
        for (Secret secret : lst.getItems()) {
            result.add(secret.getMetadata().getLabels().get("name"));
        }
        return result;
    }

    public ObjectNode helmSecretRead(String secretName) throws IOException {
        Secret s;
        byte[] release;

        s = secretRead(secretName);
        release = Base64.getDecoder().decode(s.getData().get("release"));
        release = Base64.getDecoder().decode(release);
        try (Reader src = new InputStreamReader(new GZIPInputStream(new ByteArrayInputStream(release)))) {
            return (ObjectNode) json.readTree(src);
        }
    }

    private Secret secretRead(String name) throws IOException {
        Secret secret;

        try {
            secret = client.secrets().inNamespace(namespace).withName(name).get();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
        if (secret == null) {
            throw new FileNotFoundException("secret/" + name);
        }
        return secret;
    }

    public void secretAddAnnotations(String name, Map<String, String> map) throws IOException {
        try {
            client.secrets().inNamespace(namespace).withName(name).edit(
                    ObjectMetaBuilder.class,
                    omb -> omb.addToAnnotations(map)
            );
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
    }

    public Map<String, String> secretGetAnnotations(String name) throws IOException {
        try {
            return client.secrets().inNamespace(namespace).withName(name).get().getMetadata().getAnnotations();
        } catch (KubernetesClientException e) {
            throw wrap(e);
        }
    }

    //--

    private static boolean same(String left, String right) {
        if (left == null) {
            return right == null;
        } else {
            return left.equals(right);
        }
    }

    private static IOException wrap(KubernetesClientException e) {
        IOException result;

        if (e.getCode() == 404) {
            result = new FileNotFoundException(e.getMessage());
            result.initCause(e);
            return result;
        }
        return new IOException(e.getMessage(), e);
    }

    //--

    public Stats statsOpt(String pod, String container) {
        PodMetrics p;
        Map<String, Quantity> usage;

        try {
            p = client.top().pods().metrics(namespace, pod);
        } catch (KubernetesClientException e) {
            if (e.getCode() == 404) {
                // TODO: could be stats not found or pod not found ...
                return null;
            } else {
                throw e;
            }
        }
        usage = container(p, container).getUsage();
        return new Stats(usage.get("cpu").toString(), usage.get("memory").toString());
    }

    private ContainerMetrics container(PodMetrics p, String container) {
        for (ContainerMetrics cm : p.getContainers()) {
            if (cm.getName().equals(container)) {
                return cm;
            }
        }
        throw new IllegalStateException(p.getMetadata().getName() + " container not found: " + container);
    }

    //--

    public void createServiceAccount(String name) {
        ServiceAccountBuilder sa;

        sa = new ServiceAccountBuilder().withNewMetadata().withNamespace(namespace).withName(name).endMetadata();
        client.serviceAccounts().create(sa.build());
    }

    public List<String> getServiceAccountSecrets(String name) {
        ServiceAccount sa;
        List<String> result;

        result = new ArrayList<>();
        sa = client.serviceAccounts().inNamespace(namespace).withName(name).get();
        for (ObjectReference ref : sa.getSecrets()) {
            result.add(ref.getName());
        }
        return result;
    }

    /** @return base64 encoded token */
    public String getServiceAccountToken(String name) {
        String tokenSecret;
        Secret token;

        tokenSecret = tokenSecret(getServiceAccountSecrets(name));
        token = client.secrets().inNamespace(namespace).withName(tokenSecret).get();
        return token.getData().get("token");
    }

    private String tokenSecret(List<String> secrets) {
        String result;

        result = null;
        for (String secret : secrets) {
            if (secret.contains("-token-")) {
                if (result != null) {
                    throw new IllegalStateException("token secret ambiguous: " + result + " vs " + secret);
                }
                result = secret;
            }
        }
        if (result == null) {
            throw new IllegalStateException("no token secret: " + secrets);
        }
        return result;
    }

    public void deleteServiceAccount(String name) throws IOException {
        if (!client.serviceAccounts().inNamespace(namespace).withName(name).delete()) {
            throw new IOException("delete failed: " + name);
        }
    }

    public void createRole(String name, String... pods) {
        PolicyRuleBuilder ruleBuilder;
        RoleBuilder rb;

        ruleBuilder = new PolicyRuleBuilder();
        ruleBuilder.withApiGroups("")
                .withAttributeRestrictions(null)
                .withResources("pods", "pods/portforward", "pods/exec")
                .withResourceNames(pods).withVerbs("get", "create");
        rb = new RoleBuilder();
        rb.withNewMetadata().withName(name).endMetadata().withRules(ruleBuilder.build());
        client.roles().create(rb.build());
    }

    public void deleteRole(String name) throws IOException {
        if (!client.roles().inNamespace(namespace).withName(name).delete()) {
            throw new IOException("delete failed: " + name);
        }
    }

    public void createBinding(String name, String serviceAccount, String role) {
        RoleBindingBuilder rb;
        ObjectReferenceBuilder s;

        s = new ObjectReferenceBuilder();
        s.withKind("ServiceAccount");
        s.withName(serviceAccount);
        rb = new RoleBindingBuilder();
        rb.withNewMetadata().withName(name).endMetadata()
                .withNewRoleRef().withName(role).withNamespace(namespace).endRoleRef()
                .withSubjects(s.build());
        client.roleBindings().create(rb.build());
    }

    public void deleteBinding(String name) throws IOException {
        if (!client.roleBindings().inNamespace(namespace).withName(name).delete()) {
            throw new IOException("delete failed: " + name);
        }
    }

    //--

    public void imageDownload(String image, String src, FileNode dest) throws IOException {
        String podName;

        podName = UUID.randomUUID().toString();
        if (!podCreate(podName, image, 0, "sleep", "3600")) {
            throw new IOException("failed to create pod for image " + image);
        }
        try {
            podDownload(podName, CONTAINER_NAME, src, dest);
        } finally {
            podDelete(podName);
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
Burkina Faso, South East Asia, Spain, capacity building, ecosystem-based adaptation, extreme events, rural communities, women and gender
(-) women and gender (24)
(-) ecosystem-based adaptation (15)
(-) capacity building (13)
(-) extreme events (2)
(-) Spain (2)
(-) Burkina Faso (1)
(-) South East Asia (1)
FAO has developed e- learning courses for professionals working in food and nutrition security, social and economic development and sustainable management of natural resources.
Amplifying women's voices through radio in Malawi
As farmers, foresters and providers, women have a unique understanding of the ecosystems they live alongside. A pioneering radio programme in Malawi is tapping into this immense body of knowledge by creating a platform for women to engage in landscape restoration.
Women and Land in the Muslim World. Pathways to increase access to land for the realization of development, peace and human rights
Pathways to increase access to land for the realization of development, peace and human rights
A Fair Share for Women: Toward More Equitable Land Compensation and Resettlement in Tanzania and Mozambique
Studies show that women disproportionately bear the adverse impacts of land commercialization in the global South. Investments in agribusiness, mining, or logging have resulted in loss of land and displacement of local communities, loss of livelihoods, and loss of communal assets—and the effects are…
Pocket Guide for Capacity Building for Climate Change
For over a decade, the European Capacity Building Initiative(ecbi) has adopted a two-pronged strategy to create a more level playing field for developing country in the UN Framework Convention on Climate Change (UNFCCC): training for new negotiators; and opportunities for senior negotiators from…
A closed-loop, drought-independent agriculture method that could be placed across a variety of harsh climates
The population is estimated to reach nine billion by 2050, putting huge strains on food outputs. Combine this with climate change and desertification – leading to smaller amounts of arable land for crop production – and existing irrigation practices that over-extract groundwater and you begin to see…
Women and Climate Change: Impact and Agency in Human Rights, Security, and Economic Development
According to a 2015 Georgetown University report on women and climate change, "the impacts of climate change – droughts, floods, extreme weather, increased incidence of disease, and growing food and water insecurity – disproportionately affect the world's 1.3 billion poor, the majority of whom are…
Success factors for brownfields redevelopment in Spain: A comparative analysis of three examples of brownfields with different status
The aim of this project is to state a mainly qualitative comparison between three cases of brownfields in Spain, looking for the identification of factors of success in the process of redevelopment of the affected area. The project embraces an Introduction and Pre-analysis of the brownfields…
New Massive Open Online Course (MOOC): Land Matters! Integrating Soil Degradation Concerns and Solutions into Policy Processes
The GIZ programme 'Soil protection and rehabilitation for food security', in collaboration with University of Leeds and ICRISAT has developed the new Massive Open Online Course (MOOC) 'Land Matters! Integrating soil degradation concerns and solutions into policy processes'. The registration for the…
Most land-based ecosystems worldwide risk 'major transformation' due to climate change
Without dramatic reductions in greenhouse-gas emissions, most of the planet's land-based ecosystems -- from its forests and grasslands to the deserts and tundra -- are at high risk of 'major transformation' due to climate change.
We need to do more to understand how climate change and conflict are linked. Here's why
The impacts of climate change are increasingly viewed as global security risks, which will have far-reaching implications for both human and renewable natural systems. Most climate–conflict research has focused on East Africa and sub-Saharan Africa. The SIPRI Insights paper, Climate change and…
Climate 2020: Degrees of devastation
UNA-UK has released a major report on implementing the new climate deal agreed by UN member states in Paris in 2015. Climate 2020 – Degrees of Devastation is the fourth in the series of major reports on the Paris Agreement on climate change. It equips policy-makers, practitioners and interested…


Throughout the school we use letters and sounds which is supported by the jolly phonics scheme.
These are the sounds that we cover in reception and all children are expected to know in Year 1 and 2.
Children work through each phase in their phonics to learn each new sound.
Click on the links for resources and games to help your child with their phonics.
Phase One of Letters and Sounds concentrates on developing children's speaking and listening skills. The emphasis during Phase 1 is to get children attuned to the sounds around them and ready to begin developing oral blending and segmenting skills.
By the time they reach Phase 3, children will already be able to blend and segment words containing the letters taught in Phase 2.
When children start Phase 4 they will know a sound for each of the letters/groups of letters. They will be able to blend letters/groups of letters to read CVC (consonant-vowel-consonant) words and segment in order to spell them.
Children entering Phase 5 will already be able to read and spell words such as trap, string and flask. They will also be able to read and spell some polysyllabic words.
In Phase 5, children will learn more sounds and letters/groups of letters. For example, they already know ai as in rain, but now they will be introduced to ay as in day and a-e as in make.
At the start of Phase 6, children will have already learnt the most frequently occurring sounds and letters/groups of letters in the English language. They will be able to read many familiar words automatically. When they come across unfamiliar words they should be able to decode them quickly and quietly using their sounding and blending skills. With unfamiliar words they will often be able to decode them by sounding them out.


Apostle H. J. Grant made brief remarks. Referred to the prediction of Pres. Richards made 3 months ago (see page 88) [see 11 January 1899] that the Lord would open up the way for his deliverance from debt. Said it was being fulfilled—Jany. 1, 1899, he was, he said, $82,000 [in debt]. With the changes that had taken place and the advance in his stocks and holdings his indebtedness would now practically amount to $57,000.00. Thought it would have been better had he remained out of politics: it would be better to wait until we are sent. It was true, he said, that he had entertained some feelings against Pres. Can-non, but could now say that he had overcome and was in a proper frame of mind to break bread with him, and could do so without compunctions of conscience.


text:
Sainz "a bit bored" during precautionary coronavirus quarantine period
Lewis Larkam
McLaren F1 driver Carlos Sainz admits he is "a bit bored" after undertaking a period of quarantine following his return from the cancelled Australian GP.
McLaren Formula 1 driver Carlos Sainz admits he is "a bit bored" after undertaking a precautionary period of quarantine following his return from the cancelled Australian Grand Prix.
Sainz has voluntarily put himself into an "individual strict quarantine" for 14 days after a member of the McLaren race crew tested positive for coronavirus in Melbourne, leading to the team withdrawing and the race ultimately being called off.
While McLaren confirmed earlier this week that the infected team member is no longer showing symptoms of COVID-19, it has taken the precautionary measure of placing a total of 14 members of staff into a spell of self-isolation.
"At the moment I feel perfectly fine, but as you are aware that doesn't necessarily mean that I am not infected or that I can't develop the symptoms going forward," Sainz said on Tuesday.
"For the sake of everybody, it is very important to be responsible and follow the guidelines of the experts."
On Twitter, the Spaniard added: "It's been a busy few days trying to organise my life since then. Obviously, I'm a bit bored. I mean, I guess everyone who's doing this quarantine is a bit bored.
"But at the same time I am trying to do some sport, I'm trying to keep myself busy and do the kind of things that I would never do because of so much travelling."
Following postponements to the opening four races in Australia, Bahrain, China and Vietnam, the start of the 2020 F1 season has been delayed until at least May.
Sainz said he wanted to send his support to the McLaren staff currently self-isolating in Melbourne and conceded he is already missing racing.
"I just wanted to send a message to all the mechanics, people that stayed there in Australia, sending them some good vibes, sending them a lot of positivity, sending them a big hug, because I'm sure we're all gonna leave this quarantine as soon as possible," he added.
"And as soon as we're done, we will get back to business. And as soon as this virus is over, we will go back racing. I cannot wait to be honest.
"I miss racing, I miss travelling around the world with my team. But in the end, you know, this is something that will pass, something that we need to get over as soon as possible and for that, better stay home, better stay in quarantine and don't do much."
Be responsible and stay positive these days!#StayAtHome https://t.co/YRlgN7j92B
I also wanted to send positive vibes to @McLarenF1 team & all the members that stayed in quarantine. pic.twitter.com/zDWcXDC6Lt
— Carlos Sainz (@Carlossainz55) March 17, 2020
What F1 drivers are getting up to amid coronavirus disruption
McLaren F1 driver Sainz tests negative for coronavirus
"If Leclerc replaces Hamilton at Mercedes, Norris will go to Ferrari"
Ex-Ferrari chief banned after involvement in Italian football scandal
F1 wives and girlfriends: Meet the drivers' partners ahead of 2023 season
Ferrari gain "at least one second" with F1 2023 car?
The six Red Bull F1 juniors that will race in F2 in 2023