text:
Sonal Sachdev Patel shares on Gita and the influences it has got on our lives
October 3, 2018 mumsandstories.com Featured Stories, Inspirational Mums, Interesting Stories, Reviews 0
Sonal Sachdev Patel and Jemma Wayne –Kattan are the authors of the book Gita-The Battle of the Worlds. Published by HarperCollins Children's Books and illustrated by Soumitra Ranade, the book is an absolute must for children who are stepping into their teens. Do read our short review at the end of the article.
We at Mums and Stories also got to interact with Sonal and here's what she has to say on her being an author, her childhood memories, her writing and why she considers Gita is important in our lives?
Sharing her story with Mums and Stories, London based Sonal Sachdev Patel says, "I grew up with my parents, twin sister and elder brother on the outskirts of North London. My parents had come to the UK from East Africa in the 1960s. They were poor in possessions but rich in love, ambition and happiness. Their families had followed in droves after the exodus of Idi Amin.
We grew up with a wonderful mix of East and West. Our parents pushed us to embrace the best of what Britain had to offer, whilst retaining our Indian heritage. We were educated at one of the top British girls' school and absorbed from the melting pot of cultures that live in London. My mother has always been deeply spiritual and from a young age, I saw her bringing many of the ideals of Hinduism into our lives – be it through welcoming family into our home or sharing stories of Krishna and Ram and Sita. I was fortunate to be welcomed and included wherever I went – I would swap my puris for white bread jam sandwiches and see my friends stare in awe and admiration as my Nani would occasionally accompany my Nana to school to collect us – dressed in a sari, a bold bindi on her forehead and bright white trainers on her feet.
My interaction with the Gita began when I was a young girl. My sister and I slept on a bunk bed. The top bunk was the most sought-after place to sleep. It symbolised power, victory and ultimately superiority. Born five minutes before her gave me seniority which meant the top bunk was mine. Our family temple was in the corridor outside our room – a collection of statues and pictures of various Hindu Gods and Goddesses. The two that had the greatest impact on me were baby Krishna – his eyes magnetizing and inviting; and Ma Ambama – a fierce woman leader – trident and sword in hand seated atop a tiger, who has been a role model for me.
From that special height on the top bunk, I would often wake to the sight of my mother, seated in front of the temple, the dim light of the diva gently illuminating the yellowish pages of the Gita she was reading. I did not read the Gita myself until I was much older, but I saw what a magical relationship she had with this book.
When I did finally read the Gita during my pregnancy, I found the text dense and difficult to understand. It was a desire to take the inspirational messages of the Gita to my children in a modern and relatable way that led me to want to create this new work.
(Sonal Sachdev Patel with her daughters)
Talking about her beginnings in writing, Sonal shares, " I worked in strategy consulting in India and the UK and it was a brilliant way to turbocharge my career. The skill set I learned in that face paced environment was second to none. Ultimately what caused me to change was the desire to take these skills that I had learned in the for-profit world and apply them to the non-for-profit space.
Writing was not simply about the writing process itself – but more about the message and the story that I felt passionate about. These special truths that are an integral part of humanity – not religion – that could be shared in a universal way.
My co-author Jemma Wayne Kattan is not only a talented author and journalist but also a close friend. We had grown up together and so approaching her for her opinion initially, and then ultimately to collaborate on creating this new work together felt totally natural.
Working together was such a fun and dynamic process as we were really able to spark off one another and ultimately create something which built on both of our strengths – my knowledge and vision for the messages and her creative writing and talent as a storyteller.
As a mother, I wanted to share the beauty and wisdom that is written in the Gita in a modern and relatable way that my children would want to pick up and read. It shouldn't be a chore to learn these messages, but an interesting and engaging story that they don't want to put down.
The Gita teaches us how to win this battle of life. In our story, we bring out two main themes based on the interpretation of Paramahansa Yogananda. The first is this idea of introspection – or turning within.
The epic battle that takes place in the Gita between the Pandavas and the Kauravas is actually a metaphor for the internal battle that takes place within ourselves every day between our good and bad tendencies.
We can take this concept and at the end of each day think through what has happened on the "battlefield" of our own life.
Have we been kind, caring, thoughtful? If not – can we try harder tomorrow?
Secondly, meditation is a strong theme and our main character Dev uses this tool of meditation to create calm and become more peaceful. In our face paced, technology-filled modern world, meditation is even more relevant in tapping into that inner spiritual consciousness which is within each one of us.
Thirdly, we focus on the universality of the Gita – how the fundamental messages such as karma, reincarnation and duty are common to all of us and not limited by religion. These principles underly humanity and unite all of us.
This extract (taken from the book) follows the scene where Krishna reveals Himself to Arjun. We depict this many-headed divine being with heads of men, women and children of all backgrounds. The purpose of this illustration was to further emphasise the point of the universality of God – and that He is within each one of us. Moreover, it is the feeling of God that we wanted to get across to children.
"Before you discover how it looked, it is important you know how it felt because the way it made Arjun feel was extraordinary. Of course, it's difficult to describe. How would you describe the juiciness of an orange to someone who's never tasted it? You could talk about the zesty scent, the sweetness on the tongue, the liquid exploding in the mouth, but still, you wouldn't quite capture it in its wholeness. So it was with Krishna." (A paragraph from the book Gita-The Battle of the Worlds)
Talking on her deep connection with Indian culture and roots Sonal shares, " As NRIs, I think we are acutely aware of losing our culture and our identity. We are conscious that we are not immersed in it because we are away from our Mother country and therefore we make all the more effort to stay connected. I lived in India when I was in my twenties, and I saw that the culture permeates via many small things that knit together to create this Incredible India. From the garlanded tiny Ganesh statue I saw in the new subway sandwiches outlet, to the girl touching the feet of her Grandmother as she went to school to the incense rising up out of a roadside stall."
Sonal also has a word of advice for mums who are keen to pursue their interests. She shares, "Carve out time when you are at your most creative. Mums are the ultimate multi-taskers – being bombarded by a multitude of demands. For me, my most productive time is early morning when everyone else is asleep – I go to my writing space and I achieve in one hour what it would take me three during the day."
I also feel as a mother one has the ability to shape the kind of family, one wants. Do you want to go on adventures together, cuddle under the covers on a Sunday morning or be directing your kids in their homework. I see a mother play a hugely central role – what kind of values do you want to guide your family? What norms will you implement in the way you interact with each other? Being an author is similar – the story is yours and it is up to you to shape it into something you are proud of."
Mums and Stories thanks Sonal for sharing her view on writing the book, her advice to others and on Gita and its importance in our lives.
Here is a quick Review of Gita –The Battle of the Worlds
Plot of Gita- The Battle of the Worlds– Dev, a young boy loses his father to death and the battle of ego, frustration and irritability takes a turn with him meeting Sanjay a more than life like character who helps Sanjay in combating his anger. This story will be a good read for adults and children and to those kids who might be in a tough situation like they have lost someone in the family.
(A page photograph from the book Gita-Battle of the Worlds)
Beautifully illustrated, the story is meant for readers who can understand the deeper meaning of life, sadness, anger with situations as life presents. As an interpretation of the original Gita, this narrative will connect with readers who are probably going through a tough situation or even those who can understand that life need not be fair all the time.
This is a good story to be introduced if you are planning to introduce the child to Mahabharata as there are references to the story. What we liked particularly and that which might be of immense help to younger kids is the concept of ego explained and handled in the book with direct story references to the Mahabharata.
In present context, it is the ego- the everyday battle within our mind and perhaps one of the effective methods to tackle them like meditation can be considered in our lives. Another point is our unnecessary obsession on having bottled up emotions. Sometimes it is better to let it go just like many things in life.
The book is available here
( All photographs are subject to copyright)


Fabulous Collection of Mid-Century (1940's-1980's) Highest Quality Vintage Grosgrain Trims. Available in Multiple Widths, Colors, and Compositions of Cotton Rayon, Silk Blend,and Rayon. This Ribbon does not have a scalloped or saw-toothed edge.


Generally I've been struggling with an ethical question of this project, should I be publishing the IP addresses and personal identification of individual people I find? I can't imagine that anyone reading this would take that info and do anything untoward with it, but it's an odd stance on surveillance culture to dox strangers meaninglessly, even if the ability to reach out and randomly touching a stranger is the reality of networked existence. Currently I'm erring on the side of publishing IPs, since they are an important part of my process and should be documented, and then including anything from WhoIs records as is valid to the project, since WhoIs is meant to be public record. Things like hacker tags and defacements that I find I definitely will publish though. Happy to get input on this.
Day 1 I'm starting with some low hanging fruit: looking for people who've left VNC servers running without passwords. VNC (standing for Virtual Network Computing) is a framework for remotely logging into a computer using a GUI, and is a common alternative to ssh for people who don't know how to use the command line or need GUI functionality on their remote machine. To do this on Shodan I searched for IPs with port 5900 open, since VNC typically runs on 5900, and then just started trying to connect using VNC Viewer as a client. Well the second result I found on Shodan didn't have a password and had already been totally overrun with trolls leaving each other notes and tearing apart the server. When I first logged in someone had drawn a bunch of swastikas in MS Paint and made it the background of the desktop, which I quickly changed, and someone else was playing solitaire. The server was running Microsoft Windows Server 2000 as its operating system, so it had a bunch of the classic 1999 features of Windows like MS Paint and grey boxes UI. It was a little nostalgic.
Looking around I got kind of nervous because I could tell other people were also in this machine. It's uncomfortable to be in a computer with a bunch of other people, at least one of whom is a nazi. Whoever was playing solitaire was clearly very engaged because they kept pulling the window back to the front. Some hacker going by yellows111 had left a tag. It looks like they use that tag a lot and I found their twitter, github, soundcloud, steam account, youtube, etc. They have a bot of them that you can add to your discord server so if you want you can have yellows111 in your life at all times. Judging from their Youtube they like to go around trashing old Windows servers and might have been the one playing solitaire.
The man who owns this server lives in Missouri and purchased the server space from Wholesale Internet. I think he's getting ripped off, at minimum $10/month for a server running an almost 20 year old operating system is pretty bad.
There were some more mysteries though that are up to the reader to interpret. Here is a traceroute result from me to the IP. What's onliare.com? It doesn't resolve to anything in a browser.


text:
Licensed Unlicensed Requires Authentication Published by Harvard University Press 1967
George Ticknor and the Boston Brahmins
David B. Tyack
https://doi.org/10.4159/harvard.9780674594685
TyackDavid:
David Tyack is Vida Jacks Professor of Education and Professor of History Emeritus, Stanford University.
Literary Studies, general
Topics in History
Requires Authentication
Licensed Download PDF i
Publicly Available Download PDF ix
Licensed Download PDF 1
I: The Formative Years
II: Α Yankee Abroad
Licensed Download PDF 43
III: The Cause of Sound Learning
IV: The True Uses of Literature
Licensed Download PDF 129
V: Gentleman of letters
VI: Clouded Destiny
Book George Ticknor and the Boston Brahmins
David B. Tyack 2013
Tyack, David B.. George Ticknor and the Boston Brahmins, Cambridge, MA and London, England: Harvard University Press, 2013. https://doi.org/10.4159/harvard.9780674594685
Tyack, D. (2013). George Ticknor and the Boston Brahmins. Cambridge, MA and London, England: Harvard University Press. https://doi.org/10.4159/harvard.9780674594685
Tyack, D. 2013. George Ticknor and the Boston Brahmins. Cambridge, MA and London, England: Harvard University Press. https://doi.org/10.4159/harvard.9780674594685
Tyack, David B.. George Ticknor and the Boston Brahmins. Cambridge, MA and London, England: Harvard University Press, 2013. https://doi.org/10.4159/harvard.9780674594685
Tyack D. George Ticknor and the Boston Brahmins. Cambridge, MA and London, England: Harvard University Press; 2013. https://doi.org/10.4159/harvard.9780674594685
Publisher: Harvard University Press
Edition: Reprint 2014
Audience: Professional and scholarly;
Front matter: 10
Main content: 289
Other: 12 halftones
Keywords: Ticknor, George, 1791-1871.

redpajama_set_name: RedPajamaCommonCrawl


Certified as a great place to work compagny by the Great Place To Work Institute in 2017/2018, ACCEO Group, consulting and building engineering firm, is a key player on its market.
Created in 2003, we operate on 5 highly technical fields through our divisions: ACCEO Elevation, ACCEO Lift, ACCEO Energy, ACCEO Accessibility and ACCEO Asbestos.
With 16 agencies in France, our network, led by high-level employees, is also established internationally.
With more than 5 years of double-digit growth and a turnover of €20 million for 200 employees, the ACCEO Group is structured around dynamic teams with a start-up state of mind.
Every employee receives quality training from his arrival and all along his career, to allow a quick skills development and offer him concrete prospects for growth (France / international).
Flexible and rich in innovation, the ACCEO Group puts the individual at the center of its strategy and sees exciting projects emerge every day.
Develop, monitor and win the loyalty of your customers and prospects portfolio, made up of local authorities, property administrators, hospitals and public housing offices.
Ensure administrative and financial monitoring of ongoing missions.
Ideally holder of a master degree in Business and/or Engineering School, you have at least 3 years of experience in commercialization of provision of services.
You ideally know the elevator world and have a strong growth potential which will allow you to take in charge all the functions of Manager in the short or medium term.
You want to work in a dynamic environment which rewards performances, you demonstrate excellent interpersonal and commercial skills and an entrepreneurial spirit, so do not hesitate to apply!


With the greatly anticipated Kindle Fire II hitting the tablet market, Apple will have to up its game if it's going to keep from getting its fingers burned, writes Matt Muller, technical director, Wunderman.
The launch of Amazon's new tablet in the US comes at an interesting time; the tablet sector is currently dominated by Apple's iPad - but entering the fray shortly will be Microsoft's own brand of Surface tablets, new Sony tablets and the elusive iPad Mini.
The contest is now truly on for who can provide the most engaging content, apps and games on their platforms and the new Kindle Fire has just become the competitor to watch.
The Kindle Fire has made a significant impact on the US tablet market. Retailing at half of the price of the iPad, it has enjoyed sell out success, capturing 22% of the market share.
Its accomplishments cannot be attributed to a single cause. Amazon has built up credibility and a loyal consumer base with its Kindle ebook reader devices.
Many existing Amazon Kindle customers have upgraded to the Kindle Fire to gain tablet features such as a colour screen and the apps ecosystem, which add to an already seamless ebook reader and online bookstore experience.
Additionally, the $199 (£123) price point of the Kindle Fire has put a tablet device into the reach of many consumers who might have been apprehensive about spending $399 (£248) - priced £399 in the UK - on an Apple iPad.
With the Kindle Fire booming in the States, and the Kindle Fire II's launch adding fuel to the flames, Apple has found itself in danger of getting singed.
This is not about hardware as the margin Amazon makes on the tablet itself, given its specs and price point, is minimal.
Amazon has an impeccable reputation as one of the most visited online retailers. The problem for Apple is that Amazon is creating an exclusive route to market for software and digital content ecosystem - a model pioneered by Apple's App store and also to be followed by Microsoft with the Surface RT version (an edition of the soon to be released Windows 8).
Apple has a new rumoured weapon of its own - the iPad Mini. The competition in the 7-inch tablet space is hotting up and for those in the market to purchase one of these devices the solution is obvious - wait until they are all announced and then make a decision based on which one will be the best match for your lifestyle.
The key consumer considerations for the mini-iPad will be competitive pricing in addition to specification and form factor. If Apple can deliver to these expectations, it will make the mini-iPad a strong contender in the 7-inch tablet market.
With speculation around a smaller iPad rife, the question as to whether or not the release of a market cornering premium product, such as the iPad, followed by a cheaper alternative to secure the market remainder is becoming a strategy by Apple, as seen with the iPod and iPod Nano.
Despite Apple's apparent meticulous scheming, the truth is less conspicuous. Innovation and developing quality consumer products is at the core of its ethos.
It is logistical, rather than dubious, for them to launch their flagship product first to ensure they meet consumer expectation.
Early generations of a product incur high manufacturing costs. As the development process matures, newfound manufacturing efficiencies can be leveraged to build cheaper versions.
The Kindle Fire II measures up to the iPad with its high definition screen, fast processor, front facing camera, HDMI output, 16GB or 32GB storage, Bluetooth and 4G LTE on its 8.9 inch version.
It uses Amazon's Silk Browser, which utilises user browsing patterns and pre-fetches content by anticipating which sites users will browse to next. This technology also delivers a new feature called Trending Now, which shows the most popular web pages being browsed by Kindle Fire users.
The browser also comes with better HTML5 support, faster page loads and an improved start page.
At the moment, Apple continues to dominate the tablet war with their advanced technology and mature content ecosystem (iTunes and the App Store).
However, as more combatants enter the battle field, and strong contenders such as the Kindle Fire II arise, the pressure is on Apple to produce the next big innovation in product experience to keep their edge.


We are conveniently located near Derwenthorpe, in the heart of Osbaldwick, in the village hall. We are just off Hull road close to local schools, bus routes and York city centre is approximately 2 miles away.
We have a beautiful large indoor play area which has been recently refurbished. The village hall has been transformed into a bright, warm and welcoming environment. We have 2 separate areas one for 2-3 year old and one for 3 years and above. This allows us to better plan activities and provide age appropriate resources and experiences.
We provide high quality child care and education which is flexible and affordable. We currently have places for children aged 2 – 5 years. We also provide 15 hours free care to children aged 3 and 4. We can offer free places for two year olds depending on your circumstances. We have flexible terms and offer hourly places to suit your needs. Please see our hours and fees section for more details.
30 HOURS FREE FOR 3 AND 4 YEAR OLDS (DEPENDING ON CIRCUMTANCES) LIMITIED SPACES AVAILABLE SO CONTACT US TO RESERVE YOURS NOW!
You can see activities and events that your child has been involved in on our dedicated "parent zone" on Facebook. We include photos, information and important events.
The children have access to an outdoor garden area and a lovely allotment space.
If you would like any further information or to reserve a place for your child please contact us to arrange a visit and to register your child.


text:
Entertainment calendar, 02.28.18 through 03.06.18
Windsor | February 27, 2018
Hunter Stone, 6 p.m., High Hops Brewery, 6461 Hwy. 392. Details: http://www.highhopsbrewery.com/events.html.
Caleb Martin, 5 p.m., High Hops Brewery, 6461 Hwy. 392. Details: http://www.highhopsbrewery.com/events.html.
Don Graham, 7 p.m., Broken Plow Brewery, 4731 10th St. Details: http://www.brokenplowbrewery.com.
Katie Harris And Ryan Fourt, 7 p.m., Broken Plow Brewery, 4731 10th St. Details: http://www.brokenplowbrewery.com.
Josh Hoyer & Soul Colossal with Special Guests, 8 p.m., Moxi Theater, 802 9th St. Details: http://www.moxitheater.com.
Timbre, 4 p.m., Broken Plow Brewery, 4731 10th St. Details: http://www.brokenplowbrewery.com.
Glass Cases with Macy Warner, 7 p.m., Avogadro's Number, 605 Mason St. Details: http://www.avogadros.com.
Kyle Hollingsworth Band with Hot Buttered Rum, 9 p.m., Aggie Theatre, 204 College Ave. Details: http://www.aggietheatre.com.
The Poudre River Irregulars, 4 p.m., Avogadro's Number, 605 Mason St. Details: http://www.avogadros.com.
Marcella Arguello, 6:30 p.m., Aggie Theatre, 204 College Ave. Details: http://www.aggietheatre.com.
Halden Wofford and the Hi Beams, 8:30 p.m., Avogadro's Number, 605 Mason St. Details: http://www.avogadros.com.
Dead Floyd with Midnight North, 8 p.m., Aggie Theatre, 204 College Ave. Details: http://www.aggietheatre.com.
Bonnie and the Clydes with Liz Barnez Opening, 7 p.m., Avogadro's Number, 605 Mason St. Details: http://www.avogadros.com.
SOLD OUT – 3OH!3 Day feat. 3OH!3 with Special Guests, 8 p.m., Aggie Theatre, 204 College Ave. Details: http://www.aggietheatre.com.
Red, White & Tuna, 7 p.m., Windsor Community Playhouse, 561 E Garden Dr. Unit A. Details: http://www.windsorplayhouse.org.
Student Recital: Tyler Mckisson, Viola, 4:30 p.m., UNC Campus, Kepner Hall, 800 17th St. Details: arts.unco.edu/events.
Jesus Christ Superstar, 7:30 p.m., Langworthy Theatre, 1710 9th Ave. Details: https://tickets.unco.edu/arts.
Student Recital: Zachary Winkler, Voice, 6 p.m., UNC Campus, Kepner Hall, 800 17th St. Details: arts.unco.edu/events.
Student Recital: Zachary Rich, Jazz Composition, noon, UNC Campus, Frasier Hall, 1710 9thAve. Details: http://arts.unco.edu/events.
Student Recital: Jessica Bachman, Cello, 4:30 p.m., UNC Campus, Kepner Hall, 800 17th St. Details: http://arts.unco.edu/events.
Classical Mystery Tour with The Greeley Philharmonic Orchestra, 7:30 p.m., Union Colony Civic Center, 701 10th Ave. Details: (970) 356-5000.
United States Navy Concert Band, 7 p.m., Union Colony Civic Center, 701 10th Ave. Details: (970) 356-5000.
Jesus Christ Superstar, 2 p.m., Langworthy Theatre, 1710 9th Ave. Details: https://tickets.unco.edu/arts.
Joint Student Recital: Arianna Hickey and Matt Hoenecke, Jazz, noon, UNC Campus, Frasier Hall, 1710 9th Ave. Details: http://arts.unco.edu/events.
Student Recital: Taelor Blakesley, Clarinet and Bass Clarinet, 6 p.m., UNC Campus, Kepner Hall, 800 17th St. Details: arts.unco.edu/events.
UNC Jazz Thang, 7 p.m., Moxi Theater, 802 9th St. Details: arts.unco.edu/events.
Student Recital: Hannah York, Voice, 5 p.m., UNC Campus, Kepner Hall, 800 17th St. Details: arts.unco.edu/events.
Student Recital: Margaret Moyer, Voice, 6 p.m., UNC Campus, Kepner Hall, 800 17th St. Details: arts.unco.edu/events.
Always, Patsy Cline, 6 p.m., Fort Collins Marketplace, 3750 Mason St., Details: https://midtownartscenter.com/shows-tickets/always-patsy-cline.
Waiting for the Parade, 7:30 p.m., Bas Bleu Theatre, 401 Pine St. Details: http://www.basbleu.org.
American Lullaby IMPACT Dance Company, 7:30 p.m., Lincoln Center Magnolia Theatre, 417 Magnolia. Details: http://www.lctix.com/american-lullaby.
Masterworks #4 Legends & Lore Fort Collins Symphony, 7:30 p.m., Lincoln Center Magnolia Theatre, 417 Magnolia. Details: http://www.lctix.com/masterworks-4-legends-lore.
Always, Patsy Cline, noon, Fort Collins Marketplace, 3750 Mason St., Details: https://midtownartscenter.com/shows-tickets/always-patsy-cline.
American Lullaby IMPACT Dance Company, 2 p.m., Lincoln Center Magnolia Theatre, 417 Magnolia. Details: http://www.lctix.com/american-lullaby.
Siro-A: Techno Circus LC LIVE, 7:30 p.m., Lincoln Center Magnolia Theatre, 417 Magnolia. Details: http://www.lctix.com/siro-a.
The Merry Widow Presented by Loveland Opera Theatre, 7 p.m., Rialto Theater Center, 228 4th St. Details: http://www.rialtotheatercenter.org/the-merry-wido.
The Merry Widow for Kids Presented by Loveland Opera Theatre, 2:30 p.m., Rialto Theater Center, 228 4th St. Details: http://www.rialtotheatercenter.org/the-merry-widow-for-kids.
The Merry Widow Presented by Loveland Opera Theatre, 2:30 p.m., Rialto Theater Center, 228 4th St. Details: http://www.rialtotheatercenter.org/the-merry-wido.
Thursday – Saturday
Fire and Crime, all day, Windsor Art & Heritage Center, 116 5th St. Details: http://windsorgov.com/632/Art-Heritage-Center.
Monday- March 10
Doug's Hang Up, 10 a.m., 818 9th St., Details: (970) 475-1931.
Showcase Art Center, 10 a.m., 1335 8th Ave., Details: (970) 356-8593.
Tointon Gallery, 9 a.m., 651 10th Ave., Details: (970) 350-9454.
Madison and Main Gallery, 10 a.m., 927 16th St. Details: (970) 351-6201.
Saturday – April 29
Brandon S. Gellis: Innate Confluences, all day, Loveland Museum/Gallery, Lincoln Gallery, 503 Lincoln Ave. Details: http://www.lovelandmuseumgallery.org/art-exhibits/brandon-s-gellis-innate-confluences.
Saturday – March 25
Tunnel Vision, Colorado Big Thompson Water Project and Tunnels, all day, Loveland Museum/Gallery, Lincoln Gallery, 503 Lincoln Ave. Details: http://www.lovelandmuseumgallery.org/art-exhibits/tunnel-vision.
Saturday – May 13
Earth, Air, Fire, Water: Colorado Mosaic Artist's Exhibition, all day, Loveland Museum/Gallery, Lincoln Gallery, 503 Lincoln Ave. Details: http://www.lovelandmuseumgallery.org/art-exhibits.
The Shape Of Water, 1 p.m., Kress Cinema & Lounge, 817 8th Ave. Details: http://www.kresscinema.com.
Three Billboards Outside Ebbing, Missouri, 4 p.m., Kress Cinema & Lounge, 817 8th Ave. Details: http://www.kresscinema.com.
Call Me By Your Name, 7 p.m., Kress Cinema & Lounge, 817 8th Ave. Details: http://www.kresscinema.com.
Oscar Shorts 2018: Documentary A, 11:45 a.m. and 6:15 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Oscar Shorts 2018: Documentary B, 11:50 a.m. and 2 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Oscar Shorts 2018: Live Action, 4 and 8:45 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Oscar Shorts 2018: Animation, 11:15 and 6:45 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Call Me By Your Name, 3:45 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Phantom Thread, 1:45 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
The Shape of Water, 1:10 and 8:10 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Three Billboards Outside Ebbing, Missouri, 8:30 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Lady Bird, 4:40 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Oscar Shorts 2018: Documentary A, 2:30 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Oscar Shorts 2018: Documentary B, 12:30 and 6:45 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Oscar Shorts 2018: Live Action, 11:50 a.m. and 6:35 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Oscar Shorts 2018: Animation, 11:55 a.m., 4:50 and 9:35 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe.com/showtimes.
Call Me By Your Name, 8:40 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe. com/showtimes.
Phantom Thread, 1:50 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe. com/showtimes.
The Shape Of Water, 4:40 and 8:50 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe. com/showtimes.
Three Billboards Outside Ebbing, Missouri, 2 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe. com/showtimes.
Lady Bird, 4:30 p.m., The Lyric, 1209 College Ave., Details: http://www.lyriccinemacafe. com/showtimes.
Elevation 5003 Distillery Tour – Young Adult Excursions, 6 p.m., Windsor Community Recreation Center, 250 11th St. Details: http://windsorgov.com/Calendar.aspx?EID=3481.
Weekly Trivia, 7 p.m., Forgotten Roots Winery, 624 Main St. Details: http://www.facebook.com/Forgottenrootswinery.
Intro To Email, 9:30 a.m., Riverside Library, 3700 Golden St. Details: http://www.MyLibrary.us.
Kids Create: Art Inspired By Books, 6 p.m., Riverside Library, 3700 Golden St. Details: http://www.MyLibrary.us.
"OUR GANG" Leads And Local Speakers, 7:30 a.m., Evans Area Chamber of Commerce, 3819 Saint Vrain St., No. C, Details: (970) 330-4204.
On The Road To Reading Literacy Fair, 10:30 a.m., Riverside Library, 3700 Golden St. Details: http://www.MyLibrary.us.
The Basics: Memory Loss, Dementia And Alzheimer's, 2 p.m., Riverside Library, 3700 Golden St. Details: http://www.MyLibrary.us.
Monthly Low-Cost Vaccination Clinic, 1:30 p.m., Humane Society of Weld County, 1620 42nd St. Details: http://www.weldcountyhumane.org.
Family Storytime, 9:30 a.m., Riverside Library, 3700 Golden St. Details: http://www.MyLibrary.us.
Historias Al Lado Del Rio, 10:30 a.m., Riverside Library, 3700 Golden St. Details: http://www.MyLibrary.us.
tuesday, March 5
Twinkle Babies, 9:30 a.m., Riverside Library, 3700 Golden St. Details: http://www.MyLibrary.us.
Family Yoga Storytime, 10:30 a.m., Riverside Library, 3700 Golden St. Details: http://www.MyLibrary.us.
UNC Women's Basketball vs. Portland State, 7 p.m., UNC Butler-Hancock Center, Butler-Hancock Athletic Center, 1600 23rd St. Details: http://uncbears.com/tickets.
UNC International Film Series: Oscar Shorts, 7 p.m., Michener Library: Lindou Auditorium, 1400 22nd St. Details: (970) 351-2971.
Trivia! Broken Plow Brewery, 7 p.m., 4731 10th St. Details: (970) 301-4575.
Vinyl Listening Parties, 7 p.m., Wiley Roots Brewing Company, 625 3rd St. Unit D. Details: http://www.facebook.com/wileyrootsbrewing.
Greeley Chamber Leads Group, 7:30 a.m., Greeley Chamber of Commerce, 902 7th Ave. Details: (970) 352-3566 or http://www.greeleychamber.com.
Greeley Noon Toastmasters, noon, Greeley Chamber of Commerce, 902 7th Ave. Details: (970) 352-3566 or http://www.greeleychamber.com.
UNC International Film Series: Oscar Shorts, 7 p.m., Michener Library: Lindou Auditorium, 1400 22nd St. Details: (970) 351-2971
Parent's Heartbeat, 7 p.m., North Range Littler Prevention Campus, 2350 3rd St. Rd. Details: http://www.northrange.org.
Live Trivia, 7 p.m., Wyler's Pub & Grill, 2385 27th St., No. 513. Details: (970) 506-4000.
Geeks Who Drink: Trivia, 8 p.m., The Tavern at St. Michael's, 2918 67th Ave. Details: (970) 330-2337.
Greeley Chamber of Commerce Leads Group, noon, Greeley Chamber of Commerce, 902 7th Ave. Details: (970) 352-3566 or http://www.greeleychamber.com.
Bingo: Nonprofit Senior Benefit, 12:30 p.m., Bingo Planet, 2700 10th St. Details: (970) 353-7030.
Friday Fish Fry, 5:30 p.m., Saint Mary Parish Hall, 2222 23rd Ave. Sponsored by Knights of Columbus. Details: (970) 302-4224.
Friday Fish Fry, 6:30 p.m., Saint Peter Parish Hall, 915 12th St. Sponsored by Knights of Columbus. Details: (970) 302-4224.
UNC Baseball vs. North Dakota State University, noon, Jackson Field, 1830 6th Ave., Greeley. Details: http://www.uncbears.com.
Greeley Game Night, 5 p.m., Cranford's Tea Tavern, 823 10th St. Details: http://www.meetup.com/greeleygamenight.
NARFE/National Active And Retired Federal Employees — Chapter 355, 1:30 p.m., Greeley Place, 1051 6th St. Details: (970) 353-2351.
Pub Games With Andy, 7 p.m., Brix Taphouse & Brewery, 813 8th St. Details: http://www.facebook.com/Thenerdstore.
Open Pick, 7 p.m., Broken Plow Brewery, 4731 10th St., Greeley. Details: http://www.brokenplowbrewery.com/upcoming-events.html.
Keep Calm And Play Trivia, 7 p.m., Crabtree Brewing, 2961 29th St. Details: http://www.crabtreebrewing.com/pages/tastingRoom.html.
Composer Talk – Masterworks 4: Legends & Lore, noon, Old Town Library, 201 Peterson St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
FoCo Nonprofit Networking Group, 3 p.m., Harmony Library, 301 Olive St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Gift of Life: Organ Donation, 3 p.m., Old Town Library, 201 Peterson St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Symphonic Band Concert, 7:30 p.m., University Center for the Arts, 1400 Remington St. Details: https://csuartstickets.universitytickets.com/w/default.aspx.
VITA Tax Preparation, 1 p.m., Old Town Library, 201 Peterson St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
PowerPoint Basics, 6:30 p.m., Harmony Library, 301 Olive St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Free, Virtual Legal Clinic, 2 p.m., Old Town Library, 201 Peterson St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Friday Fandom Club: Anime!, 4 p.m., Old Town Library, 201 Peterson St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Disaster+Travel+Wilderness First Aid Course, 8:30 a.m., Fort Collins, 424 Pine St. Details: http://www.solowfa.com.
Wildflower Seed Paper, 10:30 a.m., Gulley Greenhouse & Garden Center, 6029 Shields Details: http://www.gulleygreenhouse.com/event/seed-paper.
Teen Art Cafe: "Create with Color" Using Paint, Pastels and Inks, 11 a.m., Harmony Library, 301 Olive St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Rocky Mountain Saxophone Summit Potpourri Concert, 7:30 p.m., University Center for the Arts, 1400 Remington St. Details: https://csuartstickets.universitytickets.com/w/default.aspx.
Introduction To Stone Balancing With Master Balancer Doug Case, 1 p.m., Museum of Art Fort Collins, 201 College Ave. Details: http://www.moafc.org/events.
Concert Orchestra and Concert Band Concert / FREE, 7:30 p.m., University Center for the Arts, 1400 Remington St. Details: https://csuartstickets.universitytickets.com/w/default.aspx.
VITA Tax Preparation Assistance, 1 p.m., Old Town Library, 201 Peterson St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Classical Convergence Concert Series – Shuffle, 7:30 p.m., University Center for the Arts, 1400 Remington St. Details: https://csuartstickets.universitytickets.com/w/default.aspx.
Library Trust Board Meeting, 4 p.m., Old Town Library, 201 Peterson St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Newly Bereaved Support Group, 6 p.m., Pathways, 305 Carpenter Rd. Details: pathways-care.org.
Great Decisions – Chapter 2: Russia's Foreign Policy, 7 p.m., Old Town Library, 201 Peterson St. Details: https://poudreriver.evanced.info/eventcalendar.asp?lib=all.
Voice Area Recital / FREE, 7:30 p.m., University Center for the Arts, 1400 Remington St. Details: https://csuartstickets.universitytickets.com/w/default.aspx.
Tatting Group, 10 a.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
The Loomy Knitters Charitable Group, 1 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Waggin' Tales, 4 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Elementary age Chess Club, 4 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Genealogy Help – Personal Assistance, 1 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Club 345, 4 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Mahjong Group, 10 a.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Great Issues in American Life – Reading and Discussion Group, 2 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Easter Egg Rockets, 3:30 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Brickmasters Club, 10 a.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Robokids, 2 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Fly WOAW — Fly It Forward® Free Ride in a Helicopter or Airplane, 10 a.m., Northern Colorado Regional Airport – Jet Center, 4900 Earhart Rd. Details: http://www.facebook.com/flywoaw/?ref=bookmarks.
Mahjong Group, 1 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Citizenship Classes -Evening, 5:30 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Noontime Nature with Kevin Cook: Searching for Life in Colorado, noon, Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
The Wooly Knitters Group, 1 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Teen Lead Program: Iron Chef Chalenge, 4 p.m., Loveland Public Library-Erion Room, 300 Adams. Details: http://www.lovelandpubliclibrary.org.
Windsor DDA working to bring vitality back to downtown
Debt rules the world, but financial education can change the equation
Windsor's Isaiah Salazar quietly becomes one of state's best wrestlers with 3 titles
Windsor churches join forces in SERVE 6.8 Day
Sours, sustainability and selection: A guide to Greeley and Windsor's breweries


text:
// ==========================================================================
//                 SeqAn - The Library for Sequence Analysis
// ==========================================================================
// Copyright (c) 2006-2010, Knut Reinert, FU Berlin
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of Knut Reinert or the FU Berlin nor the names of
//       its contributors may be used to endorse or promote products derived
//       from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL KNUT REINERT OR THE FU BERLIN BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
// OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
// DAMAGE.
//
// ==========================================================================
// Author: Andreas Gogol-Doering <andreas.doering@mdc-berlin.de>
// ==========================================================================

// TODO(holtgrew): Should the public interface for the class Score not be defined here?

#ifndef SEQAN_SCORE_SCORE_BASE_H_
#define SEQAN_SCORE_SCORE_BASE_H_

namespace SEQAN_NAMESPACE_MAIN {

/**
.Class.Score:
..cat:Miscellaneous
..summary:A scoring scheme.
..signature:Score<TValue, TSpec>
..param.TValue:The value type.
...default:int
..param.TSpec:The specializing type.
...default:$Tag.Simple$
..include:seqan/score.h
*/
template <typename TValue = int, typename TSpec = Simple>
class Score;

///.Metafunction.Value.param.T.type:Class.Score
template <typename TValue, typename TSpec>
struct Value<Score<TValue, TSpec> > {
    typedef TValue Type;
};

/**
.Function.scoreGapOpenHorizontal
..class:Class.Score
..cat:Scoring
..signature:scoreGapOpenHorizontal(score, pos1, pos2, seq1, seq2)
..summary:Returns the score for opening a horizontal gap after $pos1$ in $seq1$.
..include:seqan/score.h
 */
template <typename TValue, typename TSpec, typename TPos1, typename TPos2, typename TSeq1, typename TSeq2>
inline TValue
scoreGapOpenHorizontal(
    Score<TValue, TSpec> const & me,
    TPos1,
    TPos2,
    TSeq1 const &,
    TSeq2 const &) {
    SEQAN_CHECKPOINT;
    return scoreGapOpen(me);
}

/**
.Function.scoreGapOpenVertical
..class:Class.Score
..cat:Scoring
..signature:scoreGapOpenVertical(score, pos1, pos2, seq1, seq2)
..summary:Returns the score for opening a vertical gap after $pos2$ in $seq2$.
..include:seqan/score.h
 */
template <typename TValue, typename TSpec, typename TPos1, typename TPos2, typename TSeq1, typename TSeq2>
inline TValue
scoreGapOpenVertical(
    Score<TValue, TSpec> const & me,
    TPos1,
    TPos2,
    TSeq1 const &,
    TSeq2 const &) {
    SEQAN_CHECKPOINT;
    return scoreGapOpen(me);
}

/**
.Function.scoreGapExtendHorizontal
..cat:Scoring
..signature:scoreGapExtendHorizontal(score, pos1, pos2, seq1, seq2)
..summary:Returns the score for extending a horizontal gap after $pos1$ in $seq1$.
..include:seqan/score.h
 */
template <typename TValue, typename TSpec, typename TPos1, typename TPos2, typename TSeq1, typename TSeq2>
inline TValue
scoreGapExtendHorizontal(
    Score<TValue, TSpec> const & me,
    TPos1,
    TPos2,
    TSeq1 const &,
    TSeq2 const &) {
    SEQAN_CHECKPOINT;
    return scoreGapExtend(me);
}

/**
.Function.scoreGapExtendVertical
..cat:Scoring
..signature:scoreGapExtendVertical(score, pos1, pos2, seq1, seq2)
..summary:Returns the score for extending a vertical gap after $pos2$ in $seq2$.
..include:seqan/score.h
 */
template <typename TValue, typename TSpec, typename TPos1, typename TPos2, typename TSeq1, typename TSeq2>
inline TValue
scoreGapExtendVertical(
    Score<TValue, TSpec> const & me,
    TPos1,
    TPos2,
    TSeq1 const &,
    TSeq2 const &) {
    SEQAN_CHECKPOINT;
    return scoreGapExtend(me);
}

/**
.Function.scoreGapHorizontal
..cat:Scoring
..signature:scoreGapHorizontal(score, pos1, pos2, seq1, seq2)
..summary:Returns the score for a horizontal gap after $pos1$ in $seq1$.
..include:seqan/score.h
 */
template <typename TValue, typename TSpec, typename TPos1, typename TPos2, typename TSeq1, typename TSeq2>
inline TValue
scoreGapHorizontal(
    Score<TValue, TSpec> const & me,
    TPos1,
    TPos2,
    TSeq1 const &,
    TSeq2 const &) {
    SEQAN_CHECKPOINT;
    return scoreGap(me);
}

/**
.Function.scoreGapVertical
..cat:Scoring
..signature:scoreGapVertical(score, pos1, pos2, seq1, seq2)
..summary:Returns the score for a vertical gap after $pos2$ in $seq2$.
..include:seqan/score.h
 */
template <typename TValue, typename TSpec, typename TPos1, typename TPos2, typename TSeq1, typename TSeq2>
inline TValue
scoreGapVertical(
    Score<TValue, TSpec> const & me,
    TPos1,
    TPos2,
    TSeq1 const &,
    TSeq2 const &) {
    SEQAN_CHECKPOINT;
    return scoreGap(me);
}

/**
.Function.score:
..cat:Scoring
..signature:score(score, pos1, pos2, seq1, seq2)
..param.score:The scoring scheme to use.
...type:Class.Score
..param.pos1:Position of the aligned character in $seq1$.
..param.pos2:Position of the aligned character in $seq2$.
..param.seq1:First sequence.
..param.seq2:Second sequence.
..summary:Returns the score for aligning the characters $seq1[pos1]$ and $seq2[pos2]$.
This function allows to define a position-dependent scoring scheme.
..include:seqan/score.h
 */
template <typename TValue, typename TSpec, typename TPos1, typename TPos2, typename TSeq1, typename TSeq2>
inline TValue
score(Score<TValue, TSpec> const & me,
      TPos1 pos1,
      TPos2 pos2,
      TSeq1 const &seq1,
      TSeq2 const &seq2) {
    SEQAN_CHECKPOINT;
    return score(me, seq1[pos1], seq2[pos2]);
}

}  // namespace SEQAN_NAMESPACE_MAIN

#endif  // SEQAN_SCORE_SCORE_BASE_H_

redpajama_set_name: RedPajamaGithub


This one is a little bit of a ramble, so let me apologize in advance if my thoughts are less cohesive than normal.
I had a little bump in the road to my writing career this weekend, and I debated a bit about whether or not I should post about it. You see, something happened that I hadn't considered (though in retrospect I suppose I should have), and I was afraid posting about it might be viewed as whining. The more I thought about it though, the more I realized that this is exactly the kind of thing I think aspiring authors should be told, and that's what this blog is all about. After all, "This is me, Learning the Professional Side of Writing". I will take the luxury of assuming that you wouldn't be reading my blog if you weren't at least a little interested in what I have to say on the matter.
So here's my latest little nugget of wisdom – don't review your peers' books.
Maybe you're out there reading this, shaking your head, and wondering whatever made me think otherwise. Or perhaps this is as novel a concept for you as it was for me. Let me explain where it comes from, though.
I have a GoodReads account, and an Amazon account, and I have gotten into the habit of reviewing everything I read. Until now, I thought of it as a way of maintaining a connection to the reading community to whom I hope to one day present my own works. Unfortunately, something that I honestly hadn't considered turned up this weekend and smacked me in the face. (Yeah, life has a way of doing that, doesn't it?) :?
Like many other writers out there, I have been a member of several writing critique groups over the years. I participated in unpublished author competitions, was a member of several online critique groups, and three "real life" groups. I developed a reputation for constructive, but brutally honest critiques, and was very often complimented on it. Many writers value these critiques. It is how we grow in our craft.
But here is something I didn't take into account – a review is not the same as a critique. A critique is something that fellow writers share with one another in an attempt to better themselves. It is done in a private forum, before the work is presented in its final form.
A review, on the other hand, is a public examination of the end result. It is placed out there for all the world to see, after the author says "Hey, here is my baby!" When viewed that way, the differences are pretty obvious, so I am ashamed to admit that I completely missed them.
For the aspiring author, posting reviews can be a no-win scenario. If he presents a four or five-star review, he will be seen as a brown noser, looking to curry favor from those more successful than himself. If he presents a three star review, he is nothing more than a reviewer attempting to denigrate the work of his peers without being too obvious about it. If he dares to present a one or two star review, he will be seen as egotistical or presumptuous, passing judgment on his peers.
Simply put, an aspiring author cannot afford to be seen as being critical of another artist's work without running the risk of being viewed as either arrogant or conniving. And it isn't necessarily the authors who will object. Successful authors attract followers, and those followers can take things personally. Followers can be very passionate about what they like and dislike. I know I can be, so why should anyone else not?
So you will notice I no longer have my list of "Books I've Recently Read and Reviewed" in the sidebar. Nor will I be showing my "Books I'm Currently Reading" over there. Instead, I now have a bar of "Some Books I Recommend". The only books I will list there are those that I have read and can wholeheartedly recommend to fellow readers and writers as either handy reference books, or books I can point to and say "this is what I want to do when I grow up!" They are not all five-star books (or at least, I didn't give them all five-star reviews), but they are nevertheless representations of the level of writing and storytelling to which I aspire.
I will also be looking into whether or not I can "privatize" my GoodReads account so that I can continue to add to my personal reading goals without publishing my reviews to the public. If I can't, then I'm afraid I will have to simply delete all my reviews and allow the account to languish. I would hate to do that, since GoodReads presents a simple place for me to track progress on what I'm reading against my self-imposed goal of reading twenty-five books this year. But it is by its nature, a book review site, and as such requires that you rate the books as you complete them. And I believe I just covered those particular pitfalls.
This is a valuable lesson to those of us who are trying to break into the biz. Reviews are not viewed the same as critiques. Think of it as a corollary of the rules of Professionalism. While we may always think we are being professional in our dealings with others, we have to take into account that there are people who will view our comments differently. There is simply no way that presenting a review on the work of one's peers will not be viewed negatively by someone, somewhere.
So I'll have to stop doing them. Period.
In the meantime, to anyone who feels that I may have slighted them or their favorite author in any way, I sincerely apologize. That was never my intent.
Editing is hard work! Holy crap! Are you STILL editing?!?!


Our team strives to achieve 100% patient satisfaction from the moment you first call us on the phone until the moment you shake your care provider's hand good-bye.
Please click here to access your patient portal online area.
Pay online conveniently. Click the link below to connect and pay.
Primary Care Institute is a Patient Centered Medical Home. We are a team of highly trained and devoted professionals. Our goal is to help our patients achieve their highest state of health and well being. Our receptionists are here to greet you with the warm welcome of a good friend that is coming for a visit. Our medical assistant is here to assist you and our clinical professionals with skill and accuracy. Our physicians are Board Certified Family Physicians, specializing in caring for the whole person both physically and emotionally, throughout the life span. Our physicians work with your medical history and family dynamics and coordinate your care with other physicians as necessary. Our Nurse Practitioners are Board Certified and prepared through advanced graduate education and clinical training to provide a wide range of health care services, including diagnosis and management of common and complex medical conditions. At Primary Care Institute, we continually educate ourselves to provide you with the most up-to-date standards of care enabling us to treat you, your family, your health and disease state to the best of our ability.
Please take the time to explore our website. We hope that we can provide you with our outstanding medical services and health care in the future. Click here now to view our location and contact us.


SHELBYVILLE, IN (Oct. 26, 2018) – Following a strong directive from Pres. Trump to lift the outdated regulations stifling E15 fuel, POET is moving forward with full construction of a new biofuel facility in Shelbyville, Indiana.
Final permit approval came this week for the planned 80 million-gallon-per-year facility. With full construction started, the expected completion date for the nearly $160 million facility is spring of 2020.
POET Biorefining – Shelbyville will be the 28th starch biofuel plant in POET's network, and the fifth in Indiana. It will add 45 full time jobs and $110 million in annual corn purchases for farmers in the area, primarily within a 30-mile radius. POET plans to start hiring for full-time positions in spring 2019.
New demand for biofuels is expected in coming years once the Trump Administration provides full consumer access to E15 year-round. President Trump announced earlier this month that he has directed the EPA to fix outdated regulations that limit E15 availability.
E15 is a higher octane, cleaner burning and lower cost blend of 15% biofuel. Full implementation of E15 nationwide would add 7 billion gallons of biofuels demand and an additional 2 billion bushels of corn demand for farmers who have been struggling with low crop prices and declining farm income over the last five years. This additional demand is important for communities that rely on agriculture to drive their economies.
The new facility includes POET's state-of-the-art environmental controls and production processes. Those include features such as the proprietary Total Water Recovery, which eliminates process water discharge from the plant, and POET's patented BPX process, which lowers energy use and increases yield, making this state-of-the-art plant even more efficient.
POET, the world's largest biofuels producer, is a leader in biorefining through its efficient, vertically integrated approach to production. The 30-year-old company has a network of 27 production facilities. POET, through its joint venture with DSM, also operates a commercial-scale cellulosic ethanol plant in Emmetsburg, Iowa. For more information, visit http://www.poet.com.


With increasing evidence supporting health promotion programs in the workplace, more companies than ever are implementing health and wellness strategies to reduce injuries, health care costs and long-term disability. We want to hear from you! How healthy is your company? Take our online poll and let us know if your company has some sort of health promotion program established in your workplace.
According to the Wellness Councils of America (welcoa.org), more than 81% of businesses with 50 or more employees have some form of health promotion program -- the most popular being exercise, stop-smoking classes, back care programs, and stress management. Most employers are offering wellness programs to offset the rising costs of health care. Yet many business leaders continue to ask themselves how to control massive increases in annual insurance premiums and health care costs.
Worksite wellness is health care reform that works. Results from North America's finest companies, summarized here, are reason enough to think about an investment in your most important asset -- your employees -- and the impact this investment can have on your bottom line.
In one study, members of a Travelers fitness center were absent from work significantly fewer days than nonmembers and in another four year study, sick leave was reduced 19%.
To prevent back injuries among its employees, a county in California offered classes and fitness training to all it's workers. As a result, there was a significant decrease in sick days related to back injuries, producing a net cost-benefit ratio of 1 to 1.79.
Northern Gas Company employees who participate in the company's corporate exercise program take 80% fewer sick days than non-exercising employees.
At Mesa Petroleum, wellness program participants were absent 1.6 fewer days per year than non-participants. Given the number of employees, this resulted in significant cost savings.
The average annual health care cost per person in the United States far exceeds $3,000. And preventable illness makes up approximately 70% of the total costs of illness. Because much of these costs are linked to health habits, it is possible for employers to take aggressive action toward reducing health care utilization and containing costs by implementing a health promotion program.
It costs employers an average of $1500 MORE per year to insure and obese employee than it does someone of average weight. This includes medical services, expenses, premiums etc... The total cost for employees in categories listed above is assumed to be even higher when other factors such as absenteeism and productivity are taken into account.
Sony Corp. of America analyzed claims data from 1988 to 1990 and found that 50% of its indemnity plan costs were incurred by employees with medical conditions that were lifestyle-related, or that could be changed.
As the result of a pilot program at Honeywell, Inc. which offered a $200 cash incentive based on participation in certain program areas, program coordinators estimated a 70% to 150% return on investment from reduced medical claims alone.
In 1990, The Canada Life Assurance Company (CLAC) compared its per-capita medical claims to a comparable insurance company that, unlike CLAC, did not provide a wellness program for its employees. The study found that the other insurance company's per-capita medical expenses climbed from $170 to $229 (Canadian currency), while CLAC's per-capita cost remained constant at $170.
A 1992 analysis of the employees of GE Aircraft showed that medical claims submitted by the company's fitness center members decreased by 27%, while claims made by non-members actually rose by 17%.
At the Westinghouse Electronic Assembly Plant, workers who participated in the worksite fitness program cost the firm approximately $1,715 less than workers who did not participate.
Studies show that employees who exercise as little as once a week incur healthcare costs that are one-third to one-half lower than those who don't.
Company sponsored wellness programs send a clear message to employees that management values them and their well-being. Secondly, healthy employees tend to be happier and not as restless to leave. The healthier and happier the work force, the less a company has to spend on hiring and training new personnel.
The annual turnover rate for wellness program participants of the Canada Life Assurance Company of Toronto was 1.8%, compared to the company-wide average of 18%.
British Columbia Hydroelectric's wellness program participants had an annual turnover rate of 3.5%, compared to a company-wide average of 10.3%.
A study at Tenneco found that employees who participated in the fitness program had a much higher probability of continued employment than non-participants.
As businesses continue to streamline their resources, worker productivity becomes a key success factor. Although not as easy to measure as a reduction in healthcare costs, improved employee productivity and morale can have a considerable impact on an organization and its profitability. Corporate wellness programs play a key role in maintaining and improving productivity and employee morale.
Union Pacific Railroad found that 80% of its workers believed that the company's exercise program helped to increase their productivity and that 75% felt that regular exercise was helping them to concentrate better at work.
A study by Saatchi & Saatchi Advertising revealed that 63% of the employees enrolled in the company's fitness program believed that it improved their productivity; 75% said that it boosted their morale.
Since 1980 there have been over 50 studies of comprehensive worksite health promotion and disease prevention programs. Every study has indicated positive health outcomes. And of the more than 30 which were analyzed for cost outcomes, 29 proved to be cost effective.


text:
// Copyright (C) 2018 Sebastian Dröge <sebastian@centricular.com>
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public
// License as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Library General Public License for more details.
//
// You should have received a copy of the GNU Library General Public
// License along with this library; if not, write to the
// Free Software Foundation, Inc., 51 Franklin Street, Suite 500,
// Boston, MA 02110-1335, USA.
//
// SPDX-License-Identifier: LGPL-2.1-or-later

use futures::channel::oneshot;
use futures::future::BoxFuture;
use futures::prelude::*;

use gst::glib;
use gst::prelude::*;
use gst::subclass::prelude::*;
use gst::{gst_debug, gst_error, gst_log, gst_trace};

use once_cell::sync::Lazy;

use std::collections::VecDeque;
use std::sync::Mutex as StdMutex;
use std::time::Duration;
use std::{u32, u64};

use crate::runtime::prelude::*;
use crate::runtime::{Context, PadSink, PadSinkRef, PadSrc, PadSrcRef, PadSrcWeak, Task};

use crate::dataqueue::{DataQueue, DataQueueItem};

const DEFAULT_MAX_SIZE_BUFFERS: u32 = 200;
const DEFAULT_MAX_SIZE_BYTES: u32 = 1024 * 1024;
const DEFAULT_MAX_SIZE_TIME: gst::ClockTime = gst::ClockTime::SECOND;
const DEFAULT_CONTEXT: &str = "";
const DEFAULT_CONTEXT_WAIT: Duration = Duration::ZERO;

#[derive(Debug, Clone)]
struct Settings {
    max_size_buffers: u32,
    max_size_bytes: u32,
    max_size_time: gst::ClockTime,
    context: String,
    context_wait: Duration,
}

impl Default for Settings {
    fn default() -> Self {
        Settings {
            max_size_buffers: DEFAULT_MAX_SIZE_BUFFERS,
            max_size_bytes: DEFAULT_MAX_SIZE_BYTES,
            max_size_time: DEFAULT_MAX_SIZE_TIME,
            context: DEFAULT_CONTEXT.into(),
            context_wait: DEFAULT_CONTEXT_WAIT,
        }
    }
}

#[derive(Debug)]
struct PendingQueue {
    more_queue_space_sender: Option<oneshot::Sender<()>>,
    scheduled: bool,
    items: VecDeque<DataQueueItem>,
}

impl PendingQueue {
    fn notify_more_queue_space(&mut self) {
        self.more_queue_space_sender.take();
    }
}

#[derive(Clone)]
struct QueuePadSinkHandler;

impl PadSinkHandler for QueuePadSinkHandler {
    type ElementImpl = Queue;

    fn sink_chain(
        &self,
        pad: &PadSinkRef,
        _queue: &Queue,
        element: &gst::Element,
        buffer: gst::Buffer,
    ) -> BoxFuture<'static, Result<gst::FlowSuccess, gst::FlowError>> {
        let pad_weak = pad.downgrade();
        let element = element.clone().downcast::<super::Queue>().unwrap();
        async move {
            let pad = pad_weak.upgrade().expect("PadSink no longer exists");
            gst_log!(CAT, obj: pad.gst_pad(), "Handling {:?}", buffer);
            let queue = Queue::from_instance(&element);
            queue
                .enqueue_item(&element, DataQueueItem::Buffer(buffer))
                .await
        }
        .boxed()
    }

    fn sink_chain_list(
        &self,
        pad: &PadSinkRef,
        _queue: &Queue,
        element: &gst::Element,
        list: gst::BufferList,
    ) -> BoxFuture<'static, Result<gst::FlowSuccess, gst::FlowError>> {
        let pad_weak = pad.downgrade();
        let element = element.clone().downcast::<super::Queue>().unwrap();
        async move {
            let pad = pad_weak.upgrade().expect("PadSink no longer exists");
            gst_log!(CAT, obj: pad.gst_pad(), "Handling {:?}", list);
            let queue = Queue::from_instance(&element);
            queue
                .enqueue_item(&element, DataQueueItem::BufferList(list))
                .await
        }
        .boxed()
    }

    fn sink_event(
        &self,
        pad: &PadSinkRef,
        queue: &Queue,
        element: &gst::Element,
        event: gst::Event,
    ) -> bool {
        use gst::EventView;

        gst_debug!(CAT, obj: pad.gst_pad(), "Handling non-serialized {:?}", event);

        if let EventView::FlushStart(..) = event.view() {
            if let Err(err) = queue.task.flush_start() {
                gst_error!(CAT, obj: pad.gst_pad(), "FlushStart failed {:?}", err);
                gst::element_error!(
                    element,
                    gst::StreamError::Failed,
                    ("Internal data stream error"),
                    ["FlushStart failed {:?}", err]
                );
                return false;
            }
        }

        gst_log!(CAT, obj: pad.gst_pad(), "Forwarding non-serialized {:?}", event);
        queue.src_pad.gst_pad().push_event(event)
    }

    fn sink_event_serialized(
        &self,
        pad: &PadSinkRef,
        _queue: &Queue,
        element: &gst::Element,
        event: gst::Event,
    ) -> BoxFuture<'static, bool> {
        use gst::EventView;

        gst_log!(CAT, obj: pad.gst_pad(), "Handling serialized {:?}", event);

        let pad_weak = pad.downgrade();
        let element = element.clone().downcast::<super::Queue>().unwrap();
        async move {
            let pad = pad_weak.upgrade().expect("PadSink no longer exists");
            let queue = Queue::from_instance(&element);

            if let EventView::FlushStop(..) = event.view() {
                if let Err(err) = queue.task.flush_stop() {
                    gst_error!(CAT, obj: pad.gst_pad(), "FlushStop failed {:?}", err);
                    gst::element_error!(
                        element,
                        gst::StreamError::Failed,
                        ("Internal data stream error"),
                        ["FlushStop failed {:?}", err]
                    );
                    return false;
                }
            }

            gst_log!(CAT, obj: pad.gst_pad(), "Queuing serialized {:?}", event);
            queue
                .enqueue_item(&element, DataQueueItem::Event(event))
                .await
                .is_ok()
        }
        .boxed()
    }

    fn sink_query(
        &self,
        pad: &PadSinkRef,
        queue: &Queue,
        _element: &gst::Element,
        query: &mut gst::QueryRef,
    ) -> bool {
        gst_log!(CAT, obj: pad.gst_pad(), "Handling {:?}", query);

        if query.is_serialized() {
            // FIXME: How can we do this?
            gst_log!(CAT, obj: pad.gst_pad(), "Dropping serialized {:?}", query);
            false
        } else {
            gst_log!(CAT, obj: pad.gst_pad(), "Forwarding {:?}", query);
            queue.src_pad.gst_pad().peer_query(query)
        }
    }
}

#[derive(Clone, Debug)]
struct QueuePadSrcHandler;

impl QueuePadSrcHandler {
    async fn push_item(
        pad: &PadSrcRef<'_>,
        queue: &Queue,
        item: DataQueueItem,
    ) -> Result<(), gst::FlowError> {
        if let Some(pending_queue) = queue.pending_queue.lock().unwrap().as_mut() {
            pending_queue.notify_more_queue_space();
        }

        match item {
            DataQueueItem::Buffer(buffer) => {
                gst_log!(CAT, obj: pad.gst_pad(), "Forwarding {:?}", buffer);
                pad.push(buffer).await.map(drop)
            }
            DataQueueItem::BufferList(list) => {
                gst_log!(CAT, obj: pad.gst_pad(), "Forwarding {:?}", list);
                pad.push_list(list).await.map(drop)
            }
            DataQueueItem::Event(event) => {
                gst_log!(CAT, obj: pad.gst_pad(), "Forwarding {:?}", event);
                pad.push_event(event).await;
                Ok(())
            }
        }
    }
}

impl PadSrcHandler for QueuePadSrcHandler {
    type ElementImpl = Queue;

    fn src_event(
        &self,
        pad: &PadSrcRef,
        queue: &Queue,
        element: &gst::Element,
        event: gst::Event,
    ) -> bool {
        use gst::EventView;

        gst_log!(CAT, obj: pad.gst_pad(), "Handling {:?}", event);

        match event.view() {
            EventView::FlushStart(..) => {
                if let Err(err) = queue.task.flush_start() {
                    gst_error!(CAT, obj: pad.gst_pad(), "FlushStart failed {:?}", err);
                }
            }
            EventView::FlushStop(..) => {
                if let Err(err) = queue.task.flush_stop() {
                    gst_error!(CAT, obj: pad.gst_pad(), "FlushStop failed {:?}", err);
                    gst::element_error!(
                        element,
                        gst::StreamError::Failed,
                        ("Internal data stream error"),
                        ["FlushStop failed {:?}", err]
                    );
                    return false;
                }
            }
            _ => (),
        }

        gst_log!(CAT, obj: pad.gst_pad(), "Forwarding {:?}", event);
        queue.sink_pad.gst_pad().push_event(event)
    }

    fn src_query(
        &self,
        pad: &PadSrcRef,
        queue: &Queue,
        _element: &gst::Element,
        query: &mut gst::QueryRef,
    ) -> bool {
        use gst::QueryView;

        gst_log!(CAT, obj: pad.gst_pad(), "Handling {:?}", query);

        if let QueryView::Scheduling(ref mut q) = query.view_mut() {
            let mut new_query = gst::query::Scheduling::new();
            let res = queue.sink_pad.gst_pad().peer_query(&mut new_query);
            if !res {
                return res;
            }

            gst_log!(CAT, obj: pad.gst_pad(), "Upstream returned {:?}", new_query);

            let (flags, min, max, align) = new_query.result();
            q.set(flags, min, max, align);
            q.add_scheduling_modes(
                &new_query
                    .scheduling_modes()
                    .iter()
                    .cloned()
                    .filter(|m| m != &gst::PadMode::Pull)
                    .collect::<Vec<_>>(),
            );
            gst_log!(CAT, obj: pad.gst_pad(), "Returning {:?}", q.query_mut());
            return true;
        }

        gst_log!(CAT, obj: pad.gst_pad(), "Forwarding {:?}", query);
        queue.sink_pad.gst_pad().peer_query(query)
    }
}

#[derive(Debug)]
struct QueueTask {
    element: super::Queue,
    src_pad: PadSrcWeak,
    dataqueue: DataQueue,
}

impl QueueTask {
    fn new(element: &super::Queue, src_pad: &PadSrc, dataqueue: DataQueue) -> Self {
        QueueTask {
            element: element.clone(),
            src_pad: src_pad.downgrade(),
            dataqueue,
        }
    }
}

impl TaskImpl for QueueTask {
    fn start(&mut self) -> BoxFuture<'_, Result<(), gst::ErrorMessage>> {
        async move {
            gst_log!(CAT, obj: &self.element, "Starting task");

            let queue = Queue::from_instance(&self.element);
            let mut last_res = queue.last_res.lock().unwrap();

            self.dataqueue.start();

            *last_res = Ok(gst::FlowSuccess::Ok);

            gst_log!(CAT, obj: &self.element, "Task started");
            Ok(())
        }
        .boxed()
    }

    fn iterate(&mut self) -> BoxFuture<'_, Result<(), gst::FlowError>> {
        async move {
            let item = self.dataqueue.next().await;

            let item = match item {
                Some(item) => item,
                None => {
                    gst_log!(CAT, obj: &self.element, "DataQueue Stopped");
                    return Err(gst::FlowError::Flushing);
                }
            };

            let pad = self.src_pad.upgrade().expect("PadSrc no longer exists");
            let queue = Queue::from_instance(&self.element);
            let res = QueuePadSrcHandler::push_item(&pad, queue, item).await;
            match res {
                Ok(()) => {
                    gst_log!(CAT, obj: &self.element, "Successfully pushed item");
                    *queue.last_res.lock().unwrap() = Ok(gst::FlowSuccess::Ok);
                }
                Err(gst::FlowError::Flushing) => {
                    gst_debug!(CAT, obj: &self.element, "Flushing");
                    *queue.last_res.lock().unwrap() = Err(gst::FlowError::Flushing);
                }
                Err(gst::FlowError::Eos) => {
                    gst_debug!(CAT, obj: &self.element, "EOS");
                    *queue.last_res.lock().unwrap() = Err(gst::FlowError::Eos);
                    pad.push_event(gst::event::Eos::new()).await;
                }
                Err(err) => {
                    gst_error!(CAT, obj: &self.element, "Got error {}", err);
                    gst::element_error!(
                        &self.element,
                        gst::StreamError::Failed,
                        ("Internal data stream error"),
                        ["streaming stopped, reason {}", err]
                    );
                    *queue.last_res.lock().unwrap() = Err(err);
                }
            }

            res
        }
        .boxed()
    }

    fn stop(&mut self) -> BoxFuture<'_, Result<(), gst::ErrorMessage>> {
        async move {
            gst_log!(CAT, obj: &self.element, "Stopping task");

            let queue = Queue::from_instance(&self.element);
            let mut last_res = queue.last_res.lock().unwrap();

            self.dataqueue.stop();
            self.dataqueue.clear();

            if let Some(mut pending_queue) = queue.pending_queue.lock().unwrap().take() {
                pending_queue.notify_more_queue_space();
            }

            *last_res = Err(gst::FlowError::Flushing);

            gst_log!(CAT, obj: &self.element, "Task stopped");
            Ok(())
        }
        .boxed()
    }

    fn flush_start(&mut self) -> BoxFuture<'_, Result<(), gst::ErrorMessage>> {
        async move {
            gst_log!(CAT, obj: &self.element, "Starting task flush");

            let queue = Queue::from_instance(&self.element);
            let mut last_res = queue.last_res.lock().unwrap();

            self.dataqueue.clear();

            if let Some(mut pending_queue) = queue.pending_queue.lock().unwrap().take() {
                pending_queue.notify_more_queue_space();
            }

            *last_res = Err(gst::FlowError::Flushing);

            gst_log!(CAT, obj: &self.element, "Task flush started");
            Ok(())
        }
        .boxed()
    }
}

#[derive(Debug)]
pub struct Queue {
    sink_pad: PadSink,
    src_pad: PadSrc,
    task: Task,
    dataqueue: StdMutex<Option<DataQueue>>,
    pending_queue: StdMutex<Option<PendingQueue>>,
    last_res: StdMutex<Result<gst::FlowSuccess, gst::FlowError>>,
    settings: StdMutex<Settings>,
}

static CAT: Lazy<gst::DebugCategory> = Lazy::new(|| {
    gst::DebugCategory::new(
        "ts-queue",
        gst::DebugColorFlags::empty(),
        Some("Thread-sharing queue"),
    )
});

impl Queue {
    /* Try transfering all the items from the pending queue to the DataQueue, then
     * the current item. Errors out if the DataQueue was full, or the pending queue
     * is already scheduled, in which case the current item should be added to the
     * pending queue */
    fn queue_until_full(
        &self,
        dataqueue: &DataQueue,
        pending_queue: &mut Option<PendingQueue>,
        item: DataQueueItem,
    ) -> Result<(), DataQueueItem> {
        match pending_queue {
            None => dataqueue.push(item),
            Some(PendingQueue {
                scheduled: false,
                ref mut items,
                ..
            }) => {
                let mut failed_item = None;
                while let Some(item) = items.pop_front() {
                    if let Err(item) = dataqueue.push(item) {
                        failed_item = Some(item);
                    }
                }

                if let Some(failed_item) = failed_item {
                    items.push_front(failed_item);

                    Err(item)
                } else {
                    dataqueue.push(item)
                }
            }
            _ => Err(item),
        }
    }

    /* Schedules emptying of the pending queue. If there is an upstream
     * TaskContext, the new task is spawned, it is otherwise
     * returned, for the caller to block on */
    async fn schedule_pending_queue(&self, element: &super::Queue) {
        loop {
            let more_queue_space_receiver = {
                let dataqueue = self.dataqueue.lock().unwrap();
                if dataqueue.is_none() {
                    return;
                }
                let mut pending_queue_grd = self.pending_queue.lock().unwrap();

                gst_log!(CAT, obj: element, "Trying to empty pending queue");

                if let Some(pending_queue) = pending_queue_grd.as_mut() {
                    let mut failed_item = None;
                    while let Some(item) = pending_queue.items.pop_front() {
                        if let Err(item) = dataqueue.as_ref().unwrap().push(item) {
                            failed_item = Some(item);
                        }
                    }

                    if let Some(failed_item) = failed_item {
                        pending_queue.items.push_front(failed_item);
                        let (sender, receiver) = oneshot::channel();
                        pending_queue.more_queue_space_sender = Some(sender);

                        receiver
                    } else {
                        gst_log!(CAT, obj: element, "Pending queue is empty now");
                        *pending_queue_grd = None;
                        return;
                    }
                } else {
                    gst_log!(CAT, obj: element, "Flushing, dropping pending queue");
                    return;
                }
            };

            gst_log!(CAT, obj: element, "Waiting for more queue space");
            let _ = more_queue_space_receiver.await;
        }
    }

    async fn enqueue_item(
        &self,
        element: &super::Queue,
        item: DataQueueItem,
    ) -> Result<gst::FlowSuccess, gst::FlowError> {
        let wait_fut = {
            let dataqueue = self.dataqueue.lock().unwrap();
            let dataqueue = dataqueue.as_ref().ok_or_else(|| {
                gst_error!(CAT, obj: element, "No DataQueue");
                gst::FlowError::Error
            })?;

            let mut pending_queue = self.pending_queue.lock().unwrap();

            if let Err(item) = self.queue_until_full(dataqueue, &mut pending_queue, item) {
                if pending_queue
                    .as_ref()
                    .map(|pq| !pq.scheduled)
                    .unwrap_or(true)
                {
                    if pending_queue.is_none() {
                        *pending_queue = Some(PendingQueue {
                            more_queue_space_sender: None,
                            scheduled: false,
                            items: VecDeque::new(),
                        });
                    }

                    let schedule_now = !matches!(
                        item,
                        DataQueueItem::Event(ref ev) if ev.type_() != gst::EventType::Eos,
                    );

                    pending_queue.as_mut().unwrap().items.push_back(item);

                    gst_log!(
                        CAT,
                        obj: element,
                        "Queue is full - Pushing first item on pending queue"
                    );

                    if schedule_now {
                        gst_log!(CAT, obj: element, "Scheduling pending queue now");
                        pending_queue.as_mut().unwrap().scheduled = true;

                        let wait_fut = self.schedule_pending_queue(element);
                        Some(wait_fut)
                    } else {
                        gst_log!(CAT, obj: element, "Scheduling pending queue later");
                        None
                    }
                } else {
                    pending_queue.as_mut().unwrap().items.push_back(item);
                    None
                }
            } else {
                None
            }
        };

        if let Some(wait_fut) = wait_fut {
            gst_log!(CAT, obj: element, "Blocking until queue has space again");
            wait_fut.await;
        }

        *self.last_res.lock().unwrap()
    }

    fn prepare(&self, element: &super::Queue) -> Result<(), gst::ErrorMessage> {
        gst_debug!(CAT, obj: element, "Preparing");

        let settings = self.settings.lock().unwrap().clone();

        let dataqueue = DataQueue::new(
            &element.clone().upcast(),
            self.src_pad.gst_pad(),
            if settings.max_size_buffers == 0 {
                None
            } else {
                Some(settings.max_size_buffers)
            },
            if settings.max_size_bytes == 0 {
                None
            } else {
                Some(settings.max_size_bytes)
            },
            if settings.max_size_time.is_zero() {
                None
            } else {
                Some(settings.max_size_time)
            },
        );

        *self.dataqueue.lock().unwrap() = Some(dataqueue.clone());

        let context =
            Context::acquire(&settings.context, settings.context_wait).map_err(|err| {
                gst::error_msg!(
                    gst::ResourceError::OpenRead,
                    ["Failed to acquire Context: {}", err]
                )
            })?;

        self.task
            .prepare(QueueTask::new(element, &self.src_pad, dataqueue), context)
            .map_err(|err| {
                gst::error_msg!(
                    gst::ResourceError::OpenRead,
                    ["Error preparing Task: {:?}", err]
                )
            })?;

        gst_debug!(CAT, obj: element, "Prepared");

        Ok(())
    }

    fn unprepare(&self, element: &super::Queue) {
        gst_debug!(CAT, obj: element, "Unpreparing");

        self.task.unprepare().unwrap();

        *self.dataqueue.lock().unwrap() = None;
        *self.pending_queue.lock().unwrap() = None;

        *self.last_res.lock().unwrap() = Ok(gst::FlowSuccess::Ok);

        gst_debug!(CAT, obj: element, "Unprepared");
    }

    fn stop(&self, element: &super::Queue) -> Result<(), gst::ErrorMessage> {
        gst_debug!(CAT, obj: element, "Stopping");
        self.task.stop()?;
        gst_debug!(CAT, obj: element, "Stopped");
        Ok(())
    }

    fn start(&self, element: &super::Queue) -> Result<(), gst::ErrorMessage> {
        gst_debug!(CAT, obj: element, "Starting");
        self.task.start()?;
        gst_debug!(CAT, obj: element, "Started");
        Ok(())
    }
}

#[glib::object_subclass]
impl ObjectSubclass for Queue {
    const NAME: &'static str = "RsTsQueue";
    type Type = super::Queue;
    type ParentType = gst::Element;

    fn with_class(klass: &Self::Class) -> Self {
        Self {
            sink_pad: PadSink::new(
                gst::Pad::from_template(&klass.pad_template("sink").unwrap(), Some("sink")),
                QueuePadSinkHandler,
            ),
            src_pad: PadSrc::new(
                gst::Pad::from_template(&klass.pad_template("src").unwrap(), Some("src")),
                QueuePadSrcHandler,
            ),
            task: Task::default(),
            dataqueue: StdMutex::new(None),
            pending_queue: StdMutex::new(None),
            last_res: StdMutex::new(Ok(gst::FlowSuccess::Ok)),
            settings: StdMutex::new(Settings::default()),
        }
    }
}

impl ObjectImpl for Queue {
    fn properties() -> &'static [glib::ParamSpec] {
        static PROPERTIES: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
            vec![
                glib::ParamSpecString::new(
                    "context",
                    "Context",
                    "Context name to share threads with",
                    Some(DEFAULT_CONTEXT),
                    glib::ParamFlags::READWRITE,
                ),
                glib::ParamSpecUInt::new(
                    "context-wait",
                    "Context Wait",
                    "Throttle poll loop to run at most once every this many ms",
                    0,
                    1000,
                    DEFAULT_CONTEXT_WAIT.as_millis() as u32,
                    glib::ParamFlags::READWRITE,
                ),
                glib::ParamSpecUInt::new(
                    "max-size-buffers",
                    "Max Size Buffers",
                    "Maximum number of buffers to queue (0=unlimited)",
                    0,
                    u32::MAX,
                    DEFAULT_MAX_SIZE_BUFFERS,
                    glib::ParamFlags::READWRITE,
                ),
                glib::ParamSpecUInt::new(
                    "max-size-bytes",
                    "Max Size Bytes",
                    "Maximum number of bytes to queue (0=unlimited)",
                    0,
                    u32::MAX,
                    DEFAULT_MAX_SIZE_BYTES,
                    glib::ParamFlags::READWRITE,
                ),
                glib::ParamSpecUInt64::new(
                    "max-size-time",
                    "Max Size Time",
                    "Maximum number of nanoseconds to queue (0=unlimited)",
                    0,
                    u64::MAX - 1,
                    DEFAULT_MAX_SIZE_TIME.nseconds(),
                    glib::ParamFlags::READWRITE,
                ),
            ]
        });

        PROPERTIES.as_ref()
    }

    fn set_property(
        &self,
        _obj: &Self::Type,
        _id: usize,
        value: &glib::Value,
        pspec: &glib::ParamSpec,
    ) {
        let mut settings = self.settings.lock().unwrap();
        match pspec.name() {
            "max-size-buffers" => {
                settings.max_size_buffers = value.get().expect("type checked upstream");
            }
            "max-size-bytes" => {
                settings.max_size_bytes = value.get().expect("type checked upstream");
            }
            "max-size-time" => {
                settings.max_size_time =
                    gst::ClockTime::from_nseconds(value.get().expect("type checked upstream"));
            }
            "context" => {
                settings.context = value
                    .get::<Option<String>>()
                    .expect("type checked upstream")
                    .unwrap_or_else(|| DEFAULT_CONTEXT.into());
            }
            "context-wait" => {
                settings.context_wait = Duration::from_millis(
                    value.get::<u32>().expect("type checked upstream").into(),
                );
            }
            _ => unimplemented!(),
        }
    }

    fn property(&self, _obj: &Self::Type, _id: usize, pspec: &glib::ParamSpec) -> glib::Value {
        let settings = self.settings.lock().unwrap();
        match pspec.name() {
            "max-size-buffers" => settings.max_size_buffers.to_value(),
            "max-size-bytes" => settings.max_size_bytes.to_value(),
            "max-size-time" => settings.max_size_time.nseconds().to_value(),
            "context" => settings.context.to_value(),
            "context-wait" => (settings.context_wait.as_millis() as u32).to_value(),
            _ => unimplemented!(),
        }
    }

    fn constructed(&self, obj: &Self::Type) {
        self.parent_constructed(obj);

        obj.add_pad(self.sink_pad.gst_pad()).unwrap();
        obj.add_pad(self.src_pad.gst_pad()).unwrap();
    }
}

impl GstObjectImpl for Queue {}

impl ElementImpl for Queue {
    fn metadata() -> Option<&'static gst::subclass::ElementMetadata> {
        static ELEMENT_METADATA: Lazy<gst::subclass::ElementMetadata> = Lazy::new(|| {
            gst::subclass::ElementMetadata::new(
                "Thread-sharing queue",
                "Generic",
                "Simple data queue",
                "Sebastian Dröge <sebastian@centricular.com>",
            )
        });

        Some(&*ELEMENT_METADATA)
    }

    fn pad_templates() -> &'static [gst::PadTemplate] {
        static PAD_TEMPLATES: Lazy<Vec<gst::PadTemplate>> = Lazy::new(|| {
            let caps = gst::Caps::new_any();

            let sink_pad_template = gst::PadTemplate::new(
                "sink",
                gst::PadDirection::Sink,
                gst::PadPresence::Always,
                &caps,
            )
            .unwrap();

            let src_pad_template = gst::PadTemplate::new(
                "src",
                gst::PadDirection::Src,
                gst::PadPresence::Always,
                &caps,
            )
            .unwrap();

            vec![sink_pad_template, src_pad_template]
        });

        PAD_TEMPLATES.as_ref()
    }

    fn change_state(
        &self,
        element: &Self::Type,
        transition: gst::StateChange,
    ) -> Result<gst::StateChangeSuccess, gst::StateChangeError> {
        gst_trace!(CAT, obj: element, "Changing state {:?}", transition);

        match transition {
            gst::StateChange::NullToReady => {
                self.prepare(element).map_err(|err| {
                    element.post_error_message(err);
                    gst::StateChangeError
                })?;
            }
            gst::StateChange::PausedToReady => {
                self.stop(element).map_err(|_| gst::StateChangeError)?;
            }
            gst::StateChange::ReadyToNull => {
                self.unprepare(element);
            }
            _ => (),
        }

        let success = self.parent_change_state(element, transition)?;

        if transition == gst::StateChange::ReadyToPaused {
            self.start(element).map_err(|_| gst::StateChangeError)?;
        }

        Ok(success)
    }
}


Mississippi is again getting a failing grade from two prominent public health agencies for its overall heath statistics. MPB's Jeffrey Hess reports the president of the Mississippi State Medical Association says teaching children about exercise and proper nutrition could help reverse some of the state's terrible health trends.
Dr. James Rish, the head of the Medical Association, says Mississippi still ranks at or near the top of most negative health statistics like heart disease, diabetes and obesity.
Rish says it is time to shift the focus of the fight on these problems to school age kids in order to prevent the problems before they become adults.
"So I think it is important that we start from the ground up particularly with our emphasis this year being school. Most of the behavior that determine one's health are formed within the first few years of school. So I think that is the smart place to start and try to reverse that trend," Rish said.
Rish says physical education, health meals and nutrition information should be a major part of the education curriculum.
The results come as no surprise to the Senate's public health committee chairman Dean Kirby of Pearl who says public health is on the legislature's radar.
"We are working on it. We pass bills every year to help people to improve the health of the state. I feel good about the direction we are headed. One thing about it, we can't going anywhere but up if we are last," Kirby said.
Dr. Rish also called for more doctors and outreach into under served areas of the state to help improve public health.
Rish says he'd like to see more Mississippians covered by health insurance, but the association is not taking a position on whether lawmakers should expand Medicaid.
The issue has split the legislature with Republicans opposing expansion and Democrats favoring it.


It is air-conditioned although it is not hot inside because it is not on sunny side. So it is suitable for families with small children and those who doesn't like air-condition to much. It has big double bed in sleeping room and comfortable french bed in front room.
There is also another big terace with grill next to the terace of apartment.
There is free private parking place and free Wi-Fi.
House is on good location in pine wood without close neighbours.
La grange aux fées - cottage de 10 pers.


text:
Q: How to compare date without having year parameter, in shell script? I have a log file in Linux looking like this :
Mar  2 09:46:45 [rest of the log]

As many services logs in Debian Linux it does not contain year information, I guess because logs meant to be very recent events.
I want to check if this line of log is for last ten minutes or not, so i did this :
Now="$(date '+%b %d %H:%M:%S')"
echo "Now : $Now"

TENMINSEC=$(date -d 'now - 10 minutes' '+%s')
echo "Ten min before : ${TENMINSEC}"

LOGDAT=$(date -d 'Mar  2 09:45:40' '+%s')
echo "LOGDAT : ${LOGDAT}"

if [ $LOGDAT -ge $TENMINSEC ];then
    echo "Log date is greater";
fi

It convert LOGDAT and last ten minutes to seconds and compare them.
But i got confused if it is doing what i want it to do ? Isn't it effect the result if it dos not contain year information? how can i fix it?
Ps:
I have no problem , reading line of log file. and what it read from log file will be replaced with date in code (Mar  2 09:45:40);

A: If not given a year in the date string, GNU date (which you seem to be using) will assume the date refers to the current year:
$ date -d 'Mar  2 09:45:40'
Sat Mar  2 09:45:40 CET 2019

Converting this date to Unix time and comparing it to some other date on the same format, would therefore do the right thing, except at around midnight on new years eve.

A: If you're not sure what the date command produces for a given date you can always try it. In this specific situation, you'd remove the +%s so you could read the result:
date -d 'Mar 2 09:45:40'    # "02 Mar 2019 09:45:40"

Alternatively, given a time in seconds since the epoch you could convert that value back to a readable date:
time=1546300800
date --date "@$time"        # "01 Jan 2019 00:00:00"

redpajama_set_name: RedPajamaStackExchange


If you've got a solid background with an MD or PhD in the life sciences, you may be ready for a big change away from the academic environment where others have always told you what to do and where your creativity and ambition have been stifled by the educational process. Why not start a business? Become your own boss. Be an entrepreneur where risks can turn into big dollars, self-enhancement and exciting challenges. You've got the background and the right initials after your name. Now may be the time to take a calculated risk and become an entrepreneur.