Genesis Medical Associates, Inc. - Caffeine Q&A: Your Questions Answered!
Caffeine Q&A: Your Questions Answered!
If you started your day with a cup of joe, you're not alone! 64 percent of adults reported drinking at least one cup of coffee on an average day in a 2015 Gallup polls. Approximately 150 million Americans drink 400 million cups of coffee per day - that's more than 140 billion cups per year! And in addition to these brews, over 158 million Americans are drinking tea - many in combination with their favorite Starbucks beverage.
What is caffeine? Caffeine is a naturally occurring stimulant that can be found in more than 60 different plant sources, from coffee beans to tea leaves. Caffeine affects our central nervous system, and as any coffee drinker knows, it can help increase and improve alertness, concentration and focus.
What are the benefits of consuming drinks with caffeine? Sure, caffeine is a great pick-me-up - but many studies to date have documented some additional benefits to enjoying caffeinated beverages in moderation. According to Medicalnewstoday.com, 'The potential health benefits associated with drinking coffee include protecting against type 2 diabetes, Parkinson's disease, liver disease, liver cancer, and promoting a healthy heart.' Some studies suggest that a cup of joe can improve long term memory as well. Tea drinkers may also benefit from their brew - studies suggest that tea may reduce your heart attack and stroke risk, boost your immune system, and provide a dose of antioxidants.
Are there downsides to consuming caffeine? Too much of a good thing can quickly turn into a negative. For example, consuming too much of it may be bad news for overall heart health, although this is still being studied. But while this specific side effect is still being studied, caffeine is confirmed to contribute to an elevated heart rate and blood pressure levels. Additionally, caffeine isn't a diabetic's best friend, as it can raise blood sugar levels. Caffeine can also worsen insomnia, anxiety and heartburn in the right circumstances. And these effects don't even take into account the withdrawal symptoms that can plague caffeine addicts!
What exactly is the right amount of caffeine to enjoy and indulge in? Experts consider 400 milligrams of caffeine per day to be safe to consume. According to Livestrong.com, 'That equates to roughly 3 to 4 cups of drip coffee, 4 to 5 cups of black tea or two energy drinks, depending upon their caffeine content.' No more than this, and you should be able to enjoy the benefits of caffeine while avoiding the worst of its negative side effects.
What can I do to avoid the negative health effects of caffeine? As you've probably guessed, the first step in controlling the effects of caffeine is to ensure that you don't drink more than the recommended amount of it each day. You'll also want to check the other beverages you drink - such as pop products - to ensure you're not drinking too much extra caffeine from sources like these. Finally, you'll want to stop drinking caffeine at least six hours before you plan on going to bed. Otherwise, your favorite go-to for a boost of energy will keep you from getting a good night's sleep - which will not be good for your health in the long run.
Caffeine, like many of the things we consume each day, has its place in our daily routine and diet, as long as we consider the amount that we consume. We all should monitor ourselves to ensure our caffeine habit isn't contributing to sleep, stomach, or other health issues. If you find that you could use a little help analyzing and addressing the effect of caffeine on your health, contact your Genesis Medical doctor to schedule an appointment and review your concerns. Our offices and staff are more than happy to work with you individually to ensure that your caffeine habit is working for you, and not against you!


For ardent fans of Formula 1, the season can be over very quickly. Whether it's the sheer speed and ferocity of the cars, the fact the pitlane is the hotbed of political machinations or simply that pent up excitement that wills away the weekdays in between Grands Prix, the lure is different for all of us. For me it's all three – and then some.
The speed in which time passes hit home this weekend as I'm sure it did for almost every Formula 1 enthusiast around the world. In case it's escaped your notice, this weekend is the 17th anniversary of the deaths of both Roland Ratzenberger and Ayrton Senna, on consecutive days at the 1994 San Marino Grand Prix, racing on the Autodromo Enzo e Dino Ferrari at Imola. It's a sobering thought that someone born that weekend would now be old enough to be enjoying their first driving lessons now – reaching my own 17th birthday seemed to take forever, yet that darkest weekend in modern Formula 1 seems so recent.
Ratzenberger and Senna represented completely different ends of the Formula 1 spectrum. The former had finally made the big time, having slogged his way through various junior formulae to prove his worth. He'd made it to the pinnacle of motor sport and for now at least, that'd do very nicely. The latter was a legend in his own lifetime, a career behind the wheel that represented everything from the sublime and enchanting to the ridiculous and often wrong. Here was a triple World Champion embarking on a quest for further glory, racing for the man who gave him his first F1 test over a decade earlier.
Great videos. Gave me chills. Such a terrible loss.
It was indeed. That wholly weekend was horrifically surreal. Are they showing the Senna documentary/film in the US?
Is there a new one? Or are you talking about "Senna"- it came here in Feb.
Yes, that's the one I meant – doesn't open here for another month. Did you get to see it?
No. It was at a film festival held in Texas. A bit far for me to travel 🙂 And I made a mistake- it was in March. Can't wait to see it though.


Buy Local Numbers provides DID numbers for Thailand.
A local DID number of Thailand may be forwarded by our infrastructure to conventional PSTN (Public Switched Telephone Network) devices, mobile phones or Voice over IP (VoIP) phones anywhere in the world. The call forwarding destination is selected by the customer on a per-DID basis and may be changed at any time via our friendly user interface.
Buy Local Numbers strives to constantly expand our virtual number coverage in Thailand.
Thailand phone numbers currently offered are shown below. Please visit this page regularly to check for coverage updates.
We need to make a manual configuration to activate the SMS capability of a mobile number. After you purchase the number, we'll send you a confirmation message, when it is ready to receive SMS.
The mobile numbers some countries, for ex. Chile, Latvia, Netherlands and Romania are able to receive SMS, but they have the format of landline numbers.
A maximum of 2 channels may be supported by a single Thailand DID number.


A year or so after leaving art school and then having to leave my home in the forest I moved into a council estate in nearby Thetford.
As a young artist at the beginning of my career, and with the whole vast world to try to make sense of, I would collate drawings, photographs, drawings on photographs, texts, cuttings etc on A5 index cards. Whatever I was making, an element of it would have a life on an A5 card.
This was, of course, long before the digital revolution. Some work would grow beyond the confines of A5 and I also made individual A4 box files - all of which were, in themselves, 'the work'.


In this tutorial, we are making a Digital Thermometer using PIC microcontroller and LM35 Temperature Sensor. In this project, we will sense the temperature using LM35 and display it on 16×2 LCD. LM35 Temperature Sensor is accurate and cheaper and doesn't require any external calibration. The output voltage is proportional to Celsius temperature scale and changes by 10mV per °C.
33pf Capacitor – 2Nos, 100uf and 10uf cap.
LM35 temperature sensor has zero offset voltage, which means at 0°C the output will be 0V. The maximum voltage it can handle is 1.5V which means it can be able to sense a maximum temperature of 150°C (1.5V / 10mV).
As we already told that LM35 gives analog output, so first we need to read that analog values using PIC Microcontroller and then we will convert them into digital values using ADC (Analog to Digital Conversion). So we will learn ADC in PIC Microcontroller before going any further.
There are many types of ADC available and each one has its own speed and resolution. The most common types of ADCs are flash, successive approximation, and sigma-delta. The type of ADC used in PIC16F877A is called as the Successive approximation ADC or SAR in short. So let's learn a bit about SAR ADC before we start using it.
Successive Approximation ADC: The SAR ADC works with the help of a comparator and some logic conversations. This type of ADC uses a reference voltage (which is variable) and compares the input voltage with the reference voltage using a comparator and difference, which will be a digital output, is saved from the Most significant bit (MSB). The speed of the comparison depends on the Clock frequency (Fosc) on which the PIC is operating.
Now that we know some basics on ADC, lets open our datasheet and learn how to use the ADC on our PIC16F877A MCU. The PIC we are using has 10-bit 8-channel ADC. This means the output value of our ADC will be 0-1024 (2^10) and there are 8 pins (channels) on our MCU which can read analog voltage. The value 1024 is obtained by 2^10 since our ADC is 10 bit. The eight pins which can read the analog voltage are mentioned in the datasheet. Lets look at the picture below.
The analog channels AN0 to AN7 are highlighted for you. Only these pins will be able to read analog voltage. So before reading an input voltage we have to specify in our code which channel has to be used to read the input voltage. In this tutorial we will use channel 4 with a potentiometer to read the analog voltage at this channel.
The complete code for this Digital Thermometer using LM35 and PIC microcontroller is given at the end. The code is self-explained with comment lines and just involves the concept of interfacing a LCD with PIC Microcontroller and Using ADC module in PIC Microcontroller which we have already covered in our previous tutorials of learning PIC Microcontrollers.
Here we are just showing the calculations done for reading the analog output voltage from LM35 and then converting it into temperature values. So here we are converting the ADC value from LM35 into the voltage and then voltage value into temperature. Therefore, after getting the value we have seperated every character for displaying on LCD.
After uploading the code in the PIC micro-controller, power up the circuit using 12v adapter. The analog output of LM35 temperature sensor is fed to the analog input channel of the PIC controller. As the temperature increase the ADC value will also increase. That ADC value is further converted into voltage by multiplying it with 4.88281. Then the voltage value is converted to corresponding character for displaying it into 16*2 LCD.


text:
{% extends "user_layout.html" %}
{% block content %}
	<div>
		You will be redirected to the Fitbit login page shortly...
	</div>
	<script>
		// Some values in this script are automatically populated by the Jinja
		// template engine. Do not place the script in a separate file!

		var username;
		var fbTok;
		var clientId = '228N3P';//'22CSJJ';
		var homeUrl = 'http://localhost:5000'//'https://powertoken.grouplens.org';
		var callback = homeUrl + "/user_fb_login";
		var state = "{{username}}"; // will be populated by the template engine
		var authUri = 'https://www.fitbit.com/oauth2/authorize';
		var authTokenReq = 'https://api.fitbit.com/oauth2/token';
		var authUrl = `${authUri}?response_type=token&client_id=${clientId}
				&redirect_uri=${callback}&expires_in=31536000
				&scope=activity&state=${state}`;

		// CHECK for returned code (i.e. url#code). If no hash there, then
		// redirect to auth site.
		if (!window.location.hash) {
			window.location.replace(authUrl);
		} else {
			var fragmentQueryParameters = {};
			window.location.hash.slice(1).replace(
				new RegExp("([^?=&]+)(=([^&]*))?", "g"),
				function($0, $1, $2, $3) { fragmentQueryParameters[$1] = $3; }
			);
			fbTok = fragmentQueryParameters.access_token;
			username = fragmentQueryParameters.state;
		}

		// REDIRECT to homepage after sending token to server
		var processResponse = function(response) {
			if (!response.ok) {
				throw new Error(`Request failed: ${response}`);
			} else {
				window.location.href = `${homeUrl}/user_activities?username=${username}`;
			}
		}

		// SEND token to server
		if (fbTok) {
			fetch(callback, {
				method: 'POST',
				mode: 'no-cors',
				body: JSON.stringify({tok: fbTok, username: username})
			})
			.then(processResponse);
		}
	</script>
{% endblock %}

redpajama_set_name: RedPajamaGithub


The store, Yakov Mironovich (1882-1961).
Bibliograf. in a substring. note. and in the text.
I. Pontovich, E. E. .. II. All-Russian Constituent Assembly (1918) .1. All-Russian Constituent Assembly (1918) - Elections - Documents and materials. 2. Power (collection). 3. Electoral system in Russia: history and modernity (collection).


Young tough tenor Walter Blanding makes his Criss Cross Jazz debut with a splendid quintet presentation of standards, jazz pieces by Waller, Monk, and Wayne Shorter, and a generous helping of his original compositions.
Joining him are his colleages from Wynton Marsalis' Lincoln Center Jazz Orchestra , pianist Farid Barron, and Criss Cross recording artists bassist Rodney Whitaker and trumpeter Ryan Kisor. On drums the great Philadelphian drummer Rodney Green.


I've installed thumbnailviewer, and it works great. After the large image loads, however, I would like people to be able to mouseover the image to see the "before" photo.
Sure, try the below modified .js file, which changes the enlarged image when you mouse over it to original_over.extension, where "_over" is the new part, and back to the original filename onmouseout. This means if your original enlarged image is "mydog.jpg", you should also have uploaded "mydog_over.jpg" etc.
Thank you so much! I've changed it to onmousedown and onmouseup (and switched it to only close when you hit "Close"). It's working perfectly!


Jop was admitted to the Dutch bar in 2011. Jop specialises in corporate law, including corporate litigation and arbitration and corporate advisory. He advises national and international clients on a wide range of issues. These include general corporate matters, commercial contracts, directors liability, matters concerning annual accounts and various matters between shareholders.
Jop is also a lecturer at the Nyenrode Business University and a regular speaker at several other universities on corporate law matters. He regularly publishes on corporate law topics. He is furthermore an editorial member of the corporate law magazine Maandblad voor Ondernemingsrecht (a professional journal regarding corporate law) and a doctoral candidate at the University of Leiden. His PhD thesis is about the corporate group facility of article 2:403 DCC.


text:
Changarreando with Tina B. Medina: Instagram Takeover
Tina B. Medina, Xicanx Bandera, 2017
Tina B. Medina, Corazones rotos, 2017
May. 11, 2021	@ 12:00 pm	– Jun. 8, 2021	@ 7:00 pm
Support our May 2021 Changarreando Artist, Tina B. Medina, as we adapt the program to an exciting feature: "Changarreando". In the spirit of Changarrito, the pop-up mobile art gallery where artists can sell their work to the public, Changarreando with Tina B. Medina allows the artist to bring their work to you. Follow us on Instagram and Facebook for updates on original work available for purchase as well as behind the scenes of the artist's work, space, and creative process.
Cover image artwork: (Closeup) Tina B. Medina, Barreras/Barriers, Fabric, Flag, Thread, 33 " x 60 ", 2017
Tina B. Medina is a visual artist and Professor of Art at Mountain View campus, Dallas College. She earned her Bachelor of Fine Arts degree at Texas Tech University and Master of Fine Arts degree at the University of North Texas. Medina's art has been exhibited nationally in exhibits such as Immigration, Migration, Movement & The Humanities at Arizona State University, and displayed at the Galería América of the Institute for Latino Studies, University of Notre Dame, Indiana. Medina has curated several exhibits including Contemporary Latino American Artists of the Metroplex at Richland and Brookhaven campuses and ELLA: Exhibiting Local Latina Artists at the Dallas Latino Cultural Center. She was a member of the oldest Texas artist run cooperative 500X Gallery for five years and serves occasionally on City of Dallas Public Art Committees.
"I am compelled to make art that speaks about current issues in our country by representing and portraying the point of view of immigrants and people of color. The struggles and continued barriers placed upon people of color in the US motivates me to create works from the viewpoint of those who have suffered racism, bigotry and xenophobia. Part of the experience for POC is how we try to place ourselves within a historical reference that was never meant to include us. Our past and present history influence how we perceive others, as well as how we perceive ourselves. I want to amplify the voices of women and families who have little power in our country due to a historical and ongoing oppression. My artworks speak about power and the unintended consequences of colonization and assimilation. I find it essential to revisit the history of the US to remind ourselves how the past informs and shapes the present. I undertake many methods of art making to translate my ideas. For instance, I may record voices of people, or embroider cloth, physically perform an action, or install a site-specific installation. I love found objects and the history they accumulate as well as the meaning we imbue upon them, so I often incorporate them into my work. Most of my inspiration comes from cultural history and identity, including gender, ethnicity, nationality, ancestry and class."
Presenting Changarreando
Changarrito Residency
Add Button Text
May 11, 2021 – June 8, 2021

redpajama_set_name: RedPajamaCommonCrawl


text:
Custom Finished Pianos
Mozart Rail
Sound projecting lid
Carbon Fibre Soundboard
SFM Upright Piano Action
PS Upright Piano Action
Parsifal Bells
Concert Rentals Worldwide
Concert Service Worldwide
CD Recordings
Restorations/Repairings
Concerts & Artists
Artists and Friends
Festival Town Bayreuth
Liszt, Wagner, Schumann & Jean Paul
Production Principles
Seal of Quality – 'Manufactured in Germany'
Workshops & Staff
Archive Service
The Bayreuth baritone Ralf Lukas published his new CD "Winterreise". The recordings of the late Schubert work were made in the Steingraeber Haus Bayreuth and were accompanied by James Alexander on a Steingraeber concert grand E-272.
CDs are now available, among others in the Steingraeber Haus Bayreuth.
Ralf Lukas studied at the Berlin University of the Arts and developed into a respected singer who among other things sang the role as flying Dutchman in Katharina Wagner's well-respected first production. This was followed by appearances at the Bayreuth Festival and many other renowned concert halls and opera houses. As a popular concert singer with an extensive repertoire, he has made guest appearances in Berlin, Brussels, Hamburg, Madrid, Munich, Paris, Rome, Sao Paulo and Vienna, as well as at the festivals of Montpellier, the London Proms, Salzburg, Lucerne, Rheingau and Schleswig-Holstein. He participated in various radio and television recordings (ZDF, SFB, MDR, BR, Radio France, RAI, RTE).
The Pianist James Alexander was born in Canada, where he studied with Robert Silverman at the University of British Columbia (Vancouver). After his graduation he received a stipend to continue his studies for a Master of Music Degree with Sasha Gorodnitzki and Janina Fialkowska at the Juilliard School of Music in New York City. At the same time he enrolled in Master courses given by Leon Fleischer, Menahem Pressler and Mischa Dichter, and trained to be a Lieder and Song accompanist with Martin Katz and Gwendolyn Koldofsky. In 1987, James Alexander was a coach at the Opera Studio in Zurich followed by an engagement as principal coach and conductor at the Opera House in Aachen. In 1992 he was appointed as a lecturer at the University of Arts in Bern. Since 2006, James Alexander also conducts a class for chamber music at the Haute Ecole de Musique in Geneva.. He is a regular guest for Chamber Music- Master classes at the Juilliard School. In addition to solo performances, James Alexander has performed as a Chamber musician, as partner to among others Thomas and Patrick Demenga, Thomas Füri, Isabelle Magnenat, Michael Sanderling, Anja Silja, Richard Tognetti and Gérard Wyss. He has performed in recitals with Dawn Upshaw, Michèle Crider, James McCracken, Ursula Füri-Bernhard, Ralf Lukas and Jakob Stämpfli. He concertizes throughout the world on tour and plays at the Schleswig-Holstein Festival, the European Music Festival in Stuttgart, the Heidelberg Spring, at the Kronberg Academy, the Zurich Opera Festival, the Sommets Musicaux of Gstaad (Switzerland), at the Meiringen Festival of Music (Switzerland), at Sine Nomine Festival in Lausanne, at the Menuhin Festival in Gstaad, in the Swiss Chamber Concerts and at Lincoln Center in New York. His recordings include Solo Piano Music, Chamber Music and Songs. Current and future projects include an upcoming CD recording of music by Daniel Schnyder, a recital of Brahms' Die schöne Magelone with Ralf Lukas, a concert program featuring Beethoven's Cello Sonatas in January 2013 in Berne with Thomas Demenga and a Chamber Music concert in Geneva with the Chamber Music Ensemble of OSR with Ernest Chausson's Chanson Perpetuelles as part of the concert season of the Orchestre de la Suisse Romande.
Ralf Lukas Website
James Alexander Website
Further News
Click here to read more news from Steingraeber & Söhne.
Sign in and get our latest news directly into your inbox.


text:
Q: Xcode application running on Iphone but crashing on Ipad I made a universal application that contains NIB files for both ipad and iphone UI's. In my view controllers initWithNibName method I call UIUserInterfaceIdiomPad == UI_USER_INTERFACE_IDIOM() to detect whether the controller is running on iphone or ipad.
I then launch their respective nib files. When I run the app on iphone, it works fine, but when I run it on ipad it eventually crashes with a EXC_BAD_ACCESS error. This error occurs when I use a view controller to launch another view controller, which then launches another one in the navigation stack.  This error occurs as soon as I click the view that belongs to the third controller of the stack.
I cannot distinguish a difference between the NIB files that would cause a crash. I have been working tirelessly to figure out why this is happening but I cannot fix this error. Does anyone have any insight into what might be going on?
Any advice on how to approach fixing this problem would be very appreciated.

A: The first thing you should do is enable the "All Exceptions" break point. This will often accurately tell you the line of code where the EXC_BAD_ACCESS is happening.

Next, I would turn on zombies and see where the over-release is happening. To do so, in Xcode, while holding the option key, click Product | Run.... In the ensuing window, add NSZombieEnabled to the environment variables list.

Then run. Do the normal things you do to cause the crash and see where the debugger lands. With any luck, it will stop where the problem is actually occurring.
When you get a EXC_BAD_ACCESS it means you're trying to access/release something that's already been released. If you're in a non-ARC situation, it normally means you've inadvertently released something when you didn't mean to, so just check for alloc/init and release balance. If, however, you're in an ARC situation, I would bet it has to do with not niling a delegate when a view controller gets released.
For example, if you have a MKMapView and have set its delegate to your view controller, you should nil its delegate when your view gets unloaded or dealloc'd. Otherwise, messages will continue to get set to it. Or, another possibility is that you've added your view controller as an NSNotificationCenter observer and didn't remove it as an observer when the view controller was unloaded or dealloc'd.
Another possibility is that you're re-using view controllers between the two versions of your universal app. If you are accessing anything by an identifier that doesn't exist in the nib for the iPad, that would cause a crash--though if you're using nibs as opposed to storyboards, that may not be an issue.
That's about all I can think of for now. Try to zero in on where it's happening and post code here if you still can't figure it out.
Best regards.

redpajama_set_name: RedPajamaStackExchange


text:
Museums /
Buckinghamshire /
Chesham /
MuseumsChesham
Historic Transport
The Hellfire Caves
The Caves are an ideal visit for all the family and especially children ‐ their imaginations can be set free. The attraction consists of almost a mile of underground passages with various figures depicting the life and times of the members of the infamous Hellfire Club. …
Distance: 9.1 miles away
Bekonscot Model Village
Welcome to Bekonscot Model Village, the world's oldest model village. Bekonscot is different from other model villages; this is an entire miniature kingdom stuck firmly in an idyllic 1930s timewarp. There are six little villages in a 1 acre miniature landscape of farms and fields, castles…
Veralamium Museum
Verulamium Museum is on the site of one of the major cities in Roman Britain, now an attractive park. Inside there are ‐ recreated Roman rooms ‐ hands‐on Discovery Areas ‐ video presentations ‐ touch screen databases ‐ some of the finest Roman mosaics…
Distance: 11.6 miles away
Chiltern Open Air Museum
Vernacular buildings ‐ the houses and workplaces of past generations ‐ are disappearing every day from the landscape. In the Chilterns, an Area of Outstanding Natural Beauty on London's doorstep, the pressures are particularly great. Chiltern Open Air Museum preserves and interprets the built heritage of…
Roman Theatre of Verulamium
The Roman Theatre of Verulamium is unique. Built in about 140AD it is the only example of its kind in Britain, being a theatre with a stage rather than an Amphitheatre. Initially, the arena would have been used for anything from religious processions and dancing, to wrestling, armed…
Stockwood Craft Museum and
Stockwood Park Museum is housed in tranquil parkland on the site of the former Stockwood House around 2 miles to the south of Luton town centre, close to junction 10 of the M1. Stockwood Park Museum includes displays on rural Bedfordshire Crafts, the Mossman Collection of horse‐drawn…
The Museum Of St
Founded as the Hertfordshire County Museum in 1898, the Museum of St Albans tells the story of St Albans from the departure of the Romans to the present day.In the medieval gallery you can find out about Alban, Britain's first Christian martyr, and the Abbey that grew up…
Walter Rothschild Zoological Museum
The Zoological Museum has been part of the Natural History Museum since 1937, but it was once the private museum of Lionel Walter, 2nd Baron Rothschild, who moved with his family to Tring Park in 1872. Lionel Walter Rothschild was born in 1868, the eldest son of Nathan…
Wycombe Local History and
Wycombe Museum has new and exciting hands‐ on activities with revamped displays that opened in 1999. It is a great place to discover the fascinating and varied history of the District ‐ and of course the renowned collection of Windsor chairs. Come and discover the local…
Wycombe Museum
Archaeology, Archives, Costume and Textiles, Decorative and Applied Art, Fine Art, Industry, Social History. Friendly local museum set in an 18th century house with attractive grounds. Displays include interactive exhibits and childrens activities. Events are held throughout the year for children, family's and adults. …
Slightly further afield
Compare Ticket PricesSave a bunch of cash by comparing ticket prices before you buy.
Circle Line TourHow many attractions can you fit into our Circle Line day out? Fun on the tube.
Great British days outDiscover the delights of Britain with our guide to attractions for all the family.
15 - 23 Feb 2020
Godstone Farm Olympics
Godstone Farm in Godstone
STUNT FEST
Santa Pod Raceway in Wellingborough
The Glass Will Shatter
Omnibus Theatre in Northside, London
Pandemonium of Parrots
Birdland Park And Gardens in Bourton-on-the-Water
24 Jan - 15 Mar 2020
Czech Image
Vitrnka - Czech Centre Gallery in London
Storytime with Mama G!
Lewsey Library in Luton
Salisbury Playhouse in Salisbury
St Mark's Dalston in London
100% OPTICAL
ExCeL London in Custom House
The Hat Factory Arts Centre in Luton
Jekyll / Hyde
The Vaults in London
All the King's Women
The Parish Hall in Chelmsford
Dublin, Ireland in Dublin, Ireland
22 Jan - 26 Feb 2020
Ladywood Leisure Centre in West Midlands
Urban & Street Photography by Gill Ferguson
Whitehill Centre in Chesham
Wildlife through a lens with Tom Way
White Hill Centre in Chesham
Stunning still life workshop with Damon Guy
Journey down the Thames by Albert Braithwaite
Manchester Chinese New Year Celebrations
Manchester City Centre in Manchester
Mrs Lowry & Son (PG)
The Old Town Hall Arts Centre in Hemel Hempstead
The Lion King 2019 (PG) - Relaxed Screening
Psychic Fayre at the Staton Hotel Dudley
The Station Hotel Dudley in Dudley
Blenheim Palace Flower Show 2020
Blenheim Palace in Oxford
Collegium Singers Concert - Madrigal Madness
St Andrew's Church, in Wiveliscombe
Publicity Officer, BGFC
Sat, 12 Apr 2014 03:52
Tickets for the all seater grandstands which line the Bridgwater Carnival procession route are now available to pre-order. The 1,800 tickets cost 14 each and are available online at Read
Fri, 11 Apr 2014 16:06
Just asked about prices and delivery costs for home delivery. Hung up on me as they do not do home delivery. Very rude and totally out of order.… Read
clair estelle
a list of wedding photographers is a good place to start, including me!
… Read
Chris Haycock
If you're anywhere near the Midlands area on Sunday 8th of June, get yourself along to RAF Cosford Air Show 2014 - it's a spectacular event with so much to… Read
Mon, 07 Apr 2014 03:56
what a great place to find your wedding photographer!
Thrillseeker Experiences
Family Steam Train Trip
Helicopter Flying Lesson
Bridge Bungee Jump
Water Experiences
Supercar Drive Choice


text:
ScreenAct
I'm Prasad Venkat. I write about technology, politics and cinema among other things.
Black Musicians & The Purpose of Life
Soul (Disney+) & Ma Rainey's Black Bottom (Netflix)
Joe Gardner, an aspiring Jazz pianist who roughs it up as a middle school music teacher, has been waiting a very long time for an opening into the big league. On the day of his big break, he dies, goes to a heavenly limbo, begs and cheats his way back to Earth and performs astoundingly on his opening night. When the concert is over, he walks out feeling empty. Why?
Pixar has never shied away from lifting thematic heavyweights, be it addressing the urgency of environmental deterioration in Wall-E or pursuing your passion after retirement in Up. And they've always masqueraded these themes in funny lines and vibrant colors that kids think they're watching a kids film while the adults squirmed introspectively. But with Soul, the final phase of the film sweeps aside the kids and the punch is clearly directed at all the grown-up Joe Gardners we know: you worked hard for that promotion and you got promoted, but why aren't you satisfied? you waited a long time to move to Paris, but why aren't you excited after your move? you won the lottery, why aren't you happy now?
When Joe (very bankable Jamie Foxx) dies and his soul goes to an intermediate place called Great Before/Beyond, he's tasked with mentoring an unborn soul, 22, which has a reputation for being very difficult. 22 (brilliantly, annoyingly & self-deprecatingly voiced by Tina Fey) comes across as an ultra-nihilist that she doesn't even see the point of life and she's yet to be born. When a freak accident pushes her down along with Joe to Earth, she starts scared and anxious and gradually warms up to the beauty of living; "I like walking, maybe that's my purpose" she says to which Joe snaps back "That's not a purpose, that's just regular old living".
And that's why Joe's empty after his big blowout performance. When words like 'spark' and 'purpose' are sprinkled on your journey to a destination, you forget to enjoy a simple walk and a slice of pizza. During her brief stay on Earth, 22 learns that life is nothing but a continual series of nows punctuated with getting yelled at in a Subway, having an argument with your mother, enjoying a lollipop and having an honest conversation with your barber. If you can't enjoy that, then you're not living. Every religion and your back alley moral philosopher have been saying this for a long time. Soul conveys the message with panache.
Ma Rainey's Black Bottom is set in a studio on a hot afternoon Chicago in 1927. A jazz troupe (all Black, if you should ask) are scheduled to record an album. Ma Rainey (Viola Davis) is a legendary singer who goes to great lengths to be difficult to everyone around her and Levee Green (Chadwick Boseman) is a trumpeter who's difficult because that's just who he is.
Ma realizes that her glory days are behind her and once her voice is captured on a disc the economic exploitation of her talent by the White establishment (recording, distribution, rights, etc) will leave her behind. She's only trying to squeeze the last drop of respect she can demand from her white manager. Levee is a different story. He's young & dynamic and pissed at the world at large that his genius hasn't been recognized. While Ma has cultivated an angry patience (she waits for 'ice-cold' Coca Cola with everyone exasperated around her), Levee is just angry (he repeatedly kicks a door that leads nowhere, literally).
Dialogs sparkle and sizzle as the troupe evaluate and place themselves at different levels on the social strata. Temperature rises, tension rises. By the end of the film, an album is recorded and a man is killed. A young and vibrant talent is cut short and the movie weeps. An additional tragedy to the viewer is that we recognize the loss of Boseman, one of the finest actors of his generation, who delivers a stellar performance. Like the summer of 2020, this film reminds us that the time to confront racism is always now and the work is never done.
. 12/27/2020
Share to TwitterShare to Facebook
Prasad Venkat
I'm a software engineer at Google, living in the Bay Area.
My daughters continually teach me how I can be a better person.
My twitter handle is screenact@


Illustration for german Newspaper "Christ&Welt"
I did another Illustration for german News Paper "Christ&Welt" recently. The story was about some people who baptise refugees without them knowing what it's all about… and sometimes getting troubles after being baptised.
On the production side I was happy to get my fingers on plasticine and comped the piece in photoshop afterwards. I want to sit and play with plasticine for ever.


text:
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.InteropServices;
using WeihanLi.Common;

// ReSharper disable once CheckNamespace
namespace WeihanLi.Extensions;

// ReSharper disable once InconsistentNaming
public static class ILGeneratorExtensions
{
    public static readonly MethodInfo GetMethodFromHandle = ExpressionExtension.GetMethod<Func<RuntimeMethodHandle, RuntimeTypeHandle, MethodBase>>((h1, h2) => MethodBase.GetMethodFromHandle(h1, h2)!);

    public static void EmitMethod(this ILGenerator ilGenerator, MethodInfo method)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }
        if (method == null)
        {
            throw new ArgumentNullException(nameof(method));
        }
        EmitMethod(ilGenerator, method, method.DeclaringType!);
    }

    public static void EmitMethod(this ILGenerator ilGenerator, MethodInfo method, Type declaringType)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }
        if (method == null)
        {
            throw new ArgumentNullException(nameof(method));
        }
        if (declaringType == null)
        {
            throw new ArgumentNullException(nameof(declaringType));
        }

        ilGenerator.Emit(OpCodes.Ldtoken, method);
        ilGenerator.Emit(OpCodes.Ldtoken, declaringType);
        ilGenerator.Emit(OpCodes.Call, GetMethodFromHandle);
        ilGenerator.EmitConvertToType(typeof(MethodBase), typeof(MethodInfo));
    }

    public static void EmitConvertToObject(this ILGenerator ilGenerator, Type typeFrom)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }
        if (typeFrom == null)
        {
            throw new ArgumentNullException(nameof(typeFrom));
        }

        if (typeFrom.IsGenericParameter)
        {
            ilGenerator.Emit(OpCodes.Box, typeFrom);
        }
        else
        {
            ilGenerator.EmitConvertToType(typeFrom, typeof(object));
        }
    }

    public static void EmitConvertFromObject(this ILGenerator ilGenerator, Type typeTo)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }
        if (typeTo == null)
        {
            throw new ArgumentNullException(nameof(typeTo));
        }

        if (typeTo.IsGenericParameter)
        {
            ilGenerator.Emit(OpCodes.Unbox_Any, typeTo);
        }
        else
        {
            ilGenerator.EmitConvertToType(typeof(object), typeTo);
        }
    }

    public static void EmitConvertToType(this ILGenerator ilGenerator, Type typeFrom, Type typeTo, bool isChecked = true)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }
        if (typeFrom == null)
        {
            throw new ArgumentNullException(nameof(typeFrom));
        }
        if (typeTo == null)
        {
            throw new ArgumentNullException(nameof(typeTo));
        }

        var nnExprType = typeFrom.Unwrap();
        var nnType = typeTo.Unwrap();

        if (nnType == nnExprType || nnType.IsEquivalentTo(nnExprType))
        {
            return;
        }

        if (typeFrom.IsInterface || // interface cast
          typeTo.IsInterface ||
           typeFrom == typeof(object) || // boxing cast
           typeTo == typeof(object) ||
           typeFrom == typeof(Enum) ||
           typeFrom == typeof(ValueType) ||
           TypeInfoUtils.IsLegalExplicitVariantDelegateConversion(typeFrom, typeTo))
        {
            ilGenerator.EmitCastToType(typeFrom, typeTo);
        }
        else if (typeFrom.IsNullableType() || typeTo.IsNullableType())
        {
            ilGenerator.EmitNullableConversion(typeFrom, typeTo, isChecked);
        }
        else if (!(typeFrom.IsConvertible() && typeTo.IsConvertible()) // primitive runtime conversion
                 &&
                 (nnExprType.GetTypeInfo().IsAssignableFrom(nnType) || // down cast
                 nnType.GetTypeInfo().IsAssignableFrom(nnExprType))) // up cast
        {
            ilGenerator.EmitCastToType(typeFrom, typeTo);
        }
        else if (typeFrom.IsArray && typeTo.IsArray)
        {
            // See DevDiv Bugs #94657.
            ilGenerator.EmitCastToType(typeFrom, typeTo);
        }
        else
        {
            ilGenerator.EmitNumericConversion(typeFrom, typeTo, isChecked);
        }
    }

    private static void EmitNullableConversion(this ILGenerator ilGenerator, Type typeFrom, Type typeTo, bool isChecked)
    {
        var isTypeFromNullable = typeFrom.IsNullableType();
        var isTypeToNullable = typeTo.IsNullableType();
        if (isTypeFromNullable && isTypeToNullable)
            ilGenerator.EmitNullableToNullableConversion(typeFrom, typeTo, isChecked);
        else if (isTypeFromNullable)
            ilGenerator.EmitNullableToNonNullableConversion(typeFrom, typeTo, isChecked);
        else
            ilGenerator.EmitNonNullableToNullableConversion(typeFrom, typeTo, isChecked);
    }

    private static void EmitNullableToNullableConversion(this ILGenerator ilGenerator, Type typeFrom, Type typeTo, bool isChecked)
    {
        LocalBuilder locFrom = ilGenerator.DeclareLocal(typeFrom);
        ilGenerator.Emit(OpCodes.Stloc, locFrom);
        LocalBuilder locTo = ilGenerator.DeclareLocal(typeTo);
        // test for null
        ilGenerator.Emit(OpCodes.Ldloca, locFrom);
        ilGenerator.EmitHasValue(typeFrom);
        Label labIfNull = ilGenerator.DefineLabel();
        ilGenerator.Emit(OpCodes.Brfalse_S, labIfNull);
        ilGenerator.Emit(OpCodes.Ldloca, locFrom);
        ilGenerator.EmitGetValueOrDefault(typeFrom);
        Type nnTypeFrom = typeFrom.GetNonNullableType();
        Type nnTypeTo = typeTo.GetNonNullableType();
        ilGenerator.EmitConvertToType(nnTypeFrom, nnTypeTo, isChecked);
        // construct result type
        var ci = typeTo.GetConstructor(new[] { nnTypeTo });
        ilGenerator.Emit(OpCodes.Newobj, ci!);
        ilGenerator.Emit(OpCodes.Stloc, locTo);
        Label labEnd = ilGenerator.DefineLabel();
        ilGenerator.Emit(OpCodes.Br_S, labEnd);
        // if null then create a default one
        ilGenerator.MarkLabel(labIfNull);
        ilGenerator.Emit(OpCodes.Ldloca, locTo);
        ilGenerator.Emit(OpCodes.Initobj, typeTo);
        ilGenerator.MarkLabel(labEnd);
        ilGenerator.Emit(OpCodes.Ldloc, locTo);
    }

    private static void EmitNullableToNonNullableConversion(this ILGenerator ilGenerator, Type typeFrom, Type typeTo, bool isChecked)
    {
        if (typeTo.IsValueType)
            ilGenerator.EmitNullableToNonNullableStructConversion(typeFrom, typeTo, isChecked);
        else
            ilGenerator.EmitNullableToReferenceConversion(typeFrom);
    }

    private static void EmitNullableToNonNullableStructConversion(this ILGenerator ilGenerator, Type typeFrom, Type typeTo, bool isChecked)
    {
        LocalBuilder locFrom = ilGenerator.DeclareLocal(typeFrom);
        ilGenerator.Emit(OpCodes.Stloc, locFrom);
        ilGenerator.Emit(OpCodes.Ldloca, locFrom);
        ilGenerator.EmitGetValue(typeFrom);
        Type nnTypeFrom = typeFrom.GetNonNullableType();
        ilGenerator.EmitConvertToType(nnTypeFrom, typeTo, isChecked);
    }

    private static void EmitNullableToReferenceConversion(this ILGenerator ilGenerator, Type typeFrom)
    {
        // We've got a conversion from nullable to Object, ValueType, Enum, etc.  Just box it so that
        // we get the nullable semantics.
        ilGenerator.Emit(OpCodes.Box, typeFrom);
    }

    private static void EmitNonNullableToNullableConversion(this ILGenerator ilGenerator, Type typeFrom, Type typeTo, bool isChecked)
    {
        LocalBuilder locTo = ilGenerator.DeclareLocal(typeTo);
        Type nnTypeTo = typeTo.Unwrap();
        ilGenerator.EmitConvertToType(typeFrom, nnTypeTo, isChecked);
        ConstructorInfo ci = Guard.NotNull(typeTo.GetConstructor(new[] { nnTypeTo })!, "constructor");
        ilGenerator.Emit(OpCodes.Newobj, ci);
        ilGenerator.Emit(OpCodes.Stloc, locTo);
        ilGenerator.Emit(OpCodes.Ldloc, locTo);
    }

    private static void EmitNumericConversion(this ILGenerator ilGenerator, Type typeFrom, Type typeTo, bool isChecked)
    {
        var isFromUnsigned = TypeInfoUtils.IsUnsigned(typeFrom);
        var isFromFloatingPoint = TypeInfoUtils.IsFloatingPoint(typeFrom);
        if (typeTo == typeof(float))
        {
            if (isFromUnsigned)
                ilGenerator.Emit(OpCodes.Conv_R_Un);
            ilGenerator.Emit(OpCodes.Conv_R4);
        }
        else if (typeTo == typeof(double))
        {
            if (isFromUnsigned)
                ilGenerator.Emit(OpCodes.Conv_R_Un);
            ilGenerator.Emit(OpCodes.Conv_R8);
        }
        else
        {
            TypeCode tc = typeTo.GetTypeCode();
            if (isChecked)
            {
                // Overflow checking needs to know if the source value on the IL stack is unsigned or not.
                if (isFromUnsigned)
                {
                    switch (tc)
                    {
                        case TypeCode.SByte:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_I1_Un);
                            break;

                        case TypeCode.Int16:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_I2_Un);
                            break;

                        case TypeCode.Int32:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_I4_Un);
                            break;

                        case TypeCode.Int64:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_I8_Un);
                            break;

                        case TypeCode.Byte:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_U1_Un);
                            break;

                        case TypeCode.UInt16:
                        case TypeCode.Char:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_U2_Un);
                            break;

                        case TypeCode.UInt32:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_U4_Un);
                            break;

                        case TypeCode.UInt64:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_U8_Un);
                            break;

                        default:
                            throw new InvalidCastException();
                    }
                }
                else
                {
                    switch (tc)
                    {
                        case TypeCode.SByte:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_I1);
                            break;

                        case TypeCode.Int16:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_I2);
                            break;

                        case TypeCode.Int32:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_I4);
                            break;

                        case TypeCode.Int64:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_I8);
                            break;

                        case TypeCode.Byte:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_U1);
                            break;

                        case TypeCode.UInt16:
                        case TypeCode.Char:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_U2);
                            break;

                        case TypeCode.UInt32:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_U4);
                            break;

                        case TypeCode.UInt64:
                            ilGenerator.Emit(OpCodes.Conv_Ovf_U8);
                            break;

                        default:
                            throw new InvalidCastException();
                    }
                }
            }
            else
            {
                switch (tc)
                {
                    case TypeCode.SByte:
                        ilGenerator.Emit(OpCodes.Conv_I1);
                        break;

                    case TypeCode.Byte:
                        ilGenerator.Emit(OpCodes.Conv_U1);
                        break;

                    case TypeCode.Int16:
                        ilGenerator.Emit(OpCodes.Conv_I2);
                        break;

                    case TypeCode.UInt16:
                    case TypeCode.Char:
                        ilGenerator.Emit(OpCodes.Conv_U2);
                        break;

                    case TypeCode.Int32:
                        ilGenerator.Emit(OpCodes.Conv_I4);
                        break;

                    case TypeCode.UInt32:
                        ilGenerator.Emit(OpCodes.Conv_U4);
                        break;

                    case TypeCode.Int64:
                        if (isFromUnsigned)
                        {
                            ilGenerator.Emit(OpCodes.Conv_U8);
                        }
                        else
                        {
                            ilGenerator.Emit(OpCodes.Conv_I8);
                        }
                        break;

                    case TypeCode.UInt64:
                        if (isFromUnsigned || isFromFloatingPoint)
                        {
                            ilGenerator.Emit(OpCodes.Conv_U8);
                        }
                        else
                        {
                            ilGenerator.Emit(OpCodes.Conv_I8);
                        }
                        break;

                    default:
                        throw new InvalidCastException();
                }
            }
        }
    }

    public static void EmitCastToType(this ILGenerator ilGenerator, Type typeFrom, Type typeTo)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }
        if (!typeFrom.IsValueType && typeTo.IsValueType)
        {
            ilGenerator.Emit(OpCodes.Unbox_Any, typeTo);
        }
        else if (typeFrom.IsValueType && !typeTo.IsValueType)
        {
            ilGenerator.Emit(OpCodes.Box, typeFrom);
            if (typeTo != typeof(object))
            {
                ilGenerator.Emit(OpCodes.Castclass, typeTo);
            }
        }
        else if (!typeFrom.IsValueType && !typeTo.IsValueType)
        {
            ilGenerator.Emit(OpCodes.Castclass, typeTo);
        }
        else
        {
            throw new InvalidCastException($"Can not cast {typeFrom} to {typeTo}.");
        }
    }

    public static LocalBuilder? DeclareReturnValue(this ILGenerator il, Type returnType)
    {
        if (returnType != typeof(void))
        {
            return il.DeclareLocal(returnType);
        }

        return null;
    }

    public static void Return(this ILGenerator il, MethodInfo method, LocalBuilder local)
    {
        if (method.ReturnType != typeof(void))
        {
            il.Emit(OpCodes.Stloc, local);
            il.Emit(OpCodes.Ldloc, local);
        }

        il.Emit(OpCodes.Ret);
    }

    public static void Call(this ILGenerator il, MethodInfo method)
    {
        il.Emit(OpCodes.Call, method);
    }

    public static void Call(this ILGenerator il, ConstructorInfo constructor)
    {
        il.Emit(OpCodes.Call, constructor);
    }

    public static void New(this ILGenerator il, ConstructorInfo constructor)
    {
        il.Emit(OpCodes.Newobj, constructor);
    }

    // https://stackoverflow.com/a/48149905/5519747
    public static void LoadObj(this ILGenerator il, object? obj)
    {
        if (obj is null)
        {
            il.EmitNull();
            return;
        }

        var type = obj.GetType();

        var gch = GCHandle.Alloc(obj);
        var ptr = GCHandle.ToIntPtr(gch);

        if (IntPtr.Size == 4)
            il.Emit(OpCodes.Ldc_I4, ptr.ToInt32());
        else
            il.Emit(OpCodes.Ldc_I8, ptr.ToInt64());

        il.Emit(OpCodes.Ldobj, type);
    }

    public static void EmitThis(this ILGenerator ilGenerator)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }

        ilGenerator.Emit(OpCodes.Ldarg_0);
    }

    public static void EmitLoadArg(this ILGenerator ilGenerator, int index)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }

        switch (index)
        {
            case 0:
                ilGenerator.Emit(OpCodes.Ldarg_0);
                break;

            case 1:
                ilGenerator.Emit(OpCodes.Ldarg_1);
                break;

            case 2:
                ilGenerator.Emit(OpCodes.Ldarg_2);
                break;

            case 3:
                ilGenerator.Emit(OpCodes.Ldarg_3);
                break;

            default:
                if (index <= byte.MaxValue)
                {
                    ilGenerator.Emit(OpCodes.Ldarg_S, (byte)index);
                }
                else
                {
                    ilGenerator.Emit(OpCodes.Ldarg, index);
                }
                break;
        }
    }

    public static void EmitNull(this ILGenerator ilGenerator)
    {
        ilGenerator.Emit(OpCodes.Ldnull);
    }

    public static void EmitString(this ILGenerator ilGenerator, string value)
    {
        ilGenerator.Emit(OpCodes.Ldstr, value);
    }

    public static void EmitBoolean(this ILGenerator ilGenerator, bool value)
    {
        if (value)
        {
            ilGenerator.Emit(OpCodes.Ldc_I4_1);
        }
        else
        {
            ilGenerator.Emit(OpCodes.Ldc_I4_0);
        }
    }

    public static void EmitHasValue(this ILGenerator ilGenerator, Type nullableType)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }
        MethodInfo mi = nullableType.GetTypeInfo().GetMethod("get_HasValue", BindingFlags.Instance | BindingFlags.Public)!;
        ilGenerator.Emit(OpCodes.Call, mi);
    }

    public static void EmitGetValueOrDefault(this ILGenerator ilGenerator, Type nullableType)
    {
        MethodInfo mi = nullableType.GetTypeInfo().GetMethod("GetValueOrDefault", Type.EmptyTypes)!;
        ilGenerator.Emit(OpCodes.Call, mi);
    }

    public static void EmitGetValue(this ILGenerator ilGenerator, Type nullableType)
    {
        MethodInfo mi = nullableType.GetTypeInfo().GetMethod("get_Value", BindingFlags.Instance | BindingFlags.Public)!;
        ilGenerator.Emit(OpCodes.Call, mi);
    }

    public static void EmitDefaultValue(this ILGenerator ilGenerator, Type type)
    {
        if (ilGenerator == null)
        {
            throw new ArgumentNullException(nameof(ilGenerator));
        }
        if (type == null)
        {
            throw new ArgumentNullException(nameof(type));
        }
        switch (Type.GetTypeCode(type))
        {
            case TypeCode.Object:
            case TypeCode.DateTime:
                if (type.IsValueType)
                {
                    // Type.GetTypeCode on an enum returns the underlying
                    // integer TypeCode, so we won't get here.
                    // This is the IL for default(T) if T is a generic type
                    // parameter, so it should work for any type. It's also
                    // the standard pattern for structs.
                    LocalBuilder lb = ilGenerator.DeclareLocal(type);
                    ilGenerator.Emit(OpCodes.Ldloca, lb);
                    ilGenerator.Emit(OpCodes.Initobj, type);
                    ilGenerator.Emit(OpCodes.Ldloc, lb);
                }
                else
                {
                    ilGenerator.Emit(OpCodes.Ldnull);
                }
                break;

            case TypeCode.Empty:
            case TypeCode.String:
                ilGenerator.Emit(OpCodes.Ldnull);
                break;

            case TypeCode.Boolean:
            case TypeCode.Char:
            case TypeCode.SByte:
            case TypeCode.Byte:
            case TypeCode.Int16:
            case TypeCode.UInt16:
            case TypeCode.Int32:
            case TypeCode.UInt32:
                ilGenerator.Emit(OpCodes.Ldc_I4_0);
                break;

            case TypeCode.Int64:
            case TypeCode.UInt64:
                ilGenerator.Emit(OpCodes.Ldc_I4_0);
                ilGenerator.Emit(OpCodes.Conv_I8);
                break;

            case TypeCode.Single:
                ilGenerator.Emit(OpCodes.Ldc_R4, default(float));
                break;

            case TypeCode.Double:
                ilGenerator.Emit(OpCodes.Ldc_R8, default(double));
                break;

            case TypeCode.Decimal:
                ilGenerator.Emit(OpCodes.Ldc_I4_0);
                ilGenerator.Emit(OpCodes.Newobj, typeof(decimal).GetTypeInfo().GetConstructor(new[] { typeof(int) })!);
                break;

            default:
                throw new InvalidOperationException("Code supposed to be unreachable.");
        }
    }
}

internal static class TypeInfoUtils
{
    internal static bool AreEquivalent(Type t1, Type t2)
    {
        return t1 == t2 || t1.IsEquivalentTo(t2);
    }

    internal static Type GetNonNullableType(this Type type)
    {
        if (type.IsNullableType())
        {
            return type.GetGenericArguments()[0];
        }
        return type;
    }

    internal static bool IsLegalExplicitVariantDelegateConversion(Type source, Type dest)
    {
        if (!IsDelegate(source) || !IsDelegate(dest) || !source.IsGenericType || !dest.IsGenericType)
            return false;

        var genericDelegate = source.GetGenericTypeDefinition();

        if (dest.GetGenericTypeDefinition() != genericDelegate)
            return false;

        var genericParameters = genericDelegate.GetTypeInfo().GetGenericArguments();
        var sourceArguments = source.GetGenericArguments();
        var destArguments = dest.GetGenericArguments();

        for (var iParam = 0; iParam < genericParameters.Length; ++iParam)
        {
            var sourceArgument = sourceArguments[iParam].GetTypeInfo();
            var destArgument = destArguments[iParam].GetTypeInfo();

            if (AreEquivalent(sourceArgument, destArgument))
            {
                continue;
            }

            var genericParameter = genericParameters[iParam].GetTypeInfo();

            if (IsInvariant(genericParameter))
            {
                return false;
            }

            if (IsCovariant(genericParameter))
            {
                if (!HasReferenceConversion(sourceArgument, destArgument))
                {
                    return false;
                }
            }
            else if (IsContravariant(genericParameter))
            {
                if (sourceArgument.IsValueType || destArgument.IsValueType)
                {
                    return false;
                }
            }
        }
        return true;
    }

    private static bool IsDelegate(Type t)
    {
        return t.IsSubclassOf(typeof(MulticastDelegate));
    }

    private static bool IsInvariant(Type t)
    {
        return 0 == (t.GenericParameterAttributes & GenericParameterAttributes.VarianceMask);
    }

    private static bool IsCovariant(this Type t)
    {
        return 0 != (t.GenericParameterAttributes & GenericParameterAttributes.Covariant);
    }

    internal static bool HasReferenceConversion(Type source, Type dest)
    {
        // void -> void conversion is handled elsewhere
        // (it's an identity conversion)
        // All other void conversions are disallowed.
        if (source == typeof(void) || dest == typeof(void))
        {
            return false;
        }

        var nnSourceType = source.GetNonNullableType().GetTypeInfo();
        var nnDestType = dest.GetNonNullableType().GetTypeInfo();

        // Down conversion
        if (nnSourceType.IsAssignableFrom(nnDestType))
        {
            return true;
        }
        // Up conversion
        if (nnDestType.IsAssignableFrom(nnSourceType))
        {
            return true;
        }
        // Interface conversion
        if (source.IsInterface || dest.IsInterface)
        {
            return true;
        }
        // Variant delegate conversion
        if (IsLegalExplicitVariantDelegateConversion(source, dest))
            return true;

        // Object conversion
        if (source == typeof(object) || dest == typeof(object))
        {
            return true;
        }
        return false;
    }

    private static bool IsContravariant(Type t)
    {
        return 0 != (t.GenericParameterAttributes & GenericParameterAttributes.Contravariant);
    }

    internal static bool IsConvertible(this Type type)
    {
        var notNullType = type.Unwrap();
        if (notNullType.IsEnum)
        {
            return true;
        }
        switch (Type.GetTypeCode(notNullType))
        {
            case TypeCode.Boolean:
            case TypeCode.Byte:
            case TypeCode.SByte:
            case TypeCode.Int16:
            case TypeCode.Int32:
            case TypeCode.Int64:
            case TypeCode.UInt16:
            case TypeCode.UInt32:
            case TypeCode.UInt64:
            case TypeCode.Single:
            case TypeCode.Double:
            case TypeCode.Char:
                return true;

            default:
                return false;
        }
    }

    internal static bool IsUnsigned(Type type)
    {
        switch (Type.GetTypeCode(type.Unwrap()))
        {
            case TypeCode.Byte:
            case TypeCode.UInt16:
            case TypeCode.Char:
            case TypeCode.UInt32:
            case TypeCode.UInt64:
                return true;

            default:
                return false;
        }
    }

    internal static bool IsFloatingPoint(Type type)
    {
        switch (Type.GetTypeCode(type.Unwrap()))
        {
            case TypeCode.Single:
            case TypeCode.Double:
                return true;

            default:
                return false;
        }
    }
}


text:
package zutil.parser;

import zutil.ClassUtil;
import zutil.io.file.FileUtil;
import zutil.log.LogUtil;
import zutil.struct.MutableInt;

import java.io.File;
import java.io.IOException;
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Class for generating dynamic text/code from set data.
 * The syntax is similar to the javascript mustache library.
 *
 *

 * Supported tags:
 *

 *
 {{key}}

 *       {{obj.attr}}

 *      Will be replaced with the string from the key.

 *
 {{#key}}...{{/key}}

 *       {{#obj.attr}}...{{/obj.attr}}

 *      Will display content between the tags if:
 *

 *
key is defined,

 *
if the key references a list or array the content will be iterated
 *              for every element, the element can be referenced by the tag {{.}},

 *
if key is a boolean with the value true,

 *
if key is a Integer with the value anything other then 0,

 *
if key ends with () it will be evaluated as a method call, the returned
 *              type will be evaluated against the criteria in this list.

 *

 *

 *
 {{^key}}

 *       {{^obj.attr}}...{{/obj.attr}}

 *      A negative condition, will display content if:
 *

 *
the key is undefined,

 *
the key is a empty list,

 *
the key is a zero length array,

 *
the key is a false boolean,

 *
the key is a 0 Integer

 *
if key ends with () it will be evaluated as a method call, the returned
 *              type will be evaluated against the criteria in this list.

 *

 *

 *
{{! ignore me }}

 *      Comment, will be ignored.

 *

 *
 * TODO: {{> file}}: include file
 * TODO: {{=<% %>=}}: change delimiter
 *
 * @author Ziver koc
 */
public class Templator {
    private static final Logger logger = LogUtil.getLogger();

    private HashMap<String,Object> data;
    private TemplateEntity tmplRoot;

    // File metadata
    private File file;
    private long lastModified;

    /**
     * A template file will be read from the disk. The template will
     * be regenerated if the file changes.
     */
    public Templator(File tmpl) throws IOException {
        if (tmpl == null)
            throw new IOException("File can not be null!");

        this.data = new HashMap<>();
        this.file = tmpl;
        parseTemplate(FileUtil.getContent(file));
        this.lastModified = file.lastModified();
    }

    public Templator(String tmpl) {
        this.data = new HashMap<>();
        parseTemplate(tmpl);
    }

    public void set(String key, Object data) {
        this.data.put(key, data);
    }
    public void setAll(Map<String,Object> source) {
        this.data.putAll(source);
    }
    public Object get(String key) {
        return this.data.get(key);
    }
    public void remove(String key) {
        this.data.remove(key);
    }

    /**
     * Will clear all data attributes
     */
    public void clear() {
        data.clear();
    }

    public String compile() {
        if (file != null && lastModified != file.lastModified()) {
            try {
                logger.info("Template file(" + file.getName() + ") changed. Regenerating template...");
                parseTemplate(FileUtil.getContent(file));
                this.lastModified = file.lastModified();
            } catch(IOException e) {
                logger.log(Level.WARNING, "Unable to regenerate template", e);
            }
        }

        StringBuilder str = new StringBuilder();
        if (tmplRoot != null)
            tmplRoot.compile(str);
        return str.toString();
    }

    /**
     * Will parse or re-parse the source template.
     */
    private void parseTemplate(String tmpl) {
        tmplRoot = parseTemplate(new TemplateNode(), tmpl, new MutableInt(), null);
    }
    private TemplateNode parseTemplate(TemplateNode root, String tmpl, MutableInt m, String parentTag) {
        StringBuilder data = new StringBuilder();
        boolean tagOpen = false;

        for (; m.i<tmpl.length(); ++m.i) {
            char c = tmpl.charAt(m.i);
            String d = "" + c + (m.i+1<tmpl.length() ? tmpl.charAt(m.i+1) : ' ');
            switch(d) {
                case "{{":
                    root.add(new TemplateStaticString(data.toString()));
                    data.delete(0, data.length());
                    tagOpen = true;
                    ++m.i;
                    break;
                case "}}":
                    if (!tagOpen) { // Tag not opened, incorrect enclosure
                        data.append(c);
                        continue;
                    }
                    tagOpen = false;
                    ++m.i;
                    String tagName = data.toString();
                    data.delete(0, data.length());
                    switch(tagName.charAt(0)) {
                        case '#': // Condition
                            ++m.i;
                            root.add(parseTemplate(new TemplateCondition(tagName.substring(1)),
                                            tmpl, m, tagName));
                            break;
                        case '^': // Negative condition
                            ++m.i;
                            root.add(parseTemplate(new TemplateNegativeCondition(tagName.substring(1)),
                                    tmpl, m, tagName));
                            break;
                        case '/': // End tag
                            // Is this tag closing the parent?
                            if (parentTag != null && tagName.endsWith(parentTag.substring(1)))
                                return root;
                            logger.severe("Closing non-opened tag: {{" + tagName + "}}");
                            root.add(new TemplateStaticString("{{" + tagName + "}}"));
                            break;
                        case '!': // Comment
                            break;
                        default:
                            root.add(new TemplateDataAttribute(tagName));
                    }
                    break;
                default:
                    data.append(c);
                    break;
            }
        }
        if (tagOpen) // Incomplete tag, insert it as normal text
            data.insert(0, "{{");
        if (data.length() > 0) // Still some text left, add to node
            root.add(new TemplateStaticString(data.toString()));

        // If we get to this point means that this node is incorrectly close
        // or this is the end of the file, so we convert it to a normal node
        if (parentTag != null) {
            root = new TemplateNode(root);
            String tagName = "{{" + parentTag + "}}";
            logger.severe("Missing closure of tag: " + tagName);
            root.addFirst(new TemplateStaticString(tagName));
        }
        return root;
    }

    /**************************** Template Helper Classes *************************************/

    protected interface TemplateEntity {
        void compile(StringBuilder str);
    }

    protected class TemplateNode implements TemplateEntity {
        private List<TemplateEntity> entities;

        public TemplateNode() {
            this.entities = new ArrayList<>();
        }
        public TemplateNode(TemplateNode node) {
            this.entities = node.entities;
        }

        public void addFirst(TemplateEntity s) {
            entities.add(0, s);
        }
        public void add(TemplateEntity s) {
            entities.add(s);
        }

        public void compile(StringBuilder str) {
            for (TemplateEntity sec : entities)
                sec.compile(str);
        }
    }

    protected class TemplateCondition extends TemplateNode {
        private TemplateDataAttribute attrib;

        public TemplateCondition(String key) {
            this.attrib = new TemplateDataAttribute(key);
        }

        public void compile(StringBuilder str) {
            Object obj = attrib.getObject();
            if (obj != null) {
                if (obj instanceof Boolean) {
                    if ((Boolean) obj)
                        super.compile(str);
                }
                else if (obj instanceof Short) {
                    if ((Short) obj != 0)
                        super.compile(str);
                }
                else if (obj instanceof Integer) {
                    if ((Integer) obj != 0)
                        super.compile(str);
                }
                else if (obj instanceof Long) {
                    if ((Long) obj != 0L)
                        super.compile(str);
                }
                else if (obj instanceof Float) {
                    if ((Float) obj != 0f)
                        super.compile(str);
                }
                else if (obj instanceof Double) {
                    if ((Double) obj != 0d)
                        super.compile(str);
                }
                else if (obj instanceof Iterable || obj.getClass().isArray()) {
                    Object prevObj = get(".");
                    set(".", obj);

                    if (obj instanceof Iterable) {
                        for (Object o : (Iterable) obj) { // Iterate through the whole list
                            set(".", o);
                            super.compile(str);
                        }
                    } else if (obj.getClass().isArray()) {
                        int length = Array.getLength(obj);
                        for (int i = 0; i < length; i++) {
                            set(".", Array.get(obj, i));
                            super.compile(str);
                        }
                    }

                    // Reset map to parent object
                    if (prevObj != null)
                        set(".", prevObj);
                    else
                        remove(".");
                }
                else
                    super.compile(str);

            }
        }
    }

    protected class TemplateNegativeCondition extends TemplateNode {
        private TemplateDataAttribute attrib;

        public TemplateNegativeCondition(String key) {
            this.attrib = new TemplateDataAttribute(key);
        }

        public void compile(StringBuilder str) {
            Object obj = attrib.getObject();
            if (obj == null)
                super.compile(str);
            else {
                if (obj instanceof Boolean) {
                    if (! (Boolean) obj)
                        super.compile(str);
                }
                else if (obj instanceof Integer) {
                    if ((Integer) obj == 0)
                        super.compile(str);
                }
                else if (obj instanceof Collection) {
                    if (((Collection) obj).isEmpty())
                        super.compile(str);
                }
                else if (obj.getClass().isArray()) {
                    if (((Object[]) obj).length <= 0)
                        super.compile(str);
                }
            }
        }
    }

    protected class TemplateStaticString implements TemplateEntity {
        private String text;

        public TemplateStaticString(String text) {
            this.text = text;
        }

        public void compile(StringBuilder str) {
            str.append(text);
        }
    }

    protected class TemplateDataAttribute implements TemplateEntity {
        private String tag;
        private String[] keys;

        public TemplateDataAttribute(String tag) {
            this.tag = tag;
            this.keys = tag.trim().split("\\.");
            if (this.keys.length == 0)
                this.keys = new String[]{"."};
            if (this.keys[0].isEmpty()) // if tag starts with "."
                this.keys[0] = ".";
        }

        public Object getObject() {
            if (data.containsKey(tag))
                return data.get(tag);
            else if (data.containsKey(keys[0]) && data.get(keys[0]) != null) {
                Object obj = data.get(keys[0]);
                for (int i=1; i<keys.length; ++i) {
                    obj = getFieldValue(obj, keys[i]);
                    if (obj == null)
                        return null;
                }
                return obj;
            }
            return null;
        }
        protected Object getFieldValue(Object obj, String attrib) {
            try {
                if (attrib.endsWith("()")) { // Is this a function call?
                    if (attrib.length() > 2) {
                        String funcName = attrib.substring(0, attrib.length()-2);
                        // Using a loop as the direct lookup throws a exception if no field was found
                        // So this is probably a bit faster
                        for (Method m : obj.getClass().getMethods()) {
                            if (m.getParameterTypes().length == 0 && m.getName().equals(funcName)) {
                                m.setAccessible(true);
                                return m.invoke(obj);
                            }
                        }
                    }
                }
                else if (obj.getClass().isArray() && "length".equals(attrib))
                    return Array.getLength(obj);
                else if (obj instanceof Collection && "length".equals(attrib))
                    return ((Collection) obj).size();
                else {
                    // Using a loop as the direct lookup throws a exception if no field was found
                    // So this is probably a bit faster
                    for (Field field : ClassUtil.getAllDeclaredFields(obj.getClass())) { // Only look for public fields
                        if (field.getName().equals(attrib)) {
                            field.setAccessible(true);
                            return field.get(obj);
                        }
                    }
                }
            } catch (IllegalAccessException | InvocationTargetException e) {
                logger.log(Level.WARNING, null, e);
            }
            return null;
        }

        public void compile(StringBuilder str) {
            Object obj = getObject();
            if (obj != null)
                if (obj instanceof Templator)
                    str.append(((Templator) obj).compile());
                else
                    str.append(obj.toString());
            else
                str.append("null");
        }
    }
}


text:
Q: Instance of 'Future>' on Flutter App I've got a problem with my code. I try to show on my App this function that calls a class that has an API request. When I try to print the data returned, it only prints Instance of 'Future<Map<dynamic,dynamic>>' instead of what it is expected (the Magnitud value).
I'm quite new to Flutter, so every tip is well-received and I would appreciate it.
My class is
class GaelApi {
  String magnitud;
  String ubicacion;
  String latitud;
  String longitud;
  String hora;

  Future<void> getDatos(int index) async {
    try {
      // obtiene datos
      Response response =
          await get("https://api.gael.cl/general/public/sismos");
      List<dynamic> data = jsonDecode(response.body);

      Map primerSismo = data[0];
      // obtener las propiedades
      magnitud = primerSismo['Magnitud'];
      ubicacion = primerSismo['RefGeografica'];
      latitud = primerSismo['Latitud'];
      longitud = primerSismo['Longitud'];
      hora = primerSismo['Fecha'];
    } catch (e) {
      print(e);
      magnitud = 'No se pudo calcular la magnitud';
      ubicacion = 'No se pudo calcular la ubicacion';
      hora = 'No se pudo calcular la hora';
    }
  }
}

and what I tried is
class _SismosState extends State<Sismos> {
  Future<Map> recabarDatos(int index) async {
    GaelApi instancia = GaelApi();
    await instancia.getDatos(index);
    Map<String, String> datos = {'magnitud': instancia.magnitud};
    print(datos);
    return datos;
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(

      body: ListView.builder(
        itemCount: 5,
        itemBuilder: (context, index) {
          return Padding(
            padding: const EdgeInsets.symmetric(vertical: 1.0, horizontal: 5.0),
            child: Card(
              child: ListTile(
                  title: Text("${recabarDatos(index)}",
                  style: TextStyle(fontSize: 17))),
            ),
          );
        },
      ),
    );
  }
}

and a picture is this link
failure
Thank you!


Kellogg has introduced a new cereal called HI! Happy Inside featuring prebiotics, probiotics and fiber. The Michigan-based CPG company said its new product makes digestive wellness support easily accessible.
HI! Happy Inside contains 1 billion live probiotics from active strains, 2.5 grams of prebiotics and 8 to 9 grams of fiber, depending on the variety. The cereal comes in Simply Strawberry, Bold Blueberry and Coconut Crunch flavors.
The new product is being sold in 34.5-ounce resealable bags at Costco and Boxed for a suggested retail price of $12.99, while six-count cups are available on Amazon at a suggested retail price of $13.99. Kellogg said individual cups will be available nationwide in food, drug and e-commerce channels in early 2019 for $1.99.
A new product designed to optimize digestive wellness could be an attractive addition to the cereal aisle for health-conscious consumers. Awareness of how probiotics can enhance gut health for consumers has increased, thanks to yogurt advertising campaigns and other outreach. Besides yogurt, probiotics are being added to juices, confectionery items, baked goods and even beer and wine.
But this isn't the first time Kellogg has used a functional add-on to boost its brands. Last year, the company repositioned its Special K cereal — mainly marketed as a weight-loss product — by adding probiotics and calling it Special K Nourish.
The use of probiotics and prebiotics is expected to significantly grow in the coming years due to its reputation for relieving digestive issues, boosting the immune system and contributing to the maintenance of balanced gut microbiota, or "good" bacteria. Demand for prebiotic-containing products — such as health drinks, dairy, infant food, meat and bakery products — could reach $7.8 billion by 2022, according to a Global Industry Analysts' report.
Despite the bright future projected for these ingredients, Kellogg might need to do some on-package and other consumer education about why prebiotics and probiotics are important to digestive health. A recent survey of more than 2,000 U.S. adults commissioned by the company found 29% said they were aware of probiotics, but just 15% said they knew about prebiotics.
Other companies are likely to introduce similar products since digestive and gut health is a trend in demand by consumers. Because of that, combining prebiotics, probiotics and fiber in one breakfast or snack product could be a winning combination for Kellogg, as well as for its competitors. One challenge that could curtail acceptance of the Kellogg product, however, could come in the price: a 34.5-ounce resealable bag of HI! Happy Inside at Costco and Boxed has a suggested retail price of $12.99. It remains to be seen whether enough consumers will be willing to pay that amount for a cereal despite its health benefits.
News of HI! Happy Inside comes as the company recently announced it plans to sell its Keebler bakery brands and cookie business. After years of slow growth, it looks like Kellogg is starting to shed underperforming brands to focus more on snacks and core products that remain popular and could help boost its bottom line. It will take some time to find out whether HI! Happy Inside cereal will significantly assist in that goal, but it could prove to be an interesting, on-trend effort nonetheless.
Top image credit: Kellogg Co.


text:
Pharmacy Guild says pharmacies must get rid of fax machines by end of 2020
Katie Scotcher, Reporter
@katiescotcher katie.scotcher@rnz.co.nz
Pharmacies have been given until the end of the year to throw out their old fax machines.
By the end of 2020, the machines used daily by some pharmacists need to be replaced with a secure, digital alternative.
The Ministry of Health (MOH) said the transition is needed because they are becoming increasingly incompatible with modern technology.
Wellington Pharmacist Angelia Liu uses a fax machine daily to send prescriptions and patient information to other health professionals across the country.
Occasionally, she said, Wellingtonians pop in to take advantage of the rare artifact too.
"People come in all the time and say 'oh, have you got a fax machine?' Sometimes people come in and say 'I need to fax something, can I use your fax machine because we know no one else with a fax machine'."
David McKee, the owner of Kaikōura Pharmacy, uses his fax machine up to 20 times a day.
That number increases when tourists flock to the coastal south island town in summer, he said.
"A lot of people are away on holiday in Kaikōura, they've run out of their medicines and they need them, so they need to get a prescription.
"They don't go and see the local GP, they phone up their doctor from wherever they are from and get their doctor to send a prescription to us to tell us what the patient needs and of course, that's all being done by fax."
But that will soon all change.
The Pharmacy Guild said all community pharmacies across the country need to replace their fax machines with a secure digital alternative by the end of 2020.
Chief executive Andrew Gaudin said in a statement he was confident the sector will manage.
But McKee questioned why anything needed to change.
"The old way works, there's no problem with it. I know faxes are considered archaic and if it wasn't for medicine and law, the fax machine would've died a natural death 15 years ago. We're the only ones keeping it going.
"But, it works. I don't feel we need to chuck something away that works perfectly well."
In a statement, the MOH said fax machines were still widely used by health agencies, but the older technology was becoming increasingly incompatible with more modern digital communication tools.
In July 2019 it signalled the need to start moving from fax to other secure digital solutions, it said.
Health organisations should be working through the change with IT teams and providers to find appropriate digital solutions, the MOH said.
Quidditch: the growing sport attracting LGBTQ athletes


Hello, I am Joe Martin, your 4th Ward Alderman. I have had the privilege and honor of serving the citizens of the 4th Ward for the past 16 years! I am the only alderman from the 4th Ward to have ever been reelected to a second term since Sterling went to an Alderman-City Manager form of government in 1974.
I have an active leadership role: I am currently serving as the Vice Mayor. I also served as Vice Mayor for the past 4 years. I have served as a Commissioner on the Liquor and Tobacco Commission for the last 16 years.
I am 56 years old and have been married for 29 years to Dr. Mary Martin, an audiologist at the Sterling-Rock Falls Clinic. I received my B.S. degree from Bradley University in Peoria, Illinois in 1978. I have been a member of the Sterling Optimist Club since 1991. I served as President twice.
I am a member of St. Mary's Catholic Church. I volunteer for the Ecumenical Minister of the Eucharist and for shut-ins at the Sterling Pavilion. Also, I am a die-hard St. Louis Cardinal Baseball fan.
If you would like to contact me, please call (815) 626-6739.
All content ©2019 City of Sterling, Illinois (unless otherwise noted).


The Irish striker who hails from Dundalk, Ireland was named the Offensive MVP of the adidas/IU Credit Union Classic in Bloomington. He played a key role in Notre Dame's 2-1 win over Stanford and 5-0 victory over California.
In the tournament opener against Stanford, Gallagher scored off a give and go with junior forward Jeffrey Farina in the 86th minute of regulation to tie the contest 1-1 and send it into overtime. Irish defender Brandon Aubrey then scored out of a free kick in the 104th minute of action to give the Irish a gutsy 2-1 come from behind win over the Cardinal.
In the contest with California, Gallagher contributed a goal and two assists. He scored on a break away after receiving a goal kick from Irish netminder Chris Hubbard who was credited with an assit on the play.
Notre Dame is off to a very impressive 4-0-0 start. The Irish now return to Alumni Stadium where they will host ACC foe Virginia Tech on September 9, 2016.
Morris played a key role in Stanford's 3-1 win over a very tenacious and talented Ohio State Buckeye team to advance to the Elite Eight in the NCAA Tournament. Morris scored his ninth and tenth goals of the season in the contest. Morris netted the first goal for the Cardinal after a nice combination of passes with teammate Eric Verso chipping the ball forward to Morris who then dispatched it into the back of the net. Morris' second goal which proved to be the game-winner resulted when teammate freshman Amir Bashti made a nice move in tight space to create the angle he needed to send a back heeled pass to Morris which Morris then bent into the back of the goal.
Next up for Stanford is a cross country trip and a date with number one seeded Wake Forest in the Elite Eight on Saturday with a trip to the College Cup on the line.
Enstrom who is from Huddinge, Sweden came up with two huge goals this week for the Eagles. He scored the lone goal of the contest in Boston College's 1-0 win over Vermont in the first round of the NCAA Tournament. He also drove a shot into the lower left corner of the goal in overtime to give the Eagles the edge they needed to top number fourteen seeded South Florida 2-1 to survive and advance to the Sweet Sixteen. Enstrom has scored a total of nine goals so far this year.
Boston College improves to 11-7-1.
The Eagles will seek to continue to advance in the NCAA Tournament but things don't get any easier for Enstrom and his Boston College teammates who now face number three seeded Georgetown in Washington.


text:
How to Help Out Dry Hands and Feet
Today's Headlines: Sleep, Running and Sports
New Laser Treatment May Help Slow Blindness in Thousands
by The Dr. Oz Show
Age-related macular degeneration (AMD) is a disease that affects millions of Americans and is the leading cause of blindness among the U.S. population. Once started, the disease is irreversible. As a result, a significant amount of research has gone into figuring out how to either slow the progression of the disease or even reverse its effects.
What was the new insight in this research?
A team of researchers developed a new laser treatment that may slow and stave off the worst effects of the disease. The breakthrough came in the combination of two pieces of information. The first was the observation that AMD is a slow disease that takes many years to cause blindness. That means that there's a long period of time that doctors have to jump in and stop the slowly destructive process before it's too late.
The second piece of information was that earlier studies that had found that using lasers at low enough power in short enough flashes could help stop and even reverse some of the effects of damage in the eyes of diabetics. When applied to people with symptoms of AMD, other studies found improvements as well. Combining these ideas, the researchers wondered if the laser treatment might be used to treat people in the early stages of AMD to prevent signs of blindness from ever showing up.
How did the researchers test their laser?
To do this, the researchers embarked on studies in both mice and people. Doing this allowed them to get a better understanding of what was happening when eyes were treated with the rapid, low-power laser, called a nanosecond laser. They could observe the changes in mice and humans and then look at the eyes of the mice after they died to see what those changes looked like on a microscopic scale.
The researchers followed the people treated with the nanosecond laser for two years and compared them to people who hadn't been treated. They found that the eyes of those treated with the laser had fewer signs of damage to the light-sensing portion of their eye, called the retina, than those who hadn't had the treatment. A few even saw these effects completely disappear. This effect remained for the two years each person was followed. Another test of the retina found that the usual signs of disease progression had stalled, so that those treated with the laser didn't seem to have the expected progression of their blindness.
The team then looked at the eyes of the mice for signs that the laser might have damaged the retina. Traditional lasers used for eye surgeries tend to leave a mark on these sensitive tissues at the back of the eye that never goes away. The team saw no sign of this sort of damage in the mice, even when they looked on a microscopic level. There were even indications that healing of the disease damage might be taking place.
How did the laser do this?
When they examined the mice eyes for genetic changes that might explain these effects, they found the laser seemed to activate genes important in controlling the space in between the different layers of the eye. When these genes malfunction, old debris starts to build up and cause damage. By reactivating these genes, the laser stimulated these housekeeping genes to remove the buildup causing damage.
What does this mean for you?
The fact that this laser has already been used in people and has been shown not to damage the retina at all means it could move very quickly into use for treating AMD in its early stages. That could mean years of sight added to those most at risk of blindness from AMD.
Related topics: Eye health | Health News | + In the News
The Oz Blog's Medical Research Team furthers the mission of the The Dr. Oz Show by facilitating a larger conversation on health, wellness, and important medical news as it happens. Stay informed, stay one step ahead, and stay healthy.
Today's Headlines: Stress, Allergies and Wine
Flu Season Is Still On
When It Comes to Salt, It's Not All About Blood Pressure


Someone wise once said, "Do what you love and you'll never work a day in your life." I definitely feel lucky to wake up each morning with renewed excitement and passion about helping my clients achieve the best version of themselves. From fantasy color to mink lashes, from top-of-the-line extensions to specialty beard care I want to help you accomplish your dream look. I attend the International Beauty Show in Las Vegas every year to conquer the latest trends and techniques. I go above and beyond for my clients with a 24/7 availability, so whether you need me at 2pm or 3am, I'll see you then!!
Sally has been my stylist from the day she graduated school. She's done everything from a mega cut with hair donation to a full head of klix and NBRs. She's colored, waxed cut curled up done etc for me and my girls and i will follow her wherever she goes. I've never had a complaint on anything she's done and if I needed any kind of modification she would fit me right in and do it.


text:
'use strict';

module.exports = {
  root: true,
  extends: '@dfreeman',
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
  },
  rules: {
    '@typescript-eslint/no-non-null-assertion': 'off',
  },
};


– Living and Guest Rooms Kentucky Murphy Beds. Horizontal Metropolitan Murphy Bed. Murphy Bed With Sofa. Horizontal Urban Murphy Bed. Vertical Murphy Beds. Murphy Bed Dimensions Full Size Inspiration Murphy Beds. Wall Bed Plans Twin Size Murphy Bed is Perfect For. Urban Stack Murphy Bunk Bed Murphy Bunk Beds.
Murphy Bed Queen Size Home Ideas. Penthouse Murphy Bed with Hutch. Best 25 Bed dimensions ideas on Pinterest. Twin Size Murphy Bed Plans.
tags: murphy bed frame. murphy bed pinterest. murphy bed table. murphy bed rv trailer. murphy bed table bination. murphy bed replacement parts. murphy bed tv bination. murphy bed atlanta. murphy bed grand rapids mi. murphy bed seattle.