text:
using System;
using System.Linq;

namespace Microsoft.WindowsAzure
{
    public static partial class MetricsClientExtensions
    {
    }
}

redpajama_set_name: RedPajamaGithub


Disorientation is a powerful force. Whereas Klein's white void might have amounted to nothingness as art, Miroslaw Balka's How It Is, the 2009 Unilever Commission for the Turbine Hall of Tate Modern, couldn't be seen as nothingness in quite the same way. This was an altogether heavier void and, for me, its weight was a significant part of its power.
Approaching the work one was faced with a vast steel container, raised from the floor aand painted black. The box was intimidating, industrial in scale and forbidding in its blankness. I am rarely disturbed by concerns about what would happen if something were to go wrong but walking under the container – and I was drawn to walk under rather than round it for some reason – I was hugely aware of its weight and power to destroy anything in its path were the supports somehow to fail. The low ceiling played a part here I think; there is an oppressiveness that comes of being in close proximity to such a structure.
At the front of the container a ramp leads up into the space inside. The space is dark, the black walls are covered in some sort of felt which both takes the edge off their hardness and absorbs the light making the space as dark as possible. Ideally the work should be experienced alone or with very few others. The darness is all enveloping and incredibly disorientating. Even with a glimmer of light reflecting off the clothing of someone else, I had only the haziest notion of where I was within the space and essentially no idea about how far away the back wall of the space might be. Rationally I know there is a back wall and know I'm not about to fall into the abyss but rational thought counts for nothing here.
I visited How It Is more than once. There were times when camera flashes vastly reduced the power of the work; without them the experience could be utterly bewildering with all sense of space quickly lost.
This is a work that resonates with ideas of uncertainty and fear. The structure of the container seems to suggest the manner in which people were shipped to their deaths in the Balka's native Poland during the holocaust. It also talks of more mundane levels of confusion when faced with the unknown and of the bewildering power of faceless bureaucracy. Above all though it speaks of nothingness in an eloquent and terrifying way.
This entry was posted in Installation, Sculpture and tagged art, How It Is, installation, Miroslaw Balka, Tate Modern, Turbine Hall, Unilever Commission by Ann Jones. Bookmark the permalink.


text:
Format: Publication
Parent Oral History
Terry Stanmore
Document Tags
The Store Oral History Project
Belinda Stanmore and The Three Bears
Show Text / TranscriptionShow keyword hitsHighlight keywordsDownloadAdd to My CollectionContact us about thisCitation for this item
Previous: 'Mad Hatter Popular Host'Next: "The Other Side of the Window"Terry Stanmore
'Goldilock's Bears Arrive'
This article forms part of the 'Terry Stanmore Collection' donated during 'The Store' oral history project. Terry Stanmore worked as the Display Manager for The Store at Newcastle West during the 1960s & 70s. Terry was interviewed for the oral history project on 12th March 2019 at his home in New Lambton.
The Store Oral History Project is a collection of stories gathered from members of the Newcastle community, sharing their thoughts and memories of the Store. We thank all of the interviewees and those who have contributed in other ways, such as sharing photographs and other sources and memorabilia.
The Newcastle and Suburban Co-operative Society Ltd, known locally as 'The Store', was a co-operative based in the city of Newcastle, New South Wales, Australia. The Store was described as "the biggest and most successful co-operative venture not just in Australia but in the entire southern hemisphere".
The co-operative was established in 1898, based on a co-operative tradition brought over from Britain by immigrant coal miners. At its peak, the Store had 98,000 members and employed 1,450 workers in 15 retail stores and 11 petrol stations. As well as food and retail goods, services included "health fund, funeral fund, travel agency, credit union and a barber shop." The Newcastle Herald states that in 1942, the Store was "reputed to have the largest bakery in Australia, making about 62,800 loaves a week". Many of its members recall the 'divvy' system which rewarded loyal customers. Eventually, increased shopper mobility and competition from suburban shopping centres saw the Store close on April 10 1981 after 83 years of service.
This project is sponsored by DOMA Group, and managed by Artefact Heritage artefact.net.au, with GLAMx Living Histories Digitisation Lab at the University of Newcastle livinghistories.newcastle.edu.au and the Vera Deacon Regional History Fund uoncc.wordpress.com/vera-deacon-fund.
Please contact us if you are the subject of an image, or know the subject of an image and have cultural or other reservations about the image being displayed on this website and would like to discuss this with us.
These images can be used for study and personal research purposes. If you wish to reproduce any image(s) for any other purpose please contact the University of Newcastle Library's Cultural Collections.
When we have sufficient funds in the Vera Deacon Regional History Fund, we are able to give our volunteers some paid employment. If you would care to make a tax-deductible donation to this fund, please see http://libguides.newcastle.edu.au/benefactors/new for more information and a link to the donation form.
PersonTerry Stanmore CollectionThe Store Oral History Project Date Created12 Nov 1976
Publication The Newcastle Sun Date of publication12 Nov 1976
PhotographsBelinda Stanmore and The Three Bears
Living Histories (20th Sep 2019). 'Goldilock's Bears Arrive'. In Website Living Histories. Retrieved 21st Jan 2020 04:46, from https://livinghistories.newcastle.edu.au/nodes/view/93557

redpajama_set_name: RedPajamaCommonCrawl


Frost is a special bear looking for a special home. Frost is a sweet teddy bear that loves to play out in the snow. Frost has a luxurious coat of dense mohair with a dark cream base and accented with light blue sage fur and tipped with a glorious greyish purple tint. Frost has the most endearing eye, he is truly an Isabelle Lee masterpiece.
Limited Edition: 300 pieces worldwide.
Arrives with an embroidered canvas bag.


text:
Bellingham Mariners byl baseballový tým, který reprezentoval Bellingham, ve státě Washington, v nižší lize Northwest League. Nejprve, mezi lety 1973 a 1976, byli farmou Los Angeles Dodgers (tehdy se jmenovali Bellingham Dodgers) a poté, až do roku 1994, byli farmou Seattle Mariners (jak už napovídá název; populární byla také přezdívka Baby M's). V posledních dvou letech byli farmou San Francisco Giants (a jmenovali se tedy Bellingham Giants), než byl tým přemístěn do Keizeru, ve státě Oregon a získal název Salem-Keizer Volcanoes.

V roce 1987 trefil v dresu Mariners svůj první homerun v profesionální kariéře legendární Ken Griffey Jr.. Stalo se tak na stadioně Everett Memorial Stadium v Everettu a na místě, kam míček dopadl, je dnes plaketa.

Tým hrál své domácí zápasy na stadioně Joe Martin Field, který s kapacitou dvou tisíc diváků stále používají Bellingham Bells, kteří hrají vysokoškoslký baseball.

Reference

Zaniklé americké baseballové kluby
Sportovní kluby založené v roce 1973
Sportovní kluby zaniklé v roce 1996
Baseballové týmy ve Washingtonu
Bellingham (Washington)

redpajama_set_name: RedPajamaWikipedia


Transplantologists Met for 13th Time at the Educational Seminar of Communication of Bad News.
The rich congress season for C-IN was kicked off by a smaller event, regarding the number of participants, however, it was quite interesting for selected members of the transplantological comumunity. The educational seminar Communication of Bad News II. was held in Park Hotel Popovičky from 5th to 7th of March.


Ramsey, NJ – December 18, 2017 – Konica Minolta Business Solutions U.S.A., Inc. (Konica Minolta), a disruptive technology company known for its smart office solutions, today announced the appointment of Laura Blackmer as the Senior Vice President of the Dealer Channel Sales team for Konica Minolta, effective December 15, 2017. Blackmer will report directly to Sam Errigo, Executive Vice President, Sales and Business Development. She will be primarily responsible for helping the company's dealer channel drive growth, leverage emerging market opportunities including All Covered, the managed IT services arm the company acquired in 2011.
"I'm proud and very excited to be joining Konica Minolta during this time of innovative products and services," said Laura Blackmer. "I look forward to working with the dealers to drive the evolution of the workplace and bring the future to our mutual customers."
Blackmer has had extensive industry experience which includes various roles, both in sales and executive leadership positions at Hewlett Packard. She has been awarded "Best Female Executive" three consecutive years at the Frank Awards, The Cannata Report's annual awards event which highlights excellence in business technology. She has also been named by CRN®, a brand of The Channel Company, to its prestigious 2016 Women of the Channel list. In May 2018, she will be joining the Colorado State University Business Leadership Council.


text:
COLUMBIA - Twelve Democratic presidential candidates took stage Tuesday night in Ohio while mid-Missouri viewers watched on television. The debate focused on foreign policy, Hunter Biden's work on the Ukraine energy company, Biden's health, the prospect of Trump's impeachment, and more.
In Columbia, Mid-Missouri Young Democrats, Mizzou College Democrats and Our Revolution Mid-Missouri hosted a watch party at Shakespeare's Pizza downtown.
The president of Mizzou College Democrats, Sadie Jess, said the debate should produce a clear front runner. She said debates like this give her organization a way to be involved in the presidential election on a local level.
"We have a situation where Democrats leave Missouri because they are less represented here," Jess said. "I want to follow through and plant my roots here to make my community and state a better place."
Elisabeth Condon, president of the Mid-Missouri Young Democrats, said the debate was a challenge since it was the most candidates on a single stage for the Democrats this year. She said it's important to pay attention and be engaged since the policies will affect the state of Missouri.
"Just when home isn't working out that doesn't mean we should abandon it," Condon said. "We want to make sure this is somewhere people want to stay and other people want to come to."
Local watchers weigh in on Democratic debate
COLUMBIA - Twelve Democratic presidential candidates took stage Tuesday night in Ohio while mid-Missouri viewers watched on television. The debate... More >>
3 months ago Tuesday, October 15 2019 Oct 15, 2019 Tuesday, October 15, 2019 7:44:00 PM CDT October 15, 2019


Your priority may be to raise capital, buy, sell or develop a project, secure title, engage Indigenous communities, governments or other stakeholders, structure a complex transaction, or resolve a dispute. You're in our sweet spot.
We are organized as an industry group and advise companies and other stakeholders on all matter of legal issues affecting the mining sector.
Our industry contacts and knowledge of material transactions, both domestically and internationally, are second to none among international law firms. Our team is skilled and experienced in all the various legal services required by mining clients, from exploration through development to operation and closure.
We have acted in respect of projects in virtually every country of the globe, with a special emphasis on the Americas and Africa, from our offices in Canada, London and Johannesburg. We rank among the top law firms for financings and new listings on the TSX, the AIM Market, and the JSE.
Our competence in common and civil law, and cross-border matters, make us uniquely qualified to advise the mining industry.


Archives|Paid Notice: Memorials KELLY, TRICIA A.
Paid Notice: Memorials KELLY, TRICIA A.
KELLY-Tricia A. Her friends will be saddened to hear that Tricia passed away at her home in Williamsburg, Virginia last October 21, 1997. She moved there three years ago from her East 73 Street home. She sang in both the Saint Bartholomew and the Madison Avenue Presbyterian Choirs. Her memorable Kentucky Derby and Christmas parties lifted our spirits with her infectious good cheer. She may be gone, but she will always be with us.


The Arc of Essex County would like to thank Board member Lorraine Coppola's sister and brother-in-law, Diane and Christopher Pierce for their generous $16,000 in-kind vehicle donation. Their 2011 Dodge Caravan will be instrumental to The Arc in transporting our consumers with mobility needs. The van is equipped with a turning seat for easy accessibility and will surely be put to good use.
Proceeds from the sale of your donated vehicle will fund innovative and essential programs for children and adults living with developmental disabilities. Donors can rest assured that vehicle donations to The Arc of Essex County will directly aid in these efforts. We work hard to maximize the proceeds of every car donation. Car donation is not only free and easy, but is also tax deductible (please see your tax accountant for further information). Towing is free of charge. To donate today, please call (877) 272-2270.
If you have a gently used handicap accessible vehicle that you think might be a great addition to our fleet, you can contact Heather Comstock at (973) 535-1181 x1224.
The car donation program is an excellent way to support the largest service provider for children and adults living with developmental disabilities in Essex County.


text:
Галанино — село в Казачинском районе Красноярского края России. Административный центр Галанинского сельсовета.

География
Расположено на левом берегу Енисея в 7-8 км к югу от села Казачинское и в 180 км к северу от Красноярска. На противоположном берегу Енисея находится село Момотово.

Климат
Климат умеренно холодный, континентальный. Континентальность ослабляется Енисеем. Зима холодная, с морозными месяцами и неделями, весна тёплая, осень прохладная, лето жаркое.

Население

Инфраструктура
В селе есть детский сад, школа и другие базовые социальные объекты.

Экономика
Преобладает розничная торговля, в промышленном секторе — в основном лесная промышленность. Есть маленькая оптовая база. В сельском хозяйстве преобладает самообеспечение, фермерской продукции мало.

Транспорт
Через Галанино проходит автодорога 04К-044 Красноярск — Енисейск, в селе от неё отходит дорога на запад — в Пировский район.

Примечания

Населённые пункты Казачинского района
Населённые пункты на Енисее


text:
For justice
Peabody Awards: The Complete List Of 2022 Winners
June 9, 2022 by deadline.com
UPDATED with final winners: The Oscar-winning documentary Summer of Soul , Bo Burnham's Emmy-winning musical comedy special Inside , Barry Jenkins' The Underground Railroad and Raoul Peck's Exterminate All the Brutes are among the final list of winners of 2022 Peabody Awards . The Peabodys, in their 82nd year, honor the year's most powerful content across the fields of entertainment, documentary, news, podcast/radio, arts, children's and youth, and public service programming. The organization based at the Grady School of Journalism at the University of Georgia wrapped up a a weeklong rollout of all 30 winners Thursday. This year's awards were presented by the likes of Melissa McCarthy, Morgan Freeman, John Legend, Kevin Bacon, H.E.R., Ethan Hawke, Jon Stewart, Hasan Minhaj, Riz Ahmed, LeVar Burton, Jenny Slate, Malcolm Gladwell and Adam Scott. Newsman Dan Rather and Fresh Air 's Terry Gross have already won this year's Career Achievement Award and … [Read more...] about Peabody Awards: The Complete List Of 2022 Winners
Filed Under: Awardsline Dopesick, Exterminate All The Brutes, Hacks, Peabody Awards, Reservation Dogs, Summer of Soul, obe award winners list, list of academy award winners, complete list of grammy winners, iebf award winners in india list, 2018 national award winners list, gowa awards 2020 winners list, 4th annual vijay television awards winners list, efqm award winners list, 8th national photography awards winners list, v shantaram award winners list, ita awards 2021 winners list, 67th national film awards winners list, complete list of ballon d'or winners, ippy awards 2022 winners, asian excellence awards 2022 winners, nobel award 2022 winners list, kidscreen awards 2022 winners, afrima awards 2022 winners, dadasaheb phalke award 2022 winner, dadasaheb phalke award list of winners
'The Steve Wilkos Show' Renewed For Season 16 In National Syndication
May 5, 2022 by deadline.com
The Steve Wilkos Show has been picked up for a 16th season in national syndication. The daytime talk show, distributed by NBCUniversal Syndication Studios , tackles issues such as family and criminal justice, true-crime and relationship conflicts. Additionally, NBCUniversal Syndication Studios has sold its catalogue of daytime talk Shows, Maury, hosted by Maury Povich, and The Jerry Springer Show, hosted by Jerry Springer, into national syndication. The Steve Wilkos Show , in its 15th season, is averaging 900,000 daily viewers for the 2021-22 season, while delivering a large percentage of its audience from the Adults 25-54 demographic. " The Steve Wilkos Show is one of the best success stories in first-run syndication and I am so proud of Steve and his entire team who puts their incredible passion for storytelling into making a show that resonates with viewers," said Tracie Wilson, Executive Vice President, NBCUniversal Syndication Studios & E! News. … [Read more...] about 'The Steve Wilkos Show' Renewed For Season 16 In National Syndication
Filed Under: Uncategorized NBCUniversal Syndication Studios, Steve Wilkos, The Steve Wilkos Show, bad girl club season 16, crusader top build season 16, crusader best build season 16, show steve wilkos, nosey steve wilkos, krypton renewed season 2, riverdale renewed season 4, discovery renewed season 3, convictions from the steve wilkos show, convictions on the steve wilkos show, dynasty renewed season 2, gone renewed season 2, expired passport renewal under 16, the steve wilkos show today, steve wilkos show today, steve wilko show today, steve wilkos videos, steve wilkos video, the steve wilkos show full episodes, steve wilkos show full episodes


Thank you for your faithful giving to First Baptist Clarksville. Your financial support and investment in our church has a direct impact on our ministry. God is at work in our church and because you give, we are able to see lives touched, changed and redirected to honor Him.
PushPay is a secure and convenient way for you to create an account that allows you to set up automatic giving as well as access your contribution records. Once you create an account, simply login to give. This online system will also allow you to retrieve your contribution records at your convenience and print an annual statement for your tax records.
Please note: If you're creating a new PushPay account online, it may take up to three business days to retrieve your contribution records and giving statement. If you have registered for an event or a group in the past, you have already created an account with a unique email address and password – simply login.
Text "fbctgive" to 77977. You can give whenever, and wherever it suits you. Thank you for your support as we continue to grow and impact our community together.
myFBCT is a secure and convenient way for you to create an account that allows you to set up automatic giving as well as access your contribution records. Once you create an account, simply login to give. This online system will also allow you to retrieve your contribution records at your convenience and print an annual statement for your tax records.
Our Giving Kiosks provide a quick and easy option for giving by allowing debit and credit transactions. Access your myFBCT account without hassle. Look for our Giving Kiosks at the Giving Centers on the Commerce Street Concourse of the Grace Worship Center.
Do You Pay Bills Online? If your financial institution offers this service, you can set up automatic giving and your bank will send your donation to First Baptist Clarksville on a regular schedule.
Many people still prefer to write checks or give cash. For your convenience, envelopes can be found at our Giving Centers. Checks can be placed in the offering plates or deposited in the Tithe Boxes located at the Giving Centers on the Commerce Street Concourse in the Grace Building, in the Faith Building Lobby, or at the Laida Fellowship Hall entrance in the Common Grounds Café.
If you have stocks, bonds, mutual funds, precious metals, real estate, vehicles, or any other assets that you would like to donate to First Baptist Clarksville, please contact giving@fbct.org or 931.245.0007.
However you choose to give at FBCT, we thank you!
please contact us at giving@fbct.org.


text:
Part 1: The NBA's 1st Quarter Report Card
On December 15, 2016 By Hunter Hippel
With school practically taking me over, I thought it'd be fun to do a column where we apply a school-theme to the NBA season. So, we ended up here. This is a two part series, with the B+ and A grades coming Monday. For now, we get to make fun of some teams, and offer some help.
F: Dallas Mavericks, Sacramento Kings, Washington Wizards
Dallas gets a F because while I didn't expect them to make the playoffs, I thought they'd be better than the 3rd worst team in the league. Practically everything is going wrong for the Mavericks, and its so bad that even Rick Carlisle can't fix it.
Injuries have killed them to start out. Andrew Bogut and Deron Williams have battled injuries, and their depth is a serious issue. Key bench guys like Devin Harris and J.J. Barea have played even less than Bogut and Williams, leading to role players filling in the missing minutes. It seems like this might be it for Williams. He took a cheap contract with Dallas in the Summer of 2015, bet on himself, and got rewarded. But this year it seems to have fallen apart. When he's been healthy he's played poorly. His usage rate is too high (23%) for a guy who's shooting 38.7% of field goals and only scoring 12.3 points per game. You have to wonder what his future is if he doesn't turn this season around.
Harrison Barnes is not the guy they hoped he'd be. They signed him thinking he'd be their No.1 option, but the three point shot is just not there. Come to think about it: Only Golden State can swap Barnes for Kevin Durant.
Wesley Matthews has never been the same since his Achilles tear in Portland. Thats an injury that affects you forever. You're not the same athlete after you go through that (Not to compare myself to a professional athlete, but I tore mine in 6th grade). Matthews has been one of the worst players in the league this year based off of plus/minus, ranked 408 out of 443. At this point, I'm happy he got that big contract. Cause its gonna be bleak for him once its up.
If this is the year Mark Cuban says "Screw it." and tanks, expect a lot of turnover next Summer. This Mavericks team is just not in a good place with this core.
The Kings and Wizards aren't as bad as the Mavericks record wise, but have the same issue: Their core is just not gonna work anymore.
That mostly applies to Washington. John Wall just can't do it by himself. If I'm running the Wizards, I'm trading everyone. I'm getting a huge package for John Wall, decent packages for Bradley Beal and Ian Mahimi, and trying to squeeze whatever I can out of Marcin Gortat. I'm keeping the young wings, Trey Burke, and Daniel Ochefu. Thats it! Everyone else is gone.
The stats say otherwise, but Bradley Beal is just not that good. That is, next to John Wall. Thats nothing against Wall. Its just hard to play those two together. The chemistry is not there. Marcin Gortat is closer to the bottom than the top when it comes to FG% on post-ups while ranking 7th in post touches. Yikes! He's gotta go too. Hey, at least Otto Porter has figured it out!
Unfortunately for Washington fans, this gutting of the team won't happen, because the Wizards front office is too incompetent to realize that they're wasting John Wall and letting their fans watch a mediocre-at-best team.
The Kings don't have to go through as large of a blowup because they have less assets than Washington. To put it in perspective, Sacramento has two players who have a PER above 20 this year: DeMarcus Cousins, and Skal Labasierre, who's played in one game all year! Thats it! No one else has managed to get themselves to be considered a good NBA player. They're all average or worse!
Like Washington, the Kings front office is too incompetent to trade their assets and stop torturing the fans. Maybe I should run these teams…
D: Minnesota Timberwolves, Indiana Pacers, Denver Nuggets, Portland Trail Blazers
The teams I'm giving a D-grade are teams that should be much better as we're a quarter into the season. Some can save themselves, some might be a lost cause at this point.
We'll start here in Minnesota, where the mood about the Timberwolves is somber. Everyone's confused and upset about the team right now. I, though not a Wolves fan, am too. Its disappointing to only have to watch only a half or three quarters of their games, because you know whats gonna eventually happen: They'll blow a lead or collapse in the 3rd or 4th quarter.
The only real explanation is the fact that they're young and inexperienced. There's also a lack of leadership and experience on the team, which doesn't help whatsoever. At the same time, they might be better without it. Reports over the past three weeks or so hint that Tom Thibideou could be gearing up for a panic trade. This would include dealing someone like Zach Lavine or Gorgui Dieng in exchange for a veteran who may or may not fit. If I'm a Wolves fan, that terrifies me. While I think Lavine may not exactly fit in with this current Wolves team, selling him low is the last thing you want to do. There are plenty of teams that would give up an insane amount to have him. Here's an idea Thibs: Get rid of Ricky Rubio!
There's not really a lot else to say about the Timberwolves. Karl-Anthony Towns is a monster. Andrew Wiggins, though struggling lately, has improved his offensive game. Kris Dunn looks awesome. There's still a lot to like. They're just young and inexperienced. They'll get there eventually. Everyone needs to relax.
The Pacers are in a funky spot. They have a lot talent, but can't seem to get the pieces to fit together.
The morning before I started on this column, Jonathan Tjarks decided to put a spotlight on the Pacers and explained them so perfectly that I'm not gonna even try to. Here's Jonathan's piece for The Ringer.
All I can say is, this is big news for us on the Glenn Robinson lll bandwagon.
Actually, I have a couple things I need to add. First of all, I think Nate McMillan has a huge impact on the decline of this Pacers team. Thats not to say he's a bad coach. Its just, going from Frank Vogel to McMillan is a huge downgrade, and its playing out in front of our eyes.
Secondly, if the Pacers don't figure this out, expect the Paul George trade rumors to start. I'm not sure if Indiana should do it, but there will be teams (like Boston) that will make the call.
On to the Nuggets, who have been one of my favorite teams to watch this season even though they're struggling a bit to open the year.
Denver has a lot of guys. The problem, similar to Minnesota, is that they're all very young. But its not the experience issue like we see with the Timberwolves. The Nuggets are simply raw. Its a raw collection of talent, and you can tell when you watch them. Emmanuel Muiday is a guy I think is really good, but he hasn't fully developed the ability to shoot consistently and defend well enough. Muiday knows what he's doing out there though. He has that command. As a point guard, you have to have that immediately.
The Nuggets have a ton of different lineups they can play too. No lineup of their's has played more than 64 minutes together. Thats an incredible number, and shows off their versatility and unpredictability.
The fact that Denver has a lot guys but also has holes creates an interesting question: Who should they trade for?
The obvious answer? John Wall.
Why is that? Well, as much as I love Muiday, you have to wonder whether the ability to shoot will ever come. In Wall, you're getting a do-it-all point guard who's experienced and has team control. Plus, he's your alpha-dog. Denver lacks that right now. They don't have anyone who can takeover a game when needed.
A package for Wall probably looks like Muiday, the Wizards choice of Jusuf Nurkic or Nikola Jokic, and a draft pick. Thats two nice pieces (as I mentioned above) for Washington to reboot. For the Nuggets, you're getting one of the 20 best players in the league while keeping your uniqueness.
If Denver pulls off a big trade, I think this is an A-team and an immediate title contender.
I'm very close to calling Portland a lost cause. They are lights out offensively, as they're 6th in Off Rtg and score the 6th most points per game. But the defensive side of the court has been just a disaster this season. The best Def Rtg on their roster is Shabazz Naiper at 107, which is ironic because that was the one thing he sucked at in college. Napier has only played in 14 games though. Out of guys who have played at least 20 games, the best rating is 110 by Noah Vonleh. Good to know Vonleh is doing something right for once.
Its hard to solve Portland's problem. They have a lot of guys, but I don't think anyone is gonna offer you too much for Moe Harkless or Allen Crabbe (Who's been a disaster after signing that big contract). The Trail Blazers' assets besides Damian Lillard and C.J. McCollum are too spare-part-sy. Trading McCollum is something they should consider. His chemistry with Lillard is questionable, and they could get a lockdown D-and-3 guy (and more!) out of him.
C: Detroit Pistons, Milwaukee Bucks, Atlanta Hawks, Boston Celtics
This part of the C's is the average teams that should and will be better later on. Whats the difference between these teams and the Ds? Well, these teams are just average. They all have a "meh" to them. That categorization doesn't get you anything special. A C-grade is nothing special.
Detroit is pretty confusing so far. They have a lot of talent, and their talent is playing well. So whats the problem?
I think there's two parts to it. 1) They aren't dynamic enough offensively. 2) They've lost a lot of really bad games.
First off, Reggie Jackson getting back in the groove should help them smooth things out offensively. He's only played five games so far, so the advanced metrics can't prove anything. While I'd never thought I'd say Reggie Jackson is an upgrade over anyone, he certainly is over Ish Smith (What a world). I warned of this in my season preview with the Pistons. They might struggle a bit early on, and they have. I think Stan Van Gundy is a good enough coach to get them on the right track. However, there is something wrong with this team that does fall on his shoulders.
Detroit has lost a lot of really bad games so far. This includes losses to Phoenix, the 76ers, Brooklyn, and the Magic. Those are games they have to win. Those are critical if you want to make the playoffs. All four of those losses have came in crunch-time, and its the coach's job to make the team stays in check throughout the whole game.
I think what also ties into that is that this roster is full of guys who haven't really played in big games. Meaning, they just lack experience. Its kinda similar to Minnesota's issues, but with a different cause.
I have confidence the Pistons will turn this around though. They'll be fine.
Atlanta is the definition of "meh".
The Dennis Schroder experiment has not gone well. The Hawks are just in a worst place with him running their offense. He doesn't know what he's doing out there. The stats show the decline too. While Atlanta is one of the best defensive teams in the league, the offense ranks 25th in Off Rtg. Schroder has a 16.1 PER on the season, compared to Teague's 18.7.
Its disappointing. I liked Schroder, and the Hawks believed in him. There's still plenty of time, but for now, the Teague -Schroder swap isn't looking so hot, and Atlanta's suffering because of it.
Milwaukee getting a C is going to raise some eyebrows. The Bucks have been one of the league's surprises early on. Not to me though. In my eyes, they've underachieved. While Giannis Antetokounmpo is playing out of his freaking mind, the surrounding cast isn't helping him out much. But its only in certain aspects.
If you take a statistical and eye test perspective, the Bucks are great. Greg Monroe has found himself again. Jabari Parker is turning into a really good scorer. The Greek Freak might have just turned into only "The Freak". Malcolm Brogdon is showing us what he did in college so well. Everything seems to be working.
But, the Bucks are having issues that other teams I've mentioned above are having: Crunch-time.
Once again, its a lack of experience and, more so to this Bucks team, a lack of guys who've played in big games.
Every time I've watched Milwaukee, they're blowing it at the end or are discombobulated. Thats literally the only problem.
I don't think this team needs a trade. I think its gonna take some time for them to acclimate and play well when it matters. But man, once they do figure it out… Watch out, other NBA teams.
Boston is another team that you could make a B-case for. A lot of their current loses can be blamed on the fact that Jae Crowder and Al Horford missed a good amount of time. The Celtics were a mess when those guys were out.
The Celtics are really fun to watch. I've came around on Jaylen Brown, and I turned that corner really fast. I just like watching him run. He's so athletic and runs so nicely. Jonas Jerebko has stepped up big time this season. Avery Bradley is getting a ton of rebounds, which is awesome and I have no idea where it came from.
Boston's problems are big though. They struggle in crunch-time too, and have an issue at center. Al Horford has been awesome for Boston. He filled a huge need, but he's not exactly the best rim protecter in the world, and he isn't gonna do the dirty work. Boston lacks a competent dirty-work/rim protecter. Its not Kelly Olynyk. Its definitely not Tyler Zeller, who's been just terrible every time I watch the Celtics.
I smell a trade. But it depends on how big Danny Ainge wants to go. Boogie is sitting right there for them, but they could swing low and grab someone like Andrew Bogut (???).
The problem Boston is not gonna be able to solve without swinging for the fences is the crunch-time issue. Their superstar is Horford, but he's not a guy who you can put the ball in hands every possession and tell him to make something happen. For Boston to not have these issues, its gonna take a superstar trade. That in itself is a whole 'nother conversation.
Boston's win total is gonna climb for now, but come playoff time, these issues might catch up to them.
C+: Philadelphia 76ers, Phoenix Suns, Brooklyn Nets, Miami Heat, New Orleans Pelicans, Orlando Magic
This part of the C's gets the extra points because while these aren't good teams, they're doing exactly what they should be doing. That is: Tanking or developing while being bad. The reason why these teams can't hop into the B's is due to their watchability. The case can be made for the 76ers though. Joel Embiid has been awesome this season. Hollis Thompson has came out of nowhere and proved himself competent. But besides that, this 76ers team is still pretty brutal. They're not as fun as I thought they'd be. Dario Saric and Timothe Lawawu have struggled. The Gerald Henderson and Sergio Rodriguez experience has not been fun. All I know is: Ben Simmons needs to debut ASAP.
None of these teams, even my own Suns, really have my interest. Its just boring watching them.
B: Charlotte Hornets, Chicago Bulls, New York Knicks
These teams land right in the middle. They're better than average, but aren't quite in that top tier yet.
I really like this Hornets team. I enjoy watching them. They move the ball well, and don't turn it over. Charlotte earns only a B though because Kemba Walker is their best player this year. That has its pro and cons. Its a con because he really shouldn't be their best player. Nicolas Batum has struggled this year, shooting only 39% on field goals.
They're making due, but Charlotte could be much better.
The Bulls are somehow afloat right now, which is hard to believe since Rajon Rondo has turned back into himself after playing well early, and since Nikola Mirotic is an out-of-control maniac with his decisions and is STILL being played ahead of Bobby Portis.
Whats going right for Chicago? Well, Jimmy Butler is a superstar, and is playing like one with a 27.2 PER. Dwyane Wade is shooting extremely and abnormally well. I'm also starting to really like this Christiano Felicio kid. He's always there making plays.
Chicago can keep this up. But I'm not sure how much better they can be. This is where the offseason concerns start to come back into play. This team is just not built for contention.
However, Chicago can make themselves more watchable. Giving Bobby Portis minutes over Nikola Mirotic is where they can start. Portis has played extremely well in the short time he has. C'mon Fred Hoiberg!
Also, Jerian Grant has been enjoyable. He's not a shooter by any means, but serves as a pretty good 2nd or 3rd guard.
Oh, the Knicks. So many pros and so many cons. I'm just gonna list them.
Kristaps Porzingis is a freaking animal and this is HIS team now
Kyle O'Quinn proving himself worthy of that insane contract
Brandon Jennings serving as a good backup point guard
Mingdaus Kuzminskas coming out of nowhere and turning into one my favorite players
Carmelo Anthony not respecting that this is Porzingis' team
Joakim Noah being almost unwatchable
The constant isolation ball between Melo and Derrick Rose
(Sometimes) Not being able to watch Porzingis takeover
So yeah, the Knicks are frustrating, and its why they earn a B and have the record they have.
The Porzingis experience is on a whole 'nother level this year. The guy is absolutely killing it every game, and is almost killing other players.
On the other end, Melo just needs to take a backseat. I'm so tired of watching him dance around with the ball in crunch-time as opposed to moving it around, or feeding Porzingod.
Kyle O'Quinn gives this Knicks offense a new identity, and its for the better. Joakim Noah has been simply atrocious this year. The dude is a center and he's not even shooting 50%. The Knicks are a disaster collectively on the defensive end, but Noah's Def Rtg is much worse O'Quinn's. If I'm the Knicks I'm doing all I can to get rid of Noah.
Brandon Jennings, while the numbers don't support it, has been a competent backup point guard this year, and I enjoy the Knicks much more when he's out there as opposed to Derrick Rose. After coming back from a torn achilles, all you can ask for is to be competent. Jennings has been.
Part 2 coming Monday!!!
State Of The NFL Standings


text:
William DuPuy/Related Articles
From Citizendium, the Citizens' Compendium
< William DuPuy
Related Articles [?]
Bibliography [?]
External Links [?]
Citable Version [?]
A list of Citizendium articles, and planned articles, about William DuPuy.
See also changes related to William DuPuy, or pages that link to William DuPuy or to this page or whose text contains "William DuPuy".
1 Parent topics
2 Subtopics
3 Other related topics
4 Bot-suggested topics
Bot-suggested topics
Auto-populated based on Special:WhatLinksHere/William DuPuy. Needs checking by a human.
Cold War [r]: Geostrategic, economic and ideological struggle from about 1947 to 1991 between the Soviet Union and the United States and their allies. [e]
Hamilton H. Howze [r]: United States Army general and Army Aviation pioneer, considered the creator of division-sized, helicopter-mobile air assault forces. Retired as four-star commander of UN forces in Korea. [e]
John Paul Vann [r]: Influential field operator in the Vietnam War, first as a United States Army advisor and lieutenant colonel, who later worked for the Agency for International Development in a role with the authority of a major general [e]
Military Assistance Command, Vietnam [r]: Headquarters for most U.S. combat and support units assisting the Republic of Vietnam [e]
Operation ATTLEBORO [r]: Originally intended as a "live-fire training" exercise for the 196th Light Infantry Brigade, it became a 22,000 man operation that was the first of five major "search-and-destroy" missions of 1966-1967 in the Vietnam War [e]
Restructuring of the United States Army [r]: A major doctrinal and organization redesign of the United States Army, with its chief feature being moving from the division to the Brigade Combat Team and new supporting brigade structures as the basic Unit of Action [e]
Training and Doctrine Command [r]: A major command of the U.S. Army, responsible both for all training as well as the development of doctrine of how the Army fights, currently headed by GEN Martin Dempsey [e]
U.S. Department of Defense [r]: The military forces of the United States and their supporting civil servants. [e]
Vietnam War [r]: A post-colonial independence/Cold War conflict between communist North Vietnam against South Vietnam, assisted by the United States (1955-1975), to unify Vietnam; won by North Vietnam in 1975. [e]
Retrieved from "http://en.citizendium.org/wiki?title=William_DuPuy/Related_Articles&oldid=100625341"
Related Article Subpages
Military Related Article Subpages
Military Content
Military tag
Wars of Vietnam tag
United States Army tag
Bot-created Related Articles subpages
Military Bot-created Related Articles subpages
CZ is free. All written content is available under the Creative Commons-Attribution-ShareAlike 3.0 Unported license or any later.
Written content that originated in part from Wikipedia is also available under GNU Free Documentation License 1.2.
Dedicated server hosting generously provided by Steadfast Networks
Help • Financial Report • Statistics
Follow Citizendium on Twitter • Facebook • Google+


Are you afraid of starting your next essay writing because you don't know where to put the punctuation marks? Don't you want to look like a fool in your professor's eyes and because of this you are shaking with fright? EssayCorrector.org will make an attempt to allay your anxiety.
Just several years ago students in their schools were taught how to construct the sentences properly and how to use the punctuation marks in them so that the meaning of each phrase was taken rightly. It is hardly possible to imagine the pages of the text, which has no commas or full stops. Do you agree that such an abracadabra resembles more an absurdity than a text? Everybody knows that all the words must be separated into sentences, clauses, and different phrases to make the meaning of each new thought clear. It seems that such a rule should be known to every person, though today the problem of correct usage of the punctuation marks is getting larger and larger. The students' written essays impress with their senselessness. Is it possible that those, who are getting higher education and trying to get their science degrees, are so ignorant?
The linguists clutch their heads in panic: what will the language look like if such a tendency is preserved? The problem of the students' ignoring of punctuation marks in their written works is of international dimensions and it is observed not only in the particular country. It is the universal epidemic, which should be stopped the sooner, the better. Today EssayCorrector.org is trying to understand all the details of this issue.
In such a case the question about a necessity to subject the students' papers to microscopic editing and proofreading is not essential anymore. All the texts should be proofread to find not only the misspelled words and grammatical deviations, but to liquidate the punctuation gap in them.
You won't be surprised if we say that the negligence of the written procedure's rules influences the status of the author not well. Don't you want your reputation to be hurt and your marks for your written assignment to be lowered? Here are the most widespread mistakes, which are committed by the careless students. Look through them carefully, keep them in your mind, and try never to commit them in your essays.
Improper usage of apostrophe. Every Englishman knows: apostrophe is used to form contraction such as 'It's my life' or to show the possession such as 'Mom's eyes are kind.' Although it seems that this rule is super easy to apply practically, a lot of English learners make a really terrible error: they use apostrophe to form the plural form of the nouns. Remember that plurals need no apostrophe at all!
Multiple punctuation marks. Don't you want to look like a teen, who shares his over-the-top emotions on Facebook? When you are working on an academic project and the topic of your report is important, try to control your feelings even if you are very excited indeed. Remember that your sentences should be ended with one exclamation point and if you put the ellipsis, it should consist of three dots only. It is important to keep in mind that formal text should contain as little exclamation points as possible.
Quotation marks and punctuation after them. First, decide which kind of English you use in your writing. If it is an American variant, put the needed punctuation inside the quotation marks such as 'Mary says, 'I live here.' As to British English, there could be some alternatives.
The experts are too busy telling that each new generation of students neglect the punctuation marks and the number of errors in their written papers is frightening. Freedom to chat online without pasting any punctuation marks, unwillingness to read classics, absence of writing practice, and opportunity to copy the texts of the other people generate the problem of literacy. Listening to the audio books, watching the film versions of the novels, and buying the papers from the online writing services are the factors, which deepen this problem day after day even more.
Is it possible to stop cultivating the ignorance? How to motivate children learn the rules and follow them? If you have any ideas or you want to share your own observations with us, if you know any other mishaps that your friends do, or you make the errors too, visit our blog and leave your comments. Each our client's opinion is important for us. We really want to help the world conquer this increasing problem, which engrosses the minds of people. Let's do this together!


text:
How Inequality Hurts
Segregation's Insidious New Look
March 1, 2015 ⋅ Print This Article ⋅ Post a comment
Filed Under fromTMO, spatial inequality
Racial segregation dominated the American residential landscape for generations. We can't afford, suggests the research of Stanford's Sean Reardon, to let economic segregation have anywhere near as long a run.
We need the political will, says Stanford's Sean Reardon, to create a society based more on equal opportunity and less on extremes in inequality and inheritance.
The world's ultra rich, filmmaker Jacques Peretti observed last month, now inhabit "their own Elysium-style biosphere." They live in "a floating bubble high above Earth," a "chrome Business Class tube in the sky."
Peretti was, of course, speaking metaphorically. The rich don't really live in their own biosphere. They live on terra firma, just like the rest of us. But they don't live with the rest of us. In our increasingly unequal world, those of high income live more and more apart.
Just how apart? And what does this apartness mean for the rest of us? Researchers like Stanford sociologist Sean Reardon and his collaborator Kendra Bischoff of Cornell have been exploring questions like these. Too Much editor Sam Pizzigati recently spoke with Reardon about our economic segregation — and why it so matters.
Too Much: Most people today hear the word segregation and think racial segregation. You've spent a great deal of time thinking about economic segregation. Why?
Sean Reardon: We're concerned about racial segregation, in part, because of the economic segregation that goes along with it. Racial segregation often means that blacks or Latinos are unequally concentrated in poor, disadvantaged neighborhoods, with poor quality schools and institutions.
I've been worried that in an era of rising income inequality we may also be seeing rising spatial inequality economically. I worry about the consequences that this might have, particularly for children growing up in increasingly unequal neighborhoods.
Too Much: We can see racial segregation. Economic segregation we can't see in the same way. How do you go about measuring economic segregation?
About one-third of Americans today live in either very affluent or very poor neighborhoods.
Reardon: A couple different ways. One is simple, and I've used it in research with Kendra Bischoff at Cornell.
First, for all metropolitan area neighborhoods, we computed the ratio between every neighborhood's median family income and the overall metropolitan area's median income. Then we used this ratio to classify neighborhoods as either poor, low income, low-middle income, high-middle income, high income, or affluent. And then we looked at what proportion of families live in neighborhoods in each category.
When we do that, we find that in 1970 about two-thirds of all American families lived in neighborhoods that rated as middle-income relative to the larger metropolitan region. And only about one in six families in 1970 lived in very affluent or very poor neighborhoods.
Today, about 42 percent of families live in middle-income neighborhoods, and about one-third live in very affluent or very poor neighborhoods.
So we've seen a shift — from two-thirds to 42 percent — of families who live in middle-income, mixed-income neighborhoods. Many more families today are living in either very affluent or very poor neighborhoods. You can see this very dramatically in maps showing the economic composition of neighborhoods over time.
We seem to be in a period where economic segregation is rapidly increasing.
Too Much: Is this shift toward greater economic segregation easing or accelerating?
Reardon: Economic segregation increased a lot in the 1980s. It didn't change much in the 1990s, but it's grown a lot again in the 2000s. So we seem to be in a period where economic segregation is rapidly increasing.
Too Much: Did the crash in 2008 bring on this latest increase?
Reardon: The Census Bureau's American Community Survey — the ACS — isn't sufficiently fine-grained, in a temporal sense, to let us now answer that question. To get a sample big enough to estimate each neighborhood's income distribution, the ACS averages five years of data collection. So you can't just look at 2007 before the crash and then look at 2009 because you always have a five-year moving average.
So at this point it's hard to say what exactly happened as a result of the crash and what's part of a longer-term trend.
Too Much: Just how does increasing economic inequality feed economic segregation?
Reardon: We have a market-driven housing world. With inequality in family income growing, families can afford to spend increasingly different amounts on housing. They end up sorting themselves more into neighborhoods that have housing at the price they can afford.
In metro areas where income inequality has increased the most, we see income segregation increase the most.
In the work that I did with Kendra Bischoff, we showed that in metropolitan areas where income inequality increased a great deal, that's where you saw income segregation increase the most. In places where income inequality didn't increase as much, that's where you saw income segregation increase the least.
Too Much: So market dynamics help explain why the more affluent the affluent become, the more they live among their fellow affluent. Is there a social-psychological motor behind that growing economic segregation as well?
Reardon: There may well be. My research with Kendra Bischoff looked at housing patterns and their relationship to economic forces. But we don't really observe people's feelings or motivations. So I don't have any evidence one way or another on that.
There is, however, some interesting new research from Ann Owens, a sociologist at the University of Southern California. She seems to be finding that increasing income segregation among families with children is driving most of the increase in income segregation.
Childless households — whether single people or elderly people or couples who don't have kids — aren't becoming that much more segregated from each other, according to Owens' evidence.
It's really families with children that are becoming more economically segregated, and this suggests that concerns about where children are going to grow up and what schools they'll go to — and maybe who they're going to play with — are interacting with income inequality to drive the patterns of income segregation.
High-income families that live among only other high-income families may have less understanding of the plight of everyone else.
Too Much: And that brings us to the notion that increasing economic segregation itself generates increasing economic inequality.
Reardon: We can imagine lots of ways increasing economic segregation could do that.
Increasing economic segregation means that kids from high-income families live with kids from other high-income families and go to schools that have more resources. They go on to do better in school and have a better chance at attending a good college.
We have evidence over the last few decades that the achievement gap — the test score gap — between students from high- and low-income families is widening, and maybe that's related to these processes.
But I think there's another less direct but maybe more insidious way that these things operate.
If high-income families increasingly live among other high-income families, and far away from middle class and lower-income families, then they may have less understanding of the plight of the middle class or the working class or the poor. They may be less willing to invest their resources in public goods — like schools and child care facilities and health care and infrastructure — that would broadly benefit everyone in society.
And so I worry that income segregation means that the affluent are increasingly sequestered in enclaves where they have little incentive to understand why we should invest in broad public goods that would help everyone. And since these affluent control the vast majority of our economic resources — and also a disproportionate share of our political resources — then their disinvestment from public goods has broad repercussions for our society. Kendra Bischoff and I wrote more about this possibility in a recent post.
Our affluent are increasingly sequestered in enclaves where they have little incentive to understand why we should invest in broad public goods.
Now we don't have good evidence on the extent of this dynamic. It's a tricky thing to trace. But it's a potential concern that I think we should take very seriously.
Too Much: Let's talk a bit more about your work on the achievement gap between black and white students and high- and low-income students. Fifty years ago, you've noted, the achievement gap between black and white students was almost twice as wide as the gap between high- and low-income students. Today's income-achievement gap is more than 50 percent larger than the racial achievement gap. How directly do you think income and economic segregation is at play here?
Reardon: I think that many different forces, acting in concert, are determining these broad changes in racial and income achievement gaps. Economic segregation plays a role, but so do big changes in how much families invest in their young children's education and educational experiences, growing disparities in family structure and family resources, maybe even the quality of schools.
So the growth of economic segregation may be part of the story, but I suspect there are many other parts of that story as well.
Too Much: Is income and economic segregation resegregating America along racial lines?
Reardon: No. If you look at residential patterns of racial segregation, they've been slowly declining over the past 40-plus years. Now some claim that these declines mean the end of racial separation, but that's far from true. We still have enormous racial segregation in America, but it is running moderately lower than decades ago and has been steadily declining.
We're not seeing upticks in racial segregation. We're seeing slightly less racial segregation but more economic segregation. Those things don't operate in tandem.
Too Much: We did, through the legal system, outlaw racial segregation in the United States. How can we attack the concentration of income and wealth that fuels economic segregation?
We don't want to have a society of fortress communities.
Reardon: That's the billion-dollar question. We could outlaw explicit racial segregation because of the 14th amendment. The 14th amendment doesn't apply to socio-economic status. So there's little leverage there in the legal system.
We need the public and political will to create a society that's founded more on equal opportunity and less on extremes in inequality and inheritance. You can attack inequality through the tax code and job creation and policies that support the middle class and things like that. You can alter patterns of segregation through housing policy, zoning policy, and investments in neighborhood public goods like schools, and parks, and community centers. You can't do it through the Constitution.
Too Much: If levels of income and wealth inequality keep growing in the United States, just how economically segregated can we become? If current trends continue, what do you think the United States might look like 25 years from now?
Reardon: I don't think it's possible for inequality and economic segregation to continue to rise indefinitely. But things could get worse than they are. And we don't want to have a society of gated communities and fortress communities.
Too Much: Is the discipline of sociology doing enough now to come to grips with the impact of growing economic inequality?
Reardon: I'd always like to see it do more, but we have a number of prominent sociologists who are addressing these issues, thinking about them, writing about them, worrying about them.
In some ways, issues of inequality have entered the public conversation over the last few years in ways they really haven't for decades. We've always had sociologists concerned about these issues — and political scientists and economists and historians and so on. What's different now? These issues appear more in the public discourse, and that means there's potentially some appetite and political will to do something to remedy them.
Too Much: Where are your future research interests taking you?
Reardon: Many directions. I'm interested in the relationship between educational inequality and social mobility. I'm also interested in the great geographic variations we have on inequality.
Nationally, we can see patterns of increasing income segregation, increasing educational inequality by income, and slowly declining racial disparities. But different states, different cities, and different school districts show enormous differences in these patterns.
Trying to find places where the trends are going in a more positive direction — and trying to figure out what's leading them in that direction — can help us think about broader policies that might help create broader economic opportunity for a much wider stretch of America.
Interested in delving deeper into Sean Reardon's inequality-related work? You can find much of it now available online.
Sam Pizzigati edits Too Much, the Institute for Policy Studies online monthly on excess and inequality. His latest book: The Rich Don't Always Win: The Forgotten Triumph over Plutocracy that Created the American Middle Class, 1900-1970 (Seven Stories Press).
Subscribe to Too Much
Sign up here:
No comments for "Segregation's Insidious New Look"
Read this week's
Inequality.org newsletter
Tracking Inequality
A New Rationalization for Riches
A Flying Public Finally Erupts
Executive Pay
The Charities Making Inequality Worse
Defective Enterprises
The Railroad Robber Baron Returns
Taxing Progressively
Policing in America's Plutocracy
Alternate Approaches
Donald Trump's $100-Million Men
Too Much | A project of the Program on Inequality and the Common Good at the Institute for Policy Studies.
1301 Connecticut Ave. NW, Suite 600, Washington, DC 20036 | 202-234-9382 | Email | Subscribe | © 2017


text:
#include <rte_dev.h>
#include <rte_bitmap.h>

#include "sfc.h"
#include "sfc_rx.h"
#include "sfc_tx.h"
#include "sfc_sw_stats.h"

#define SFC_SW_STAT_INVALID		UINT64_MAX

#define SFC_SW_STATS_GROUP_SIZE_MAX	2U
#define SFC_SW_STAT_GOOD_PACKETS	"packets"
#define SFC_SW_STAT_GOOD_BYTES		"bytes"

enum sfc_sw_stats_type {
	SFC_SW_STATS_RX,
	SFC_SW_STATS_TX,
};

enum sfc_sw_stats_group_basic {
	SFC_SW_STATS_GROUP_BASIC_PKTS = 0,
	SFC_SW_STATS_GROUP_BASIC_BYTES,
	SFX_SW_STATS_GROUP_BASIC_MAX
};

typedef void sfc_get_sw_stat_val_t(struct sfc_adapter *sa, uint16_t qid,
				   uint64_t *values, unsigned int values_count);

struct sfc_sw_stat_descr {
	const char *name;
	enum sfc_sw_stats_type type;
	sfc_get_sw_stat_val_t *get_val;
	bool provide_total;
};

static sfc_get_sw_stat_val_t sfc_sw_stat_get_rx_good_pkts_bytes;
static void
sfc_sw_stat_get_rx_good_pkts_bytes(struct sfc_adapter *sa, uint16_t qid,
				   uint64_t *values,
				   unsigned int values_count)
{
	struct sfc_adapter_shared *sas = sfc_sa2shared(sa);
	struct sfc_rxq_info *rxq_info;
	union sfc_pkts_bytes qstats;

	RTE_SET_USED(values_count);
	SFC_ASSERT(values_count == SFX_SW_STATS_GROUP_BASIC_MAX);
	rxq_info = sfc_rxq_info_by_ethdev_qid(sas, qid);
	if (rxq_info->state & SFC_RXQ_INITIALIZED) {
		sfc_pkts_bytes_get(&rxq_info->dp->dpq.stats, &qstats);
		values[SFC_SW_STATS_GROUP_BASIC_PKTS] = qstats.pkts;
		values[SFC_SW_STATS_GROUP_BASIC_BYTES] = qstats.bytes;
	} else {
		values[SFC_SW_STATS_GROUP_BASIC_PKTS] = 0;
		values[SFC_SW_STATS_GROUP_BASIC_BYTES] = 0;
	}
}

static sfc_get_sw_stat_val_t sfc_sw_stat_get_tx_good_pkts_bytes;
static void
sfc_sw_stat_get_tx_good_pkts_bytes(struct sfc_adapter *sa, uint16_t qid,
				   uint64_t *values,
				   unsigned int values_count)
{
	struct sfc_adapter_shared *sas = sfc_sa2shared(sa);
	struct sfc_txq_info *txq_info;
	union sfc_pkts_bytes qstats;

	RTE_SET_USED(values_count);
	SFC_ASSERT(values_count == SFX_SW_STATS_GROUP_BASIC_MAX);
	txq_info = sfc_txq_info_by_ethdev_qid(sas, qid);
	if (txq_info->state & SFC_TXQ_INITIALIZED) {
		sfc_pkts_bytes_get(&txq_info->dp->dpq.stats, &qstats);
		values[SFC_SW_STATS_GROUP_BASIC_PKTS] = qstats.pkts;
		values[SFC_SW_STATS_GROUP_BASIC_BYTES] = qstats.bytes;
	} else {
		values[SFC_SW_STATS_GROUP_BASIC_PKTS] = 0;
		values[SFC_SW_STATS_GROUP_BASIC_BYTES] = 0;
	}
}

static sfc_get_sw_stat_val_t sfc_get_sw_stat_val_rx_dbells;
static void
sfc_get_sw_stat_val_rx_dbells(struct sfc_adapter *sa, uint16_t qid,
			       uint64_t *values, unsigned int values_count)
{
	struct sfc_adapter_shared *sas = sfc_sa2shared(sa);
	struct sfc_rxq_info *rxq_info;

	RTE_SET_USED(values_count);
	SFC_ASSERT(values_count == 1);
	rxq_info = sfc_rxq_info_by_ethdev_qid(sas, qid);
	values[0] = rxq_info->state & SFC_RXQ_INITIALIZED ?
		    rxq_info->dp->dpq.dbells : 0;
}

static sfc_get_sw_stat_val_t sfc_get_sw_stat_val_tx_dbells;
static void
sfc_get_sw_stat_val_tx_dbells(struct sfc_adapter *sa, uint16_t qid,
			       uint64_t *values, unsigned int values_count)
{
	struct sfc_adapter_shared *sas = sfc_sa2shared(sa);
	struct sfc_txq_info *txq_info;

	RTE_SET_USED(values_count);
	SFC_ASSERT(values_count == 1);
	txq_info = sfc_txq_info_by_ethdev_qid(sas, qid);
	values[0] = txq_info->state & SFC_TXQ_INITIALIZED ?
		    txq_info->dp->dpq.dbells : 0;
}

/*
 * SW stats can be grouped together. When stats are grouped the corresponding
 * stats values for each queue are obtained during calling one get value
 * callback. Stats of the same group are contiguous in the structure below.
 * The start of the group is denoted by stat implementing get value callback.
 */
const struct sfc_sw_stat_descr sfc_sw_stats_descr[] = {
	/* Group of Rx packets/bytes stats */
	{
		.name = SFC_SW_STAT_GOOD_PACKETS,
		.type = SFC_SW_STATS_RX,
		.get_val  = sfc_sw_stat_get_rx_good_pkts_bytes,
		.provide_total = false,
	},
	{
		.name = SFC_SW_STAT_GOOD_BYTES,
		.type = SFC_SW_STATS_RX,
		.get_val  = NULL,
		.provide_total = false,
	},
	/* Group of Tx packets/bytes stats */
	{
		.name = SFC_SW_STAT_GOOD_PACKETS,
		.type = SFC_SW_STATS_TX,
		.get_val  = sfc_sw_stat_get_tx_good_pkts_bytes,
		.provide_total = false,
	},
	{
		.name = SFC_SW_STAT_GOOD_BYTES,
		.type = SFC_SW_STATS_TX,
		.get_val  = NULL,
		.provide_total = false,
	},
	/* End of basic stats */
	{
		.name = "dbells",
		.type = SFC_SW_STATS_RX,
		.get_val  = sfc_get_sw_stat_val_rx_dbells,
		.provide_total = true,
	},
	{
		.name = "dbells",
		.type = SFC_SW_STATS_TX,
		.get_val  = sfc_get_sw_stat_val_tx_dbells,
		.provide_total = true,
	}
};

static int
sfc_sw_stat_get_name(struct sfc_adapter *sa,
		     const struct sfc_sw_stat_descr *sw_stat, char *name,
		     size_t name_size, unsigned int id_off)
{
	const char *prefix;
	int ret;

	switch (sw_stat->type) {
	case SFC_SW_STATS_RX:
		prefix = "rx";
		break;
	case SFC_SW_STATS_TX:
		prefix = "tx";
		break;
	default:
		sfc_err(sa, "%s: unknown software statistics type %d",
			__func__, sw_stat->type);
		return -EINVAL;
	}

	if (sw_stat->provide_total && id_off == 0) {
		ret = snprintf(name, name_size, "%s_%s", prefix,
							 sw_stat->name);
		if (ret < 0 || ret >= (int)name_size) {
			sfc_err(sa, "%s: failed to fill xstat name %s_%s, err %d",
				__func__, prefix, sw_stat->name, ret);
			return ret > 0 ? -EINVAL : ret;
		}
	} else {
		uint16_t qid = id_off - sw_stat->provide_total;
		ret = snprintf(name, name_size, "%s_q%u_%s", prefix, qid,
							sw_stat->name);
		if (ret < 0 || ret >= (int)name_size) {
			sfc_err(sa, "%s: failed to fill xstat name %s_q%u_%s, err %d",
				__func__, prefix, qid, sw_stat->name, ret);
			return ret > 0 ? -EINVAL : ret;
		}
	}

	return 0;
}

static unsigned int
sfc_sw_stat_get_queue_count(struct sfc_adapter *sa,
			    const struct sfc_sw_stat_descr *sw_stat)
{
	struct sfc_adapter_shared *sas = sfc_sa2shared(sa);

	switch (sw_stat->type) {
	case SFC_SW_STATS_RX:
		return sas->ethdev_rxq_count;
	case SFC_SW_STATS_TX:
		return sas->ethdev_txq_count;
	default:
		sfc_err(sa, "%s: unknown software statistics type %d",
			__func__, sw_stat->type);
		return 0;
	}
}

static unsigned int
sfc_sw_xstat_per_queue_get_count(const struct sfc_sw_stat_descr *sw_stat,
				 unsigned int nb_queues)
{
	/* Take into account the total xstat of all queues */
	return nb_queues > 0 ? sw_stat->provide_total + nb_queues : 0;
}

static unsigned int
sfc_sw_xstat_get_nb_supported(struct sfc_adapter *sa,
			      const struct sfc_sw_stat_descr *sw_stat)
{
	unsigned int nb_queues;

	nb_queues = sfc_sw_stat_get_queue_count(sa, sw_stat);
	return sfc_sw_xstat_per_queue_get_count(sw_stat, nb_queues);
}

static int
sfc_sw_stat_get_names(struct sfc_adapter *sa,
		      const struct sfc_sw_stat_descr *sw_stat,
		      struct rte_eth_xstat_name *xstats_names,
		      unsigned int xstats_names_sz,
		      unsigned int *nb_written,
		      unsigned int *nb_supported)
{
	const size_t name_size = sizeof(xstats_names[0].name);
	unsigned int id_base = *nb_supported;
	unsigned int nb_queues;
	unsigned int qid;
	int rc;

	nb_queues = sfc_sw_stat_get_queue_count(sa, sw_stat);
	if (nb_queues == 0)
		return 0;
	*nb_supported += sfc_sw_xstat_per_queue_get_count(sw_stat, nb_queues);

	/*
	 * The order of each software xstat type is the total xstat
	 * followed by per-queue xstats.
	 */
	if (*nb_written < xstats_names_sz && sw_stat->provide_total) {
		rc = sfc_sw_stat_get_name(sa, sw_stat,
					  xstats_names[*nb_written].name,
					  name_size, *nb_written - id_base);
		if (rc != 0)
			return rc;
		(*nb_written)++;
	}

	for (qid = 0; qid < nb_queues; ++qid) {
		if (*nb_written < xstats_names_sz) {
			rc = sfc_sw_stat_get_name(sa, sw_stat,
					      xstats_names[*nb_written].name,
					      name_size, *nb_written - id_base);
			if (rc != 0)
				return rc;
			(*nb_written)++;
		}
	}

	return 0;
}

static int
sfc_sw_xstat_get_names_by_id(struct sfc_adapter *sa,
			     const struct sfc_sw_stat_descr *sw_stat,
			     const uint64_t *ids,
			     struct rte_eth_xstat_name *xstats_names,
			     unsigned int size,
			     unsigned int *nb_supported)
{
	const size_t name_size = sizeof(xstats_names[0].name);
	unsigned int id_base = *nb_supported;
	unsigned int id_end;
	unsigned int nb_queues;
	unsigned int i;
	int rc;

	nb_queues = sfc_sw_stat_get_queue_count(sa, sw_stat);
	if (nb_queues == 0)
		return 0;
	*nb_supported += sfc_sw_xstat_per_queue_get_count(sw_stat, nb_queues);

	/*
	 * The order of each software xstat type is the total xstat
	 * followed by per-queue xstats.
	 */
	id_end = id_base + sw_stat->provide_total + nb_queues;
	for (i = 0; i < size; i++) {
		if (id_base <= ids[i] && ids[i] < id_end) {
			rc = sfc_sw_stat_get_name(sa, sw_stat,
						  xstats_names[i].name,
						  name_size, ids[i] - id_base);
			if (rc != 0)
				return rc;
		}
	}

	return 0;
}

static uint64_t
sfc_sw_stat_get_val(struct sfc_adapter *sa,
		    unsigned int sw_stat_idx, uint16_t qid)
{
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	uint64_t *res = &sw_stats->supp[sw_stat_idx].cache[qid];
	uint64_t values[SFC_SW_STATS_GROUP_SIZE_MAX];
	unsigned int group_start_idx;
	unsigned int group_size;
	unsigned int i;

	if (*res != SFC_SW_STAT_INVALID)
		return *res;

	/*
	 * Search for the group start, i.e. the stat that implements
	 * get value callback.
	 */
	group_start_idx = sw_stat_idx;
	while (sw_stats->supp[group_start_idx].descr->get_val == NULL)
		group_start_idx--;

	/*
	 * Calculate number of elements in the group with loop till the next
	 * group start or the list end.
	 */
	group_size = 1;
	for (i = sw_stat_idx + 1; i < sw_stats->supp_count; i++) {
		if (sw_stats->supp[i].descr->get_val != NULL)
			break;
		group_size++;
	}
	group_size += sw_stat_idx - group_start_idx;

	SFC_ASSERT(group_size <= SFC_SW_STATS_GROUP_SIZE_MAX);
	sw_stats->supp[group_start_idx].descr->get_val(sa, qid, values,
						       group_size);
	for (i = group_start_idx; i < (group_start_idx + group_size); i++)
		sw_stats->supp[i].cache[qid] = values[i - group_start_idx];

	return *res;
}

static void
sfc_sw_xstat_get_values(struct sfc_adapter *sa,
			const struct sfc_sw_stat_descr *sw_stat,
			unsigned int sw_stat_idx,
			struct rte_eth_xstat *xstats,
			unsigned int xstats_size,
			unsigned int *nb_written,
			unsigned int *nb_supported)
{
	unsigned int qid;
	uint64_t value;
	struct rte_eth_xstat *total_xstat;
	bool count_total_value = false;
	unsigned int nb_queues;

	nb_queues = sfc_sw_stat_get_queue_count(sa, sw_stat);
	if (nb_queues == 0)
		return;
	*nb_supported += sfc_sw_xstat_per_queue_get_count(sw_stat, nb_queues);

	/*
	 * The order of each software xstat type is the total xstat
	 * followed by per-queue xstats.
	 */
	if (*nb_written < xstats_size && sw_stat->provide_total) {
		count_total_value = true;
		total_xstat = &xstats[*nb_written];
		xstats[*nb_written].id = *nb_written;
		xstats[*nb_written].value = 0;
		(*nb_written)++;
	}

	for (qid = 0; qid < nb_queues; ++qid) {
		value = sfc_sw_stat_get_val(sa, sw_stat_idx, qid);

		if (*nb_written < xstats_size) {
			xstats[*nb_written].id = *nb_written;
			xstats[*nb_written].value = value;
			(*nb_written)++;
		}

		if (count_total_value)
			total_xstat->value += value;
	}
}

static void
sfc_sw_xstat_get_values_by_id(struct sfc_adapter *sa,
			      const struct sfc_sw_stat_descr *sw_stat,
			      unsigned int sw_stat_idx,
			      const uint64_t *ids,
			      uint64_t *values,
			      unsigned int ids_size,
			      unsigned int *nb_supported)
{
	rte_spinlock_t *bmp_lock = &sa->sw_stats.queues_bitmap_lock;
	struct rte_bitmap *bmp = sa->sw_stats.queues_bitmap;
	unsigned int id_base = *nb_supported;
	unsigned int id_base_q;
	unsigned int id_end;
	bool count_total_value = false;
	unsigned int total_value_idx;
	uint64_t total_value = 0;
	unsigned int i, qid;
	unsigned int nb_queues;

	rte_spinlock_lock(bmp_lock);
	rte_bitmap_reset(bmp);

	nb_queues = sfc_sw_stat_get_queue_count(sa, sw_stat);
	if (nb_queues == 0)
		goto unlock;
	*nb_supported += sfc_sw_xstat_per_queue_get_count(sw_stat, nb_queues);

	/*
	 * The order of each software xstat type is the total xstat
	 * followed by per-queue xstats.
	 */
	id_end = id_base + sw_stat->provide_total + nb_queues;
	for (i = 0; i < ids_size; i++) {
		if (id_base <= ids[i] && ids[i] < id_end) {
			if (sw_stat->provide_total && ids[i] == id_base) {
				/* Accumulative value */
				count_total_value = true;
				total_value_idx = i;
				continue;
			}
			id_base_q = id_base + sw_stat->provide_total;
			qid = ids[i] - id_base_q;
			values[i] = sfc_sw_stat_get_val(sa, sw_stat_idx, qid);
			total_value += values[i];

			rte_bitmap_set(bmp, qid);
		}
	}

	if (count_total_value) {
		values[total_value_idx] = 0;
		for (qid = 0; qid < nb_queues; ++qid) {
			if (rte_bitmap_get(bmp, qid) != 0)
				continue;
			values[total_value_idx] += sfc_sw_stat_get_val(sa,
								    sw_stat_idx,
								    qid);
		}
		values[total_value_idx] += total_value;
	}

unlock:
	rte_spinlock_unlock(bmp_lock);
}

unsigned int
sfc_sw_xstats_get_nb_supported(struct sfc_adapter *sa)
{
	SFC_ASSERT(sfc_adapter_is_locked(sa));
	return sa->sw_stats.xstats_count;
}

static void
sfc_sw_stats_clear_cache(struct sfc_adapter *sa)
{
	unsigned int cache_count = sa->sw_stats.cache_count;
	uint64_t *cache = sa->sw_stats.cache;

	RTE_BUILD_BUG_ON(UINT64_C(0xffffffffffffffff) != SFC_SW_STAT_INVALID);
	memset(cache, 0xff, cache_count * sizeof(*cache));
}

void
sfc_sw_xstats_get_vals(struct sfc_adapter *sa,
		       struct rte_eth_xstat *xstats,
		       unsigned int xstats_count,
		       unsigned int *nb_written,
		       unsigned int *nb_supported)
{
	uint64_t *reset_vals = sa->sw_stats.reset_vals;
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	unsigned int sw_xstats_offset;
	unsigned int i;

	sfc_adapter_lock(sa);

	sfc_sw_stats_clear_cache(sa);

	sw_xstats_offset = *nb_supported;

	for (i = 0; i < sw_stats->supp_count; i++) {
		sfc_sw_xstat_get_values(sa, sw_stats->supp[i].descr, i,
				xstats, xstats_count, nb_written, nb_supported);
	}

	for (i = sw_xstats_offset; i < *nb_written; i++)
		xstats[i].value -= reset_vals[i - sw_xstats_offset];

	sfc_adapter_unlock(sa);
}

int
sfc_sw_xstats_get_names(struct sfc_adapter *sa,
			struct rte_eth_xstat_name *xstats_names,
			unsigned int xstats_count,
			unsigned int *nb_written,
			unsigned int *nb_supported)
{
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	unsigned int i;
	int ret;

	sfc_adapter_lock(sa);

	for (i = 0; i < sw_stats->supp_count; i++) {
		ret = sfc_sw_stat_get_names(sa, sw_stats->supp[i].descr,
					    xstats_names, xstats_count,
					    nb_written, nb_supported);
		if (ret != 0) {
			sfc_adapter_unlock(sa);
			return ret;
		}
	}

	sfc_adapter_unlock(sa);

	return 0;
}

void
sfc_sw_xstats_get_vals_by_id(struct sfc_adapter *sa,
			     const uint64_t *ids,
			     uint64_t *values,
			     unsigned int n,
			     unsigned int *nb_supported)
{
	uint64_t *reset_vals = sa->sw_stats.reset_vals;
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	unsigned int sw_xstats_offset;
	unsigned int i;

	sfc_adapter_lock(sa);

	sfc_sw_stats_clear_cache(sa);

	sw_xstats_offset = *nb_supported;

	for (i = 0; i < sw_stats->supp_count; i++) {
		sfc_sw_xstat_get_values_by_id(sa, sw_stats->supp[i].descr, i,
					      ids, values, n, nb_supported);
	}

	for (i = 0; i < n; i++) {
		if (sw_xstats_offset <= ids[i] && ids[i] < *nb_supported)
			values[i] -= reset_vals[ids[i] - sw_xstats_offset];
	}

	sfc_adapter_unlock(sa);
}

int
sfc_sw_xstats_get_names_by_id(struct sfc_adapter *sa,
			      const uint64_t *ids,
			      struct rte_eth_xstat_name *xstats_names,
			      unsigned int size,
			      unsigned int *nb_supported)
{
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	unsigned int i;
	int ret;

	sfc_adapter_lock(sa);

	for (i = 0; i < sw_stats->supp_count; i++) {
		ret = sfc_sw_xstat_get_names_by_id(sa, sw_stats->supp[i].descr,
						   ids, xstats_names, size,
						   nb_supported);
		if (ret != 0) {
			sfc_adapter_unlock(sa);
			SFC_ASSERT(ret < 0);
			return ret;
		}
	}

	sfc_adapter_unlock(sa);

	return 0;
}

static void
sfc_sw_xstat_reset(struct sfc_adapter *sa,
		   const struct sfc_sw_stat_descr *sw_stat,
		   unsigned int sw_stat_idx,
		   uint64_t *reset_vals)
{
	unsigned int nb_queues;
	unsigned int qid;
	uint64_t *total_xstat_reset = NULL;

	SFC_ASSERT(sfc_adapter_is_locked(sa));

	nb_queues = sfc_sw_stat_get_queue_count(sa, sw_stat);
	if (nb_queues == 0)
		return;

	/*
	 * The order of each software xstat type is the total xstat
	 * followed by per-queue xstats.
	 */
	if (sw_stat->provide_total) {
		total_xstat_reset = reset_vals;
		*total_xstat_reset = 0;
		reset_vals++;
	}

	for (qid = 0; qid < nb_queues; ++qid) {
		reset_vals[qid] = sfc_sw_stat_get_val(sa, sw_stat_idx, qid);
		if (sw_stat->provide_total)
			*total_xstat_reset += reset_vals[qid];
	}
}

void
sfc_sw_xstats_reset(struct sfc_adapter *sa)
{
	uint64_t *reset_vals = sa->sw_stats.reset_vals;
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	unsigned int i;

	SFC_ASSERT(sfc_adapter_is_locked(sa));

	sfc_sw_stats_clear_cache(sa);

	for (i = 0; i < sw_stats->supp_count; i++) {
		sfc_sw_xstat_reset(sa, sw_stats->supp[i].descr, i, reset_vals);
		reset_vals += sfc_sw_xstat_get_nb_supported(sa,
						       sw_stats->supp[i].descr);
	}
}

static bool
sfc_sw_stats_is_packets_or_bytes(const char *xstat_name)
{
	return strcmp(xstat_name, SFC_SW_STAT_GOOD_PACKETS) == 0 ||
	       strcmp(xstat_name, SFC_SW_STAT_GOOD_BYTES) == 0;
}

static void
sfc_sw_stats_fill_available_descr(struct sfc_adapter *sa)
{
	const struct sfc_adapter_priv *sap = &sa->priv;
	bool have_dp_rx_stats = sap->dp_rx->features & SFC_DP_RX_FEAT_STATS;
	bool have_dp_tx_stats = sap->dp_tx->features & SFC_DP_TX_FEAT_STATS;
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	const struct sfc_sw_stat_descr *sw_stat_descr;
	unsigned int i;

	sw_stats->supp_count = 0;
	for (i = 0; i < RTE_DIM(sfc_sw_stats_descr); i++) {
		sw_stat_descr = &sfc_sw_stats_descr[i];
		if (!have_dp_rx_stats &&
		    sw_stat_descr->type == SFC_SW_STATS_RX &&
		    sfc_sw_stats_is_packets_or_bytes(sw_stat_descr->name))
			continue;
		if (!have_dp_tx_stats &&
		    sw_stat_descr->type == SFC_SW_STATS_TX &&
		    sfc_sw_stats_is_packets_or_bytes(sw_stat_descr->name))
			continue;
		sw_stats->supp[sw_stats->supp_count].descr = sw_stat_descr;
		sw_stats->supp_count++;
	}
}

static int
sfc_sw_stats_set_reset_basic_stats(struct sfc_adapter *sa)
{
	uint64_t *reset_vals = sa->sw_stats.reset_vals;
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	const struct sfc_sw_stat_descr *sw_stat;
	unsigned int i;

	for (i = 0; i < sw_stats->supp_count; i++) {
		sw_stat = sw_stats->supp[i].descr;

		switch (sw_stat->type) {
		case SFC_SW_STATS_RX:
			if (strcmp(sw_stat->name,
				   SFC_SW_STAT_GOOD_PACKETS) == 0)
				sa->sw_stats.reset_rx_pkts = reset_vals;
			else if (strcmp(sw_stat->name,
					SFC_SW_STAT_GOOD_BYTES) == 0)
				sa->sw_stats.reset_rx_bytes = reset_vals;
			break;
		case SFC_SW_STATS_TX:
			if (strcmp(sw_stat->name,
				   SFC_SW_STAT_GOOD_PACKETS) == 0)
				sa->sw_stats.reset_tx_pkts = reset_vals;
			else if (strcmp(sw_stat->name,
					SFC_SW_STAT_GOOD_BYTES) == 0)
				sa->sw_stats.reset_tx_bytes = reset_vals;
			break;
		default:
			SFC_GENERIC_LOG(ERR, "Unknown SW stat type");
			return -EINVAL;
		}

		reset_vals += sfc_sw_xstat_get_nb_supported(sa, sw_stat);
	}

	return 0;
}

int
sfc_sw_xstats_configure(struct sfc_adapter *sa)
{
	uint64_t **reset_vals = &sa->sw_stats.reset_vals;
	struct sfc_sw_stats *sw_stats = &sa->sw_stats;
	unsigned int cache_count = 0;
	uint64_t **cache =  &sa->sw_stats.cache;
	uint64_t *stat_cache;
	size_t nb_supported = 0;
	unsigned int i;
	int rc;

	sw_stats->supp_count = RTE_DIM(sfc_sw_stats_descr);
	if (sw_stats->supp == NULL) {
		sw_stats->supp = rte_malloc(NULL, sw_stats->supp_count *
					    sizeof(*sw_stats->supp), 0);
		if (sw_stats->supp == NULL)
			return -ENOMEM;
	}
	for (i = 0; i < sw_stats->supp_count; i++)
		sw_stats->supp[i].descr = &sfc_sw_stats_descr[i];
	sfc_sw_stats_fill_available_descr(sa);

	for (i = 0; i < sw_stats->supp_count; i++) {
		nb_supported += sfc_sw_xstat_get_nb_supported(sa,
						       sw_stats->supp[i].descr);
		cache_count += sfc_sw_stat_get_queue_count(sa,
						       sw_stats->supp[i].descr);
	}
	sa->sw_stats.xstats_count = nb_supported;

	*reset_vals = rte_realloc(*reset_vals,
				  nb_supported * sizeof(**reset_vals), 0);
	if (*reset_vals == NULL) {
		rc = -ENOMEM;
		goto fail_reset_vals;
	}

	memset(*reset_vals, 0, nb_supported * sizeof(**reset_vals));

	*cache = rte_realloc(*cache, cache_count * sizeof(**cache), 0);
	if (*cache == NULL) {
		rc = ENOMEM;
		goto fail_cache;
	}
	sa->sw_stats.cache_count = cache_count;
	stat_cache = *cache;
	rc = sfc_sw_stats_set_reset_basic_stats(sa);
	if (rc != 0)
		goto fail_reset_basic_stats;

	for (i = 0; i < sw_stats->supp_count; i++) {
		sw_stats->supp[i].cache = stat_cache;
		stat_cache += sfc_sw_stat_get_queue_count(sa,
						       sw_stats->supp[i].descr);
	}

	return 0;

fail_reset_basic_stats:
	rte_free(*cache);
	*cache = NULL;
	sa->sw_stats.cache_count = 0;
fail_cache:
	rte_free(*reset_vals);
	*reset_vals = NULL;
fail_reset_vals:
	sa->sw_stats.xstats_count = 0;
	rte_free(sw_stats->supp);
	sw_stats->supp = NULL;
	sw_stats->supp_count = 0;

	return rc;
}

static void
sfc_sw_xstats_free_queues_bitmap(struct sfc_adapter *sa)
{
	rte_bitmap_free(sa->sw_stats.queues_bitmap);
	rte_free(sa->sw_stats.queues_bitmap_mem);
}

static int
sfc_sw_xstats_alloc_queues_bitmap(struct sfc_adapter *sa)
{
	struct rte_bitmap **queues_bitmap = &sa->sw_stats.queues_bitmap;
	void **queues_bitmap_mem = &sa->sw_stats.queues_bitmap_mem;
	uint32_t bmp_size;
	int rc;

	bmp_size = rte_bitmap_get_memory_footprint(RTE_MAX_QUEUES_PER_PORT);
	*queues_bitmap_mem = NULL;
	*queues_bitmap = NULL;

	*queues_bitmap_mem = rte_calloc_socket("bitmap_mem", bmp_size, 1, 0,
					       sa->socket_id);
	if (*queues_bitmap_mem == NULL)
		return ENOMEM;

	*queues_bitmap = rte_bitmap_init(RTE_MAX_QUEUES_PER_PORT,
					 *queues_bitmap_mem, bmp_size);
	if (*queues_bitmap == NULL) {
		rc = EINVAL;
		goto fail;
	}

	rte_spinlock_init(&sa->sw_stats.queues_bitmap_lock);
	return 0;

fail:
	sfc_sw_xstats_free_queues_bitmap(sa);
	return rc;
}

int
sfc_sw_xstats_init(struct sfc_adapter *sa)
{
	sa->sw_stats.xstats_count = 0;
	sa->sw_stats.supp = NULL;
	sa->sw_stats.supp_count = 0;
	sa->sw_stats.cache = NULL;
	sa->sw_stats.cache_count = 0;
	sa->sw_stats.reset_vals = NULL;

	return sfc_sw_xstats_alloc_queues_bitmap(sa);
}

void
sfc_sw_xstats_close(struct sfc_adapter *sa)
{
	sfc_sw_xstats_free_queues_bitmap(sa);
	sa->sw_stats.reset_vals = NULL;
	rte_free(sa->sw_stats.cache);
	sa->sw_stats.cache = NULL;
	sa->sw_stats.cache_count = 0;
	rte_free(sa->sw_stats.reset_vals);
	rte_free(sa->sw_stats.supp);
	sa->sw_stats.supp = NULL;
	sa->sw_stats.supp_count = 0;
	sa->sw_stats.xstats_count = 0;
}


Hi pretty things. I am bringing The Sunday Currently back to my blog! Woohoo! Do note that I will not be doing this every week as my blog will be swimming in these posts if I keep posting it every Sunday. So here goes.
I am not currently reading anything. I was supposed to read Wedding Night by Sophie Kinsella for the month of September but I have too much on my plate right now. Reading is not on top of my list, sorry.
A bullet journal supplies. I have finished editing the photos and I'll try to finish it by Monday and have it scheduled on Tuesday. Fingers crossed!
If you're that clueless, it's To All The Boys I've Loved Before. You don't even wanna know how many times I've watched this movie OH GOD I am ashamed.
I am obsessed with Anna Of The North's Lovers album. The song Lovers is featured in To All The Boys I've Loved Before during the jacuzzi scene and I 'accidentally' listened to the album on Spotify and it was so good! Never thought that I would like that kind of music.
Of what I'm going to have for lunch tomorrow. I need to wake up for work in 5 hours but here I am still typing this post.
My room? Not that my room has any distinct smell.
For a miracle. I just want some good news before 2018 ends. It has been a weird year to be honest. Things happened for reasons that I know nothing of but I guess that's how life works, huh?
That these 12 days will pass by in a breeze because I can't wait for pay day. Your home girl is dying! Ok not really.
A pink MANGO sleeveless top and a pair of shorts. And my glasses.
My new blog theme! Alright I need to shut up about my blog theme already but I just can't I'm too excited!
The Christy Ng Jean bag. I'll get it in a few weeks or so. Hopefully they'll have the colour that I wanted when I'm purchasing it.
A 12 hours of deep sleep and a good food. Like rice and meat. Or butter chicken! My friend made butter chicken yesterday and it was so good I might make it on Monday. If I did make it, do you want to see a recipe post?
Sleepy and a little bit hungry. I'm going to bed right after I schedule this post. Good night.
And good morning when you're reading this.


Posted in Government, News, Partnerships, under .
Tagged with Canada, China, Languages Canada.
A week-long media tour of educational institutions in Canada has given a group of Chinese journalists a first-hand glimpse of the country's international education landscape. The Canadian government hopes the tour will enable the Chinese public to "gain a better understanding of and appreciation for Canadian education".
Sophie has written for various platforms in the UK and South America, amongst them VICE, the Huffington Post and El Observador. She also worked as a copywriter and editor within the British Council, producing a wide range of content to support flagship education programmes, including Going Global, Language Assistants and Connecting Classrooms.
"Communication [with China] is not as fluid as with European countries"
Coordinated by the Embassy of Canada in Beijing, and with support from the International Education Division of Global Affairs Canada and EduNova, the media tour took place in September.
Four Chinese journalists visited and met with representatives from universities, colleges and other education-related organisations in Ottawa, Québec City, Montréal and Halifax.
With Chinese students forming a significant proportion of Canada's international student cohort, the Canadian Embassy hopes to raise the profile of Canadian education in China through this visit, and all the while showcase its strengths and advantages for international students.
The visit was especially timely given that Canada is being featured as the "country of honour" at this month's China Education Expo (CEE), China's largest education fair.
The four journalists also had the opportunity to take part in a roundtable discussion with representatives from the Canadian Consortium for International Education (CCIE), a network of five national associations – Universities Canada, Colleges and Institutes Canada, CAPS-i, CBIE, and Languages Canada.
"Ultimately, we hope that the Chinese public will gain a better understanding of and appreciation for Canadian education through these stories," Wang affirmed.
The China Education Expo will be taking place from 21 to 22 October in Beijing. It will also take place in the cities of Chengdu (24 October), Guangzhou (26 October) and Shanghai (28 to 29 October).


text:
When Can a Child Transition From a High Chair to a Booster Seat?
More in Toddlers
By Maureen Ryan
Maureen Ryan is a freelance writer, editor, and teaching consultant specializing in health, parenting, and education.
Fact checked by Rich Scherr
Rich Scherr is a seasoned journalist who has covered technology, finance, sports, and lifestyle.
Images By Tang Ming Tung / DigitalVision / Getty Images
It probably seems like just yesterday that you were strapping a barely steady baby into a high chair for their first taste of solid food. While some children continue to use a high chair happily and safely into the preschool years, others need to move on much earlier. A booster seat can be a good option for a toddler who wants to eat at the table like the rest of the family, but isn't tall or balanced enough to sit in a regular chair.
Before you choose a booster seat, however, consider whether it offers the right support for your child and will work with your dining area and family eating habits. Here are some important facts to consider as you weigh the pros and cons of a booster chair.
Your Child's Size and Stage of Development
Before their first birthday, many babies might be able to use a booster as long as they are able to sit up on their own. However, some booster seats have little all-around support or safety belts and may not be appropriate for younger children. For instance, travel boosters do not usually have a front tray or lock-in system, which can help smaller toddlers and babies keep themselves upright.
Most children are steady enough for all types of boosters by 18 months of age. However, larger toddlers may be too big for some booster seats. If your child is strong enough to wiggle the booster forcefully (which can loosen the safety straps securing it to the dining chair, or move a non-strap booster), you may need to forget this option altogether. For larger toddlers and young preschoolers, consider:
Products like Kaboost, which raises the chair from the bottom so your child can reach the table while sitting unassisted.
A child-sized table where your toddler and siblings can eat some meals independently.
10 Best Foods to Feed Your Kids
Your Toddler's Disposition
For a toddler who doesn't like to be held down, a booster seat can offer a little more sense of freedom and equality with the rest of the family since they are pushed right up to the table. The newfound joy of being fully included may help with some challenging behaviors, such as food fussiness or dinner-time tantrums.
Getting rid of the high chair may also be a good idea if you have a climbing toddler. Little ones are often tempted to scale the sides of high chairs or climb into and out of the seat, which can be dangerous.
Even with a booster, you need to be vigilant when you have a climber. Your toddler might easily be able to climb into the booster. But once up there, they are at great risk of falling both while sitting and while trying to get back down. Luckily, boosters can easily be removed from your dining chair and stored in a safe place between meals and snacks to eliminate the temptation.
Top Tips for Keeping Toddlers Safe and Sound
Your Table and House Set-Up
Keep in mind that you need a specific type of set-up to use a booster safely. Only attach a booster chair to a sturdy, hard-backed dining chair. Check the specific requirements for the booster—some also require that the chair have a hard surface seat (no cushion). If you have lightweight dining chairs or use folding chairs, a booster is not for you.
The kitchen or dining table needs to be heavy so your toddler can't push it forward or topple anything while seated at the table. Don't place the chair with a booster near the wall—toddlers might push off the wall with their feet and tip over.
Never leave your baby unattended in the booster seat. If you know you will need to step away from the booster (even just momentarily) because of how your kitchen and dining area is set up, forget the booster and look for a sturdy high chair that is mobile.
If part of your frustration with the high chair is tied to the nearly impossible mission of cleaning it completely, know that the booster makes the chore much easier. With typical models of high chairs, you have straps to scrub and soak and crevices that hold fossilized crumbs of cookies and Cheerios. With a typical booster, you can put the entire seat into the sink (or dishwasher!) for a hose-down.
Ong C, Phuah KY, Salazar E, How CH. Managing the 'picky eater' dilemma. Singapore Med J. 2014;55(4):184-9. doi:10.11622/smedj.2014049
Benjasuwantep B, Chaithirayanon S, Eiamudomkan M. Feeding problems in healthy young children: Prevalence, related factors and feeding practices. Pediatr Rep. 2013;5(2):38-42. doi:10.4081/pr.2013.e10
Ablewhite J, McDaid L, Hawkins A, et al. Approaches used by parents to keep their children safe at home: A qualitative study to explore the perspectives of parents with children aged under five years. BMC Public Health. 2015;15:983. doi:10.1186/s12889-015-2252-x
Kurinsky RM, Rochette LM, Smith GA. Pediatric injuries associated with high chairs and chairs in the United States, 2003-2010. Clin Pediatr (Phila). 2014;53(4):372‐379. doi:10.1177/0009922813510599
The 7 Best Travel High Chairs for Families on the Go
The 8 Best Booster Seats of 2023
The Best Toddler Tables and Chairs to Help Grow Your Tot's Independence
Should You Move Your Child to a Booster Seat?
The Best High Chairs to Keep Your Baby Safe and Comfortable at Mealtimes
When Your Baby Is Ready to Use a High Chair
Toddler Parenting Tips (1- and 2-Year-Olds)
The 8 Best Convertible Car Seats of 2023
The 12 Best Potty Chairs of 2023, Tested and Reviewed
How to Discipline Your Toddler Using Time-Outs
Are Used Car Seats Safe for Your Baby?
The Best Kids' Camping Chairs for Resting in the Great Outdoors
The Best Forward-Facing Car Seats for Kids Who Want to See the Road Ahead
The 38 Best Gifts for 2-Year-Olds of 2023
The 19 Best Step Stools for Kids of 2023, Tested and Reviewed
Preschool Parenting Tips (3-, 4-, and 5-Year-Olds)


The only time Simona de Silvestro gave her parents any peace when she was a child was when they turned on a Formula 1 auto race. Even then, it seems, she loved the sound of the racing engine.
De Silvestro smiles at the memory from long ago.


What strategies do you use when teaching with expository or informational texts in your classroom?
*Word Theater: Students act out key words from the text selected by the teacher in a charades-style manner. Those not acting must guess the key word from word bank or a list posted on the board.
*Picture Sorts: Copy and cut out key pictures, diagrams, charts, etc. from the selected text and have the students sort them logically and create their own captions.
Seymour Simon is a former science teacher who has become a favorite non-fiction author to many kids, parents and teachers. His books can be used for the interactive read aloud activity shown in the video below. His website provide extensions of his books and many free resources for parents and teachers including discussion board to use with children.
Choose a portion of a non-fiction text as a teaching point.
Nonfiction Notice & Note Big Questions from Kylene Beers and Robert E. Probst's book "Reading Nonfiction, Notice & Note Stances, Signposts, & Strategies."
Kelly Gallagher says that part of the reason his students struggle with reading is because they lack prior knowledge and background. They can decode the words, but the words remain meaningless without a foundation of knowledge. To help build his students' prior knowledge, he assigns them an Article of the Week every Monday morning.
Turn it into a scavenger hunt by equipping students with an iPad and an app such as SeeSaw so that they can take pictures of the text features they find from a list that you give them. They then identify and define the text feature to demonstrate that they understand what its purpose is in the text.
1. First, model this strategy for students by working through an assigned text reading that illustrates a particular text structure and explaining why it is a certain type and how that type is organized. Make use of the text structure signal words provided above and use a graphic organizer from among those below that is illustrative of the type of text being explained.
2. Next, provide students with a practice session so they can utilize the signal words and graphic organizers for each text structure pattern. This second step allows you to gradually shift the responsibility of learning about text structures from yourself to the students.
3. Finally, when students have become proficient at identifying specific text structure patterns, they should produce examples of the various structures on their own.
In order to further reinforce students' understanding of text structure, you can utilize the Structured Notetaking procedure (Smith & Tompkins, 1988) to develop study guides based on the text structure of assigned readings.
How can we get kids to focus on the most important ideas when they are attempting to write a summary? That is the million dollar question! Try the VIP Strategy using post it notes. The presentation below was done by a second grader summarizing an article about potato chips.
The reviewed theoretical and research evidence in this article by Susan Dymock, Tom Nicholson supports the explicit and systematic teaching of five comprehension strategies that help all students tackle expository texts with success.