War of the Rebellion: Serial 008 Page 0218 OPERATIONS IN MO., ARK., KANS., AND IND. T. Chapter XVIII.
purpose. Fearful of the impression which the above scene of confusion might have made, I went to meet them. They had stood without flinching, and in few minutes they were in such shape that I could attack the enemy again.
The Twenty-second Indiana on my right, Captain Welfley's two pieces (one piece had been disabled), the Twelfth Missouri, Captain Hoffmann's battery, and the Thirty-sixth Illinois on my left formed the line. For the reserve I had to rely on the re-enforcements for which I sent to General Curtis.
The enemy soon made his appearance with colors flying on the opposite side of the field which I occupied. Our batteries opened their fire on him, sweeping everything from our sight. I ordered skirmishers from the Twelfth Missouri Volunteers to advance and scour the woods on our right and front and sent one company of Benton's Hussars (which had reassembled) to our left.
On approaching the wood they were received by the enemy with a heavy musketry fire, to which the infantry replied so successfully, that they were able to bring back (from a very exposed position) the piece of Captain Welfley's artillery which had been disabled. This piece afterwards did very good service. For several hours the enemy repeatedly attempted to advance, on each occasion bringing fresh troops into action. However, they invariably had to give way to the unflinching courage of my men. McCulloch and McIntosh led their troops in person and both fell-the former by a ball from a soldier of the Thirty-sixth Illinois Volunteers, Peter Pelican. The enemy's cannon played for a time pretty severely on our ranks, and it became necessary to silence them. My instructions to that effect were so well executed that the rebels were unable even to carry away the three pieces of the flying artillery abandoned by our cavalry in the early part of the day. They had to leave them on the field.


Ioan Stelian Bocsan, MD, PhD, Institute of Public Health; School of Medicine, Iuliu Hatieganu University of Medicine and Pharmacy, 13, Emil Isac Street, RO-3400 Cluj-Napoca, Romania, 40-64-199891, isbocsan@ispcj.ro and Rebecca Davis, PhD, Child Welfare and Protection Project, World Vision International in Romania, Romania.
Romania's child welfare reform initiatives, begun in late 1997, provide parents faced with social, health, and economic problems in caring for children community alternatives to the institutionalization of children. After 3 years of reform significant and positive changes are occurring as Romania's child welfare systems transition to community-based, family focused models of care. This transition includes two parallel processes: deinstitutionalization (diversification of out-of-home models of care) and decentralization (devolution of responsibility to the local community level). There is an assumption in a decentralized system that community supports will mediate family stress, crisis, and dysfunction. In Romania, "community" was destroyed and needs to be rebuilt through community development initiatives. World Vision Romania's community development initiatives parallel child welfare reform efforts, and are in direct support of Romania's public child welfare reform initiatives. But infrastructure alone cannot insure quality of programs and services that contribute to child well-being. Empirical documentation that community, family-based models, in-fact, contribute to improved child well-being need to be provided. This presentation will provide the results of a study by World Vision Romania of young children (ages 0-3) in the various forms of care in the child protection system (institutional, family, and foster family care) in Cluj County on a variety of child well-being indicators (health and social) and compare this to a sample of children in the general population with similar socioeconomic status. Measures of community involvement and support will provide descriptive information about the environmental context of family childcare.


You are visiting the placeholder page for Raul Chavez. This page is here because someone used our placeholder utility to look for Raul Chavez. We created this page automatically in hopes Raul Chavez would find it. If you are not Raul Chavez, but are an alumni of Kearny High School San Diego, CA, register on this site for free now.


30/9/09 – Future appointment – Fontainebleau, Etablissement public du château de Fontainebleau – The news will not surprise readers of The Art Tribune as we had already announced it almost three months ago (see news item of 2/7/09) : Jean-François Hébert will take over Bernard Notari's position as president of the château de Fontainebleau.
Not much is to be said about the qualifications of this new appointment : Jean-François Hébert, an Enarque (graduate of the Ecole Nationale d'Administration), will be replacing another Enarque, Bernard Notari. It is well known that the ENA has now become the ideal training ground for museum directors… There was no hope that a scholar would take over as head of this new public establishment.
The way this choice was made should, however, make us stop and think. Once again, Fontainebleau is used as a political tool and the manner in which the president is regularly removed to make room for another is not a very elegant one. We had hoped that Frédéric Mitterand would not persist in continuing the methods practiced by his predecessors. No doubt the new Fontainebleau president's connections are too influential to ignore.


text:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027
UG.-1.065, Seminar mit Beamer
02.236 Praktikum
UG.-1.064, Konferenzrunde
UG.-1. 066_single desk (internet)
February 2011 - IMIB Räume - UG.-1. 066_single desk (internet)
08 Feb | 09 Feb | 10 Feb | 11 Feb | 12 Feb | 13 Feb | [ 14 Feb ] | 15 Feb | 16 Feb | 17 Feb | 18 Feb | 19 Feb | 20 Feb | 21 Feb

redpajama_set_name: RedPajamaCommonCrawl


Python links the module namespace directly to the layout of the source locations on the filesystem. And this is mostly fine, certainly for applications. For libraries sometimes one might want to control the toplevel namespace or API more tightly. This also is mostly fine as one can just use private modules inside a package and import the relevant objects into the __init__.py file, optionally even setting __all__. As I said, this is mostly fine, if sometimes a bit ugly.
However sometimes you have a library which may be loading a particular backend or platforms support at runtime. An example of this is the Python zmq package. The apipkg module is also a very nice way of controlling your toplevel namespace more flexibly. Problem is once you start using one of these things Pylint no longer knows which objects your package provides in it's namespace and will issue warnings about using non-existing things.
As you can see the hard work of knowing what AST nodes to generate is all done in the astroid.MANAGER.ast_from_module() and astroid.MANAGER.ast_from_module_name() calls. All that is left to do is add these new AST nodes to the module's globals/locals (they are the same thing for a module).
And that's all that's needed to make Pylint work fine with dynamically populated package namespaces. I've tried this on zmq as well as on a package using apipkg and its seems to work fine on both Python 2 and Python 3. Writing Pylint plugins seems not too hard!


text:
Appledystopia
Appledystopia: Information, News and Help for the iPhone, iPad, iPod, Mac and Apple TV
DBTH
Good Apple
Apple TV 4: Fix WiFi Problems
Channels are similar to radio or TV stations. The WiFi bands are like AM, FM, UHF and VHF. Within each band, the channels provide finer tuning of the WiFi frequency. As previously mentioned, the frequency matters when it comes to interference and home architecture. 2.4 GHz can penetrate walls better than 5 GHz, but is subject to more interference from microwaves and wireless devices. 5 GHz, with its higher frequency, can provide faster WiFi speeds, unless walls, furniture or other physical barriers are blocking the signal.
You can use channels to fine tune the best frequencies and overcome physical barriers. For example, channel 11 on the 2.4 GHz band is good at penetrating walls and is also a little faster than channel 1, because it runs at a higher frequency. Channel 36 is the lowest channel on the 5 GHz band. It's your best shot at penetrating walls on the 5 GHz band. I set my router to channel 33 on the 5 GHz band, as it is fast and still able to penetrate one interior wall between my router an Apple TV. If your router and Apple TV are separated by many walls or are on different floors, 2.4 GHz may be the best option.
Selecting different channels is a complicated and time-consuming endeavor. There are no silver bullets, but some guidelines may help. The most important aspect of channels is interference. If you live in close proximity to neighbors who are using channel 36 on their 5 GHz network, this may interfere with your WiFi network with identical settings. You want to find a channel that isn't used by anyone in your proximity. The automatic channel settings on AirPort Extreme and most routers don't do a great job of this.
Some WiFi connection utilities provide information on the bands and channels used by nearby WiFi hotspots. There are some WiFi network inspection tools that can also provide this information. If you own a Mac and use its built-in WiFi, it comes with a tool that can display the bands and channels used by nearby WiFi devices. This may seem like the best approach, however, WiFi bands and channels change constantly. This is because most people use the automatic channels on their router. There really is no scientific approach to this. It's trial and error. With that in mind, let's take a look at how to change WiFi channels.
First, launch the AirPort utility and tap on the AirPort Extreme router icon. Tap on Enter Password, enter your password and tap OK. Tap Edit on the top right of the screen. Tap on Advanced and then Wi-Fi Settings. Tap on Radio Channel. You will see the Radio Channel detail screen. Switch off Automatic Channel on both bands. Now tap on 5 GHz Channel or 2.4 GHz channel to display the channel selector. Tap on a channel from the list. After you have selected a new channel, tap on the back button on the top left. Now tap Done on the top right four times until you see the Update Settings dialog box. Tap Update and wait for your router to update its settings. You'll see a green dot next to the AirPort Extreme's label when it is ready. (continue…)
← prev page | next page →
Follow Appledystopia on Google News
Please Share Your Feedback Cancel reply
Name, email, and website fields are optional.
© 2021 Appledystopia | Privacy & Cookie Policy | Terms of Service


text:
Breaking News ! Keith Urban Has a New Permanent Residence
By CMP on May 25, 2011 in Artists, News
With properties in Nashville, Australia, New York and LA, would it surprise you to learn Keith Urban has acquired another residence – in his own name, in his own right?
Word has it he's been building this one for many years. It hasn't always been easy and there's certainly been plenty of setbacks. But "the second I got here", Urban shares "I loved this town. I didn't want to go back to Australia. I just wanted to stay."
Keith often explains how "I grew up with my dad's record collection. On the back of them it all said 'recorded in Nashville, Tennessee'. So as a seven-year old boy I just went, that's where I'm going to go. Wherever that is, I'm going there."
Well, with a view of the park and neighbors like Reba and Bill Anderson, Keith's Nashville dream has been cast and commemorated in cement. On May 15, 2011, surrounded by family, friends, industry execs and – monkeys – Keith Urban was inducted into the Music City Walk of Fame. Keith (his star-and-guitar plaque) permanently resides in the Walk of Fame Park on Demonbreun Street between 4th and 5th Avenues South and commemorates the "significant contribution" of the 50th resident inductee.
The Music City Walk of Fame was created in 2006 and serves as a tribute to artists across music genres who have made a significant contribution to preserving Nashville's musical heritage. And not only was legendary Ronnie Milsap one of this little boy from Caboolture's early musical inspirations, "to have Ronnie Milsap here to induct me into the Walk of Fame is quite surreal," Urban choked.
Yet it's no secret Keith Urban's Golden Road was paved in "the absolute lowest of lows and the complete highest of highest of highs." Yet Defying Gravity Keith embraced faith and rose above the demons of his Love, Pain & the whole crazy thing lifestyle to Be Here at the Walk of Fame.
His Nashville credits lay permanently in cement inspiring passersby that "if some little kid from some small nowhere town in the middle of Australia can do it, you absolutely can do it too."
And although Keith has amassed countless awards leading to his Star induction, he never forgets "to the fans especially, I really appreciate ya'lls support." Then later, showing off a personal Star plaque handed to him by a monkey (fan) in the crowd, the You'll-Think-of-Me-Stupid-Boy Grammy winner brags proudly on his website that "I got this from the fans. This equally is what it's all about, gifts from you guys, it's so touching for me."
"It (the induction) means more to me than I can describe", Keith concludes. "I love you all. God Bless."
Well, you can certainly catch up with Keith Urban's moving Walk of Fame acceptance speech on YouTube. Personally, I can't wait 'Til Summer Comes Around to catch up with Keith in Boston !
Country Music Pride: best little country music hotspot
View all posts by CMP →
dad, defying gravity, Fame Park, induction, industry execs, musical inspirations, news, plenty, walk of fame, Word
Taylor's The Story of Us Premieres on MTV
Brad Paisley Scores 19th #1 with "Old Alabama"


text:
Home / Store / 1970s / Beatles – Let It Be sealed 1970 U.S. Apple LP
Beatles – Let It Be sealed 1970 U.S. Apple LP
A sealed original U.S. pressing of Let It Be by the Beatles.
Categories: 1970s, Beatles, British Invasion, Items, Rock, Sealed Tags: 1970s, Beatles, british invasion, rock, sealed
Offered for sale is a still sealed original U.S. pressing of Let It Be by the Beatles, complete with gatefold cover.
About this copy: This copy of Let It Be is a still sealed original U.S. copy, complete with the original gatefold cover that was dropped for later reissue pressings.
The wrap is almost fully intact with no rips or tears, aside from a cut corner in the upper left hand corner. The corner cut is a relatively small one. The lower left hand corner is slightly "balding." There is a price sticker on the shrink wrap (not shown in photo.)
As the album is sealed, the record is presumably new and unplayed.
A nice copy of an album that's getting quite hard to find as a sealed copy.
Background: Let It Be was the final studio album by the Beatles, released in May, 1970. As the album was technically a soundtrack album to the film of the same name, distribution of the album was handled by ABCKO, the company that belonged to Beatles manager Allen Klein, rather than Capitol Records.
When Apple Records was dissolved in 1975, Let It Be became the only Beatles studio album to go out of print, and it was actually out of print for several years in the late 1970s and occasionally turned up for sale in discount bins. This is one of those copies.
Allmusic.com gave Let It Be a 4 1/2 star review:
The only Beatles album to occasion negative, even hostile reviews, there are few other rock records as controversial as Let It Be. … All that said, the album is on the whole underrated, even discounting the fact that a sub-standard Beatles record is better than almost any other group's best work. …As flawed and bumpy as it is, it's an album well worth having, as when the Beatles were in top form here, they were as good as ever.
This record is eligible for PayPal Credit financing by PayPal. U.S. customers may choose to pay later at checkout, and may receive up to six months financing with no interest. Click the banner below for more information. (opens in a popup window)
Country of origin: U.S.
Size: 12″
Record Label: Apple
AR 34001
Format: Stereo
To make an offer please complete the form below.
If you do not receive a reply in 24 hours, check your spam folder.
Bob Dylan – Highway 61 Revisited sealed stereo 1965 LP
Still sealed stereo pressing of Bob Dylan's 1965 LP Highway 61 Revisited
Tim Buckley – Greetings from LA sealed white label promo 1972 LP
A sealed white label promotional copy of Tim Buckley's 1972 LP Greetings from LA
Blackfield – Blackfield II sealed original 2007 LP
A sealed copy of the original 2007 album by Blackfield, Blackfield II, featuring Porcupine Tree founder Steven Wilson.
Jethro Tull - A Passion Play 1973 promo-only Edited Version LP Beach Boys - Best of the Beach Boys Vol. 2 sealed mono promo LP
Thank you for the quick response! Your website is great by the way. This find made my weekend!
You're viewing: Beatles – Let It Be sealed 1970 U.S. Apple LP $175.00


text:
Q: Why does underscore's _.isUndefined(variable) give an error that variable is not defined? In Chrome, I'm getting "Uncaught ReferenceError: targetNode is not defined" from this line of code console.log(_.isUndefined(targetNode));.
I get the same error when I do console.log(targetNode === void(0)); and console.log(targetNode);.
typeof targetNode === "undefined" returns true as expected, but my understanding is that the void(0) comparison is more efficient.
I can get around this by setting a default for targetNode or I can just use typeof targetNode === "undefined", but I'm trying to understand why a test for whether a variable is undefined would choke if the variable is undefined.

A: When you ask for targetNode, it looks for a local variable, then in subsequent parent scopes until it reaches the end of the chain. If it still hasn't found it, there's an error.
typeof is special in that it works similar to a try..catch around getting the variable, and returning "undefined" in the catch. Non-native code (such as isUndefined) can't do that since the variable must be resolved in order to pass it to the function.
However, if the symbol is defined, it can be validly passed. For example:
function test(param) {
    console.log(_.isUndefined(param));
}
test("argument");
test(); // undefined argument

Or another example:
function test() {
    console.log(_.isUndefined(foo)); // true, no error due to hoisting
    var foo = 3;
    console.log(_.isUndefined(foo)); // false, foo is defined now.
}

You can also specify an explicit source, such as window.targetNode. window is defined, so the script knows where to look, however the targetNode property may not be defined, in which case you get undefined.

redpajama_set_name: RedPajamaStackExchange


text:
The year of the slap Top movies, ranked 🎥 Top TV shows, ranked 📺 Top albums, ranked 🎶
Jeffrey Epstein accuser says Prince Andrew should 'come clean': 'He knows what he's done'
Erin Jensen
Virginia Giuffre, one of Jeffrey Epstein's accusers who claimed a court filing she was made to sexually service Prince Andrew, commented on the British royal's recent statements about the scandal.
In early 2015, Giuffre accused Epstein and his employees of paying her, when she was 17, to sexually service Epstein, Andrew, Harvard lawyer Alan Dershowitz (then one of Epstein's lawyers), and others of Epstein's rich friends.
Andrew forcefully denied her allegation at the time but there is at least one picture of him with her, which has rattled around the internet for years. (Dershowitz also "vehemently denied" her allegations in a statement issued to USA TODAY by his lawyer, Arthur Aidala, in July.)
Tuesday, outside of a New York court, Giuffre responded to the royal's recent statements about his relationship with Epstein and the allegations.
"He knows what he's done, and he can attest to that," she said. "He knows exactly what he's done, and I hope he comes clean about it."
When reached for comment, Buckingham Palace directed USA TODAY to its previous statements on the subject.
Most recently, Andrew clarified his "former association or friendship" with Epstein in a statement issued to USA TODAY Saturday.
"During the time I knew (Epstein), I saw him infrequently and probably no more than only once or twice a year," the statement from Buckingham Palace read. "I have stayed in a number of his residences. At no stage during the limited time I spent with him did I see, witness or suspect any behaviour of the sort that subsequently led to his arrest and conviction."
Prince Andrew's link to Jeffrey Epstein explained:What does his death mean for the royal?
Prince Andrew makes first public appearance a day after friend Jeffrey Epstein found dead
Giuffre, then known as Virginia Roberts, made the claims about Andrew, in court documents filed in December 2014 when she was seeking to join a lawsuit filed in Florida against Epstein.
However, the judge in the case ruled in April 2015 that her claims regarding Andrew and Dershowitz were "immaterial and impertinent" to her legal argument about joining the lawsuit. He ordered that her claims be struck from the record and denied her attempt to join the suit.
In a rare move, Buckingham Palace issued three increasingly emphatic statements in early January 2015 denying that Andrew had sex with Giuffre at any time or with anyone else underage.
And in an even rarer move, a few weeks later Andrew himself issued a denial when he appeared for his annual visit to the big-wig confab at Davos, Switzerland, where he hosts a British trade reception.
Prince Andrew 'appalled' at Jeffrey Epstein's alleged crimes, palace says
Prince Andrew says he did not 'witness or suspect any' Jeffrey Epstein behavior
Earlier this month – after a video surfaced showing Andrew inside Epstein's Manhattan townhouse, where Epstein was accused of engaging in sex acts with underage girls, in 2010 – the palace issued a statement, condemning Epstein.
"The Duke of York has been appalled by the recent reports of Jeffrey Epstein's alleged crimes," Buckingham Palace said. "His Royal Highness deplores the exploitation of any human being and the suggestion he would condone, participate in or encourage any such behavior is abhorrent."
It is undisputed that Andrew and Epstein were friends from the 1990s. The video suggests Andrew was still in touch with Epstein after he was convicted of soliciting a minor for prostitution in Florida in 2008 and after he served about a year in jail under a plea bargain later assailed as a "sweetheart" deal.
Andrew's relationship with Epstein has caused waves before. In 2011, Andrew had to step down from his coveted job as a British trade ambassador after being dogged by accusations of a lack of judgment due to their friendship.
As for whether he would be indicted in the Epstein case, it isn't likely. Lawyers dismiss the possibility that Andrew could face criminal charges in the U.S., partly because of the statute of limitations and partly because he likely would have immunity as a foreign royal.
See our full coverage of entertainment news
Contributing: Maria Puente and Sara M. Moniuszko


HDFC Standard Life Insurance Company made its stock market debut at a premium of 6.9 percent at Rs 310.90 per share compared to an issue price of Rs 290 apiece. The stock rose as much as 20 percent to Rs 349 thereafter.
The country's third-largest private sector life insurance company' s Rs 8,695-crore initial public offering was subscribed 4.9 times. The offer was the biggest in the life insurance sector.
HDFC Life, is a joint venture between HDFC and Standard Life Plc. HDFC raised nearly Rs 5,550 crore (sold 9.52 percent stake) and Standard Life Rs 3,150 crore (sold 5.4 percent stake) at the top end of the price band.
The company offers a product portfolio of 32 individual and 10 group products including protection, pension, savings and investment and health, along with children's and women's plans.
It has 66,372 individual agents – comprising 6.8 percent of all private agents in the Indian life insurance industry – and 125 banking tie-ups including HDFC Bank giving it access to a huge branch network. Nearly 60 percent of HDFC Life's business comes from bancassurance and individual agents while the rest is from direct sales and brokers.


Makeup-lovers, assemble: Ulta just dropped Marvel's Avengers collection, and it's out-of-this-world affordable. The line was created to celebrate the highly anticipated release of Avengers Endgame on April 26. It includes a 15-shade eye shadow palette, superpowered lip glosses, long-lasting matte liquid lipsticks, and a four-pan highlighting palette.
The products come with inspiring names like: "I've Got This," "Built For Battle," and "Fearless" to further inspire you to reach your highest dreams. If that's not exciting enough, they also feature colorful themed packaging that will make you feel heroic by default. Keep reading to shop all the items in the collection, plus a few makeup bags and organizers for all your new goodies.


First Rehearsal for LTYM Boulder 2016!
To say our production team had been looking forward to last night is an understatement. Earlier this month we put together our cast after a powerful audition process, and ever since then we've been eagerly anticipating that magic moment (and believe me, it is magic) when the cast meets for the first time and hears one another's stories. There's just nothing like it.
There's laughter (a lot of laughter), tears, and the waves of "me, too!" head-nodding around the table, just like there will be at the show, but it's different during this first read-through. The synergy and connection that happens when a Listen To Your Mother cast gathers for the first time and witnesses the powerful words of their cast mates is something special, and we as a production team were so honored to be part of it.
We had the pleasure of watching our talented, unique cast share their stories with each other for the first time, and now we absolutely can't wait for them to share them with YOU for the first time! You'll hear unforgettable stories ranging from pregnancy to an empty nest, from postpartum challenges to special needs parenting, and from WWII travel adventures to the complexity of the mother-daughter relationship. We aren't exaggerating when we say: you don't want to miss this show. So don't wait any longer and get your tickets now— our April 30th show is right around the corner and will be here before you know it!
See you at Unity of Boulder on Saturday, April 30th at 7:00 pm!
I am thrilled to announce that I have auditioned and been cast in the 2016 "Listen to Your Mother" production in Boulder.
The live show will take place on Saturday, April 30 at 7:00 p.m. at Unity of Boulder.
LTYM productions take place in 41 cities throughout the country! Each show features live readings by local writers.


text:
Tag Archives: death valley national park
Community News, Local News
December 12, 2019 Bradford Evans
Death Valley National Park invites the public to a fun day outdoors counting birds on Saturday, December 21. All skill levels are welcome for this opportunity to meet new people and learn about birds while contributing to a citizen-science effort continuing for over a hundred years.
The Christmas Bird Count will begin at 7 a.m. on Saturday, December 21 at Furnace Creek Golf Course parking lot in the Oasis at Death Valley. No experience is necessary! This is a great opportunity to learn about birds, get identification tips, and meet others interested in birding. Participants should dress in layers and wear sturdy shoes. Bring a hat, sunscreen, water, and snacks. Binoculars are recommended. Participants do not need to commit to the entire day, but must be there at 7 a.m. Contact Carol Fields at 760-786-3252 or carol_fields@nps.gov to sign up for the count.
This event is part of the nation-wide National Audubon Society's Christmas Bird Count (CBC). This year will be the 120th year of the national Christmas Bird Count, making it one of the longest-running citizen science events in the world. Death Valley National Park has been collecting CBC data since 1957. The data collected helps demonstrate the important role national parks serve for migratory and overwintering bird populations.
The data collected by CBC participants documents the long-term health and status of bird populations across North America. When combined with other bird surveys, it provides a picture of how the continent's bird populations have changed over the past 120 years. The long-term perspective made possible by the Christmas Bird Count is vital for conservationists. It helps guide strategies to protect birds and their habitat, and helps identify environmental issues with implications for people as well. Each year, the CBC mobilizes more than 70,000 volunteers in more than 2,400 locations. Results from past counts can be viewed at http://birds.audubon.org/christmas-bird-count.
bishop ca newsDeath Valleydeath valley national parkdeath valley newskibs kbovkibs local newsKIBS Radio
Salt Creek Boardwalk and All Campgrounds Open
November 26, 2019 Bradford Evans
DEATH VALLEY, CA – Salt Creek Boardwalk and all campgrounds are now open in Death Valley National Park. However, visitors should be aware of severe winter weather forecasted for Thanksgiving week.
Salt Creek Boardwalk, which has been closed for months due to safety hazards, recently reopened. Park employees and volunteers from Apple replaced over one hundred broken or sagging boards.
Death Valley generally welcomes a large number of visitors during the week of Thanksgiving. However, travelers this year should be cautious of winter storms that might bring snow as low as 3,200 feet in the park.
All park campgrounds are now open. However, Mahogany Flat Campground (elevation 8,200') and Thorndike Campground (elevation 7,400') will close if snow makes them inaccessible.
death valley national parkdeath valley newskibs kbovkibs newsthanksgiving weekend death valley
Scotty's Castle Renovations Continue
Death Valley, Calif.— Scotty's Castle located in the northern region of Death Valley National Park has been closed since October 18, 2015 when almost three inches of rain fell on the Scotty's Castle area in Grapevine Canyon. The flash flood that ensued dramatically changed the landscape, the road and utilities were destroyed and some buildings damaged. Repairs are estimated at $47 million. Repairs are being funded over multiple years from a number of sources: park entrance fees, Federal Highways Administration, National Park Service deferred maintenance accounts, and donations.
Post flood, Death Valley National Park has requested funding from the Death Valley Natural History Association (DVNHA) to assist with funding several curatorial projects at Scotty's Castle including: treatment of the silver collection, conservation of the Scotty's Castle Upper Music Room Curtains, and repairs to the Scotty's Castle Welte-Mignon Theatre Organ currently underway.
The Death Valley Natural History Association presented a check this week in the amount of $41,420 to fund the
reproduction of eight leather curtains in the Great Hall of Scotty's Castle. The original painted and tooled sheepskin curtains are severely deteriorated. After 90 years of use in the desert, they have desiccation, tears, fading, cracking and loss of tassels. A professional conservation examination in 2012 determined that the
curtains are beyond repair. All curtains at Scotty's Castle have an important function in protecting sensitive historic furnishings and textiles from further UV damage and also allow visitors to visualize the space as it was when occupied by the Johnson's in the 1930s.
A complex project, leather stamps for this project were manufactured in 2018 using NPS funding and artisans
capable of stamping, cutting, coloring, and sewing the fully replicated reproductions took years to find. Appropriate weight and color matched leather is being sourced and artisans are now ready to begin work.
"This is the perfect timing for preservation and conservation work to take place while the collection has been taken out of Scotty's Castle. Due to lack of temperature and humidly controls the entire collection normally housed within the Castle was removed for its protection. We have been working as fast as we can to raise
money so that necessary repairs to collection items can be made and so that the historic house can be reopened as complete as possible," said David Blacker Executive Director of the Death Valley Natural History Association. "It all takes time and people willing to contribute."
The Scotty's Castle Historic District is scheduled to reopen in October 2021. During the closure, there are limited opportunities to visit Scotty's Castle with a park ranger and see first-hand how the power of water shapes the landscape of Death Valley, listen to the stories of this unique palace in the desert, the people who called it home, and the projects underway to reopen this unique historic district. This season's tours are offered on Sundays from December 8, 2019 through April 12, 2020. Reservations are required in advance. Tickets are $25 per person, available at www.dvnha.org. Proceeds from the tour benefit the Scotty's Castle Historic Preservation Fund to support projects like the aforementioned. An additional $25,000 is needed for conservation treatment of the Scotty's Castle Dining Room Curtains.
For more information on the Death Valley Natural History Association or to make a donation to the Scotty's Castle Historic Preservation Fund please visit: www.dvnha.org.
death valley national parkdeath valley newsdvnpkibs kbov newsKIBS KBOV Radiokibs newesKIBS Radioscotty's castly
Saline Valley Warm Springs Management Plan Update
June 18, 2019 Bradford Evans
Record of Decision for the Saline Valley Warm Springs Plan
DEATH VALLEY, CA – The National Park Service announces the availability of the Record of Decision (ROD) for the Saline Valley Warm Springs Management Plan and Environmental Impact Statement (plan/EIS). The Record of Decision outlines the agency's actions for managing visitor use, natural resources, cultural resources, and facilities at this backcountry site.
The selected alternative will allow for the continued recreational use of the warm springs, while balancing the protection of natural resources and historic and ethnographic values. The selected alternative incorporates community engagement through Memorandums of Understanding (MOUs) with interested organized groups.
Saline Valley Warm Springs are located in a remote northwest corner of Death Valley National Park, 35 miles from the closest paved road. The springs have been important to the Timbisha Shoshone Tribe since time immemorial. Recreational users developed soaking tubs and art installations starting in the 1950s. The site was managed by the Bureau of Land Management until it was transferred to NPS with the California Desert Protection Act in 1994.
The NPS started working on a management plan for the site in 2012. Inyo County, the BLM, and the Timbisha Shoshone Tribe participated in the plan as cooperating agencies. Several organizations were heavily involved in providing comments, including the Saline Preservation Association and Recreation Aviation Foundation.
The National Park Service posted the completed Saline Valley Warm Springs plan/EIS on May 10. The Record of Decision is the formal approval of the plan and makes it effective as of June 14.
Death Valleydeath valley national parkdeath valley newskibs newslas vegas newsNevadapahrump
Scotty's Castle Projects Pass Environmental Assessment
April 5, 2019 Bradford Evans
DEATH VALLEY, CA – The National Park Service (NPS) has completed its final environmental reviews of proposed projects to repair flood damage at Scotty's Castle. Meanwhile, work has already started on projects approved earlier. The popular historic site could be partially open by late 2020 and is expected to be fully open by late 2021.
A severe flash flood on the night of October 18, 2015 sent water, mud, and rocks rushing down Grapevine Canyon. The flood broke through the walls of the historic Garage, in use by the NPS as the site's visitor center, and filled it with four feet of debris. Two other historic buildings were damaged by the flood. The main house escaped the path of the flood, but bore lesser damage from water intrusion from heavy rain.
The NPS prepared two environmental assessments (EAs), each of which addressed different proposed actions to repair flood-damaged infrastructure in Grapevine Canyon. The Bonnie Clare Road Reconstruction EA was finalized in May 2018, and approved proposals to reconstruct 7.6 miles of Bonnie Clare Road, install 4,000 feet of waterline under the road, reconstruct damaged portions of the historic concrete and wire fence, and stabilize the historic bridge and gatehouse.
Road and Highway Builders started work in December 2018 on all four of these projects under contract managed by Federal Highways Administration.
The Scotty's Castle Flood Rehabilitation EA was finalized on March 12, 2019. Some proposed actions approved in this EA include repairing historic structures, replacing components utility systems, building a second public restroom, building flood control structures, and building a cooling tower for a replacement heating, ventilation, and cooling (HVAC) system. This EA completes the legal requirements of the National Environmental Policy Act (NEPA), but each project will need additional review to meet requirements of the National Historic Preservation Act (NHPA).
The National Park Service cares for special places saved by the American people so that all may experience our heritage. "This is where things can get tricky," said Abby Wines, spokesperson for Death Valley National Park. "Sometimes we have to make trade-offs. In a few cases, we are proposing significant changes to the historic district in order to protect the historic district. A purest might say that we shouldn't build any berms, flood walls, or shallow channels because they weren't in the historic district during the 1920s. But if we don't build flood control structures, we risk losing a lot more in the next major flood. It would be great if we could magically protect the site without changing a thing, but it's not possible."
If things go smoothly, several major contracts should be awarded within the next 6 months.
The EA and Finding of No Significant Impact documents can be viewed at https://parkplanning.nps.gov/castle.
death valley national parkdeath valley newskibs kbovkibs newsKIBS Radio
Death Valley National Park Gains Land and More
March 21, 2019 Bradford Evans
DEATH VALLEY, CA – The largest national park outside of Alaska just got bigger. On March 12, President Trump signed public lands legislation that included several changes to Death Valley National Park.
The John D. Dingell, Jr. Conservation, Management, and Recreation Act (Public Law 116-9) transferred approximately 35,000 acres of land from the Bureau of Land Management (BLM) to the National Park Service. Already nearly the size of Connecticut, Death Valley National Park increased by about 1% to 3,422,024 acres.
One part of the transfer is a 6,369-acre lollipop-shaped section of land adjacent to the Big Pine – Death Valley Road in the northern part of the park. It includes the Crater Mine, a colorful former sulfur mine.
The 28,923-acre "Bowling Alley" is a long, narrow swath of land on the northern border of Fort Irwin National Training Center. This area includes a portion of the Quail Mountains.
About 93% of the park is designated as the Death Valley National Park Wilderness, which is the sixth-largest wilderness area in the nation and the largest outside of Alaska. The Dingell Act added 87,999 acres of wilderness in North Eureka Valley, Panamint Valley, Warm Springs, Ibex, Bowling Alley, and Axe Head.
The Act designated 5.3 miles of Surprise Canyon Creek as a Wild River. The wild river designation provides further protection to this rare desert creek and adjacent Panamint City, a 1870s silver mining ghost town.
The Dingell Act authorizes the operation and maintenance of the existing microwave telecommunications infrastructure on Mormon Peak. AT&T owns this facility, which has been in legal limbo since the land it sits on was designated as wilderness in 1994. With the exception of satellite connections, the Mormon Peak facility relays all land-line telephone, cell phone, and internet connections for Death Valley residents and visitors.
–www.nps.gov/deva-
bishop caDeath Valleydeath valley national parkInyo Countylocal newsmammoth ca news


text:
Attorney Speaking & Writing
Marie Milie Jones and Michael Lettrich Speakers at Prison Risk Management Workshop
Marie Milie Jones and Michael Lettrich served as presenters at the Prison Risk Management Workshop held by the County Commissioners Association of Pennsylvania on May 23, 2019. Marie spoke on the topics "Managing Transgender/LGBT Inmates" and "Prison Litigation Reform Act" and Mike spoke about "Inmate Mail" to those persons working in prison-related fields.
JonesPassodelis Sponsors Catholic Charities Annual Bishop's Dinner "Champions for Change" Gala
JonesPassodelis proudly served as a Pillar of Appreciation sponsor for Catholic Charities of Pittsburgh Annual Bishop's Dinner "Champions for Change" Gala on May 14, 2019. This annual event, hosted by the Most Reverend David A. Zubik, honored Champions for Change through service, innovation, faith in action and leadership. Catholic Charities is dedicated to improving the qualify of life for all of those in need, regardless of religious affiliation.
Marie Milie Jones Writes Article for Pennsylvania County News
Marie Milie Jones contributed an article entitled "HR Considerations in the Age of Medical Marijuana" to the Pennsylvania County News, a publication of the County Commissioners Association of Pennsylvania.
JonesPassodelis and Marie Milie Jones Sponsor Duquesne University Spirit of Diversity Dinner & Scholarship Benefit
JonesPassodelis and Marie Milie Jones served as a Partner Sponsor for Duquesne University's Spirit of Diversity Dinner & Scholarship Benefit. The Office of Diversity and Inclusion of Duquesne University held its annual event on April 12, 2019. This year's scholarship awardees included a select group of Duquesne University students recognized for their leadership and academic accomplishments, both within and outside of the University.
JonesPassodelis Sponsors PMH Foundation 5th Annual Benefit Bash
JonesPassodelis was honored to serve as a Tenor Sponsor for Passavant Memorial Homes Foundation's 5th Annual Benefit Bash on April 11, 2019. This year's event held at Stage AE featured several musical guests. PMHF ensures the financial stability of Passavant Memorial Homes quality programs, which care for the physical, emotional, social and spiritual needs of children and adults with intellectual disabilities, autism and behavioral health issues while promoting choice and independence.
Marie Milie Jones Speaks at PCCA Spring Conference and Training Seminar
Marie Milie Jones presented at the Pennsylvania County Corrections Association Spring Conference and Training Seminar on April 2, 2019 at The Altoona Grand Hotel. Ms. Jones spoke on the topic of The Family Medical Leave Act and Employee Discipline/Termination. The PCCA provides continuing education and training for correctional administrators in new and developing aspects of correctional management.
JonesPassodelis Sponsors Amen Corner 59th Annual Judicial Reception
JonesPassodelis sponsored Amen Corner's 59th Annual Judicial Reception held on April 2, 2019 at The Carlton in Pittsburgh, Pennsylvania. Amen Corner's Judicial Reception recognizes members of the judiciary for their leadership and excellence. The Honorable Justice Max Baer and The Honorable Maureen Lally-Green were honored at this year's event.
JonesPassodelis Sponsors WBA Susan B. Anthony Reception
JonesPassodelis proudly served as a sponsor for the Women's Bar Association Susan B. Anthony Reception honoring Carol L. Hesz, Esquire. The Susan B. Anthony Award is given to an individual who most exemplifies the objectives and goals of the WBA by promoting equality in the legal profession. Marie Milie Jones is a past recipient of this award.
Marie Milie Jones Presents at Premier Employment Law Event
Marie Milie Jones served as a presenter at PBI's Employment Law Institute West, the premier employment law event in Western Pennsylvania, on November 13, 2018 at the Pittsburgh Marriott City Center. Ms. Jones was one of three presenters, along with a federal judge and plaintiff employment lawyer, who spoke on the topic of "Situational Awareness in Trial Advocacy in Employment Litigation". The Institute offers an exceptional educational experience and networking opportunities.
JonesPassodelis Lawyers Lecture at CCAP Academy for Excellence in County Government Program
Marie Milie Jones and Michael Lettrich lectured at the CCAP Academy for Excellence in County Government Program on October 4, 2018 at the CCAP Office in Harrisburg. The topics of Employment Discrimination Claims, Civil Rights Issues and Title VII Harassment were covered. The program was held exclusively for County Officials and Staff such as Commissioners, Solicitors and Human Resources personnel.
JonesPassodelis Proudly Supports Passavant Memorial Homes Annual Golf Classic
JonesPassodelis proudly served as a Gold Sponsor for the Passavant Memorial Homes Foundation 26th Annual Golf Classic held on August 13, 2018 at the Olde Stonewall Golf Club in Ellwood City. Passavant provides a continuum of care for children, adults and seniors with intellectual disabilities. The proceeds from the golf outing will be used to improve training facilities and establish an electronic software platform to facilitate mandatory and enhanced training capabilities.
JonesPassodelis Sponsors Holy Trinity Greek Orthodox Church's Annual Golf Outing
Dean Passodelis co-chaired the Holy Trinity Greek Orthodox Church's Annual Golf Outing at Diamond Run Country Club on June 25, 2018. The firm acted as a Tee Sponsor for the outing and fielded a foursome that earned a third place finish.
Marie Milie Jones Participates in Women's Institute for Leadership in Law-ACBA Institute for Gender Equality Program
Marie Milie Jones participated as a panel speaker on June 21, 2018 at the Women's Institute for Leadership in Law-ACBA Institute for Gender Equality program in Pittsburgh focused on stategies to help women lawyers understand financial drivers that enhance their value within an organization. This program is part of an ongoing "boot camp" experience to assist women in career advancement in the law.
Dean Passodelis Speaks at MEDMARC's 31st Medical Device Seminar in Santa Fe, NM
Dean Passodelis presented on the topic, "The Opioid Crisis and the response by DEA, HHS, State AG's and What the Future Holds" at MEDMARC'S 31st Medical Device Seminar. The annual seminar focuses on products liability risks facing medical technology and life sciences companies. Passodelis was previously honored by this organization as its national attorney of the year in 2013.
JonesPassodelis Sponsors Holy Trinity Greek Orthodox Church's 95th Anniversary Gala
JonesPassodelis proudly served as decorations sponsor for the Holy Trinity Greek Orthodox Church (Pittsburgh) 95th Anniversary Gala Event on June 3, 2018. The event also celebrated the 5th Anniversary of the opening of the congregation's new church.
Marie Milie Jones and Michael Lettrich Presenters at Prison Risk Management Workshop
Marie Milie Jones and Michael Lettrich presented at the County Commissioners Association of Pennsylvania Prison Risk Management Workshop at the Hotel Hershey on May 24, 2018. Marie and Mike spoke on the topics "Trends in Employment Law" and "Strip Searches" to a group of correctional staff, risk managers and other county officials or employees dealing with risk management in the prison setting.
JonesPassodelis Sponsors Catholic Charities Annual Bishop's Dinner
JonesPassodelis was proud to serve as a Pillar of Healing sponsor for the 36th Annual Bishop's Dinner for Catholic Charities of the Diocese of Pittsburgh on May 11, 2018. Hosted by the Very Reverend Bishop David A. Zubik, the dinner celebrates the men, women and organizations whose compassionate service helps to turn around the lives of neighbors in need.
Marie Milie Jones Receives Honorary Doctor of Laws Degree from Duquesne University
Marie Milie Jones received an Honorary Doctor of Laws Degree from Duquesne University on May 11, 2018 in recognition of her longstanding service to the University as a Board Member and as Chair of the Board of Directors.
JonesPassodelis Sponsors Passavant Memorial Homes Benefit Bash
JonesPassodelis was proud to serve as an Alto Level Sponsor for the 4th Annual Passavant Memorial Homes Benefit Bash on April 29, 2018. This firm client supports persons with intellectual disabiilties and behavioral health needs. This year's proceeds will be used to improve employee training facilities and establish software to enhance training capabilities to ensure the Passavant team is equipped to provide quality care to the individuals they serve.
Marie Milie Jones Speaks at LeadersNow International Career Meeting
Marie Milie Jones was a speaker at the LeadersNow International Career Meeeting held at the LeadersNow local chapter in Wexford on December 14, 2017. This organization promotes the dignity and integrity of young women and provides formation and skills necessary in order to make a positive impact in society.
JonesPassodelis, PLLC and Marie Milie Jones Honored at CCAP Fall Conference
At the November 20, 2017, County Commissioners Association of Pennsylvania Fall Conference, the Pennsylvania Counties Risk Pool members joined to celebrate the insurance pool's 30th Anniversary. The theme was "The Power of Partnership". At this event, PCoRP honored JonesPassodelis, PLLC and Marie Milie Jones for their service to PCoRP and its members.
Marie Milie Jones Participates as Table Facilitator in the National Conversation of Board Diversity
Marie Milie Jones participated as a Table Facilitator in the National Conversation on Board Diversity held on November 16, 2017 as part of the 2020 Women on Boards Initiative at the Fairmont Hotel in Downtown Pittsburgh.
Marie Milie Jones and Michael Lettrich Presenters at County Risk Managers Council Meeting
Marie Milie Jones and Michael Lettrich presented at the County Risk Managers Council Meeting at the Regional Learning Alliance in Cranberry Township on November 15, 2017. Marie and Mike spoke to a group of Risk Managers and other County leaders on civil rights, employment and general liability considerations relating to task force agreements and other contracts with municipal entities.
JonesPassodelis PLLC Sponsors Carlow University Women of Spirit Benefit Concert featuring Marianne Cornetti, Carnegie Music Hall
Firm proudly supported concert benefitting scholarships for students in need.
JonesPassodelis PLLC Co-Sponsors IADC Mid-Atlantic Regional Meeting on The Advent of Autonomous Vehicles and Their Impact on Litigation
10/31/2017 | IADCLaw.org
Engage in an evening of social networking, explore The Clemente Museum, and partake in a panel discussion on
The Advent of Autonomous Vehicles and Their Impact on Litigation. November 16, 2017, 5:00 - 7:30 p.m. Please contact Dean Passodelis for details and registration information.
Marie Jones Speaks at Pennsylvania Bar Association, Minority and Women Lawyers' Business Development Forum
Pennsylvania Bar Association, Minority and Women Lawyers' Business Development Forum, "Pathways to Success: How to Enhance Your Status in Your Firm Through Increasing Business Relationships and How to Transition to Leadership Opportunities Both Within and Outside the Legal Profession", September 28, 2017, Omni William Penn Hotel, Pittsburgh, Pennsylvania.
Marie Milie Jones Recipient of the 2017 Greensburg Central Catholic Distinguished Centurion Achievement Award
Marie Milie Jones was presented with the 2017 Distinguished Centurion Achievement Award from her high school alma mater, Greensburg Central Catholic. This award is intended to honor an individual who has made a significant contribution to the community or workplace and who serves as a positive role model for Greensburg Central Catholic students.
FDCC Over and Above - Marie Milie Jones
Marie Jones (Pittsburgh) serves as the Chair of the Board of Duquesne University in Pittsburgh. This Catholic Spiritual Institution of higher education is focused on high quality academics in an environment that allows students to be educated for the mind, the heart, and the soul. Marie serves Duquesne as her alma mater from both undergrad and law school.
Marie Milie Jones Recipient of the 2016 Allegheny County Bar Association Civil Litigation Section Professionalism Award
10/27/2016 | Lawyers Journal: The Journal of the Allegheny County Bar Association
Marie Milie Jones was honored with the 2016 Allegheny County Bar Association Professionalism Award during the Civil Litigation Section's annual Luncheon with the Judges on October 27, 2016. The Professionalism Award is given annually to a distinguished member of the profession who has been active in the bar association, has a minimum of fifteen (15) years of experience in civil litigation and has exhibited the intangible, but recognizable, qualities of professionalism.
And The Defense Wins - June 2016
06/08/2016 | DRI - The Voice of the Defense Bar
Constantine "Dean" Passodelis of the Pittsburgh law firm of JonesPassodelis PLLC represented DENTSPLY International in a product liability case. On February 29, 2016, the Court of Common Pleas of Allegheny County, Pennsylvania, granted summary judgment in favor of DENTSPLY International in Fornalczyk vs. DENTSPLY International, et al., (GD 13-10756), dismissing plaintiff's remaining product liability claims.
Constantine "Dean" Passodelis Elected to Membership in "Invitation Only" Defense Organization
Constantine "Dean" Passodelis has been elected to membership in the International Association of Defense Counsel. The core purpose of the IADC is to enhance the development of skills, professionalism, and camaraderie to serve and benefit the members, their clients, the civil justice system, the legal profession and society in general. The IADC membership is comprised of the world's leading corporate and insurance lawyers and insurance executives. Members of the IADC are part of a powerful and select group with advanced skills in defense law.
Marie Milie Jones Elected to Membership in "Invitation Only" Defense Organization
Marie Milie Jones has been elected to membership in the Association of Defense Trial Attorneys. Membership in the ADTA is comprised of exceptional members of the defense trial bar. ADTA only permits one prime member per one million population for each city, town or municipality. This exclusive selection process assures potential clients that they have the name of a highly qualified, experienced and successful defense trial attorney in that community or region.
And the Defense Wins - December 16, 2015
On October 7, 2015, Judge Mark Hornak granted complete summary judgment to firm client Novartis Pharmaceuticals Corporation because plaintiffs failed to satisfy their proximate cause burden in a failure-to-warn lawsuit alleging that the prescription drugs Aredia and Zometa caused osteonecrosis of the jaw ("ONJ"). Novartis Pharmaceuticals Corporation was represented by Katharine R. Latimer and Heather Pigman of Hollingsworth LLP, as well as Constantine Passodelis of Jones Passodelis, PLLC.
33rd Annual Bishop's Dinner
Marie Milie Jones Serves as Host Chair for this annual fundraising event supporting Catholic Charities.
Federated Investors, Inc. Elects Jones to Board of Directors
Federated Investors, Inc., one of the nation's largest investment managers, elected Marie Milie Jones as an independent director of the company.
Constantine J. "Dean" Passodelis Awarded Medmarc's 2013 Defense Lawyer of the Year
Constantine J. "Dean" Passodelis has been awarded Medmarc Casualty Insurance Company's 2013 Defense Lawyer of the Year. Medmarc is a leading resource for insurance and risk management solutions to medical technology and life sciences companies. This award is presented each year at the Medmarc annual meeting of nationwide counsel.
Fish Sandwich Chronicles: Marie Jones
03/01/2013 | Pittsburgh Business Times
Marie Milie Jones talks about the firm and her commitment to local businesses.
Marie Milie Jones of JonesPassodelis Holds the Bread and Cheese
Marie Milie Jones, founding partner of law firm JonesPassodelis PLLC and chair of her alma mater Duquesne University's board of trustees, goes beyond fish on Fridays when it comes to observing Lent.
Marie Milie Jones Recipient of the 2012 Duquesne University Law Alumni Association Meritorious Service Award
Marie Milie Jones was presented with the Duquesne University Law Alumni Association Meritorious Service Award at the 60th Annual Duquesne University Law Alumni Reunion Dinner. The Meritorious Service Award is presented in recognition of services rendered and contributions made to the Law Alumni Association and the Law School. The focus of this award is on commitment to the advancement of the Law School.
The Legal's Top Lateral Hires of 2011
02/21/2012 | The Legal
Jones Passodelis among The Legal's Top Lateral Hires of 2011.
Honoree 'Humbled' to Receive Law Society Award
Marie Milie Jones received the St. Thomas More Society's St. Thomas More Award, the highest honor given by the association of Catholic lawyers.
Marie Milie Jones Recipient of St. Thomas More Award
Marie Milie Jones has been awarded the St. Thomas More Award, the highest honor given by the St Thomas More Society for Catholic lawyers. Following the annual Red Mass, Jones was presented this honor at a dinner held at Duquesne University.
Constantine "Dean" Passodelis Succeeds with Long-Term Strategy
09/16/2011 | http://www.bizjournals.com/pittsburgh/print-edition/2011/09/16/passodelis-succeeds-long-term-strategy.html
Lawyer Constantine "Dean" Passodelis made the biggest change of his career this year. In June, he and Marie Milie Jones left Meyer Darragh Buckler Bebenek & Eck PLLC — where both built their careers and also consecutively served as the Downtown law firm's top executive — to start their own firm, JonesPassodelis PLLC.
Meyer Darragh Lawyers Break Away to Form JonesPassodelis in Downtown Pittsburgh
Five lawyers, including two who led Meyer Darragh Buckler Bebenek & Eck PLLC for a combined 12 years have formed a new law firm: JonesPassodelis.
Local Lawyers' Splits Stack Up
Recent breakaways linked to 'volatility'


Ford Motor Company (Ford) is recalling certain 2018 Ford F-150 Raptor Super Cab pick-up trucks not equipped with a moonroof. The structural roof braces may be missing rivets at the attachment of the roof rail, thereby reducing the structural integrity.
If the structural integrity is reduced, in the event of a rollover crash, there may be an increased risk of injury .
Ford will notify owners, and dealers will install the rivets for the roof brace attachments, free of charge. The recall began October 17, 2017. Owners may contact Ford customer service at 1-866-436-7332. Ford's number for this recall is 17S29.
Ford Motor Company (Ford) is recalling certain 2018 F-150 vehicles equipped with a 3.3L engine, a 6-speed transmission and a column mounted shift lever. Quickly moving the shift lever from Park to Drive may cause a loss of gear indication on the instrument cluster display and a momentary selection of an unintended gear, such as Reverse or Neutral before the vehicle achieves Drive function.
Unidentified or unintended gear selection may cause the vehicle to move in a way that was not intended by the driver, increasing the risk of crash or injury.
Ford will notify owners, and dealers will reprogram the powertrain control module, free of charge. Owners may contact Ford Customer Service at 1-866-436-7332. Ford's number for this recall is 17S35.
Ford Motor Company (Ford) is recalling certain 2018 F-150 vehicles equipped with 3.5L engines. The cylinder heads may have been machined without lubrication supply holes for the camshaft bearing journals.
Without a proper supply of lubrication, the engine will fail, causing a stall and increasing the risk of a crash.
Ford is not aware of any affected vehicles outside of dealer control. Should owner contact subsequently be required, arrangements will be made to transport their vehicle to a Ford or Lincoln dealer to have the engine replaced.The recall began October 24, 2017. Owners may contact Ford customer service at 1-866-436-7332. Ford's number for this recall is 17S37.
Despite the transmission shift lever being placed in 'Park' and the instrument panel display indicating 'Park,' the vehicle may roll away after it has been exited if the parking brake has not been applied, increasing the risk of injury or a crash.
Ford will notify owners, and dealers will inspect the transmission to make sure it has the roll pin, installing one if it is missing, free of charge. The recall began on April 13, 2018. Owners may contact Ford customer service at 1-866-436-7332. Ford's number for this recall is 18S09.
Ford Motor Company (Ford) is recalling certain 2018 F-650 and F-750 vehicles equipped with 6-speed automatic transmissions and 2018 Ford F-150 and Expedition vehicles equipped with 10-speed automatic transmissions (excluding Expedition vehicles with a Rotary Gear Shift Dial on the console). The gear shift cable clip may not be properly seated, allowing the transmission to be in a different gear than indicated by the gear shift lever position.
If the gear shift cable clip becomes unseated or dislodged, the gear shift lever position may indicate that the transmission is in 'Park' when it may be in a different gear. Additionally, despite selecting 'Park', if the parking brake is not applied before the vehicle is exited, the vehicle may roll. Either scenario increases the risk of a crash.
Ford will notify owners, and dealers will inspect the shift cable locking clip and properly seat it, if necessary, free of charge. The recall began on April 13, 2018. Owners may contact Ford customer service at 1-866-436-7332. Ford's number for the recall is 18S10.
Ford Motor Company (Ford) is recalling certain 2018 Ford Expedition, F-150, and Lincoln Navigator vehicles equipped with 3.5L GTDI V6 engines. These vehicles have high pressure fuel pump assemblies with welds that can fracture, which may cause an oil or fuel leak.
Ford will notify owners, and dealers will replace the high pressure fuel pump and associated components, free of charge. The recall began July 17, 2018. Owners may contact Ford customer service at 1-866-436-7332. Ford's number for this recall is 18S17.
When the heater is plugged in, prolonged corrosion could cause a resistive short, increasing the risk of overheated or melted wiring which can increase the risk of a fire.
Ford will notify owners, and dealers will disable the block heater cable, free of charge. Once parts are available, Dealers will replace the engine block heater cable, free of charge. Ford mailed a letter notifying owners of the recall January 15, 2019. Owners will receive a second notification when parts are available. Owners may contact Ford customer service at 1-866-436-7332. Ford's number for this recall is 18S45.
A damaged cable could cause a resistive short, increasing the risk of overheated or melted wiring, increasing the risk of a fire.
Ford will notify owners, and dealers will disable the engine block heater from being used. When replacement cables become available, a second notice will be mailed and dealers will replace the engine block heater cord, free of charge. The recall is expected to begin April 22, 2019. Owners may contact Ford customer service at 1-866-436-7332. Ford's number for this recall is 19S11.


text:
The Investor 11 December 2007
HomeThe Investor 11 December 2007
This article was published on 11 December 2007. Some information may be out of date.
Can't afford KiwiSaver? That's unlikely
A reader protests that, despite my suggestion that everyone under 65 should sign up to KiwiSaver, "reality has it that not many of us can afford it!"
He adds, "Too many of us are living hand to mouth and little room is given for savings…. Until this scenario changes, don't expect much by way of increases in numbers wanting KiwiSaver.
"This year I got a 2.5 per cent pay increase. Meantime petrol, milk and other dairy products have gone over 20 per cent increases…. So we are left getting further and further behind."
Perhaps it feels that way. But new data show average household income rose 10.2 per cent in the last three years, while inflation was 9.1 per cent. Not a big difference, but we're not going backwards.
More striking is the 17.7 per cent rise in wages and salaries — almost twice inflation. It was the poor folk on benefits or superannuation whose incomes rose less than inflation, dragging down the average. And income from self employment fell considerably.
While our reader says he's going backwards, most wage and salary earners are not.
Confirming this, 51 per cent of respondents told the household economic survey that their income is enough or more than enough to meet everyday needs.
They should all be able to do KiwiSaver at least minimally. And we can add everyone who is not employed — including the self-employed. Non-employees can contribute nothing to KiwiSaver and still get the $1,000 kick-start.
Many employees, too, could manage to contribute 4 per cent of their pay for just one year, after which they can take continual contributions holidays.
For their pains, they will receive the kick-start and the government tax credit, matching their contributions up to $87 a month. Also, employers are expected to contribute from next April.
Everyone will gain more if they contribute further. But a small start is much better than none — grabbing the kick-start while it's still on offer.
That leaves us with just one group: employees who simply can't spare 4 per cent for one year. They have several options:
Get another small job, and contribute 4 per cent of that pay. You don't have to join through your main job.
Embark on a year of living sparingly. Take a cheaper holiday, don't replace furniture and appliances unless they die, spend less on clothes and so on.
Eat into any savings, or add to your mortgage, to make ends meet for the year. The KiwiSaver incentives are so good that you will end up better off.
Even those with big high-interest debt can win financially by joining KiwiSaver, particularly in the first year. After a year, put what you were putting into KiwiSaver into debt repayment.
Still not convinced? Note that we're not talking huge amounts. Four per cent of $30,000 is $23 a week, and 4 per cent of $50,000 is $38 a week.
Also keep in mind that whatever you contribute to KiwiSaver is still your money — and it's you who is highly likely to benefit from it later.
If you want to live on more than NZ Super in retirement — currently $14,400 a year for a single living alone or $22,200 for a couple — do yourself a favour and join KiwiSaver. (Like the poem?)
CHARITABLE CHRISTMAS
In a recent column, I wrote about buying gifts for needy overseas people on behalf of your friends and relatives. I've since heard that Save the Children — at www.wishlist.org.nz or 0800 167 168 — also offers such a programme.
KiwiSaver


Our personnel are always inside the spirit of "continuous improvement and excellence", and together with the outstanding excellent goods, favorable price and good after-sales services, we try to gain every customer's trust for Fresh Fruit Goji Raw Juice , New Fresh Fruit Goji Raw Juice , Fresh Fruit Goji Juice , sincerely hope we can have chance to cooperate with you and we can build-up prolonged perfectly organization connection along with you.
"Adhering to the basic principle of ""quality, provider, performance and growth"", we have now attained trusts and praises from domestic and global customer for Fresh Fruit Goji Raw Juice , New Fresh Fruit Goji Raw Juice , Fresh Fruit Goji Juice , With all these supports we can serve every customer with quality product and timely shipping with highly responsibility. Being a young growing company we might not the best but we've been trying our best to be your good partner.


As announced earlier today, the shareholders of Amati VCT plc voted to approve the final steps required to merge with Amati VCT 2 plc earlier today. The merger is therefore unconditional and Amati VCT plc is now in voluntary liquidation.
Amati VCT 2 plc has been renamed Amati AIM VCT plc with effect from today as elected by shareholders.
As envisaged in the joint shareholder circular published on 9 March 2018 (the "Circular"), Amati AIM VCT plc has today issued 41,231,436 new ordinary shares to the shareholders of Amati VCT plc in return for the transfer to Amati AIM VCT plc of the assets and liabilities of Amati VCT plc. The respective net asset values of the companies were calculated in accordance with the formula set out in the Circular (i.e. a like for like basis) resulting in a rollover ratio of 5.98787 shares in Amati AIM VCT plc being issued for each 10 shares in Amati VCT plc, rounded down to the nearest whole share. Following the issue of these new shares there will be 80,027,463 ordinary shares of Amati AIM VCT plc in issue.
As Amati VCT plc is now in liquidation, the listing on the UKLA's official list and admission to trading on the LSE's main market will be cancelled, expected to be effective at 8.00am on 8 May 2018.
As anticipated, Julian Avery has stepped down from the board of directors and Peter Lawrence, Julia Henderson and Brian Scouler have joined the board of Amati AIM VCT plc.
Share certificates in respect of New Shares issued in certificated form are expected to be sent to Shareholders of Amati VCT plc during the week commencing 14 May 2018.


text:
#include <sys/mman.h>
#include <memory.h>
#include <fcntl.h>
#include <errno.h>

#include <src/transports/stream.h>
#include <src/transports/connector.h>
#include <src/buffers/buffer_malloc_linear.h>
#include <deps/chaste/utils/util.h>
#include <src/api/api.h>
#include <src/camio_debug.h>

#include "bring_stream.h"
#include "bring_transport.h"

/**************************************************************************************************************************
 * PER STREAM STATE
 **************************************************************************************************************************/
#define CAMIO_BRING_BUFFER_SIZE (4 * 1024 * 1024)
//Current (simple) BRING recv only does one buffer at a time, this could change with vectored I/O in the future.
#define CAMIO_BRING_BUFFER_COUNT (1)

typedef struct bring_stream_priv_s {
    camio_connector_t connector;
    bring_params_t params;
    volatile bring_header_t* bring_head;
    ch_bool connected; //Is the stream currently running? Or has close been called?

    //The current read buffer
    volatile char* rd_mem;
    ch_bool read_registered;        //Has a read been registered?
    //ch_bool read_ready;           //Is the stream ready for writing (for edge triggered multiplexers)
    camio_buffer_t* rd_buffers;     //All buffers for the read side;
    ch_word rd_buffers_count;
    camio_buffer_t* rd_buff;        //A place to keep a read buffer until it's ready to be consumed
    camio_read_req_t* read_req;     //Read request vector to put data into when there is new data
    ch_word read_req_len;           //size of the request vector
    ch_word read_req_curr;          //This will be needed later
    u64 rd_sync_counter;            //Synchronization counter
    ch_word rd_acq_index;           //Current index for acquiring new read buffers
    ch_word rd_rel_index;           //Current index for releasing new read buffers

    volatile char* wr_mem;
    ch_bool write_registered;     //Has a write been registered?
    ch_bool write_ready;          //Is the stream ready for writing (for edge triggered multiplexers)
    camio_buffer_t* wr_buffers;   //All buffers for the write side;
    ch_word wr_buffers_count;
    camio_write_req_t* write_req; //Write request vector to take data out of when there is new data.
    ch_word write_req_len;        //size of the request vector
    ch_word write_req_curr;

    size_t wr_bring_size;         //Size of the bring buffer
    ch_word wr_sync_counter;      //Synchronization counter
    ch_word wr_slot_size;         //Size of each slot in the ring
    ch_word wr_slot_count;        //Number of slots in the ring
    ch_word wr_acq_index;         //Current slot in the bring
    ch_word wr_rel_index;         //Current slot in the bring

} bring_stream_priv_t;

/**************************************************************************************************************************
 * READ FUNCTIONS
 **************************************************************************************************************************/

//See if there is something to read
static camio_error_t bring_read_peek( camio_stream_t* this)
{
    //This is not a public function, can assume that preconditions have been checked.
    DBG("Doing read peek\n");
    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

    if(priv->rd_buff){ //There is a ready already waiting
        return CAMIO_ENOERROR;
    }

    //Is there new data?
    volatile char* slot_mem     = (volatile void*)priv->rd_buffers[priv->rd_acq_index].__internal.__mem_start;
    const uint64_t slot_mem_sz  = priv->rd_buffers[priv->rd_acq_index].__internal.__mem_len;
    volatile char* hdr_mem      = slot_mem + slot_mem_sz - sizeof(bring_slot_header_t);

    __sync_synchronize();
    register bring_slot_header_t curr_slot_head = *(volatile bring_slot_header_t*)(hdr_mem);
    __sync_synchronize();

    if(curr_slot_head.data_size > slot_mem_sz){
        ERR("Data size is larger than memory size, corruption is likely!\n");
        return CAMIO_ENOERROR;
    }

    if( curr_slot_head.seq_no != priv->rd_sync_counter){
        DBG( "Ring overflow. This should not happen with a blocking ring %llu to %llu\n",
            curr_slot_head.seq_no,
            priv->rd_sync_counter -1
        );
        return CAMIO_EWRONGBUFF;
    }

    priv->rd_buff                       = &priv->rd_buffers[priv->rd_acq_index];
    priv->rd_buff->data_start           = (void*)slot_mem;
    priv->rd_buff->data_len             = curr_slot_head.data_size;
    priv->rd_buff->valid                = true;
    priv->rd_buff->__internal.__in_use  = true;
    return CAMIO_ENOERROR;
}

static camio_error_t bring_read_ready(camio_muxable_t* this)
{
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        DBG("This is null???\n"); //WTF?
        return CAMIO_EINVALID;
    }

    if( this->mode != CAMIO_MUX_MODE_READ){
        DBG("Wrong kind of muxable!\n"); //WTF??
        return CAMIO_EINVALID;
    }

    //OK now the fun begins
    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this->parent.stream);

    if(!priv->read_registered){ //Even if there is data waiting, nobody want's it, so ignore for now.
        DBG("Nobody wants the data\n");
        return CAMIO_ENOTREADY;
    }

    //Check if there is data already waiting to be dispatched
    if(priv->rd_buff){
        DBG("There is data already waiting!\n");
        return CAMIO_EREADY;
    }

    //Nope, OK, see if we can get some
    camio_error_t err = bring_read_peek(this->parent.stream);
    if(err == CAMIO_ENOERROR ){
        DBG("There is new data waiting!\n");
        return CAMIO_EREADY;
    }

    if(err == CAMIO_ETRYAGAIN){
        //DBG("This is no new data waiting!\n");
        return CAMIO_ENOTREADY;
    }

    DBG("Something bad happened! Error=%lli\n", err);
    return err;

}

static camio_error_t bring_read_request( camio_stream_t* this, camio_read_req_t* req_vec, ch_word req_vec_len )
{
    DBG("Doing bring read request...!\n");
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        DBG("This null???\n"); //WTF?
        return CAMIO_EINVALID;
    }
    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

    if(req_vec_len != 1){
        DBG("Stream currently only supports read requests of size 1\n"); //TODO this should be coded in the features struct
        return CAMIO_EINVALID;
    }

    if(priv->read_registered){
        DBG("Already registered a read request. Currently this stream only handles one outstanding request at a time\n");
        return CAMIO_ETOOMANY; //TODO XXX better error code
    }

    //Sanity checks done, do some work now
    priv->read_req          = req_vec;
    priv->read_req_len      = req_vec_len;
    priv->read_registered   = true;

    DBG("Doing bring read request...Done!..Successful\n");
    return CAMIO_ENOERROR;

}

static camio_error_t bring_read_acquire( camio_stream_t* this,  camio_rd_buffer_t** buffer_o)
{

    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        DBG("This null???\n"); //WTF?
        return CAMIO_EINVALID;
    }
    if( NULL == buffer_o){
        DBG("Buffer chain pointer null\n"); //WTF?
        return CAMIO_EINVALID;
    }
    if( NULL != *buffer_o){
        DBG("Buffer chain not null. You should release this before getting a new one, otherwise dangling pointers!\n");
        return CAMIO_EINVALID;
    }

    camio_error_t err = bring_read_ready(&this->rd_muxable);
    if(err == CAMIO_ENOTREADY){
        return CAMIO_ETRYAGAIN;
    }

    if(err != CAMIO_EREADY){    //Ugh don't know what went wrong.
        ERR("Something bad happened! Err no =%lli\n", err);
        return err;
    }

    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

    *buffer_o = priv->rd_buff;
    priv->read_registered = false; //Release the read now. This means that read req can be called again
    priv->rd_buff         = NULL;  //Release the temp buffer pointer
    DBG("Got new MFIO data of size %i\n", priv->rd_buff->data_len);
    DBG("Returning new buffer of size %lli at %p\n", (*buffer_o)->data_len, (*buffer_o)->data_start);
    return CAMIO_ENOERROR;
}

static camio_error_t bring_read_release(camio_stream_t* this, camio_rd_buffer_t** buffer)
{
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        ERR("This null???\n"); //WTF?
        return CAMIO_EINVALID;
    }

    if( NULL == buffer){
        ERR("Buffer pointer null\n"); //WTF?
        return CAMIO_EINVALID;
    }

    if( NULL == *buffer){
        ERR("Buffer null\n"); //WTF?
        return CAMIO_EINVALID;
    }

    if((*buffer)->__internal.__parent != this){
        //TODO XXX could add this feature but it would be non-trivial
        ERR("Cannot release a buffer that does not belong to us!\n");
        return CAMIO_EINVALID;
    }

    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);
    camio_rd_buffer_t* bring_buffer = *buffer;

    //Check that the buffers are being freed in order
    if(bring_buffer->__internal.__buffer_id != priv->rd_rel_index){
        ERR("Cannot release this buffer (id=%lli) until buffer with id=%lli is released\n",
            bring_buffer->__internal.__buffer_id,
            priv->rd_rel_index);
        return CAMIO_EWRONGBUFF;
    }

    volatile char* slot_mem                         = (volatile void*)bring_buffer->__internal.__mem_start;
    const uint64_t slot_mem_sz                      = bring_buffer->__internal.__mem_len;
    volatile char* hdr_mem                          = slot_mem + slot_mem_sz - sizeof(bring_slot_header_t);
    volatile bring_slot_header_t* curr_slot_head    = (volatile bring_slot_header_t*)(hdr_mem);

    curr_slot_head->data_size = 0;
    //Apply an atomic update to tell the write end that we received this data
    //1 - Make sure all the memory writes are done
    __sync_synchronize();
    //2 - Do a word aligned single word write (atomic)
    (*(volatile uint64_t*)&curr_slot_head->seq_no) = 0x0ULL;
    //3 - Again, make sure all the memory writes are done
    __sync_synchronize();

    bring_buffer->__internal.__in_use   = false;
    bring_buffer->valid                 = false;
    *buffer                             = NULL; //Remove dangling pointers!

    //We're done. Increment the buffer index and wrap around if necessary -- this is faster than using a modulus (%)
    priv->rd_rel_index++;
    if(bring_buffer->__internal.__buffer_id >= priv->rd_buffers_count){
        priv->rd_rel_index = 0;
    }

    return CAMIO_ENOERROR;
}

/**************************************************************************************************************************
 * WRITE FUNCTIONS
 **************************************************************************************************************************/
static camio_error_t try_write_acquire(camio_stream_t* this){
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
      if( NULL == this){
          DBG("This null???\n"); //WTF?
          return CAMIO_EINVALID;
      }
      bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

      //Is there a new slot ready for writing?
      camio_buffer_t* result      = &priv->rd_buffers[priv->wr_acq_index];
      volatile char* slot_mem     = (volatile void*)result->__internal.__mem_start;
      const uint64_t slot_mem_sz  = result->__internal.__mem_len;
      volatile char* hdr_mem      = slot_mem + slot_mem_sz - sizeof(bring_slot_header_t);
      __sync_synchronize();
      register bring_slot_header_t curr_slot_head = *(volatile bring_slot_header_t*)(hdr_mem);
      __sync_synchronize();

      if( curr_slot_head.seq_no != 0x00ULL){
          return CAMIO_ETRYAGAIN;
      }

      //We're all good. A buffer is ready and waiting to to be acquired
      return CAMIO_ENOERROR;
}

static camio_error_t bring_write_acquire(camio_stream_t* this, camio_wr_buffer_t** buffer_o)
{
    DBG("Doing write acquire\n");

    if( NULL == buffer_o){
        DBG("Buffer chain pointer null\n"); //WTF?
        return CAMIO_EINVALID;
    }

    if( NULL != *buffer_o){
        DBG("Buffer chain not null\n"); //WTF?
        return CAMIO_EINVALID;
    }

    camio_error_t err = try_write_acquire(this);
    if( err != CAMIO_ENOERROR){
        return err;
    }

    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

    camio_buffer_t* result      = &priv->rd_buffers[priv->wr_acq_index];
    volatile char* slot_mem     = (volatile void*)result->__internal.__mem_start;
    const uint64_t slot_mem_sz  = result->__internal.__mem_len;

    result->data_start  = (void*)slot_mem;
    result->data_len    = slot_mem_sz - sizeof(bring_slot_header_t);
    result->valid       = true;
    *buffer_o           = result;

    DBG("Returning new buffer of size %lli at %p\n", (*buffer_o)->data_len, (*buffer_o)->data_start);
    return CAMIO_ENOERROR;
}

static camio_error_t bring_write_request(camio_stream_t* this, camio_write_req_t* req_vec, ch_word req_vec_len)
{
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        DBG("This is null???\n"); //WTF?
        return CAMIO_EINVALID;
    }

    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

    DBG("Got a write request vector with %lli items\n", req_vec_len);
    if(priv->write_registered){
        ERR("Already registered a write request. Currently this stream only handles one outstanding request at a time\n");
        return CAMIO_EINVALID; //TODO XXX better error code
    }

    //Register the new write request
    priv->write_req         = req_vec;
    priv->write_req_len     = req_vec_len;
    priv->write_registered  = true;
    priv->write_req_curr    = 0;

    return CAMIO_ENOERROR;
}

//Try to write to the underlying, stream. This function is private, so no precondition checks necessary
static camio_error_t bring_write_try(camio_stream_t* this)
{
    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

    for(int i = priv->write_req_curr; i < priv->write_req_len; i++){
        camio_write_req_t* req = priv->write_req + i;
        camio_buffer_t* buff   = req->buffer;
        DBG("Trying to writing %li bytes from %p to %i\n", buff->data_len,buff->data_start);

        //Check that the buffers are being used in order
        if(buff->__internal.__buffer_id != priv->wr_rel_index){
            ERR("Cannot use/release this buffer (id=%lli) until buffer with id=%lli is released\n",
                buff->__internal.__buffer_id,
                priv->wr_rel_index
            );
            return CAMIO_EWRONGBUFF;
        }

        //Check that the data is not corrupted
        if(buff->data_len > buff->__internal.__mem_len){
            ERR("Data length (%lli) is longer than buffer length (%lli), corruption has probably occured\n",
                buff->data_len,
                buff->__internal.__mem_len
            );
            return CAMIO_ETOOMANY;
        }

        volatile char* slot_mem                         = (volatile void*)buff->__internal.__mem_start;
        const uint64_t slot_mem_sz                      = buff->__internal.__mem_len;
        volatile char* hdr_mem                          = slot_mem + slot_mem_sz - sizeof(bring_slot_header_t);
        volatile bring_slot_header_t* curr_slot_head    = (volatile bring_slot_header_t*)(hdr_mem);

        curr_slot_head->data_size = buff->data_len;
        //Apply an atomic update to tell the write end that we received this data
        //1 - Make sure all the memory writes are done
        __sync_synchronize();
        //2 - Do a word aligned single word write (atomic)
        (*(volatile uint64_t*)&curr_slot_head->seq_no) = priv->wr_sync_counter;
        //3 - Again, make sure all the memory writes are done
        __sync_synchronize();

        priv->wr_sync_counter++;

        //This is an auto release stream, once you've used the buffer it goes away, you'll need to acquire another
        camio_error_t err = camio_write_release(this,&req->buffer);
        if(err){
            return err;
        }
    }

    //If we get here, we've successfully written all the records out. This means we're now ready to take more write requests
    DBG("De registering write\n");
    priv->write_registered = false;

    return CAMIO_ENOERROR;
}

//Is the underlying stream done writing and ready for more?
static camio_error_t bring_write_ready(camio_muxable_t* this)
{
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        ERR("This is null???\n"); //WTF?
        return CAMIO_EINVALID;
    }

    if( this->mode != CAMIO_MUX_MODE_WRITE){
        ERR("Wrong kind of muxable!\n"); //WTF??
        return CAMIO_EINVALID;
    }

    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this->parent.stream);
    if(!priv->write_registered){ //No body has asked us to write anything, so we're not ready
        return CAMIO_ENOTREADY;
    }

    //OK now the fun begins
    camio_error_t err = bring_write_try(this->parent.stream);

    if(err == CAMIO_ETRYAGAIN){
        DBG("Writing not yet complete, come back later and try again\n");
        return CAMIO_ENOTREADY;
    }
    if(err == CAMIO_ECLOSED){
        DBG("The stream has been closed. You cannot write any more\n");
        return CAMIO_ECLOSED;
    }
    if(err != CAMIO_ENOERROR){
        DBG("Ouch, something bad happened. Unexpected err = %lli \n", err);
        return err;
    }

    DBG("Writing has completed successfully. Buffers have been auto-released\n");
    return CAMIO_EREADY;

}

static camio_error_t bring_write_release(camio_stream_t* this, camio_wr_buffer_t** buffer)
{
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        DBG("This null???\n"); //WTF?
        return CAMIO_EINVALID;
    }

    if( NULL == buffer){
        DBG("Buffer chain pointer null\n"); //WTF?
        return CAMIO_EINVALID;
    }

    if( NULL == *buffer){
        DBG("Buffer chain null\n"); //WTF?
        return CAMIO_EINVALID;
    }

    camio_buffer_t* bring_buffer = *buffer;

    if( !bring_buffer->__internal.__in_use){
        return CAMIO_ENOERROR; //Buffer has already been released
    }

    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);
    //Check that the buffers are being released in order
    if(bring_buffer->__internal.__buffer_id != priv->wr_rel_index){
        ERR("Cannot release this buffer (id=%lli) until buffer with id=%lli is released\n",
                bring_buffer->__internal.__buffer_id,
            priv->wr_rel_index
        );
        return CAMIO_EWRONGBUFF;
    }

    bring_buffer->__internal.__in_use = false;
    bring_buffer->data_len            = 0;
    bring_buffer->data_start          = NULL;
    priv->wr_rel_index++;

    *buffer = NULL; //Remove dangling pointers!

    return CAMIO_ENOERROR;
}

/**************************************************************************************************************************
 * SETUP/CLEANUP FUNCTIONS
 **************************************************************************************************************************/

static void bring_destroy(camio_stream_t* this)
{
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        DBG("This null???\n"); //WTF?
        return;
    }
    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

    if(priv->bring_head){
        munlock((void*)priv->bring_head,priv->bring_head->total_mem);
        munmap((void*)priv->bring_head,priv->bring_head->total_mem);
    }

    if(this->rd_muxable.fd > -1){
        close(this->rd_muxable.fd);
        this->rd_muxable.fd = -1; //Make this reentrant safe
        this->wr_muxable.fd = -1; //Make this reentrant safe
    }

    free(this);
}

camio_error_t bring_stream_construct(
    camio_stream_t* this,
    camio_connector_t* connector,
    volatile bring_header_t* bring_head,
    bring_params_t* params,
    int fd
)
{

    DBG("Constructing bring stream\n");
    //Basic sanity checks -- TODO XXX: Should these be made into (compile time optional?) asserts for runtime performance?
    if( NULL == this){
        ERR("This null???\n"); //WTF?
        return CAMIO_EINVALID;
    }
    bring_stream_priv_t* priv = STREAM_GET_PRIVATE(this);

    DBG("-->\n");
    priv->connector  = *connector; //Keep a copy of the connector state
    priv->params     = *params;
    priv->bring_head = bring_head;

    //Connect the read and write ends together

    DBG("bring head=%p\n", bring_head);
    priv->rd_mem            = (char*)bring_head + bring_head->rd_mem_start_offset;
    DBG("-->\n");
    priv->rd_buffers_count  = bring_head->rd_slots;
    DBG("-->\n");
    priv->rd_buffers        = (camio_buffer_t*)calloc(bring_head->rd_slots_size,sizeof(camio_buffer_t));
    if(!priv->rd_buffers){
        ERR("Ran out of memory allocating buffer pool\n");
        return CAMIO_ENOMEM;
    }
    DBG("-->\n");
    for(int i = 0; i < bring_head->rd_slots;i++){
        DBG("-->\n");
        priv->rd_buffers[i].__internal.__buffer_id       = i;
        priv->rd_buffers[i].__internal.__do_auto_release = false;
        priv->rd_buffers[i].__internal.__in_use          = false;
        priv->rd_buffers[i].__internal.__mem_start       = (char*)priv->rd_mem + bring_head->rd_slots_size * i;
        priv->rd_buffers[i].__internal.__mem_len         = bring_head->rd_slots_size - sizeof(bring_slot_header_t);
        priv->rd_buffers[i].__internal.__parent          = this;
        priv->rd_buffers[i].__internal.__pool_id         = 0;
        priv->rd_buffers[i].__internal.__read_only       = true;
    }

    DBG("-->\n");
    priv->wr_mem            = (char*)bring_head + bring_head->wr_mem_start_offset;
    priv->wr_buffers_count  = bring_head->wr_slots;
    priv->wr_buffers        = (camio_buffer_t*)calloc(bring_head->wr_slots_size,sizeof(camio_buffer_t));
    if(!priv->wr_buffers){
        free(priv->rd_buffers);
        ERR("Ran out of memory allocating buffer pool\n");
        return CAMIO_ENOMEM;
    }
    DBG("-->\n");
    for(int i = 0; i < bring_head->wr_slots;i++){
        DBG("-->\n");
        priv->wr_buffers[i].__internal.__buffer_id       = i;
        priv->wr_buffers[i].__internal.__do_auto_release = true;
        priv->wr_buffers[i].__internal.__in_use          = false;
        priv->wr_buffers[i].__internal.__mem_start       = (char*)priv->wr_mem + bring_head->wr_slots_size * i;
        priv->wr_buffers[i].__internal.__mem_len         = bring_head->wr_slots_size - - sizeof(bring_slot_header_t);
        priv->wr_buffers[i].__internal.__parent          = this;
        priv->wr_buffers[i].__internal.__pool_id         = 0;
        priv->wr_buffers[i].__internal.__read_only       = true;
    }

    DBG("-->\n");
    if(!priv->params.server){ //Swap things around to connect both ends
        ch_word tmp_buffers_count    = priv->rd_buffers_count;
        camio_buffer_t* tmp_buffers  = priv->rd_buffers;

        priv->wr_mem                 = priv->rd_mem;
        priv->wr_buffers_count       = priv->rd_buffers_count;
        priv->wr_buffers             = priv->rd_buffers;

        priv->rd_buffers_count       = tmp_buffers_count;
        priv->rd_buffers             = tmp_buffers;
    }

    DBG("-->\n");
    priv->rd_sync_counter   = 1; //This is where we expect the first counter
    priv->wr_sync_counter   = 1;

    this->rd_muxable.mode              = CAMIO_MUX_MODE_READ;
    this->rd_muxable.parent.stream     = this;
    this->rd_muxable.vtable.ready      = bring_read_ready;
    this->rd_muxable.fd                = fd;

    this->wr_muxable.mode              = CAMIO_MUX_MODE_WRITE;
    this->wr_muxable.parent.stream     = this;
    this->wr_muxable.vtable.ready      = bring_write_ready;
    this->wr_muxable.fd                = fd;

    DBG("-->\n");
    //DBG("Done constructing BRING stream with read_fd=%i and write_fd=%i\n", fd, fd);
    return CAMIO_ENOERROR;
}

NEW_STREAM_DEFINE(bring,bring_stream_priv_t)

redpajama_set_name: RedPajamaGithub