text:
Press Release:
1,200th Worldwide Implant of the SynCardia Total Artificial Heart Occurs in Indiana
Patrick O'Hara is the First Indianan to be Implanted with the SynCardia Heart and the First Discharged from the Hospital Without a Human Heart, Thanks to the Freedom® Portable Driver
TUCSON, Ariz. – Nov. 5, 2013 – An Indiana man has become the 1,200th person in the world to be implanted with the SynCardia temporary Total Artificial Heart. Patrick O'Hara is the first person in Indiana to receive the life-saving device and the first Hoosier to be discharged from the hospital with the Freedom® portable driver.
On June 26, 2013, O'Hara, 59, received the SynCardia Total Artificial Heart at Indiana University Health Methodist Hospital as a bridge to transplant. It's the only device that eliminates the source and symptoms of biventricular (both sides) heart failure. Dr. I-wen Wang, M.D., Ph.D., an IU Health cardiothoracic surgeon who specializes in heart and lung transplantation and ventricular-assist devices, implanted the SynCardia Heart when O'Hara's own organ, weakened by 30 years of heart disease, began to fail.
"Mr. O'Hara went from having blue fingertips from lack of sufficient blood flow to walking out of the hospital on his own power," says Dr. Wang. "The SynCardia Total Artificial Heart has given him a chance to get stronger in preparation for his heart transplant."
O'Hara left IU Health Methodist Hospital on October 10 carrying the 13.5-pound wearable Freedom driver in the backpack. Powered by two lithium batteries, the driver provides precisely calibrated pulses of air to operate the SynCardia Heart.
The Freedom portable driver allows patients to be discharged to their home and community to wait for a donor heart. Almost all of what would have been O'Hara's in-hospital costs have been eliminated for this portion of his care. O'Hara is undergoing outpatient cardiac rehabilitation to regain his strength. He's also looking forward to fishing and eating out at restaurants.
"It's mind-blowing how technology has advanced to create new possibilities for patients with end-stage heart disease," says Dr. Wang. "Heart devices have evolved for the benefit of all patients."
SynCardia Systems Inc. manufactures the world's first and only FDA, Health Canada and CE (Europe) approved Total Artificial Heart. Like a donor heart, the SynCardia Heart replaces both failing heart ventricles and the four heart valves.
Originally used as a permanent replacement heart, the SynCardia Heart currently is approved as a bridge to transplant. A 10-year pivotal clinical study showed that the SynCardia Total Artificial Heart had a 79% bridge to transplant rate, which is the highest transplant rate for any approved heart device in the world.
O'Hara's June 26 surgery marked the 1,200th time the SynCardia Total Artificial Heart has been implanted. Since then the number of implants have reached nearly 1,250, accounting for more than 335 patient years of life on the device. So far this year more than 135 SynCardia Hearts have been implanted, more than in all of 2012.
IU Health Methodist Hospital is among 93 SynCardia Certified Centers worldwide. Another 35 medical centers are in the process of certification.
"Surgeons around the world are finding more reasons to implant the SynCardia Total Artificial Heart to help end-stage biventricular heart failure patients," says Michael P. Garippa, CEO and president of SynCardia Systems.
The Freedom portable driver is CE approved for use in Europe and undergoing an FDA-approved Investigational Device Exemption (IDE) clinical study in the U.S.
CAUTION - The Freedom portable driver is an investigational device, limited by United States law to investigational use.
Read IU Health's press release and watch video about Patrick O'Hara.
About SynCardia Systems, LLC
SynCardia Systems, LLC in Tucson, Ariz., is the privately-held manufacturer of the world's first and only FDA, Health Canada and CE approved Total Artificial Heart. For people suffering from end-stage heart failure affecting both sides of the heart (biventricular failure), the SynCardia temporary Total Artificial Heart is used as a bridge to transplant, helping them survive until a matching donor heart becomes available. SynCardia also manufactures the Freedom® portable driver, which powers the temporary Total Artificial Heart and allows clinically stable patients to be discharged from the hospital to enjoy life at home while they wait for a heart transplant.
SynCardia Contact:
Janelle Drumwright, firstname.lastname@example.com, (520) 547-7463


text:
Curious Launches Categories, Courses, And A Crafting App For Mobile
Curious, the video-enabled tutoring and teaching service for anyone who thinks that curiosity may be bad for cats but great for people, is launching some new features, a new crafting app, and a wholly redesigned website. The company's site now is organized into categories and courses for the massive number of tutorials on any topic ranging from how to replace a carburetor to how to play… Read More
5K Videos And Counting, Curious Lands $15M From GSV To Help Teachers Monetize Bite-Sized Lessons
Thanks to the proliferation of smart devices, cloud-based services and more fluid content creation and distribution systems, technology is fundamentally changing the way we learn. Not only is it easier and cheaper than ever before to find, create and consume learning content, but with better digital video solutions storming into every classroom, learning is actually becoming an enjoyable… Read More
With $7.5M From Redpoint, Bill Campbell & Others, Curious Launches A Marketplace For Life-Long Learning
With the growing demand for video-based online education, Curious.com is joining the crowd today with a marketplace that aims help students and teachers connect around a range of subjects, from pipe soldering and salsa dancing to jewelry making and knife sharpening. Read More

subset: commoncrawl


text:
- About NCAS & UCN
- Academics
- Research
- Information For...
- Events & News
- Support NCAS & UCN
Introductory Physics Labs (750:205) start the first week of classes this semester. Be sure to attend to learn important information regarding the rest of your physics labs. The first lab will be performed the week of September 5.


text:
Think you're a master of local trivia? Try answering the Washingtology question of the day from Cultural Tourism DC. Take your best guess and see what others have answered in our daily quiz.
Scroll down the page to find out the correct answer.
Answer: Congress
Source: "The District's 1972 Home Rule Charter lists building height amongst ten issue areas that the District government has no power to regulate, leaving [that] power entirely in the hands of Congress." http://greatergreaterwashington.org/post/7705/changing-height-act-not-biggest-priority-speakers-argue/
Find more Washingtology quizzes here , and check back every weekday for a new Washingtology question of the day.


text:
for Sawyer County, WI
Surnames beginning with G
**Please Note: If you found a name listed here that you are interested in getting the death record for, see the Sawyer County Vital Records page (link below) for info in obtaining that record. Thanks!
[an error occurred while processing this directive]


text:
I've been pretty quiet on this blog but not today. Today, I am so excited to share with you images from my first wedding in southern France. Natalie and Jacky's civil ceremony was on the blog yesterday but today it's all about their beautiful, southern France wedding in Grignan.
When I asked Natalie if they had a theme for their wedding she said, it's "Meet Me at the Tree." She then explained how she started thinking about how a tree has had an important place in human history, from the beginning of time, and will be till the end. Therefore, even though you some of you couldn't join us in person, I invite you now to meet us by the tree and follow along these images as Jacky and Natalie say their vows on by far the windiest wedding I have ever experienced.
These beautiful cards which Natalie and Jacky used during their First Look are from Of Note Stationers. (I can't RAVE enough about these cards! Simple, classic, & elegant!)
Amy is a Boston wedding photographer and currently booking destination weddings worldwide. If you are interested in booking a wedding, feel free to email me here!


text:
Update 8/29, 5:45 PM by Satish Ram
The Mets announced earlier on Twitter that Victor Black was the PTBNL in the deal that saw the Mets send Marlon Byrd, John Buck, and cash to the Pirates. This was old news, however, as speculation ran rampant as soon as the trade was announced.
The new news, coming via Adam Rubin, is that the Mets are working with a technicality that allows Black to take 72 hours to report to his new team. This will allow him to report directly to the Mets on September 1st with the roster expansion and bypass the trouble of going to Vegas for a day.
So yes, it looks like Vic Black has gone through the process to get to the Mets and those anxious to see the return of the trade will be pleased very soon. Black should be an excellent addition to our bullpen that is currently missing Parnell and he could become an interim closer if he enjoys success.
Original Post
According to Ken Rosenthal of FOX Sports, right-handed reliever Vic Black is the Player to be Named Later that will complete the trade that sent John Buck and Marlon Byrd to the Pirates for Dilson Herrera.
Black is currently on waivers and is expected to clear tomorrow, but the Pirates intend to send Black to the Mets at the end of the season.
Black reportedly is on waivers. If he goes unclaimed, the deal can be completed now. If he is claimed, he will need to be pulled back and be sent to the Mets after the season.
Black, 25, was the 49th overall pick in the 2009 draft out of Dallas Baptist University. John Sickels had the following to say about him last week:
Unlike many minor league closers, Black does not want for stuff: he has one of the best fastballs in the system, clocked as high as 101 MPH in the minors; he hit 98 during his major league trial and averaged 95. A supplemental first round pick in 2009 out of Dallas Baptist, he struggled with control problems, a substandard change-up, and persistent arm trouble early in his career and at one point looked like a bust.
He revived his career by converting to relief, posting an excellent 1.65 ERA with an 85/29 K/BB in 60 innings with 13 saves last year in Double-A, followed by consistent success this year. He's had fewer problems throwing strikes and staying healthy with relief use, doesn't have to worry about the change-up, and can just come in and blow people away for an inning or two with his fastball and a slider that can touch 90.
MiLB.com ranked him as the sixth-best pitching prospect in the Pirates system.
Black is 5-3 with a 2.51 ERA and had 17 saves in 38 relief appearances with Triple-A Indianapolis this season.


text:
What does GML mean in Coins?
This page is about the meanings of the acronym/abbreviation/shorthand GML in the Miscellaneous field in general and in the Coins terminology in particular.
Gold Maple Leaf
A 1oz. gold bullion product produced by the Royal Canadian Mint.
Find a translation for GML in other languages:
Select another language:
Discuss this GML abbreviation with the community:
Use the citation below to add this abbreviation to your bibliography:
"GML." Abbreviations.com. STANDS4 LLC, 2018. Web. 25 Feb. 2018. <https://www.abbreviations.com/term/1428149>.


text:
UD learned a new phrase at the NCAA convention: Bench Decorum. People who discuss bench decorum worry about the growing tendency of players, fans, and coaches to speak and behave in a vile manner during games.
Here's a recent, somewhat controversial, example, from the Georgetown University newspaper:
The cheer began [2] just one minute 47 seconds into the game, when the University of Connecticut's A.J. Price stepped up to the foul line for his first free throw of the afternoon.
"Where's my laptop?" Georgetown students taunted in unison. They did not let up during any one of Price's game-high 11 free-throw attempts.
The students were, of course, alluding to Price's August 2005 arrest for the theft of four laptop computers on the UConn campus. Price, who was one of two players charged with the crime, ended up being suspended for the 2005-06 season and receiving 18 months of probation and 400 hours of community service.
Now, everywhere the Huskies play, students give him the same harsh treatment.
The article goes on to suggest that this cheer is not "classy," and that Georgetown students should strive to be classy.
UD is not so sure. At least in this instance. Hearing lots of people wonder about where the laptops went might be considered a mild supplemental form of punishment. Might have a deterrent effect.


text:
AmyBith - posted on 04/14/2012 ( 4 moms have responded )
My son is currently in prek at the school he is supposed to be going to for kindergarten next year. This week my husband met with the kindergarten parent educator and his current prek teacher. They basically said that traditional school may not be the best option for our son. They suggested maybe skipping a grade or looking into private schools. He has not has a formal assessment yet or taken an IQ test. My son is also very big for his age. He is 4 1/2 but is always assumed to be 6. He is also very verbal for his age. So this combination makes people misjudge his age all the time. I don't think skipping kindergarten makes sense. Any suggestions for how to advocate my my child?


text:
INDIAN TRAIL – After moving to Indian Trail 10 years ago, Sarah Parisi saw many dance studios in the area but none like the one she wanted to open. So she decided to take a chance and create the Imagine Academy of Dance.
Many studios in the area focus on competitions, much like Parisi did as a child when she began dancing. But after receiving her degree in dance performance from Townson State in Maryland and experiencing more than the competition lifestyle, she wanted to give that experience to others.
"I saw that Indian Trail has been growing tremendously since I've been here and I felt like there wasn't a dance studio in the area – the type of dance studio that I wanted to open up," she said.
Although the economy was not strong at the time, she decided to open Imagine Academy anyway. Parisi said it gave her an advantage because she was a mother as well, who wanted to find affordable alternatives for her children. With her studio not having the costs of competition Parisi says she gives parents a cheaper alternative for their children who want to take dance lessons.
"Just with the way the economy has been I can relate to the parents who want to put their child in an activity at an affordable cost," Parisi said.
She also says many children who attend her studio come from competition studios and enjoy the change in atmosphere. Without the constant pressure and judging, children are able to have fun and enjoy dance, she said.
"A lot of the parents who do inquire about my studio like the fact that I am not a competition studio," Parisi said. "I consider my studio to be professional, and I've had parents come from other places and are pleased that their kids learned so much in the course of a week."
Not to mention, removing dance competitions from the expenses makes her studio much more affordable.
"My prices are very reasonable, very competitive," Parisi said. "I think (parents) like the fact that they are not spending hundreds and hundreds of dollars on costumes and classes and all of that kind of
Parisi wants every student to leave her studio with a new found confidence and persistence to work hard in every aspect of their lives. She says the time they spend in the studio helps all of her students, but mostly those in their teenage years who are struggling to fit in and be comfortable with themselves.
"I want them to walk about with the confidence that they can be anything they want to be; they can achieve anything they want to achieve with hard work and discipline," she said.
Whatever her method is, Parisi's studio has been a success starting with 50 students her first year, something she hadn't planned. And due to the quick growth Parisi had to hire a second teacher her first year. Now, three years later, Imagine Academy of Dance has about 100 students.
"I'm really happy with the way the studio has increased," she said. "I feel like I'm reaching my goal to where I want my studio to go."
While her students don't participate in competitions, Imagine Academy does have three performance groups who take part in events like A Taste of Charlotte, movie night in Indian Trail and more. They perform at no cost and take every chance they can to show off their dances.
The Imagine Academy of Dance performance group will perform this Friday, Feb. 22, for the Sun Valley Elementary School Global Festival at 7 p.m. The students learned dances from many different cultures for the event, something Parisi said they enjoyed even though they only had a few days to prepare. The event will be at the school, 5200 Rogers Road, in Monroe.
"It's a dream come true," Parisi said. "It's something I have always wanted to do. I am very excited and proud of my studio. I feel like I have a great group of clientele that walks through this door. I can't even imagine doing anything else."


text:
Find out why Liam Payne is like the daddy of One Direction and Louis Tomlinson is always having a laugh in two new exclusive clips from the One Direction 'This Is Us' DVD. Liam Payne has earned himself the role of daddy of One Direction?
Find out more about why Liam is the most sensible of the 1D guys in these new exclusive clips from the This Is Us DVD.
One Direction HQ released the clips today, and in one, Harry, Louis, Zayn and Niall dish on how Liam is like a father figure in the group.
You even get to see Liam in action, as he definitely takes on the leadership role of the boys.
It's interesting to hear that Liam and Louis didn't really get along at first ("at each others' throats" on the X Factor, Louis says!)--and in the second clip, you may get a better understanding of why Liam says he "wanted to whack" Louis!
Louis is known to have a good time at all times, and we imagine that could have caused Liam to bristle just a bit, since he's pretty serious about getting down to business.
In the end, of course, they've come to understand each other and Liam has even loosened up a bit as Zayn explains, "we've corrupted him."
He's still sensible though--nobody's gonna take that away from him!
Want More? Like us on Facebook
Gallery | One Direction: From Boys to Men!


text: I was going through one of my hives the other day and one bee was making the oddest noise. It was a higher pitch and at first I thought there might be another insect. Is that a sign of a hive that swarmed? I suspect they did. There was a lot of scouting activity a few days before I checked the hive, I couldn't find the queen and there were no eggs or young larva. Q: Is there any information on the sounds that honey bees make?


text: >>Is the problem with the disappearing menus and randomly >>resizing/disappearing elements fixed, then? >Looks sane now. >>Firefox on macppc is a disaster. >The rendering bugs disappeared when Andy replaced the thread library, so >in 4.0 they're likely still present. The workaround for this I've used with NetBSD 3.x is to disable all compiler optimizations when building Firefox. This makes Firefox slower, but the glitches go away. (I had understood the glitches were due to compiler bugs in the GCC 3.x series. I've been meaning to upgrade to a 4.0 RC but haven't done so yet, so I can't comment on if the newer GCC release fixes any of these troubles.) Dave


text:
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch interdiff-90-92.diff. Unable to apply patch. See the log in the details link for more information. View
PASSED: [[SimpleTest]]: [MySQL] 59,393 pass(es). View
PASSED: [[SimpleTest]]: [MySQL] 59,780 pass(es). View
PASSED: [[SimpleTest]]: [MySQL] 59,369 pass(es). View
Comment #8Berdir CreditAttribution: Berdir commented
|Needs work
|» Needs review
Comment #18Berdir CreditAttribution: Berdir commented
|Needs review
|» Needs work
+++ b/core/modules/comment/comment.installundefined
@@ -394,6 +394,15 @@ function comment_update_8004() {
+ update_variables_to_config('node.settings', array(
+ 'node_rank_comments' => 'search_rank.comments',
+ ));
I think the config setting should go in a separate file provided by comment.module. We decided a while ago that modules should not extend config files from other modules.
Especially because comment is currently refactored to support all entities.
+++ b/core/modules/node/node.installundefined
@@ -707,6 +701,32 @@ function node_update_8013() {
+ * Moves variables node_rank_relevance, node_rank_sticky, node_rank_promote and
+ * node_rank_recent to config node.settings.search_rank.
I think this can be shortened to "node search rank variables" or something like that.
+++ b/core/modules/node/node.installundefined
@@ -707,6 +701,32 @@ function node_update_8013() {
+ $rank_variables = db_select('variable', 'v')
+ ->fields('v', array('name'))
+ ->condition('v.name', db_like($oldprefix) . '%', 'LIKE')
+ ->execute()
+ ->fetchCol();
+ $config = array();
+ foreach ($rank_variables as $rank_variable) {
+ $config[$rank_variable] = substr_replace($rank_variable, $newprefix, 0, $oldpfxlen);
Hm, haven't checked the older patches, is this necessary?
I thought that update_variables_to_config() is able to handle non-existing variables and defaults...
+++ b/core/modules/statistics/statistics.installundefined
@@ -173,3 +173,12 @@ function statistics_update_8002() {
+ */
+function statistics_update_8003() {
+ update_variables_to_config('node.settings', array(
+ 'node_rank_views' => 'search_rank.views',
Same for this one then as for comments.
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.phpundefined
@@ -99,6 +99,11 @@ public function testVariableUpgrade() {
+ $expected_config['node.settings'] = array(
+ 'search_rank.promote' => 10,
+ 'search_rank.custom_from_contrib' => 5,
Ah I see, that's why you did it dynamically.
That might actually be irrelevant given that those settings should not be in node.settings... I'd instead of custom_from_contrib, let's add tests for comment and statistics instead...
Comment #22sun CreditAttribution: sun commented
+++ b/core/modules/node/config/node.settings.yml
@@ -1 +1,6 @@
+ promote: '0'
+ recent: '0'
1) Would it make sense to move these settings into a new node.search config file? They are only needed when Search module is enabled. Otherwise, they're ignored/unused. E.g., how about this:
promote: '0'
recent: ...
2) The indentation for sub-keys should be 2 spaces instead of 4. (as usual)
+++ b/core/modules/node/node.install
@@ -707,6 +701,21 @@ function node_update_8013() {
+ 'node_rank_comments' => 'search_rank.comments',
+ 'node_rank_views' => 'search_rank.views',
1) node_rank_comments belongs to Comment module, not Node module. Therefore, it should be in a comment.search config file, with separate upgrade path.
2) node_rank_views belongs to Statistics module, if I'm not mistaken. It should be in a separate statistics.search config file with separate upgrade path.
Comment #24Berdir CreditAttribution: Berdir commented
Right, the settings are about nodes. But they are defined by comment and statistics module. And it was defined a while ago that yml files should only contain stuff from the module it lives in. So that they can provide meta information about it, for example.
The comment settings for node types will for example also live in a separate file.
Comment #26sun CreditAttribution: sun commented
@znerol: Thank you for clarifying the problem space!
By now, it's pretty clear that something is completely off with those node search ranking settings. ;)
Perhaps the most pragmatic way to unblock this innocent issue would be to keep those settings in node.search, but additionally move/merge the comment_ranking() and statistics_ranking() back into node_ranking(), both wrapped in a corresponding
That would at least bring some clarity into this confusing
hook_ranking() implementation space for now. I can only guess that we should/would want to actually migrate that search ranking stuff from Node module to Entity module for D8 anyway (but I'm not aware of any issue).
What do you think?
Comment #31ACF CreditAttribution: ACF commented
Comment #33ACF CreditAttribution: ACF commented
|Needs work
|» Needs review
PASSED: [[SimpleTest]]: [MySQL] 55,899 pass(es). View
Just a re-roll.
Comment #34jibran CreditAttribution: jibran commented
Comment #35Jon Pugh CreditAttribution: Jon Pugh commented
I am currently re-rolling along with #1938920: Convert node_search_admin theme tables to table #type, they collide a bit.
Comment #36Jon Pugh CreditAttribution: Jon Pugh commented
|Needs work
|» Needs review
This patch includes work done at #1938920: Convert node_search_admin theme tables to table #type, rerolled over current head.
Comment #37Jon Pugh CreditAttribution: Jon Pugh commented
|0 bytes
FAILED: [[SimpleTest]]: [MySQL] Repository checkout: failed to checkout from [git://git.drupal.org/project/drupal.git]. View
Comment #38Jon Pugh CreditAttribution: Jon Pugh commented
FAILED: [[SimpleTest]]: [MySQL] Repository checkout: failed to checkout from [git://git.drupal.org/project/drupal.git]. View
Oops! Battery failed in the middle of my git diff'ing
Comment #39Jon Pugh CreditAttribution: Jon Pugh commented
PASSED: [[SimpleTest]]: [MySQL] 57,529 pass(es). View
Re-roll with newlines at end of files.
Comment #40Jon Pugh CreditAttribution: Jon Pugh commented
|Needs review
|» Needs work
Crap it still doesn't seem to save the configs for the CONTENT RANKING settings...
gonna need some help on this one.
Comment #41alexpott CreditAttribution: alexpott commented
|Needs work
|» Needs review
Comment #42Jon Pugh CreditAttribution: Jon Pugh commented
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch 1831632-42-convert-node_rank_R-to-cmi.patch. Unable to apply patch. See the log in the details link for more information. View
It was saving a bad array. This fixes it!
Comment #43Jon Pugh CreditAttribution: Jon Pugh commented
Is it ok to append to an array like so? (according to our coding standards?) wasn't sure...
$ranks = array();
foreach ($form_state['values']['content_ranking']['factors'] as $factor){
$ranks += $factor;
Comment #44dawehner CreditAttribution: dawehner commented
While changing all this lines we could replace it with Drupal::config()
Comment #45Jon Pugh CreditAttribution: Jon Pugh commented
It does use config(), that was just a snippet. The problem is that the form submission generates an array that doesn't match the structure of the config, so I used the foreach to simplify the array so it matches the config.
+ /**
+ * Submit callback for search admin form callback.
+ */
+function node_search_admin_submit($form, &$form_state) {
+ $ranks = array();
+ foreach ($form_state['values']['content_ranking']['factors'] as $factor){
+ $ranks += $factor;
+ }
+ config('search.node')
+ ->set('rank', $ranks)
+ ->save();
Comment #46dawehner CreditAttribution: dawehner commented
Also just in general, is there a reason why we not prefix it with node instaed? So node.search instead of search.node. All this code is in node.module, which deals with that.
Comment #48jibran CreditAttribution: jibran commented
Comment #50dawehner CreditAttribution: dawehner commented
Comment #51crazybutable CreditAttribution: crazybutable commented
Jon Pugh: This issue has needed a re-roll for a week, are you still working on it, or can somebody else do the re-roll? :)
Comment #57mtift CreditAttribution: mtift commented
@@ -115,7 +115,7 @@ function hook_search_admin() {
- $ranks = config('node.settings')->get('search_rank');
+ $ranks = Drupal::config('search.node')->get('rank');
This was changed to:
$ranks = Drupal::config('node.settings')->get('search_rank');
So this patch needs a re-roll.
Comment #59Berdir CreditAttribution: Berdir commented
Probably makes sense to wait with a re-roll until #2003482: Convert hook_search_info to plugin system
Comment #60jhodgdon CreditAttribution: jhodgdon commented
|Needs review
|» Needs work
That other issue is in... I'm not sure how much of this still needs to be done, but it's time to reroll this one.
Comment #64catch CreditAttribution: catch commented
|» Critical
Comment #65alexpott CreditAttribution: alexpott commented
|Issue tags:
|-Needs reroll
PASSED: [[SimpleTest]]: [MySQL] 59,265 pass(es). View
I think we should take a slightly different approach here and use the plugin configuration system here. I'm not going with full config entities as that seems overload but patch attached will read in a search.plugin.plugin_id.yml for any search plugin and add what's contained within to the plugin's configuration array.
Comment #66alexpott CreditAttribution: alexpott commented
FAILED: [[SimpleTest]]: [MySQL] 59,139 pass(es), 2 fail(s), and 0 exception(s). View
Comment #67pwolanin CreditAttribution: pwolanin commented
|Needs review
|» Needs work
ok, so I see where you are going with this, but I think it could be improved:
I think this change is wrong:
- $container->get('config.factory')->get('search.settings'),
+ $container->get('config.factory'),
I'd either leave it as-is, or better yet maybe merge it into the configuration array used to instantiate the plugin so we totally get this out of the dependency list.
Minor/personal taste:
+ // Ensure we return an array. If the plugin has no configuration this will
+ // be null.
+ if (!is_array($configuration)) {
+ $configuration = array();
+ }
I'd personally use
if (empty($configuration))
Comment #68pwolanin CreditAttribution: pwolanin commented
I can do a quick re-roll with those changes
Comment #69alexpott CreditAttribution: alexpott commented
|Needs work
|» Needs review
PASSED: [[SimpleTest]]: [MySQL] 58,848 pass(es). View
This will need to be rerolled after #2086201: Use PluginFormInterface instead of one-off form methods for search plugins gets in.
Ok after talking to @pwolanin lets see if we can avoid injecting the config factory. And I just noticed the SearchExtraTypeSearch which can now also use the new search plugin configuration system.
Comment #70pwolanin CreditAttribution: pwolanin commented
Yes, I like this better as long as we get a config object.
Minor, but I might use $this->getPluginId() since it's guaranteed by the interface while the protected variable name is not?
Comment #71jhodgdon CreditAttribution: jhodgdon commented
|Needs review
|» Needs work
I read through the code and docs, and it all looks pretty clear to me. One minor thing to fix:
+ * @param string $plugin_id
+ * The id of the plugin to get configuration for.
This is in SearchPluginManager.php -- please use "ID" not "id" (pet peeve of mine: id is like ego, superego, id; ID means identifier... it's all over core and it's just wrong and I hate it!).
Actually, come to think of it:
+ /**
+ * Gets plugin configuration stored in the configuration management system.
+ *
+ * @param string $plugin_id
+ * The id of the plugin to get configuration for.
+ *
+ * @return array
+ * An array of plugin configuration.
+ */
+ protected function getConfiguration($plugin_id) {
+ $configuration = array();
+ $configuration['search.plugin.' . $plugin_id] = $this->configFactory->get('search.plugin.' . $plugin_id);
+ $configuration['search.settings'] = $this->configFactory->get('search.settings');
+ return $configuration;
+ }
Could we add something to the @return to explain that you get the search plugin and generic search settings in the return value? And the one-line description just says it is getting plugin configuration, which doesn't seem accurate.
Comment #72ianthomas_uk CreditAttribution: ianthomas_uk commented
PASSED: [[SimpleTest]]: [MySQL] 58,429 pass(es). View
Here's a reroll using not much more intelligence than git itself. The interdiff contains the changes I made to resolve the conflicts. Leaving at needs work until I've given it more of a test myself.
Oh, I did manage to slip in the id > ID change though.
Comment #73ianthomas_uk CreditAttribution: ianthomas_uk commented
Continuing from #71 re getConfiguration(). This function exists to provide parameters for createInstance(), but it's not a pattern that I can find anywhere else in Drupal and I think this might have been an unintentional change in #69.
FactoryInterface defines the $configuration parameter of createInstance as "An array of configuration relevant to the plugin instance.", so I think this is intended to be a potentially multi-level array, rather than an array of config objects. I think we would do this just by adding ->get() to these calls (the equivilent code before #69 did call ->get()).
+ $configuration['search.plugin.' . $plugin_id] = $this->configFactory->get('search.plugin.' . $plugin_id)->get();
+ $configuration['search.settings'] = $this->configFactory->get('search.settings')->get();
I'm not sure what impact this would have on the created instance though.
Comment #74jibran CreditAttribution: jibran commented
|Needs work
|» Needs review
Comment #75pwolanin CreditAttribution: pwolanin commented
Might need some work.
+ $config = $this->configuration['search.plugin.' . $this->pluginId];
Seems like we'd want a namespace for "ranking" rather than assuming they will always be the only top-level config for node search?
Comment #76alexpott CreditAttribution: alexpott commented
@pwolain are you sure about #75
The original variables were very node specific -
node_rank_promote, node_rank_views, node_rank_comments, node_rank_custom. I'm not sure that we should be generalising them here.
Comment #77ianthomas_uk CreditAttribution: ianthomas_uk commented
+++ b/core/modules/node/lib/Drupal/node/Plugin/Search/NodeSearch.php @@ -272,14 +260,14 @@ protected function addNodeRankings(SelectExtender $query) { foreach ($ranking as $rank => $values) { - // @todo - move rank out of drupal variables. - if ($node_rank = variable_get('node_rank_' . $rank, 0)) { + $rank = $this->configuration['search.plugin.' . $this->pluginId]->get('rank.' . $rank); + if (!empty($rank)) { // If the table defined in the ranking isn't already joined, then add it. if (isset($values['join']) && !isset($tables[$values['join']['alias']])) { $query->addJoin($values['join']['type'], $values['join']['table'], $values['join']['alias'], $values['join']['on']); } $arguments = isset($values['arguments']) ? $values['arguments'] : array(); - $query->addScore($values['score'], $arguments, $node_rank); + $query->addScore($values['score'], $arguments, $rank); } }
$rank is used both for the index of the array being looped over and for the value returned from config. I'd suggest renaming the latter back to $node_rank.
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php @@ -168,6 +168,13 @@ public function testVariableUpgrade() { + $expected_config['search.plugin.node_search'] = array( + 'rank.promote' => '10', + 'rank.views' => '5', + 'rank.comments' => '-2', + 'rank.custom' => '6', + ); +
These should be integers now, see #1653026: [META] Use properly typed values in module configuration
It's a shame the change suggested in #67 to remove the config factory dependency wasn't split into it's own task, as it's made the patch more complicated than it needed to be, but it's probably not worth splitting them now.
Note that there are unaddressed review comments from #70 onwards.
Comment #78ianthomas_uk CreditAttribution: ianthomas_uk commented
|Needs review
|» Needs work
Defaults should be provided by .yml files, not using ternary operators.
I don't think we should be dynamically adding the plugin ID in this line either:
$this->configFactory->get('search.plugin.' . $plugin_id);
I think we should be asking the plugin for it's config entity (although I'm still a bit new to this stuff).
Comment #79ianthomas_uk CreditAttribution: ianthomas_uk commented
+++ b/core/modules/search/lib/Drupal/search/SearchPluginManager.php
@@ -117,4 +117,29 @@ public function pluginAccess($plugin_id, AccountInterface $account) {
+ protected function getConfiguration($plugin_id) {
+ $configuration = array();
+ $configuration['search.plugin.' . $plugin_id] = $this->configFactory->get('search.plugin.' . $plugin_id);
+ $configuration['search.settings'] = $this->configFactory->get('search.settings');
+ return $configuration;
+ }
While I can see the point of this, it doesn't seem to be how getConfiguration is meant to be used. Looking at other plugins, I think getConfiguration should return just the configuration for the plugin as an array (i.e. the contents of $this->configFactory->get('search.plugin.' . $plugin_id)).
I don't think the plugins should be accessing search.settings directly at all, rather the search module should make the necessary settings available.
I'll keep looking at this tomorrow, in particular I couldn't see how the configuration from other plugins was actually saved to/read from disk.
Comment #80ianthomas_uk CreditAttribution: ianthomas_uk commented
I've split the problem that @alexpott and @pwolanin were working on in #69 into #2123073: Move index.cron_limit setting to NodeSearch and would really appreciate people's thoughts on that. I'm happy to write patches for both issues once there is consensus on that issue (which, if accepted, would simplify the patch for this issue).
Comment #81ianthomas_uk CreditAttribution: ianthomas_uk commented
|Needs work
|» Needs review
PASSED: [[SimpleTest]]: [MySQL] 59,369 pass(es). View
I've got a much better understanding of what's going on here now and I don't agree with the approach taken from #65 onwards. It seems to me that you've got two basic approaches you can take:
a) Pass everything in as parameters on the constructor, store them as properties and go back later to see if they've been changed and need saving to disk (aka the config entity approach).
b) Handle everything internally using \Drupal::config()
This seems an odd hybrid of the two, in that it looks like you're passing in configuration, but really you're passing in a reference to the configuration, and that reference is always going to point to the same place! (NodeSearch will always be search.plugin.node_search)
The patch was also made more complicated by some semi-related refactoring and an odd variable name change. I've already split off the search.settings removal into it's own issue. I don't see the need for SearchExtraTypeSearch->$configuration, but it's not causing any problems so I'll leave that for now.
Once all that was undone we're left with what was actually quite a simple conversion. I've not done an interdiff, as it would be bigger than the diff. This is coded blind at this stage, but I've run out of time today. I'll hopefully get a chance to test it myself tomorrow. Setting to needs review for the test bots.
Comment #83ianthomas_uk CreditAttribution: ianthomas_uk commented
Conceptually they are very similar, although the config name has changed from node.search to search.plugin.node_search. I created #81 by removing changes from #72.
Other differences that I need to investigate:
- No longer converting node_rank_comments or node_rank_views, I assume these variables are no longer used.
- #63 has some changes that don't seem relevant to this issue, e.g. removal of theme_node_search_admin(). I'll check if any of those are still wanted.
- #63 doesn't always deal with all the variables, e.g. drupal-7.system.database.php only lists 3 of 6, #81 lists 4 of 4.
Comment #85jhodgdon CreditAttribution: jhodgdon commented
Regarding #84 - yes there are hook_ranking() implementations, but I do not think they have been working since Drupal 7.x. See
#893302: Search ranking based on the factor "number of comments" & "No of Page Views" is broken
And it looks like the patch in #81 has an upgrade hook that is converting all node_rank_* variables to config, so I don't think we are losing any information in the upgrade?
Anyway... This patch looks quite reasonable and is a straightforward conversion of variables to config, so I think we should probably just commit it.
But I have two concerns about tests:
a) It's interesting to me that the test for ranking is using a config_set() instead of testing the UI (using the Search settings page). Do we have a test that uses the UI? If not, we should add one.
b) I think I'd like to see a test added with a test module that adds a new type of ranking with hook_ranking(), and verifying that it works correctly. This should have been done in 7.
I realize that both of these tests are a bit out of scope for the issue, but it's hard to verify that the change is working properly without better tests. Thoughts? We could move these to a separate task issue...
Does anyone have any concerns about the proposed patch that would keep it from being committed?
Comment #86ianthomas_uk CreditAttribution: ianthomas_uk commented
I've compared #63 and #81 line by line, differences are:
- Changes for #1938920: Convert node_search_admin theme tables to table #type (thanks znerol)
- Config name has changed from node.search to search.plugin.node_search
- Configs are being set one at a time in a loop rather than as an array. I don't see a major difference between the two approaches, the loop is probably slightly safer in case there are already values that would be overridden but I can't see a scenario where that happens.
- The update functions are very different, but should be removed anyway as upgrades will not be supported in Drupal 8.
- $this->nodeSearchPlugin is set in each of the tests. I'm not sure what purpose this serves.
- rank_custom added to test and database upgrade in #81
It is probably important to note, that the list of variables is not exclusive. Contributed modules also may implement hook_ranking and through that mechanism contribute more variables with node_rank_-prefix.
Shouldn't they keep track of those variables in their own config objects?
Comment #88ianthomas_uk CreditAttribution: ianthomas_uk commented
|Issue summary:
|View changes
|Related issues:
|+#1775842: [meta] Convert all variables to state and/or config systems
Comment #89jhodgdon CreditAttribution: jhodgdon commented
Let's keep the changes to a minimum here: switching the node rankings from variables to Config, and keeping it all in the node config. Is there really a problem if it all gets into the node config? If we made it more complicated, I think we'd have to go to a plugin system for rankings, which wouldn't be a bad idea but might be a bit out of scope for this issue.
Comment #90ianthomas_uk CreditAttribution: ianthomas_uk commented
PASSED: [[SimpleTest]]: [MySQL] 59,780 pass(es). View
Regarding #84 - yes there are hook_ranking() implementations, but I do not think they have been working since Drupal 7.x. See
#893302: Search ranking based on the factor "number of comments" & "No of Page Views" is broken
For the sake of this issue, lets assume that they work, as they are good examples of hook_ranking(). That's a worthwhile followup though.
Shouldn't they keep track of those variables in their own config objects?
I'm not sure how this would be possible, given the way NodeSearch::addNodeRankings() is working at the moment:
I think the "correct" way of fixing this for CMI would be to replace hook_ranking with hooks to add/remove rankings from a list maintained by NodeSearch. A default value could then be supplied when the ranking was added. That's outside the scope of this issue though.
Is there really a problem if it all gets into the node config?
The problems are where do defaults come from (they can't come from a yml or an install hook), and when happens when a module is uninstalled (its config should be removed automatically).
Changes in this patch:
- Upgrade functionality and tests have been removed as that will now be handled by migration.
- All known variables documented in drupal-7.system.database.php in alphabetical order for the benefit of the migration team.
- node_ranking_custom removed as that doesn't seem to be used anywhere (I think it was just there as an example that other node_ranking_* variables could be added).
- Values are now stored as integers.
- I've gone back to creating an array and foreaching when saving the variables. This means that any ranks provided by a hook_ranking() function that has since been uninstalled will be removed from the configuration.
- A default is now provided when building the admin form, as we know there will be instances where the default is not provided in the yml. This isn't best practise, so I've added a comment to stop people copying this coding style.
Test concerns from #85 are still valid but could be addressed in a followup if necessary.
Comment #92ianthomas_uk CreditAttribution: ianthomas_uk commented
PASSED: [[SimpleTest]]: [MySQL] 59,393 pass(es). View
FAILED: [[SimpleTest]]: [MySQL] Unable to apply patch interdiff-90-92.diff. Unable to apply patch. See the log in the details link for more information. View
Provided the tests pass, I think this is as good as we're going to get with the current API.
- Now aims to store all possible ranks, even if a module is not currently enabled. Previously saving the search settings page would often result in keys being added/removed to the rank array. For example, straight after an install, it would add 'comments' (because the comment module is enabled) and remove 'recent' (because cron has never run). This now saves very slightly more context, but should greatly reduce the chance of config appearing to be different when you've not changed anything.
- Improved the tests to work with whatever happens to be in the ranks array. Previously it assumed comments and views would be first, and it would only disable ranks that it knew about.
- Removed $this->nodeSearchPlugin = $this->container->get('plugin.manager.search')->createInstance('node_search'); lines. They were added in #65 without explanation, and I don't see the need for them.
- Moved the yml into the search module, since it's config for a search plugin (as indicated by the name starting search.).
Once this is committed I plan to work on some of the issues mentioned above, and may even replace hook_ranking.
Comment #94ianthomas_uk CreditAttribution: ianthomas_uk commented
|Needs work
|» Needs review
Should probably have given that a txt extension ;)
Comment #95jhodgdon CreditAttribution: jhodgdon commented
I noticed that the existing SearchRankingTest does not test setting the rankings via the UI. So I don't think we have a test that verifies that this works; in which case, it is difficult to tell whether this patch might break the UI for setting rankings.
Can we add a test for this, or modify the existing SearchRankingTest so that it uses the UI instead of Config/variable_set() to set up the rankings?
Comment #96jhodgdon CreditAttribution: jhodgdon commented
I noticed that the existing SearchRankingTest does not test setting the rankings via the UI. So I don't think we have a test that verifies that this works; in which case, it is difficult to tell whether this patch might break the UI for setting rankings.
Can we add a test for this, or modify the existing SearchRankingTest so that it uses the UI instead of Config/variable_set() to set up the rankings?
Comment #97alexpott CreditAttribution: alexpott commented
I'm not entirely happy with the approach taken by #92 for a number of reasons. Configuration is supposed to be injected into plugins to reduce dependencies - this is exactly what the previous patches were doing. The rationale for going back to just getting config inside the plugin from #81 was
This seems an odd hybrid of the two, in that it looks like you're passing in configuration, but really you're passing in a reference to the configuration, and that reference is always going to point to the same place! (NodeSearch will always be search.plugin.node_search)
Well the current approach (#92) in fact are a tighter coupling between the config object name and the plugin as it is hardcoded in the plugin.
In #72 it was injected through the plugin manager. This would have allowed a plugin to be created with a reference to any configuration object as long as it was keyed by the plugin name in the configuration array. This meant that the approach allowed the configuration of any search plugin in a consistent way. Yes it is different from the config entity approach but that was deliberate since the overhead is unnecessary since there will be a 1 to 1 relationship between plugin and config object.
Furthermore if we are going to go down the approach taken in #92 then the config factory has to be injected. But I really hope we do not.
Yes the hook_ranking is weird and complicates the patch but that is not solved by either approach.
Comment #98ianthomas_uk CreditAttribution: ianthomas_uk commented
if we are going to go down the approach taken in #92 then the config factory has to be injected.
Do you mean #92 still does this for search.settings? If so, that's #2123073: Move index.cron_limit setting to NodeSearch
Or do you mean that we need to change #92 to inject search.plugin.node_search instead of calling \Drupal::config() from the plugin? If so, is there any documentation about when you should use \Drupal::config() and when you should inject configuration?
Comment #99jhodgdon CreditAttribution: jhodgdon commented
So... I'm a bit confused.
The Search Settings page is allowing individual plugins to add settings to the page, which seems logical. Node search ranking "weights" are an example of this.
They need to be saved somewhere -- either the plugin needs to save them in configuration, or they need to go into the generic search settings configuration. Which do we think makes more sense? Whichever it is, the NodeSearch plugin at some point will need to retrieve the weights that the user has set, to form the search query.
So let's step back and make that first decision: should search plugins have their own config for their specific settings, or use the central search settings? And then we can decide how best to retrieve them (where to inject etc.). The latest patch puts them in central search settings... I can't tell whether alexpott thinks that is a good idea or not?
Comment #100alexpott CreditAttribution: alexpott commented
Plugins should definitely have their own settings. As these plugins are only active when the search module is eanbled their config file should begin with
"search.". Personally I think that this configuration should be injected into the plugins by the search plugin manager - in that way we can document and enforce a standard practice for all search plugins and all of them we will have names that make sense.
@jhodgdon afaics no patch here has tried to save the configuration to search.settings.yml
Comment #101jhodgdon CreditAttribution: jhodgdon commented
What I meant in #99 was to ask whether node.module should be handling the configuration for the NodeSearch plugin, or whether it should be part of search.module's config handling. I'm not sure I made myself clear there? Maybe.
Anyway, it sounds like #100 is advocating that all configuration from other modules' search plugins should be gathered by search.module, stored in search.module's configuration (search.settings.yml), and injected in a standard way (maybe in the constructor/create method?) into search plugins so that they have it available when they need it.
If I've correctly grasped #100, I think this is a good idea and it sounds like a good pattern to follow. Probably we'd need a method or two added to the SearchPluginBase class and the SearchPluginInterface (maybe?) to deal with this, so that the SearchPluginManager class could properly do the injection?
And I agree that none of the patches I've seen on this issue are doing this.
So if I've understood correctly... we'd have a section called maybe search.plugin.node_search or search.plugin.user_search, and the specific plugin could put anything it wants into that namespace for configuration.
Then during plugin instantiation, the SearchPluginManager could grab the search.plugin.[plugin id] section of search.settings configuration, and pass that in to the plugin to use as they see fit. There would also need to be a way for the plugin to give the settings to the search plugin manager to store, after the user updates them via the Search Settings Page or perhaps a plugin-specific config page.
Or something like that?
Comment #102ianthomas_uk CreditAttribution: ianthomas_uk commented
I can see arguments on both sides of this one.
Even if we enforce that a search plugin's settings are stored under search.plugin.*, the search can't specify the schema inside that or even what the valid values of * are, so I wonder what the benefit is. What do we do for plugins that don't actually have any configuration of their own? Should they ship with their own, empty, search.plugin.my_plugin.yml files?
Other than to expose an admin UI, there doesn't seem to be a need for plugins to expose that they support configuration, so why not encapsulate all configuration inside the plugin? (i.e. move back to node.search.yml). It doesn't seem like it needs to be part of the plugin API to me, although certain plugins may want to add their own methods to expose specific configuration (not that I can think of any examples).
@jhodgdon anything under search.* belongs to the search module. I think search.settings should only contain config from the search module directly, not extensions of the search module.
There's a related question in #2102521: Finish converting menu.module to CMI - what's the best way to provide defaults when you don't know the config structure beforehand?
Comment #103alexpott CreditAttribution: alexpott commented
@jhodgdon I was not suggesting that the node module's search plugin configuration defaults should be provided by the search module - the search.plugin.node.yml should definitely by in the node module's config folder. This means it'll only by installed when both the node and search module are enabled. Which is exactly what we want since this configuration only has meaning when both modules are enabled.
If the plugin has no configuration then there does not need to be a file - empty config files make no sense.
The schema for each plugin's config file if it has one should be provided by the module that provides the plugin and default config (in this case node).
@jhodgdon the patch in #72 is the last patch to inject config into the plugin using the search plugin manager. Which I thought was quite close to rtbc.
Comment #104jhodgdon CreditAttribution: jhodgdon commented
Ah, OK. Thanks for the extra explanation.
Comment #105ianthomas_uk CreditAttribution: ianthomas_uk commented
I agree search.plugin.node_search.yml should be moved back to the node module so that it is there if and only if node and search are both enabled (although it will remain if first both are enabled, and then node is disabled).
I'm still not convinced that the config needs to be injected rather than encapsulated though.
Injection enforces consistent naming across all search plugins, but means you can't search the source code for those names (grep search.plugin.node_search will return no results) and doesn't enforce anything for plugins of other modules. Instead, I propose we document the convention and ensure it is consistently used across core, so contrib modules copy it. We're already doing this with the module.settings convention, and even the convention that config names start with the module name.
Configuration is supposed to be injected into plugins to reduce dependencies
Is this a coding standard? What dependencies are removed by injecting configuration?
If we are going to go down the approach taken in #92 then the config factory has to be injected.
Why is this required? Can't we just use \Drupal::config()?
Injection allows a plugin to be created with a reference to any configuration object as long as it is keyed by the plugin name in the configuration array.
When would we have multiple configuration objects with the same keys? Is this for unit testing or something? The plugin will expect defaults to be provided, and we will are only doing this with one file, which has a "hard coded" file name (search.plugin.node_search.yml)
If the plugin has no configuration then there does not need to be a file - empty config files make no sense.
With the approach in #72, you'd still be creating an empty config object to inject though.
Comment #106ianthomas_uk CreditAttribution: ianthomas_uk commented
I had a chat with alexpott on IRC, to summarise we shouldn't call \Drupal::config() from a class because it makes unit testing harder, so we need to inject the config (ala #72). However, to make the patches simplier, it may be easier to provide the config object first in a separate issue, then add a follow up patch here to start using it.
Relevant chat text:
alexpott>the thing is we should have a single way to configure search plugins that's why moving the config loading to the manager makes sense
alexpott>so what we could do is split the patch into 2 issues... get the plugin config management right
alexpott>and then convert node ranking form variables
alexpott>perhaps that way it'll be easier to grok
alexpott>the search for the yml name is moot... try searching for a config entity name.
ianthomas_uk>I think to sum up, you're enforcing the config name, but not the schema or defaults.
alexpott> if we handle the injection correctly (as no patch has done this yet) we should be able to remove the plugin's dependency on the configuration system
ianthomas_uk>Searching certainly doesn't always work, but when it does it can be a big benefit. Particularly for people less familiar with the code. Not a huge issue though.
alexpott> no we should not use \Drupal::config() in classes
alexpott> it means that unit testing them - when we get round to it :) - it more difficult than it should be
alexpott> see https://portland2013.drupal.org/session/dependency-injection-drupal-8
ianthomas_uk>OK, I can see benefits in that policy, but mainly if applied consistently
alexpott>True we will be creating an empty config object with the current approach but actually that is avoidable
alexpott>we are trying to apply it consistently it has just been a challenge :)
alexpott>lots and lots of chicken and egg problems
Comment #107ianthomas_uk CreditAttribution: ianthomas_uk commented
|Needs review
|» Postponed
@jhodgson I've added a test in #2132647: Add test for the settings form of the NodeSearch plugin, so it can get committed while we're working out what to do here.
I've also split injecting configuration off into #2132649: Inject a configuration into SearchPluginBase and postponing this issue on that one.
Comment #108xjm CreditAttribution: xjm commented
Comment #109xjm CreditAttribution: xjm commented
Comment #110tim.plunkett CreditAttribution: tim.plunkett commented
|» Needs work
|Related issues:
|+#2132649: Inject a configuration into SearchPluginBase
I'm rather worried about how #2132649: Inject a configuration into SearchPluginBase will actually turn out, can we not resolve this critical/beta blocker with \Drupal::config() and work through the other issue at it's own pace?
Comment #111alexpott CreditAttribution: alexpott commented
|Needs work
|» Postponed
#110 I don't think so as the final solution probably will affect the configuration file name and maybe the structure of the data. So I agree with postponing this issue on that - thanks @ianthomas_uk for doing the issue queue work.
Comment #112alexpott CreditAttribution: alexpott commented
Comment #113ianthomas_uk CreditAttribution: ianthomas_uk commented
|» Closed (duplicate)
This was fixed by the patch for #2042807: Convert search plugins to use a ConfigEntity and a PluginBag


text:
You have to ask yourself, if each of my deer eats an average of four to six pounds of forage each day, can my native vegetation on my property sustain that much volume before it starts to suffer in quality?
More than likely the answer will be no! To help in relieving that kind of pressure, planting of food plots will keep your native browse from losing its quality that you're striving for.
Before planting of any type of food plot, you have to ask yourself, "What am I trying to accomplish with this plot"? Let me explain what I mean by this. There are what I call hunting plots and nutritional or observation plots. The two differ greatly by what species you plant to even maintenance of the plant and everything in between.


text:
Engine Mechanical problem
1993 Pontiac Grand Prix 6 cyl Front Wheel Drive Automatic 213000 miles
Car has been getting hard to start lately. Two years ago I replaced a bad fuel pump and about a year ago I replaced all the fuel injectors. My wife filled the car up and when she went to start it, it wouldn't start. My feeling is the only thing I haven't replaced is the fuel pressure regulator. I also verified that I am getting spark to the spark plugs.
have the same problem?
Tuesday, June 2nd, 2009 AT 3:23 PM


text:
If you were looking for a cool concept car, look no further. I just came across this wonderful and almost futuristic TVR Artemis which has been designed by Niels Van Roij. It is named after the Greek goddess of Hunting and the car's body is made of high quality engineering while a down force is given thanks to the under hood spoiler system.
The very same system also helps to cool down the car. The car is extremely lightweight and the slits on the body of the car are illuminated by LEDs at night. This allows approaching cars to identify the Artemis from a distance and save the occupants from disastrous car crashes.
The wheels have a rather strange design and thanks to which the car also can move along with less friction. It has a retro sci-fi look but in my opinion the car would not make it to the mass market. The reason for this is that most people would not like to drive anything that is extremely futuristic, no matter what. There is no information about its price or availability as it is still in the conceptual stage.
Via: Design Boom


text:
for donors
More than 100 years ago, Juliette Gordon Low had a dream that every girl should have the opportunity to discover her leadership role in her community. To do this, she sold her family pearls to finance Girl Scout programs.
Continuing this tradition, Girl Scouts of Central Maryland is committed to encouraging nearly 25,000 girls in Anne Arundel, Baltimore, Carroll, Harford and Howard Counties and Baltimore City to discover, connect, and take action to become our next community leaders. By making an investment in Girl Scouts of Central Maryland, you help make an immediate difference in the lives of girls.
"Girl Scouts helps me meet other girls and helps me develop leadership skills and Girl Scouts will help me in the future by preparing me to be a good scientist so I can help people."
-Esinam Kwakutsey
Girl Scout Senior
"The future of our world depends on the leadership skills we develop in girls when they are young. Women lead in their homes, at work and as mentors and role models. Being in Girl Scouts help those traits blossom within them."
-Sheela Murthy, Esq.
President & Managing Attorney, Murthy Law Firm
Chair, GSCM Board of Directors
How Your Support Adds Up
Financial contributions provide vital funding for the Council's operations, including support for volunteer training, program activities and financial aid for girls. More than 80% of GSCM's annual funds are used for program services. Here are some examples of how your gift can help:
- A gift of $15 pays one girl's annual membership fee.
- A gift of $50 covers one girl's basic supplies for the Girl Scout year, like books and a uniform.
- A gift of $100 allows an underserved Girl Scout to participate in one of our many outreach programs. Community Programs »
- A gift of $300 gives ten girls the opportunity to attend our STEM Programs where they can learn about careers in those fields. STEM Program »
- A gift of $500 gives a Girl Scout the opportunity to experience the outdoors and discover her independence at summer resident camp. GSCM Camps »
- A gift of $1,000 sponsors mentoring opportunities for high school Girl Scouts with a Distinguished Woman in central Maryland. Teen Distinguished Women Shadow»
All gifts are fully tax-deductible as allowed by law. For more information contact the Fund Development Team at firstname.lastname@example.com.


text:
What does raima mean?
Definitions for raima
Here are all the possible meanings and translations of the word raima.
Raima Inc. is a provider of high-performance, always on database technology for both in-memory database usage and persistent storage devices. The company has offices in Seattle, USA and London, UK.
Chaldean Numerology
The numerical value of raima in Chaldean Numerology is: 9
Pythagorean Numerology
The numerical value of raima in Pythagorean Numerology is: 6
Images & Illustrations of raima
Translations for raima
From our Multilingual Translation Dictionary
Get even more translations for raima »
Find a translation for the raima definition in other languages:
Select another language:
Discuss these raima definitions with the community:
Word of the Day
Would you like us to send you a FREE new word definition delivered to your inbox daily?
Use the citation below to add this definition to your bibliography:
"raima." Definitions.net. STANDS4 LLC, 2018. Web. 24 Feb. 2018. <https://www.definitions.net/definition/raima>.


text:
Monk's Trip to Stillwater for OSU-Baylor: Thoughts on the Emerging CowboysOctober 23, 2008
I was in Stillwater for OSU's homecoming festivities last weekend and the victory over Baylor. Might I add that as a Nebraska fan, I was a little intimidated. Homecoming was certainly like nothing I'd ever seen and OSU has a right to the claim of "greatest homecoming in the country."
I was born and raised in Oklahoma, so I'm familiar with the Pokes. I remember the days when they were just ridiculously awful and were a guaranteed win (like Texas A&M is now, for most D-I or D-II schools--or FCS or whatever the "less offensive" name for teams not good enough to play with the big boys unless the big boy is Michigan). I remember when the Bedlam game would be an afterthought, until OU started to suck too in the 90s.
My first visit to Stillwater, in matters of college football, was in 2006. As a Nebraska fan who still had a hope (albeit a false one) for the Huskers, I visited OSU's stadium (pre-Boone Pickens) with close OSU friends of mine for the OSU-Nebraska game. I was excited when Nebraska got up early and disappointed when Nebraska pulled a typical Callahan-era crumble in the second half to lose.
I wasn't impressed with either the stadium or the fans. The east-west alignment of the field still confounds me, the empty west end zone screamed to be occupied by an expansion (which Boone heard) and the fans were boisterous and passionate but rude and unsportsmanlike. The stadium seemed really quiet compared to Memorial Stadium in Lincoln and the Cowboys still seemed new to the whole "winning" thing.
This last trip was TOTALLY different. Stillwater has a new swagger.
The Cowboys are a national powerhouse. The fans displayed a new-found sense of sportsmanship to the Baylor fans (much better treatment than I received as a Cornhusker in foreign territory two years before that). Boone Pickens' gifts to the athletic program were very visible in the Cowboy stadium's face-lift. The west end zone, previously devoid of anything, now houses the rowdy student section and a fresh new section of stadium. It was loud and I was caught up in doing the "O-S-U" chants with the crowd.
I loved Stillwater and the entire game day environment on campus. I'm happy the Cowboys are doing well.
Times have changed. OSU is not the pushover they once were. In fact, I am not afraid at all to say that Oklahoma State is far better than almost all the teams in college football.
The first BCS rankings of the year have Oklahoma State at No. 6. I would have put them at No. 5 (come on... USC? Are you kidding? West Coast bias not obvious to ANYONE ELSE yet?), but maybe that's just me.
The Pokes have an explosive offense led by quarterback Zac Robinson, one of the best of the Big 12's powerful quarterbacks this year. His favorite target is Dez Bryant, who has gained more than 800 receiving yards and notched 11 scores.
OSU's defense is no joke, either. They are a quick and powerful force to be reckoned with and look forward to a chance to taking a crack at No. 1 Texas and that pretty-boy quarterback the Longhorns have.
I've always wondered whether OSU or OU would win as my second-favorite team. Frankly, I don't think I want to choose.


text:
ECS - Moving from Well-Formed XML to Amply-Tagged XML
by Rick Jelliffe
My company, Topologi, has been using exactly such a grammar for five years in some of our products. We use it as our HTML and SGML editing mode, its not perfect but perfectly workable in most cases. It seems to be in Ann's ballpark for an "XML 2.0".
ECS ("Editor's Concrete Syntax") takes XML and puts back the forms of end-tag minimization and close-delimiter omission (which is what Ann is calling "graceful error handling" AFAICS) that XML removed from SGML under the mantra 'terseness is of minimal importance." This moves it much closer to idiomatic HTML; it is Forgiving XML rather than Superbitch XML, and this is far more suitable for just folks to use.
32 Comments
2007-02-05 21:32:00
|What's the value of that? Just that some lazy human does not have to write those end tags? That cannot be that important... Or to save some bytes over the wire? We are in the age of broadband Internet... Webpages should be valid XHTML. We do not need yet another (useless) standard.
|Rick Jelliffe
2007-02-05 22:08:29
|Simon: Yes, I think you are right. If we could only eliminate those lazy humans, there would be nothing to stop XHTML.
2007-02-05 22:09:51
Producing well-formed XML aint that hard. I'm mystified as to wtf the point of "graceful" XML error handing is.
2007-02-05 22:23:34
|s/not-well-formed/unintentionally malformed/
|Rick Jelliffe
2007-02-05 22:57:17
Finite: Exactly the same amount of WF XML as would exist without ECS.
2007-02-05 23:11:11
|What if an XML producing human uses a tool that tolerates malformed XML, so they don't realize or do realize but don't care that they're able to produce malformedd XML, and I'm using a circa-present day XML consuming program that doesn't have the magical "transform" you speak of... hasn't the producer's application's tolerance of malformed data just made XML a lot less useful for me? I think it has!
|Philip Fennell
2007-02-06 01:52:18
|I'm affraid you have me stumped. Being a dyed-in-the-wool XML proponent, you will never be able to convince me that the ECS example has any merit. To be honest it made my stomach clench when I first read it. From a human reable perspective I don't think it scans as well as the XML example. That may appear trivial but no more so than the fewer keystrokes it took to write. Sorry, but I'm not interested.
|J David Eisenberg
2007-02-06 10:01:36
|I believe Mr. van Kesteren spells his name "Anne."
|J David Eisenbeg
2007-02-06 14:35:10
First, in the ECS spec, you say "the delimiters "<" and "&" do not need to be converted to entity references if followed by a name start character,..." Should this be "if NOT followed by a name start character"?
|Rick Jelliffe
2007-02-06 20:13:33
David: Thanks for picking up the typo in the name, I'll get it corrected. (I don't have access to change the PDF from where I am, but you are right that there is a missing "not".)
|Leigh Klotz
2007-02-06 22:53:20
|Why does nobody ever talk about the desperate need to make JavaScript syntax so much more forgiving?
|Daniel Billotte
2007-02-07 00:04:42
Hogwash! Over the last handfull of years I've had to digest all kinds of user/client generated crap XML with parsers that I have written in a number of different languages with a number of different XML libraries or without. I think that it is crazy to not just allow, but encourage, more crap. As some other posters have mentioned, most XML is machine generated so its not like using this ECS is going to save anybody from CTS. Creating more levels of vague-ness about what is "legal" and what is not will only produce more crap XML. If people are going to use it, lets keep a simple rule set and make them stick to it!
|Kurt Cagle
2007-02-08 14:48:19
|I'd also be inclined to question this. I see a far more compelling case for treating JSON as a "compact" infoset model that can be mapped to (and used by) an XML process than I do in seeing ECS gain hold. Anne's also been trying to push "forgiving" HTML for years and bypassing the W3C XML efforts as being too complicated for the average Joe, despite the fact that most HTML in this day and age is either written by people who are perfectly comfortable with XML or is autogenerated by systems that can just as easily be refactored to handle XML generation. Like much of the WhatWG "standard" (with the possible exception of Canvas) this strikes me as being a rear-guard action by a handful of developers who live in something of a fantasy world where everyone is still hand-coding their own web pages and just can't get the hang of (or are too lazy to get the hang of) making their notation well-formed and self-contained.
|John Cowanh
2008-01-07 14:38:20
|FWIW, TagSoup pretty much supports ECS. At some point I'll probably extend it to do so in full. (Plug: TagSoup 1.2 is out.)
|Rick Jelliffe
2008-01-07 22:56:59
John: Thanks for that (and thanks for all your effort in developing and maintaining TagSoup, while I am at it!)
2008-04-17 14:22:03
|Who controls the past controls the future. Who controls the present controls the past.
2008-04-17 17:19:51
|You have a beautiful website here..
2008-04-18 19:19:48
|There is nothing so easy but that it becomes difficult when you do it reluctantly.
2008-04-19 02:17:49
|Cool!!! Nice work.
2008-04-20 01:13:38
|Fear is the main source of superstition, and one of the main sources of cruelty. To conquer fear is the beginning of wisdom.
2008-04-20 02:17:01
|Intense feeling too often obscures the truth.
2008-04-21 19:17:38
|Thank you.
2008-04-23 13:31:47
|very interesting and informative
2008-04-24 19:24:20
|very interesting and informative
2008-04-25 05:20:04
|Thank you.
2008-04-26 11:21:00
|Hi... Very interesting site.
2008-04-26 15:20:26
|This is a very informative site.
2008-05-01 10:00:06
|Thank you.
2008-05-07 00:20:38
|This is a very informative site.
2008-05-08 12:54:47
|very interesting and informative
2008-05-09 12:20:39
2008-05-10 07:20:26


text:
What Causes Some to Take Action And Others Not To?
Have you ever wanted to really take action on something important to you, but consistently not been able to?
I have. It's a painful.
My biggest breakthrough on understanding why this happens came at the end of a 4-hour Extreme Entrepreneurship Tour event in Denver, CO in 2008.
The energy of the audience was perfectly aligned with all of the speakers. I asked people to raise their hand if they wanted to start a business. Everyone's hands immediately sprung up. People WANTED to take action.
So, I decided to throw in a new activity where everyone wrote down the three actions that they were going to do RIGHT AWAY in order to start their business.
Then, I asked for some people to share.
That's when I became the student and the audience became the teacher.
Not one person gave a real actionable step. Everyone shared intentions like NETWORK and BRAINSTORM, but nothing that was a real action step.
Every single person who shared needed coaching on things like:
- How to set a tangible goal.
- How to work backwards from that goal to a step they could take right away.
- How to create accountability around that action step to make sure it gets done.
- How to remove any internal or external barriers that could stop the action.
I remember being shocked and saddened at the end of the event. I realized that all of these people with amazing intentions and passion were probably not going to start a business.
That is the first time I realized that taking action is more of a way of thinking than it is a pure desire.
The great thing is that this way of thinking can be taught and learned even though it isn't in traditional education.
What concepts do you think are critical to people learning how to take action?
NEWSLETTERPlease enter your email address to receive intermittent updates.
How One Life Hack From A Self-Made Billionaire Leads To Exceptional Success
The One Thing You Should Do After Meeting Anyone New
The #1 Relationship Building Habit You Should Do Daily
Is The 70-Hour Work Week Worth The Sacrifice?
Judging Myself Against Myself Instead of Others
The Story We Are Most Afraid Of Sharing Is The Story We Need To Share The Most
How Surpassing $1 Million In Revenue Did Not Change My Life
The Hidden Power of Proactive Personal Growth
The Failure Conversation Is Broken
Personal Growth Is The Biggest Long-term Predictor of Success


text: I'm getting the 4 pc combo kit for Christmas from my wife. FWIW I'm currently using the 18v Firestorm tools. Contrary to the opinions I've seen here they performed admirably for the cost point they're at. I would have no complaints about them but am looking to upgrade to a sturdier pro model. I noticed that the part # for the hammer drill in the kit is different from the individually purchased one. R841150 is included in the combo pack and the individual one is R841151. Is thier a difference between these two products or is the # difference only an inventory control measure? Thanks John Merry Christmas!


text:
CPS student gains to make up 50% of principal evaluations
From Chicago Tribune by Noreen S. Ahmed-Ullah:
Student achievement will now account for 50 percent of the evaluations given to principals in Chicago Public Schools.
The student achievement portion of the new evaluation will be twice the minimum recommended by a 2010 state law. The remaining half of the evaluation will be based on appraisals of leadership.
If students do well compared with national standards, principals will be rewarded with bonuses and other incentives under the evaluation system. Officials, however, didn't make clear Thursday what will happen if students don't improve their scores.
"We're finally at a point where we're holding all of our team leaders to a system of accountability for academic success for our kids," said schools CEO Barbara Byrd-Bennett. "We really think that because the principal is a key lever in student achievement and one of the key levers for our advancement of our academic agenda, that people should be held to the highest standard."
The evaluations, which begin this year, will also make use of another piece of data CPS already has started collecting whether students are on track for graduation, starting in the third grade. Until now, district officials have tracked only freshmen for graduation.
read more>>


text:
Skip Navigation
Log in with username/password
Log in with Facebook
CamWhich has the best camera recommendations, and can help you answer the question Which Camera Should I Buy? with cameras at every price point and category.
No comments yet.
Be the first to comment on this photo!
To comment on photos, you need to login first.
Have you forgotten your username or password? Retrieve Your Login Details


text:
Responding to a crisis unprecedented in this nation's history, Pentagon officials announced yesterday that the US Naval Special Warfare Command has dispatched SEAL teams on a mission to kill award-winning actor Morgan Freeman.
"The terror Freeman represents will end once and for all," Defense Secretary Leon Panetta vowed during a press announcement. "The world needs to know that America will stand up to its enemies and silence their soothing baritone voices of evil." Analysts agree that a high-profile announcement of this kind of mission is unheard of. But then again, so is the situation faced by policymakers.
"For years, we've speculated we could reach the Freeman Point," political commentator William Kristol said on Fox News this morning. "It seemed crazy when they first came up with it. But here we are, man. Here we goddamn are." A 2006 Heritage Foundation report predicted that as the percentage of Americans with basic knowledge of history, geography, and politics declined, and the number of countries which American forces intervened in or occupied rose (See chart at left), the country would reach a theoretical point of convergence when most people began to think the entire world was simply part of an ongoing US civil war.
At this time, the document speculated, the celebrated Ken Burns documentary on the subject would suddenly appear to be some kind of contemporaneous news report, and the once-mellow and inviting voice of Morgan Freeman featured in it would seem to turn sinister, as if Freeman were some kind of hostile warlord issuing threats against civilians.
"The administration will be forced to scale back military interventions and drastically improve US educational standards to bring our policies and the competence of our citizenry back into some kind of relationship with each other," the report concluded. "The only possible alternative would be to conduct an ill-advised, unconstitutional military operation against a beloved entertainer. Americans would simply never stand for it."
"I've said it before, and I'll say it again: Morgan Freeman needs to get shot in the face," said Ann Coulter at a rally to support US troops. "He sucked in Lethal Weapon, and now he's going to pay for it."
Still the administration has faced some criticism for its decision.
"When Paul Revere jumped down off that helicopter and killed King George, they weren't afraid to release the pictures," Sarah Palin said during a radio interview. "But this president wants to keep them hidden. He did when we killed Saddam and sadly, that's how it's going to be with Tom Friedman." Callers seemed to agree.
"How are we going to know about it if that shit's not on Youtube?" asked one man. "I need to keep up with all the stuff we're doing."
(Note: Picture of Freeman taken from larger image by David Sifry and used under Creative Commons license; Information here.)
With Apologies to Oscar Brown, Jr. - …no reason! On her way to work one morning Down the path alongside the lake A tender-hearted woman saw … Continue reading →


text:
I am using the Twenty Eleven template and I have a picture in the Main Title which is positioned against the left side of the page. I would like to place a small GIF to the right side of the Main Title. Is that possible and if so, once I determine the size of space available, how do I put it up there?
The blog I need help with is monaleasaa.wordpress.com.


text:
Mason Garners NCAS Award for Degree Completion
Posted: February 15, 2002 at 1:00 am, Last Updated: November 30, -0001 at 12:00 am
George Mason has received an award from the National Consortium for Academics and Sports (NCAS) for the Degree Completion Program and Community Service and Outreach. Nena Rogers, life skills coordinator in the Athletics Department, accepted the award during NCAS' national conference on Feb. 12 at the Disney Wide World of Sports Complex in Orlando, Fla.
The Degree Completion Program allows former student-athletes to complete their education in exchange for community service. In the past 16 years, 19,760 students have returned to schools to complete their degrees, including more than 10,000 former student-athletes, 171 Olympians, and more than 6,000 professional athletes. NCAS schools have donated $130 million in tuition fees for student-athletes to complete their degrees since 1985.
Students participating in the program speak to young people on issues of race, ethnicity, violence prevention, being role models, drug and alcohol abuse, staying in school, and academic success. Collectively, they have performed 8.3 million hours of community service.
"We are very proud of the success that our Life Skills and Academic Resource programs have had as an outreach for our student-athletes in leadership development and community service," says Tom O'Connor, director of athletics.


text:
WOULD-BE groom Umar Mohammed was laid to rest on Thursday.
Mohammed drowned in waters off Mayaro on Sunday and his body washed ashore on Tuesday, the very day he was to take his marriage vows.
A funeral service was held for Mohammed, 34, an information technology student, at the Munroe Road Masjid in Cunupia.
The body was interred at Munroe Road Public Cemetery.
Mohammed had gone to the beach on Sunday with his fiancee, Abigail Agard, and he told her he was going for a swim. She described the water as "rough".
After several minutes, he vanished.
Mohammed was UK-born, but lived in his grandmother's house in Ganagaram Branch Trace, Torrib Trace, New Grant. His parents and five siblings reside in London, England.
Zorina Mohammed said her nephew was looking forward to exchanging his marriage vows with Agard, and had told his family he loved her very much.
Agard said Mohammed was "kind and loyal" to her, and minutes before he disappeared they spoke of their impending marriage, honeymoon in Tobago and their future together.


text:
Where are all the new games they used to come out frequently, it appears that they have been coming out less frequently after the last stand two. I mean am i wrong.
When games take a while it means that we are usually working on larger projects. For example, I am probably going to have a game done by the end of the week and will release sometime after.You can usually check out the blog or twitter feeds for more info.
Thread is locked!
We strive to deliver the best gaming experiences on the internet and on your mobile phone. Play thousands of free online games, get access to free mmorpg games, online rpg games, fun online flash games, and more.
We offer free flash games in many different genres: online shooting games, online puzzle games, online war games, free online car games, free online hidden object games and dozens more.
This is the best place on the web to play online games for free! No matter what game style you prefer, we've got it here.
Want to advertise on Armor Games? Send us a note!
Gaming websites, passionate bloggers, and quirky streamers are welcome to share or review our games. If you need game keys, art, trailers, screenshots or more check out our
press kit website.
Game developer? Visit developers.armorgames.com to request AG developer status, find documentation on our APIs, and get access to our development environment. Let's make sweet, sweet games together.
Looking for a publishing partner that can help your app rocket to success? Contact the mobile team to learn more about how we can help!


text:
A team of archaeologists preparing the way for a new rail operations centre have unearthed the remains of a Victorian train factory buried deep underground.
They have been digging up a patch of land in Gorton where the Ashbury's Carriage and Iron Company stood– whose workers once fired the great age of steam.
Network Rail is replacing its old signal boxes with new operations centres – and one of them will be built at the site, next to Ashbury's station in Gorton.
Archaeologists from environmental firm SLR Consulting have been investigating the site on Network Rail's behalf and have found the old train factory's original furnaces.
They are now searching for documents and photographs about the site and want to speak to anyone who may have more information.
Laurence Hayes, from SLR, said: "Lots of big companies have archives, but we've found this isn't the case with Ashbury's.
"We are trying to find out more about the factory and would love to hear from anyone who had relatives or ancestors working there and who may have documents or photographs."
The Ashbury's company opened its factory at the site in 1841 – less than a decade after the opening of the world's first railway between Liverpool and Manchester.
It soon became famous for producing railway carriages, trams, wagons and even bridges, with some of them being exported as far afield as India.
The carriage and iron works expanded throughout the 19th and early 20th century, and was eventually merged with a number of other companies.
It closed in 1925 and production was moved to Birmingham. The site was cleared to become a goods depot for the London North Eastern Railway. Some of Ashbury's carriages are still running on heritage railways.
The excavation has exposed the furnaces where those carriages were born – and some of the clay pipes smoked by the workers.
Laurence said: "We've found some excellent examples of furnaces that show the evolution of iron and steel manufacture in the late 19th and early 20th centuries.
"The process is well documented, but what you don't usually get to see is how those furnaces were built."
Anyone with information can contact firstname.lastname@example.com.


text:
This week we celebrate World of Warcraft's tenth anniversary with everyone's favorite Hunter BigRedKitty. We talk to BRK about how he got his start with WoW and his blog. We reminisce about the original Molten Core and Southshore v. Tarren Mill.
We also discuss Warlords of Draenor and give you tips on what you can do gear up and prepare for the Highmaul raid which opens it's doors on December 2nd.
BigRedKitty recently published his Airman Howell stories from BigRedKitty.net. They're very entertaining, and you can find them here.
The show is broadcast live on Twitch TV. In addition to the live show you can find it at,
Thanks for listening!
Episode 205: WoW Turns Ten with BRK